char *cname;
if ( at->at_names && at->at_names[0] ) {
+ int i;
+
+ for( i=0; at->at_names[i]; i++ ) {
+ if( !slap_valid_descr( at->at_names[i] ) ) {
+ return SLAP_SCHERR_BAD_DESCR;
+ }
+ }
+
cname = at->at_names[0];
+
} else if ( at->at_oid ) {
cname = at->at_oid;
} else {
- cname = "";
return SLAP_SCHERR_ATTR_INCOMPLETE;
}
ObjectClass *soc;
int code;
+ if ( oc->oc_names != NULL ) {
+ int i;
+
+ for( i=0; oc->oc_names[i]; i++ ) {
+ if( !slap_valid_descr( oc->oc_names[i] ) ) {
+ return SLAP_SCHERR_BAD_DESCR;
+ }
+ }
+ }
+
soc = (ObjectClass *) ch_calloc( 1, sizeof(ObjectClass) );
AC_MEMCPY( &soc->soc_oclass, oc, sizeof(LDAPObjectClass) );
LDAP_SLAPD_F( int ) schema_init_done;
LDAP_SLAPD_F( struct slap_internal_schema ) slap_schema;
+LDAP_SLAPD_F( int ) slap_valid_descr( const char * );
+
LDAP_SLAPD_F (int) slap_str2ad LDAP_P((
const char *,
AttributeDescription **ad,
"MatchingRule not found",
"Syntax not found",
"Syntax required",
- "Qualifier not supported"
+ "Qualifier not supported",
+ "Invalid NAME"
};
char *
}
}
+/* check schema descr validity */
+int slap_valid_descr( const char *descr )
+{
+ int i=0;
+
+ if( !DESC_LEADCHAR( descr[i] ) ) {
+ return 0;
+ }
+
+ while( descr[++i] ) {
+ if( !DESC_CHAR( descr[i] ) ) {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
/* OID Macros */
#define SLAP_SCHERR_SYN_NOT_FOUND 13
#define SLAP_SCHERR_MR_INCOMPLETE 14
#define SLAP_SCHERR_NOT_SUPPORTED 15
+#define SLAP_SCHERR_BAD_DESCR 16
typedef struct slap_oid_macro {
struct berval som_oid;