]> git.sur5r.net Git - openldap/commitdiff
import tool_perror
authorKurt Zeilenga <kurt@openldap.org>
Mon, 14 Nov 2005 18:35:07 +0000 (18:35 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Mon, 14 Nov 2005 18:35:07 +0000 (18:35 +0000)
clients/tools/common.c
clients/tools/common.h

index 78b713771c8a1c1cf48ea61da94573ba1a92ad7b..1729d492dfeb30d5ea16119c1dea226e546c6bbd 100644 (file)
@@ -188,6 +188,34 @@ NULL
        }
 }
 
+void tool_perror(
+       char *func,
+       int err,
+       char *extra,
+       char *matched,
+       char *info,
+       char **refs )
+{
+       fprintf( stderr, "%s: %s (%d)%s\n",
+               func, ldap_err2string( err ), err, extra ? extra : "" );
+
+       if ( matched && *matched ) {
+               fprintf( stderr, _("\tmatched DN: %s\n"), matched );
+       }
+
+       if ( info && *info ) {
+               fprintf( stderr, _("\tadditional info: %s\n"), info );
+       }
+
+       if ( refs && *refs ) {
+               int i;
+               fprintf( stderr, _("\treferrals:\n") );
+               for( i=0; refs[i]; i++ ) {
+                       fprintf( stderr, "\t\t%s\n", refs[i] );
+               }
+       }
+}
+
 
 void
 tool_args( int argc, char **argv )
@@ -931,11 +959,14 @@ tool_bind( LDAP *ld )
                LDAPMessage *result;
                LDAPControl **ctrls;
                char msgbuf[256];
+               char *matched = NULL;
+               char *info = NULL;
+               char **refs = NULL;
 
                msgbuf[0] = 0;
 
-               if (( msgid = ldap_bind( ld, binddn, passwd.bv_val, authmethod )) == -1 )
-               {
+               msgid = ldap_bind( ld, binddn, passwd.bv_val, authmethod );
+               if ( msgid == -1 ) {
                        ldap_perror( ld, "ldap_bind" );
                        exit( EXIT_FAILURE );
                }
@@ -945,8 +976,9 @@ tool_bind( LDAP *ld )
                        exit( EXIT_FAILURE );
                }
 
-               if ( ldap_parse_result( ld, result, &err, NULL, NULL, NULL,
-                       &ctrls, 1 ) != LDAP_SUCCESS ) {
+               if ( ldap_parse_result( ld, result, &err, &matched, &info, &refs,
+                       &ctrls, 1 ) != LDAP_SUCCESS )
+               {
                        ldap_perror( ld, "ldap_bind parse result" );
                        exit( EXIT_FAILURE );
                }
@@ -957,9 +989,12 @@ tool_bind( LDAP *ld )
                        int expire, grace, len = 0;
                        LDAPPasswordPolicyError pErr = -1;
                        
-                       ctrl = ldap_find_control( LDAP_CONTROL_PASSWORDPOLICYRESPONSE, ctrls );
+                       ctrl = ldap_find_control( LDAP_CONTROL_PASSWORDPOLICYRESPONSE,
+                               ctrls );
+
                        if ( ctrl && ldap_parse_passwordpolicy_control( ld, ctrl,
-                               &expire, &grace, &pErr ) == LDAP_SUCCESS ) {
+                               &expire, &grace, &pErr ) == LDAP_SUCCESS )
+                       {
                                if ( pErr != PP_noError ){
                                        msgbuf[0] = ';';
                                        msgbuf[1] = ' ';
@@ -967,22 +1002,35 @@ tool_bind( LDAP *ld )
                                        len = strlen( msgbuf );
                                }
                                if ( expire >= 0 ) {
-                                       sprintf( msgbuf+len, " (Password expires in %d seconds)", expire );
+                                       sprintf( msgbuf+len,
+                                               " (Password expires in %d seconds)",
+                                               expire );
                                } else if ( grace >= 0 ) {
-                                       sprintf( msgbuf+len, " (Password expired, %d grace logins remain)", grace );
+                                       sprintf( msgbuf+len,
+                                               " (Password expired, %d grace logins remain)",
+                                               grace );
                                }
                        }
                }
 #endif
+
                if ( ctrls ) {
                        ldap_controls_free( ctrls );
                }
-               if ( err != LDAP_SUCCESS || msgbuf[0] ) {
-                       fprintf( stderr, "ldap_bind: %s%s\n", ldap_err2string( err ),
-                               msgbuf );
-                       if ( err != LDAP_SUCCESS ) {
-                               exit( EXIT_FAILURE );
-                       }
+
+               if ( err != LDAP_SUCCESS
+                       || msgbuf[0]
+                       || ( matched && matched[ 0 ] )
+                       || ( info && info[ 0 ] )
+                       || refs )
+               {
+                       tool_perror( "ldap_bind", err, msgbuf, matched, info, refs );
+
+                       if( matched ) ber_memfree( matched );
+                       if( info ) ber_memfree( info );
+                       if( refs ) ber_memvfree( (void **)refs );
+
+                       if ( err != LDAP_SUCCESS ) exit( EXIT_FAILURE );
                }
        }
 }
index e81d2c14e90de93d448bcc1179f2f161116e4877..a0ce71c56918fc711b920d1cfcb5aeea27dc2a2a 100644 (file)
@@ -82,6 +82,13 @@ void tool_unbind LDAP_P(( LDAP * ));
 void tool_destroy LDAP_P(( void ));
 void tool_server_controls LDAP_P(( LDAP *, LDAPControl *, int ));
 int tool_check_abandon LDAP_P(( LDAP *ld, int msgid ));
+void tool_perror LDAP_P((
+       char *func,
+       int err,
+       char *extra,
+       char *matched,
+       char *info,
+       char **refs ));
 
 LDAP_END_DECL