From ca24cf975ab37149319d060f6659424dfb776097 Mon Sep 17 00:00:00 2001 From: Joe Orton Date: Tue, 11 Dec 2012 14:13:44 +0000 Subject: [PATCH] * modules/aaa/mod_authz_owner.h: Add header file with optional hook declaration for "authz_owner_get_file_group". * modules/aaa/mod_authz_dbm.c, modules/aaa/mod_authz_groupfile.c: Use the header to pick up the above declaration; retrieve the optional function in a hook; use a static variable to store the function pointer. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1420184 13f79535-47bb-0310-9956-ffa450edef68 --- modules/aaa/mod_authz_dbm.c | 12 +++++++----- modules/aaa/mod_authz_groupfile.c | 12 ++++++++---- modules/aaa/mod_authz_owner.c | 3 +-- modules/aaa/mod_authz_owner.h | 27 +++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 11 deletions(-) create mode 100644 modules/aaa/mod_authz_owner.h diff --git a/modules/aaa/mod_authz_dbm.c b/modules/aaa/mod_authz_dbm.c index 4f13caeab5..561c1558aa 100644 --- a/modules/aaa/mod_authz_dbm.c +++ b/modules/aaa/mod_authz_dbm.c @@ -29,14 +29,13 @@ #include "http_request.h" /* for ap_hook_(check_user_id | auth_checker)*/ #include "mod_auth.h" +#include "mod_authz_owner.h" typedef struct { const char *grpfile; const char *dbmtype; } authz_dbm_config_rec; -APR_DECLARE_OPTIONAL_FN(char*, authz_owner_get_file_group, (request_rec *r)); - /* This should go into APR; perhaps with some nice * caching/locking/flocking of the open dbm file. @@ -199,7 +198,7 @@ static authz_status dbmgroup_check_authorization(request_rec *r, return AUTHZ_DENIED; } -APR_OPTIONAL_FN_TYPE(authz_owner_get_file_group) *authz_owner_get_file_group; +static APR_OPTIONAL_FN_TYPE(authz_owner_get_file_group) *authz_owner_get_file_group; static authz_status dbmfilegroup_check_authorization(request_rec *r, const char *require_args, @@ -279,11 +278,13 @@ static const authz_provider authz_dbmfilegroup_provider = NULL, }; - -static void register_hooks(apr_pool_t *p) +static void authz_dbm_getfns(void) { authz_owner_get_file_group = APR_RETRIEVE_OPTIONAL_FN(authz_owner_get_file_group); +} +static void register_hooks(apr_pool_t *p) +{ ap_register_auth_provider(p, AUTHZ_PROVIDER_GROUP, "dbm-group", AUTHZ_PROVIDER_VERSION, &authz_dbmgroup_provider, @@ -292,6 +293,7 @@ static void register_hooks(apr_pool_t *p) AUTHZ_PROVIDER_VERSION, &authz_dbmfilegroup_provider, AP_AUTH_INTERNAL_PER_CONF); + ap_hook_optional_fn_retrieve(authz_dbm_getfns, NULL, NULL, APR_HOOK_MIDDLE); } AP_DECLARE_MODULE(authz_dbm) = diff --git a/modules/aaa/mod_authz_groupfile.c b/modules/aaa/mod_authz_groupfile.c index 15bb60ffe1..ee0616d3d2 100644 --- a/modules/aaa/mod_authz_groupfile.c +++ b/modules/aaa/mod_authz_groupfile.c @@ -55,13 +55,12 @@ #include "util_varbuf.h" #include "mod_auth.h" +#include "mod_authz_owner.h" typedef struct { char *groupfile; } authz_groupfile_config_rec; -APR_DECLARE_OPTIONAL_FN(char*, authz_owner_get_file_group, (request_rec *r)); - static void *create_authz_groupfile_dir_config(apr_pool_t *p, char *d) { authz_groupfile_config_rec *conf = apr_palloc(p, sizeof(*conf)); @@ -200,7 +199,7 @@ static authz_status group_check_authorization(request_rec *r, return AUTHZ_DENIED; } -APR_OPTIONAL_FN_TYPE(authz_owner_get_file_group) *authz_owner_get_file_group; +static APR_OPTIONAL_FN_TYPE(authz_owner_get_file_group) *authz_owner_get_file_group; static authz_status filegroup_check_authorization(request_rec *r, const char *require_args, @@ -279,10 +278,14 @@ static const authz_provider authz_filegroup_provider = NULL, }; -static void register_hooks(apr_pool_t *p) + +static void authz_groupfile_getfns(void) { authz_owner_get_file_group = APR_RETRIEVE_OPTIONAL_FN(authz_owner_get_file_group); +} +static void register_hooks(apr_pool_t *p) +{ ap_register_auth_provider(p, AUTHZ_PROVIDER_GROUP, "group", AUTHZ_PROVIDER_VERSION, &authz_group_provider, @@ -291,6 +294,7 @@ static void register_hooks(apr_pool_t *p) AUTHZ_PROVIDER_VERSION, &authz_filegroup_provider, AP_AUTH_INTERNAL_PER_CONF); + ap_hook_optional_fn_retrieve(authz_groupfile_getfns, NULL, NULL, APR_HOOK_MIDDLE); } AP_DECLARE_MODULE(authz_groupfile) = diff --git a/modules/aaa/mod_authz_owner.c b/modules/aaa/mod_authz_owner.c index 66b31d6a50..4fd0b2a015 100644 --- a/modules/aaa/mod_authz_owner.c +++ b/modules/aaa/mod_authz_owner.c @@ -28,8 +28,7 @@ #include "http_request.h" #include "mod_auth.h" - -APR_DECLARE_OPTIONAL_FN(char*, authz_owner_get_file_group, (request_rec *r)); +#include "mod_authz_owner.h" static const command_rec authz_owner_cmds[] = { diff --git a/modules/aaa/mod_authz_owner.h b/modules/aaa/mod_authz_owner.h new file mode 100644 index 0000000000..799f3361ab --- /dev/null +++ b/modules/aaa/mod_authz_owner.h @@ -0,0 +1,27 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MOD_AUTHZ_OWNER_H +#define MOD_AUTHZ_OWNER_H + +#include "http_request.h" + +/* mod_authz_owner exports an optional function which retrieves the + * group name of the file identified by r->filename, if available, or + * else returns NULL. */ +APR_DECLARE_OPTIONAL_FN(char*, authz_owner_get_file_group, (request_rec *r)); + +#endif /* MOD_AUTHZ_OWNER_H */ -- 2.40.0