]> andersk Git - mod-vhost-ldap.git/commitdiff
mod_vhost_ldap.c: add support for fallback host upstream/0.2.8
authorOndřej Surý <ondrej@sury.org>
Thu, 22 Sep 2005 07:27:53 +0000 (07:27 +0000)
committerOndřej Surý <ondrej@sury.org>
Thu, 22 Sep 2005 07:27:53 +0000 (07:27 +0000)
git-svn-id: svn://svn.debian.org/svn/modvhostldap/mod-vhost-ldap@30 4dd36cbf-e3fd-0310-983d-db0e06859cf4

ChangeLog
VERSION
mod_vhost_ldap.c

index 75fa9f954e3219cdc2400974e0a307bee7e8e8a5..2dbf44004a3e283581cc01a81c0b350c61d93cd0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2005-09-22 Ondřej Surý <ondrej@sury.org>
+       * mod_vhost_ldap.c: add support for Fallback Virtual Host
+       * VERSION: 0.2.8 release
+
 2005-09-19 Ondřej Surý <ondrej@sury.org>
        * mod_vhost_ldap.c: add more information to log when vhost is not found
        * VERSION: 0.2.7 release
diff --git a/VERSION b/VERSION
index b0032849c80b52bdb371f57ec8af94eabb9d65ad..a45be4627678330112f94a9b48a5e821ed846104 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.2.7
+0.2.8
index e0ae7de1302f7d2f5b96dba9de8ab6a7dacff36f..3a13cdf9b86a5d95b2e4700cee1c02b9dca585d4 100644 (file)
@@ -75,6 +75,9 @@ typedef struct mod_vhost_ldap_config_t {
     int have_ldap_url;                 /* Set if we have found an LDAP url */
 
     int secure;                                /* True if SSL connections are requested */
+
+    char *fallback;                     /* Fallback virtual host */
+
 } mod_vhost_ldap_config_t;
 
 typedef struct mod_vhost_ldap_request_t {
@@ -118,6 +121,7 @@ mod_vhost_ldap_create_server_config (apr_pool_t *p, server_rec *s)
     conf->binddn = NULL;
     conf->bindpw = NULL;
     conf->deref = always;
+    conf->fallback = NULL;
 
     return conf;
 }
@@ -166,6 +170,8 @@ mod_vhost_ldap_merge_server_config(apr_pool_t *p, void *parentv, void *childv)
     conf->binddn = (child->binddn ? child->binddn : parent->binddn);
     conf->bindpw = (child->bindpw ? child->bindpw : parent->bindpw);
 
+    conf->fallback = (child->fallback ? child->fallback : parent->fallback);
+
     return conf;
 }
 
