]> git.sur5r.net Git - openldap/blobdiff - clients/tools/ldapmodify.c
Remove a few typos in comments
[openldap] / clients / tools / ldapmodify.c
index 92766e8d69f57c0d13e1bbfc8231726f531fe25d..fce920e1836f1625cd5fdbf7ba3db5c8195e03e4 100644 (file)
@@ -4,8 +4,9 @@
 
 #include <stdio.h>
 #include <stdlib.h>
-#include <ctype.h>
 
+#include <ac/ctype.h>
+#include <ac/signal.h>
 #include <ac/string.h>
 #include <ac/unistd.h>
 
 #include <ldap.h>
 #include <ldif.h>
 
-#include "ldapconfig.h"
-
 static char    *prog;
-static char    *binddn = LDAPMODIFY_BINDDN;
-static char    *passwd = LDAPMODIFY_BIND_CRED;
-static char    *ldaphost = LDAPHOST;
-static int     ldapport = LDAP_PORT;
+static char    *binddn = NULL;
+static char    *passwd = NULL;
+static char    *ldaphost = NULL;
+static int     ldapport = 0;
 static int     new, replace, not, verbose, contoper, force, valsfromfiles;
 static LDAP    *ld;
 
-#ifdef LDAP_DEBUG
-extern int ldap_debug, lber_debug;
-#endif /* LDAP_DEBUG */
-
 #define safe_realloc( ptr, size )      ( ptr == NULL ? malloc( size ) : \
                                         realloc( ptr, size ))
 
