pop3-proxy.c revision 9362c5623da599e4bb6ba8e9780c12b01ba6ce2d
a8c5a86d183db25a57bf193c06b41e092ec2e151Timo Sirainen/* Copyright (C) 2004 Timo Sirainen */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenstatic void proxy_input(struct istream *input, struct ostream *output,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen /* remote authentication failed, we're just
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen freeing the proxy */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen /* failed for some reason, probably server disconnected */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen "-ERR [IN-USE] Temporary login failure.");
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen /* buffer full */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen i_error("pop-proxy(%s): Remote input buffer full",
b49aa341d28c0eec1229e30baa2f89d5bae52ff8Phil Carmody /* disconnected */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen client_destroy(client, "Proxy: Remote disconnected");
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen /* this is a banner */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen "Remote returned invalid banner: %s",
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen /* send USER command */
16cb5d65265dd0b216542803fd80c4b999ae118eTimo Sirainen (void)o_stream_send(output, str_data(str), str_len(str));
56d1345c43bbd28c36b7faa85e4163bd9e874290Timo Sirainen /* USER successful, send PASS */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen /* Login successful. Send this line to client. */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen (void)o_stream_send_str(client->output, line);
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen (void)o_stream_send(client->output, "\r\n", 2);
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen login_proxy_detach(client->proxy, client->input,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen /* Login failed. Send our own failure reply so client can't
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen figure out if user exists or not just by looking at the
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen reply string. */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen client_send_line(client, "-ERR "AUTH_FAILED_MSG);
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen /* allow client input again */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen client->io = io_add(client->common.fd, IO_READ,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainenint pop3_proxy_new(struct pop3_client *client, const char *host,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen unsigned int port, const char *user, const char *password)
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen /* connection_queue_add() decided that we were the oldest
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen connection and killed us. */
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen client->proxy = login_proxy_new(&client->common, host, port,
01435c38e7d671d5a892c4b802cfb204881cd454Timo Sirainen /* disable input until authentication is finished */