Preserve OID macros for display in back-config

This commit is contained in:
Howard Chu 2005-04-09 16:13:04 +00:00
parent 58d4f7fc20
commit e2a3fc3af3
5 changed files with 43 additions and 10 deletions

View File

@ -323,6 +323,7 @@ at_add(
int code; int code;
char *cname; char *cname;
char *oid; char *oid;
char *oidm = NULL;
if ( !OID_LEADCHAR( at->at_oid[0] )) { if ( !OID_LEADCHAR( at->at_oid[0] )) {
/* Expand OID macros */ /* Expand OID macros */
@ -332,7 +333,7 @@ at_add(
return SLAP_SCHERR_OIDM; return SLAP_SCHERR_OIDM;
} }
if ( oid != at->at_oid ) { if ( oid != at->at_oid ) {
ldap_memfree( at->at_oid ); oidm = at->at_oid;
at->at_oid = oid; at->at_oid = oid;
} }
} }
@ -394,6 +395,7 @@ at_add(
sat->sat_cname.bv_val = cname; sat->sat_cname.bv_val = cname;
sat->sat_cname.bv_len = strlen( cname ); sat->sat_cname.bv_len = strlen( cname );
sat->sat_oidmacro = oidm;
ldap_pvt_thread_mutex_init(&sat->sat_ad_mutex); ldap_pvt_thread_mutex_init(&sat->sat_ad_mutex);
if ( at->at_sup_oid ) { if ( at->at_sup_oid ) {
@ -650,12 +652,20 @@ at_unparse( BerVarray *res, AttributeType *start, AttributeType *end, int sys )
} }
i = 0; i = 0;
for ( at=start; at; at=LDAP_STAILQ_NEXT(at, sat_next)) { for ( at=start; at; at=LDAP_STAILQ_NEXT(at, sat_next)) {
LDAPAttributeType lat, *latp;
if ( sys && !(at->sat_flags & SLAP_AT_HARDCODE)) continue; if ( sys && !(at->sat_flags & SLAP_AT_HARDCODE)) continue;
if ( ldap_attributetype2bv( &at->sat_atype, &bv ) == NULL ) { if ( at->sat_oidmacro ) {
lat = at->sat_atype;
lat.at_oid = at->sat_oidmacro;
latp = ⪫
} else {
latp = &at->sat_atype;
}
if ( ldap_attributetype2bv( latp, &bv ) == NULL ) {
ber_bvarray_free( bva ); ber_bvarray_free( bva );
} }
if ( !sys ) { if ( !sys ) {
idx.bv_len = sprintf(idx.bv_val, "{%02d}", i); idx.bv_len = sprintf(idx.bv_val, "{%d}", i);
} }
bva[i].bv_len = idx.bv_len + bv.bv_len; bva[i].bv_len = idx.bv_len + bv.bv_len;
bva[i].bv_val = ch_malloc( bva[i].bv_len + 1 ); bva[i].bv_val = ch_malloc( bva[i].bv_len + 1 );

View File

@ -340,6 +340,7 @@ cr_add(
ContentRule *scr; ContentRule *scr;
int code; int code;
int op = 0; int op = 0;
char *oidm = NULL;
if ( cr->cr_names != NULL ) { if ( cr->cr_names != NULL ) {
int i; int i;
@ -359,7 +360,7 @@ cr_add(
return SLAP_SCHERR_OIDM; return SLAP_SCHERR_OIDM;
} }
if ( oid != cr->cr_oid ) { if ( oid != cr->cr_oid ) {
ldap_memfree( cr->cr_oid ); oidm = cr->cr_oid;
cr->cr_oid = oid; cr->cr_oid = oid;
} }
} }
@ -367,6 +368,7 @@ cr_add(
scr = (ContentRule *) ch_calloc( 1, sizeof(ContentRule) ); scr = (ContentRule *) ch_calloc( 1, sizeof(ContentRule) );
AC_MEMCPY( &scr->scr_crule, cr, sizeof(LDAPContentRule) ); AC_MEMCPY( &scr->scr_crule, cr, sizeof(LDAPContentRule) );
scr->scr_oidmacro = oidm;
scr->scr_sclass = oc_find(cr->cr_oid); scr->scr_sclass = oc_find(cr->cr_oid);
if ( !scr->scr_sclass ) { if ( !scr->scr_sclass ) {
*err = cr->cr_oid; *err = cr->cr_oid;
@ -434,12 +436,20 @@ cr_unparse( BerVarray *res, ContentRule *start, ContentRule *end, int sys )
} }
i = 0; i = 0;
for ( cr=start; cr; cr=LDAP_STAILQ_NEXT(cr, scr_next)) { for ( cr=start; cr; cr=LDAP_STAILQ_NEXT(cr, scr_next)) {
LDAPContentRule lcr, *lcrp;
if ( sys && !(cr->scr_flags & SLAP_CR_HARDCODE)) continue; if ( sys && !(cr->scr_flags & SLAP_CR_HARDCODE)) continue;
if ( ldap_contentrule2bv( &cr->scr_crule, &bv ) == NULL ) { if ( cr->scr_oidmacro ) {
lcr = cr->scr_crule;
lcr.cr_oid = cr->scr_oidmacro;
lcrp = &lcr;
} else {
lcrp = &cr->scr_crule;
}
if ( ldap_contentrule2bv( lcrp, &bv ) == NULL ) {
ber_bvarray_free( bva ); ber_bvarray_free( bva );
} }
if ( !sys ) { if ( !sys ) {
idx.bv_len = sprintf(idx.bv_val, "{%02d}", i); idx.bv_len = sprintf(idx.bv_val, "{%d}", i);
} }
bva[i].bv_len = idx.bv_len + bv.bv_len; bva[i].bv_len = idx.bv_len + bv.bv_len;
bva[i].bv_val = ch_malloc( bva[i].bv_len + 1 ); bva[i].bv_val = ch_malloc( bva[i].bv_len + 1 );

View File

@ -467,6 +467,7 @@ oc_add(
ObjectClass *soc; ObjectClass *soc;
int code; int code;
int op = 0; int op = 0;
char *oidm = NULL;
if ( oc->oc_names != NULL ) { if ( oc->oc_names != NULL ) {
int i; int i;
@ -486,7 +487,7 @@ oc_add(
return SLAP_SCHERR_OIDM; return SLAP_SCHERR_OIDM;
} }
if ( oid != oc->oc_oid ) { if ( oid != oc->oc_oid ) {
ldap_memfree( oc->oc_oid ); oidm = oc->oc_oid;
oc->oc_oid = oid; oc->oc_oid = oid;
} }
} }
@ -494,6 +495,7 @@ oc_add(
soc = (ObjectClass *) ch_calloc( 1, sizeof(ObjectClass) ); soc = (ObjectClass *) ch_calloc( 1, sizeof(ObjectClass) );
AC_MEMCPY( &soc->soc_oclass, oc, sizeof(LDAPObjectClass) ); AC_MEMCPY( &soc->soc_oclass, oc, sizeof(LDAPObjectClass) );
soc->soc_oidmacro = oidm;
if( oc->oc_names != NULL ) { if( oc->oc_names != NULL ) {
soc->soc_cname.bv_val = soc->soc_names[0]; soc->soc_cname.bv_val = soc->soc_names[0];
} else { } else {
@ -560,12 +562,20 @@ oc_unparse( BerVarray *res, ObjectClass *start, ObjectClass *end, int sys )
} }
i = 0; i = 0;
for ( oc=start; oc; oc=LDAP_STAILQ_NEXT(oc, soc_next)) { for ( oc=start; oc; oc=LDAP_STAILQ_NEXT(oc, soc_next)) {
LDAPObjectClass loc, *locp;
if ( sys && !(oc->soc_flags & SLAP_OC_HARDCODE)) continue; if ( sys && !(oc->soc_flags & SLAP_OC_HARDCODE)) continue;
if ( ldap_objectclass2bv( &oc->soc_oclass, &bv ) == NULL ) { if ( oc->soc_oidmacro ) {
loc = oc->soc_oclass;
loc.oc_oid = oc->soc_oidmacro;
locp = &loc;
} else {
locp = &oc->soc_oclass;
}
if ( ldap_objectclass2bv( locp, &bv ) == NULL ) {
ber_bvarray_free( bva ); ber_bvarray_free( bva );
} }
if ( !sys ) { if ( !sys ) {
idx.bv_len = sprintf(idx.bv_val, "{%02d}", i); idx.bv_len = sprintf(idx.bv_val, "{%d}", i);
} }
bva[i].bv_len = idx.bv_len + bv.bv_len; bva[i].bv_len = idx.bv_len + bv.bv_len;
bva[i].bv_val = ch_malloc( bva[i].bv_len + 1 ); bva[i].bv_val = ch_malloc( bva[i].bv_len + 1 );

View File

@ -184,7 +184,7 @@ void oidm_unparse( BerVarray *res, OidMacro *start, OidMacro *end, int sys )
if ( sys && !(om->som_flags & SLAP_OM_HARDCODE)) continue; if ( sys && !(om->som_flags & SLAP_OM_HARDCODE)) continue;
for ( j=0; !BER_BVISNULL(&om->som_names[j]); i++,j++ ) { for ( j=0; !BER_BVISNULL(&om->som_names[j]); i++,j++ ) {
if ( !sys ) { if ( !sys ) {
idx.bv_len = sprintf(idx.bv_val, "{%02d}", i ); idx.bv_len = sprintf(idx.bv_val, "{%d}", i );
} }
bva[i].bv_len = idx.bv_len + om->som_names[j].bv_len + bva[i].bv_len = idx.bv_len + om->som_names[j].bv_len +
om->som_subs[j].bv_len + 1; om->som_subs[j].bv_len + 1;

View File

@ -641,6 +641,7 @@ typedef struct slap_attribute_type {
Syntax *sat_syntax; Syntax *sat_syntax;
AttributeTypeSchemaCheckFN *sat_check; AttributeTypeSchemaCheckFN *sat_check;
char *sat_oidmacro;
#define SLAP_AT_NONE 0x0000U #define SLAP_AT_NONE 0x0000U
#define SLAP_AT_ABSTRACT 0x0100U /* cannot be instantiated */ #define SLAP_AT_ABSTRACT 0x0100U /* cannot be instantiated */
@ -700,6 +701,7 @@ typedef struct slap_object_class {
AttributeType **soc_required; AttributeType **soc_required;
AttributeType **soc_allowed; AttributeType **soc_allowed;
ObjectClassSchemaCheckFN *soc_check; ObjectClassSchemaCheckFN *soc_check;
char *soc_oidmacro;
slap_mask_t soc_flags; slap_mask_t soc_flags;
#define soc_oid soc_oclass.oc_oid #define soc_oid soc_oclass.oc_oid
#define soc_names soc_oclass.oc_names #define soc_names soc_oclass.oc_names
@ -751,6 +753,7 @@ typedef struct slap_content_rule {
#define scr_at_oids_may scr_crule.cr_at_oids_may #define scr_at_oids_may scr_crule.cr_at_oids_may
#define scr_at_oids_not scr_crule.cr_at_oids_not #define scr_at_oids_not scr_crule.cr_at_oids_not
char *scr_oidmacro;
#define SLAP_CR_HARDCODE 0x10000U #define SLAP_CR_HARDCODE 0x10000U
int scr_flags; int scr_flags;