(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;
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
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;
}
{
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);
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;
}
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));
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;