@@ -74,11 +69,8 @@ main( int argc, char **argv )
 {
     char               *infile, *rbuf, *start, *p, *q;
     FILE               *fp;
-    int                        rc, i, kerberos, use_ldif, authmethod;
-    char               *usage = "usage: %s [-abcknrvF] [-d debug-level] [-h ldaphost] [-p ldapport] [-D binddn] [-w passwd] [ -f file | < entryfile ]\n";
-
-    extern char        *optarg;
-    extern int optind;
+       int             rc, i, use_ldif, authmethod, version, want_bindpw, debug;
+       char            *usage = "usage: %s [-abcknrvWF] [-d debug-level] [-h ldaphost] [-P version] [-p ldapport] [-D binddn] [-w passwd] [ -f file | < entryfile ]\n";
 
     if (( prog = strrchr( argv[ 0 ], '/' )) == NULL ) {
        prog = argv[ 0 ];
@@ -88,9 +80,11 @@ main( int argc, char **argv )
     new = ( strcmp( prog, "ldapadd" ) == 0 );
 
     infile = NULL;
-    kerberos = not = verbose = valsfromfiles = 0;
+    not = verbose = valsfromfiles = want_bindpw = debug = 0;
+    authmethod = LDAP_AUTH_SIMPLE;
+       version = -1;
 
-    while (( i = getopt( argc, argv, "FabckKnrtvh:p:D:w:d:f:" )) != EOF ) {
+    while (( i = getopt( argc, argv, "WFabckKnrtvh:p:D:w:d:f:" )) != EOF ) {
        switch( i ) {
        case 'a':       /* add */
            new = 1;
@@ -105,10 +99,18 @@ main( int argc, char **argv )
            replace = 1;
            break;
        case 'k':       /* kerberos bind */
-           kerberos = 2;
+#ifdef HAVE_KERBEROS
+               authmethod = LDAP_AUTH_KRBV4;
+#else
+               fprintf (stderr, "%s was not compiled with Kerberos support\n", argv[0]);
+#endif
            break;
        case 'K':       /* kerberos bind, part 1 only */
-           kerberos = 1;
+#ifdef HAVE_KERBEROS
+               authmethod = LDAP_AUTH_KRBV41;
+#else
+               fprintf (stderr, "%s was not compiled with Kerberos support\n", argv[0]);
+#endif
            break;
        case 'F':       /* force all changes records to be used */
            force = 1;
@@ -123,12 +125,7 @@ main( int argc, char **argv )
            passwd = strdup( optarg );
            break;
        case 'd':
-#ifdef LDAP_DEBUG
-           ldap_debug = lber_debug = atoi( optarg );   /* */
-#else /* LDAP_DEBUG */
-           fprintf( stderr, "%s: compile with -DLDAP_DEBUG for debugging\n",
-                   prog );
-#endif /* LDAP_DEBUG */
+           debug |= atoi( optarg );
            break;
        case 'f':       /* read from file */
            infile = strdup( optarg );
@@ -142,6 +139,20 @@ main( int argc, char **argv )
        case 'v':       /* verbose mode */
            verbose++;
            break;
+       case 'W':
+               want_bindpw++;
+               break;
+       case 'P':
+               switch(optarg[0])
+               {
+               case '2':
+                       version = LDAP_VERSION2;
+                       break;
+               case '3':
+                       version = LDAP_VERSION3;
+                       break;
+               }
+               break;
        default:
            fprintf( stderr, usage, prog );
            exit( 1 );
@@ -162,23 +173,35 @@ main( int argc, char **argv )
        fp = stdin;
     }
 
+       if ( debug ) {
+               lber_set_option( NULL, LBER_OPT_DEBUG_LEVEL, &debug );
+               ldap_set_option( NULL, LDAP_OPT_DEBUG_LEVEL, &debug );
+               ldif_debug = debug;
+       }
+
+#ifdef SIGPIPE
+       (void) SIGNAL( SIGPIPE, SIG_IGN );
+#endif
 
     if ( !not ) {
-       if (( ld = ldap_open( ldaphost, ldapport )) == NULL ) {
-           perror( "ldap_open" );
+       if (( ld = ldap_init( ldaphost, ldapport )) == NULL ) {
+           perror( "ldap_init" );
            exit( 1 );
        }
 
        /* this seems prudent */
-       ldap_set_option( ld, LDAP_OPT_DEREF, LDAP_DEREF_NEVER);
+       {
+               int deref = LDAP_DEREF_NEVER;
+               ldap_set_option( ld, LDAP_OPT_DEREF, &deref);
+       }
 
-       if ( !kerberos ) {
-           authmethod = LDAP_AUTH_SIMPLE;
-       } else if ( kerberos == 1 ) {
-           authmethod = LDAP_AUTH_KRBV41;
-       } else {
-           authmethod = LDAP_AUTH_KRBV4;
+       if (want_bindpw)
+               passwd = getpass("Enter LDAP Password: ");
+
+       if( version != -1 ) {
+               ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &version );
        }
+
        if ( ldap_bind_s( ld, binddn, passwd, authmethod ) != LDAP_SUCCESS ) {
            ldap_perror( ld, "ldap_bind" );
            exit( 1 );
@@ -202,7 +225,7 @@ main( int argc, char **argv )
 
        if ( !use_ldif && ( q = strchr( rbuf, '\n' )) != NULL ) {
            for ( p = rbuf; p < q; ++p ) {
-               if ( !isdigit( *p )) {
+               if ( !isdigit( (unsigned char) *p )) {
                    break;
                }
            }
@@ -252,7 +275,7 @@ process_ldif_rec( char *rbuf )
     pmods = NULL;
     dn = newrdn = NULL;
 
-    while ( rc == 0 && ( line = str_getline( &rbuf )) != NULL ) {
+    while ( rc == 0 && ( line = ldif_getline( &rbuf )) != NULL ) {
        ++linenum;
        if ( expect_sep && strcasecmp( line, T_MODSEPSTR ) == 0 ) {
            expect_sep = 0;
@@ -260,7 +283,7 @@ process_ldif_rec( char *rbuf )
            continue;
        }
        
-       if ( str_parse_line( line, &type, &value, &vlen ) < 0 ) {
+       if ( ldif_parse_line( line, &type, &value, &vlen ) < 0 ) {
            fprintf( stderr, "%s: invalid format (line %d of entry: %s\n",
                    prog, linenum, dn == NULL ? "" : dn );
            rc = LDAP_PARAM_ERROR;
@@ -271,7 +294,7 @@ process_ldif_rec( char *rbuf )
            if ( !use_record && strcasecmp( type, T_REPLICA_STR ) == 0 ) {
                ++saw_replica;
                if (( p = strchr( value, ':' )) == NULL ) {
-                   replicaport = LDAP_PORT;
+                   replicaport = 0;
                } else {
                    *p++ = '\0';
                    replicaport = atoi( p );
@@ -421,7 +444,7 @@ process_ldapmod_rec( char *rbuf )
            rbuf = NULL;
        } else {
            if ( *(p-1) == '\\' ) {     /* lines ending in '\' are continued */
-               strcpy( p - 1, p );
+               SAFEMEMCPY( p - 1, p, strlen( p ) + 1 );
                rbuf = p;
                continue;
            }
@@ -443,20 +466,21 @@ process_ldapmod_rec( char *rbuf )
                value = p;
            }
 
-           for ( attr = line; *attr != '\0' && isspace( *attr ); ++attr ) {
+           for ( attr = line;
+                 *attr != '\0' && isspace( (unsigned char) *attr ); ++attr ) {
                ;       /* skip attribute leading white space */
            }
 
-           for ( q = p - 1; q > attr && isspace( *q ); --q ) {
+           for ( q = p - 1; q > attr && isspace( (unsigned char) *q ); --q ) {
                *q = '\0';      /* remove attribute trailing white space */
            }
 
            if ( value != NULL ) {
-               while ( isspace( *value )) {
+               while ( isspace( (unsigned char) *value )) {
                    ++value;            /* skip value leading white space */
                }
                for ( q = value + strlen( value ) - 1; q > value &&
-                       isspace( *q ); --q ) {
+                       isspace( (unsigned char) *q ); --q ) {
                    *q = '\0';  /* remove value trailing white space */
                }
                if ( *value == '\0' ) {