]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/schemaparse.c
Remove lint
[openldap] / servers / slapd / schemaparse.c
index 6f00e93eef2fa297d1cbfed1887fd8d11004caca..cd73b41b0a69b70128263a1f11e88766249ae7a9 100644 (file)
 
 int    global_schemacheck = 1; /* schemacheck on is default */
 
-static void            oc_usage(void)     LDAP_GCCATTR((noreturn));
-static void            at_usage(void)     LDAP_GCCATTR((noreturn));
+static void            oc_usage(void)
+static void            at_usage(void);
 
 static char *const err2text[] = {
        "Success",
        "Out of memory",
        "ObjectClass not found",
+       "ObjectClass inappropriate SUPerior",
        "AttributeType not found",
+       "AttributeType inappropriate USAGE",
        "Duplicate objectClass",
        "Duplicate attributeType",
        "Duplicate ldapSyntax",
@@ -34,7 +36,9 @@ static char *const err2text[] = {
        "SYNTAX or SUPerior required",
        "MatchingRule not found",
        "Syntax not found",
-       "Syntax required"
+       "Syntax required",
+       "Qualifier not supported",
+       "Invalid NAME"
 };
 
 char *
@@ -47,6 +51,24 @@ scherr2str(int code)
        }
 }
 
+/* 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 */
 
@@ -110,7 +132,7 @@ find_oidm(char *oid)
        return NULL;
 }
 
-void
+int
 parse_oidm(
     const char *fname,
     int                lineno,
@@ -125,7 +147,7 @@ parse_oidm(
                fprintf( stderr, "%s: line %d: too many arguments\n",
                        fname, lineno );
 usage: fprintf( stderr, "\tObjectIdentifier <name> <oid>\n");
-               exit( EXIT_FAILURE );
+               return 1;
        }
 
        oid = find_oidm( argv[1] );
@@ -134,7 +156,7 @@ usage:      fprintf( stderr, "\tObjectIdentifier <name> <oid>\n");
                        "%s: line %d: "
                        "ObjectIdentifier \"%s\" previously defined \"%s\"",
                        fname, lineno, argv[1], oid );
-               exit( EXIT_FAILURE );
+               return 1;
        }
 
        om = (OidMacro *) ch_malloc( sizeof(OidMacro) );
@@ -156,9 +178,11 @@ usage:     fprintf( stderr, "\tObjectIdentifier <name> <oid>\n");
        om->som_oid.bv_len = strlen( om->som_oid.bv_val );
        om->som_next = om_list;
        om_list = om;
+
+       return 0;
 }
 
-void
+int
 parse_oc(
     const char *fname,
     int                lineno,
@@ -166,7 +190,7 @@ parse_oc(
     char       **argv
 )
 {
-       LDAP_OBJECT_CLASS *oc;
+       LDAPObjectClass *oc;
        int             code;
        const char      *err;
        char            *oid = NULL;
@@ -176,7 +200,9 @@ parse_oc(
                fprintf( stderr, "%s: line %d: %s before %s\n",
                         fname, lineno, ldap_scherr2str(code), err );
                oc_usage();
+               return 1;
        }
+
        if ( oc->oc_oid ) {
                if ( !OID_LEADCHAR( oc->oc_oid[0] )) {
                        /* Expand OID macros */
@@ -185,7 +211,7 @@ parse_oc(
                                fprintf(stderr,
                                        "%s: line %d: OID %s not recognized\n",
                                        fname, lineno, oc->oc_oid);
-                               exit( EXIT_FAILURE );
+                               return 1;
                        }
                        if ( oid != oc->oc_oid ) {
                                ldap_memfree( oc->oc_oid );
@@ -193,14 +219,17 @@ parse_oc(
                        }
                }
        }
+
        /* oc->oc_oid == NULL will be an error someday */
        code = oc_add(oc,&err);
        if ( code ) {
                fprintf( stderr, "%s: line %d: %s: \"%s\"\n",
                         fname, lineno, scherr2str(code), err);
-               exit( EXIT_FAILURE );
+               return 1;
        }
+
        ldap_memfree(oc);
+       return 0;
 }
 
 static void
@@ -218,7 +247,6 @@ oc_usage( void )
                "  [ \"MUST\" oids ]               ; AttributeTypes\n"
                "  [ \"MAY\" oids ]                ; AttributeTypes\n"
                "  whsp \")\"\n" );
-       exit( EXIT_FAILURE );
 }
 
 
@@ -246,10 +274,9 @@ at_usage( void )
                "                                   ; distributedOperation\n"
                "                                   ; dSAOperation\n"
                "  whsp \")\"\n");
-       exit( EXIT_FAILURE );
 }
 
-void
+int
 parse_at(
     const char *fname,
     int                lineno,
@@ -257,7 +284,7 @@ parse_at(
     char       **argv
 )
 {
-       LDAP_ATTRIBUTE_TYPE *at;
+       LDAPAttributeType *at;
        int             code;
        const char      *err;
        char            *oid = NULL;
@@ -271,8 +298,9 @@ parse_at(
         */
        for (; argv[3]; argv++)
        {
-               if (!strcasecmp(argv[3], "syntax") &&
-                   !OID_LEADCHAR(*argv[4]))
+               /* Allow numeric OIDs to be wrapped in single quotes */
+               if (!strcasecmp(argv[3], "syntax") && argv[4] != NULL &&
+                   !OID_LEADCHAR(argv[4][argv[4][0] == '\'' ? 1 : 0]))
                {
                        int slen;
                        Syntax *syn;
@@ -281,7 +309,7 @@ parse_at(
                        {
                            fprintf(stderr, "%s: line %d: OID %s not found\n",
                                fname, lineno, argv[4]);
-                           exit( EXIT_FAILURE );
+                               return 1;
                        }
                        memset(strstr(line, argv[4]), '0', slen);
                        soid = ch_strdup(syn->ssyn_syn.syn_oid );
@@ -293,6 +321,7 @@ parse_at(
                fprintf( stderr, "%s: line %d: %s before %s\n",
                         fname, lineno, ldap_scherr2str(code), err );
                at_usage();
+               return 1;
        }
        if ( at->at_oid ) {
                if ( !OID_LEADCHAR( at->at_oid[0] )) {
@@ -302,7 +331,7 @@ parse_at(
                                fprintf(stderr,
                                        "%s: line %d: OID %s not recognized\n",
                                        fname, lineno, at->at_oid);
-                               exit( EXIT_FAILURE );
+                               return 1;
                        }
                        if ( oid != at->at_oid ) {
                                ldap_memfree( at->at_oid );
@@ -319,7 +348,8 @@ parse_at(
        if ( code ) {
                fprintf( stderr, "%s: line %d: %s: \"%s\"\n",
                         fname, lineno, scherr2str(code), err);
-               exit( EXIT_FAILURE );
+               return 1;
        }
        ldap_memfree(at);
+       return 0;
 }