[pkg-kolab] r174 - trunk/kolab-cyrus-imapd/debian/patches

Steffen Joeris white-guest at costa.debian.org
Wed Jan 18 12:28:37 UTC 2006


Author: white-guest
Date: 2006-01-18 12:28:36 +0000 (Wed, 18 Jan 2006)
New Revision: 174

Added:
   trunk/kolab-cyrus-imapd/debian/patches/140-kolab-ldap.dpatch
Modified:
   trunk/kolab-cyrus-imapd/debian/patches/00list
Log:
* add ldap patch to cyrus


Modified: trunk/kolab-cyrus-imapd/debian/patches/00list
===================================================================
--- trunk/kolab-cyrus-imapd/debian/patches/00list	2006-01-18 11:39:28 UTC (rev 173)
+++ trunk/kolab-cyrus-imapd/debian/patches/00list	2006-01-18 12:28:36 UTC (rev 174)
@@ -37,3 +37,4 @@
 110-Admin.pm.dpatch
 120-kolab-Shell.pm.dpatch
 130-kolab-imapd-goodchars.dpatch
+140-kolab-ldap.dpatch

Added: trunk/kolab-cyrus-imapd/debian/patches/140-kolab-ldap.dpatch
===================================================================
--- trunk/kolab-cyrus-imapd/debian/patches/140-kolab-ldap.dpatch	2006-01-18 11:39:28 UTC (rev 173)
+++ trunk/kolab-cyrus-imapd/debian/patches/140-kolab-ldap.dpatch	2006-01-18 12:28:36 UTC (rev 174)
@@ -0,0 +1,138 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 150-kolab-ldap.dpatch by Steffen Joeris <steffen.joeris at skolelinux.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Add ldap authentication
+
+ at DPATCH@
+--- kolab-cyrus-imapd-2.2.12/configure.orig	2006-01-11 21:42:59.000000000 +0100
++++ kolab-cyrus-imapd-2.2.12/configure	2006-01-11 21:43:50.000000000 +0100
+@@ -14395,7 +14395,7 @@
+ done
+ 
+ IMAP_COM_ERR_LIBS="${COM_ERR_LIBS}"
+-IMAP_LIBS="${LIB_SASL} ${LIBS}"
++IMAP_LIBS="${LIB_SASL} -lldpap -llber ${LIBS}"
+ 
+ 
+ 
+--- kolab-cyrus-imapd-2.2.12/imap/global.c.orig	2006-01-11 21:45:29.000000000 +0100
++++ kolab-cyrus-imapd-2.2.12/imap/global.c	2006-01-11 22:16:05.000000000 +0100
+@@ -52,6 +52,9 @@
+ #include <netinet/in.h>
+ #include <sys/stat.h>
+ 
++#include <ldap.h>
++#include <lber.h>
++
+ #if HAVE_UNISTD_H
+ # include <unistd.h>
+ #endif
+@@ -349,6 +352,18 @@
+     char *domain = NULL;
+     int len = strlen(user);
+     char buf[81];
++    const char *uri;
++    const char *base;
++    const char *binddn;
++    const char *bindpw;
++    struct timeval timeout;
++    char filter[255];
++    LDAP *handle;
++    LDAPMessage *res;
++    LDAPMessage *entry;
++    char ** vals;
++
++    int rc;
+ 
+     /* check for domain */
+     if (config_virtdomains &&
+@@ -367,6 +382,47 @@
+     }
+ 
+     if (config_virtdomains) {
++if (config_virtdomains == IMAP_ENUM_VIRTDOMAINS_LDAP) {
++           uri = config_getstring(IMAPOPT_LDAP_URI);
++           base = config_getstring(IMAPOPT_LDAP_BASE);
++           binddn = config_getstring(IMAPOPT_LDAP_BIND_DN);
++           bindpw = config_getstring(IMAPOPT_LDAP_PASSWORD);
++           timeout.tv_sec = config_getint(IMAPOPT_LDAP_TIME_LIMIT);
++           timeout.tv_usec = 0;
++           sprintf(filter, "(uid=%s)", user);
++           rc = ldap_initialize(&handle, uri);
++           if (rc != LDAP_SUCCESS) {
++                syslog(LOG_ERR, "ldap_initialize failed (%s)", uri);
++           } else {
++               rc = ldap_simple_bind_s(handle, binddn, bindpw);
++               if (rc != LDAP_SUCCESS) {
++                     syslog(LOG_ERR, "ldap_simple_bind() failed %d (%s)", rc, ldap_err2string(rc));
++               } else {
++                    rc = ldap_search_st(handle, base, LDAP_SCOPE_SUBTREE, filter, NULL, 0, &timeout, &res);
++                     if (rc != LDAP_SUCCESS) {
++                          syslog(LOG_ERR, "ldap_search_st failed %d (%s)", rc, ldap_err2string(rc));
++                     } else {
++                         if ( (entry = ldap_first_entry(handle, res)) != NULL ) {
++                              // read mail attribute from entry
++                              if ( (vals = ldap_get_values(handle, entry, "mail")) ) {
++                                   if (strchr(vals[0], '@')) {
++                                       static char buf[81]; /* same size as in auth_canonifyid */
++                                       strncpy( buf, vals[0], sizeof(buf) );
++                                       buf[80] = '\0'; /* make sure it's null-terminated */
++                                       ldap_value_free( vals );
++                                       ldap_msgfree( res );
++                                       ldap_unbind_s(handle); /* also frees handle */
++                                       return auth_canonifyid( buf, 0) ;
++                                   }
++                                   ldap_value_free( vals );
++                              }                                
++                         }
++                         ldap_msgfree( res );
++                     }
++                }
++               ldap_unbind_s(handle); /* also frees handle */
++           }
++        }	
+ 	if (domain) {
+ 	    if (config_defdomain && !strcasecmp(config_defdomain, domain+1)) {
+ 		*domain = '\0'; /* trim the default domain */
+@@ -379,7 +435,7 @@
+ 		user = buf;
+ 	    }
+ 	}
+-	else if (config_virtdomains != IMAP_ENUM_VIRTDOMAINS_USERID) {
++	    else if (config_virtdomains != IMAP_ENUM_VIRTDOMAINS_USERID && config_virtdomains != IMAP_ENUM_VIRTDOMAINS_LDAP) {
+ 	    socklen_t salen;
+ 	    int error;
+ 	    struct sockaddr_storage localaddr;
+--- kolab-cyrus-imapd-2.2.12/lib/imapoptions.orig	2006-01-11 22:19:35.000000000 +0100
++++ kolab-cyrus-imapd-2.2.12/lib/imapoptions	2006-01-11 22:20:00.000000000 +0100
+@@ -839,7 +839,7 @@
+    mailbox hierarchy.  The default is to use the netnews separator
+    character '.'. */
+ 
+-{ "virtdomains", "off", ENUM("off", "userid", "on") }
++{ "virtdomains", "off", ENUM("off", "userid", "ldap", "on") }
+ /* Enable virtual domain support.  If enabled, the user's domain will
+    be determined by splitting a fully qualified userid at the last '@'
+    or '%' symbol.  If the userid is unqualified, and the virtdomains
+--- kolab-cyrus-imapd-2.2.12/lib/imapopts.c.orig	2006-01-11 22:26:25.000000000 +0100
++++ kolab-cyrus-imapd-2.2.12/lib/imapopts.c	2006-01-11 22:27:37.000000000 +0100
+@@ -186,7 +186,7 @@
+   { IMAPOPT_USERPREFIX, "userprefix", 0, {(void *)("Other Users")}, OPT_STRING, {  { NULL, IMAP_ENUM_ZERO } } },
+   { IMAPOPT_UNIX_GROUP_ENABLE, "unix_group_enable", 0, {(void*)1}, OPT_SWITCH, {  { NULL, IMAP_ENUM_ZERO } } },
+   { IMAPOPT_UNIXHIERARCHYSEP, "unixhierarchysep", 0, {(void*)0}, OPT_SWITCH, {  { NULL, IMAP_ENUM_ZERO } } },
+-  { IMAPOPT_VIRTDOMAINS, "virtdomains", 0, {(void *)(IMAP_ENUM_VIRTDOMAINS_OFF)}, OPT_ENUM, { { "off" , IMAP_ENUM_VIRTDOMAINS_OFF }, { "userid" , IMAP_ENUM_VIRTDOMAINS_USERID }, { "on" , IMAP_ENUM_VIRTDOMAINS_ON },  { NULL, IMAP_ENUM_ZERO } } },
++  { IMAPOPT_VIRTDOMAINS, "virtdomains", 0, {(void *)(IMAP_ENUM_VIRTDOMAINS_OFF)}, OPT_ENUM, { { "off" , IMAP_ENUM_VIRTDOMAINS_OFF }, { "userid" , IMAP_ENUM_VIRTDOMAINS_USERID }, { "ldap" , IMAP_ENUM_VIRTDOMAINS_LDAP }, { "on" , IMAP_ENUM_VIRTDOMAINS_ON },  { NULL, IMAP_ENUM_ZERO } } },
+ 
+   { IMAPOPT_LAST, NULL, 0, { NULL }, OPT_NOTOPT, {  { NULL, IMAP_ENUM_ZERO } } }
+ 
+--- kolab-cyrus-imapd-2.2.12/lib/imapopts.h.orig	2006-01-11 22:29:39.000000000 +0100
++++ kolab-cyrus-imapd-2.2.12/lib/imapopts.h	2006-01-11 22:30:11.000000000 +0100
+@@ -188,6 +188,7 @@
+ 
+   IMAP_ENUM_VIRTDOMAINS_ON,
+   IMAP_ENUM_VIRTDOMAINS_USERID,
++  IMAP_ENUM_VIRTDOMAINS_LDAP,
+   IMAP_ENUM_VIRTDOMAINS_OFF = 0
+ 
+ };


Property changes on: trunk/kolab-cyrus-imapd/debian/patches/140-kolab-ldap.dpatch
___________________________________________________________________
Name: svn:executable
   + *




More information about the pkg-kolab-devel mailing list