X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Ftools%2Fldif2ldbm.c;h=41b93676b0167f4fa4dab41071e2282a22fdef50;hb=0a7ca1e8d2f575f1a0c65932eb1e26136656c128;hp=b2caa7b3cc0d87f86bd6cfd8b42ce1df40c3654f;hpb=42e0d83cb3a1a1c5b25183f1ab74ce7edbe25de7;p=openldap diff --git a/servers/slapd/tools/ldif2ldbm.c b/servers/slapd/tools/ldif2ldbm.c index b2caa7b3cc..41b93676b0 100644 --- a/servers/slapd/tools/ldif2ldbm.c +++ b/servers/slapd/tools/ldif2ldbm.c @@ -1,34 +1,32 @@ +#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; +long num_entries_sent; +long 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; @@ -39,27 +37,31 @@ pthread_mutex_t currenttime_mutex; pthread_mutex_t replog_mutex; pthread_mutex_t ops_mutex; pthread_mutex_t regex_mutex; +#ifdef SLAPD_CRYPT +pthread_mutex_t crypt_mutex; +#endif -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 *linep, *buf, *sbindir; char *args[10]; char buf2[20], buf3[20]; char line[BUFSIZ]; @@ -69,22 +71,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 +138,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 +148,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 +179,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 +201,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 +230,9 @@ main( int argc, char **argv ) int vlen, indexmask, syntaxmask; Datum key, data; + memset( &key, 0, sizeof( key )); + memset( &data, 0, sizeof( data )); + if ( fgets( line, sizeof(line), stdin ) != NULL ) { int len;