+ if ( oc->oc_at_oids_may ) {
+ namep = oc->oc_at_oids_may;
+ while ( *namep ) {
+ code = at_fake_if_needed( *namep );
+ if ( code ) {
+ fprintf( stderr, "%s: line %d: %s %s\n",
+ fname, lineno, scherr2str(code), *namep);
+ exit( EXIT_FAILURE );
+ }
+ namep++;
+ }
+ }
+
+ code = oc_add(oc,&err);
+ if ( code ) {
+ fprintf( stderr, "%s: line %d: %s %s\n",
+ fname, lineno, scherr2str(code), err);
+ exit( EXIT_FAILURE );
+ }
+ ldap_memfree(oc);
+}
+
+void
+parse_oc(
+ char *fname,
+ int lineno,
+ char *line
+)
+{
+ LDAP_OBJECT_CLASS *oc;
+ int code;
+ const char *err;
+
+ oc = ldap_str2objectclass(line,&code,&err);
+ if ( !oc ) {
+ fprintf( stderr, "%s: line %d: %s before %s\n",
+ fname, lineno, ldap_scherr2str(code), err );
+ oc_usage();
+ }
+ code = oc_add(oc,&err);
+ if ( code ) {
+ fprintf( stderr, "%s: line %d: %s %s\n",
+ fname, lineno, scherr2str(code), err);
+ exit( EXIT_FAILURE );
+ }
+ ldap_memfree(oc);
+}
+
+static void
+oc_usage( void )
+{
+ fprintf( stderr, "ObjectClassDescription = \"(\" whsp\n");
+ fprintf( stderr, " numericoid whsp ; ObjectClass identifier\n");
+ fprintf( stderr, " [ \"NAME\" qdescrs ]\n");
+ fprintf( stderr, " [ \"DESC\" qdstring ]\n");
+ fprintf( stderr, " [ \"OBSOLETE\" whsp ]\n");
+ fprintf( stderr, " [ \"SUP\" oids ] ; Superior ObjectClasses\n");
+ fprintf( stderr, " [ ( \"ABSTRACT\" / \"STRUCTURAL\" / \"AUXILIARY\" ) whsp ]\n");
+ fprintf( stderr, " ; default structural\n");
+ fprintf( stderr, " [ \"MUST\" oids ] ; AttributeTypes\n");
+ fprintf( stderr, " [ \"MAY\" oids ] ; AttributeTypes\n");
+ fprintf( stderr, "whsp \")\"\n");
+ exit( EXIT_FAILURE );