]> granicus.if.org Git - apache/blob - modules/aaa/mod_authz_user.c
Add lots of unique tags to error log messages
[apache] / modules / aaa / mod_authz_user.c
1 /* Licensed to the Apache Software Foundation (ASF) under one or more
2  * contributor license agreements.  See the NOTICE file distributed with
3  * this work for additional information regarding copyright ownership.
4  * The ASF licenses this file to You under the Apache License, Version 2.0
5  * (the "License"); you may not use this file except in compliance with
6  * the License.  You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include "apr_strings.h"
18
19 #include "ap_config.h"
20 #include "ap_provider.h"
21 #include "httpd.h"
22 #include "http_config.h"
23 #include "http_core.h"
24 #include "http_log.h"
25 #include "http_protocol.h"
26 #include "http_request.h"
27
28 #include "mod_auth.h"
29
30 typedef struct {
31         int dummy;  /* just here to stop compiler warnings for now. */
32 } authz_user_config_rec;
33
34 static void *create_authz_user_dir_config(apr_pool_t *p, char *d)
35 {
36     authz_user_config_rec *conf = apr_palloc(p, sizeof(*conf));
37
38     return conf;
39 }
40
41 static const command_rec authz_user_cmds[] =
42 {
43     {NULL}
44 };
45
46 module AP_MODULE_DECLARE_DATA authz_user_module;
47
48 static authz_status user_check_authorization(request_rec *r,
49                                              const char *require_args,
50                                              const void *parsed_require_args)
51 {
52     const char *t, *w;
53
54     if (!r->user) {
55         return AUTHZ_DENIED_NO_USER;
56     }
57
58     t = require_args;
59     while ((w = ap_getword_conf(r->pool, &t)) && w[0]) {
60         if (!strcmp(r->user, w)) {
61             return AUTHZ_GRANTED;
62         }
63     }
64
65     ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(01663)
66                   "access to %s failed, reason: user '%s' does not meet "
67                   "'require'ments for user to be allowed access",
68                   r->uri, r->user);
69
70     return AUTHZ_DENIED;
71 }
72
73 static authz_status validuser_check_authorization(request_rec *r,
74                                                   const char *require_line,
75                                                   const void *parsed_require_line)
76 {
77     if (!r->user) {
78         return AUTHZ_DENIED_NO_USER;
79     }
80
81     return AUTHZ_GRANTED;
82 }
83
84 static const authz_provider authz_user_provider =
85 {
86     &user_check_authorization,
87     NULL,
88 };
89 static const authz_provider authz_validuser_provider =
90 {
91     &validuser_check_authorization,
92     NULL,
93 };
94
95 static void register_hooks(apr_pool_t *p)
96 {
97     ap_register_auth_provider(p, AUTHZ_PROVIDER_GROUP, "user",
98                               AUTHZ_PROVIDER_VERSION,
99                               &authz_user_provider, AP_AUTH_INTERNAL_PER_CONF);
100     ap_register_auth_provider(p, AUTHZ_PROVIDER_GROUP, "valid-user",
101                               AUTHZ_PROVIDER_VERSION,
102                               &authz_validuser_provider,
103                               AP_AUTH_INTERNAL_PER_CONF);
104 }
105
106 AP_DECLARE_MODULE(authz_user) =
107 {
108     STANDARD20_MODULE_STUFF,
109     create_authz_user_dir_config, /* dir config creater */
110     NULL,                         /* dir merger --- default is to override */
111     NULL,                         /* server config */
112     NULL,                         /* merge server config */
113     authz_user_cmds,              /* command apr_table_t */
114     register_hooks                /* register hooks */
115 };