Back to index

openldap  2.4.31
Functions | Variables
schemaparse.c File Reference
#include "portable.h"
#include <stdio.h>
#include <ac/ctype.h>
#include <ac/string.h>
#include <ac/socket.h>
#include "slap.h"
#include "ldap_schema.h"
#include "config.h"

Go to the source code of this file.

Functions

static void oc_usage (void)
static void at_usage (void)
char * scherr2str (int code)
int slap_valid_descr (const char *descr)
int dscompare (const char *s1, const char *s2, char delim)
static void cr_usage (void)
int parse_cr (struct config_args_s *c, ContentRule **scr)
int parse_oc (struct config_args_s *c, ObjectClass **soc, ObjectClass *prev)
int parse_at (struct config_args_s *c, AttributeType **sat, AttributeType *prev)
static void syn_usage (void)
int parse_syn (struct config_args_s *c, Syntax **ssyn, Syntax *prev)

Variables

static char *const err2text []

Function Documentation

static void at_usage ( void  ) [static]

Definition at line 250 of file schemaparse.c.

{
       fprintf( stderr, "%s%s%s",
              "AttributeTypeDescription = \"(\" whsp\n"
              "  numericoid whsp      ; AttributeType identifier\n"
              "  [ \"NAME\" qdescrs ]             ; name used in AttributeType\n"
              "  [ \"DESC\" qdstring ]            ; description\n"
              "  [ \"OBSOLETE\" whsp ]\n"
              "  [ \"SUP\" woid ]                 ; derived from this other\n"
              "                                   ; AttributeType\n",
              "  [ \"EQUALITY\" woid ]            ; Matching Rule name\n"
              "  [ \"ORDERING\" woid ]            ; Matching Rule name\n"
              "  [ \"SUBSTR\" woid ]              ; Matching Rule name\n"
              "  [ \"SYNTAX\" whsp noidlen whsp ] ; see section 4.3\n"
              "  [ \"SINGLE-VALUE\" whsp ]        ; default multi-valued\n"
              "  [ \"COLLECTIVE\" whsp ]          ; default not collective\n",
              "  [ \"NO-USER-MODIFICATION\" whsp ]; default user modifiable\n"
              "  [ \"USAGE\" whsp AttributeUsage ]; default userApplications\n"
              "                                   ; userApplications\n"
              "                                   ; directoryOperation\n"
              "                                   ; distributedOperation\n"
              "                                   ; dSAOperation\n"
              "  whsp \")\"\n");
}

Here is the caller graph for this function:

static void cr_usage ( void  ) [static]

Definition at line 114 of file schemaparse.c.

{
       fprintf( stderr,
              "DITContentRuleDescription = \"(\" whsp\n"
              "  numericoid whsp       ; StructuralObjectClass identifier\n"
              "  [ \"NAME\" qdescrs ]\n"
              "  [ \"DESC\" qdstring ]\n"
              "  [ \"OBSOLETE\" whsp ]\n"
              "  [ \"AUX\" oids ]      ; Auxiliary ObjectClasses\n"
              "  [ \"MUST\" oids ]     ; AttributeTypes\n"
              "  [ \"MAY\" oids ]      ; AttributeTypes\n"
              "  [ \"NOT\" oids ]      ; AttributeTypes\n"
              "  whsp \")\"\n" );
}

Here is the caller graph for this function:

int dscompare ( const char *  s1,
const char *  s2,
char  delim 
)

Definition at line 101 of file schemaparse.c.

{
       const char *orig = s1;
       while (*s1++ == *s2++)
              if (!s1[-1]) break;
       --s1;
       --s2;
       if (!*s1 && (!*s2 || *s2 == delim))
              return s1 - orig;
       return 0;
}

Here is the caller graph for this function:

static void oc_usage ( void  ) [static]

Definition at line 233 of file schemaparse.c.

