client-authenticate.c revision f30577ff7cf29858f1878abe963b4f40a436434f
89a126810703c666309310d0f3189e9834d70b5bTimo Sirainen/* Copyright (C) 2002-2004 Timo Sirainen */
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainenint cmd_capa(struct pop3_client *client, const char *args __attr_unused__)
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen unsigned int i, count;
4fdf60e22b5340fe35f083b9ea5eb3fd1cf2e742Timo Sirainen mech = auth_client_get_available_mechs(auth_client, &count);
4fdf60e22b5340fe35f083b9ea5eb3fd1cf2e742Timo Sirainen for (i = 0; i < count; i++) {
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen /* a) transport is secured
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen b) auth mechanism isn't plaintext
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen c) we allow insecure authentication
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen if ((mech[i].flags & MECH_SEC_PRIVATE) == 0 &&
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen (client->common.secured || disable_plaintext_auth ||
a94936bafd127680184da114c6a177b37ff656e5Timo Sirainen /* @UNSAFE */
a94936bafd127680184da114c6a177b37ff656e5Timo Sirainen "Authentication aborted");
4fdf60e22b5340fe35f083b9ea5eb3fd1cf2e742Timo Sirainen "Don't send unrequested data");
4fdf60e22b5340fe35f083b9ea5eb3fd1cf2e742Timo Sirainen auth_client_request_continue(client->common.auth_request, line);
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen /* clear sensitive data */
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainenstatic int client_handle_args(struct pop3_client *client,
4fdf60e22b5340fe35f083b9ea5eb3fd1cf2e742Timo Sirainen const char *reason = NULL, *host = NULL, *destuser = NULL, *pass = NULL;
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen /* we want to proxy the connection to another server.
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen proxy host=.. [port=..] [destuser=..] pass=.. */
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen if (pop3_proxy_new(client, host, port, destuser, pass) < 0)
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen /* get back to normal client input. */
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen client->io = io_add(client->common.fd, IO_READ,
4fdf60e22b5340fe35f083b9ea5eb3fd1cf2e742Timo Sirainenstatic void sasl_callback(struct client *_client, enum sasl_server_reply reply,
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen struct pop3_client *client = (struct pop3_client *)_client;
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen "Login: ", client->common.virtual_user, NULL));
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen client_send_line(client, "-ERR "AUTH_FAILED_MSG);
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen /* get back to normal client input. */
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen client->io = io_add(client->common.fd, IO_READ,
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen client_destroy(client, "Transmit buffer full");
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen /* continue */
a94936bafd127680184da114c6a177b37ff656e5Timo Sirainenint cmd_auth(struct pop3_client *client, const char *args)
ea37a9aedfc3a6ff5f4ea10bc4eff4ca23f62a15Timo Sirainen const char *mech_name, *p;
252db51b6c0a605163326b3ea5d09e9936ca3b29Timo Sirainen /* Old-style SASL discovery, used by MS Outlook */
for (i = 0; i < count; i++) {
return TRUE;
if (p == NULL) {
return TRUE;
return TRUE;
if (verbose_auth) {
return TRUE;
return TRUE;
return TRUE;
return TRUE;
return TRUE;
if (verbose_auth) {
return TRUE;
if (verbose_auth) {
return TRUE;
if (verbose_auth) {
return TRUE;
return TRUE;
return TRUE;