This was sent to bug-ldap the other week but might be of general interest to
folks here. Ldif2ldbm and friends are incorrect (and inconsistent) in their
handling of the -n argument so if you try to use multiple databases in a
config file it won't work.
The context diffs which follow my signature should be applied in the
ldap-3.3/servers/slapd/tools directory.
Cheers,
Ed Oskiewicz
---
B54/76, BT Labs, Martlesham Heath, Ipswich, Suffolk, UK, IP5 7RE
oskiewicz_e_p@bt-web.bt.co.uk, eoskiewi@jungle.bt.co.uk
Tel +44 1473 640896, Fax +44 1473 640929
*** ldif2ldbm.c.orig Wed Sep 11 16:41:57 1996
--- ldif2ldbm.c Thu Sep 12 12:50:52 1996
***************
*** 136,140 ****
exit( 1 );
}
! } else if ( dbnum < 0 || dbnum > nbackends ) {
fprintf( stderr, "Database number selected via -n is out of range\n" );
fprintf( stderr, "Must be in the range 1 to %d (number of databases in the config file)\n", nbackends );
--- 136,140 ----
exit( 1 );
}
! } else if ( dbnum < 0 || dbnum > (nbackends-1) ) {
fprintf( stderr, "Database number selected via -n is out of range\n" );
fprintf( stderr, "Must be in the range 1 to %d (number of databases in the config file)\n", nbackends );
***************
*** 158,162 ****
args[i++] = tailorfile;
args[i++] = "-n";
! sprintf( buf2, "%d", dbnum );
args[i++] = buf2;
if ( ldap_debug ) {
--- 158,162 ----
args[i++] = tailorfile;
args[i++] = "-n";
! sprintf( buf2, "%d", dbnum+1 );
args[i++] = buf2;
if ( ldap_debug ) {
***************
*** 180,184 ****
args[i++] = tailorfile;
args[i++] = "-n";
! sprintf( buf2, "%d", dbnum );
args[i++] = buf2;
if ( ldap_debug ) {
--- 180,184 ----
args[i++] = tailorfile;
args[i++] = "-n";
! sprintf( buf2, "%d", dbnum+1 );
args[i++] = buf2;
if ( ldap_debug ) {
***************
*** 202,206 ****
args[i++] = tailorfile;
args[i++] = "-n";
! sprintf( buf2, "%d", dbnum );
args[i++] = buf2;
if ( ldap_debug ) {
--- 202,206 ----
args[i++] = tailorfile;
args[i++] = "-n";
! sprintf( buf2, "%d", dbnum+1 );
args[i++] = buf2;
if ( ldap_debug ) {
*** ldif2index.c.orig Thu Sep 12 10:24:45 1996
--- ldif2index.c Thu Sep 12 12:50:34 1996
***************
*** 109,113 ****
exit( 1 );
}
! } else if ( dbnum < 1 || dbnum > nbackends ) {
fprintf( stderr, "Database number selected via -n is out of range\n" );
fprintf( stderr, "Must be in the range 1 to %d (number of databases in the config file)\n", nbackends );
--- 109,113 ----
exit( 1 );
}
! } else if ( dbnum < 0 || dbnum > (nbackends-1) ) {
fprintf( stderr, "Database number selected via -n is out of range\n" );
fprintf( stderr, "Must be in the range 1 to %d (number of databases in the config file)\n", nbackends );
*** ldif2id2entry.c.orig Wed Sep 11 17:08:30 1996
--- ldif2id2entry.c Thu Sep 12 11:30:36 1996
***************
*** 118,122 ****
exit( 1 );
}
! } else if ( dbnum < 1 || dbnum > nbackends ) {
fprintf( stderr, "Database number selected via -n is out of range\n" );
fprintf( stderr, "Must be in the range 1 to %d (number of databases in the config file)\n", nbackends );
--- 118,122 ----
exit( 1 );
}
! } else if ( dbnum < 0 || dbnum > (nbackends-1) ) {
fprintf( stderr, "Database number selected via -n is out of range\n" );
fprintf( stderr, "Must be in the range 1 to %d (number of databases in the config file)\n", nbackends );
*** ldif2id2children.c.orig Thu Sep 12 10:24:13 1996
--- ldif2id2children.c Thu Sep 12 11:29:57 1996
***************
*** 122,126 ****
exit( 1 );
}
! } else if ( dbnum < 1 || dbnum > nbackends ) {
fprintf( stderr, "Database number selected via -n is out of range\n" );
fprintf( stderr, "Must be in the range 1 to %d (number of databases in the config file)\n", nbackends );
--- 122,126 ----
exit( 1 );
}
! } else if ( dbnum < 0 || dbnum > (nbackends-1) ) {
fprintf( stderr, "Database number selected via -n is out of range\n" );
fprintf( stderr, "Must be in the range 1 to %d (number of databases in the config file)\n", nbackends );