Commit 0ad2b164 authored by Thomas Roessler's avatar Thomas Roessler

Inclue GSS authentization for IMAP.

parent 274bd021
......@@ -37,8 +37,8 @@ mutt_SOURCES = $(BUILT_SOURCES) \
status.c system.c thread.c charset.c history.c lib.c \
muttlib.c
mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(INTLLIBS)
mutt_DEPENDENCIES = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(INTLDEPS)
mutt_LDADD = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAP) $(GSSLIBS) $(INTLLIBS)
mutt_DEPENDENCIES = @MUTT_LIB_OBJECTS@ @LIBOBJS@ $(LIBIMAPDEPS) $(INTLDEPS)
DEFS=-DSHAREDIR=\"$(sharedir)\" -DSYSCONFDIR=\"$(sysconfdir)\" \
-DBINDIR=\"$(bindir)\" -DHAVE_CONFIG_H=1
......
......@@ -48,6 +48,9 @@
/* Do you want support for the IMAP protocol? (--enable-imap) */
#undef USE_IMAP
/* Do you want support for IMAP GSSAPI authentication? (--with-gss) */
#undef USE_GSS
/*
* Is mail spooled to the user's home directory? If defined, MAILPATH should
* be set to the filename of the spool mailbox relative the the home
......
......@@ -168,6 +168,11 @@ folder_format_str (char *dest, size_t destlen, char op, const char *src,
break;
case 'f':
#ifdef USE_IMAP
if (mx_is_imap (folder->ff->name))
strfcpy (fn, folder->ff->desc, sizeof (fn));
else
#endif
strfcpy (fn, folder->ff->name, sizeof(fn));
if (folder->ff->st != NULL)
{
......@@ -199,10 +204,10 @@ folder_format_str (char *dest, size_t destlen, char op, const char *src,
else
{
#ifdef USE_IMAP
if (strchr(folder->ff->name, '{'))
if (mx_is_imap (folder->ff->name))
{
snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
snprintf (dest, destlen, tmp, "IMAP");
snprintf (tmp, sizeof (tmp), "%%%ss", fmt);
snprintf (dest, destlen, tmp, "IMAP");
}
#endif
}
......
......@@ -452,11 +452,33 @@ AC_ARG_ENABLE(imap, [ --enable-imap Enable IMAP support],
AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
AC_CHECK_FUNC(gethostent, , AC_CHECK_LIB(nsl, gethostent))
LIBIMAP="-Limap -limap"
LIBIMAPDEPS="\$(srcdir)/imap/imap.h \$(srcdir)/imap/libimap.a"
CPPFLAGS="$CPPFLAGS -I\$(srcdir)/imap"
need_imap="yes"
])
AM_CONDITIONAL(BUILD_IMAP, test x$need_imap = xyes)
AC_ARG_WITH(gss, [ --with-gss[=DIR] Compile in GSSAPI authentication for IMAP],
[
if test "$with_gss" != "no"
then
if test "$with_gss" != "yes"
then
CPPFLAGS="$CPPFLAGS -I$with_gss/include"
LDFLAGS="$LDFLAGS -L$with_gss/lib"
fi
saved_LIBS="$LIBS"
AC_CHECK_LIB(krb5, krb5_init_context,,
AC_MSG_ERROR([could not find libkrb5 which is needed for GSS authentication]))
AC_CHECK_LIB(gssapi_krb5, gss_init_sec_context,,
AC_MSG_ERROR([could not find libgssapi_krb5 which is needed for GSS authentication]), -lkrb5)
LIBS="$saved_LIBS"
GSSLIBS="-lgssapi_krb5 -lkrb5"
AC_DEFINE(USE_GSS)
fi
])
AC_ARG_ENABLE(debug, [ --enable-debug Enable debugging support],
[ AC_DEFINE(DEBUG) ])
......@@ -510,6 +532,8 @@ AC_ARG_ENABLE(exact-address, [ --enable-exact-address enable regeneration o
AC_SUBST(MUTT_LIB_OBJECTS)
AC_SUBST(LIBIMAP)
AC_SUBST(LIBIMAPDEPS)
AC_SUBST(GSSLIBS)
MUTT_AM_GNU_GETTEXT
CPPFLAGS="$CPPFLAGS -I\$(srcdir)/intl"
......
This diff is collapsed.
......@@ -321,8 +321,7 @@ static void imap_add_folder (char delim, char *folder, int noselect,
imap_qualify_path (tmp, sizeof (tmp), host, port, folder, NULL);
(state->entry)[state->entrylen].name = safe_strdup (tmp);
snprintf (tmp, sizeof (tmp), "IMAP %-25s %-25s", host, relpath);
(state->entry)[state->entrylen].desc = safe_strdup (tmp);
(state->entry)[state->entrylen].desc = safe_strdup (relpath);
(state->entry)[state->entrylen].notfolder = 0;
(state->entrylen)++;
......@@ -340,8 +339,7 @@ static void imap_add_folder (char delim, char *folder, int noselect,
if (strlen (relpath) < sizeof (relpath) - 2)
strcat (relpath, trailing_delim);
snprintf (tmp, sizeof (tmp), "IMAP %-25s %-25s", host, relpath);
(state->entry)[state->entrylen].desc = safe_strdup (tmp);
(state->entry)[state->entrylen].desc = safe_strdup (relpath);
(state->entry)[state->entrylen].notfolder = 1;
(state->entrylen)++;
......
......@@ -33,12 +33,9 @@
#include <unistd.h>
#include <ctype.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
......@@ -67,8 +64,6 @@ static int imap_check_acl (IMAP_DATA *idata);
static int imap_check_capabilities (IMAP_DATA *idata);
static int imap_create_mailbox (IMAP_DATA *idata, char *mailbox);
/* everything above should be moved into a separate imap header file */
void imap_make_sequence (char *buf, size_t buflen)
{
static int sequence = 0;
......@@ -1016,6 +1011,8 @@ static int imap_get_delim (IMAP_DATA *idata, CONNECTION *conn)
return 0;
}
/* imap_parse_path: given an IMAP mailbox name, return host, port
* and a path IMAP servers will recognise. */
int imap_parse_path (char *path, char *host, size_t hlen, int *port,
char **mbox)
{
......@@ -2232,6 +2229,9 @@ int imap_complete(char* dest, size_t dlen, char* path) {
if (list_word)
{
/* store unquoted */
imap_unquote_string (list_word);
/* if the folder isn't selectable, append delimiter to force browse
* to enter it on second tab. */
if (noselect)
......
......@@ -27,6 +27,8 @@ int imap_check_mailbox (CONTEXT *ctx, int *index_hint);
int imap_fetch_message (MESSAGE *msg, CONTEXT *ctx, int msgno);
int imap_open_mailbox (CONTEXT *ctx);
int imap_open_mailbox_append (CONTEXT *ctx);
int imap_parse_path (char *path, char *host, size_t hlen, int *port,
char **mbox);
int imap_select_mailbox (CONTEXT *ctx, const char* path);
int imap_sync_mailbox (CONTEXT *ctx, int expunge);
void imap_fastclose_mailbox (CONTEXT *ctx);
......
......@@ -23,11 +23,11 @@
#include "imap_socket.h"
/* -- symbols -- */
#define IMAP_PORT 143
/* number of entries in the hash table */
#define IMAP_CACHE_LEN 10
#define IMAP_PORT 143
#define SEQLEN 5
enum
......@@ -82,9 +82,9 @@ enum
ACL, /* RFC 2086: IMAP4 ACL extension */
NAMESPACE, /* RFC 2342: IMAP4 Namespace */
ACRAM_MD5, /* RFC 2195: CRAM-MD5 authentication */
/* From here down, we don't care */
AKERBEROS_V4, /* AUTH=KERBEROS_V4 */
AGSSAPI, /* AUTH=GSSAPI */
AGSSAPI, /* RFC 1731: GSSAPI authentication */
/* From here down, we don't care */
ALOGIN, /* AUTH=LOGIN */
AUTH_LOGIN, /* AUTH-LOGIN */
APLAIN, /* AUTH=PLAIN */
......@@ -173,8 +173,6 @@ char *imap_next_word (char *s);
int imap_open_connection (IMAP_DATA *idata, CONNECTION *conn);
int imap_parse_list_response(CONNECTION *conn, char *buf, int buflen,
char **name, int *noselect, int *noinferiors, char *delim);
int imap_parse_path (char *path, char *host, size_t hlen, int *port,
char **mbox);
void imap_quote_string (char *dest, size_t slen, const char *src);
void imap_unquote_string (char *s);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment