From 0178e2741bdca33a7bc2036625a72c18558baaab Mon Sep 17 00:00:00 2001 From: Quanah Gibson-Mount Date: Mon, 13 Aug 2007 20:04:39 +0000 Subject: [PATCH] ITS#5061 Support controls in ldap tools. --- clients/tools/ldapcompare.c | 16 +++++++++++----- clients/tools/ldapdelete.c | 8 +++++++- clients/tools/ldapmodrdn.c | 8 +++++++- clients/tools/ldappasswd.c | 20 ++++++++++++++++++-- clients/tools/ldapwhoami.c | 16 ++++++++++++---- 5 files changed, 55 insertions(+), 13 deletions(-) diff --git a/clients/tools/ldapcompare.c b/clients/tools/ldapcompare.c index c174cc5e03..b54d498b5e 100644 --- a/clients/tools/ldapcompare.c +++ b/clients/tools/ldapcompare.c @@ -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 ); } diff --git a/clients/tools/ldapdelete.c b/clients/tools/ldapdelete.c index 2bd64c2b7b..5a1eb73b85 100644 --- a/clients/tools/ldapdelete.c +++ b/clients/tools/ldapdelete.c @@ -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 ); diff --git a/clients/tools/ldapmodrdn.c b/clients/tools/ldapmodrdn.c index e861b17d5b..d645b75895 100644 --- a/clients/tools/ldapmodrdn.c +++ b/clients/tools/ldapmodrdn.c @@ -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 ); diff --git a/clients/tools/ldappasswd.c b/clients/tools/ldappasswd.c index 7d1f7d2de7..07b12e1317 100644 --- a/clients/tools/ldappasswd.c +++ b/clients/tools/ldappasswd.c @@ -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 ); diff --git a/clients/tools/ldapwhoami.c b/clients/tools/ldapwhoami.c index 96aebf4cfb..73f8501a90 100644 --- a/clients/tools/ldapwhoami.c +++ b/clients/tools/ldapwhoami.c @@ -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(); -- 2.39.5