]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/network/serv_netconfig.c
NETP: extract password string when we need it. else it might be overwritten meanwhile.
[citadel.git] / citadel / modules / network / serv_netconfig.c
index cfcc20b6f84ca3fee5b678a3eb2387adfa6dadbe..c5c457adc7dc58a33044ee631a8b8736504c3858 100644 (file)
@@ -352,7 +352,6 @@ int is_valid_node(const StrBuf **nexthop,
 }
 
 
-
 void cmd_gnet(char *argbuf)
 {
        char filename[PATH_MAX];
@@ -467,11 +466,11 @@ 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];
        int v;
 
        const StrBuf *secret = NULL;
@@ -479,8 +478,8 @@ 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);
        NodeStr = NewStrBufPlain(node, nodelen);
        /* load the IGnet Configuration to check node validity */
        working_ignetcfg = load_ignetcfg();
@@ -498,7 +497,8 @@ void cmd_netp(char *cmdbuf)
                return;
        }
 
-       if (strcasecmp(pass, ChrPtr(secret))) {
+       extract_token(CCC->user.password, cmdbuf, 1, '|', sizeof CCC->user.password);
+       if (strcasecmp(CCC->user.password, ChrPtr(secret))) {
                snprintf(err_buf, sizeof err_buf,
                        "A Citadel server at %s [%s] failed to authenticate as network node \"%s\".\n",
                        CC->cs_host, CC->cs_addr, node
@@ -518,9 +518,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
        );