On 01/23/2008 07:14 PM, [EMAIL PROTECTED] wrote:
> Author: rederpj
> Date: Wed Jan 23 10:14:41 2008
> New Revision: 614605
> 
> URL: http://svn.apache.org/viewvc?rev=614605&view=rev
> Log:
> This adds Apache support (taking advantage of the new APR capability)
> for ldap rebind callback while chasing referrals. This allows direct
> searches on LDAP servers (in particular MS Active Directory 2003+)
> using referrals without the use of the global catalog.
> This addresses PRs 26538, 40268, and 42557
> 
> 
> Modified:
>     httpd/httpd/trunk/include/util_ldap.h
>     httpd/httpd/trunk/modules/ldap/util_ldap.c
> 
> Modified: httpd/httpd/trunk/include/util_ldap.h
> URL: 
> http://svn.apache.org/viewvc/httpd/httpd/trunk/include/util_ldap.h?rev=614605&r1=614604&r2=614605&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/include/util_ldap.h (original)
> +++ httpd/httpd/trunk/include/util_ldap.h Wed Jan 23 10:14:41 2008
> @@ -29,6 +29,7 @@
>  #include "apr_tables.h"
>  #include "apr_time.h"
>  #include "apr_ldap.h"
> +#include "apr_ldap_rebind.h"
>  
>  #if APR_HAS_MICROSOFT_LDAPSDK
>  #define AP_LDAP_IS_SERVER_DOWN(s)                ((s) == LDAP_SERVER_DOWN \
> @@ -112,11 +113,18 @@
>      apr_array_header_t *client_certs;   /* Client certificates on this 
> connection */
>  
>      const char *reason;                 /* Reason for an error failure */
> +    int ChaseReferrals;                 /* [on|off] (on=1, off=0, default = 
> On)*/
> +    int ReferralHopLimit;               /* # of referral hops to follow 
> (default = 5) */

Hm. This requires a major bump. Append it to the end of the struct and you
only need a minor bump and the whole thing becomes backportable.

>  
>      struct util_ldap_connection_t *next;
>      struct util_ldap_state_t *st;        /* The LDAP vhost config this 
> connection belongs to */
>      int keep;                            /* Will this connection be kept 
> when it's unlocked */
>  } util_ldap_connection_t;
> +
> +typedef struct util_ldap_config_t {
> +    int ChaseReferrals;
> +    int ReferralHopLimit;
> +} util_ldap_config_t;
>  
>  /* LDAP cache state information */ 
>  typedef struct util_ldap_state_t {
> 
> Modified: httpd/httpd/trunk/modules/ldap/util_ldap.c
> URL: 
> http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/ldap/util_ldap.c?rev=614605&r1=614604&r2=614605&view=diff
> ==============================================================================
> --- httpd/httpd/trunk/modules/ldap/util_ldap.c (original)
> +++ httpd/httpd/trunk/modules/ldap/util_ldap.c Wed Jan 23 10:14:41 2008

> @@ -2288,6 +2340,47 @@
>  }
>  
>  
> +static const char *util_ldap_set_chase_referrals(cmd_parms *cmd,
> +                                                 void *config,
> +                                                 int mode)
> +{
> +    util_ldap_config_t *dc =  config;
> +
> +    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, cmd->server,
> +                      "LDAP: Setting refferal chasing %s",
> +                      mode?"ON":"OFF");
> +
> +    dc->ChaseReferrals = mode;
> +
> +    return(NULL);
> +}
> +
> +static const char *util_ldap_set_referral_hop_limit(cmd_parms *cmd,
> +                                                    void *config,
> +                                                    const char *hop_limit)
> +{
> +    util_ldap_config_t *dc =  config;
> +
> +    dc->ReferralHopLimit = atol(hop_limit);
> +
> +    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, cmd->server,
> +                 "LDAP: Limit chased referrals to maximum of %d hops.",
> +                 dc->ReferralHopLimit);
> +
> +    return NULL;
> +}
> +
> +static void *util_ldap_create_dir_config(apr_pool_t *p, char *d) {
> +   util_ldap_config_t *dc =
> +       (util_ldap_config_t *) apr_pcalloc(p,sizeof(util_ldap_config_t));
> +
> +   dc->ChaseReferrals = 1;   /* default is to turn referral chasing on. */
> +   dc->ReferralHopLimit = 5; /* default is to chase a max of 5 hops. */

I would love to see #defines for these defaults (util_ldap.h) and have these
defines referred everywhere, even in the comments.

> +
> +   return dc;
> +}
> +
> +
>  static void *util_ldap_create_config(apr_pool_t *p, server_rec *s)
>  {
>      util_ldap_state_t *st =

> @@ -2638,7 +2743,7 @@
>  
>  module AP_MODULE_DECLARE_DATA ldap_module = {
>     STANDARD20_MODULE_STUFF,
> -   NULL,                        /* create dir config */
> +   util_ldap_create_dir_config, /* create dir config */
>     NULL,                        /* merge dir config */

Why no merge dir config? How do you inherit your settings in this case?

>     util_ldap_create_config,     /* create server config */
>     util_ldap_merge_config,      /* merge server config */
> 

Regards

RĂ¼diger

Reply via email to