Fix get/set users/groups in quota props via numeric id
authorMassimo Maggi <massimo@mmmm.it>
Sun, 16 Dec 2012 13:33:51 +0000 (14:33 +0100)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 17 Dec 2012 17:52:58 +0000 (09:52 -0800)
Fix setting/getting users/groups in quota properties through
numeric identifier.  This support was accidentally disabled
in the original port by applying the HAVE_IDMAP wrapper macro
too broadly.

Fix obtained by moving #ifdef HAVE_IDMAP to exclude only
the part of code that really needs IDMAP.  Now zfs (get|set)
(user|group)quota@1000 works as expected.

Signed-off-by: Massimo Maggi <massimo@mmmm.it>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #1147

lib/libzfs/libzfs_dataset.c

index 7cf78c8..73d4588 100644 (file)
@@ -2532,29 +2532,29 @@ userquota_propname_decode(const char *propname, boolean_t zoned,
                return (ENOSYS);
 #endif /* HAVE_IDMAP */
        } else {
-#ifdef HAVE_IDMAP
                /* It's a user/group ID (eg "12345"). */
                uid_t id;
-               idmap_rid_t rid;
-               char *mapdomain;
                char *end;
-
                id = strtoul(cp, &end, 10);
                if (*end != '\0')
                        return (EINVAL);
                if (id > MAXUID) {
+#ifdef HAVE_IDMAP
                        /* It's an ephemeral ID. */
+                       idmap_rid_t rid;
+                       char *mapdomain;
+
                        if (idmap_id_to_numeric_domain_rid(id, isuser,
                            &mapdomain, &rid) != 0)
                                return (ENOENT);
                        (void) strlcpy(domain, mapdomain, domainlen);
                        *ridp = rid;
+#else
+                       return (ENOSYS);
+#endif /* HAVE_IDMAP */
                } else {
                        *ridp = id;
                }
-#else
-               return (ENOSYS);
-#endif /* HAVE_IDMAP */
        }
 
        return (0);