]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/idmapd/idmapd.c
Assorted changes from Steve Dickson
[nfs-utils.git] / utils / idmapd / idmapd.c
index b1da786455c40a8bc1c2a691bfa3c1109056ea43..3be8148e537eeb35e88e0e28dd94df4f75609a17 100644 (file)
@@ -91,8 +91,8 @@
                (w) = p;                        \
 } while (0)
 
-#define IC_IDNAME 1
-#define IC_NAMEID 2
+#define IC_IDNAME 0
+#define IC_NAMEID 1
 struct idmap_client {
        int                        ic_fd;
        int                        ic_dirfd;
@@ -622,8 +622,8 @@ nfsdreopen()
 static int
 nfsdopen(char *path)
 {
-       return ((nfsdopenone(&nfsd_ic[0], IC_NAMEID, path) == 0 &&
-                   nfsdopenone(&nfsd_ic[1], IC_IDNAME, path) == 0) ? 0 : -1);
+       return ((nfsdopenone(&nfsd_ic[IC_NAMEID], IC_NAMEID, path) == 0 &&
+                   nfsdopenone(&nfsd_ic[IC_IDNAME], IC_IDNAME, path) == 0) ? 0 : -1);
 }
 
 static int
@@ -714,9 +714,7 @@ idtonameres(struct idmap_msg *im)
                                        sizeof(im->im_name));
                break;
        }
-       /* XXX Hack? would rather return failure instead of writing nobody
-        * as above, but kernel seems not to deal well with that as of
-        * 2.6.8-rc3. */
+       /* XXX Hack? */
        im->im_status = IDMAP_STATUS_SUCCESS;
 }
 
@@ -725,6 +723,14 @@ nametoidres(struct idmap_msg *im)
 {
        int ret = 0;
 
+       /* XXX: nobody fallbacks shouldn't always happen:
+        *      server id -> name should be OK
+        *      client name -> id should be OK
+        * but not otherwise */
+       /* XXX: move nobody stuff to library calls
+        * (nfs4_get_nobody_user(domain), nfs4_get_nobody_group(domain)) */
+       /* XXX: should make this call higher up in the call chain (so we'd
+        * have a chance on looking up server/whatever. */
        switch (im->im_type) {
        case IDMAP_TYPE_USER:
                ret = nfs4_name_to_uid(im->im_name, &im->im_id);
@@ -737,9 +743,7 @@ nametoidres(struct idmap_msg *im)
                        im->im_id = nobodygid;
                break;
        }
-       /* XXX Hack? would rather return failure instead of writing nobody
-        * as above, but kernel seems not to deal well with that as of
-        * 2.6.8-rc3. */
+       /* XXX? */
        im->im_status = IDMAP_STATUS_SUCCESS;
 }
 
@@ -842,7 +846,7 @@ int pipefds[2] = { -1, -1};
 void
 mydaemon(int nochdir, int noclose)
 {
-       int pid, status, tempfd, fdmax, filedes;
+       int pid, status, tempfd;
 
        if (pipe(pipefds) < 0)
                err(1, "mydaemon: pipe() failed: errno %d (%s)\n", errno, strerror(errno));
@@ -875,13 +879,10 @@ mydaemon(int nochdir, int noclose)
 
        if (noclose == 0) {
                tempfd = open("/dev/null", O_RDWR);
-               close(0); dup2(tempfd, 0);
-               close(1); dup2(tempfd, 1);
-               close(2); dup2(tempfd, 2);
-               fdmax = sysconf (_SC_OPEN_MAX);
-               for (filedes = 3; filedes < fdmax; filedes++)
-                       if (filedes != pipefds[1])
-                               close (filedes);
+               dup2(tempfd, 0);
+               dup2(tempfd, 1);
+               dup2(tempfd, 2);
+               closeall(3);
        }
 
        return;