Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Nadezhda Ivanova
OpenLDAP
Commits
3fb7a15a
Commit
3fb7a15a
authored
Aug 30, 2002
by
Kurt Zeilenga
Browse files
Sync with HEAD
parent
d384dd7d
Changes
7
Hide whitespace changes
Inline
Side-by-side
build/main.dsw
View file @
3fb7a15a
...
...
@@ -155,6 +155,9 @@ Package=<4>
Begin Project Dependency
Project_Dep_Name ldapwhoami
End Project Dependency
Begin Project Dependency
Project_Dep_Name ldapcompare
End Project Dependency
}}}
###############################################################################
...
...
@@ -239,6 +242,18 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
Project_Dep_Name liblber
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldap
End Project Dependency
Begin Project Dependency
Project_Dep_Name liblutil
End Project Dependency
Begin Project Dependency
Project_Dep_Name libldif
End Project Dependency
}}}
###############################################################################
...
...
libraries/libldap/cyrus.c
View file @
3fb7a15a
...
...
@@ -257,7 +257,7 @@ sb_sasl_read( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len)
continue
;
#endif
if
(
ret
<=
0
)
return
ret
;
return
bufptr
?
bufptr
:
ret
;
p
->
sec_buf_in
.
buf_ptr
+=
ret
;
}
...
...
@@ -287,7 +287,7 @@ sb_sasl_read( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len)
continue
;
#endif
if
(
ret
<=
0
)
return
ret
;
return
bufptr
?
bufptr
:
ret
;
p
->
sec_buf_in
.
buf_ptr
+=
ret
;
}
...
...
@@ -335,7 +335,7 @@ sb_sasl_write( Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len)
return
ret
;
/* Still have something left?? */
if
(
p
->
buf_out
.
buf_ptr
!=
p
->
buf_out
.
buf_end
)
{
errno
=
E
WOULDBLOCK
;
errno
=
E
AGAIN
;
return
0
;
}
}
...
...
libraries/libldap/request.c
View file @
3fb7a15a
...
...
@@ -146,7 +146,7 @@ ldap_int_flush_request(
LDAPConn
*
lc
=
lr
->
lr_conn
;
if
(
ber_flush
(
lc
->
lconn_sb
,
lr
->
lr_ber
,
0
)
!=
0
)
{
if
(
errno
==
E
WOULDBLOCK
)
{
if
(
errno
==
E
AGAIN
)
{
/* need to continue write later */
lr
->
lr_status
=
LDAP_REQST_WRITING
;
ldap_mark_select_write
(
ld
,
lc
->
lconn_sb
);
...
...
servers/slapd/back-bdb/idl.c
View file @
3fb7a15a
...
...
@@ -229,6 +229,20 @@ static int idl_delete( ID *ids, ID id )
return
0
;
}
static
char
*
bdb_show_key
(
DBT
*
key
,
char
*
buf
)
{
if
(
key
->
size
==
sizeof
(
ID
)
)
{
unsigned
char
*
c
=
key
->
data
;
sprintf
(
buf
,
"[%02x%02x%02x%02x]"
,
c
[
0
],
c
[
1
],
c
[
2
],
c
[
3
]
);
return
buf
;
}
else
{
return
key
->
data
;
}
}
int
bdb_idl_fetch_key
(
BackendDB
*
be
,
...
...
@@ -240,103 +254,115 @@ bdb_idl_fetch_key(
struct
bdb_info
*
bdb
=
(
struct
bdb_info
*
)
be
->
be_private
;
int
rc
;
DBT
data
;
#ifdef BDB_IDL_MULTI
/* buf must be large enough to grab the entire IDL in one
* get(), otherwise BDB 4 will leak resources on subsequent
* get's. We can safely call get() twice - once for the data,
* and once to get the DB_NOTFOUND result meaning there's
* no more data. See ITS#2040 for details.
*/
ID
buf
[
BDB_IDL_DB_SIZE
*
5
];
DBC
*
cursor
;
ID
*
i
;
void
*
ptr
;
size_t
len
;
int
rc2
;
int
flags
=
bdb
->
bi_db_opflags
|
DB_MULTIPLE
;
#endif
{
char
buf
[
16
];
#ifdef NEW_LOGGING
LDAP_LOG
(
INDEX
,
ARGS
,
"bdb_idl_fetch_key: %s
\n
"
,
bdb_show_key
(
key
,
buf
),
0
,
0
);
#else
Debug
(
LDAP_DEBUG_ARGS
,
"bdb_idl_fetch_key: %s
\n
"
,
bdb_show_key
(
key
,
buf
),
0
,
0
);
#endif
}
assert
(
ids
!=
NULL
);
DBTzero
(
&
data
);
#ifdef BDB_IDL_MULTI
{
DBC
*
cursor
;
/* buf must be large enough to grab the entire IDL in one
* get(), otherwise BDB 4 will leak resources on subsequent
* get's. We can safely call get() twice - once for the data,
* and once to get the DB_NOTFOUND result meaning there's
* no more data. See ITS#2040 for details.
*/
ID
buf
[
BDB_IDL_DB_SIZE
*
5
];
ID
*
i
;
void
*
ptr
;
size_t
len
;
int
rc2
;
int
flags
=
bdb
->
bi_db_opflags
|
DB_MULTIPLE
;
data
.
data
=
buf
;
data
.
ulen
=
sizeof
(
buf
);
data
.
flags
=
DB_DBT_USERMEM
;
if
(
tid
)
flags
|=
DB_RMW
;
rc
=
db
->
cursor
(
db
,
tid
,
&
cursor
,
bdb
->
bi_db_opflags
);
if
(
rc
!=
0
)
{
data
.
data
=
buf
;
data
.
ulen
=
sizeof
(
buf
);
data
.
flags
=
DB_DBT_USERMEM
;
if
(
tid
)
flags
|=
DB_RMW
;
rc
=
db
->
cursor
(
db
,
tid
,
&
cursor
,
bdb
->
bi_db_opflags
);
if
(
rc
!=
0
)
{
#ifdef NEW_LOGGING
LDAP_LOG
(
INDEX
,
ERR
,
"bdb_idl_fetch_key: cursor failed: %s (%d)
\n
"
,
db_strerror
(
rc
),
rc
,
0
);
LDAP_LOG
(
INDEX
,
ERR
,
"bdb_idl_fetch_key: cursor failed: %s (%d)
\n
"
,
db_strerror
(
rc
),
rc
,
0
);
#else
Debug
(
LDAP_DEBUG_ANY
,
"=> bdb_idl_fetch_key: "
"cursor failed: %s (%d)
\n
"
,
db_strerror
(
rc
),
rc
,
0
);
Debug
(
LDAP_DEBUG_ANY
,
"=> bdb_idl_fetch_key: "
"cursor failed: %s (%d)
\n
"
,
db_strerror
(
rc
),
rc
,
0
);
#endif
return
rc
;
}
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
flags
|
DB_SET
);
if
(
rc
==
0
)
{
i
=
ids
;
while
(
rc
==
0
)
{
u_int8_t
*
j
;
DB_MULTIPLE_INIT
(
ptr
,
&
data
);
while
(
ptr
)
{
DB_MULTIPLE_NEXT
(
ptr
,
&
data
,
j
,
len
);
if
(
j
)
{
++
i
;
AC_MEMCPY
(
i
,
j
,
sizeof
(
ID
)
);
}
return
rc
;
}
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
flags
|
DB_SET
);
if
(
rc
==
0
)
{
i
=
ids
;
while
(
rc
==
0
)
{
u_int8_t
*
j
;
DB_MULTIPLE_INIT
(
ptr
,
&
data
);
while
(
ptr
)
{
DB_MULTIPLE_NEXT
(
ptr
,
&
data
,
j
,
len
);
if
(
j
)
{
++
i
;
AC_MEMCPY
(
i
,
j
,
sizeof
(
ID
)
);
}
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
flags
|
DB_NEXT_DUP
);
}
if
(
rc
==
DB_NOTFOUND
)
rc
=
0
;
ids
[
0
]
=
i
-
ids
;
/* On disk, a range is denoted by 0 in the first element */
if
(
ids
[
1
]
==
0
)
{
if
(
ids
[
0
]
!=
BDB_IDL_RANGE_SIZE
)
{
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
flags
|
DB_NEXT_DUP
);
}
if
(
rc
==
DB_NOTFOUND
)
rc
=
0
;
ids
[
0
]
=
i
-
ids
;
/* On disk, a range is denoted by 0 in the first element */
if
(
ids
[
1
]
==
0
)
{
if
(
ids
[
0
]
!=
BDB_IDL_RANGE_SIZE
)
{
#ifdef NEW_LOGGING
LDAP_LOG
(
INDEX
,
ERR
,
"=> bdb_idl_fetch_key: range size mismatch: "
"expected %ld, got %ld
\n
"
,
BDB_IDL_RANGE_SIZE
,
ids
[
0
],
0
);
LDAP_LOG
(
INDEX
,
ERR
,
"=> bdb_idl_fetch_key: range size mismatch: "
"expected %ld, got %ld
\n
"
,
BDB_IDL_RANGE_SIZE
,
ids
[
0
],
0
);
#else
Debug
(
LDAP_DEBUG_ANY
,
"=> bdb_idl_fetch_key: "
"range size mismatch: expected %d, got %ld
\n
"
,
BDB_IDL_RANGE_SIZE
,
ids
[
0
],
0
);
Debug
(
LDAP_DEBUG_ANY
,
"=> bdb_idl_fetch_key: "
"range size mismatch: expected %d, got %ld
\n
"
,
BDB_IDL_RANGE_SIZE
,
ids
[
0
],
0
);
#endif
cursor
->
c_close
(
cursor
);
return
-
1
;
}
BDB_IDL_RANGE
(
ids
,
ids
[
2
],
ids
[
3
]
);
cursor
->
c_close
(
cursor
);
return
-
1
;
}
data
.
size
=
BDB_IDL_SIZEOF
(
ids
);
BDB_IDL_RANGE
(
ids
,
ids
[
2
],
ids
[
3
]
);
}
rc2
=
cursor
->
c_close
(
cursor
);
if
(
rc2
)
{
data
.
size
=
BDB_IDL_SIZEOF
(
ids
);
}
rc2
=
cursor
->
c_close
(
cursor
);
if
(
rc2
)
{
#ifdef NEW_LOGGING
LDAP_LOG
(
INDEX
,
ERR
,
"bdb_idl_fetch_key: close failed: %s (%d)
\n
"
,
db_strerror
(
rc2
),
rc2
,
0
);
LDAP_LOG
(
INDEX
,
ERR
,
"bdb_idl_fetch_key: close failed: %s (%d)
\n
"
,
db_strerror
(
rc2
),
rc2
,
0
);
#else
Debug
(
LDAP_DEBUG_ANY
,
"=> bdb_idl_fetch_key: "
"close failed: %s (%d)
\n
"
,
db_strerror
(
rc2
),
rc2
,
0
);
Debug
(
LDAP_DEBUG_ANY
,
"=> bdb_idl_fetch_key: "
"close failed: %s (%d)
\n
"
,
db_strerror
(
rc2
),
rc2
,
0
);
#endif
return
rc2
;
}
return
rc2
;
}
#else
#else
/* BDB_IDL_MULTI */
data
.
data
=
ids
;
data
.
ulen
=
BDB_IDL_UM_SIZEOF
;
data
.
flags
=
DB_DBT_USERMEM
;
/* fetch it */
rc
=
db
->
get
(
db
,
tid
,
key
,
&
data
,
bdb
->
bi_db_opflags
);
#endif
#endif
/* BDB_IDL_MULTI */
if
(
rc
==
DB_NOTFOUND
)
{
return
rc
;
...
...
@@ -383,6 +409,7 @@ bdb_idl_fetch_key(
return
rc
;
}
int
bdb_idl_insert_key
(
BackendDB
*
be
,
...
...
@@ -394,179 +421,178 @@ bdb_idl_insert_key(
struct
bdb_info
*
bdb
=
(
struct
bdb_info
*
)
be
->
be_private
;
int
rc
;
DBT
data
;
#ifndef BDB_IDL_MULTI
#ifdef BDB_IDL_MULTI
DBC
*
cursor
;
ID
lo
,
hi
,
tmp
;
char
*
err
;
#else
ID
ids
[
BDB_IDL_DB_SIZE
];
#endif
#if 0
/* for printable keys only */
{
char
buf
[
16
];
#ifdef NEW_LOGGING
LDAP_LOG( INDEX, ARGS, "bdb_idl_insert_key: %s %ld\n",
(char *)key->data, (long) id, 0 );
LDAP_LOG
(
INDEX
,
ARGS
,
"bdb_idl_insert_key: %lx %s
\n
"
,
(
long
)
id
,
bdb_show_key
(
key
,
buf
),
0
);
#else
Debug( LDAP_DEBUG_ARGS,
"=> bdb_idl_insert_key: %s %ld\n",
(char *)key->data, (long) id, 0 );
#endif
Debug
(
LDAP_DEBUG_ARGS
,
"bdb_idl_insert_key: %lx %s
\n
"
,
(
long
)
id
,
bdb_show_key
(
key
,
buf
),
0
);
#endif
}
assert
(
id
!=
NOID
);
DBTzero
(
&
data
);
#ifdef BDB_IDL_MULTI
{
DBC
*
cursor
;
ID
lo
,
hi
,
tmp
;
char
*
err
;
data
.
size
=
sizeof
(
ID
);
data
.
ulen
=
data
.
size
;
data
.
flags
=
DB_DBT_USERMEM
;
data
.
size
=
sizeof
(
ID
);
data
.
ulen
=
data
.
size
;
data
.
flags
=
DB_DBT_USERMEM
;
rc
=
db
->
cursor
(
db
,
tid
,
&
cursor
,
bdb
->
bi_db_opflags
);
if
(
rc
!=
0
)
{
rc
=
db
->
cursor
(
db
,
tid
,
&
cursor
,
bdb
->
bi_db_opflags
);
if
(
rc
!=
0
)
{
#ifdef NEW_LOGGING
LDAP_LOG
(
INDEX
,
ERR
,
"bdb_idl_insert_key: cursor failed: %s (%d)
\n
"
,
db_strerror
(
rc
),
rc
,
0
);
LDAP_LOG
(
INDEX
,
ERR
,
"bdb_idl_insert_key: cursor failed: %s (%d)
\n
"
,
db_strerror
(
rc
),
rc
,
0
);
#else
Debug
(
LDAP_DEBUG_ANY
,
"=> bdb_idl_insert_key: "
"cursor failed: %s (%d)
\n
"
,
db_strerror
(
rc
),
rc
,
0
);
Debug
(
LDAP_DEBUG_ANY
,
"=> bdb_idl_insert_key: "
"cursor failed: %s (%d)
\n
"
,
db_strerror
(
rc
),
rc
,
0
);
#endif
return
rc
;
}
data
.
data
=
&
tmp
;
/* Fetch the first data item for this key, to see if it
* exists and if it's a range.
*/
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
DB_SET
|
DB_RMW
);
err
=
"c_get"
;
if
(
rc
==
0
)
{
if
(
tmp
!=
0
)
{
/* not a range, count the number of items */
db_recno_t
count
;
rc
=
cursor
->
c_count
(
cursor
,
&
count
,
0
);
if
(
rc
!=
0
)
{
err
=
"c_count"
;
return
rc
;
}
data
.
data
=
&
tmp
;
/* Fetch the first data item for this key, to see if it
* exists and if it's a range.
*/
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
DB_SET
|
DB_RMW
);
err
=
"c_get"
;
if
(
rc
==
0
)
{
if
(
tmp
!=
0
)
{
/* not a range, count the number of items */
db_recno_t
count
;
rc
=
cursor
->
c_count
(
cursor
,
&
count
,
0
);
if
(
rc
!=
0
)
{
err
=
"c_count"
;
goto
fail
;
}
if
(
count
>=
BDB_IDL_DB_MAX
)
{
/* No room, convert to a range */
DBT
key2
=
*
key
;
key2
.
dlen
=
key2
.
ulen
;
key2
.
flags
|=
DB_DBT_PARTIAL
;
lo
=
tmp
;
data
.
data
=
&
hi
;
rc
=
cursor
->
c_get
(
cursor
,
&
key2
,
&
data
,
DB_NEXT_NODUP
);
if
(
rc
!=
0
&&
rc
!=
DB_NOTFOUND
)
{
err
=
"c_get next_nodup"
;
goto
fail
;
}
if
(
count
>=
BDB_IDL_DB_MAX
)
{
/* No room, convert to a range */
DBT
key2
=
*
key
;
key2
.
dlen
=
key2
.
ulen
;
key2
.
flags
|=
DB_DBT_PARTIAL
;
lo
=
tmp
;
data
.
data
=
&
hi
;
rc
=
cursor
->
c_get
(
cursor
,
&
key2
,
&
data
,
DB_NEXT_NODUP
);
if
(
rc
!=
0
&&
rc
!=
DB_NOTFOUND
)
{
err
=
"c_get next_nodup"
;
goto
fail
;
}
if
(
rc
==
DB_NOTFOUND
)
{
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
DB_LAST
);
if
(
rc
!=
0
)
{
err
=
"c_get last"
;
goto
fail
;
}
}
else
{
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
DB_PREV
);
if
(
rc
!=
0
)
{
err
=
"c_get prev"
;
goto
fail
;
}
}
if
(
id
<
lo
)
lo
=
id
;
else
if
(
id
>
hi
)
hi
=
id
;
rc
=
db
->
del
(
db
,
tid
,
key
,
0
);
if
(
rc
!=
0
)
{
err
=
"del"
;
goto
fail
;
}
data
.
data
=
&
id
;
id
=
0
;
rc
=
cursor
->
c_put
(
cursor
,
key
,
&
data
,
DB_KEYFIRST
);
if
(
rc
==
DB_NOTFOUND
)
{
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
DB_LAST
);
if
(
rc
!=
0
)
{
err
=
"c_
put 0
"
;
err
=
"c_
get last
"
;
goto
fail
;
}
id
=
lo
;
rc
=
cursor
->
c_put
(
cursor
,
key
,
&
data
,
DB_KEYLAST
);
if
(
rc
!=
0
)
{
err
=
"c_put lo"
;
goto
fail
;
}
id
=
hi
;
rc
=
cursor
->
c_put
(
cursor
,
key
,
&
data
,
DB_KEYLAST
);
}
else
{
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
DB_PREV
);
if
(
rc
!=
0
)
{
err
=
"c_
put hi
"
;
err
=
"c_
get prev
"
;
goto
fail
;
}
}
else
{
/* There's room, just store it */
goto
put1
;
}
}
else
{
/* It's a range, see if we need to rewrite
* the boundaries
*/
hi
=
id
;
data
.
data
=
&
lo
;
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
DB_NEXT_DUP
);
if
(
id
<
lo
)
lo
=
id
;
else
if
(
id
>
hi
)
hi
=
id
;
rc
=
db
->
del
(
db
,
tid
,
key
,
0
);
if
(
rc
!=
0
)
{
err
=
"
c_get lo
"
;
err
=
"
del
"
;
goto
fail
;
}
if
(
id
>
lo
)
{
data
.
data
=
&
hi
;
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
DB_NEXT_DUP
);
if
(
rc
!=
0
)
{
err
=
"c_get hi"
;
goto
fail
;
}
data
.
data
=
&
id
;
id
=
0
;
rc
=
cursor
->
c_put
(
cursor
,
key
,
&
data
,
DB_KEYFIRST
);
if
(
rc
!=
0
)
{
err
=
"c_put 0"
;
goto
fail
;
}
if
(
id
<
lo
||
id
>
hi
)
{
/* Delete the current lo/hi */
rc
=
cursor
->
c_del
(
cursor
,
0
);
if
(
rc
!=
0
)
{
err
=
"c_del"
;
goto
fail
;
}
data
.
data
=
&
id
;
rc
=
cursor
->
c_put
(
cursor
,
key
,
&
data
,
DB_KEYFIRST
);
if
(
rc
!=
0
)
{
err
=
"c_put lo/hi"
;
goto
fail
;
}
id
=
lo
;
rc
=
cursor
->
c_put
(
cursor
,
key
,
&
data
,
DB_KEYLAST
);
if
(
rc
!=
0
)
{
err
=
"c_put lo"
;
goto
fail
;
}
id
=
hi
;
rc
=
cursor
->
c_put
(
cursor
,
key
,
&
data
,
DB_KEYLAST
);
if
(
rc
!=
0
)
{
err
=
"c_put hi"
;
goto
fail
;
}
}
else
{
/* There's room, just store it */
goto
put1
;
}
}
else
if
(
rc
==
DB_NOTFOUND
)
{
put1:
data
.
data
=
&
id
;
rc
=
cursor
->
c_put
(
cursor
,
key
,
&
data
,
DB_KEYFIRST
);
/* Don't worry if it's already there */
if
(
rc
!=
0
&&
rc
!=
DB_KEYEXIST
)
{
err
=
"c_put id"
;
}
else
{
/* It's a range, see if we need to rewrite
* the boundaries
*/
hi
=
id
;
data
.
data
=
&
lo
;
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
DB_NEXT_DUP
);
if
(
rc
!=
0
)
{
err
=
"c_get lo"
;
goto
fail
;
}
}
else
{
/* initial c_get failed, nothing was done */
if
(
id
>
lo
)
{
data
.
data
=
&
hi
;
rc
=
cursor
->
c_get
(
cursor
,
key
,
&
data
,
DB_NEXT_DUP
);
if
(
rc
!=
0
)
{
err
=
"c_get hi"
;
goto
fail
;
}
}
if
(
id
<
lo
||
id
>
hi
)
{
/* Delete the current lo/hi */
rc
=
cursor
->
c_del
(
cursor
,
0
);
if
(
rc
!=
0
)
{
err
=
"c_del"
;
goto
fail
;
}
data
.
data
=
&
id
;
rc
=
cursor
->
c_put
(
cursor
,
key
,
&
data
,
DB_KEYFIRST
);
if
(
rc
!=
0
)
{
err
=
"c_put lo/hi"
;
goto
fail
;
}
}
}
}
else
if
(
rc
==
DB_NOTFOUND
)
{
put1:
data
.
data
=
&
id
;
rc
=
cursor
->
c_put
(
cursor
,
key
,
&
data
,
DB_NODUPDATA
);
/* Don't worry if it's already there */
if
(
rc
!=
0
&&
rc
!=
DB_KEYEXIST
)
{
err
=
"c_put id"
;
goto
fail
;
}
}
else
{
/* initial c_get failed, nothing was done */
fail:
#ifdef NEW_LOGGING
LDAP_LOG
(
INDEX
,
ERR
,
"bdb_idl_insert_key: %s failed: %s (%d)
\n
"
,
err
,
db_strerror
(
rc
),
rc
);
LDAP_LOG
(
INDEX
,
ERR
,
"bdb_idl_insert_key: %s failed: %s (%d)
\n
"
,
err
,
db_strerror
(
rc
),
rc
);
#else
Debug
(
LDAP_DEBUG_ANY
,
"=> bdb_idl_insert_key: "
"%s failed: %s (%d)
\n
"
,
err
,
db_strerror
(
rc
),
rc
);
Debug
(
LDAP_DEBUG_ANY
,
"=> bdb_idl_insert_key: "
"%s failed: %s (%d)
\n
"
,
err
,
db_strerror
(
rc
),
rc
);
#endif
cursor
->
c_close
(
cursor
);
return
rc
;
}
rc
=
cursor
->
c_close
(
cursor
);
cursor
->
c_close
(
cursor
);
return
rc
;
}
rc
=
cursor
->
c_close
(
cursor
);
#else
/* !BDB_IDL_MULTI */
data
.
data
=
ids
;
data
.
ulen
=
sizeof
ids
;
...
...
@@ -657,9 +683,7 @@ fail:
/* store the key */
rc
=
db
->
put
(
db
,
tid
,
key
,
&
data
,
0
);
#endif
if
(
rc
==
DB_KEYEXIST
)
rc
=
0
;
if
(
rc
!=
0
)
{
if
(
rc
!=
0
&&
rc
!=
DB_KEYEXIST
)
{
#ifdef NEW_LOGGING
LDAP_LOG
(
INDEX
,
ERR
,
"bdb_idl_insert_key: put failed: %s (%d)
\n
"
,
...
...
@@ -684,137 +708,142 @@ bdb_idl_delete_key(
struct
bdb_info
*
bdb
=
(
struct
bdb_info
*
)
be
->
be_private
;
int
rc
;
DBT
data
;