Print this page
uts: add a concept of a 'default' set of privileges, separate from 'basic'
*** 56,65 ****
--- 56,75 ----
LOADPRIVDATA(d);
return (d->pd_basicset);
}
+ priv_set_t *
+ priv_default(void)
+ {
+ priv_data_t *d;
+
+ LOADPRIVDATA(d);
+
+ return (d->pd_defaultset);
+ }
+
/*
* Name: priv_str_to_set()
*
* Description: Given a buffer with privilege strings, the
* equivalent privilege set is returned.
*** 78,89 ****
char *base;
char *offset;
char *last;
priv_set_t *pset = NULL;
! priv_set_t *zone;
! priv_set_t *basic;
if (endptr != NULL)
*endptr = NULL;
if ((base = libc_strdup(priv_names)) == NULL ||
--- 88,100 ----
char *base;
char *offset;
char *last;
priv_set_t *pset = NULL;
! priv_set_t *zone = NULL;
! priv_set_t *basic = NULL;
! priv_set_t *deflt = NULL;
if (endptr != NULL)
*endptr = NULL;
if ((base = libc_strdup(priv_names)) == NULL ||
*** 93,102 ****
--- 104,114 ----
return (NULL);
}
priv_emptyset(pset);
basic = priv_basic();
+ deflt = priv_default();
zone = privdata->pd_zoneset;
/* This is how to use strtok_r nicely in a while loop ... */
last = base;
*** 104,113 ****
--- 116,128 ----
/*
* Search for these special case strings.
*/
if (basic != NULL && strcasecmp(offset, "basic") == 0) {
priv_union(basic, pset);
+ } else if (deflt != NULL && strcasecmp(offset,
+ "default") == 0) {
+ priv_union(deflt, pset);
} else if (strcasecmp(offset, "none") == 0) {
priv_emptyset(pset);
} else if (strcasecmp(offset, "all") == 0) {
priv_fillset(pset);
} else if (strcasecmp(offset, "zone") == 0) {