X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/a6a073be4aea5e0a1ca2e55920d0f97c8a5f273a..50c8114d791602fcc427c6dc94b55f3226e8a21d:/uip/popsbr.c?ds=inline diff --git a/uip/popsbr.c b/uip/popsbr.c index fb66a93b..714a8da7 100644 --- a/uip/popsbr.c +++ b/uip/popsbr.c @@ -23,8 +23,6 @@ #include #include -#include -#include #define TRM "." #define TRMLEN (sizeof TRM - 1) @@ -46,6 +44,7 @@ static int sasl_get_user(void *, int, const char **, unsigned *); static int sasl_get_pass(sasl_conn_t *, void *, int, sasl_secret_t **); struct pass_context { char *user; + char *password; char *host; }; @@ -71,7 +70,7 @@ static int command(const char *, ...); static int multiline(void); #ifdef CYRUS_SASL -static int pop_auth_sasl(char *, char *, char *); +static int pop_auth_sasl(char *, char *, char *, char *); static int sasl_fgetc(FILE *); #endif /* CYRUS_SASL */ @@ -91,7 +90,7 @@ static int putline (char *, FILE *); */ int -pop_auth_sasl(char *user, char *host, char *mech) +pop_auth_sasl(char *user, char *password, char *host, char *mech) { int result, status, sasl_capability = 0; unsigned int buflen, outlen; @@ -159,6 +158,7 @@ pop_auth_sasl(char *user, char *host, char *mech) callbacks[POP_SASL_CB_N_USER].context = user; p_context.user = user; p_context.host = host; + p_context.password = password; callbacks[POP_SASL_CB_N_PASS].context = &p_context; result = sasl_client_init(callbacks); @@ -351,7 +351,7 @@ static int sasl_get_pass(sasl_conn_t *conn, void *context, int id, sasl_secret_t **psecret) { struct pass_context *p_context = (struct pass_context *) context; - char *pass = NULL; + char *pass = p_context->password; int len; NMH_UNUSED (conn); @@ -359,8 +359,6 @@ sasl_get_pass(sasl_conn_t *conn, void *context, int id, sasl_secret_t **psecret) if (! psecret || id != SASL_CB_PASS) return SASL_BADPARAM; - ruserpass(p_context->user, &(p_context->host), &pass); - len = strlen(pass); *psecret = (sasl_secret_t *) mh_xmalloc(sizeof(sasl_secret_t) + len); @@ -510,7 +508,7 @@ pop_init (char *host, char *port, char *user, char *pass, char *proxy, if (*response == '+') { # ifdef CYRUS_SASL if (sasl) { - if (pop_auth_sasl(user, host, mech) != NOTOK) + if (pop_auth_sasl(user, pass, host, mech) != NOTOK) return OK; } else # endif /* CYRUS_SASL */