]> arthur.barton.de Git - netatalk.git/commitdiff
Merge 2-2
authorFrank Lahm <franklahm@googlemail.com>
Thu, 26 Apr 2012 13:59:43 +0000 (15:59 +0200)
committerFrank Lahm <franklahm@googlemail.com>
Thu, 26 Apr 2012 13:59:43 +0000 (15:59 +0200)
NEWS
libatalk/dsi/dsi_getsess.c
libatalk/util/server_child.c

diff --git a/NEWS b/NEWS
index 7681bc2b25a77531151227ed5a66d9dddf77131a..d73830c7b1f152241fd9016693377d636ecbb4b4 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -75,6 +75,8 @@ Changes in 2.2.3
 * FIX: afpd: Dont use searchdb when doing partial name search
 * FIX: afpd: Fix a possible bug handling disconnected sessions,
        NetAFP Bug ID #16
+* FIX: afpd: Close IPC fds in afpd session child inherited from the afpd
+       master process
 * FIX: dbd: Don't remove BerkeleyDB if it's still in use by eg cnid_dbd, fixes
        bug introduced in 2.2.2
 * FIX: debian initscript: start avahi-daemon (if available) before atalkd
index 7c668ec8a62cd3e7c921ad9666d07d0661a37901..8d6e544cdbc5d620d725abf70a158127b0ebf4b2 100644 (file)
@@ -64,6 +64,7 @@ afp_child_t *dsi_getsession(DSI *dsi, server_child *serv_children, int tickleval
       dsi->header.dsi_code = DSIERR_OK;
       kill(pid, SIGQUIT);
     }
+    close(ipc_fds[1]);
     dsi->proto_close(dsi);
     return child;
   }
@@ -80,6 +81,7 @@ afp_child_t *dsi_getsession(DSI *dsi, server_child *serv_children, int tickleval
   }
 
   /* get rid of some stuff */
+  close(ipc_fds[0]);
   close(dsi->serversock);
   dsi->serversock = -1;
   server_child_free(serv_children); 
index 59c8c7e5de657d2b0b84524e4ffc1133fb924cdc..b4bc3542acf562731539744a20f7f1136f718d68 100644 (file)
@@ -199,6 +199,7 @@ void server_child_free(server_child *children)
     server_child_fork *fork;
     struct server_child_data *child, *tmp;
     int i, j;
+    pid_t pid = getpid();
 
     for (i = 0; i < children->nforks; i++) {
         fork = (server_child_fork *) children->fork + i;
@@ -206,6 +207,9 @@ void server_child_free(server_child *children)
             child = fork->table[j]; /* start at the beginning */
             while (child) {
                 tmp = child->next;
+
+                if (child->ipc_fds[0] != -1)
+                    close(child->ipc_fds[0]);
                 if (child->clientid) {
                     free(child->clientid);
                 }