]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/ad.c
Fix IRIX sc_mask conflict
[openldap] / servers / slapd / ad.c
index 41c6dcb5a95cd59c23dc5fe237fdffb1253d4fc8..3d1335b435d86c45d0073b9794e92502be90c6a8 100644 (file)
@@ -171,7 +171,7 @@ int slap_bv2ad(
 
                        if( !slap_syntax_is_binary( desc.ad_type->sat_syntax )) {
                                /* not stored in binary, disallow option */
-                               *text = "option \"binary\" with type not supported";
+                               *text = "option \"binary\" not supported with type";
                                return rtn;
                        }
 
@@ -278,7 +278,7 @@ done:;
 
        /* Not found, add new one */
        while (d2 == NULL) {
-               int dlen = 0;
+               size_t dlen = 0;
                ldap_pvt_thread_mutex_lock( &desc.ad_type->sat_ad_mutex );
                /* check again now that we've locked */
                for (d2 = desc.ad_type->sat_ad; d2; d2=d2->ad_next) {
@@ -303,20 +303,21 @@ done:;
                 * options length.
                 */
                if (desc.ad_lang.bv_len || desc.ad_flags != SLAP_DESC_NONE) {
+                       dlen = desc.ad_type->sat_cname.bv_len;
                        if (desc.ad_lang.bv_len) {
-                               dlen = desc.ad_lang.bv_len+1;
+                               dlen += 1+desc.ad_lang.bv_len;
                        }
-                       dlen += desc.ad_type->sat_cname.bv_len+1;
                        if( slap_ad_is_binary( &desc ) ) {
-                               dlen += sizeof("binary");
+                               dlen += sizeof(";binary")-1;
                        }
                }
 
-               d2 = ch_malloc(sizeof(AttributeDescription) + dlen);
+               d2 = ch_malloc(sizeof(AttributeDescription) + dlen + 1);
                d2->ad_type = desc.ad_type;
                d2->ad_flags = desc.ad_flags;
-               d2->ad_cname.bv_len = desc.ad_cname.bv_len;
+               d2->ad_cname.bv_len = desc.ad_type->sat_cname.bv_len;
                d2->ad_lang.bv_len = desc.ad_lang.bv_len;
+
                if (dlen == 0) {
                        d2->ad_cname.bv_val = d2->ad_type->sat_cname.bv_val;
                        d2->ad_lang.bv_val = NULL;
@@ -326,7 +327,7 @@ done:;
                        if( slap_ad_is_binary( &desc ) ) {
                                strcpy(d2->ad_cname.bv_val+d2->ad_cname.bv_len,
                                        ";binary");
-                               d2->ad_cname.bv_len += sizeof("binary");
+                               d2->ad_cname.bv_len += sizeof(";binary")-1;
                        }
                        if( d2->ad_lang.bv_len ) {
                                d2->ad_cname.bv_val[d2->ad_cname.bv_len++]=';';
@@ -455,7 +456,7 @@ int ad_inlist(
                                int i;
                                for ( i = 0; oc->soc_required[i] != NULL; i++ ) {
                                        rc = is_at_subtype( desc->ad_type,
-                                               oc->soc_allowed[i] );
+                                               oc->soc_required[i] );
                                        if( rc ) return 1;
                                }
                        }
@@ -530,8 +531,8 @@ int slap_bv2undef_ad(
        }
        
        if( !desc ) {
-               desc = ch_malloc(sizeof(AttributeDescription) +
-                       bv->bv_len + 1);
+               desc = ch_malloc(sizeof(AttributeDescription) + 1 +
+                       bv->bv_len);
                
                desc->ad_flags = SLAP_DESC_NONE;
                desc->ad_lang.bv_val = NULL;