Diff for /servers/slapd/schema_init.c between versions 1.386.2.21 and 1.386.2.22

version 1.386.2.21, 2008/05/20 00:00:56 version 1.386.2.22, 2008/07/10 00:02:48
Line 1 Line 1
 /* schema_init.c - init builtin schema */  /* schema_init.c - init builtin schema */
 /* $OpenLDAP: pkg/ldap/servers/slapd/schema_init.c,v 1.386.2.20 2008/04/14 20:01:31 quanah Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/schema_init.c,v 1.386.2.21 2008/05/20 00:00:56 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *   *
  * Copyright 1998-2008 The OpenLDAP Foundation.   * Copyright 1998-2008 The OpenLDAP Foundation.
Line 2755  serialNumberAndIssuerCheck( Line 2755  serialNumberAndIssuerCheck(
   
         } else {          } else {
                 /* Parse GSER format */                   /* Parse GSER format */ 
                 int havesn=0,haveissuer=0;                  int havesn = 0, haveissuer = 0, numdquotes = 0;
                 struct berval x = *in;                  struct berval x = *in;
                 struct berval ni;                  struct berval ni;
                 x.bv_val++;                  x.bv_val++;
Line 2821  serialNumberAndIssuerCheck( Line 2821  serialNumberAndIssuerCheck(
                         STRLENOF("serialNumber")) == 0 )                          STRLENOF("serialNumber")) == 0 )
                 {                  {
                         /* parse serialNumber */                          /* parse serialNumber */
                         int neg=0;                          int neg = 0;
                           char first = '\0';
                           int extra = 0;
   
                         x.bv_val += STRLENOF("serialNumber");                          x.bv_val += STRLENOF("serialNumber");
                         x.bv_len -= STRLENOF("serialNumber");                          x.bv_len -= STRLENOF("serialNumber");
   
Line 2842  serialNumberAndIssuerCheck( Line 2845  serialNumberAndIssuerCheck(
                         }                          }
   
                         if ( sn->bv_val[0] == '0' && ( sn->bv_val[1] == 'x' ||                          if ( sn->bv_val[0] == '0' && ( sn->bv_val[1] == 'x' ||
                                 sn->bv_val[1] == 'X' )) {                                  sn->bv_val[1] == 'X' ))
                           {
                                 is_hex = 1;                                  is_hex = 1;
                                   first = sn->bv_val[2];
                                   extra = 2;
   
                                   sn->bv_len += STRLENOF("0x");
                                 for( ; sn->bv_len < x.bv_len; sn->bv_len++ ) {                                  for( ; sn->bv_len < x.bv_len; sn->bv_len++ ) {
                                         if ( !ASCII_HEX( sn->bv_val[sn->bv_len] )) break;                                          if ( !ASCII_HEX( sn->bv_val[sn->bv_len] )) break;
                                 }                                  }
   
                         } else if ( sn->bv_val[0] == '\'' ) {                          } else if ( sn->bv_val[0] == '\'' ) {
                                   first = sn->bv_val[1];
                                   extra = 3;
   
                                   sn->bv_len += STRLENOF("'");
   
                                 for( ; sn->bv_len < x.bv_len; sn->bv_len++ ) {                                  for( ; sn->bv_len < x.bv_len; sn->bv_len++ ) {
                                         if ( !ASCII_HEX( sn->bv_val[sn->bv_len] )) break;                                          if ( !ASCII_HEX( sn->bv_val[sn->bv_len] )) break;
                                 }                                  }
                                 if ( sn->bv_val[sn->bv_len] == '\'' &&                                  if ( sn->bv_val[sn->bv_len] == '\'' &&
                                         sn->bv_val[sn->bv_len+1] == 'H' )                                          sn->bv_val[sn->bv_len + 1] == 'H' )
                                   {
                                           sn->bv_len += STRLENOF("'H");
                                         is_hex = 1;                                          is_hex = 1;
                                 else  
                                   } else {
                                         return LDAP_INVALID_SYNTAX;                                          return LDAP_INVALID_SYNTAX;
                                 sn->bv_len += 2;                                  }
   
                         } else {                          } else {
                                   first = sn->bv_val[0];
                                 for( ; sn->bv_len < x.bv_len; sn->bv_len++ ) {                                  for( ; sn->bv_len < x.bv_len; sn->bv_len++ ) {
                                         if ( !ASCII_DIGIT( sn->bv_val[sn->bv_len] )) break;                                          if ( !ASCII_DIGIT( sn->bv_val[sn->bv_len] )) break;
                                 }                                  }
                         }                          }
   
                         if (!( sn->bv_len > neg )) return LDAP_INVALID_SYNTAX;                          if (!( sn->bv_len > neg )) return LDAP_INVALID_SYNTAX;
                         if (( sn->bv_len > 1+neg ) && ( sn->bv_val[neg] == '0' )) {                          if (( sn->bv_len > extra+1+neg ) && ( first == '0' )) {
                                 return LDAP_INVALID_SYNTAX;                                  return LDAP_INVALID_SYNTAX;
                         }                          }
   
Line 2921  serialNumberAndIssuerCheck( Line 2940  serialNumberAndIssuerCheck(
                                 }                                  }
                                 if ( is->bv_val[is->bv_len+1] == '"' ) {                                  if ( is->bv_val[is->bv_len+1] == '"' ) {
                                         /* double dquote */                                          /* double dquote */
                                           numdquotes++;
                                         is->bv_len+=2;                                          is->bv_len+=2;
                                         continue;                                          continue;
                                 }                                  }
Line 2993  serialNumberAndIssuerCheck( Line 3013  serialNumberAndIssuerCheck(
                 /* should have no characters left... */                  /* should have no characters left... */
                 if( x.bv_len ) return LDAP_INVALID_SYNTAX;                  if( x.bv_len ) return LDAP_INVALID_SYNTAX;
   
                 ber_dupbv_x( &ni, is, ctx );                  if ( numdquotes == 0 ) {
                 *is = ni;                          ber_dupbv_x( &ni, is, ctx );
                   } else {
                           ber_int_t src, dst;
   
                 /* need to handle double dquotes here */                          ni.bv_len = is->bv_len - numdquotes;
                           ni.bv_val = ber_memalloc_x( ni.bv_len + 1, ctx );
                           for ( src = 0, dst = 0; src < is->bv_len; src++, dst++ ) {
                                   if ( is->bv_val[src] == '"' ) {
                                           src++;
                                   }
                                   ni.bv_val[dst] = is->bv_val[src];
                           }
                           ni.bv_val[dst] = '\0';
                   }
                           
                   *is = ni;
         }          }
   
         return 0;          return 0;
 }  }
                   

Removed from v.1.386.2.21  
changed lines
  Added in v.1.386.2.22


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