Diff for /servers/slapd/referral.c between versions 1.23 and 1.23.2.2

version 1.23, 2004/09/26 20:58:48 version 1.23.2.2, 2006/01/03 22:16:15
Line 1 Line 1
 /* referral.c - muck with referrals */  /* referral.c - muck with referrals */
 /* $OpenLDAP: pkg/ldap/servers/slapd/referral.c,v 1.22 2004/09/04 02:54:30 kurt Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/referral.c,v 1.23.2.1 2005/01/20 18:03:55 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 1998-2004 The OpenLDAP Foundation.   * Copyright 1998-2006 The OpenLDAP Foundation.
  * All rights reserved.   * All rights reserved.
  *   *
  * Redistribution and use in source and binary forms, with or without   * Redistribution and use in source and binary forms, with or without
Line 200  BerVarray referral_rewrite( Line 200  BerVarray referral_rewrite(
         struct berval *target,          struct berval *target,
         int scope )          int scope )
 {  {
         int i;          int             i;
         BerVarray refs;          BerVarray       refs;
         struct berval *iv, *jv;          struct berval   *iv, *jv;
   
         if( in == NULL ) return NULL;          if ( in == NULL ) {
                   return NULL;
           }
   
         for( i=0; in[i].bv_val != NULL ; i++ ) {          for ( i = 0; !BER_BVISNULL( &in[i] ); i++ ) {
                 /* just count them */                  /* just count them */
         }          }
   
         if( i < 1 ) return NULL;          if ( i < 1 ) {
                   return NULL;
           }
   
         refs = SLAP_MALLOC( (i+1) * sizeof( struct berval ) );          refs = SLAP_MALLOC( ( i + 1 ) * sizeof( struct berval ) );
         if( refs == NULL ) {          if ( refs == NULL ) {
                 Debug( LDAP_DEBUG_ANY,                  Debug( LDAP_DEBUG_ANY,
                         "referral_rewrite: SLAP_MALLOC failed\n", 0, 0, 0 );                          "referral_rewrite: SLAP_MALLOC failed\n", 0, 0, 0 );
                 return NULL;                  return NULL;
         }          }
   
         for( iv=in,jv=refs; iv->bv_val != NULL ; iv++ ) {          for ( iv = in, jv = refs; !BER_BVISNULL( iv ); iv++ ) {
                 LDAPURLDesc *url;                  LDAPURLDesc     *url;
                 int rc = ldap_url_parse_ext( iv->bv_val, &url );                  char            *dn;
                   int             rc;
                 if( rc == LDAP_URL_ERR_BADSCHEME ) {                  
                   rc = ldap_url_parse_ext( iv->bv_val, &url );
                   if ( rc == LDAP_URL_ERR_BADSCHEME ) {
                         ber_dupbv( jv++, iv );                          ber_dupbv( jv++, iv );
                         continue;                          continue;
   
                 } else if( rc != LDAP_URL_SUCCESS ) {                  } else if ( rc != LDAP_URL_SUCCESS ) {
                         continue;                          continue;
                 }                  }
   
                 {                  dn = url->lud_dn;
                         char *dn = url->lud_dn;                  url->lud_dn = referral_dn_muck( ( dn && *dn ) ? dn : NULL,
                         url->lud_dn = referral_dn_muck(  
                                 ( dn && *dn ) ? dn : NULL,  
                                 base, target );                                  base, target );
                   ldap_memfree( dn );
   
                         ldap_memfree( dn );                  if ( url->lud_scope == LDAP_SCOPE_DEFAULT ) {
                 }  
   
                 if( url->lud_scope == LDAP_SCOPE_DEFAULT ) {  
                         url->lud_scope = scope;                          url->lud_scope = scope;
                 }                  }
   
                 jv->bv_val = ldap_url_desc2str( url );                  jv->bv_val = ldap_url_desc2str( url );
                 jv->bv_len = strlen( jv->bv_val );                  if ( jv->bv_val != NULL ) {
                           jv->bv_len = strlen( jv->bv_val );
   
                 ldap_free_urldesc( url );                  } else {
                           ber_dupbv( jv, iv );
                   }
                 jv++;                  jv++;
   
                   ldap_free_urldesc( url );
         }          }
   
         if( jv == refs ) {          if ( jv == refs ) {
                 ch_free( refs );                  ch_free( refs );
                 refs = NULL;                  refs = NULL;
   
         } else {          } else {
                 jv->bv_val = NULL;                  BER_BVZERO( jv );
         }          }
   
         return refs;          return refs;

Removed from v.1.23  
changed lines
  Added in v.1.23.2.2


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