From: Wilfried Goesgens Date: Sun, 10 Jun 2012 12:47:29 +0000 (+0200) Subject: Networker: also register STOP hook, so if sessions are timed out or killed the NTT... X-Git-Tag: v8.12~24 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=490e0477370adc9442795c682963b931abdebf8d Networker: also register STOP hook, so if sessions are timed out or killed the NTT-List is cleaned up. --- diff --git a/citadel/modules/network/serv_netconfig.c b/citadel/modules/network/serv_netconfig.c index cfcc20b6f..f0f487d17 100644 --- a/citadel/modules/network/serv_netconfig.c +++ b/citadel/modules/network/serv_netconfig.c @@ -352,7 +352,6 @@ int is_valid_node(const StrBuf **nexthop, } - void cmd_gnet(char *argbuf) { char filename[PATH_MAX]; @@ -467,8 +466,9 @@ void cmd_snet(char *argbuf) { */ void cmd_netp(char *cmdbuf) { + struct CitContext *CCC = CC; HashList *working_ignetcfg; - char node[256]; + char *node; StrBuf *NodeStr; long nodelen; char pass[256]; @@ -479,8 +479,9 @@ void cmd_netp(char *cmdbuf) char err_buf[SIZ] = ""; /* Authenticate */ - nodelen = extract_token(node, cmdbuf, 0, '|', sizeof node); - extract_token(pass, cmdbuf, 1, '|', sizeof pass); + node = CCC->curr_user; + nodelen = extract_token(CCC->curr_user, cmdbuf, 0, '|', sizeof CCC->curr_user); + extract_token(CCC->user.password, cmdbuf, 1, '|', sizeof pass); NodeStr = NewStrBufPlain(node, nodelen); /* load the IGnet Configuration to check node validity */ working_ignetcfg = load_ignetcfg(); @@ -518,9 +519,8 @@ void cmd_netp(char *cmdbuf) FreeStrBuf(&NodeStr); return; } - - safestrncpy(CC->net_node, node, sizeof CC->net_node); - network_talking_to(node, nodelen, NTT_ADD); + nodelen = safestrncpy(CC->net_node, node, sizeof CC->net_node); + network_talking_to(CC->net_node, nodelen, NTT_ADD); syslog(LOG_NOTICE, "Network node <%s> logged in from %s [%s]\n", CC->net_node, CC->cs_host, CC->cs_addr ); diff --git a/citadel/modules/network/serv_network.c b/citadel/modules/network/serv_network.c index a0e821557..2dc58dacf 100644 --- a/citadel/modules/network/serv_network.c +++ b/citadel/modules/network/serv_network.c @@ -693,8 +693,19 @@ void network_logout_hook(void) */ if (!IsEmptyStr(CCC->net_node)) { network_talking_to(CCC->net_node, strlen(CCC->net_node), NTT_REMOVE); + CCC->net_node[0] = '\0'; } } +void network_cleanup_function(void) +{ + struct CitContext *CCC = CC; + + if (!IsEmptyStr(CCC->net_node)) { + network_talking_to(CCC->net_node, strlen(CCC->net_node), NTT_REMOVE); + CCC->net_node[0] = '\0'; + } +} + /* * Module entry point @@ -710,6 +721,7 @@ CTDL_MODULE_INIT(network) { CtdlRegisterDebugFlagHook(HKEY("networktalkingto"), SetNTTDebugEnabled, &NTTDebugEnabled); CtdlRegisterCleanupHook(cleanup_nttlist); + CtdlRegisterSessionHook(network_cleanup_function, EVT_STOP); CtdlRegisterSessionHook(network_logout_hook, EVT_LOGOUT); CtdlRegisterProtoHook(cmd_nsyn, "NSYN", "Synchronize room to node"); CtdlRegisterRoomHook(network_room_handler);