Diff for /servers/slapd/overlays/rwmconf.c between versions 1.16 and 1.16.2.8

version 1.16, 2004/12/01 20:47:13 version 1.16.2.8, 2007/01/02 21:44:08
Line 1 Line 1
 /* rwmconf.c - rewrite/map configuration file routines */  /* rwmconf.c - rewrite/map configuration file routines */
 /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/rwmconf.c,v 1.15 2004/11/13 11:15:40 ando Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/overlays/rwmconf.c,v 1.16.2.7 2006/01/03 22:16:25 kurt Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *   *
  * Copyright 1999-2004 The OpenLDAP Foundation.   * Copyright 1999-2007 The OpenLDAP Foundation.
  * Portions Copyright 1999-2003 Howard Chu.   * Portions Copyright 1999-2003 Howard Chu.
  * Portions Copyright 2000-2003 Pierangelo Masarati.   * Portions Copyright 2000-2003 Pierangelo Masarati.
  * All rights reserved.   * All rights reserved.
Line 146  rwm_map_config( Line 146  rwm_map_config(
                         if ( mapping[0].m_dst_oc == NULL ) {                          if ( mapping[0].m_dst_oc == NULL ) {
                                 fprintf( stderr, "%s: line %d: unable to mimic destination objectClass '%s'\n",                                  fprintf( stderr, "%s: line %d: unable to mimic destination objectClass '%s'\n",
                                         fname, lineno, dst );                                          fname, lineno, dst );
                                 return 1;                                  goto error_return;
                         }                          }
   
 #if 0  #if 0
Line 175  rwm_map_config( Line 175  rwm_map_config(
                                         fname, lineno, src );                                          fname, lineno, src );
   
                                 /*                                  /*
                                  * FIXME: this should become an err                                   * we create a fake "proxied" ad 
                                  *  
                                  * FIXME: or, we should create a fake ad  
                                  * and add it here.                                   * and add it here.
                                  */                                   */
   
                                 rc = slap_bv2undef_ad( &mapping[0].m_src,                                  rc = slap_bv2undef_ad( &mapping[0].m_src,
                                                 &mapping[0].m_src_ad, &text );                                                  &mapping[0].m_src_ad, &text,
                                                   SLAP_AD_PROXIED );
                                 if ( rc != LDAP_SUCCESS ) {                                  if ( rc != LDAP_SUCCESS ) {
                                         fprintf( stderr,                                          fprintf( stderr,
         "%s: line %d: source attributeType '%s': %d (%s)\n",          "%s: line %d: source attributeType '%s': %d (%s)\n",
                                                 fname, lineno, src, rc, text ? text : "null" );                                                  fname, lineno, src, rc, text ? text : "null" );
                                         return 1;                                          goto error_return;
                                 }                                  }
   
                         }                          }
Line 202  rwm_map_config( Line 201  rwm_map_config(
                                 fname, lineno, dst );                                  fname, lineno, dst );
   
                         rc = slap_bv2undef_ad( &mapping[0].m_dst,                          rc = slap_bv2undef_ad( &mapping[0].m_dst,
                                         &mapping[0].m_dst_ad, &text );                                          &mapping[0].m_dst_ad, &text,
                                           SLAP_AD_PROXIED );
                         if ( rc != LDAP_SUCCESS ) {                          if ( rc != LDAP_SUCCESS ) {
                                 fprintf( stderr,                                  fprintf( stderr,
         "%s: line %d: destination attributeType '%s': %d (%s)\n",          "%s: line %d: destination attributeType '%s': %d (%s)\n",
                                         fname, lineno, src, rc, text ? text : "null" );                                          fname, lineno, dst, rc, text ? text : "null" );
                                 return 1;                                  goto error_return;
                         }                          }
                 }                  }
                 mapping[1].m_src_ad = mapping[0].m_dst_ad;                  mapping[1].m_src_ad = mapping[0].m_dst_ad;
