validation public, owner, primary group

This commit is contained in:
2018-06-11 11:23:16 -04:00
parent 10a024fc51
commit e79b5f2fb9
+65 -20
View File
@@ -72,22 +72,52 @@
#include <sys/stat.h>
////////////////////////////////////////////////////////////////
/* The sample content handler */
/* Check user autentication against unix user/pass */
static int check_autentication(request_rec *r)
{
return 0;
}
////////////////////////////////////////////////////////////////
/* Check check file perms */
static int check_autorization(request_rec *r)
{
return 0;
}
////////////////////////////////////////////////////////////////
/* Main routine */
static int absec_handler(request_rec *r)
{
// Is this module really called?
if (strcmp(r->handler, "absec")) {
return DECLINED;
}
////////
/* check file permission on filesystem */
/* should include <sys/stat.h> */
struct stat fperm;
int status;
status = stat(r->filename, &fperm);
ap_rprintf(r, "File perms %o, owner %d, group %d (status %d)<br/>\r\n", fperm.st_mode, fperm.st_uid, fperm.st_gid, status);
// If file is world readable return content
if (fperm.st_mode & 0x4) {
ap_rprintf(r, "Fichier public<br/>\r\n");
return (DECLINED);
}
const char* auth64p;
r->content_type = "text/html";
if (!r->header_only)
// Check if we have an auth header
auth64p = apr_table_get(r->headers_in,"Authorization");
// If no basic auth, ask for one
if (auth64p==NULL) {
r->content_type = "text/html";
apr_table_setn(r->err_headers_out,
(PROXYREQ_PROXY == r->proxyreq) ? "Proxy-Authenticate"
: "WWW-Authenticate",
@@ -101,10 +131,7 @@ static int absec_handler(request_rec *r)
// Get the basic auth base64 string and decode it
// Start at char 6 to skip 'Basic '
char *auth64;
//apr_strtok((char*)auth64p, " ", &auth64);
//ap_rprintf(r, "Test: %s \n<br/>", auth64);
auth64 = apr_pstrdup(r->pool, auth64p+6);
//ap_rprintf(r, "Test: %s \n<br/>", auth64);
char *auth;
auth = apr_pcalloc(r->pool, 64);
apr_base64_decode(auth, auth64);
@@ -114,14 +141,14 @@ static int absec_handler(request_rec *r)
char *pass;
user = apr_strtok(auth, ":", &pass);
// Get UID, GIDs for the user
ap_rprintf(r, "The sample page from mod_absec.c %s \n<br/>", r->args);
r->content_type = "text/html";
//ap_rprintf(r, "The sample page from mod_absec.c %s \n<br/>", r->args);
ap_rprintf(r, "Url: %s from %s \n<br/>", r->filename, r->uri);
ap_rprintf(r, "Headers Authorization: %s \n<br/>", auth64);
ap_rprintf(r, "User/Pass: %s/%s \n<br/>", user, pass);
//ap_rprintf(r, "Headers Authorization: %s \n<br/>", auth64);
//ap_rprintf(r, "User/Pass: %s/%s \n<br/>", user, pass);
////////
// Get UID, GIDs for the user
/* Working example, but just UID not PW */
apr_status_t ret;
apr_uid_t i;
@@ -198,21 +225,39 @@ static int absec_handler(request_rec *r)
return HTTP_UNAUTHORIZED;
}
////////
/* check file permission on filesystem */
/* should include <sys/stat.h> */
struct stat fperm;
int status;
status = stat(r->filename, &fperm);
ap_rprintf(r, "File perms %o, owner %d, group %d (status %d)", fperm.st_mode, fperm.st_uid, fperm.st_gid, status);
// If file is user readable and user match return content
if ((fperm.st_uid==i) && (fperm.st_mode & 0400)) {
ap_rprintf(r, "Fichier propriétaire<br/>\r\n");
return (DECLINED);
}
// If file is group readable and primary group match return content
if ((fperm.st_gid==g) && (fperm.st_mode & 0040)) {
ap_rprintf(r, "Fichier groupe<br/>\r\n");
return (DECLINED);
}
// now check supplemental groups
//ap_rprintf(r, "Fichier propriétaire %d %d %o %o<br/>\r\n", fperm.st_uid, i, fperm.st_mode, 0400);
// else decline
ap_rprintf(r, "Aucuns droits de voir le fichier<br/>\r\n");
apr_table_setn(r->err_headers_out,
(PROXYREQ_PROXY == r->proxyreq) ? "Proxy-Authenticate"
: "WWW-Authenticate",
apr_pstrcat(r->pool, "Basic realm=\"", ap_auth_name(r),
"\"", NULL));
return HTTP_UNAUTHORIZED;
return OK;
}
////////////////////////////////////////////////////////////////
static void absec_register_hooks(apr_pool_t *p)
{
ap_hook_handler(absec_handler, NULL, NULL, APR_HOOK_MIDDLE);
//ap_hook_handler(absec_handler, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_handler(absec_handler, NULL, NULL, APR_HOOK_LAST);
}
////////////////////////////////////////////////////////////////