]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9438 slapo-remoteauth: plug config leaks
authorOndřej Kuzník <ondra@mistotebe.net>
Wed, 31 Aug 2022 11:37:13 +0000 (12:37 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Mon, 12 Sep 2022 20:43:04 +0000 (20:43 +0000)
servers/slapd/overlays/remoteauth.c

index 87397a16d697645a7de17db650bff9d25130eda9..1d60af02095f38fceb41c7b55dff6ecd2f18bab1 100644 (file)
@@ -204,12 +204,12 @@ remoteauth_cf_gen( ConfigArgs *c )
                                                str = ch_malloc( strlen( map->domain ) +
                                                                strlen( map->realm ) + 2 );
                                                sprintf( str, "%s %s", map->domain, map->realm );
-                                               ber_str2bv( str, strlen( str ), 1, &bv );
-                                               ch_free( str );
+                                               ber_str2bv( str, 0, 0, &bv );
                                                rc = value_add_one( &c->rvalue_vals, &bv );
-                                               if ( rc ) return rc;
-                                               rc = value_add_one( &c->rvalue_nvals, &bv );
-                                               if ( rc ) return rc;
+                                               if ( !rc )
+                                                       rc = value_add_one( &c->rvalue_nvals, &bv );
+                                               ch_free( str );
+                                               if ( rc ) break;
                                        }
                                        break;
                                case REMOTE_AUTH_DN_ATTRIBUTE:
@@ -223,13 +223,13 @@ remoteauth_cf_gen( ConfigArgs *c )
                                        break;
                                case REMOTE_AUTH_DEFAULT_DOMAIN:
                                        if ( ad->default_domain ) {
-                                               ber_str2bv( ad->default_domain, 0, 1, &bv );
+                                               ber_str2bv( ad->default_domain, 0, 0, &bv );
                                                value_add_one( &c->rvalue_vals, &bv );
                                        }
                                        break;
                                case REMOTE_AUTH_DEFAULT_REALM:
                                        if ( ad->default_realm ) {
-                                               ber_str2bv( ad->default_realm, 0, 1, &bv );
+                                               ber_str2bv( ad->default_realm, 0, 0, &bv );
                                                value_add_one( &c->rvalue_vals, &bv );
                                        }
                                        break;
@@ -246,6 +246,7 @@ remoteauth_cf_gen( ConfigArgs *c )
                                        }
 
                                        value_add_one( &c->rvalue_vals, &bv );
+                                       ch_free( bv.bv_val );
                                        break;
                                case REMOTE_AUTH_TLS_PIN: {
                                        ad_pin *pin = ad->pins;
@@ -950,14 +951,19 @@ remoteauth_db_destroy( BackendDB *be, ConfigReply *cr )
        ad_info *ai = ap->mappings;
 
        while ( ai ) {
+               ad_info *next = ai->next;
+
                if ( ai->domain ) ch_free( ai->domain );
                if ( ai->realm ) ch_free( ai->realm );
-               ai = ai->next;
+
+               ch_free( ai );
+               ai = next;
        }
 
        if ( ap->dn ) ch_free( ap->dn );
        if ( ap->default_domain ) ch_free( ap->default_domain );
        if ( ap->default_realm ) ch_free( ap->default_realm );
+       if ( ap->domain_attr ) ch_free( ap->domain_attr );
 
        bindconf_free( &ap->ad_tls );