Witam.
Chciałem się podzielić doświadczeniami z kilkudniowej walki z
uruchomieniem autentykacji użytkowników za pomoca kerberos'a
(implementacja heimdal). Logowanie z użyciem pam_krb5 i logowanie ssh
przy pomocy ticket'ów kerberos'a poszło z przysłowiowego "kopa".
Gorzej poszło z IMAP'em. Dystrybucyjny cyrus-imap wspiera kerberos'a
przez sasl'a. Po przebudowaniu sasl'a z "--with gssapi" bez problemu
działa autentykacja za pomocą ticket'ów w narzędziach cyrrus'a: cyradm i
sieveshell. Niestety nie działały (chociaż teoretycznie powinny)
aplikacje klienckie do czytania poczty - Evolution (2.0.3) i mutt
(1.4.2.1) Evolution poprawnie wykrywa metodę gssapi, jednak nie
zapamiętuje ustawień i próbuje autoryzować użytkownika za pomocą hasła.
mutt natomiast pobiera ticket do imap'a z kdc, lecz kończy z błędem
SASL'a.
W załączniku poprawki do evolution i mutt'a.
Łata do evolution ma zostać włączona do następnego wydania (znaleziona w
bugzilli), natomiast mutt'a połatałem własnoręcznie (problemy ze zbyt
małym buforem oraz nadmiarowe zwalnianie buforów sasl'a, które są
zwalniane przez samą bibliotekę).
Prosiłbym kogoś władnego o przejrzenie i wrzucenie łatek...
P.S. Dlaczego sasl jest domyślnie budowany bez gssapi ?
--
mrk
--- evolution-2.0.3/mail/mail-account-gui.c.old 2004-12-06 08:47:05.000000000 +0100
+++ evolution-2.0.3/mail/mail-account-gui.c 2005-02-14 21:54:31.309936264 +0100
@@ -2306,7 +2306,7 @@
}
if (CAMEL_PROVIDER_ALLOWS (gsvc->provider, CAMEL_URL_PART_AUTH) && url->user) {
- if (gsvc->needs_auth && gtk_toggle_button_get_active(gsvc->needs_auth)) {
+ if (gsvc->needs_auth == NULL || gtk_toggle_button_get_active(gsvc->needs_auth)) {
CamelServiceAuthType *authtype;
authtype = g_object_get_data(G_OBJECT(gsvc->authitem), "authtype");
diff -durN mutt-1.4.2.1.orig/imap/auth_sasl.c mutt-1.4.2.1/imap/auth_sasl.c
--- mutt-1.4.2.1.orig/imap/auth_sasl.c 2005-02-17 22:03:53.488279000 +0100
+++ mutt-1.4.2.1/imap/auth_sasl.c 2005-02-17 22:10:31.217174600 +0100
@@ -26,13 +26,15 @@
#include <sasl.h>
#include <saslutil.h>
+#define SASL_BUF_LEN 65536
+
/* imap_auth_sasl: Default authenticator if available. */
imap_auth_res_t imap_auth_sasl (IMAP_DATA* idata, const char* method)
{
sasl_conn_t* saslconn;
sasl_interact_t* interaction = NULL;
int rc, irc;
- char buf[LONG_STRING];
+ char buf[SASL_BUF_LEN];
const char* mech;
const char* pc = NULL;
unsigned int len, olen;
@@ -107,7 +109,7 @@
if (irc == IMAP_CMD_RESPOND)
{
if (sasl_decode64 (idata->cmd.buf+2, strlen (idata->cmd.buf+2), buf,
- LONG_STRING,&len) != SASL_OK)
+ SASL_BUF_LEN,&len) != SASL_OK)
{
dprint (1, (debugfile, "imap_auth_sasl: error base64-decoding server response.\n"));
goto bail;
diff -durN mutt-1.4.2.1.orig/mutt-1.3.28/PATCHES mutt-1.4.2.1/mutt-1.3.28/PATCHES
--- mutt-1.4.2.1.orig/mutt-1.3.28/PATCHES 2005-02-17 22:03:53.428348000 +0100
+++ mutt-1.4.2.1/mutt-1.3.28/PATCHES 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-patch-1.3.28.dw.pgp-hook.3
diff -durN mutt-1.4.2.1.orig/mutt_sasl.c mutt-1.4.2.1/mutt_sasl.c
--- mutt-1.4.2.1.orig/mutt_sasl.c 2005-02-17 22:03:53.517245000 +0100
+++ mutt-1.4.2.1/mutt_sasl.c 2005-02-17 22:09:59.616978560 +0100
@@ -383,7 +383,7 @@
/* release sasl resources */
sasl_dispose (&sasldata->saslconn);
- FREE (&sasldata->buf);
+// FREE (&sasldata->buf);
FREE (&sasldata);
/* call underlying close */
@@ -415,7 +415,7 @@
conn->sockdata = sasldata->sockdata;
- FREE (&sasldata->buf);
+// FREE (&sasldata->buf);
sasldata->bpos = 0;
sasldata->blen = 0;
@@ -486,7 +486,7 @@
}
rc = (sasldata->write) (conn, pbuf, plen);
- FREE (&pbuf);
+// FREE (&pbuf);
if (rc != plen)
goto fail;
_______________________________________________
pld-devel-pl mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-devel-pl