]> git.ipfire.org Git - thirdparty/squid.git/blob - src/tests/testAuth.cc
This patch cleans up a lot of the whitespace crap which was added by
[thirdparty/squid.git] / src / tests / testAuth.cc
1 #include "config.h"
2
3 #include "squid.h"
4 #include "testAuth.h"
5 #include "authenticate.h"
6 #include "AuthUserRequest.h"
7 #include "AuthScheme.h"
8 #include "AuthConfig.h"
9 #include "Mem.h"
10
11 CPPUNIT_TEST_SUITE_REGISTRATION( testAuth );
12 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthConfig );
13 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthUserRequest );
14 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthBasicUserRequest );
15 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthDigestUserRequest );
16 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthNTLMUserRequest );
17 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthNegotiateUserRequest );
18
19 /* Instantiate all auth framework types */
20 void
21 testAuth::instantiate()
22 {}
23
24 char const * stub_config="auth_param digest program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd\n"
25 "auth_param digest children 5\n"
26 "auth_param digest realm Squid proxy-caching web server\n"
27 "auth_param digest nonce_garbage_interval 5 minutes\n"
28 "auth_param digest nonce_max_duration 30 minutes\n"
29 "auth_param digest nonce_max_count 50\n";
30
31 static
32 char const *
33 find_proxy_auth(char const *type)
34 {
35 char const * proxy_auths[][2]= { {"basic","Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="},
36
37 {"digest", "Digest username=\"robertdig\", realm=\"Squid proxy-caching web server\", nonce=\"yy8rQXjEWwixXVBj\", uri=\"/images/bg8.gif\", response=\"f75a7d3edd48d93c681c75dc4fb58700\", qop=auth, nc=00000012, cnonce=\"e2216641961e228e\" "},
38 {"ntlm", "NTLM "},
39 {"negotiate", "Negotiate "}
40 };
41
42 for (unsigned count = 0; count < 4 ; count++) {
43 if (strcasecmp(type, proxy_auths[count][0]) == 0)
44 return proxy_auths[count][1];
45 }
46
47 return NULL;
48 }
49
50 static
51 AuthConfig *
52 getConfig(char const *type_str)
53 {
54 Vector<AuthConfig *> &config = Config.authConfiguration;
55 /* find a configuration for the scheme */
56 AuthConfig *scheme = AuthConfig::Find (type_str);
57
58 if (scheme == NULL) {
59 /* Create a configuration */
60 AuthScheme *theScheme;
61
62 if ((theScheme = AuthScheme::Find(type_str)) == NULL) {
63 fatalf("Unknown authentication scheme '%s'.\n", type_str);
64 }
65
66 config.push_back(theScheme->createConfig());
67 scheme = config.back();
68 assert (scheme);
69 }
70
71 return scheme;
72 }
73
74 static
75 void
76 setup_scheme(AuthConfig *scheme, char const **params, unsigned param_count)
77 {
78 Vector<AuthConfig *> &config = Config.authConfiguration;
79
80 for (unsigned position=0; position < param_count; position++) {
81 char *param_str=xstrdup(params[position]);
82 strtok(param_str, w_space);
83 scheme->parse(scheme, config.size(), param_str);
84 }
85 }
86
87 static
88 void
89 fake_auth_setup()
90 {
91 static bool setup(false);
92
93 if (setup)
94 return;
95
96 Mem::Init();
97
98 Vector<AuthConfig *> &config = Config.authConfiguration;
99
100 char const *digest_parms[]= {"program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd",
101 "realm foo"
102 };
103
104 char const *basic_parms[]= {"program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd",
105 "realm foo"
106 };
107
108 char const *ntlm_parms[]= {"program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd"};
109
110 char const *negotiate_parms[]= {"program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd"};
111
112 struct _scheme_params {
113 char const *name;
114 char const **params;
115 unsigned paramlength;
116 }
117
118 params[]={ {"digest", digest_parms, 2},
119 {"basic", basic_parms, 2},
120 {"ntlm", ntlm_parms, 1},
121 {"negotiate", negotiate_parms, 1}
122 };
123
124 for (unsigned scheme=0; scheme < 4; scheme++)
125 setup_scheme(getConfig(params[scheme].name), params[scheme].params, params[scheme].paramlength);
126
127 authenticateInit(&config);
128
129 setup=true;
130 }
131
132 /* AuthConfig::CreateAuthUser works for all
133 * authentication types
134 */
135 void
136 testAuthConfig::create()
137 {
138 Debug::Levels[29]=9;
139 fake_auth_setup();
140
141 for (AuthScheme::const_iterator i = AuthScheme::Schemes().begin(); i != AuthScheme::Schemes().end(); ++i) {
142 AuthUserRequest *authRequest = AuthConfig::CreateAuthUser(find_proxy_auth((*i)->type()));
143 CPPUNIT_ASSERT(authRequest != NULL);
144 }
145 }
146
147 #include <iostream>
148
149 /* AuthUserRequest::scheme returns the correct scheme for all
150 * authentication types
151 */
152 void
153 testAuthUserRequest::scheme()
154 {
155 Debug::Levels[29]=9;
156 fake_auth_setup();
157
158 for (AuthScheme::const_iterator i = AuthScheme::Schemes().begin(); i != AuthScheme::Schemes().end(); ++i) {
159 // create a user request
160 // check its scheme matches *i
161 AuthUserRequest *authRequest = AuthConfig::CreateAuthUser(find_proxy_auth((*i)->type()));
162 CPPUNIT_ASSERT_EQUAL(authRequest->scheme(), *i);
163 }
164 }
165
166 #include "auth/basic/auth_basic.h"
167 /* AuthBasicUserRequest::AuthBasicUserRequest works
168 */
169 void
170 testAuthBasicUserRequest::construction()
171 {
172 AuthBasicUserRequest();
173 AuthBasicUserRequest *temp=new AuthBasicUserRequest();
174 delete temp;
175 }
176
177 void
178 testAuthBasicUserRequest::username()
179 {
180 AuthBasicUserRequest();
181 AuthBasicUserRequest *temp=new AuthBasicUserRequest();
182 BasicUser *basic_auth=new BasicUser(AuthConfig::Find("basic"));
183 basic_auth->username("John");
184 temp->user(basic_auth);
185 basic_auth->addRequest(temp);
186 CPPUNIT_ASSERT_EQUAL(0, strcmp("John", temp->username()));
187 delete temp;
188 }
189
190 #include "auth/digest/auth_digest.h"
191 /* AuthDigestUserRequest::AuthDigestUserRequest works
192 */
193 void
194 testAuthDigestUserRequest::construction()
195 {
196 AuthDigestUserRequest();
197 AuthDigestUserRequest *temp=new AuthDigestUserRequest();
198 delete temp;
199 }
200
201 void
202 testAuthDigestUserRequest::username()
203 {
204 AuthDigestUserRequest();
205 AuthDigestUserRequest *temp=new AuthDigestUserRequest();
206 DigestUser *user=new DigestUser(AuthConfig::Find("digest"));
207 user->username("John");
208 temp->user(user);
209 user->addRequest(temp);
210 CPPUNIT_ASSERT_EQUAL(0, strcmp("John", temp->username()));
211 delete temp;
212 }
213
214 #include "auth/ntlm/auth_ntlm.h"
215 /* AuthNTLMUserRequest::AuthNTLMUserRequest works
216 */
217 void
218 testAuthNTLMUserRequest::construction()
219 {
220 AuthNTLMUserRequest();
221 AuthNTLMUserRequest *temp=new AuthNTLMUserRequest();
222 delete temp;
223 }
224
225 void
226 testAuthNTLMUserRequest::username()
227 {
228 AuthNTLMUserRequest();
229 AuthNTLMUserRequest *temp=new AuthNTLMUserRequest();
230 NTLMUser *user=new NTLMUser(AuthConfig::Find("ntlm"));
231 user->username("John");
232 temp->user(user);
233 user->addRequest(temp);
234 CPPUNIT_ASSERT_EQUAL(0, strcmp("John", temp->username()));
235 delete temp;
236 }
237
238 #include "auth/negotiate/auth_negotiate.h"
239 /* AuthNegotiateUserRequest::AuthNegotiateUserRequest works
240 */
241 void
242 testAuthNegotiateUserRequest::construction()
243 {
244 AuthNegotiateUserRequest();
245 AuthNegotiateUserRequest *temp=new AuthNegotiateUserRequest();
246 delete temp;
247 }
248
249 void
250 testAuthNegotiateUserRequest::username()
251 {
252 AuthNegotiateUserRequest();
253 AuthNegotiateUserRequest *temp=new AuthNegotiateUserRequest();
254 NegotiateUser *user=new NegotiateUser(AuthConfig::Find("negotiate"));
255 user->username("John");
256 temp->user(user);
257 user->addRequest(temp);
258 CPPUNIT_ASSERT_EQUAL(0, strcmp("John", temp->username()));
259 delete temp;
260 }