static void mgt_sandbox_solaris_init(enum sandbox_e who) { priv_set_t *priv_all; if (! (priv_all = priv_allocset())) { REPORT(LOG_ERR, "Sandbox warning: " " mgt_sandbox_init - priv_allocset failed: errno=%d (%s)", errno, strerror(errno)); return; } priv_emptyset(priv_all); mgt_sandbox_solaris_add_inheritable(priv_all, who); mgt_sandbox_solaris_add_effective(priv_all, who); mgt_sandbox_solaris_add_permitted(priv_all, who); mgt_sandbox_solaris_add_initial(priv_all, who); /* try to get all possible privileges, expect EPERM here */ setppriv_assert(setppriv(PRIV_ON, PRIV_PERMITTED, priv_all)); setppriv_assert(setppriv(PRIV_ON, PRIV_EFFECTIVE, priv_all)); setppriv_assert(setppriv(PRIV_ON, PRIV_INHERITABLE, priv_all)); priv_freeset(priv_all); }
static void mgt_sandbox_solaris_waive(enum sandbox_e who) { priv_set_t *effective, *inheritable, *permitted; if (!(effective = priv_allocset()) || !(inheritable = priv_allocset()) || !(permitted = priv_allocset())) { REPORT(LOG_ERR, "Sandbox warning: " " mgt_sandbox_waive - priv_allocset failed: errno=%d (%s)", errno, strerror(errno)); return; } /* * simple scheme: * (inheritable subset-of effective) subset-of permitted */ priv_emptyset(inheritable); mgt_sandbox_solaris_add_inheritable(inheritable, who); priv_copyset(inheritable, effective); mgt_sandbox_solaris_add_effective(effective, who); priv_copyset(effective, permitted); mgt_sandbox_solaris_add_permitted(permitted, who); /* * invert the sets and clear privileges such that setppriv will always * succeed */ priv_inverse(inheritable); priv_inverse(effective); priv_inverse(permitted); AZ(setppriv(PRIV_OFF, PRIV_LIMIT, permitted)); AZ(setppriv(PRIV_OFF, PRIV_PERMITTED, permitted)); AZ(setppriv(PRIV_OFF, PRIV_EFFECTIVE, effective)); AZ(setppriv(PRIV_OFF, PRIV_INHERITABLE, inheritable)); priv_freeset(inheritable); priv_freeset(effective); priv_freeset(permitted); }
void mgt_sandbox_solaris_fini(void) { priv_set_t *effective, *inheritable, *permitted; if (!(effective = priv_allocset()) || !(inheritable = priv_allocset()) || !(permitted = priv_allocset())) { REPORT(LOG_ERR, "Child start warning: mgt_sandbox_waive - priv_allocset failed: errno=%d (%s)", errno, strerror(errno)); return; } priv_emptyset(inheritable); priv_emptyset(effective); mgt_sandbox_solaris_add_effective(effective); priv_copyset(effective, permitted); mgt_sandbox_solaris_add_permitted(permitted); /* * invert the sets and clear privileges such that setppriv will always * succeed */ priv_inverse(inheritable); priv_inverse(effective); priv_inverse(permitted); #define SETPPRIV(which, set) \ if (setppriv(PRIV_OFF, which, set)) \ REPORT(LOG_ERR, \ "Child start warning: Waiving privileges failed on %s: errno=%d (%s)", \ #which, errno, strerror(errno)); SETPPRIV(PRIV_INHERITABLE, inheritable); SETPPRIV(PRIV_EFFECTIVE, effective); SETPPRIV(PRIV_PERMITTED, permitted); SETPPRIV(PRIV_LIMIT, permitted); #undef SETPPRIV priv_freeset(inheritable); priv_freeset(effective); }
void mgt_sandbox_solaris_init(void) { priv_set_t *priv_all; if (! (priv_all = priv_allocset())) { REPORT(LOG_ERR, "Child start warning: mgt_sandbox_init - priv_allocset failed: errno=%d (%s)", errno, strerror(errno)); return; } priv_emptyset(priv_all); mgt_sandbox_solaris_add_effective(priv_all); mgt_sandbox_solaris_add_permitted(priv_all); mgt_sandbox_solaris_add_initial(priv_all); setppriv(PRIV_ON, PRIV_PERMITTED, priv_all); setppriv(PRIV_ON, PRIV_EFFECTIVE, priv_all); setppriv(PRIV_ON, PRIV_INHERITABLE, priv_all); priv_freeset(priv_all); }