#include "ircd.h"
#include "numeric.h"
#include "packet.h"
-#include "s_auth.h"
+#include "authproc.h"
#include "s_conf.h"
#include "s_newconf.h"
#include "logger.h"
#include "hook.h"
#include "msg.h"
#include "monitor.h"
-#include "blacklist.h"
#include "reject.h"
#include "scache.h"
#include "rb_dictionary.h"
#include "sslproc.h"
+#include "wsproc.h"
#include "s_assert.h"
#define DEBUG_EXITED_CLIENTS
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;
}
void
free_pre_client(struct Client *client_p)
{
- struct Blacklist *blptr;
-
s_assert(NULL != client_p);
if(client_p->preClient == NULL)
return;
- blptr = client_p->preClient->dnsbl_listed;
- if (blptr != NULL)
- unref_blacklist(blptr);
- s_assert(rb_dlink_list_length(&client_p->preClient->dnsbl_queries) == 0);
+ s_assert(client_p->preClient->auth.cid == 0);
+
+ rb_free(client_p->preClient->auth.data);
+ rb_free(client_p->preClient->auth.reason);
rb_bh_free(pclient_heap, client_p->preClient);
client_p->preClient = NULL;
if (client_p->localClient->privset)
privilegeset_unref(client_p->localClient->privset);
- if(IsSSL(client_p))
- ssld_decrement_clicount(client_p->localClient->ssl_ctl);
+ 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);
+ 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);
rb_bh_free(lclient_heap, client_p->localClient);
client_p->localClient = NULL;
}
-void
+static void
free_client(struct Client *client_p)
{
s_assert(NULL != client_p);
if(IsDead(client_p) || IsClosing(client_p))
continue;
- /* still has DNSbls to validate against */
- if(client_p->preClient != NULL &&
- rb_dlink_list_length(&client_p->preClient->dnsbl_queries) > 0)
+ /* Still querying with authd */
+ if(client_p->preClient != NULL && client_p->preClient->auth.cid != 0)
continue;
/*
{
s_assert(0);
sendto_realops_snomask(SNO_GENERAL, L_ALL,
- "On abort_list: %s stat: %u flags: %u/%u handler: %c",
+ "On abort_list: %s stat: %u flags: %llu handler: %c",
target_p->name, (unsigned int) target_p->status,
- target_p->flags, target_p->flags2, target_p->handler);
+ (unsigned long long)target_p->flags, target_p->handler);
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"Please report this to the charybdis developers!");
found++;
{
s_assert(0);
sendto_realops_snomask(SNO_GENERAL, L_ALL,
- "On dead_list: %s stat: %u flags: %u/%u handler: %c",
+ "On dead_list: %s stat: %u flags: %llu handler: %c",
abt->client->name, (unsigned int) abt->client->status,
- abt->client->flags, abt->client->flags2, abt->client->handler);
+ (unsigned long long)abt->client->flags, abt->client->handler);
sendto_realops_snomask(SNO_GENERAL, L_ALL,
"Please report this to the charybdis developers!");
continue;
*/
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)
{
- delete_auth_queries(source_p);
- abort_blacklist_queries(source_p);
+ authd_abort_client(source_p);
rb_dlinkDelete(&source_p->localClient->tnode, &unknown_list);
if(!IsIOError(source_p))
snprintf(newcomment, sizeof(newcomment), "by %s: %s",
from->name, comment);
- if(source_p->serv != NULL)
- remove_dependents(client_p, source_p, from, IsPerson(from) ? newcomment : comment, comment1);
+ remove_dependents(client_p, source_p, from, IsPerson(from) ? newcomment : comment, comment1);
- if(source_p->servptr && source_p->servptr->serv)
- rb_dlinkDelete(&source_p->lnode, &source_p->servptr->serv->servers);
- else
- s_assert(0);
+ rb_dlinkDelete(&source_p->lnode, &source_p->servptr->serv->servers);
rb_dlinkFindDestroy(source_p, &global_serv_list);
target_p = source_p->from;
del_from_client_hash(source_p->name, source_p);
remove_client_from_list(source_p);
+
scache_split(source_p->serv->nameinfo);
SetDead(source_p);