49 * Keep this table in sorted order
50 *
51 * This table is used for displaying all permissions for
52 * zfs allow
53 */
54
55 zfs_deleg_perm_tab_t zfs_deleg_perm_tab[] = {
56 {ZFS_DELEG_PERM_ALLOW, ZFS_DELEG_NOTE_ALLOW},
57 {ZFS_DELEG_PERM_CLONE, ZFS_DELEG_NOTE_CLONE },
58 {ZFS_DELEG_PERM_CREATE, ZFS_DELEG_NOTE_CREATE },
59 {ZFS_DELEG_PERM_DESTROY, ZFS_DELEG_NOTE_DESTROY },
60 {ZFS_DELEG_PERM_MOUNT, ZFS_DELEG_NOTE_MOUNT },
61 {ZFS_DELEG_PERM_PROMOTE, ZFS_DELEG_NOTE_PROMOTE },
62 {ZFS_DELEG_PERM_RECEIVE, ZFS_DELEG_NOTE_RECEIVE },
63 {ZFS_DELEG_PERM_RENAME, ZFS_DELEG_NOTE_RENAME },
64 {ZFS_DELEG_PERM_ROLLBACK, ZFS_DELEG_NOTE_ROLLBACK },
65 {ZFS_DELEG_PERM_SNAPSHOT, ZFS_DELEG_NOTE_SNAPSHOT },
66 {ZFS_DELEG_PERM_SHARE, ZFS_DELEG_NOTE_SHARE },
67 {ZFS_DELEG_PERM_SEND, ZFS_DELEG_NOTE_NONE },
68 {ZFS_DELEG_PERM_USERPROP, ZFS_DELEG_NOTE_USERPROP },
69 {NULL, ZFS_DELEG_NOTE_NONE }
70 };
71
72 static int
73 zfs_valid_permission_name(const char *perm)
74 {
75 if (zfs_deleg_canonicalize_perm(perm))
76 return (0);
77
78 return (permset_namecheck(perm, NULL, NULL));
79 }
80
81 const char *
82 zfs_deleg_canonicalize_perm(const char *perm)
83 {
84 int i;
85 zfs_prop_t prop;
86
87 for (i = 0; zfs_deleg_perm_tab[i].z_perm != NULL; i++) {
88 if (strcmp(perm, zfs_deleg_perm_tab[i].z_perm) == 0)
|
49 * Keep this table in sorted order
50 *
51 * This table is used for displaying all permissions for
52 * zfs allow
53 */
54
55 zfs_deleg_perm_tab_t zfs_deleg_perm_tab[] = {
56 {ZFS_DELEG_PERM_ALLOW, ZFS_DELEG_NOTE_ALLOW},
57 {ZFS_DELEG_PERM_CLONE, ZFS_DELEG_NOTE_CLONE },
58 {ZFS_DELEG_PERM_CREATE, ZFS_DELEG_NOTE_CREATE },
59 {ZFS_DELEG_PERM_DESTROY, ZFS_DELEG_NOTE_DESTROY },
60 {ZFS_DELEG_PERM_MOUNT, ZFS_DELEG_NOTE_MOUNT },
61 {ZFS_DELEG_PERM_PROMOTE, ZFS_DELEG_NOTE_PROMOTE },
62 {ZFS_DELEG_PERM_RECEIVE, ZFS_DELEG_NOTE_RECEIVE },
63 {ZFS_DELEG_PERM_RENAME, ZFS_DELEG_NOTE_RENAME },
64 {ZFS_DELEG_PERM_ROLLBACK, ZFS_DELEG_NOTE_ROLLBACK },
65 {ZFS_DELEG_PERM_SNAPSHOT, ZFS_DELEG_NOTE_SNAPSHOT },
66 {ZFS_DELEG_PERM_SHARE, ZFS_DELEG_NOTE_SHARE },
67 {ZFS_DELEG_PERM_SEND, ZFS_DELEG_NOTE_NONE },
68 {ZFS_DELEG_PERM_USERPROP, ZFS_DELEG_NOTE_USERPROP },
69 {ZFS_DELEG_PERM_CRYPTO_DSL, ZFS_DELEG_NOTE_CRYPTO_DSL },
70 {ZFS_DELEG_PERM_CRYPTO_DSL_CHANGE, ZFS_DELEG_NOTE_CRYPTO_DSL_CHANGE },
71 {NULL, ZFS_DELEG_NOTE_NONE }
72 };
73
74 static int
75 zfs_valid_permission_name(const char *perm)
76 {
77 if (zfs_deleg_canonicalize_perm(perm))
78 return (0);
79
80 return (permset_namecheck(perm, NULL, NULL));
81 }
82
83 const char *
84 zfs_deleg_canonicalize_perm(const char *perm)
85 {
86 int i;
87 zfs_prop_t prop;
88
89 for (i = 0; zfs_deleg_perm_tab[i].z_perm != NULL; i++) {
90 if (strcmp(perm, zfs_deleg_perm_tab[i].z_perm) == 0)
|