{
       fprintf( stderr,
              "ObjectClassDescription = \"(\" whsp\n"
              "  numericoid whsp                 ; ObjectClass identifier\n"
              "  [ \"NAME\" qdescrs ]\n"
              "  [ \"DESC\" qdstring ]\n"
              "  [ \"OBSOLETE\" whsp ]\n"
              "  [ \"SUP\" oids ]                ; Superior ObjectClasses\n"
              "  [ ( \"ABSTRACT\" / \"STRUCTURAL\" / \"AUXILIARY\" ) whsp ]\n"
              "                                  ; default structural\n"
              "  [ \"MUST\" oids ]               ; AttributeTypes\n"
              "  [ \"MAY\" oids ]                ; AttributeTypes\n"
              "  whsp \")\"\n" );
}

Here is the caller graph for this function:

int parse_at ( struct config_args_s c,
AttributeType **  sat,
AttributeType prev 
)

Definition at line 276 of file schemaparse.c.

{
       LDAPAttributeType *at;
       int           code;
       const char    *err;
       char *line = strchr( c->line, '(' );

       at = ldap_str2attributetype( line, &code, &err, LDAP_SCHEMA_ALLOW_ALL );
       if ( !at ) {
              snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: %s before %s",
                     c->argv[0], ldap_scherr2str(code), err );
              Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE,
                     "%s %s\n", c->log, c->cr_msg, 0 );
              at_usage();
              return 1;
       }

       if ( at->at_oid == NULL ) {
              snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: OID is missing",
                     c->argv[0] );
              Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE,
                     "%s %s\n", c->log, c->cr_msg, 0 );
              at_usage();
              code = 1;
              goto done;
       }

       /* operational attributes should be defined internally */
       if ( at->at_usage ) {
              snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: \"%s\" is operational",
                     c->argv[0], at->at_oid );
              Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE,
                     "%s %s\n", c->log, c->cr_msg, 0 );
              code = 1;
              goto done;
       }

       code = at_add( at, 1, sat, prev, &err);
       if ( code ) {
              snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: %s: \"%s\"",
                     c->argv[0], scherr2str(code), err);
              Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE,
                     "%s %s\n", c->log, c->cr_msg, 0 );
              code = 1;
              goto done;
       }

done:;
       if ( code ) {
              ldap_attributetype_free( at );

       } else {
              ldap_memfree( at );
       }

       return code;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int parse_cr ( struct config_args_s c,
ContentRule **  scr 
)

Definition at line 130 of file schemaparse.c.

{
       LDAPContentRule *cr;
       int           code;
       const char    *err;
       char *line = strchr( c->line, '(' );

       cr = ldap_str2contentrule( line, &code, &err, LDAP_SCHEMA_ALLOW_ALL );
       if ( !cr ) {
              snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: %s before %s",
                     c->argv[0], ldap_scherr2str( code ), err );
              Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE,
                     "%s %s\n", c->log, c->cr_msg, 0 );
              cr_usage();
              return 1;
       }

       if ( cr->cr_oid == NULL ) {
              snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: OID is missing",
                     c->argv[0] );
              Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE,
                     "%s %s\n", c->log, c->cr_msg, 0 );
              cr_usage();
              code = 1;
              goto done;
       }

       code = cr_add( cr, 1, scr, &err );
       if ( code ) {
              snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: %s: \"%s\"",
                     c->argv[0], scherr2str(code), err);
              Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE,
                     "%s %s\n", c->log, c->cr_msg, 0 );
              code = 1;
              goto done;
       }

done:;
       if ( code ) {
              ldap_contentrule_free( cr );

       } else {
              ldap_memfree( cr );
       }

       return code;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int parse_oc ( struct config_args_s c,
ObjectClass **  soc,
ObjectClass prev 
)

Definition at line 181 of file schemaparse.c.

