You've already forked opencryptoki
mirror of
https://github.com/opencryptoki/opencryptoki.git
synced 2026-10-27 06:12:56 +03:00
Make root run all the pkcs11 commands without the need to be a member of
the pkcs11 group. Signed-off-by: Harald Freudenberger <freude@linux.vnet.ibm.com>
This commit is contained in:
committed by
Joy Latten
parent
86a2f71074
commit
2475aaee11
@@ -340,6 +340,7 @@ attach_shared_memory() {
|
||||
struct stat statbuf;
|
||||
struct group *grp;
|
||||
struct passwd *pw, *epw;
|
||||
uid_t uid, euid;
|
||||
|
||||
#if !(MMAP)
|
||||
// Really should fstat the tok_path, since it will be the actual
|
||||
@@ -351,42 +352,36 @@ attach_shared_memory() {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
// SAB check for the group id here and membership here as well
|
||||
grp = getgrnam("pkcs11");
|
||||
if ( grp ) {
|
||||
int i=0;
|
||||
char member=0;
|
||||
|
||||
pw = getpwuid(getuid());
|
||||
|
||||
epw = getpwuid(geteuid());
|
||||
|
||||
while( grp->gr_mem[i] ) {
|
||||
if (pw) {
|
||||
if ( strncmp(pw->pw_name, grp->gr_mem[i],strlen(pw->pw_name)) == 0 ){
|
||||
member = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (epw) {
|
||||
if ( strncmp(epw->pw_name, grp->gr_mem[i],strlen(epw->pw_name)) == 0 ){
|
||||
member = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if ( ! member ) {
|
||||
return NULL; // SAB don't bother even attaching...
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
return NULL;
|
||||
uid = getuid();
|
||||
euid = geteuid();
|
||||
// only check group membership if not root user
|
||||
if (uid != 0 && euid != 0) {
|
||||
int i, member=0;
|
||||
grp = getgrnam("pkcs11");
|
||||
if (!grp) {
|
||||
// group pkcs11 not known to the system
|
||||
return NULL;
|
||||
}
|
||||
pw = getpwuid(uid);
|
||||
epw = getpwuid(euid);
|
||||
for (i=0; grp->gr_mem[i]; i++) {
|
||||
if (pw) {
|
||||
if (!strncmp(pw->pw_name, grp->gr_mem[i],strlen(pw->pw_name))) {
|
||||
member = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (epw) {
|
||||
if (!strncmp(epw->pw_name, grp->gr_mem[i],strlen(epw->pw_name))) {
|
||||
member = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!member) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Anchor->shm_tok = ftok(TOK_PATH,'b');
|
||||
|
||||
|
||||
@@ -521,7 +521,7 @@ check_user_and_group()
|
||||
euid = geteuid();
|
||||
|
||||
/* Root or effective Root is ok */
|
||||
if (uid != 0 && euid != 0)
|
||||
if (uid == 0 || euid == 0)
|
||||
return CKR_OK;
|
||||
|
||||
/*
|
||||
@@ -541,8 +541,8 @@ check_user_and_group()
|
||||
pw = getpwuid(uid);
|
||||
epw = getpwuid(euid);
|
||||
for (i = 0; grp->gr_mem[i]; i++) {
|
||||
if ((pw && strcmp(pw->pw_name, grp->gr_mem[i]) == 0) ||
|
||||
(epw && strcmp(epw->pw_name, grp->gr_mem[i]) == 0))
|
||||
if ((pw && (strncmp(pw->pw_name, grp->gr_mem[i], strlen(pw->pw_name)) == 0)) ||
|
||||
(epw && (strncmp(epw->pw_name, grp->gr_mem[i], strlen(epw->pw_name)) == 0)))
|
||||
return CKR_OK;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user