Blame solaris_priv.c

Packit 4e8bc4
#include <stdlib.h>
Packit 4e8bc4
#include <priv.h>
Packit 4e8bc4
#include <stdio.h>
Packit 4e8bc4
#include "memcached.h"
Packit 4e8bc4
Packit 4e8bc4
/*
Packit 4e8bc4
 * this section of code will drop all (Solaris) privileges including
Packit 4e8bc4
 * those normally granted to all userland process (basic privileges). The
Packit 4e8bc4
 * effect of this is that after running this code, the process will not able
Packit 4e8bc4
 * to fork(), exec(), etc.  See privileges(5) for more information.
Packit 4e8bc4
 */
Packit 4e8bc4
void drop_privileges(void) {
Packit 4e8bc4
   priv_set_t *privs = priv_str_to_set("basic", ",", NULL);
Packit 4e8bc4
Packit 4e8bc4
   if (privs == NULL) {
Packit 4e8bc4
      perror("priv_str_to_set");
Packit 4e8bc4
      exit(EXIT_FAILURE);
Packit 4e8bc4
   }
Packit 4e8bc4
Packit 4e8bc4
   (void)priv_delset(privs, PRIV_FILE_LINK_ANY);
Packit 4e8bc4
   (void)priv_delset(privs, PRIV_PROC_EXEC);
Packit 4e8bc4
   (void)priv_delset(privs, PRIV_PROC_FORK);
Packit 4e8bc4
   (void)priv_delset(privs, PRIV_PROC_INFO);
Packit 4e8bc4
   (void)priv_delset(privs, PRIV_PROC_SESSION);
Packit 4e8bc4
Packit 4e8bc4
   if (setppriv(PRIV_SET, PRIV_PERMITTED, privs) != 0) {
Packit 4e8bc4
      perror("setppriv(PRIV_SET, PRIV_PERMITTED)");
Packit 4e8bc4
      exit(EXIT_FAILURE);
Packit 4e8bc4
   }
Packit 4e8bc4
Packit 4e8bc4
   priv_emptyset(privs);
Packit 4e8bc4
Packit 4e8bc4
   if (setppriv(PRIV_SET, PRIV_INHERITABLE, privs) != 0) {
Packit 4e8bc4
      perror("setppriv(PRIV_SET, PRIV_INHERITABLE)");
Packit 4e8bc4
      exit(EXIT_FAILURE);
Packit 4e8bc4
   }
Packit 4e8bc4
Packit 4e8bc4
   if (setppriv(PRIV_SET, PRIV_LIMIT, privs) != 0) {
Packit 4e8bc4
      perror("setppriv(PRIV_SET, PRIV_LIMIT)");
Packit 4e8bc4
      exit(EXIT_FAILURE);
Packit 4e8bc4
   }
Packit 4e8bc4
Packit 4e8bc4
   priv_freeset(privs);
Packit 4e8bc4
}
Packit 4e8bc4
Packit 4e8bc4
void setup_privilege_violations_handler(void) {
Packit 4e8bc4
   // not needed
Packit 4e8bc4
}