From 5e6320cd1262de6eada39751807c31c059517d01 Mon Sep 17 00:00:00 2001 From: Massimo Maggi Date: Sun, 16 Dec 2012 14:33:51 +0100 Subject: [PATCH] Fix get/set users/groups in quota props via numeric id 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 Signed-off-by: Brian Behlendorf Closes #1147 --- lib/libzfs/libzfs_dataset.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/libzfs/libzfs_dataset.c b/lib/libzfs/libzfs_dataset.c index 7cf78c8f7e..73d45882a5 100644 --- a/lib/libzfs/libzfs_dataset.c +++ b/lib/libzfs/libzfs_dataset.c @@ -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);