]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldap/extended.c
More ldapbis cleanup
[openldap] / servers / slapd / back-ldap / extended.c
index 2e0974452b9dfc6c2059740cb8fe89855beb348e..da178559b6c6e84528594714f2419ec7832f619a 100644 (file)
@@ -42,7 +42,9 @@ static struct exop {
 static int
 ldap_back_extended_one( Operation *op, SlapReply *rs, BI_op_extended exop )
 {
-       ldapconn_t      *lc;
+       ldapinfo_t      *li = (ldapinfo_t *) op->o_bd->be_private;
+
+       ldapconn_t      *lc = NULL;
        LDAPControl     **oldctrls = NULL;
        int             rc;
 
@@ -50,13 +52,14 @@ ldap_back_extended_one( Operation *op, SlapReply *rs, BI_op_extended exop )
         * called twice; maybe we could avoid the 
         * ldap_back_dobind() call inside each extended()
         * call ... */
-       lc = ldap_back_getconn( op, rs, LDAP_BACK_SENDERR );
-       if ( !lc || !ldap_back_dobind( lc, op, rs, LDAP_BACK_SENDERR ) ) {
+       if ( !ldap_back_dobind( &lc, op, rs, LDAP_BACK_SENDERR ) ) {
                return -1;
        }
 
        oldctrls = op->o_ctrls;
-       if ( ldap_back_proxy_authz_ctrl( lc, op, rs, &op->o_ctrls ) ) {
+       if ( ldap_back_proxy_authz_ctrl( &lc->lc_bound_ndn,
+               li->li_version, &li->li_idassert, op, rs, &op->o_ctrls ) )
+       {
                op->o_ctrls = oldctrls;
                send_ldap_extended( op, rs );
                rs->sr_text = NULL;
@@ -108,7 +111,7 @@ ldap_back_exop_passwd(
 {
        ldapinfo_t      *li = (ldapinfo_t *) op->o_bd->be_private;
 
-       ldapconn_t      *lc;
+       ldapconn_t      *lc = NULL;
        req_pwdexop_s   *qpw = &op->oq_pwdexop;
        LDAPMessage     *res;
        ber_int_t       msgid;
@@ -116,8 +119,7 @@ ldap_back_exop_passwd(
        int             do_retry = 1;
        char *text = NULL;
 
-       lc = ldap_back_getconn( op, rs, LDAP_BACK_SENDERR );
-       if ( !lc || !ldap_back_dobind( lc, op, rs, LDAP_BACK_SENDERR ) ) {
+       if ( !ldap_back_dobind( &lc, op, rs, LDAP_BACK_SENDERR ) ) {
                return -1;
        }
 
@@ -138,6 +140,11 @@ retry:
                        rs->sr_err = rc;
 
                } else {
+                       /* only touch when activity actually took place... */
+                       if ( li->li_idle_timeout && lc ) {
+                               lc->lc_time = op->o_time;
+                       }
+
                        /* sigh. parse twice, because parse_passwd
                         * doesn't give us the err / match / msg info.
                         */
@@ -185,7 +192,7 @@ retry:
                }
 
                if ( LDAP_BACK_QUARANTINE( li ) ) {
-                       ldap_back_quarantine( op, rs, 1 );
+                       ldap_back_quarantine( op, rs );
                }
 
                if ( text ) rs->sr_text = text;
@@ -194,7 +201,7 @@ retry:
                rc = rs->sr_err = SLAPD_ABANDON;
 
        } else if ( LDAP_BACK_QUARANTINE( li ) ) {
-               ldap_back_quarantine( op, rs, 1 );
+               ldap_back_quarantine( op, rs );
        }
 
        /* these have to be freed anyway... */
@@ -222,15 +229,14 @@ ldap_back_exop_generic(
 {
        ldapinfo_t      *li = (ldapinfo_t *) op->o_bd->be_private;
 
-       ldapconn_t      *lc;
+       ldapconn_t      *lc = NULL;
        LDAPMessage     *res;
        ber_int_t       msgid;
        int             rc;
        int             do_retry = 1;
        char *text = NULL;
 
-       lc = ldap_back_getconn( op, rs, LDAP_BACK_SENDERR );
-       if ( !lc || !ldap_back_dobind( lc, op, rs, LDAP_BACK_SENDERR ) ) {
+       if ( !ldap_back_dobind( &lc, op, rs, LDAP_BACK_SENDERR ) ) {
                return -1;
        }
 
@@ -248,6 +254,11 @@ retry:
                        rs->sr_err = rc;
 
                } else {
+                       /* only touch when activity actually took place... */
+                       if ( li->li_idle_timeout && lc ) {
+                               lc->lc_time = op->o_time;
+                       }
+
                        /* sigh. parse twice, because parse_passwd
                         * doesn't give us the err / match / msg info.
                         */
@@ -281,7 +292,7 @@ retry:
                }
 
                if ( LDAP_BACK_QUARANTINE( li ) ) {
-                       ldap_back_quarantine( op, rs, 1 );
+                       ldap_back_quarantine( op, rs );
                }
 
                if ( text ) rs->sr_text = text;
@@ -290,7 +301,7 @@ retry:
                rc = rs->sr_err = SLAPD_ABANDON;
 
        } else if ( LDAP_BACK_QUARANTINE( li ) ) {
-               ldap_back_quarantine( op, rs, 1 );
+               ldap_back_quarantine( op, rs );
        }
 
        /* these have to be freed anyway... */