Diff for /servers/slapd/schemaparse.c between versions 1.12.8.5 and 1.12.8.10

version 1.12.8.5, 2000/06/13 17:57:30 version 1.12.8.10, 2001/05/17 23:18:02
Line 1 Line 1
 /* schemaparse.c - routines to parse config file objectclass definitions */  /* schemaparse.c - routines to parse config file objectclass definitions */
 /* $OpenLDAP: pkg/ldap/servers/slapd/schemaparse.c,v 1.34 2000/06/07 03:17:30 kurt Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/schemaparse.c,v 1.12.8.9 2001/05/02 18:25:31 kurt Exp $ */
 /*  /*
  * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.   * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file   * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
Line 18 Line 18
   
 int     global_schemacheck = 1; /* schemacheck on is default */  int     global_schemacheck = 1; /* schemacheck on is default */
   
 static void             oc_usage(void)     LDAP_GCCATTR((noreturn));  static void             oc_usage(void); 
 static void             at_usage(void)     LDAP_GCCATTR((noreturn));  static void             at_usage(void);
   
 static char *const err2text[] = {  static char *const err2text[] = {
         "Success",          "Success",
         "Out of memory",          "Out of memory",
         "ObjectClass not found",          "ObjectClass not found",
           "ObjectClass inappropriate SUPerior",
         "AttributeType not found",          "AttributeType not found",
           "AttributeType inappropriate USAGE",
         "Duplicate objectClass",          "Duplicate objectClass",
         "Duplicate attributeType",          "Duplicate attributeType",
         "Duplicate ldapSyntax",          "Duplicate ldapSyntax",
Line 34  static char *const err2text[] = { Line 36  static char *const err2text[] = {
         "SYNTAX or SUPerior required",          "SYNTAX or SUPerior required",
         "MatchingRule not found",          "MatchingRule not found",
         "Syntax not found",          "Syntax not found",
         "Syntax required"          "Syntax required",
           "Qualifier not supported"
 };  };
   
 char *  char *
Line 78  find_oidm(char *oid) Line 81  find_oidm(char *oid)
         OidMacro *om;          OidMacro *om;
   
         /* OID macros must start alpha */          /* OID macros must start alpha */
         if ( isdigit( *oid ) )  {          if ( OID_LEADCHAR( *oid ) )     {
                 return oid;                  return oid;
         }          }
   
Line 110  find_oidm(char *oid) Line 113  find_oidm(char *oid)
         return NULL;          return NULL;
 }  }
   
 void  int
 parse_oidm(  parse_oidm(
     const char  *fname,      const char  *fname,
     int         lineno,      int         lineno,
Line 125  parse_oidm( Line 128  parse_oidm(
                 fprintf( stderr, "%s: line %d: too many arguments\n",                  fprintf( stderr, "%s: line %d: too many arguments\n",
                         fname, lineno );                          fname, lineno );
 usage:  fprintf( stderr, "\tObjectIdentifier <name> <oid>\n");  usage:  fprintf( stderr, "\tObjectIdentifier <name> <oid>\n");
                 exit( EXIT_FAILURE );                  return 1;
         }          }
   
         oid = find_oidm( argv[1] );          oid = find_oidm( argv[1] );
Line 134  usage: fprintf( stderr, "\tObjectIdentif Line 137  usage: fprintf( stderr, "\tObjectIdentif
                         "%s: line %d: "                          "%s: line %d: "
                         "ObjectIdentifier \"%s\" previously defined \"%s\"",                          "ObjectIdentifier \"%s\" previously defined \"%s\"",
                         fname, lineno, argv[1], oid );                          fname, lineno, argv[1], oid );
                 exit( EXIT_FAILURE );                  return 1;
         }          }
   
         om = (OidMacro *) ch_malloc( sizeof(OidMacro) );          om = (OidMacro *) ch_malloc( sizeof(OidMacro) );
