X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fad.c;h=3d1335b435d86c45d0073b9794e92502be90c6a8;hb=c5b6a86502dc0c16027cd87e3d9544e9078083db;hp=3cb1806d35b167c2bdc5353b3704b63f84779568;hpb=8057b1a0a84eb3f75f3da5878cedd7cd6e045e52;p=openldap diff --git a/servers/slapd/ad.c b/servers/slapd/ad.c index 3cb1806d35..3d1335b435 100644 --- a/servers/slapd/ad.c +++ b/servers/slapd/ad.c @@ -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;