/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 1999-2004 The OpenLDAP Foundation.
+ * Copyright 1999-2005 The OpenLDAP Foundation.
* Portions Copyright 1999-2003 Howard Chu.
* Portions Copyright 2000-2003 Pierangelo Masarati.
* All rights reserved.
"is not defined in schema\n",
fname, lineno, dst );
+ mapping[0].m_dst_oc = oc_bvfind_undef( &mapping[0].m_dst );
+ if ( mapping[0].m_dst_oc == NULL ) {
+ fprintf( stderr, "%s: line %d: unable to mimic destination objectClass '%s'\n",
+ fname, lineno, dst );
+ return 1;
+ }
+
+#if 0
mapping[0].m_dst_oc = ch_malloc( sizeof( ObjectClass ) );
memset( mapping[0].m_dst_oc, 0, sizeof( ObjectClass ) );
mapping[0].m_dst_oc->soc_cname = mapping[0].m_dst;
mapping[0].m_flags |= RWMMAP_F_FREE_DST;
+#endif
}
mapping[1].m_src_oc = mapping[0].m_dst_oc;
* and add it here.
*/
- mapping[0].m_src_ad = ch_malloc( sizeof( AttributeDescription ) );
- memset( mapping[0].m_src_ad, 0, sizeof( AttributeDescription ) );
- mapping[0].m_src_ad->ad_cname = mapping[0].m_src;
- mapping[1].m_flags |= RWMMAP_F_FREE_SRC;
+ rc = slap_bv2undef_ad( &mapping[0].m_src,
+ &mapping[0].m_src_ad, &text );
+ if ( rc != LDAP_SUCCESS ) {
+ fprintf( stderr,
+ "%s: line %d: source attributeType '%s': %d (%s)\n",
+ fname, lineno, src, rc, text ? text : "null" );
+ return 1;
+ }
+
}
mapping[1].m_dst_ad = mapping[0].m_src_ad;
}
"is not defined in schema\n",
fname, lineno, dst );
- mapping[0].m_dst_ad = ch_malloc( sizeof( AttributeDescription ) );
- memset( mapping[0].m_dst_ad, 0, sizeof( AttributeDescription ) );
- mapping[0].m_dst_ad->ad_cname = mapping[0].m_dst;
- mapping[1].m_flags |= RWMMAP_F_FREE_SRC;
+ rc = slap_bv2undef_ad( &mapping[0].m_dst,
+ &mapping[0].m_dst_ad, &text );
+ if ( rc != LDAP_SUCCESS ) {
+ fprintf( stderr,
+ "%s: line %d: destination attributeType '%s': %d (%s)\n",
+ fname, lineno, src, rc, text ? text : "null" );
+ return 1;
+ }
}
mapping[1].m_src_ad = mapping[0].m_dst_ad;
}
- if ( (src[0] != '\0' && avl_find( map->map, (caddr_t)mapping, rwm_mapping_cmp ) != NULL)
+ if ( ( src[0] != '\0' && avl_find( map->map, (caddr_t)mapping, rwm_mapping_cmp ) != NULL)
|| avl_find( map->remap, (caddr_t)&mapping[1], rwm_mapping_cmp ) != NULL)
{
fprintf( stderr,
p = r + 1, i++ )
;
- res = ch_calloc( sizeof( char ), strlen( s ) + 4 + 4*i + 1 );
+ res = ch_calloc( sizeof( char ), strlen( s )
+ + STRLENOF( "((.+),)?" )
+ + STRLENOF( "[ ]?" ) * i
+ + STRLENOF( "$" ) + 1 );
- ptr = lutil_strcopy( res, "(.*)" );
+ ptr = lutil_strcopy( res, "((.+),)?" );
for ( i = 0, p = s;
( r = strchr( p, ',' ) ) != NULL;
p = r + 1 , i++ ) {
r++;
}
}
- lutil_strcopy( ptr, p );
+ ptr = lutil_strcopy( ptr, p );
+ ptr[0] = '$';
+ ptr[1] = '\0';
return res;
}
len = strlen( s );
- res = ch_calloc( sizeof( char ), len + sizeof( "%1" ) );
+ res = ch_calloc( sizeof( char ), len + STRLENOF( "%1" ) + 1 );
if ( res == NULL ) {
return NULL;
}
strcpy( res, "%1" );
- strcpy( res + sizeof( "%1" ) - 1, s );
+ strcpy( res + STRLENOF( "%1" ), s );
return res;
}
ch_free( rargv[ 2 ] );
rargv[ 0 ] = "rewriteContext";
- rargv[ 1 ] = "searchResult";
+ rargv[ 1 ] = "searchEntryDN";
rargv[ 2 ] = NULL;
rewrite_parse( info, "<suffix massage>", ++line, 2, rargv );
rargv[ 0 ] = "rewriteContext";
rargv[ 1 ] = "matchedDN";
rargv[ 2 ] = "alias";
- rargv[ 3 ] = "searchResult";
+ rargv[ 3 ] = "searchEntryDN";
+ rargv[ 4 ] = NULL;
+ rewrite_parse( info, "<suffix massage>", ++line, 4, rargv );
+
+#ifdef RWM_REFERRAL_REWRITE
+ /* FIXME: we don't want this on by default, do we? */
+ rargv[ 0 ] = "rewriteContext";
+ rargv[ 1 ] = "referralDN";
+ rargv[ 2 ] = "alias";
+ rargv[ 3 ] = "searchEntryDN";
rargv[ 4 ] = NULL;
rewrite_parse( info, "<suffix massage>", ++line, 4, rargv );
+#else /* ! RWM_REFERRAL_REWRITE */
+ rargv[ 0 ] = "rewriteContext";
+ rargv[ 1 ] = "referralAttrDN";
+ rargv[ 2 ] = NULL;
+ rewrite_parse( info, "<suffix massage>", ++line, 2, rargv );
+
+ rargv[ 0 ] = "rewriteContext";
+ rargv[ 1 ] = "referralDN";
+ rargv[ 2 ] = NULL;
+ rewrite_parse( info, "<suffix massage>", ++line, 2, rargv );
+#endif /* ! RWM_REFERRAL_REWRITE */
rargv[ 0 ] = "rewriteContext";
rargv[ 1 ] = "searchAttrDN";
rargv[ 2 ] = "alias";
- rargv[ 3 ] = "searchResult";
+ rargv[ 3 ] = "searchEntryDN";
rargv[ 4 ] = NULL;
rewrite_parse( info, "<suffix massage>", ++line, 4, rargv );