diff --git a/include/h.h b/include/h.h index d1e1e714b..8e0433da7 100644 --- a/include/h.h +++ b/include/h.h @@ -150,7 +150,7 @@ extern MODVAR int R_do_dns, R_fin_dns, R_fin_dnsc, R_fail_dns, R_do_id, R_fin_id, R_fail_id; #endif -extern MODVAR struct list_head client_list, lclient_list, server_list, oper_list; +extern MODVAR struct list_head client_list, lclient_list, server_list, oper_list, unknown_list; extern inline aCommand *find_Command(char *cmd, short token, int flags); extern aCommand *find_Command_simple(char *cmd); extern aChannel *find_channel(char *, aChannel *); diff --git a/src/list.c b/src/list.c index 68d6c83d6..2d6009a2f 100644 --- a/src/list.c +++ b/src/list.c @@ -72,7 +72,7 @@ MODVAR MembershipL *freemembershipL = NULL; MODVAR int numclients = 0; /* unless documented otherwise, these are all local-only, except client_list. */ -MODVAR struct list_head client_list, lclient_list, server_list, oper_list; +MODVAR struct list_head client_list, lclient_list, server_list, oper_list, unknown_list; void initlists(void) { @@ -89,6 +89,7 @@ void initlists(void) INIT_LIST_HEAD(&lclient_list); INIT_LIST_HEAD(&server_list); INIT_LIST_HEAD(&oper_list); + INIT_LIST_HEAD(&unknown_list); } void outofmemory(void) @@ -155,6 +156,8 @@ aClient *make_client(aClient *from, aClient *servr) cptr->buffer[0] = '\0'; cptr->authfd = -1; cptr->fd = -1; + + list_add(&cptr->lclient_node, &unknown_list); } else { cptr->fd = -256; } @@ -357,9 +360,6 @@ void remove_client_from_list(aClient *cptr) void add_client_to_list(aClient *cptr) { list_add(&cptr->client_node, &client_list); - - if (MyConnect(cptr)) - list_add(&cptr->lclient_node, &lclient_list); } /* diff --git a/src/modules/m_nick.c b/src/modules/m_nick.c index 672b059af..535077c2a 100644 --- a/src/modules/m_nick.c +++ b/src/modules/m_nick.c @@ -1059,6 +1059,8 @@ int _register_user(aClient *cptr, aClient *sptr, char *nick, char *username, cha snprintf(descbuf, sizeof descbuf, "Client: %s", nick); fd_desc(sptr->fd, descbuf); + list_move(&sptr->lclient_node, &lclient_list); + IRCstats.unknown--; IRCstats.me_clients++; if (IsHidden(sptr)) diff --git a/src/modules/m_server.c b/src/modules/m_server.c index 8180e94cc..d3bd76853 100644 --- a/src/modules/m_server.c +++ b/src/modules/m_server.c @@ -761,6 +761,7 @@ int m_server_synch(aClient *cptr, long numeric, ConfigItem_link *aconf) IRCstats.me_servers++; IRCstats.servers++; IRCstats.unknown--; + list_move(&acptr->lclient_node, &lclient_list); list_add(&cptr->special_node, &server_list); if ((Find_uline(cptr->name))) cptr->flags |= FLAGS_ULINE; diff --git a/src/s_bsd.c b/src/s_bsd.c index 44d8779c0..85fb44fe8 100644 --- a/src/s_bsd.c +++ b/src/s_bsd.c @@ -1362,6 +1362,7 @@ void start_of_normal_client_handshake(aClient *acptr) struct hostent *he; acptr->status = STAT_UNKNOWN; + list_add(&acptr->special_node, &unknown_list); RunHook(HOOKTYPE_HANDSHAKE, acptr);