Make {hub,peer}cmds static as they should be.
[doldaconnect.git] / daemon / ui.c
index fd5601f..b3a514d 100644 (file)
@@ -144,7 +144,7 @@ struct uidata
     size_t inbufsize, indata;
     /* Wordset storage */
     wchar_t **argv;
-    int argc, args;
+    size_t argc, args;
     /* WCS conversation stuff */
     wchar_t *cb; /* Conversation buffer */
     size_t cbsize, cbdata;
@@ -571,6 +571,11 @@ static void cmd_fnetconnect(struct socket *sk, struct uidata *data, int argc, wc
     
     haveargs(3);
     havepriv(PERM_FNETCTL);
+    for(i = 0, fn = fnetnodes; fn != NULL; i++, fn = fn->next);
+    if((confgetint("fnet", "maxnodes") > 0) && (i >= confgetint("fnet", "maxnodes"))) {
+       sq(sk, 0, L"515", L"Too many fnetnodes connected already", NULL);
+       return;
+    }
     if((buf = icwcstombs(argv[2], NULL)) == NULL)
     {
        sq(sk, 0, L"504", L"Could not convert data to locale charset", NULL);
@@ -592,8 +597,8 @@ static void cmd_fnetconnect(struct socket *sk, struct uidata *data, int argc, wc
     }
     linkfnetnode(fn);
     fnetsetname(fn, argv[2]);
+    sq(sk, 0, L"200", L"%%i", fn->id, L"Connection under way", NULL);
     putfnetnode(fn);
-    sq(sk, 0, L"200", L"Connection under way", NULL);
 }
 
 static void cmd_lsnodes(struct socket *sk, struct uidata *data, int argc, wchar_t **argv)
@@ -1119,7 +1124,7 @@ static void cmd_filtercmd(struct socket *sk, struct uidata *data, int argc, wcha
        sq(sk, 0, L"505", L"System error - Could not fork session", "Internal error", NULL);
        return;
     }
-    if((filtercmd = findfile(icswcstombs(confgetstr("ui", "filtercmd"), NULL, NULL), "dcdl-filtercmd", pwent->pw_dir)) == NULL)
+    if((filtercmd = findfile(icswcstombs(confgetstr("ui", "filtercmd"), NULL, NULL), "dcdl-filtercmd", pwent->pw_dir, 0)) == NULL)
     {
        flog(LOG_WARNING, "could not find filtercmd executable for user %s", pwent->pw_name);
        sq(sk, 0, L"505", L"System error - Could not fork session", L"Could not find filtercmd executable", NULL);
@@ -1924,7 +1929,7 @@ static int transferdestroyed(struct transfer *transfer, void *uudata)
     for(data = actives; data != NULL; data = data->next)
     {
        if(haspriv(data, PERM_TRANS) && data->notify.b.tract && ((transfer->owner == 0) || (transfer->owner == data->uid)))
-           newnotif(data, 617, NOTIF_ID, transfer->id, NOTIF_END);
+           newnotif(data, 617, NOTIF_ID, transfer->id, NOTIF_STR, (transfer->exitstatus == NULL)?L"":(transfer->exitstatus), NOTIF_END);
     }
     return(0);
 }
@@ -2038,41 +2043,11 @@ static void preinit(int hup)
     }
 }
 
-#ifdef HAVE_IPV6
-static struct sockaddr *getnameforport(int port, socklen_t *len)
-{
-    static struct sockaddr_in6 addr;
-    
-    memset(&addr, 0, sizeof(addr));
-    addr.sin6_family = AF_INET6;
-    addr.sin6_port = htons(port);
-    addr.sin6_addr = in6addr_any;
-    if(len != NULL)
-       *len = sizeof(addr);
-    return((struct sockaddr *)&addr);
-}
-#else
-static struct sockaddr *getnameforport(int port, socklen_t *len)
-{
-    static struct sockaddr_in addr;
-    
-    memset(&addr, 0, sizeof(addr));
-    addr.sin_family = AF_INET;
-    addr.sin_port = htons(port);
-    if(len != NULL)
-       *len = sizeof(addr);
-    return((struct sockaddr *)&addr);
-}
-#endif
-
 static int portupdate(struct configvar *var, void *uudata)
 {
-    struct sockaddr *addr;
-    socklen_t addrlen;
     struct socket *newsock;
     
-    addr = getnameforport(var->val.num, &addrlen);
-    if((uisocket = netcslistenlocal(SOCK_STREAM, addr, addrlen, uiaccept, NULL)) == NULL)
+    if((uisocket = netcstcplisten(var->val.num, 1, uiaccept, NULL)) == NULL)
     {
        flog(LOG_WARNING, "could not create new UI socket, reverting to old: %s", strerror(errno));
        return(0);
@@ -2085,8 +2060,6 @@ static int portupdate(struct configvar *var, void *uudata)
 
 static int init(int hup)
 {
-    struct sockaddr *addr;
-    socklen_t addrlen;
     struct uiuser *user, *next;
     
     if(hup)
@@ -2102,8 +2075,7 @@ static int init(int hup)
     {
        if(uisocket != NULL)
            putsock(uisocket);
-       addr = getnameforport(confgetint("ui", "port"), &addrlen);
-       if((uisocket = netcslistenlocal(SOCK_STREAM, addr, addrlen, uiaccept, NULL)) == NULL)
+       if((uisocket = netcstcplisten(confgetint("ui", "port"), 1, uiaccept, NULL)) == NULL)
        {
            flog(LOG_CRIT, "could not create UI socket: %s", strerror(errno));
            return(1);