@@ -280,7 +286,7 @@ static const char *mod_vhost_ldap_set_enabled(cmd_parms *cmd, void *dummy, int e
 {
     mod_vhost_ldap_config_t *conf =
        (mod_vhost_ldap_config_t *)ap_get_module_config(cmd->server->module_config,
-                                                        &vhost_ldap_module);
+                                                       &vhost_ldap_module);
 
     conf->enabled = (enabled) ? MVL_ENABLED : MVL_DISABLED;
 
@@ -291,7 +297,7 @@ static const char *mod_vhost_ldap_set_binddn(cmd_parms *cmd, void *dummy, const
 {
     mod_vhost_ldap_config_t *conf =
        (mod_vhost_ldap_config_t *)ap_get_module_config(cmd->server->module_config,
-                                                        &vhost_ldap_module);
+                                                       &vhost_ldap_module);
 
     conf->binddn = apr_pstrdup(cmd->pool, binddn);
     return NULL;
@@ -301,7 +307,7 @@ static const char *mod_vhost_ldap_set_bindpw(cmd_parms *cmd, void *dummy, const
 {
     mod_vhost_ldap_config_t *conf =
        (mod_vhost_ldap_config_t *)ap_get_module_config(cmd->server->module_config,
-                                                        &vhost_ldap_module);
+                                                       &vhost_ldap_module);
 
     conf->bindpw = apr_pstrdup(cmd->pool, bindpw);
     return NULL;
@@ -335,6 +341,16 @@ static const char *mod_vhost_ldap_set_deref(cmd_parms *cmd, void *dummy, const c
     return NULL;
 }
 
+static const char *mod_vhost_ldap_set_fallback(cmd_parms *cmd, void *dummy, const char *fallback)
+{
+    mod_vhost_ldap_config_t *conf =
+       (mod_vhost_ldap_config_t *)ap_get_module_config(cmd->server->module_config,
+                                                       &vhost_ldap_module);
+
+    conf->fallback = apr_pstrdup(cmd->pool, fallback);
+    return NULL;
+}
+
 command_rec mod_vhost_ldap_cmds[] = {
     AP_INIT_TAKE1("VhostLDAPURL", mod_vhost_ldap_parse_url, NULL, RSRC_CONF,
                   "URL to define LDAP connection. This should be an RFC 2255 compliant\n"
@@ -360,6 +376,11 @@ command_rec mod_vhost_ldap_cmds[] = {
                   "values \"never\", \"searching\", \"finding\", or \"always\". "
                   "Defaults to always."),
 
+    AP_INIT_TAKE1("VhostLDAPFallback", mod_vhost_ldap_set_fallback, NULL, RSRC_CONF,
+                 "Set default virtual host which will be used when requested hostname"
+                 "is not found in LDAP database. This option can be used to display"
+                 "\"virtual host not found\" type of page."),
+
     {NULL}
 };
 
@@ -379,6 +400,8 @@ mod_vhost_ldap_translate_name (request_rec * r)
     int result = 0;
     const char *dn = NULL;
     char *cgi;
+    const char *hostname = NULL;
+    int is_fallback = 0;
 
     mod_vhost_ldap_request_t *req =
        (mod_vhost_ldap_request_t *)apr_pcalloc(r->pool, sizeof(mod_vhost_ldap_request_t));
@@ -402,10 +425,14 @@ start_over:
         return DECLINED;
     }
 
+    hostname = r->hostname;
+
+fallback:
+
     ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
                   "[mod_vhost_ldap.c]: translating %s", r->uri);
 
-    apr_snprintf(filtbuf, FILTER_LENGTH, "(&(%s)(|(apacheServerName=%s)(apacheServerAlias=%s)))", conf->filter, r->hostname, r->hostname);
+    apr_snprintf(filtbuf, FILTER_LENGTH, "(&(%s)(|(apacheServerName=%s)(apacheServerAlias=%s)))", conf->filter, hostname, hostname);
 
     result = util_ldap_cache_getuserdn(r, ldc, conf->url, conf->basedn, conf->scope,
                                       attributes, filtbuf, &dn, &vals);
@@ -419,12 +446,30 @@ start_over:
         }
     }
 
+    if ((result == LDAP_NO_SUCH_OBJECT)) {
+       if (conf->fallback && (is_fallback++ <= 0)) {
+           ap_log_rerror(APLOG_MARK, APLOG_NOTICE|APLOG_NOERRNO, 0, r,
+                         "[mod_vhost_ldap.c] translate: "
+                         "virtual host %s not found, trying fallback %s",
+                         hostname, conf->fallback);
+           hostname = conf->fallback;
+           goto fallback;
+       }
+
+       ap_log_rerror(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r,
+                     "[mod_vhost_ldap.c] translate: "
+                     "virtual host %s not found",
+                     hostname);
+
+       return DECLINED;
+    }
+
     /* handle bind failure */
     if (result != LDAP_SUCCESS) {
         ap_log_rerror(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r, 
                       "[mod_vhost_ldap.c] translate: "
-                      "translate failed; VHost %s; URI %s[%s]",
-                     r->hostname, r->uri, ldap_err2string(result));
+                      "translate failed; virtual host %s; URI %s [%s]",
+                     hostname, r->uri, ldap_err2string(result));
        return DECLINED;
     }
 
This page took 0.055197 seconds and 5 git commands to generate.