~ubuntu-branches/ubuntu/maverick/openldap/maverick-proposed

« back to all changes in this revision

Viewing changes to servers/slapd/back-bdb/bind.c

  • Committer: Bazaar Package Importer
  • Author(s): Mathias Gug
  • Date: 2009-02-18 18:44:00 UTC
  • mfrom: (0.1.1 upstream)
  • mto: (0.3.1 squeeze)
  • mto: This revision was merged to the branch mainline in revision 11.
  • Revision ID: james.westby@ubuntu.com-20090218184400-xmj1e22xo7i50ar6
Tags: upstream-2.4.14
ImportĀ upstreamĀ versionĀ 2.4.14

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* bind.c - bdb backend bind routine */
2
 
/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/bind.c,v 1.45.2.4 2008/02/11 23:26:45 kurt Exp $ */
 
2
/* $OpenLDAP: pkg/ldap/servers/slapd/back-bdb/bind.c,v 1.45.2.6 2009/01/22 00:01:04 kurt Exp $ */
3
3
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
4
4
 *
5
 
 * Copyright 2000-2008 The OpenLDAP Foundation.
 
5
 * Copyright 2000-2009 The OpenLDAP Foundation.
6
6
 * All rights reserved.
7
7
 *
8
8
 * Redistribution and use in source and binary forms, with or without
32
32
 
33
33
        AttributeDescription *password = slap_schema.si_ad_userPassword;
34
34
 
35
 
        BDB_LOCKER      locker;
 
35
        DB_TXN          *rtxn;
36
36
        DB_LOCK         lock;
37
37
 
38
38
        Debug( LDAP_DEBUG_ARGS,
55
55
                break;
56
56
        }
57
57
 
58
 
        rs->sr_err = LOCK_ID(bdb->bi_dbenv, &locker);
 
58
        rs->sr_err = bdb_reader_get(op, bdb->bi_dbenv, &rtxn);
59
59
        switch(rs->sr_err) {
60
60
        case 0:
61
61
                break;
67
67
 
68
68
dn2entry_retry:
69
69
        /* get entry with reader lock */
70
 
        rs->sr_err = bdb_dn2entry( op, NULL, &op->o_req_ndn, &ei, 1,
71
 
                locker, &lock );
 
70
        rs->sr_err = bdb_dn2entry( op, rtxn, &op->o_req_ndn, &ei, 1,
 
71
                &lock );
72
72
 
73
73
        switch(rs->sr_err) {
74
74
        case DB_NOTFOUND:
76
76
                break;
77
77
        case LDAP_BUSY:
78
78
                send_ldap_error( op, rs, LDAP_BUSY, "ldap_server_busy" );
79
 
                LOCK_ID_FREE(bdb->bi_dbenv, locker);
80
79
                return LDAP_BUSY;
81
80
        case DB_LOCK_DEADLOCK:
82
81
        case DB_LOCK_NOTGRANTED:
83
82
                goto dn2entry_retry;
84
83
        default:
85
84
                send_ldap_error( op, rs, LDAP_OTHER, "internal error" );
86
 
                LOCK_ID_FREE(bdb->bi_dbenv, locker);
87
85
                return rs->sr_err;
88
86
        }
89
87
 
97
95
                rs->sr_err = LDAP_INVALID_CREDENTIALS;
98
96
                send_ldap_result( op, rs );
99
97
 
100
 
                LOCK_ID_FREE(bdb->bi_dbenv, locker);
101
 
 
102
98
                return rs->sr_err;
103
99
        }
104
100
 
158
154
                bdb_cache_return_entry_r( bdb, e, &lock );
159
155
        }
160
156
 
161
 
        LOCK_ID_FREE(bdb->bi_dbenv, locker);
162
 
 
163
157
        if ( rs->sr_err ) {
164
158
                send_ldap_result( op, rs );
165
159
                if ( rs->sr_ref ) {