X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/dcf4ca6104c1085214bc110f0bb636fed0f64019..8f460dd07d9ededc2c2b2a8dc99f025f494716f9:/uip/popsbr.c diff --git a/uip/popsbr.c b/uip/popsbr.c index 54aa3684..8d54e021 100644 --- a/uip/popsbr.c +++ b/uip/popsbr.c @@ -1,5 +1,4 @@ -/* - * popsbr.c -- POP client subroutines +/* popsbr.c -- POP client subroutines * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -144,6 +143,8 @@ pop_init (char *host, char *port, char *user, char *proxy, int snoop, if (user) netsec_set_userid(nsc, user); + netsec_set_hostname(nsc, host); + if (oauth_svc != NULL) { if (netsec_set_oauth_service(nsc, oauth_svc) != OK) { snprintf(response, sizeof(response), "OAuth2 not supported"); @@ -211,8 +212,8 @@ pop_init (char *host, char *port, char *user, char *proxy, int snoop, netsec_set_fd(nsc, fd1, fd2); netsec_set_snoop(nsc, snoop); - if (tls) { - if (netsec_set_tls(nsc, 1, &errstr) != OK) { + if (tls & P_INITTLS) { + if (netsec_set_tls(nsc, 1, tls & P_NOVERIFY, &errstr) != OK) { snprintf(response, sizeof(response), "%s", errstr); free(errstr); return NOTOK; @@ -226,8 +227,8 @@ pop_init (char *host, char *port, char *user, char *proxy, int snoop, } if (sasl) { - if (netsec_set_sasl_params(nsc, host, "pop", mech, - pop_sasl_callback, &errstr) != OK) { + if (netsec_set_sasl_params(nsc, "pop", mech, pop_sasl_callback, + &errstr) != OK) { snprintf(response, sizeof(response), "%s", errstr); free(errstr); return NOTOK; @@ -270,13 +271,13 @@ pop_init (char *host, char *port, char *user, char *proxy, int snoop, strncpy (buffer, response, sizeof(buffer)); command ("QUIT"); strncpy (response, buffer, sizeof(response)); - /* and fall */ + /* FALLTHRU */ case NOTOK: case DONE: if (poprint) fprintf (stderr, "%s\n", response); - netsec_shutdown(nsc, 1); + netsec_shutdown(nsc); nsc = NULL; return NOTOK; } @@ -433,7 +434,7 @@ pop_sasl_callback(enum sasl_message_type mtype, unsigned const char *indata, if (line == NULL) return NOTOK; - if (!HasPrefix(line, "+OK")) { + if (!has_prefix(line, "+OK")) { netsec_err(errstr, "Authentication failed: %s", line); return NOTOK; } @@ -479,58 +480,6 @@ pop_stat (int *nmsgs, int *nbytes) } -int -pop_list (int msgno, int *nmsgs, int *msgs, int *bytes) -{ - int i; - int *ids = NULL; - - if (msgno) { - if (command ("LIST %d", msgno) == NOTOK) - return NOTOK; - *msgs = *bytes = 0; - if (ids) { - *ids = 0; - sscanf (response, "+OK %d %d %d", msgs, bytes, ids); - } - else - sscanf (response, "+OK %d %d", msgs, bytes); - return OK; - } - - if (command ("LIST") == NOTOK) - return NOTOK; - - for (i = 0; i < *nmsgs; i++) - switch (multiline ()) { - case NOTOK: - return NOTOK; - case DONE: - *nmsgs = ++i; - return OK; - case OK: - *msgs = *bytes = 0; - if (ids) { - *ids = 0; - sscanf (response, "%d %d %d", - msgs++, bytes++, ids++); - } - else - sscanf (response, "%d %d", msgs++, bytes++); - break; - } - for (;;) - switch (multiline ()) { - case NOTOK: - return NOTOK; - case DONE: - return OK; - case OK: - break; - } -} - - int pop_retr (int msgno, int (*action)(char *)) { @@ -581,27 +530,6 @@ pop_dele (int msgno) } -int -pop_noop (void) -{ - return command ("NOOP"); -} - - -int -pop_rset (void) -{ - return command ("RSET"); -} - - -int -pop_top (int msgno, int lines, int (*action)(char *)) -{ - return traverse (action, "TOP %d %d", msgno, lines); -} - - int pop_quit (void) { @@ -618,7 +546,7 @@ int pop_done (void) { if (nsc) - netsec_shutdown(nsc, 1); + netsec_shutdown(nsc); return OK; } @@ -689,7 +617,7 @@ multiline (void) if (pop_getline (buffer, sizeof buffer, nsc) != OK) return NOTOK; - if (HasPrefix(buffer, TRM)) { + if (has_prefix(buffer, TRM)) { if (buffer[LEN(TRM)] == 0) return DONE; strncpy (response, buffer + LEN(TRM), sizeof(response)); @@ -729,11 +657,11 @@ pop_getline (char *s, int n, netsec_context *ns) * * We get a length back from netsec_readline, but the rest of the POP * code doesn't handle it; the assumptions are that everything from - * the network can be respresented as C strings. That should get fixed + * the network can be represented as C strings. That should get fixed * someday. */ - destlen = len < ((size_t) (n - 1)) ? len : (size_t) (n - 1); + destlen = min(len, (size_t)(n - 1)); memcpy(s, p, destlen); s[destlen] = '\0';