Line 156  usage: fprintf( stderr, "\tObjectIdentif Line 159  usage: fprintf( stderr, "\tObjectIdentif
         om->som_oid.bv_len = strlen( om->som_oid.bv_val );          om->som_oid.bv_len = strlen( om->som_oid.bv_val );
         om->som_next = om_list;          om->som_next = om_list;
         om_list = om;          om_list = om;
   
           return 0;
 }  }
   
 void  int
 parse_oc(  parse_oc(
     const char  *fname,      const char  *fname,
     int         lineno,      int         lineno,
Line 166  parse_oc( Line 171  parse_oc(
     char        **argv      char        **argv
 )  )
 {  {
         LDAP_OBJECT_CLASS *oc;          LDAPObjectClass *oc;
         int             code;          int             code;
         const char      *err;          const char      *err;
         char            *oid = NULL;          char            *oid = NULL;
Line 176  parse_oc( Line 181  parse_oc(
                 fprintf( stderr, "%s: line %d: %s before %s\n",                  fprintf( stderr, "%s: line %d: %s before %s\n",
                          fname, lineno, ldap_scherr2str(code), err );                           fname, lineno, ldap_scherr2str(code), err );
                 oc_usage();                  oc_usage();
                   return 1;
         }          }
   
         if ( oc->oc_oid ) {          if ( oc->oc_oid ) {
                 if ( !isdigit( oc->oc_oid[0] )) {                  if ( !OID_LEADCHAR( oc->oc_oid[0] )) {
                         /* Expand OID macros */                          /* Expand OID macros */
                         oid = find_oidm( oc->oc_oid );                          oid = find_oidm( oc->oc_oid );
                         if ( !oid ) {                          if ( !oid ) {
                                 fprintf(stderr,                                  fprintf(stderr,
                                         "%s: line %d: OID %s not recognized\n",                                          "%s: line %d: OID %s not recognized\n",
                                         fname, lineno, oc->oc_oid);                                          fname, lineno, oc->oc_oid);
                                 exit( EXIT_FAILURE );                                  return 1;
                         }                          }
                         if ( oid != oc->oc_oid ) {                          if ( oid != oc->oc_oid ) {
                                 ldap_memfree( oc->oc_oid );                                  ldap_memfree( oc->oc_oid );
Line 193  parse_oc( Line 200  parse_oc(
                         }                          }
                 }                  }
         }          }
   
         /* oc->oc_oid == NULL will be an error someday */          /* oc->oc_oid == NULL will be an error someday */
         code = oc_add(oc,&err);          code = oc_add(oc,&err);
         if ( code ) {          if ( code ) {
                 fprintf( stderr, "%s: line %d: %s: \"%s\"\n",                  fprintf( stderr, "%s: line %d: %s: \"%s\"\n",
                          fname, lineno, scherr2str(code), err);                           fname, lineno, scherr2str(code), err);
                 exit( EXIT_FAILURE );                  return 1;
         }          }
   
         ldap_memfree(oc);          ldap_memfree(oc);
           return 0;
 }  }
   
 static void  static void
Line 218  oc_usage( void ) Line 228  oc_usage( void )
                 "  [ \"MUST\" oids ]               ; AttributeTypes\n"                  "  [ \"MUST\" oids ]               ; AttributeTypes\n"
                 "  [ \"MAY\" oids ]                ; AttributeTypes\n"                  "  [ \"MAY\" oids ]                ; AttributeTypes\n"
                 "  whsp \")\"\n" );                  "  whsp \")\"\n" );
         exit( EXIT_FAILURE );  
 }  }
   
   
