]> git.sur5r.net Git - openldap/blobdiff - clients/tools/ldapmodify.c
Last minute LDIF empty value bug fix
[openldap] / clients / tools / ldapmodify.c
index e6fedb119863e75b6f86ebeaf01f1de21348e87a..2bb835a64e024741955d2575287384b4f76a59a9 100644 (file)
@@ -159,7 +159,9 @@ main( int argc, char **argv )
     authmethod = -1;
        version = -1;
 
-    while (( i = getopt( argc, argv, "acrf:F" "Cd:D:h:H:IkKMnO:p:P:QRU:vw:WxX:Y:Z" )) != EOF ) {
+    while (( i = getopt( argc, argv, "acrf:F"
+               "Cd:D:h:H:IkKMnO:p:P:QR:U:vw:WxX:Y:Z" )) != EOF )
+       {
        switch( i ) {
        /* Modify Options */
        case 'a':       /* add */
@@ -170,7 +172,7 @@ main( int argc, char **argv )
            break;
        case 'f':       /* read from file */
                if( infile != NULL ) {
-                       fprintf( stderr, "%s: -f previously specified\n" );
+                       fprintf( stderr, "%s: -f previously specified\n", prog );
                        return EXIT_FAILURE;
                }
            infile = strdup( optarg );
@@ -191,33 +193,33 @@ main( int argc, char **argv )
            break;
        case 'D':       /* bind DN */
                if( binddn != NULL ) {
-                       fprintf( stderr, "%s: -D previously specified\n" );
+                       fprintf( stderr, "%s: -D previously specified\n", prog );
                        return EXIT_FAILURE;
                }
            binddn = strdup( optarg );
            break;
        case 'h':       /* ldap host */
                if( ldapuri != NULL ) {
-                       fprintf( stderr, "%s: -h incompatible with -H\n" );
+                       fprintf( stderr, "%s: -h incompatible with -H\n", prog );
                        return EXIT_FAILURE;
                }
                if( ldaphost != NULL ) {
-                       fprintf( stderr, "%s: -h previously specified\n" );
+                       fprintf( stderr, "%s: -h previously specified\n", prog );
                        return EXIT_FAILURE;
                }
            ldaphost = strdup( optarg );
            break;
        case 'H':       /* ldap URI */
                if( ldaphost != NULL ) {
-                       fprintf( stderr, "%s: -H incompatible with -h\n" );
+                       fprintf( stderr, "%s: -H incompatible with -h\n", prog );
                        return EXIT_FAILURE;
                }
                if( ldapport ) {
-                       fprintf( stderr, "%s: -H incompatible with -p\n" );
+                       fprintf( stderr, "%s: -H incompatible with -p\n", prog );
                        return EXIT_FAILURE;
                }
                if( ldapuri != NULL ) {
-                       fprintf( stderr, "%s: -H previously specified\n" );
+                       fprintf( stderr, "%s: -H previously specified\n", prog );
                        return EXIT_FAILURE;
                }
            ldapuri = strdup( optarg );
@@ -299,7 +301,7 @@ main( int argc, char **argv )
        case 'O':
 #ifdef HAVE_CYRUS_SASL
                if( sasl_secprops != NULL ) {
-                       fprintf( stderr, "%s: -O previously specified\n" );
+                       fprintf( stderr, "%s: -O previously specified\n", prog );
                        return EXIT_FAILURE;
                }
                if( version == LDAP_VERSION2 ) {
@@ -323,7 +325,7 @@ main( int argc, char **argv )
                break;
        case 'p':
                if( ldapport ) {
-                       fprintf( stderr, "%s: -p previously specified\n" );
+                       fprintf( stderr, "%s: -p previously specified\n", prog );
                        return EXIT_FAILURE;
                }
            ldapport = atoi( optarg );
@@ -377,7 +379,7 @@ main( int argc, char **argv )
        case 'R':
 #ifdef HAVE_CYRUS_SASL
                if( sasl_realm != NULL ) {
-                       fprintf( stderr, "%s: -R previously specified\n" );
+                       fprintf( stderr, "%s: -R previously specified\n", prog );
                        return EXIT_FAILURE;
                }
                if( version == LDAP_VERSION2 ) {
@@ -403,7 +405,7 @@ main( int argc, char **argv )
        case 'U':
 #ifdef HAVE_CYRUS_SASL
                if( sasl_authc_id != NULL ) {
-                       fprintf( stderr, "%s: -U previously specified\n" );
+                       fprintf( stderr, "%s: -U previously specified\n", prog );
                        return EXIT_FAILURE;
                }
                if( version == LDAP_VERSION2 ) {
@@ -446,7 +448,7 @@ main( int argc, char **argv )
        case 'Y':
 #ifdef HAVE_CYRUS_SASL
                if( sasl_mech != NULL ) {
-                       fprintf( stderr, "%s: -Y previously specified\n" );
+                       fprintf( stderr, "%s: -Y previously specified\n", prog );
                        return EXIT_FAILURE;
                }
                if( version == LDAP_VERSION2 ) {
@@ -478,7 +480,7 @@ main( int argc, char **argv )
        case 'X':
 #ifdef HAVE_CYRUS_SASL
                if( sasl_authz_id != NULL ) {
-                       fprintf( stderr, "%s: -X previously specified\n" );
+                       fprintf( stderr, "%s: -X previously specified\n", prog );
                        return EXIT_FAILURE;
                }
                if( version == LDAP_VERSION2 ) {
@@ -516,7 +518,7 @@ main( int argc, char **argv )
 #endif
                break;
        default:
-               fprintf( stderr, "%s: unrecongized option -%c\n",
+               fprintf( stderr, "%s: unrecognized option -%c\n",
                        prog, optopt );
            usage( prog );
        }
@@ -566,20 +568,25 @@ main( int argc, char **argv )
                                ldaphost != NULL ? ldaphost : "<DEFAULT>",
                                ldapport );
                }
+
                ld = ldap_init( ldaphost, ldapport );
+               if( ld == NULL ) {
+                       perror("ldapsearch: ldap_init");
+                       return EXIT_FAILURE;
+               }
 
        } else {
                if ( verbose ) {
                        fprintf( stderr, "ldap_initialize( %s )\n",
                                ldapuri != NULL ? ldapuri : "<DEFAULT>" );
                }
-               (void) ldap_initialize( &ld, ldapuri );
-       }
 
-       if( ld == NULL ) {
-               fprintf( stderr, "Could not create LDAP session handle (%d): %s\n",
-                       rc, ldap_err2string(rc) );
-               return EXIT_FAILURE;
+               rc = ldap_initialize( &ld, ldapuri );
+               if( rc != LDAP_SUCCESS ) {
+                       fprintf( stderr, "Could not create LDAP session handle (%d): %s\n",
+                               rc, ldap_err2string(rc) );
+                       return EXIT_FAILURE;
+               }
        }
 
        /* referrals */
@@ -1015,6 +1022,16 @@ domodify(
        fprintf( stderr, "%s: no attributes to change or add (entry=\"%s\")\n",
                prog, dn );
        return( LDAP_PARAM_ERROR );
+    } 
+
+    for ( i = 0; pmods[ i ] != NULL; ++i ) {
+       op = pmods[ i ]->mod_op & ~LDAP_MOD_BVALUES;
+       if( op == LDAP_MOD_ADD && ( pmods[i]->mod_bvalues == NULL )) {
+               fprintf( stderr,
+                       "%s: attribute \"%s\" has no values (entry=\"%s\")\n",
+                       prog, pmods[i]->mod_type, dn );
+               return LDAP_PARAM_ERROR;
+       }
     }
 
     if ( verbose ) {