From a8bd6dcf8756b4abc5bac00f54361b28809d4177 Mon Sep 17 00:00:00 2001 From: Andriy Gapon Date: Fri, 19 Jun 2020 20:38:43 +0300 Subject: [PATCH] zfs allow/unallow should work with numeric uid/gid And that should work even (especially) if there is no matching user or group name. The change is originally by Xin Lin . Original-patch-by: Xin Li Reviewed-by: Yuri Pankov Reviewed-by: Andy Stormont Reviewed-by: Matt Ahrens Reviewed-by: Brian Behlendorf Signed-off-by: Andriy Gapon Closes #9792 Closes #10280 --- cmd/zfs/zfs_main.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/cmd/zfs/zfs_main.c b/cmd/zfs/zfs_main.c index 5e7ee0f5b7..224ed16048 100644 --- a/cmd/zfs/zfs_main.c +++ b/cmd/zfs/zfs_main.c @@ -5238,10 +5238,17 @@ parse_fs_perm(fs_perm_t *fsperm, nvlist_t *nvl) break; } - if (nice_name != NULL) + if (nice_name != NULL) { (void) strlcpy( node->who_perm.who_ug_name, nice_name, 256); + } else { + /* User or group unknown */ + (void) snprintf( + node->who_perm.who_ug_name, + sizeof (node->who_perm.who_ug_name), + "(unknown: %d)", rid); + } } uu_avl_insert(avl, node, idx); @@ -5773,9 +5780,9 @@ construct_fsacl_list(boolean_t un, struct allow_opts *opts, nvlist_t **nvlp) if (p != NULL) rid = p->pw_uid; - else { + else if (*endch != '\0') { (void) snprintf(errbuf, 256, gettext( - "invalid user %s"), curr); + "invalid user %s\n"), curr); allow_usage(un, B_TRUE, errbuf); } } else if (opts->group) { @@ -5787,9 +5794,9 @@ construct_fsacl_list(boolean_t un, struct allow_opts *opts, nvlist_t **nvlp) if (g != NULL) rid = g->gr_gid; - else { + else if (*endch != '\0') { (void) snprintf(errbuf, 256, gettext( - "invalid group %s"), curr); + "invalid group %s\n"), curr); allow_usage(un, B_TRUE, errbuf); } } else { @@ -5815,7 +5822,7 @@ construct_fsacl_list(boolean_t un, struct allow_opts *opts, nvlist_t **nvlp) rid = g->gr_gid; } else { (void) snprintf(errbuf, 256, gettext( - "invalid user/group %s"), curr); + "invalid user/group %s\n"), curr); allow_usage(un, B_TRUE, errbuf); } }