zfs allow/unallow should work with numeric uid/gid

And that should work even (especially) if there is no matching user or
group name.  This change allows to see and modify delegations for
deleted groups and users.

The change is originally by Xin Li.
illumos report: https://www.illumos.org/issues/6037
OpenZFS (ZoL) PR: https://github.com/openzfs/zfs/pull/10280

Obtained from:	delphij
MFC after:	2 weeks
This commit is contained in:
Andriy Gapon 2020-05-12 09:04:57 +00:00
parent 051fc58cb3
commit 54904c38f8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=360956

View File

@ -4696,6 +4696,14 @@ parse_fs_perm(fs_perm_t *fsperm, nvlist_t *nvl)
(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);
@ -5194,9 +5202,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) {
@ -5208,9 +5216,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 {
@ -5236,7 +5244,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);
}
}