]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/memberof.c
check for ee == NULL
[openldap] / servers / slapd / overlays / memberof.c
index eaff0edcf10663ec1ba811d0b5bcda403412422e..40cf08b93026a3bd6e26c46360a409737ff0fcc9 100644 (file)
@@ -195,7 +195,7 @@ memberof_saved_member_get( Operation *op, void *keyp )
        BerVarray       vals;
        BerVarray       *key = (BerVarray *)keyp;
 
-       assert( op );
+       assert( op != NULL );
 
        if ( op->o_threadctx == NULL ) {
                vals = *key;
@@ -217,7 +217,7 @@ memberof_saved_member_set( Operation *op, void *keyp, BerVarray vals )
        BerVarray       saved_vals = NULL;
        BerVarray       *key = (BerVarray*)keyp;
 
-       assert( op );
+       assert( op != NULL );
 
        if ( vals ) {
                ber_bvarray_dup_x( &saved_vals, vals, NULL );
@@ -268,8 +268,8 @@ memberof_saveMember_cb( Operation *op, SlapReply *rs )
                mc = (memberof_cookie_t *)op->o_callback->sc_private;
                mc->foundit = 1;
 
-               assert( rs->sr_entry );
-               assert( rs->sr_entry->e_attrs );
+               assert( rs->sr_entry != NULL );
+               assert( rs->sr_entry->e_attrs != NULL );
 
                a = attr_find( rs->sr_entry->e_attrs, mc->ad );
 
@@ -416,6 +416,7 @@ memberof_value_modify(
        op2.o_ndn = op->o_bd->be_rootndn;
 
        ml = &mod[ 0 ];
+       ml->sml_numvals = 1;
        ml->sml_values = &values[ 0 ];
        ml->sml_values[ 0 ] = mo->mo_dn;
        BER_BVZERO( &ml->sml_values[ 1 ] );
@@ -430,6 +431,7 @@ memberof_value_modify(
        op2.orm_modlist = ml;
 
        ml = &mod[ 1 ];
+       ml->sml_numvals = 1;
        ml->sml_values = &values[ 2 ];
        BER_BVZERO( &ml->sml_values[ 1 ] );
        ml->sml_nvalues = &nvalues[ 2 ];
@@ -444,6 +446,7 @@ memberof_value_modify(
                assert( !BER_BVISNULL( new_dn ) );
                assert( !BER_BVISNULL( new_ndn ) );
 
+               ml = &mod[ 1 ];
                ml->sml_op = LDAP_MOD_ADD;
 
                ml->sml_values[ 0 ] = *new_dn;
@@ -463,6 +466,7 @@ memberof_value_modify(
                assert( !BER_BVISNULL( old_dn ) );
                assert( !BER_BVISNULL( old_ndn ) );
 
+               ml = &mod[ 1 ];
                ml->sml_op = LDAP_MOD_DELETE;
 
                ml->sml_values[ 0 ] = *old_dn;
@@ -776,7 +780,7 @@ memberof_op_modify( Operation *op, SlapReply *rs )
                        case LDAP_MOD_ADD:
                                /* NOTE: right now, the attributeType we use
                                 * for member must have a normalized value */
-                               assert( ml->sml_nvalues );
+                               assert( ml->sml_nvalues != NULL );
        
                                for ( i = 0; !BER_BVISNULL( &ml->sml_nvalues[ i ] ); i++ ) {
                                        int             rc;
@@ -810,6 +814,7 @@ memberof_op_modify( Operation *op, SlapReply *rs )
                                                BER_BVZERO( &ml->sml_values[ i ] );
                                                ber_memfree( ml->sml_nvalues[ i ].bv_val );
                                                BER_BVZERO( &ml->sml_nvalues[ i ] );
+                                               ml->sml_numvals--;
                                                if ( j - i == 1 ) {
                                                        break;
                                                }
@@ -907,6 +912,7 @@ memberof_op_modify( Operation *op, SlapReply *rs )
                                                                ber_memfree( ml->sml_nvalues[ i ].bv_val );
                                                                BER_BVZERO( &ml->sml_nvalues[ i ] );
                                                        }
+                                                       ml->sml_numvals--;
                                                        if ( j - i == 1 ) {
                                                                break;
                                                        }
@@ -1017,6 +1023,7 @@ memberof_op_modify( Operation *op, SlapReply *rs )
                                                        ber_memfree( ml->sml_nvalues[ i ].bv_val );
                                                        BER_BVZERO( &ml->sml_nvalues[ i ] );
                                                }
+                                               ml->sml_numvals--;
                                                if ( j - i == 1 ) {
                                                        break;
                                                }
@@ -1439,14 +1446,12 @@ memberof_db_init(
        ConfigReply     *cr )
 {
        slap_overinst   *on = (slap_overinst *)be->bd_info;
-       memberof_t      *mo;
+       memberof_t      tmp_mo = { 0 }, *mo;
 
        int             rc;
        const char      *text = NULL;
 
-       mo = (memberof_t *)ch_calloc( 1, sizeof( memberof_t ) );
-
-       rc = slap_str2ad( SLAPD_MEMBEROF_ATTR, &mo->mo_ad_memberof, &text );
+       rc = slap_str2ad( SLAPD_MEMBEROF_ATTR, &tmp_mo.mo_ad_memberof, &text );
        if ( rc != LDAP_SUCCESS ) {
                Debug( LDAP_DEBUG_ANY,
                        "memberof_db_init: "
@@ -1455,7 +1460,7 @@ memberof_db_init(
                return rc;
        }
 
-       rc = slap_str2ad( SLAPD_GROUP_ATTR, &mo->mo_ad_member, &text );
+       rc = slap_str2ad( SLAPD_GROUP_ATTR, &tmp_mo.mo_ad_member, &text );
        if ( rc != LDAP_SUCCESS ) {
                Debug( LDAP_DEBUG_ANY,
                        "memberof_db_init: "
@@ -1464,8 +1469,8 @@ memberof_db_init(
                return rc;
        }
 
-       mo->mo_oc_group = oc_find( SLAPD_GROUP_CLASS );
-       if ( mo->mo_oc_group == NULL ) {
+       tmp_mo.mo_oc_group = oc_find( SLAPD_GROUP_CLASS );
+       if ( tmp_mo.mo_oc_group == NULL ) {
                Debug( LDAP_DEBUG_ANY,
                        "memberof_db_init: "
                        "unable to find objectClass=\"%s\"\n",
@@ -1473,6 +1478,9 @@ memberof_db_init(
                return 1;
        }
 
+       mo = (memberof_t *)ch_calloc( 1, sizeof( memberof_t ) );
+       *mo = tmp_mo;
+
        on->on_bi.bi_private = (void *)mo;
 
        return 0;
@@ -1891,8 +1899,8 @@ static struct {
                "DESC 'Group that the entry belongs to' "
                "SYNTAX '1.3.6.1.4.1.1466.115.121.1.12' "
                "EQUALITY distinguishedNameMatch "      /* added */
-               "USAGE directoryOperation "             /* questioned */
-               /* "NO-USER-MODIFICATION " */
+               "USAGE dSAOperation "                   /* added; questioned */
+               /* "NO-USER-MODIFICATION " */           /* add? */
                "X-ORIGIN 'iPlanet Delegated Administrator' )",
                &ad_memberOf },
        { NULL }