]> git.ipfire.org Git - thirdparty/squid.git/blob - src/auth/Config.h
Sync with trunk rev.13542
[thirdparty/squid.git] / src / auth / Config.h
1 /*
2 *
3 * SQUID Web Proxy Cache http://www.squid-cache.org/
4 * ----------------------------------------------------------
5 *
6 * Squid is the result of efforts by numerous individuals from
7 * the Internet community; see the CONTRIBUTORS file for full
8 * details. Many organizations have provided support for Squid's
9 * development; see the SPONSORS file for full details. Squid is
10 * Copyrighted (C) 2001 by the Regents of the University of
11 * California; see the COPYRIGHT file for full details. Squid
12 * incorporates software developed and/or copyrighted by other
13 * sources; see the CREDITS file for full details.
14 *
15 * This program is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation; either version 2 of the License, or
18 * (at your option) any later version.
19 *
20 * This program is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * You should have received a copy of the GNU General Public License
26 * along with this program; if not, write to the Free Software
27 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
28 *
29 */
30 #ifndef SQUID_AUTH_CONFIG_H
31 #define SQUID_AUTH_CONFIG_H
32
33 #if USE_AUTH
34
35 #include "AccessLogEntry.h"
36 #include "auth/UserRequest.h"
37 #include "HelperChildConfig.h"
38
39 class StoreEntry;
40 class HttpReply;
41 class HttpRequest;
42 class wordlist;
43
44 /* for http_hdr_type parameters-by-value */
45 #include "HttpHeader.h"
46
47 namespace Format
48 {
49 class Format;
50 }
51
52 namespace Auth
53 {
54
55 /**
56 * \ingroup AuthAPI
57 * \par
58 * I am the configuration for an auth scheme.
59 * Currently each scheme has only one instance of me,
60 * but this may change.
61 * \par
62 * This class is treated like a ref counted class.
63 * If the children ever stop being singletons, implement the
64 * ref counting...
65 */
66 class Config
67 {
68
69 public:
70 static UserRequest::Pointer CreateAuthUser(const char *proxy_auth, AccessLogEntry::Pointer &al);
71
72 static Config *Find(const char *proxy_auth);
73 Config() : authenticateChildren(20), authenticateProgram(NULL), keyExtras(NULL) {}
74
75 virtual ~Config() {}
76
77 /**
78 * Used by squid to determine whether the auth module has successfully initialised itself with the current configuration.
79 *
80 \retval true Authentication Module loaded and running.
81 \retval false No Authentication Module loaded.
82 */
83 virtual bool active() const = 0;
84
85 /**
86 * new decode API: virtual factory pattern
87 \par
88 * Responsible for decoding the passed authentication header, creating or
89 * linking to a AuthUser object and for storing any needed details to complete
90 * authentication in Auth::UserRequest::authenticate().
91 *
92 \param proxy_auth Login Pattern to parse.
93 \retval * Details needed to authenticate.
94 */
95 virtual UserRequest::Pointer decode(char const *proxy_auth, const char *requestRealm) = 0;
96
97 /**
98 * squid is finished with this config, release any unneeded resources.
99 * If a singleton, delete will not occur. if not a singleton (future),
100 * delete will occur when no references are held.
101 *
102 \todo we need a 'done for reconfigure' and a 'done permanently' concept.
103 */
104 virtual void done();
105
106 /**
107 * The configured function is used to see if the auth module has been given valid
108 * parameters and is able to handle authentication requests.
109 *
110 \retval true Authentication Module configured ready for use.
111 \retval false Not configured or Configuration Error.
112 * No other module functions except Shutdown/Dump/Parse/FreeConfig will be called by Squid.
113 */
114 virtual bool configured() const = 0;
115
116 /**
117 * Shutdown just the auth helpers.
118 * For use by log rotate etc. where auth needs to stay running, with the helpers restarted.
119 */
120 virtual void rotateHelpers(void) = 0;
121
122 /**
123 * Responsible for writing to the StoreEntry the configuration parameters that a user
124 * would put in a config file to recreate the running configuration.
125 * Returns whether the scheme is configured.
126 */
127 virtual bool dump(StoreEntry *, const char *, Config *) const;
128
129 /** add headers as needed when challenging for auth */
130 virtual void fixHeader(UserRequest::Pointer, HttpReply *, http_hdr_type, HttpRequest *) = 0;
131
132 /// Find any existing user credentials in the authentication cache by name and type.
133 virtual Auth::User::Pointer findUserInCache(const char *nameKey, Auth::Type type);
134
135 /** prepare to handle requests */
136 virtual void init(Config *) = 0;
137
138 /** expose any/all statistics to a CacheManager */
139 virtual void registerWithCacheManager(void);
140
141 /** parse config options */
142 virtual void parse(Config *, int, char *);
143
144 /** the http string id */
145 virtual const char * type() const = 0;
146
147 public:
148 HelperChildConfig authenticateChildren;
149 wordlist *authenticateProgram; ///< Helper program to run, includes all parameters
150 String keyExtrasLine; ///< The format of the request to the auth helper
151 Format::Format *keyExtras; ///< The compiled request format
152
153 protected:
154 /// RFC 7235 section 2.2 - Protection Space (Realm)
155 SBuf realm;
156 };
157
158 typedef std::vector<Config *> ConfigVector;
159
160 extern ConfigVector TheConfig;
161
162 } // namespace Auth
163
164 #endif /* USE_AUTH */
165 #endif /* SQUID_AUTHCONFIG_H */