]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldap/config.c
fix controls run-time registered by global overlays (kludge non longer required?)
[openldap] / servers / slapd / back-ldap / config.c
index 810f23c268c05ad1c55fcff7add5d88b8de13c5a..470becaa3cef9d773b84355b1799bcf7192142d1 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2003-2004 The OpenLDAP Foundation.
+ * Copyright 2003-2005 The OpenLDAP Foundation.
  * Portions Copyright 1999-2003 Howard Chu.
  * Portions Copyright 2000-2003 Pierangelo Masarati.
  * All rights reserved.
@@ -74,6 +74,7 @@ ldap_back_db_config(
                if ( li->url != NULL ) {
                        ch_free( li->url );
                }
+
                l = strlen( argv[1] ) + STRLENOF( "ldap:///") + 1;
                li->url = ch_calloc( l, sizeof( char ) );
                if ( li->url == NULL ) {
@@ -86,7 +87,7 @@ ldap_back_db_config(
        /* URI of server to query (preferred over "server" directive) */
        } else if ( strcasecmp( argv[0], "uri" ) == 0 ) {
                LDAPURLDesc     *tmpludp;
-               int             urlrc;
+               int             urlrc, i;
 
                if ( argc != 2 ) {
                        fprintf( stderr, "%s: line %d: "
@@ -152,7 +153,10 @@ ldap_back_db_config(
                        return 1;
                }
 
-               for ( tmpludp = li->lud; tmpludp; tmpludp = tmpludp->lud_next ) {
+               for ( i = 0, tmpludp = li->lud;
+                               tmpludp;
+                               i++, tmpludp = tmpludp->lud_next )
+               {
                        if ( ( tmpludp->lud_dn != NULL
                                                && tmpludp->lud_dn[0] != '\0' )
                                        || tmpludp->lud_attrs != NULL
@@ -163,8 +167,8 @@ ldap_back_db_config(
                                                "warning, only protocol, "
                                                "host and port allowed "
                                                "in \"uri <uri>\" statement "
-                                               "for \"%s\"\n",
-                                               fname, lineno, argv[1] );
+                                               "for uri #%d of \"%s\"\n",
+                                               fname, lineno, i, argv[1] );
                        }
                }
 
@@ -209,34 +213,77 @@ ldap_back_db_config(
                li->url = ch_strdup( argv[ 1 ] );
 #endif
 
+       /* start tls */
+       } else if ( strcasecmp( argv[0], "start-tls" ) == 0 ) {
+               if ( argc != 1 ) {
+                       fprintf( stderr,
+       "%s: line %d: start-tls takes no arguments\n",
+                                       fname, lineno );
+                       return( 1 );
+               }
+               li->flags |= LDAP_BACK_F_TLS_CRITICAL;
+       
+       /* try start tls */
+       } else if ( strcasecmp( argv[0], "try-start-tls" ) == 0 ) {
+               if ( argc != 1 ) {
+                       fprintf( stderr,
+       "%s: line %d: try-start-tls takes no arguments\n",
+                                       fname, lineno );
+                       return( 1 );
+               }
+               li->flags &= ~LDAP_BACK_F_TLS_CRITICAL;
+               li->flags |= LDAP_BACK_F_USE_TLS;
+       
        /* name to use for ldap_back_group */
        } else if ( strcasecmp( argv[0], "acl-authcdn" ) == 0
-                       || strcasecmp( argv[0], "binddn" ) == 0 ) {
+                       || strcasecmp( argv[0], "binddn" ) == 0 )
+       {
                if ( argc != 2 ) {
                        fprintf( stderr,
        "%s: line %d: missing name in \"%s <name>\" line\n",
                                        fname, lineno, argv[0] );
                        return( 1 );
                }
+
+               if ( strcasecmp( argv[0], "binddn" ) == 0 ) {
+                       fprintf( stderr, "%s: line %d: "
+                               "\"binddn\" statement is deprecated; "
+                               "use \"acl-authcDN\" instead\n",
+                               fname, lineno );
+                       /* FIXME: some day we'll need to throw an error */
+               }
+
                ber_str2bv( argv[1], 0, 1, &li->acl_authcDN );
 
        /* password to use for ldap_back_group */
        } else if ( strcasecmp( argv[0], "acl-passwd" ) == 0
-                       || strcasecmp( argv[0], "bindpw" ) == 0 ) {
+                       || strcasecmp( argv[0], "bindpw" ) == 0 )
+       {
                if ( argc != 2 ) {
                        fprintf( stderr,
        "%s: line %d: missing password in \"%s <password>\" line\n",
                                        fname, lineno, argv[0] );
                        return( 1 );
                }
+
+               if ( strcasecmp( argv[0], "bindpw" ) == 0 ) {
+                       fprintf( stderr, "%s: line %d: "
+                               "\"bindpw\" statement is deprecated; "
+                               "use \"acl-passwd\" instead\n",
+                               fname, lineno );
+                       /* FIXME: some day we'll need to throw an error */
+               }
+
                ber_str2bv( argv[1], 0, 1, &li->acl_passwd );
 
-#ifdef LDAP_BACK_PROXY_AUTHZ
        /* identity assertion stuff... */
        } else if ( strncasecmp( argv[0], "idassert-", STRLENOF( "idassert-" ) ) == 0
-                       || strncasecmp( argv[0], "proxyauthz", STRLENOF( "proxyauthz" ) ) == 0 ) {
+                       || strncasecmp( argv[0], "proxyauthz", STRLENOF( "proxyauthz" ) ) == 0 )
+       {
+               /* NOTE: "proxyauthz{DN,pw}" was initially used; it's now
+                * deprected and undocumented, it can be dropped at some
+                * point, since nobody should be really using it */
                return parse_idassert( be, fname, lineno, argc, argv );
-#endif /* LDAP_BACK_PROXY_AUTHZ */
 
        /* save bind creds for referral rebinds? */
        } else if ( strcasecmp( argv[0], "rebind-as-user" ) == 0 ) {
@@ -246,7 +293,7 @@ ldap_back_db_config(
                                        fname, lineno );
                        return( 1 );
                }
-               li->savecred = 1;
+               li->flags |= LDAP_BACK_F_SAVECRED;
        
        /* intercept exop_who_am_i? */
        } else if ( strcasecmp( argv[0], "proxy-whoami" ) == 0 ) {
@@ -265,7 +312,14 @@ ldap_back_db_config(
                        || strcasecmp( argv[0], "map" ) == 0
                        || strncasecmp( argv[0], "rewrite", STRLENOF( "rewrite" ) ) == 0 )
        {
-               if ( li->rwm_started == 0 && !overlay_is_inst( be, "rwm" ) ) {
+               fprintf( stderr, "%s: line %d: "
+                       "rewrite/remap capabilities have been moved "
+                       "to the \"rwm\" overlay; see slapo-rwm(5) "
+                       "for details.  I'm trying to do my best "
+                       "to preserve backwards compatibility...\n",
+                       fname, lineno );
+
+               if ( li->rwm_started == 0 ) {
                        if ( overlay_config( be, "rwm" ) ) {
                                fprintf( stderr, "%s: line %d: "
                                        "unable to configure the \"rwm\" "
@@ -327,8 +381,8 @@ ldap_back_exop_whoami(
 
                ctrls[0] = &c;
                op2.o_ndn = op->o_conn->c_ndn;
-               lc = ldap_back_getconn(&op2, rs);
-               if (!lc || !ldap_back_dobind( lc, op, rs )) {
+               lc = ldap_back_getconn(&op2, rs, LDAP_BACK_SENDERR);
+               if (!lc || !ldap_back_dobind( lc, op, rs, LDAP_BACK_SENDERR )) {
                        return -1;
                }
                c.ldctl_oid = LDAP_CONTROL_PROXY_AUTHZ;
@@ -346,7 +400,7 @@ retry:
                                        &rs->sr_err);
                                if ( rs->sr_err == LDAP_SERVER_DOWN && do_retry ) {
                                        do_retry = 0;
-                                       if ( ldap_back_retry( lc, op, rs ) )
+                                       if ( ldap_back_retry( lc, op, rs, LDAP_BACK_SENDERR ) )
                                                goto retry;
                                }
                                ldap_back_freeconn( op, lc );
@@ -382,7 +436,6 @@ retry:
 }
 
 
-#ifdef LDAP_BACK_PROXY_AUTHZ
 static int
 parse_idassert(
     BackendDB  *be,
@@ -546,7 +599,7 @@ parse_idassert(
                }
 
                if ( strcasecmp( argv[1], "none" ) == 0 ) {
-                       /* FIXME: is this useful? */
+                       /* FIXME: is this at all useful? */
                        li->idassert_authmethod = LDAP_AUTH_NONE;
 
                        if ( argc != 2 ) {
@@ -686,4 +739,3 @@ parse_idassert(
 
        return 0;
 }
-#endif /* LDAP_BACK_PROXY_AUTHZ */