summaryrefslogtreecommitdiffstats
path: root/imap
diff options
context:
space:
mode:
authorThomas Roessler <roessler@does-not-exist.org>2001-01-03 10:56:05 +0000
committerThomas Roessler <roessler@does-not-exist.org>2001-01-03 10:56:05 +0000
commit51dbe41d6ee26122168da957d2c41209e78c0e9b (patch)
tree5dbace88e00560ba1c55c552d8a8a6dfa08a84ce /imap
parenta51af7b91431f08f415e44fb21ad423c2ad08418 (diff)
Set SASL_IP_{LOCAL,REMOTE} properties - needed for krb4 support;
from yak@MIT.EDU.
Diffstat (limited to 'imap')
-rw-r--r--imap/auth_sasl.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/imap/auth_sasl.c b/imap/auth_sasl.c
index d1c5c904..d1bc0d20 100644
--- a/imap/auth_sasl.c
+++ b/imap/auth_sasl.c
@@ -23,6 +23,9 @@
#include "imap_private.h"
#include "auth.h"
+#include <netinet/in.h>
+#include <netdb.h>
+
#include <sasl.h>
#include <saslutil.h>
@@ -53,6 +56,30 @@ imap_auth_res_t imap_auth_sasl (IMAP_DATA* idata)
return IMAP_AUTH_FAILURE;
}
+ /*** set sasl IP properties, necessary for use with krb4 ***/
+ {
+ struct sockaddr_in local, remote;
+ int r, size;
+
+ size = sizeof(local);
+ r = getsockname(idata->conn->fd, &local, &size);
+ if (r!=0) return IMAP_AUTH_FAILURE;
+
+ size = sizeof(remote);
+ r = getpeername(idata->conn->fd, &remote, &size);
+ if (r!=0) return IMAP_AUTH_FAILURE;
+
+#ifdef SASL_IP_LOCAL
+ r = sasl_setprop(saslconn, SASL_IP_LOCAL, &local);
+ if (r!=0) return IMAP_AUTH_FAILURE;
+#endif
+
+#ifdef SASL_IP_REMOTE
+ r = sasl_setprop(saslconn, SASL_IP_REMOTE, &remote);
+ if (r!=0) return IMAP_AUTH_FAILURE;
+#endif
+ }
+
/* hack for SASL ANONYMOUS support:
* 1. Fetch username. If it's "" or "anonymous" then
* 2. attempt sasl_client_start with only "AUTH=ANONYMOUS" capability