View | Details | Raw Unified | Return to bug 6979
Collapse All | Expand All

(-)a/C4/Auth_with_ldap.pm (-1 / +3 lines)
Lines 60-65 my $prefhost = $ldap->{hostname} or die ldapserver_error('hostname'); Link Here
60
my $base      = $ldap->{base}		or die ldapserver_error('base');
60
my $base      = $ldap->{base}		or die ldapserver_error('base');
61
$ldapname     = $ldap->{user}		;
61
$ldapname     = $ldap->{user}		;
62
$ldappassword = $ldap->{pass}		;
62
$ldappassword = $ldap->{pass}		;
63
$ldap->{anonymous_bind} = 1 unless $ldapname && $ldappassword;
63
our %mapping  = %{$ldap->{mapping}}; # FIXME dpavlin -- don't die because of || (); from 6eaf8511c70eb82d797c941ef528f4310a15e9f9
64
our %mapping  = %{$ldap->{mapping}}; # FIXME dpavlin -- don't die because of || (); from 6eaf8511c70eb82d797c941ef528f4310a15e9f9
64
my @mapkeys = keys %mapping;
65
my @mapkeys = keys %mapping;
65
$debug and print STDERR "Got ", scalar(@mapkeys), " ldap mapkeys (  total  ): ", join ' ', @mapkeys, "\n";
66
$debug and print STDERR "Got ", scalar(@mapkeys), " ldap mapkeys (  total  ): ", join ' ', @mapkeys, "\n";
Lines 176-182 sub checkpw_ldap { Link Here
176
            $userldapentry = $search->shift_entry;
177
            $userldapentry = $search->shift_entry;
177
        }
178
        }
178
    } else {
179
    } else {
179
		my $res = ($config{anonymous}) ? $db->bind : $db->bind($ldapname, password=>$ldappassword);
180
		my $res = ($ldap->{anonymous_bind}) ? $db->bind : $db->bind($ldapname, password=>$ldappassword);
180
		if ($res->code) {		# connection refused
181
		if ($res->code) {		# connection refused
181
			warn "LDAP bind failed as ldapuser " . ($ldapname || '[ANONYMOUS]') . ": " . description($res);
182
			warn "LDAP bind failed as ldapuser " . ($ldapname || '[ANONYMOUS]') . ": " . description($res);
182
			return 0;
183
			return 0;
Lines 189-194 sub checkpw_ldap { Link Here
189
            warn "LDAP Auth rejected : invalid password for user '$userid'. " . description($user_ldap_bind_ret);
190
            warn "LDAP Auth rejected : invalid password for user '$userid'. " . description($user_ldap_bind_ret);
190
            return -1;
191
            return -1;
191
        }
192
        }
193
192
	}
194
	}
193
195
194
    # To get here, LDAP has accepted our user's login attempt.
196
    # To get here, LDAP has accepted our user's login attempt.
(-)a/t/db_dependent/Auth_with_ldap.t (-70 / +39 lines)
Lines 41-51 my $anonymous_bind = 1; Link Here
41
# Variables controlling LDAP behaviour
41
# Variables controlling LDAP behaviour
42
my $desired_authentication_result = 'success';
42
my $desired_authentication_result = 'success';
43
my $desired_connection_result     = 'error';
43
my $desired_connection_result     = 'error';
44
my $desired_bind_result           = 'error';
44
my $desired_admin_bind_result     = 'error';
45
my $desired_compare_result        = 'error';
45
my $desired_compare_result        = 'error';
46
my $desired_search_result         = 'error';
46
my $desired_search_result         = 'error';
47
my $desired_count_result          = 1;
47
my $desired_count_result          = 1;
48
my $non_anonymous_bind_result     = 'error';
48
my $desired_bind_result           = 'error';
49
my $ret;
49
my $ret;
50
50
51
# Mock the context module
51
# Mock the context module
Lines 137-143 subtest 'checkpw_ldap tests' => sub { Link Here
137
137
138
        $desired_authentication_result = 'success';
138
        $desired_authentication_result = 'success';
139
        $anonymous_bind                = 1;
139
        $anonymous_bind                = 1;
140
        $desired_bind_result           = 'error';
140
        $desired_admin_bind_result   = 'error';
141
        $desired_search_result         = 'error';
141
        $desired_search_result         = 'error';
142
        reload_ldap_module();
142
        reload_ldap_module();
143
143
Lines 151-160 subtest 'checkpw_ldap tests' => sub { Link Here
151
151
152
        $desired_authentication_result = 'success';
152
        $desired_authentication_result = 'success';
153
        $anonymous_bind                = 1;
153
        $anonymous_bind                = 1;
154
        $desired_bind_result           = 'success';
154
        $desired_admin_bind_result   = 'success';
155
        $desired_search_result         = 'success';
155
        $desired_search_result         = 'success';
156
        $desired_count_result          = 1;
156
        $desired_count_result          = 1;
157
        $non_anonymous_bind_result     = 'success';
157
        $desired_bind_result = 'success';
158
        $update                        = 1;
158
        $update                        = 1;
159
        reload_ldap_module();
159
        reload_ldap_module();
160
160
Lines 187-193 subtest 'checkpw_ldap tests' => sub { Link Here
187
            'checkpw_ldap returns 0 if user lookup returns 0'
187
            'checkpw_ldap returns 0 if user lookup returns 0'
188
        );
188
        );
189
189
190
        $non_anonymous_bind_result = 'error';
190
        $desired_bind_result = 'error';
191
        reload_ldap_module();
191
        reload_ldap_module();
192
192
193
        warning_like {
193
        warning_like {
Lines 202-211 subtest 'checkpw_ldap tests' => sub { Link Here
202
        # regression tests for bug 12831
202
        # regression tests for bug 12831
203
        $desired_authentication_result = 'error';
203
        $desired_authentication_result = 'error';
204
        $anonymous_bind                = 0;
204
        $anonymous_bind                = 0;
205
        $desired_bind_result           = 'error';
205
        $desired_admin_bind_result   = 'error';
206
        $desired_search_result         = 'success';
206
        $desired_search_result         = 'success';
207
        $desired_count_result          = 0;           # user auth problem
207
        $desired_count_result          = 0;           # user auth problem
208
        $non_anonymous_bind_result     = 'error';
208
        $desired_bind_result = 'error';
209
        reload_ldap_module();
209
        reload_ldap_module();
210
210
211
        warning_like {
211
        warning_like {
Lines 227-234 subtest 'checkpw_ldap tests' => sub { Link Here
227
227
228
        # Anonymous bind
228
        # Anonymous bind
229
        $anonymous_bind            = 1;
229
        $anonymous_bind            = 1;
230
        $desired_bind_result       = 'error';
230
        $desired_admin_bind_result = 'error';
231
        $non_anonymous_bind_result = 'error';
231
        $desired_bind_result = 'error';
232
        reload_ldap_module();
232
        reload_ldap_module();
233
233
234
        warning_like {
234
        warning_like {
Lines 240-248 qr/LDAP bind failed as ldapuser cn=Manager,dc=metavore,dc=com: LDAP error #1: er Link Here
240
        is( $ret, 0, 'checkpw_ldap returns 0 if bind fails' );
240
        is( $ret, 0, 'checkpw_ldap returns 0 if bind fails' );
241
241
242
        $anonymous_bind            = 1;
242
        $anonymous_bind            = 1;
243
        $desired_bind_result       = 'success';
243
        $desired_admin_bind_result = 'success';
244
        $non_anonymous_bind_result = 'success';
244
        $desired_bind_result = 'error';
245
        $desired_compare_result    = 'error';
246
        reload_ldap_module();
245
        reload_ldap_module();
247
246
248
        warning_like {
247
        warning_like {
Lines 255-263 qr/LDAP Auth rejected : invalid password for user 'hola'. LDAP error #1: error_n Link Here
255
254
256
        # Non-anonymous bind
255
        # Non-anonymous bind
257
        $anonymous_bind            = 0;
256
        $anonymous_bind            = 0;
258
        $desired_bind_result       = 'success';
257
        $desired_admin_bind_result = 'error';
259
        $non_anonymous_bind_result = 'error';
258
        $desired_bind_result = 'error';
260
        $desired_compare_result    = 'dont care';
261
        reload_ldap_module();
259
        reload_ldap_module();
262
260
263
        warning_like {
261
        warning_like {
Lines 269-277 qr/LDAP bind failed as ldapuser cn=Manager,dc=metavore,dc=com: LDAP error #1: er Link Here
269
        is( $ret, 0, 'checkpw_ldap returns 0 if bind fails' );
267
        is( $ret, 0, 'checkpw_ldap returns 0 if bind fails' );
270
268
271
        $anonymous_bind            = 0;
269
        $anonymous_bind            = 0;
272
        $desired_bind_result       = 'success';
270
        $desired_admin_bind_result = 'success';
273
        $non_anonymous_bind_result = 'success';
271
        $desired_bind_result = 'error';
274
        $desired_compare_result    = 'error';
275
        reload_ldap_module();
272
        reload_ldap_module();
276
273
277
        warning_like {
274
        warning_like {
Lines 369-427 sub mock_net_ldap { Link Here
369
366
370
    my $mocked_ldap = Test::MockObject->new();
367
    my $mocked_ldap = Test::MockObject->new();
371
368
372
    $mocked_ldap->mock(
369
    $mocked_ldap->mock( 'bind', sub {
373
        'bind',
370
        if (is_admin_bind(@_)) {
374
        sub {
371
            return mock_net_ldap_message(
375
372
                ($desired_admin_bind_result eq 'error' ) ? 1 : 0, # code
376
            my @args = @_;
373
                ($desired_admin_bind_result eq 'error' ) ? 1 : 0, # error
377
            my $mocked_message;
374
                ($desired_admin_bind_result eq 'error' ) ? 'error_name' : 0, # error_name
378
375
                ($desired_admin_bind_result eq 'error' ) ? 'error_text' : 0  # error_text
379
            if ( $#args > 1 ) {
376
            );
380
381
                # Args passed => non-anonymous bind
382
                if ( $non_anonymous_bind_result eq 'error' ) {
383
                    return mock_net_ldap_message( 1, 1, 'error_name',
384
                        'error_text' );
385
                }
386
                else {
387
                    return mock_net_ldap_message( 0, 0, q{}, q{} );
388
                }
389
            }
390
            else {
391
                $mocked_message = mock_net_ldap_message(
392
                    ( $desired_bind_result eq 'error' ) ? 1 : 0,    # code
393
                    ( $desired_bind_result eq 'error' ) ? 1 : 0,    # error
394
                    ( $desired_bind_result eq 'error' )
395
                    ? 'error_name'
396
                    : 0,                                            # error_name
397
                    ( $desired_bind_result eq 'error' )
398
                    ? 'error_text'
399
                    : 0                                             # error_text
400
                );
401
            }
402
403
            return $mocked_message;
404
        }
377
        }
405
    );
378
        else {
406
379
            if ( $desired_bind_result eq 'error' ) {
407
    $mocked_ldap->mock(
380
                return mock_net_ldap_message(1,1,'error_name','error_text');
408
        'compare',
409
        sub {
410
411
            my $mocked_message;
412
413
            if ( $desired_compare_result eq 'error' ) {
414
                $mocked_message =
415
                  mock_net_ldap_message( 1, 1, 'error_name', 'error_text' );
416
            }
417
            else {
418
                # we expect return code 6 for success
419
                $mocked_message = mock_net_ldap_message( 6, 0, q{}, q{} );
420
            }
381
            }
421
382
            return mock_net_ldap_message(0,0,'','');
422
            return $mocked_message;
423
        }
383
        }
424
    );
384
    });
425
385
426
    $mocked_ldap->mock(
386
    $mocked_ldap->mock(
427
        'search',
387
        'search',
Lines 506-511 sub reload_ldap_module { Link Here
506
    return;
466
    return;
507
}
467
}
508
468
469
sub is_admin_bind {
470
    my @args = @_;
471
472
    if ($#args <= 1 || $args[1] eq 'cn=Manager,dc=metavore,dc=com') {
473
        return 1;
474
    }
475
476
    return 0;
477
}
478
509
$schema->storage->txn_rollback;
479
$schema->storage->txn_rollback;
510
480
511
1;
481
1;
512
- 

Return to bug 6979