]> arthur.barton.de Git - netatalk.git/commitdiff
Proper check whether code runs in an AFP session context or not
authorFrank Lahm <franklahm@googlemail.com>
Mon, 2 Apr 2012 11:57:53 +0000 (13:57 +0200)
committerFrank Lahm <franklahm@googlemail.com>
Mon, 2 Apr 2012 11:57:53 +0000 (13:57 +0200)
include/atalk/globals.h
libatalk/dsi/dsi_getsess.c
libatalk/util/netatalk_conf.c

index e1aca81491f28c871558862141267e37d03ec61e..e34f4ee829e33ccef3842880511c89abfb08a863 100644 (file)
@@ -50,6 +50,8 @@
 #define PASSWD_NOSAVE  (1 << 1)
 #define PASSWD_ALL     (PASSWD_SET | PASSWD_NOSAVE)
 
+#define IS_AFP_SESSION(obj) ((obj)->dsi && (obj)->dsi->serversock == -1)
+
 /**********************************************************************************************
  * Ini config sections
  **********************************************************************************************/
index 5debd0377881372fdccad8402dfc208de0a60a82..7c668ec8a62cd3e7c921ad9666d07d0661a37901 100644 (file)
@@ -81,6 +81,7 @@ afp_child_t *dsi_getsession(DSI *dsi, server_child *serv_children, int tickleval
 
   /* get rid of some stuff */
   close(dsi->serversock);
+  dsi->serversock = -1;
   server_child_free(serv_children); 
 
   switch (dsi->header.dsi_command) {
index f963fbf0f1a343c12093cfef5c942e30c2aea99c..a75ded21b552486f505da5e87bcc5fb5f624053a 100644 (file)
@@ -333,15 +333,14 @@ static char *volxlate(const AFPObj *obj,
                     q++;
             }
         } else if (IS_VAR(p, "$c")) {
-            DSI *dsi = obj->dsi;
-            if (obj->username[0]) {
+            if (IS_AFP_SESSION(obj)) {
+                DSI *dsi = obj->dsi;
                 len = sprintf(dest, "%s:%u",
                               getip_string((struct sockaddr *)&dsi->client),
                               getip_port((struct sockaddr *)&dsi->client));
-            } else {
+                dest += len;
+                destlen -= len;
             }
-            dest += len;
-            destlen -= len;
         } else if (IS_VAR(p, "$d")) {
             q = path;
         } else if (pwd && IS_VAR(p, "$f")) {
@@ -970,7 +969,7 @@ static int readvolfile(AFPObj *obj, const struct passwd *pwent)
             continue;
         if (STRCMP(secname, ==, INISEC_HOMES)) {
             have_uservol = 1;
-            if (obj->username[0] == 0
+            if (!IS_AFP_SESSION(obj)
                 || strcmp(obj->username, obj->options.guest) == 0)
                 /* not an AFP session, but cnid daemon, dbd or ad util, or guest login */
                 continue;
@@ -1322,6 +1321,7 @@ struct vol *getvolbypath(AFPObj *obj, const char *path)
         subpath = prw;
 
     strlcat(tmpbuf, user, MAXPATHLEN);
+    strlcat(obj->username, user, MAXUSERLEN);
     strlcat(tmpbuf, "/", MAXPATHLEN);
 
     /* (6) */