Config should presrve OID macros in attr syntax field as well

This commit is contained in:
Howard Chu 2008-06-05 18:41:14 +00:00
parent ce4c7b0c55
commit b13d108686
2 changed files with 14 additions and 4 deletions

View File

@ -288,6 +288,10 @@ at_clean( AttributeType *a )
ldap_memfree( a->sat_oidmacro );
a->sat_oidmacro = NULL;
}
if ( a->sat_soidmacro ) {
ldap_memfree( a->sat_soidmacro );
a->sat_soidmacro = NULL;
}
if ( a->sat_subtypes ) {
ldap_memfree( a->sat_subtypes );
a->sat_subtypes = NULL;
@ -590,6 +594,7 @@ at_add(
int code = LDAP_SUCCESS;
char *cname = NULL;
char *oidm = NULL;
char *soidm = NULL;
if ( !at->at_oid ) {
*err = "";
@ -622,7 +627,7 @@ at_add(
goto error_return;
}
if ( oid != at->at_syntax_oid ) {
ldap_memfree( at->at_syntax_oid );
soidm = at->at_syntax_oid;
at->at_syntax_oid = oid;
}
}
@ -673,6 +678,7 @@ at_add(
sat->sat_cname.bv_val = cname;
sat->sat_cname.bv_len = strlen( cname );
sat->sat_oidmacro = oidm;
sat->sat_soidmacro = soidm;
ldap_pvt_thread_mutex_init(&sat->sat_ad_mutex);
if ( at->at_sup_oid ) {
@ -979,9 +985,12 @@ at_unparse( BerVarray *res, AttributeType *start, AttributeType *end, int sys )
for ( at=start; at; at=LDAP_STAILQ_NEXT(at, sat_next)) {
LDAPAttributeType lat, *latp;
if ( sys && !(at->sat_flags & SLAP_AT_HARDCODE)) break;
if ( at->sat_oidmacro ) {
if ( at->sat_oidmacro || at->sat_soidmacro ) {
lat = at->sat_atype;
if ( at->sat_oidmacro )
lat.at_oid = at->sat_oidmacro;
if ( at->sat_soidmacro )
lat.at_syntax_oid = at->sat_soidmacro;
latp = ⪫
} else {
latp = &at->sat_atype;

View File

@ -680,7 +680,8 @@ struct AttributeType {
Syntax *sat_syntax;
AttributeTypeSchemaCheckFN *sat_check;
char *sat_oidmacro;
char *sat_oidmacro; /* attribute OID */
char *sat_soidmacro; /* syntax OID */
#define SLAP_AT_NONE 0x0000U
#define SLAP_AT_ABSTRACT 0x0100U /* cannot be instantiated */