Print this page




  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)