]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9279 Handle Netscape controls in client tools
authorHoward Chu <hyc@openldap.org>
Fri, 31 Jul 2020 00:01:39 +0000 (01:01 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Wed, 5 Aug 2020 16:20:02 +0000 (16:20 +0000)
clients/tools/common.c

index 5cefc54e3d35d075218efb7dd1cd8ac42bf1b0f6..9d753701765beee8cb85762da7a202d59716acab 100644 (file)
@@ -147,6 +147,10 @@ static int print_deref( LDAP *ld, LDAPControl *ctrl );
 #ifdef LDAP_CONTROL_X_WHATFAILED
 static int print_whatfailed( LDAP *ld, LDAPControl *ctrl );
 #endif
+#ifdef LDAP_CONTROL_X_PASSWORD_EXPIRED
+static int print_netscape_pwexpired( LDAP *ld, LDAPControl *ctrl );
+static int print_netscape_pwexpiring( LDAP *ld, LDAPControl *ctrl );
+#endif
 
 static struct tool_ctrls_t {
        const char      *oid;
@@ -166,6 +170,10 @@ static struct tool_ctrls_t {
 #endif
 #ifdef LDAP_CONTROL_X_WHATFAILED
        { LDAP_CONTROL_X_WHATFAILED,                    TOOL_ALL,       print_whatfailed },
+#endif
+#ifdef LDAP_CONTROL_X_PASSWORD_EXPIRED
+       { LDAP_CONTROL_X_PASSWORD_EXPIRED,              TOOL_ALL,       print_netscape_pwexpired },
+       { LDAP_CONTROL_X_PASSWORD_EXPIRING,             TOOL_ALL,       print_netscape_pwexpiring },
 #endif
        { NULL,                                         0,              NULL }
 };
@@ -1561,6 +1569,23 @@ tool_bind( LDAP *ld )
                }
 #endif
 
+#ifdef LDAP_CONTROL_X_PASSWORD_EXPIRED
+       if ( ctrls ) {
+               LDAPControl *ctrl;
+               ctrl = ldap_control_find( LDAP_CONTROL_X_PASSWORD_EXPIRED,
+                       ctrls, NULL );
+               if ( !ctrl )
+                       ctrl = ldap_control_find( LDAP_CONTROL_X_PASSWORD_EXPIRING,
+                               ctrls, NULL );
+               if ( ctrl ) {
+                       LDAPControl *ctmp[2];
+                       ctmp[0] = ctrl;
+                       ctmp[1] = NULL;
+                       tool_print_ctrls( ld, ctmp );
+               }
+       }
+#endif
+
                if ( ctrls ) {
                        ldap_controls_free( ctrls );
                }
@@ -2257,6 +2282,28 @@ print_ppolicy( LDAP *ld, LDAPControl *ctrl )
 }
 #endif
 
+#ifdef LDAP_CONTROL_X_PASSWORD_EXPIRED
+static int
+print_netscape_pwexpired( LDAP *ld, LDAPControl *ctrl )
+{
+       printf(_("# PasswordExpired control\n") );
+       return 0;
+}
+
+static int
+print_netscape_pwexpiring( LDAP *ld, LDAPControl *ctrl )
+{
+       long expiring = 0;
+       int rc;
+
+       rc = ldap_parse_password_expiring_control( ld, ctrl, &expiring );
+       if ( rc == LDAP_SUCCESS ) {
+               printf(_("# PasswordExpiring control seconds=%ld\n"), expiring );
+       }
+       return rc;
+}
+#endif
+
 void tool_print_ctrls(
        LDAP            *ld,
        LDAPControl     **ctrls )