]> git.sur5r.net Git - openldap/commitdiff
Fix double-free closing multiple ppolicy overlay instances
authorHoward Chu <hyc@openldap.org>
Thu, 16 Aug 2007 19:59:02 +0000 (19:59 +0000)
committerHoward Chu <hyc@openldap.org>
Thu, 16 Aug 2007 19:59:02 +0000 (19:59 +0000)
servers/slapd/overlays/ppolicy.c

index 137e907649a48efe29b61e5f3ed9e00d9cdadd78..83da96c3ee62e192afdb1c1602a2ec5b748c37ea 100644 (file)
@@ -61,6 +61,7 @@ typedef struct pw_conn {
 
 static pw_conn *pwcons;
 static int ppolicy_cid;
+static int ov_count;
 
 typedef struct pass_policy {
        AttributeDescription *ad; /* attribute to which the policy applies */
@@ -2122,6 +2123,7 @@ ppolicy_db_open(
        ConfigReply *cr
 )
 {
+       ov_count++;
        return overlay_register_control( be, LDAP_CONTROL_PASSWORDPOLICYREQUEST );
 }
 
@@ -2133,8 +2135,11 @@ ppolicy_close(
 {
        slap_overinst *on = (slap_overinst *) be->bd_info;
        pp_info *pi = on->on_bi.bi_private;
-       
-       free( pwcons );
+
+       /* Perhaps backover should provide bi_destroy hooks... */
+       ov_count--;
+       if ( !ov_count )
+               free( pwcons );
        free( pi->def_policy.bv_val );
        free( pi );