added supplemental groups check
This commit is contained in:
+23
@@ -303,6 +303,8 @@ static authn_status authn_check_absec(request_rec *r, const char* user, const ch
|
||||
|
||||
////////////////////////////////////////////////////////////////
|
||||
// Validate ressource access
|
||||
// request_rec contain user/pass if basic auth
|
||||
// it could also contain cookies if cookies based auth
|
||||
static authz_status authz_check_absec(request_rec *r, const char *require_args, const void *parsed_require_args)
|
||||
{
|
||||
char *user = r->user;
|
||||
@@ -362,6 +364,8 @@ static authz_status authz_check_absec(request_rec *r, const char *require_args,
|
||||
ap_rprintf(r, "Fichier propriétaire<br/>\r\n");
|
||||
ap_log_rerror("mod_absec.c", 282, 1, APLOG_ERR, APR_SUCCESS, r, "authz_check_absec : Fichier propriétaire<br/>\r\n");
|
||||
return AUTHZ_GRANTED;
|
||||
} else {
|
||||
ap_log_rerror("mod_absec.c", 282, 1, APLOG_ERR, APR_SUCCESS, r, "authz_check_absec : No user access %d", pw->pw_uid);
|
||||
}
|
||||
|
||||
// If file is group readable and primary group match return content
|
||||
@@ -369,6 +373,25 @@ static authz_status authz_check_absec(request_rec *r, const char *require_args,
|
||||
ap_rprintf(r, "Fichier groupe<br/>\r\n");
|
||||
ap_log_rerror("mod_absec.c", 282, 1, APLOG_ERR, APR_SUCCESS, r, "authz_check_absec : Fichier groupe<br/>\r\n");
|
||||
return AUTHZ_GRANTED;
|
||||
} else {
|
||||
ap_log_rerror("mod_absec.c", 282, 1, APLOG_ERR, APR_SUCCESS, r, "authz_check_absec : No group access %d", pw->pw_gid);
|
||||
}
|
||||
|
||||
// check supplemental groups
|
||||
gid_t grouplist[16];
|
||||
int grouplistsize = 16;
|
||||
int groupreturn;
|
||||
groupreturn = getgrouplist(user, pw->pw_gid, grouplist, &grouplistsize);
|
||||
if (groupreturn >= 0) {
|
||||
ap_log_rerror("mod_absec.c", 282, 1, APLOG_ERR, APR_SUCCESS, r, "authz_check_absec : liste groups (%d)", grouplistsize);
|
||||
for (int i=0; i<grouplistsize; i++) {
|
||||
ap_log_rerror("mod_absec.c", 282, 1, APLOG_ERR, APR_SUCCESS, r, "authz_check_absec : group %d", grouplist[i]);
|
||||
// If file is group readable and match a supplemental group return content
|
||||
if ((fperm.st_gid==grouplist[i]) && (fperm.st_mode & 0070 & permmask)) {
|
||||
ap_log_rerror("mod_absec.c", 282, 1, APLOG_ERR, APR_SUCCESS, r, "authz_check_absec : Fichier group supp");
|
||||
return AUTHZ_GRANTED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ap_log_rerror("mod_absec.c", 282, 1, APLOG_ERR, APR_SUCCESS, r, "authz_check_absec : DENIED<br/>\r\n");
|
||||
|
||||
Reference in New Issue
Block a user