{
       LDAPObjectClass *oc;
       int           code;
       const char    *err;
       char *line = strchr( c->line, '(' );

       oc = ldap_str2objectclass(line, &code, &err, LDAP_SCHEMA_ALLOW_ALL );
       if ( !oc ) {
              snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: %s before %s",
                     c->argv[0], ldap_scherr2str( code ), err );
              Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE,
                     "%s %s\n", c->log, c->cr_msg, 0 );
              oc_usage();
              return 1;
       }

       if ( oc->oc_oid == NULL ) {
              snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: OID is missing",
                     c->argv[0] );
              Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE,
                     "%s %s\n", c->log, c->cr_msg, 0 );
              oc_usage();
              code = 1;
              goto done;
       }

       code = oc_add( oc, 1, soc, prev, &err );
       if ( code ) {
              snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: %s: \"%s\"",
                     c->argv[0], scherr2str(code), err);
              Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE,
                     "%s %s\n", c->log, c->cr_msg, 0 );
              code = 1;
              goto done;
       }

done:;
       if ( code ) {
              ldap_objectclass_free( oc );

       } else {
              ldap_memfree( oc );
       }

       return code;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int parse_syn ( struct config_args_s c,
Syntax **  ssyn,
Syntax prev 
)

Definition at line 349 of file schemaparse.c.

{
       LDAPSyntax           *syn;
       slap_syntax_defs_rec def = { 0 };
       int                  code;
       const char           *err;
       char                 *line = strchr( c->line, '(' );

       syn = ldap_str2syntax( line, &code, &err, LDAP_SCHEMA_ALLOW_ALL );
       if ( !syn ) {
              snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: %s before %s",
                     c->argv[0], ldap_scherr2str(code), err );
              Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE,
                     "%s %s\n", c->log, c->cr_msg, 0 );
              syn_usage();
              return 1;
       }

       if ( syn->syn_oid == NULL ) {
              snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: OID is missing",
                     c->argv[0] );
              Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE,
                     "%s %s\n", c->log, c->cr_msg, 0 );
              syn_usage();
              code = 1;
              goto done;
       }

       code = syn_add( syn, 1, &def, ssyn, prev, &err );
       if ( code ) {
              snprintf( c->cr_msg, sizeof( c->cr_msg ), "%s: %s: \"%s\"",
                     c->argv[0], scherr2str(code), err);
              Debug( LDAP_DEBUG_CONFIG|LDAP_DEBUG_NONE,
                     "%s %s\n", c->log, c->cr_msg, 0 );
              code = 1;
              goto done;
       }

done:;
       if ( code ) {
              ldap_syntax_free( syn );

       } else {
              ldap_memfree( syn );
       }

       return code;
}

Here is the call graph for this function:

Here is the caller graph for this function:

char* scherr2str ( int  code)

Definition at line 67 of file schemaparse.c.

{
       if ( code < 0 || SLAP_SCHERR_LAST <= code ) {
              return "Unknown error";
       } else {
              return err2text[code];
       }
}

Here is the caller graph for this function:

int slap_valid_descr ( const char *  descr)

Definition at line 77 of file schemaparse.c.

{
       int i=0;

       if( !DESC_LEADCHAR( descr[i] ) ) {
              return 0;
       }

       while( descr[++i] ) {
              if( !DESC_CHAR( descr[i] ) ) {
                     return 0;
              }
       }

       return 1;
}

Here is the caller graph for this function:

static void syn_usage ( void  ) [static]

Definition at line 338 of file schemaparse.c.

{
       fprintf( stderr, "%s",
              "SyntaxDescription = \"(\" whsp\n"
              "  numericoid whsp                  ; object identifier\n"
              "  [ whsp \"DESC\" whsp qdstring ]  ; description\n"
              "  extensions whsp \")\"            ; extensions\n"
              "  whsp \")\"\n");
}

Here is the caller graph for this function:


Variable Documentation

char* const err2text[] [static]

Definition at line 32 of file schemaparse.c.