|
Lines 37-47
my $anonymous_bind = 1;
Link Here
|
| 37 |
# Variables controlling LDAP behaviour |
37 |
# Variables controlling LDAP behaviour |
| 38 |
my $desired_authentication_result = 'success'; |
38 |
my $desired_authentication_result = 'success'; |
| 39 |
my $desired_connection_result = 'error'; |
39 |
my $desired_connection_result = 'error'; |
| 40 |
my $desired_bind_result = 'error'; |
40 |
my $desired_admin_bind_result = 'error'; |
| 41 |
my $desired_compare_result = 'error'; |
41 |
my $desired_compare_result = 'error'; |
| 42 |
my $desired_search_result = 'error'; |
42 |
my $desired_search_result = 'error'; |
| 43 |
my $desired_count_result = 1; |
43 |
my $desired_count_result = 1; |
| 44 |
my $non_anonymous_bind_result = 'error'; |
44 |
my $desired_bind_result = 'error'; |
| 45 |
my $ret; |
45 |
my $ret; |
| 46 |
|
46 |
|
| 47 |
# Mock the context module |
47 |
# Mock the context module |
|
Lines 90-96
subtest "checkpw_ldap tests" => sub {
Link Here
|
| 90 |
|
90 |
|
| 91 |
$desired_authentication_result = 'success'; |
91 |
$desired_authentication_result = 'success'; |
| 92 |
$anonymous_bind = 1; |
92 |
$anonymous_bind = 1; |
| 93 |
$desired_bind_result = 'error'; |
93 |
$desired_admin_bind_result = 'error'; |
| 94 |
$desired_search_result = 'error'; |
94 |
$desired_search_result = 'error'; |
| 95 |
reload_ldap_module(); |
95 |
reload_ldap_module(); |
| 96 |
|
96 |
|
|
Lines 103-117
subtest "checkpw_ldap tests" => sub {
Link Here
|
| 103 |
|
103 |
|
| 104 |
$desired_authentication_result = 'success'; |
104 |
$desired_authentication_result = 'success'; |
| 105 |
$anonymous_bind = 1; |
105 |
$anonymous_bind = 1; |
| 106 |
$desired_bind_result = 'success'; |
106 |
$desired_admin_bind_result = 'success'; |
| 107 |
$desired_search_result = 'success'; |
107 |
$desired_search_result = 'success'; |
| 108 |
$desired_count_result = 0; # user auth problem |
108 |
$desired_count_result = 0; # user auth problem |
| 109 |
$non_anonymous_bind_result = 'success'; |
109 |
$desired_bind_result = 'success'; |
| 110 |
reload_ldap_module(); |
110 |
reload_ldap_module(); |
| 111 |
is ( C4::Auth_with_ldap::checkpw_ldap( $dbh, 'hola', password => 'hey' ), |
111 |
is ( C4::Auth_with_ldap::checkpw_ldap( $dbh, 'hola', password => 'hey' ), |
| 112 |
0, "checkpw_ldap returns 0 if user lookup returns 0"); |
112 |
0, "checkpw_ldap returns 0 if user lookup returns 0"); |
| 113 |
|
113 |
|
| 114 |
$non_anonymous_bind_result = 'error'; |
114 |
$desired_bind_result = 'error'; |
| 115 |
reload_ldap_module(); |
115 |
reload_ldap_module(); |
| 116 |
|
116 |
|
| 117 |
warning_like { $ret = C4::Auth_with_ldap::checkpw_ldap( |
117 |
warning_like { $ret = C4::Auth_with_ldap::checkpw_ldap( |
|
Lines 123-132
subtest "checkpw_ldap tests" => sub {
Link Here
|
| 123 |
# regression tests for bug 12831 |
123 |
# regression tests for bug 12831 |
| 124 |
$desired_authentication_result = 'error'; |
124 |
$desired_authentication_result = 'error'; |
| 125 |
$anonymous_bind = 0; |
125 |
$anonymous_bind = 0; |
| 126 |
$desired_bind_result = 'error'; |
126 |
$desired_admin_bind_result = 'error'; |
| 127 |
$desired_search_result = 'success'; |
127 |
$desired_search_result = 'success'; |
| 128 |
$desired_count_result = 0; # user auth problem |
128 |
$desired_count_result = 0; # user auth problem |
| 129 |
$non_anonymous_bind_result = 'error'; |
129 |
$desired_bind_result = 'error'; |
| 130 |
reload_ldap_module(); |
130 |
reload_ldap_module(); |
| 131 |
|
131 |
|
| 132 |
warning_like { $ret = C4::Auth_with_ldap::checkpw_ldap( |
132 |
warning_like { $ret = C4::Auth_with_ldap::checkpw_ldap( |
|
Lines 145-152
subtest "checkpw_ldap tests" => sub {
Link Here
|
| 145 |
|
145 |
|
| 146 |
# Anonymous bind |
146 |
# Anonymous bind |
| 147 |
$anonymous_bind = 1; |
147 |
$anonymous_bind = 1; |
| 148 |
$desired_bind_result = 'error'; |
148 |
$desired_admin_bind_result = 'error'; |
| 149 |
$non_anonymous_bind_result = 'error'; |
149 |
$desired_bind_result = 'error'; |
| 150 |
reload_ldap_module(); |
150 |
reload_ldap_module(); |
| 151 |
|
151 |
|
| 152 |
warning_like { $ret = C4::Auth_with_ldap::checkpw_ldap( |
152 |
warning_like { $ret = C4::Auth_with_ldap::checkpw_ldap( |
|
Lines 156-164
subtest "checkpw_ldap tests" => sub {
Link Here
|
| 156 |
is ( $ret, 0, "checkpw_ldap returns 0 if bind fails"); |
156 |
is ( $ret, 0, "checkpw_ldap returns 0 if bind fails"); |
| 157 |
|
157 |
|
| 158 |
$anonymous_bind = 1; |
158 |
$anonymous_bind = 1; |
| 159 |
$desired_bind_result = 'success'; |
159 |
$desired_admin_bind_result = 'success'; |
| 160 |
$non_anonymous_bind_result = 'success'; |
160 |
$desired_bind_result = 'error'; |
| 161 |
$desired_compare_result = 'error'; |
|
|
| 162 |
reload_ldap_module(); |
161 |
reload_ldap_module(); |
| 163 |
|
162 |
|
| 164 |
warning_like { $ret = C4::Auth_with_ldap::checkpw_ldap( |
163 |
warning_like { $ret = C4::Auth_with_ldap::checkpw_ldap( |
|
Lines 169-177
subtest "checkpw_ldap tests" => sub {
Link Here
|
| 169 |
|
168 |
|
| 170 |
# Non-anonymous bind |
169 |
# Non-anonymous bind |
| 171 |
$anonymous_bind = 0; |
170 |
$anonymous_bind = 0; |
| 172 |
$desired_bind_result = 'success'; |
171 |
$desired_admin_bind_result = 'error'; |
| 173 |
$non_anonymous_bind_result = 'error'; |
172 |
$desired_bind_result = 'error'; |
| 174 |
$desired_compare_result = 'dont care'; |
|
|
| 175 |
reload_ldap_module(); |
173 |
reload_ldap_module(); |
| 176 |
|
174 |
|
| 177 |
warning_like { $ret = C4::Auth_with_ldap::checkpw_ldap( |
175 |
warning_like { $ret = C4::Auth_with_ldap::checkpw_ldap( |
|
Lines 181-189
subtest "checkpw_ldap tests" => sub {
Link Here
|
| 181 |
is ( $ret, 0, "checkpw_ldap returns 0 if bind fails"); |
179 |
is ( $ret, 0, "checkpw_ldap returns 0 if bind fails"); |
| 182 |
|
180 |
|
| 183 |
$anonymous_bind = 0; |
181 |
$anonymous_bind = 0; |
| 184 |
$desired_bind_result = 'success'; |
182 |
$desired_admin_bind_result = 'success'; |
| 185 |
$non_anonymous_bind_result = 'success'; |
183 |
$desired_bind_result = 'error'; |
| 186 |
$desired_compare_result = 'error'; |
|
|
| 187 |
reload_ldap_module(); |
184 |
reload_ldap_module(); |
| 188 |
|
185 |
|
| 189 |
warning_like { $ret = C4::Auth_with_ldap::checkpw_ldap( |
186 |
warning_like { $ret = C4::Auth_with_ldap::checkpw_ldap( |
|
Lines 265-305
sub mock_net_ldap {
Link Here
|
| 265 |
my $mocked_ldap = Test::MockObject->new(); |
262 |
my $mocked_ldap = Test::MockObject->new(); |
| 266 |
|
263 |
|
| 267 |
$mocked_ldap->mock( 'bind', sub { |
264 |
$mocked_ldap->mock( 'bind', sub { |
| 268 |
|
265 |
if (is_admin_bind(@_)) { |
| 269 |
my @args = @_; |
266 |
return mock_net_ldap_message( |
| 270 |
my $mocked_message; |
267 |
($desired_admin_bind_result eq 'error' ) ? 1 : 0, # code |
| 271 |
|
268 |
($desired_admin_bind_result eq 'error' ) ? 1 : 0, # error |
| 272 |
if ( $#args > 1 ) { |
269 |
($desired_admin_bind_result eq 'error' ) ? 'error_name' : 0, # error_name |
| 273 |
# Args passed => non-anonymous bind |
270 |
($desired_admin_bind_result eq 'error' ) ? 'error_text' : 0 # error_text |
| 274 |
if ( $non_anonymous_bind_result eq 'error' ) { |
|
|
| 275 |
return mock_net_ldap_message(1,1,'error_name','error_text'); |
| 276 |
} else { |
| 277 |
return mock_net_ldap_message(0,0,'',''); |
| 278 |
} |
| 279 |
} else { |
| 280 |
$mocked_message = mock_net_ldap_message( |
| 281 |
($desired_bind_result eq 'error' ) ? 1 : 0, # code |
| 282 |
($desired_bind_result eq 'error' ) ? 1 : 0, # error |
| 283 |
($desired_bind_result eq 'error' ) ? 'error_name' : 0, # error_name |
| 284 |
($desired_bind_result eq 'error' ) ? 'error_text' : 0 # error_text |
| 285 |
); |
271 |
); |
| 286 |
} |
|
|
| 287 |
|
| 288 |
return $mocked_message; |
| 289 |
}); |
| 290 |
|
| 291 |
$mocked_ldap->mock( 'compare', sub { |
| 292 |
|
| 293 |
my $mocked_message; |
| 294 |
|
| 295 |
if ( $desired_compare_result eq 'error' ) { |
| 296 |
$mocked_message = mock_net_ldap_message(1,1,'error_name','error_text'); |
| 297 |
} else { |
272 |
} else { |
| 298 |
# we expect return code 6 for success |
273 |
if ( $desired_bind_result eq 'error' ) { |
| 299 |
$mocked_message = mock_net_ldap_message(6,0,'',''); |
274 |
return mock_net_ldap_message(1,1,'error_name','error_text'); |
|
|
275 |
} |
| 276 |
return mock_net_ldap_message(0,0,'',''); |
| 300 |
} |
277 |
} |
| 301 |
|
|
|
| 302 |
return $mocked_message; |
| 303 |
}); |
278 |
}); |
| 304 |
|
279 |
|
| 305 |
$mocked_ldap->mock( 'search', sub { |
280 |
$mocked_ldap->mock( 'search', sub { |
|
Lines 374-379
sub reload_ldap_module {
Link Here
|
| 374 |
C4::Auth_with_ldap->import; |
349 |
C4::Auth_with_ldap->import; |
| 375 |
} |
350 |
} |
| 376 |
|
351 |
|
|
|
352 |
sub is_admin_bind { |
| 353 |
my @args = @_; |
| 354 |
|
| 355 |
if ($#args <= 1 || $args[1] eq 'cn=Manager,dc=metavore,dc=com') { |
| 356 |
return 1; |
| 357 |
} |
| 358 |
|
| 359 |
return 0; |
| 360 |
} |
| 361 |
|
| 377 |
$dbh->rollback; |
362 |
$dbh->rollback; |
| 378 |
|
363 |
|
| 379 |
1; |
364 |
1; |
| 380 |
- |
|
|