]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#5061
authorQuanah Gibson-Mount <quanah@openldap.org>
Mon, 13 Aug 2007 20:04:39 +0000 (20:04 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 13 Aug 2007 20:04:39 +0000 (20:04 +0000)
Support controls in ldap tools.

clients/tools/ldapcompare.c
clients/tools/ldapdelete.c
clients/tools/ldapmodrdn.c
clients/tools/ldappasswd.c
clients/tools/ldapwhoami.c

index c174cc5e03878434292d7a87d1bfe345f65cadef..b54d498b5e5d02d714039d5febfd255a429bac5d 100644 (file)
@@ -238,6 +238,7 @@ static int docompare(
        char            *matcheddn;
        char            *text;
        char            **refs;
+       LDAPControl **ctrls = NULL;
 
        if ( not ) {
                return LDAP_SUCCESS;
@@ -270,7 +271,7 @@ static int docompare(
                }
        }
 
-       rc = ldap_parse_result( ld, res, &code, &matcheddn, &text, &refs, NULL, 1 );
+       rc = ldap_parse_result( ld, res, &code, &matcheddn, &text, &refs, &ctrls, 1 );
 
        if( rc != LDAP_SUCCESS ) {
                fprintf( stderr, "%s: ldap_parse_result: %s (%d)\n",
@@ -300,10 +301,6 @@ static int docompare(
                }
        }
 
-       ber_memfree( text );
-       ber_memfree( matcheddn );
-       ber_memvfree( (void **) refs );
-
        /* if we were told to be quiet, use the return value. */
        if ( !quiet ) {
                if ( code == LDAP_COMPARE_TRUE ) {
@@ -315,6 +312,15 @@ static int docompare(
                }
        }
 
+       if ( ctrls ) {
+               tool_print_ctrls( ld, ctrls );
+               ldap_controls_free( ctrls );
+       }
+
+       ber_memfree( text );
+       ber_memfree( matcheddn );
+       ber_memvfree( (void **) refs );
+
        return( code );
 }
 
index 2bd64c2b7b2b7e9722c473c5a2354b2ac73c965b..5a1eb73b855b49cc142e7d1f06a8747089bfeb4f 100644 (file)
@@ -211,6 +211,7 @@ static int dodelete(
        int id;
        int     rc, code;
        char *matcheddn = NULL, *text = NULL, **refs = NULL;
+       LDAPControl **ctrls = NULL;
        LDAPMessage *res;
 
        if ( verbose ) {
@@ -255,7 +256,7 @@ static int dodelete(
                }
        }
 
-       rc = ldap_parse_result( ld, res, &code, &matcheddn, &text, &refs, NULL, 1 );
+       rc = ldap_parse_result( ld, res, &code, &matcheddn, &text, &refs, &ctrls, 1 );
 
        if( rc != LDAP_SUCCESS ) {
                fprintf( stderr, "%s: ldap_parse_result: %s (%d)\n",
@@ -287,6 +288,11 @@ static int dodelete(
                }
        }
 
+       if (ctrls) {
+               tool_print_ctrls( ld, ctrls );
+               ldap_controls_free( ctrls );
+    }
+
        ber_memfree( text );
        ber_memfree( matcheddn );
        ber_memvfree( (void **) refs );
index e861b17d5b5fc14f4d3f2935be06a4b063c266af..d645b7589553582d932e302e297213321b2073b8 100644 (file)
@@ -242,6 +242,7 @@ static int domodrdn(
 {
        int rc, code, id;
        char *matcheddn=NULL, *text=NULL, **refs=NULL;
+       LDAPControl **ctrls = NULL;
        LDAPMessage *res;
 
     if ( verbose ) {
@@ -285,7 +286,7 @@ static int domodrdn(
                }
        }
 
-       rc = ldap_parse_result( ld, res, &code, &matcheddn, &text, &refs, NULL, 1 );
+       rc = ldap_parse_result( ld, res, &code, &matcheddn, &text, &refs, &ctrls, 1 );
 
        if( rc != LDAP_SUCCESS ) {
                fprintf( stderr, "%s: ldap_parse_result: %s (%d)\n",
@@ -315,6 +316,11 @@ static int domodrdn(
                }
        }
 
+       if (ctrls) {
+               tool_print_ctrls( ld, ctrls );
+               ldap_controls_free( ctrls );
+    }
+
        ber_memfree( text );
        ber_memfree( matcheddn );
        ber_memvfree( (void **) refs );
index 7d1f7d2de7ad22b170741333acf0deeb9c7fcded..07b12e1317ca96da8dbe36980db76f2e057e7d29 100644 (file)
@@ -177,6 +177,7 @@ main( int argc, char *argv[] )
        char *matcheddn = NULL, *text = NULL, **refs = NULL;
        char    *retoid = NULL;
        struct berval *retdata = NULL;
+       LDAPControl **ctrls = NULL;
 
     tool_init();
        prog = lutil_progname( "ldappasswd", argc, argv );
@@ -310,6 +311,8 @@ main( int argc, char *argv[] )
                goto done;
        }
 
+       tool_server_controls( ld, NULL, 0);
+
        rc = ldap_extended_operation( ld,
                LDAP_EXOP_MODIFY_PASSWD, bv.bv_val ? &bv : NULL, 
                NULL, NULL, &id );
@@ -344,7 +347,7 @@ main( int argc, char *argv[] )
        }
 
        rc = ldap_parse_result( ld, res,
-               &code, &matcheddn, &text, &refs, NULL, 0 );
+               &code, &matcheddn, &text, &refs, &ctrls, 0 );
        if( rc != LDAP_SUCCESS ) {
                ldap_perror( ld, "ldap_parse_result" );
                rc = EXIT_FAILURE;
@@ -380,9 +383,17 @@ main( int argc, char *argv[] )
                }
 
                ber_free( ber, 1 );
+
+       } else if ( code == LDAP_SUCCESS && newpw.bv_val == NULL ) {
+               tool_perror( "ldap_parse_extended_result", LDAP_DECODING_ERROR,
+                       " new password expected", NULL, NULL, NULL );
        }
 
-       if( verbose || code != LDAP_SUCCESS || matcheddn || text || refs ) {
+skip:
+       if( verbose || code != LDAP_SUCCESS ||
+               matcheddn || text || refs || ctrls )
+       {
+
                printf( _("Result: %s (%d)\n"), ldap_err2string( code ), code );
 
                if( text && *text ) {
@@ -399,6 +410,11 @@ main( int argc, char *argv[] )
                                printf(_("Referral: %s\n"), refs[i] );
                        }
                }
+
+               if( ctrls ) {
+                       tool_print_ctrls( ld, ctrls );
+                       ldap_controls_free( ctrls );
+               }
        }
 
        ber_memfree( text );
index 96aebf4cfb38ce6467b55947a7973b6eeb787b48..73f8501a90aef9f9acf82e63530c6a1d4376a2d5 100644 (file)
@@ -118,6 +118,7 @@ main( int argc, char *argv[] )
        struct berval   *retdata = NULL;
        int             id, code=0;
        LDAPMessage     *res;
+       LDAPControl     **ctrls = NULL;
 
        tool_init();
        prog = lutil_progname( "ldapwhoami", argc, argv );
@@ -161,7 +162,7 @@ main( int argc, char *argv[] )
        rc = ldap_whoami( ld, NULL, NULL, &id ); 
 
        if( rc != LDAP_SUCCESS ) {
-               ldap_perror( ld, "ldap_extended_operation" );
+               ldap_perror( ld, "ldap_whoami" );
                rc = EXIT_FAILURE;
                goto skip;
        }
@@ -188,7 +189,7 @@ main( int argc, char *argv[] )
        }
 
        rc = ldap_parse_result( ld, res,
-               &code, &matcheddn, &text, &refs, NULL, 0 );
+               &code, &matcheddn, &text, &refs, &ctrls, 0 );
 
        if( rc != LDAP_SUCCESS ) {
                ldap_perror( ld, "ldap_parse_result" );
@@ -212,7 +213,10 @@ main( int argc, char *argv[] )
                }
        }
 
-       if( verbose || ( code != LDAP_SUCCESS ) || matcheddn || text || refs ) {
+skip:
+       if ( verbose || ( code != LDAP_SUCCESS ) ||
+               matcheddn || text || refs || ctrls )
+       {
                printf( _("Result: %s (%d)\n"), ldap_err2string( code ), code );
 
                if( text && *text ) {
@@ -229,6 +233,11 @@ main( int argc, char *argv[] )
                                printf(_("Referral: %s\n"), refs[i] );
                        }
                }
+
+               if (ctrls) {
+                       tool_print_ctrls( ld, ctrls );
+                       ldap_controls_free( ctrls );
+               }
        }
 
        ber_memfree( text );
@@ -237,7 +246,6 @@ main( int argc, char *argv[] )
        ber_memfree( retoid );
        ber_bvfree( retdata );
 
-skip:
        /* disconnect from server */
        tool_unbind( ld );
        tool_destroy();