Line 246  at_usage( void ) Line 255  at_usage( void )
                 "                                   ; distributedOperation\n"                  "                                   ; distributedOperation\n"
                 "                                   ; dSAOperation\n"                  "                                   ; dSAOperation\n"
                 "  whsp \")\"\n");                  "  whsp \")\"\n");
         exit( EXIT_FAILURE );  
 }  }
   
 void  int
 parse_at(  parse_at(
     const char  *fname,      const char  *fname,
     int         lineno,      int         lineno,
Line 257  parse_at( Line 265  parse_at(
     char        **argv      char        **argv
 )  )
 {  {
         LDAP_ATTRIBUTE_TYPE *at;          LDAPAttributeType *at;
         int             code;          int             code;
         const char      *err;          const char      *err;
         char            *oid = NULL;          char            *oid = NULL;
Line 271  parse_at( Line 279  parse_at(
          */           */
         for (; argv[3]; argv++)          for (; argv[3]; argv++)
         {          {
                 if (!strcasecmp(argv[3], "syntax") &&                  /* Allow numeric OIDs to be wrapped in single quotes */
                     !isdigit(*argv[4]))                  if (!strcasecmp(argv[3], "syntax") && argv[4] != NULL &&
                       !OID_LEADCHAR(argv[4][argv[4][0] == '\'' ? 1 : 0]))
                 {                  {
                         int slen;                          int slen;
                         Syntax *syn;                          Syntax *syn;
Line 281  parse_at( Line 290  parse_at(
                         {                          {
                             fprintf(stderr, "%s: line %d: OID %s not found\n",                              fprintf(stderr, "%s: line %d: OID %s not found\n",
                                 fname, lineno, argv[4]);                                  fname, lineno, argv[4]);
                             exit( EXIT_FAILURE );                                  return 1;
                         }                          }
                         memset(strstr(line, argv[4]), '0', slen);                          memset(strstr(line, argv[4]), '0', slen);
                         soid = ch_strdup(syn->ssyn_syn.syn_oid );                          soid = ch_strdup(syn->ssyn_syn.syn_oid );
Line 293  parse_at( Line 302  parse_at(
                 fprintf( stderr, "%s: line %d: %s before %s\n",                  fprintf( stderr, "%s: line %d: %s before %s\n",
                          fname, lineno, ldap_scherr2str(code), err );                           fname, lineno, ldap_scherr2str(code), err );
                 at_usage();                  at_usage();
                   return 1;
         }          }
         if ( at->at_oid ) {          if ( at->at_oid ) {
                 if ( !isdigit( at->at_oid[0] )) {                  if ( !OID_LEADCHAR( at->at_oid[0] )) {
                         /* Expand OID macros */                          /* Expand OID macros */
                         oid = find_oidm( at->at_oid );                          oid = find_oidm( at->at_oid );
                         if ( !oid ) {                          if ( !oid ) {
                                 fprintf(stderr,                                  fprintf(stderr,
                                         "%s: line %d: OID %s not recognized\n",                                          "%s: line %d: OID %s not recognized\n",
                                         fname, lineno, at->at_oid);                                          fname, lineno, at->at_oid);
                                 exit( EXIT_FAILURE );                                  return 1;
                         }                          }
                         if ( oid != at->at_oid ) {                          if ( oid != at->at_oid ) {
                                 ldap_memfree( at->at_oid );                                  ldap_memfree( at->at_oid );
Line 311  parse_at( Line 321  parse_at(
                 }                  }
         }          }
         /* at->at_oid == NULL will be an error someday */          /* at->at_oid == NULL will be an error someday */
         if (soid)          if (soid) {
         {  
                 ldap_memfree(at->at_syntax_oid);                  ldap_memfree(at->at_syntax_oid);
                 at->at_syntax_oid = soid;                  at->at_syntax_oid = soid;
         }          }
Line 320  parse_at( Line 329  parse_at(
         if ( code ) {          if ( code ) {
                 fprintf( stderr, "%s: line %d: %s: \"%s\"\n",                  fprintf( stderr, "%s: line %d: %s: \"%s\"\n",
                          fname, lineno, scherr2str(code), err);                           fname, lineno, scherr2str(code), err);
                 exit( EXIT_FAILURE );                  return 1;
         }          }
         ldap_memfree(at);          ldap_memfree(at);
           return 0;
 }  }

Removed from v.1.12.8.5  
changed lines
  Added in v.1.12.8.10


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org