#include "imap_private.h"
#include "auth.h"
+#include <netinet/in.h>
+#include <netdb.h>
+
#include <sasl.h>
#include <saslutil.h>
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