+#include "portable.h"
+
#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
+
+#include <ac/string.h>
+#include <ac/ctype.h>
+#include <ac/socket.h>
+#include <ac/unistd.h>
+#include <ac/wait.h>
+
#include <sys/param.h>
+
+#include "ldapconfig.h"
#include "../slap.h"
#include "../back-ldbm/back-ldbm.h"
+#include "ldif.h"
-#define DEFAULT_CONFIGFILE "%ETCDIR%/slapd.conf"
-#define DEFAULT_ETCDIR "%ETCDIR%"
#define INDEXCMD "ldif2index"
#define ID2ENTRYCMD "ldif2id2entry"
#define ID2CHILDRENCMD "ldif2id2children"
#define MAXARGS 100
-extern void attr_index_config();
-extern char *str_getline();
-extern int strcasecmp();
-extern int nbackends;
-extern Backend *backends;
-extern int ldap_debug;
-
-int ldap_debug;
-int ldap_syslog;
-int ldap_syslog_level;
-int global_schemacheck;
-int num_entries_sent;
-int num_bytes_sent;
-int active_threads;
-char *default_referral;
-struct objclass *global_oc;
-time_t currenttime;
-pthread_t listener_tid;
-pthread_mutex_t num_sent_mutex;
-pthread_mutex_t entry2str_mutex;
-pthread_mutex_t active_threads_mutex;
-pthread_mutex_t new_conn_mutex;
-pthread_mutex_t currenttime_mutex;
-pthread_mutex_t replog_mutex;
-pthread_mutex_t ops_mutex;
-pthread_mutex_t regex_mutex;
-
-static void fork_child();
-static void wait4kids();
+static void fork_child( char *prog, char *args[] );
+static void wait4kids( int nkidval );
static char *indexcmd;
static char *tailorfile;
static char *inputfile;
static int maxkids = 1;
static int nkids;
-
+
static void
usage( char *name )
{
- fprintf( stderr, "usage: %s -i inputfile [-d debuglevel] [-f configfile] [-j #jobs] [-n databasenumber] [-e etcdir]\n", name );
+ fprintf( stderr, "usage: %s -i inputfile [-d debuglevel] [-f configfile] [-j #jobs] [-n databasenumber] [-s sbindir]\n", name );
exit( 1 );
}
+int
main( int argc, char **argv )
{
int i, stop, status;
- char *linep, *buf, *etcdir;
- char *args[10];
+ char *linep, *buf, *sbindir;
+ char *args[MAXARGS];
char buf2[20], buf3[20];
char line[BUFSIZ];
char cmd[MAXPATHLEN];
int dbnum;
ID id;
Backend *be = NULL;
+ struct ldbminfo *li;
struct berval bv;
struct berval *vals[2];
Avlnode *avltypes = NULL;
- extern char *optarg;
- etcdir = DEFAULT_ETCDIR;
- tailorfile = DEFAULT_CONFIGFILE;
+ sbindir = DEFAULT_SBINDIR;
+ tailorfile = SLAPD_DEFAULT_CONFIGFILE;
dbnum = -1;
- while ( (i = getopt( argc, argv, "d:e:f:i:j:n:" )) != EOF ) {
+ while ( (i = getopt( argc, argv, "d:e:s:f:i:j:n:" )) != EOF ) {
switch ( i ) {
case 'd': /* turn on debugging */
ldap_debug = atoi( optarg );
break;
- case 'e': /* alternate etcdir (index cmd location) */
- etcdir = strdup( optarg );
+ case 's': /* alternate sbindir (index cmd location) */
+ case 'e': /* accept -e for backwards compatibility */
+ sbindir = strdup( optarg );
break;
case 'f': /* specify a tailor file */
fprintf( stderr, "No ldbm database found in config file\n" );
exit( 1 );
}
- } else if ( dbnum < 0 || dbnum > nbackends ) {
+ } 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 );
exit( 1 );
}
be = &backends[dbnum];
+ /* disable write sync'ing */
+ li = (struct ldbminfo *) be->be_private;
+ li->li_dbcachewsync = 0;
+
/*
* generate the id2entry index
*/
i = 0;
- sprintf( cmd, "%s/%s", etcdir, ID2ENTRYCMD );
+ sprintf( cmd, "%s/%s", sbindir, ID2ENTRYCMD );
args[i++] = cmd;
args[i++] = "-i";
args[i++] = inputfile;
args[i++] = "-f";
args[i++] = tailorfile;
args[i++] = "-n";
- sprintf( buf2, "%d", dbnum );
+ sprintf( buf2, "%d", dbnum+1 );
args[i++] = buf2;
if ( ldap_debug ) {
sprintf( buf3, "%d", ldap_debug );
*/
i = 0;
- sprintf( cmd, "%s/%s", etcdir, ID2CHILDRENCMD );
+ sprintf( cmd, "%s/%s", sbindir, ID2CHILDRENCMD );
args[i++] = cmd;
args[i++] = "-i";
args[i++] = inputfile;
args[i++] = "-f";
args[i++] = tailorfile;
args[i++] = "-n";
- sprintf( buf2, "%d", dbnum );
+ sprintf( buf2, "%d", dbnum+1 );
args[i++] = buf2;
if ( ldap_debug ) {
sprintf( buf3, "%d", ldap_debug );
*/
i = 0;
- sprintf( cmd, "%s/%s", etcdir, INDEXCMD );
+ sprintf( cmd, "%s/%s", sbindir, INDEXCMD );
args[i++] = cmd;
args[i++] = "-i";
args[i++] = inputfile;
args[i++] = "-f";
args[i++] = tailorfile;
args[i++] = "-n";
- sprintf( buf2, "%d", dbnum );
+ sprintf( buf2, "%d", dbnum+1 );
args[i++] = buf2;
if ( ldap_debug ) {
sprintf( buf3, "%d", ldap_debug );
int vlen, indexmask, syntaxmask;
Datum key, data;
+ ldbm_datum_init( key );
+ ldbm_datum_init( data );
+
if ( fgets( line, sizeof(line), stdin ) != NULL ) {
int len;