diff options
author | Thomas Roessler <roessler@does-not-exist.org> | 2001-01-03 10:56:05 +0000 |
---|---|---|
committer | Thomas Roessler <roessler@does-not-exist.org> | 2001-01-03 10:56:05 +0000 |
commit | 51dbe41d6ee26122168da957d2c41209e78c0e9b (patch) | |
tree | 5dbace88e00560ba1c55c552d8a8a6dfa08a84ce /imap | |
parent | a51af7b91431f08f415e44fb21ad423c2ad08418 (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.c | 27 |
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 |