Skip to content
Snippets Groups Projects
Commit 8eb0741a authored by Kurt Zeilenga's avatar Kurt Zeilenga
Browse files

Ppolicy control should be sent with every request...

handle returns in ldappasswd(1) and ldapwhoami(1).  Likely needs to be
added to other ldap*(1) commands.
parent fa6aa068
No related branches found
No related tags found
No related merge requests found
...@@ -1279,7 +1279,7 @@ void ...@@ -1279,7 +1279,7 @@ void
tool_server_controls( LDAP *ld, LDAPControl *extra_c, int count ) tool_server_controls( LDAP *ld, LDAPControl *extra_c, int count )
{ {
int i = 0, j, crit = 0, err; int i = 0, j, crit = 0, err;
LDAPControl c[10], **ctrls; LDAPControl c[12], **ctrls;
if ( ! ( assertctl if ( ! ( assertctl
|| authzid || authzid
...@@ -1289,6 +1289,9 @@ tool_server_controls( LDAP *ld, LDAPControl *extra_c, int count ) ...@@ -1289,6 +1289,9 @@ tool_server_controls( LDAP *ld, LDAPControl *extra_c, int count )
|| manageDIT || manageDIT
|| manageDSAit || manageDSAit
|| noop || noop
#ifdef LDAP_CONTROL_PASSWORDPOLICYREQUEST
|| ppolicy
#endif
|| preread || preread
|| postread || postread
#ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR #ifdef LDAP_CONTROL_X_CHAINING_BEHAVIOR
...@@ -1391,6 +1394,16 @@ tool_server_controls( LDAP *ld, LDAPControl *extra_c, int count ) ...@@ -1391,6 +1394,16 @@ tool_server_controls( LDAP *ld, LDAPControl *extra_c, int count )
i++; i++;
} }
#ifdef LDAP_CONTROL_PASSWORDPOLICYREQUEST
if ( ppolicy ) {
c[i].ldctl_oid = LDAP_CONTROL_PASSWORDPOLICYREQUEST;
BER_BVZERO( &c[i].ldctl_value );
c[i].ldctl_iscritical = 0;
ctrls[i] = &c[i];
i++;
}
#endif
if ( preread ) { if ( preread ) {
char berbuf[LBER_ELEMENT_SIZEOF]; char berbuf[LBER_ELEMENT_SIZEOF];
BerElement *ber = (BerElement *)berbuf; BerElement *ber = (BerElement *)berbuf;
...@@ -1691,7 +1704,8 @@ print_ppolicy( LDAP *ld, LDAPControl *ctrl ) ...@@ -1691,7 +1704,8 @@ print_ppolicy( LDAP *ld, LDAPControl *ctrl )
if ( pperr != PP_noError ) { if ( pperr != PP_noError ) {
ptr += snprintf( ptr, sizeof( buf ) - ( ptr - buf ), ptr += snprintf( ptr, sizeof( buf ) - ( ptr - buf ),
"%serror=%s", ptr == buf ? "" : " ", "%serror=%d (%s)", ptr == buf ? "" : " ",
pperr,
ldap_passwordpolicy_err2txt( pperr ) ); ldap_passwordpolicy_err2txt( pperr ) );
} }
......
...@@ -177,6 +177,7 @@ main( int argc, char *argv[] ) ...@@ -177,6 +177,7 @@ main( int argc, char *argv[] )
char *matcheddn = NULL, *text = NULL, **refs = NULL; char *matcheddn = NULL, *text = NULL, **refs = NULL;
char *retoid = NULL; char *retoid = NULL;
struct berval *retdata = NULL; struct berval *retdata = NULL;
LDAPControl **ctrls = NULL;
tool_init( TOOL_PASSWD ); tool_init( TOOL_PASSWD );
prog = lutil_progname( "ldappasswd", argc, argv ); prog = lutil_progname( "ldappasswd", argc, argv );
...@@ -344,7 +345,7 @@ main( int argc, char *argv[] ) ...@@ -344,7 +345,7 @@ main( int argc, char *argv[] )
} }
rc = ldap_parse_result( ld, res, rc = ldap_parse_result( ld, res,
&code, &matcheddn, &text, &refs, NULL, 0 ); &code, &matcheddn, &text, &refs, &ctrls, 0 );
if( rc != LDAP_SUCCESS ) { if( rc != LDAP_SUCCESS ) {
tool_perror( "ldap_parse_result", rc, NULL, NULL, NULL, NULL ); tool_perror( "ldap_parse_result", rc, NULL, NULL, NULL, NULL );
rc = EXIT_FAILURE; rc = EXIT_FAILURE;
...@@ -386,7 +387,10 @@ main( int argc, char *argv[] ) ...@@ -386,7 +387,10 @@ main( int argc, char *argv[] )
" new password expected", NULL, NULL, NULL ); " 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 ); printf( _("Result: %s (%d)\n"), ldap_err2string( code ), code );
if( text && *text ) { if( text && *text ) {
...@@ -403,6 +407,11 @@ main( int argc, char *argv[] ) ...@@ -403,6 +407,11 @@ main( int argc, char *argv[] )
printf(_("Referral: %s\n"), refs[i] ); printf(_("Referral: %s\n"), refs[i] );
} }
} }
if( ctrls ) {
tool_print_ctrls( ld, ctrls );
ldap_controls_free( ctrls );
}
} }
ber_memfree( text ); ber_memfree( text );
......
...@@ -118,6 +118,7 @@ main( int argc, char *argv[] ) ...@@ -118,6 +118,7 @@ main( int argc, char *argv[] )
struct berval *retdata = NULL; struct berval *retdata = NULL;
int id, code = 0; int id, code = 0;
LDAPMessage *res; LDAPMessage *res;
LDAPControl **ctrls = NULL;
tool_init( TOOL_WHOAMI ); tool_init( TOOL_WHOAMI );
prog = lutil_progname( "ldapwhoami", argc, argv ); prog = lutil_progname( "ldapwhoami", argc, argv );
...@@ -186,7 +187,7 @@ main( int argc, char *argv[] ) ...@@ -186,7 +187,7 @@ main( int argc, char *argv[] )
} }
rc = ldap_parse_result( ld, res, rc = ldap_parse_result( ld, res,
&code, &matcheddn, &text, &refs, NULL, 0 ); &code, &matcheddn, &text, &refs, &ctrls, 0 );
if ( rc == LDAP_SUCCESS ) { if ( rc == LDAP_SUCCESS ) {
rc = code; rc = code;
...@@ -214,7 +215,10 @@ main( int argc, char *argv[] ) ...@@ -214,7 +215,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 ); printf( _("Result: %s (%d)\n"), ldap_err2string( code ), code );
if( text && *text ) { if( text && *text ) {
...@@ -231,6 +235,11 @@ main( int argc, char *argv[] ) ...@@ -231,6 +235,11 @@ main( int argc, char *argv[] )
printf(_("Referral: %s\n"), refs[i] ); printf(_("Referral: %s\n"), refs[i] );
} }
} }
if (ctrls) {
tool_print_ctrls( ld, ctrls );
ldap_controls_free( ctrls );
}
} }
ber_memfree( text ); ber_memfree( text );
...@@ -239,7 +248,6 @@ main( int argc, char *argv[] ) ...@@ -239,7 +248,6 @@ main( int argc, char *argv[] )
ber_memfree( retoid ); ber_memfree( retoid );
ber_bvfree( retdata ); ber_bvfree( retdata );
skip:
/* disconnect from server */ /* disconnect from server */
tool_unbind( ld ); tool_unbind( ld );
tool_destroy(); tool_destroy();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment