Your message dated Tue, 21 Feb 2006 23:06:08 +0100
with message-id <[EMAIL PROTECTED]>
and subject line closing this bug
has caused the attached Bug report to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what I am
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Debian bug tracking system administrator
(administrator, Debian Bugs database)

--- Begin Message ---
Package: cyrus22-imapd
Severity: wishlist
Tags: patch

Hi

This is the ldap authentification patch for cyrus.
As far as I know it enables the ldap authentification.
Kolab uses ldap for all user information.


Patch:

--- 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

 };


-- System Information:
Debian Release: testing/unstable
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.15-1-686
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1)


--- End Message ---
--- Begin Message ---
Hi

This bug can be closed because there is a cyrus for kolab use inside Debian.
Thanks for your time and work.

Greetings
Steffen

Attachment: pgpGxSdriLEYQ.pgp
Description: PGP signature


--- End Message ---

Reply via email to