1 #define SQUID_UNIT_TEST 1
8 #include "auth/Gadgets.h"
9 #include "auth/UserRequest.h"
10 #include "auth/Scheme.h"
11 #include "auth/Config.h"
14 CPPUNIT_TEST_SUITE_REGISTRATION( testAuth
);
15 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthConfig
);
16 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthUserRequest
);
17 #if HAVE_AUTH_MODULE_BASIC
18 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthBasicUserRequest
);
20 #if HAVE_AUTH_MODULE_DIGEST
21 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthDigestUserRequest
);
23 #if HAVE_AUTH_MODULE_NTLM
24 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthNTLMUserRequest
);
26 #if HAVE_AUTH_MODULE_NEGOTIATE
27 CPPUNIT_TEST_SUITE_REGISTRATION( testAuthNegotiateUserRequest
);
30 /* Instantiate all auth framework types */
32 testAuth::instantiate()
35 char const * stub_config
="auth_param digest program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd\n"
36 "auth_param digest children 5\n"
37 "auth_param digest realm Squid proxy-caching web server\n"
38 "auth_param digest nonce_garbage_interval 5 minutes\n"
39 "auth_param digest nonce_max_duration 30 minutes\n"
40 "auth_param digest nonce_max_count 50\n";
44 find_proxy_auth(char const *type
)
46 char const * proxy_auths
[][2]= { {"basic","Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="},
48 {"digest", "Digest username=\"robertdig\", realm=\"Squid proxy-caching web server\", nonce=\"yy8rQXjEWwixXVBj\", uri=\"/images/bg8.gif\", response=\"f75a7d3edd48d93c681c75dc4fb58700\", qop=auth, nc=00000012, cnonce=\"e2216641961e228e\" "},
50 {"negotiate", "Negotiate "}
53 for (unsigned count
= 0; count
< 4 ; count
++) {
54 if (strcasecmp(type
, proxy_auths
[count
][0]) == 0)
55 return proxy_auths
[count
][1];
63 getConfig(char const *type_str
)
65 Auth::ConfigVector
&config
= Auth::TheConfig
;
66 /* find a configuration for the scheme */
67 Auth::Config
*scheme
= Auth::Config::Find(type_str
);
70 /* Create a configuration */
71 Auth::Scheme::Pointer theScheme
= Auth::Scheme::Find(type_str
);
73 if (theScheme
== NULL
) {
75 //fatalf("Unknown authentication scheme '%s'.\n", type_str);
78 config
.push_back(theScheme
->createConfig());
79 scheme
= config
.back();
88 setup_scheme(Auth::Config
*scheme
, char const **params
, unsigned param_count
)
90 Auth::ConfigVector
&config
= Auth::TheConfig
;
92 for (unsigned position
=0; position
< param_count
; position
++) {
93 char *param_str
=xstrdup(params
[position
]);
94 strtok(param_str
, w_space
);
95 scheme
->parse(scheme
, config
.size(), param_str
);
103 static bool setup(false);
110 Auth::ConfigVector
&config
= Auth::TheConfig
;
112 char const *digest_parms
[]= {"program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd",
116 char const *basic_parms
[]= {"program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd",
120 char const *ntlm_parms
[]= {"program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd"};
122 char const *negotiate_parms
[]= {"program /home/robertc/install/squid/libexec/digest_pw_auth /home/robertc/install/squid/etc/digest.pwd"};
124 struct _scheme_params
{
127 unsigned paramlength
;
130 params
[]={ {"digest", digest_parms
, 2},
131 {"basic", basic_parms
, 2},
132 {"ntlm", ntlm_parms
, 1},
133 {"negotiate", negotiate_parms
, 1}
136 for (unsigned scheme
=0; scheme
< 4; scheme
++) {
137 Auth::Config
*schemeConfig
;
138 schemeConfig
= getConfig(params
[scheme
].name
);
139 if (schemeConfig
!= NULL
)
140 setup_scheme(schemeConfig
, params
[scheme
].params
,
141 params
[scheme
].paramlength
);
143 fprintf(stderr
,"Skipping unknown authentication scheme '%s'.\n",
144 params
[scheme
].name
);
147 authenticateInit(&config
);
152 /* Auth::Config::CreateAuthUser works for all
153 * authentication types
156 testAuthConfig::create()
161 for (Auth::Scheme::iterator i
= Auth::Scheme::GetSchemes().begin(); i
!= Auth::Scheme::GetSchemes().end(); ++i
) {
162 AuthUserRequest::Pointer authRequest
= Auth::Config::CreateAuthUser(find_proxy_auth((*i
)->type()));
163 CPPUNIT_ASSERT(authRequest
!= NULL
);
171 /* AuthUserRequest::scheme returns the correct scheme for all
172 * authentication types
175 testAuthUserRequest::scheme()
180 for (Auth::Scheme::iterator i
= Auth::Scheme::GetSchemes().begin(); i
!= Auth::Scheme::GetSchemes().end(); ++i
) {
181 // create a user request
182 // check its scheme matches *i
183 AuthUserRequest::Pointer authRequest
= Auth::Config::CreateAuthUser(find_proxy_auth((*i
)->type()));
184 CPPUNIT_ASSERT_EQUAL(authRequest
->scheme(), *i
);
188 #if HAVE_AUTH_MODULE_BASIC
189 #include "auth/basic/User.h"
190 #include "auth/basic/UserRequest.h"
191 /* AuthBasicUserRequest::AuthBasicUserRequest works
194 testAuthBasicUserRequest::construction()
196 AuthBasicUserRequest();
197 AuthBasicUserRequest
*temp
=new AuthBasicUserRequest();
202 testAuthBasicUserRequest::username()
204 AuthUserRequest::Pointer temp
= new AuthBasicUserRequest();
205 Auth::Basic::User
*basic_auth
=new Auth::Basic::User(Auth::Config::Find("basic"));
206 basic_auth
->username("John");
207 temp
->user(basic_auth
);
208 CPPUNIT_ASSERT_EQUAL(0, strcmp("John", temp
->username()));
210 #endif /* HAVE_AUTH_MODULE_BASIC */
212 #if HAVE_AUTH_MODULE_DIGEST
213 #include "auth/digest/User.h"
214 #include "auth/digest/UserRequest.h"
215 /* AuthDigestUserRequest::AuthDigestUserRequest works
218 testAuthDigestUserRequest::construction()
220 AuthDigestUserRequest();
221 AuthDigestUserRequest
*temp
=new AuthDigestUserRequest();
226 testAuthDigestUserRequest::username()
228 AuthUserRequest::Pointer temp
= new AuthDigestUserRequest();
229 Auth::Digest::User
*duser
=new Auth::Digest::User(Auth::Config::Find("digest"));
230 duser
->username("John");
232 CPPUNIT_ASSERT_EQUAL(0, strcmp("John", temp
->username()));
234 #endif /* HAVE_AUTH_MODULE_DIGEST */
236 #if HAVE_AUTH_MODULE_NTLM
237 #include "auth/ntlm/User.h"
238 #include "auth/ntlm/UserRequest.h"
239 /* AuthNTLMUserRequest::AuthNTLMUserRequest works
242 testAuthNTLMUserRequest::construction()
244 AuthNTLMUserRequest();
245 AuthNTLMUserRequest
*temp
=new AuthNTLMUserRequest();
250 testAuthNTLMUserRequest::username()
252 AuthUserRequest::Pointer temp
= new AuthNTLMUserRequest();
253 Auth::Ntlm::User
*nuser
=new Auth::Ntlm::User(Auth::Config::Find("ntlm"));
254 nuser
->username("John");
256 CPPUNIT_ASSERT_EQUAL(0, strcmp("John", temp
->username()));
258 #endif /* HAVE_AUTH_MODULE_NTLM */
260 #if HAVE_AUTH_MODULE_NEGOTIATE
261 #include "auth/negotiate/User.h"
262 #include "auth/negotiate/UserRequest.h"
263 /* AuthNegotiateUserRequest::AuthNegotiateUserRequest works
266 testAuthNegotiateUserRequest::construction()
268 AuthNegotiateUserRequest();
269 AuthNegotiateUserRequest
*temp
=new AuthNegotiateUserRequest();
274 testAuthNegotiateUserRequest::username()
276 AuthUserRequest::Pointer temp
= new AuthNegotiateUserRequest();
277 Auth::Negotiate::User
*nuser
=new Auth::Negotiate::User(Auth::Config::Find("negotiate"));
278 nuser
->username("John");
280 CPPUNIT_ASSERT_EQUAL(0, strcmp("John", temp
->username()));
283 #endif /* HAVE_AUTH_MODULE_NEGOTIATE */
284 #endif /* USE_AUTH */