pop3-proxy.c revision d7cd49f01fad7c87c5a0865ebf54a548275e9fee
5f5870385cff47efd2f58e7892f251cf13761528Timo Sirainen/* Copyright (C) 2004 Timo Sirainen */
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainenstatic void proxy_input(struct istream *input, struct ostream *output,
f7539a17ea306191b53b8f5e752e228937df9ec3Timo Sirainen /* remote authentication failed, we're just
f7539a17ea306191b53b8f5e752e228937df9ec3Timo Sirainen freeing the proxy */
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen /* we came here from client_destroy() */
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen /* failed for some reason, probably server disconnected */
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen "-ERR [IN-USE] Temporary login failure.");
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen /* buffer full */
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen i_error("pop-proxy(%s): Remote input buffer full",
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen /* disconnected */
d22301419109ed4a38351715e6760011421dadecTimo Sirainen client_destroy(client, "Proxy: Remote disconnected");
d22301419109ed4a38351715e6760011421dadecTimo Sirainen /* this is a banner */
1d2b188f0eedc3cab6e27ceac5425a037f38042eTimo Sirainen "Remote returned invalid banner: %s",
1d2b188f0eedc3cab6e27ceac5425a037f38042eTimo Sirainen /* send USER command */
b42697a5749b85659a24316d97f1c208d469e4e8Timo Sirainen (void)o_stream_send(output, str_data(str), str_len(str));
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen /* USER successful, send PASS */
9ffdc9d18870acef2e4dde99715d8528ff4b080dTimo Sirainen /* Login successful. Send this line to client. */
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen (void)o_stream_send_str(client->output, line);
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen (void)o_stream_send(client->output, "\r\n", 2);
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen msg = t_strdup_printf("proxy(%s): started proxying to %s:%u",
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen login_proxy_detach(client->proxy, client->input,
dca6d617a23e3f93af3b8df59acb46478179fe55Timo Sirainen /* Login failed. Send our own failure reply so client can't
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen figure out if user exists or not just by looking at the
1108376e39a19912e8394e64e19b1bc6f6691cf6Timo Sirainen reply string. */
1d2b188f0eedc3cab6e27ceac5425a037f38042eTimo Sirainen client_send_line(client, "-ERR "AUTH_FAILED_MSG);
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen /* allow client input again */
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen client->io = io_add(client->common.fd, IO_READ,
c0d069950af1dbc6a4e5c3de3bf2e437796e3ae0Timo Sirainenint pop3_proxy_new(struct pop3_client *client, const char *host,
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen unsigned int port, const char *user, const char *password)
e3aeeb634245e80d4f643f8d2eea11d6b72336d8Timo Sirainen /* connection_queue_add() decided that we were the oldest
c6a57378d3c54988f525f81e19c0c5d132a0770dTimo Sirainen connection and killed us. */