Line 217  rwm_map_config( Line 217  rwm_map_config(
                         || avl_find( map->remap, (caddr_t)&mapping[1], rwm_mapping_cmp ) != NULL)                          || avl_find( map->remap, (caddr_t)&mapping[1], rwm_mapping_cmp ) != NULL)
         {          {
                 fprintf( stderr,                  fprintf( stderr,
                         "%s: line %d: duplicate mapping found (ignored)\n",                          "%s: line %d: duplicate mapping found" SLAPD_CONF_UNKNOWN_IGNORED ".\n",
                         fname, lineno );                          fname, lineno );
                 /* FIXME: free stuff */                  /* FIXME: free stuff */
                 goto error_return;                  goto error_return;
Line 248  rwm_suffix_massage_regexize( const char Line 248  rwm_suffix_massage_regexize( const char
         const char *p, *r;          const char *p, *r;
         int i;          int i;
   
           if ( s[0] == '\0' ) {
                   return ch_strdup( "^(.+)$" );
           }
   
         for ( i = 0, p = s;           for ( i = 0, p = s; 
                         ( r = strchr( p, ',' ) ) != NULL;                           ( r = strchr( p, ',' ) ) != NULL; 
                         p = r + 1, i++ )                          p = r + 1, i++ )
Line 277  rwm_suffix_massage_regexize( const char Line 281  rwm_suffix_massage_regexize( const char
 }  }
   
 static char *  static char *
 rwm_suffix_massage_patternize( const char *s )  rwm_suffix_massage_patternize( const char *s, const char *p )
 {  {
         ber_len_t       len;          ber_len_t       len;
         char            *res;          char            *res, *ptr;
   
         len = strlen( s );          len = strlen( p );
   
           if ( s[ 0 ] == '\0' ) {
                   len++;
           }
   
         res = ch_calloc( sizeof( char ), len + STRLENOF( "%1" ) + 1 );          res = ch_calloc( sizeof( char ), len + STRLENOF( "%1" ) + 1 );
         if ( res == NULL ) {          if ( res == NULL ) {
                 return NULL;                  return NULL;
         }          }
   
         strcpy( res, "%1" );          ptr = lutil_strcopy( res, ( p[0] == '\0' ? "%2" : "%1" ) );
         strcpy( res + STRLENOF( "%1" ), s );          if ( s[ 0 ] == '\0' ) {
                   ptr[ 0 ] = ',';
                   ptr++;
           }
           lutil_strcopy( ptr, p );
   
         return res;          return res;
 }  }
Line 319  rwm_suffix_massage_config( Line 331  rwm_suffix_massage_config(
   
         rargv[ 0 ] = "rewriteRule";          rargv[ 0 ] = "rewriteRule";
         rargv[ 1 ] = rwm_suffix_massage_regexize( pvnc->bv_val );          rargv[ 1 ] = rwm_suffix_massage_regexize( pvnc->bv_val );
         rargv[ 2 ] = rwm_suffix_massage_patternize( prnc->bv_val );          rargv[ 2 ] = rwm_suffix_massage_patternize( pvnc->bv_val, prnc->bv_val );
         rargv[ 3 ] = ":";          rargv[ 3 ] = ":";
         rargv[ 4 ] = NULL;          rargv[ 4 ] = NULL;
         rewrite_parse( info, "<suffix massage>", ++line, 4, rargv );          rewrite_parse( info, "<suffix massage>", ++line, 4, rargv );
         ch_free( rargv[ 1 ] );          ch_free( rargv[ 1 ] );
         ch_free( rargv[ 2 ] );          ch_free( rargv[ 2 ] );
                   
           if ( BER_BVISEMPTY( pvnc ) ) {
                   rargv[ 0 ] = "rewriteRule";
                   rargv[ 1 ] = "^$";
                   rargv[ 2 ] = prnc->bv_val;
                   rargv[ 3 ] = ":";
                   rargv[ 4 ] = NULL;
                   rewrite_parse( info, "<suffix massage>", ++line, 4, rargv );
           }
   
         rargv[ 0 ] = "rewriteContext";          rargv[ 0 ] = "rewriteContext";
         rargv[ 1 ] = "searchEntryDN";          rargv[ 1 ] = "searchEntryDN";
         rargv[ 2 ] = NULL;          rargv[ 2 ] = NULL;
Line 333  rwm_suffix_massage_config( Line 354  rwm_suffix_massage_config(
                   
         rargv[ 0 ] = "rewriteRule";          rargv[ 0 ] = "rewriteRule";
         rargv[ 1 ] = rwm_suffix_massage_regexize( prnc->bv_val );          rargv[ 1 ] = rwm_suffix_massage_regexize( prnc->bv_val );
         rargv[ 2 ] = rwm_suffix_massage_patternize( pvnc->bv_val );          rargv[ 2 ] = rwm_suffix_massage_patternize( prnc->bv_val, pvnc->bv_val );
         rargv[ 3 ] = ":";          rargv[ 3 ] = ":";
         rargv[ 4 ] = NULL;          rargv[ 4 ] = NULL;
         rewrite_parse( info, "<suffix massage>", ++line, 4, rargv );          rewrite_parse( info, "<suffix massage>", ++line, 4, rargv );
         ch_free( rargv[ 1 ] );          ch_free( rargv[ 1 ] );
         ch_free( rargv[ 2 ] );          ch_free( rargv[ 2 ] );
   
           if ( BER_BVISEMPTY( prnc ) ) {
                   rargv[ 0 ] = "rewriteRule";
                   rargv[ 1 ] = "^$";
                   rargv[ 2 ] = pvnc->bv_val;
                   rargv[ 3 ] = ":";
                   rargv[ 4 ] = NULL;
                   rewrite_parse( info, "<suffix massage>", ++line, 4, rargv );
           }
   
         rargv[ 0 ] = "rewriteContext";          rargv[ 0 ] = "rewriteContext";
         rargv[ 1 ] = "matchedDN";          rargv[ 1 ] = "matchedDN";
         rargv[ 2 ] = "alias";          rargv[ 2 ] = "alias";

Removed from v.1.16  
changed lines
  Added in v.1.16.2.8


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