From b13d1086864e99a9bb35e249076b1b7e6c16b21d Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Thu, 5 Jun 2008 18:41:14 +0000 Subject: [PATCH] Config should presrve OID macros in attr syntax field as well --- servers/slapd/at.c | 15 ++++++++++++--- servers/slapd/slap.h | 3 ++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/servers/slapd/at.c b/servers/slapd/at.c index 04c0d0168e..de44c27561 100644 --- a/servers/slapd/at.c +++ b/servers/slapd/at.c @@ -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; - lat.at_oid = at->sat_oidmacro; + 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; diff --git a/servers/slapd/slap.h b/servers/slapd/slap.h index cad6b7038f..c5135e6e1a 100644 --- a/servers/slapd/slap.h +++ b/servers/slapd/slap.h @@ -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 */ -- 2.39.5