ldap 3.3 fix: slapd tools can't cope with multiple dbs in a conf file

Ed Oskiewicz (eoskiewi@jungle.bt.co.uk)
Tue, 17 Sep 1996 14:46:54 +0100

Hi,

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 );