]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/overlays/rwmconf.c
ITS#6953 do not use the cache db when refreshing
[openldap] / servers / slapd / overlays / rwmconf.c
index ce7776b5154d5fbecff6094efa4f9cb9995ad2a9..532b17fcc607a0221680c161880cf2e555e66069 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1999-2007 The OpenLDAP Foundation.
+ * Copyright 1999-2011 The OpenLDAP Foundation.
  * Portions Copyright 1999-2003 Howard Chu.
  * Portions Copyright 2000-2003 Pierangelo Masarati.
  * All rights reserved.
@@ -47,11 +47,12 @@ rwm_map_config(
        struct ldapmapping      *mapping;
        char                    *src, *dst;
        int                     is_oc = 0;
+       int                     rc = 0;
 
        if ( argc < 3 || argc > 4 ) {
-               fprintf( stderr,
+               Debug( LDAP_DEBUG_ANY,
        "%s: line %d: syntax is \"map {objectclass | attribute} [<local> | *] {<foreign> | *}\"\n",
-                       fname, lineno );
+                       fname, lineno, 0 );
                return 1;
        }
 
@@ -63,17 +64,24 @@ rwm_map_config(
                map = at_map;
 
        } else {
-               fprintf( stderr, "%s: line %d: syntax is "
+               Debug( LDAP_DEBUG_ANY, "%s: line %d: syntax is "
                        "\"map {objectclass | attribute} [<local> | *] "
                        "{<foreign> | *}\"\n",
-                       fname, lineno );
+                       fname, lineno, 0 );
                return 1;
        }
 
+       if ( !is_oc && map->map == NULL ) {
+               /* only init if required */
+               if ( rwm_map_init( map, &mapping ) != LDAP_SUCCESS ) {
+                       return 1;
+               }
+       }
+
        if ( strcmp( argv[2], "*" ) == 0 ) {
                if ( argc < 4 || strcmp( argv[3], "*" ) == 0 ) {
                        map->drop_missing = ( argc < 4 );
-                       return 0;
+                       goto success_return;
                }
                src = dst = argv[3];
 
@@ -90,18 +98,18 @@ rwm_map_config(
                        && ( strcasecmp( src, "objectclass" ) == 0
                        || strcasecmp( dst, "objectclass" ) == 0 ) )
        {
-               fprintf( stderr,
+               Debug( LDAP_DEBUG_ANY,
                        "%s: line %d: objectclass attribute cannot be mapped\n",
-                       fname, lineno );
+                       fname, lineno, 0 );
                return 1;
        }
 
        mapping = (struct ldapmapping *)ch_calloc( 2,
                sizeof(struct ldapmapping) );
        if ( mapping == NULL ) {
-               fprintf( stderr,
+               Debug( LDAP_DEBUG_ANY,
                        "%s: line %d: out of memory\n",
-                       fname, lineno );
+                       fname, lineno, 0 );
                return 1;
        }
        ber_str2bv( src, 0, 1, &mapping[0].m_src );
@@ -119,7 +127,7 @@ rwm_map_config(
                if ( src[0] != '\0' ) {
                        mapping[0].m_src_oc = oc_bvfind( &mapping[0].m_src );
                        if ( mapping[0].m_src_oc == NULL ) {
-                               fprintf( stderr,
+                               Debug( LDAP_DEBUG_ANY,
        "%s: line %d: warning, source objectClass '%s' "
        "should be defined in schema\n",
                                        fname, lineno, src );
@@ -137,24 +145,17 @@ rwm_map_config(
 
                mapping[0].m_dst_oc = oc_bvfind( &mapping[0].m_dst );
                if ( mapping[0].m_dst_oc == NULL ) {
-                       fprintf( stderr,
+                       Debug( LDAP_DEBUG_ANY,
        "%s: line %d: warning, destination objectClass '%s' "
        "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",
+                               Debug( LDAP_DEBUG_ANY, "%s: line %d: unable to mimic destination objectClass '%s'\n",
                                        fname, lineno, dst );
                                goto error_return;
                        }
-
-#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;
 
@@ -169,7 +170,7 @@ rwm_map_config(
                        rc = slap_bv2ad( &mapping[0].m_src,
                                        &mapping[0].m_src_ad, &text );
                        if ( rc != LDAP_SUCCESS ) {
-                               fprintf( stderr,
+                               Debug( LDAP_DEBUG_ANY,
        "%s: line %d: warning, source attributeType '%s' "
        "should be defined in schema\n",
                                        fname, lineno, src );
@@ -183,9 +184,12 @@ rwm_map_config(
                                                &mapping[0].m_src_ad, &text,
                                                SLAP_AD_PROXIED );
                                if ( rc != LDAP_SUCCESS ) {
-                                       fprintf( stderr,
-       "%s: line %d: source attributeType '%s': %d (%s)\n",
-                                               fname, lineno, src, rc, text ? text : "null" );
+                                       char prefix[1024];
+                                       snprintf( prefix, sizeof(prefix),
+       "%s: line %d: source attributeType '%s': %d",
+                                               fname, lineno, src, rc );
+                                       Debug( LDAP_DEBUG_ANY, "%s (%s)\n",
+                                               prefix, text ? text : "null", 0 );
                                        goto error_return;
                                }
 
@@ -195,7 +199,7 @@ rwm_map_config(
 
                rc = slap_bv2ad( &mapping[0].m_dst, &mapping[0].m_dst_ad, &text );
                if ( rc != LDAP_SUCCESS ) {
-                       fprintf( stderr,
+                       Debug( LDAP_DEBUG_ANY,
        "%s: line %d: warning, destination attributeType '%s' "
        "is not defined in schema\n",
                                fname, lineno, dst );
@@ -204,9 +208,12 @@ rwm_map_config(
                                        &mapping[0].m_dst_ad, &text,
                                        SLAP_AD_PROXIED );
                        if ( rc != LDAP_SUCCESS ) {
-                               fprintf( stderr,
-       "%s: line %d: destination attributeType '%s': %d (%s)\n",
-                                       fname, lineno, dst, rc, text ? text : "null" );
+                               char prefix[1024];
+                               snprintf( prefix, sizeof(prefix), 
+       "%s: line %d: destination attributeType '%s': %d",
+                                       fname, lineno, dst, rc );
+                               Debug( LDAP_DEBUG_ANY, "%s (%s)\n",
+                                       prefix, text ? text : "null", 0 );
                                goto error_return;
                        }
                }
@@ -216,9 +223,9 @@ rwm_map_config(
        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,
+               Debug( LDAP_DEBUG_ANY,
                        "%s: line %d: duplicate mapping found.\n",
-                       fname, lineno );
+                       fname, lineno, 0 );
                /* FIXME: free stuff */
                goto error_return;
        }
@@ -230,7 +237,8 @@ rwm_map_config(
        avl_insert( &map->remap, (caddr_t)&mapping[1],
                                rwm_mapping_cmp, rwm_mapping_dup );
 
-       return 0;
+success_return:;
+       return rc;
 
 error_return:;
        if ( mapping ) {
@@ -240,7 +248,6 @@ error_return:;
        return 1;
 }
 
-#ifdef ENABLE_REWRITE
 static char *
 rwm_suffix_massage_regexize( const char *s )
 {
@@ -406,6 +413,5 @@ rwm_suffix_massage_config(
 
        return 0;
 }
-#endif /* ENABLE_REWRITE */
 
 #endif /* SLAPD_OVER_RWM */