]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/ad.c
Fix IRIX sc_mask conflict
[openldap] / servers / slapd / ad.c
index 3cb1806d35b167c2bdc5353b3704b63f84779568..3d1335b435d86c45d0073b9794e92502be90c6a8 100644 (file)
@@ -102,7 +102,6 @@ int slap_bv2ad(
        AttributeDescription desc, *d2;
        char *name, *options;
        char *opt, *next;
-       char *s, *ptr;
        int nlang;
        int langlen;
 
@@ -172,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;
                        }
 
@@ -201,14 +200,15 @@ int slap_bv2ad(
                                int rc;
 
                                rc = strncasecmp( opt, langs[i].bv_val,
-                                       optlen < langs[i].bv_len ? optlen : langs[i].bv_len );
+                                       (unsigned) optlen < langs[i].bv_len
+                                               ? optlen : langs[i].bv_len );
 
-                               if( rc == 0 && optlen == langs[i].bv_len ) {
+                               if( rc == 0 && (unsigned)optlen == langs[i].bv_len ) {
                                        /* duplicate (ignore) */
                                        goto done;
 
                                } else if ( rc > 0 ||
-                                       ( rc == 0 && optlen > langs[i].bv_len ))
+                                       ( rc == 0 && (unsigned)optlen > langs[i].bv_len ))
                                {
                                        AC_MEMCPY( &langs[i+1], &langs[i],
                                                (nlang-i)*sizeof(struct berval) );
@@ -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++]=';';
@@ -350,7 +351,6 @@ done:;
                        d2->ad_next = desc.ad_type->sat_ad->ad_next;
                        desc.ad_type->sat_ad->ad_next = d2;
                }
-               free(desc.ad_lang.bv_val);
                ldap_pvt_thread_mutex_unlock( &desc.ad_type->sat_ad_mutex );
        }
 
@@ -456,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;
                                }
                        }
@@ -531,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;