uint32_t
connid_get(struct Client *client_p)
{
- s_assert(MyClient(client_p));
- if (!MyClient(client_p))
+ s_assert(MyConnect(client_p));
+ if (!MyConnect(client_p))
return 0;
/* find a connid that is available */
{
rb_dlink_node *ptr, *ptr2;
- s_assert(MyClient(client_p));
- if (!MyClient(client_p))
+ if (client_p->localClient->connids.head)
+ s_assert(MyConnect(client_p));
+
+ if (!MyConnect(client_p))
return;
RB_DLINK_FOREACH_SAFE(ptr, ptr2, client_p->localClient->connids.head)
}
SetUnknown(client_p);
- strcpy(client_p->username, "unknown");
+ rb_strlcpy(client_p->username, "unknown", sizeof(client_p->username));
return client_p;
}
if (IsSSL(client_p))
ssld_decrement_clicount(client_p->localClient->ssl_ctl);
+ rb_free(client_p->localClient->cipher_string);
+
if (IsCapable(client_p, CAP_ZIP))
ssld_decrement_clicount(client_p->localClient->z_ctl);
+ rb_free(client_p->localClient->zipstats);
+
if (client_p->localClient->ws_ctl != NULL)
wsockd_decrement_clicount(client_p->localClient->ws_ctl);
client_p->localClient = NULL;
}
-void
+static void
free_client(struct Client *client_p)
{
s_assert(NULL != client_p);
*/
static int
-exit_unknown_client(struct Client *client_p, struct Client *source_p, struct Client *from,
- const char *comment)
+exit_unknown_client(struct Client *client_p, /* The local client originating the
+ * exit or NULL, if this exit is
+ * generated by this server for
+ * internal reasons.
+ * This will not get any of the
+ * generated messages. */
+ struct Client *source_p, /* Client exiting */
+ struct Client *from, /* Client firing off this Exit,
+ * never NULL! */
+ const char *comment)
{
- authd_abort_client(client_p);
+ authd_abort_client(source_p);
rb_dlinkDelete(&source_p->localClient->tnode, &unknown_list);
if(!IsIOError(source_p))