X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Ftools%2Fldif2ldbm.c;h=1f1c641729aee7228649ac63e73db1d4ff0cfe4f;hb=3c20cffccda737f39c04affcb2093565d3c4b116;hp=b2caa7b3cc0d87f86bd6cfd8b42ce1df40c3654f;hpb=42e0d83cb3a1a1c5b25183f1ab74ce7edbe25de7;p=openldap diff --git a/servers/slapd/tools/ldif2ldbm.c b/servers/slapd/tools/ldif2ldbm.c index b2caa7b3cc..1f1c641729 100644 --- a/servers/slapd/tools/ldif2ldbm.c +++ b/servers/slapd/tools/ldif2ldbm.c @@ -1,66 +1,47 @@ +#include "portable.h" + #include -#include -#include -#include + +#include +#include +#include +#include +#include + #include + +#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]; @@ -69,22 +50,23 @@ main( int argc, char **argv ) 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 */ @@ -135,7 +117,7 @@ main( int argc, char **argv ) 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 ); @@ -145,19 +127,23 @@ main( int argc, char **argv ) } 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 ); @@ -172,14 +158,14 @@ main( int argc, char **argv ) */ 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 ); @@ -194,14 +180,14 @@ main( int argc, char **argv ) */ 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 ); @@ -223,6 +209,9 @@ main( int argc, char **argv ) int vlen, indexmask, syntaxmask; Datum key, data; + ldbm_datum_init( key ); + ldbm_datum_init( data ); + if ( fgets( line, sizeof(line), stdin ) != NULL ) { int len;