~james-page/ubuntu/raring/dovecot/autopkgtest

« back to all changes in this revision

Viewing changes to src/director/login-connection.c

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2012-06-11 11:11:54 UTC
  • mfrom: (1.15.2) (4.1.27 sid)
  • Revision ID: package-import@ubuntu.com-20120611111154-678cwbdj6ktgsv1h
Tags: 1:2.1.7-1ubuntu1
* Merge from Debian unstable, remaining changes:
  + Add mail-stack-delivery package:
    - Update d/rules
    - d/control: convert existing dovecot-postfix package to a dummy
      package and add new mail-stack-delivery package.
    - Update maintainer scripts.
    - Rename d/dovecot-postfix.* to debian/mail-stack-delivery.*
    - d/mail-stack-delivery.preinst: Move previously installed backups and
      config files to a new package namespace.
    - d/mail-stack-delivery.prerm: Added to handle downgrades.
  + Use Snakeoil SSL certificates by default:
    - d/control: Depend on ssl-cert.
    - d/dovecot-core.postinst: Relax grep for SSL_* a bit.
  + Add autopkgtest to debian/tests/*.
  + Add ufw integration:
    - d/dovecot-core.ufw.profile: new ufw profile.
    - d/rules: install profile in dovecot-core.
    - d/control: dovecot-core - suggest ufw.
  + d/{control,rules}: enable PIE hardening.
  + d/dovecot-core.dirs: Added usr/share/doc/dovecot-core
  + Add apport hook:
    - d/rules, d/source_dovecot.py
  + Add upstart job:
    - d/rules, d/dovecot-core.dovecot.upstart, d/control,
      d/dovecot-core.dirs, dovecot-imapd.{postrm, postinst, prerm},
      d/dovecot-pop3d.{postinst, postrm, prerm}.
      d/mail-stack-deliver.postinst: Convert init script to upstart.
  + d/control: Added Pre-Depends: dpkg (>= 1.15.6) to dovecot-dbg to support
    xz compression in Ubuntu.
  + d/control: Demote dovecot-common Recommends: to Suggests: to prevent
    install of extra packages on upgrade.
  + d/patches/dovecot-drac.patch: Updated with version for dovecot >= 2.0.0.
  + d/control: Drop B-D on systemd.
* Dropped changes:
  + d/patches/fix-racey-restart.patch: part of 2.1.x, no longer required.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* Copyright (c) 2010-2011 Dovecot authors, see the included COPYING file */
 
1
/* Copyright (c) 2010-2012 Dovecot authors, see the included COPYING file */
2
2
 
3
3
#include "lib.h"
4
4
#include "ioloop.h"
30
30
 
31
31
struct login_host_request {
32
32
        struct login_connection *conn;
33
 
        char *line;
 
33
        char *line, *username;
34
34
};
35
35
 
36
36
static struct login_connection *login_connections;
70
70
        (void)o_stream_sendv(conn->output, iov, N_ELEMENTS(iov));
71
71
}
72
72
 
73
 
static void login_host_callback(const struct ip_addr *ip, void *context)
 
73
static void
 
74
login_host_callback(const struct ip_addr *ip, const char *errormsg,
 
75
                    void *context)
74
76
{
75
77
        struct login_host_request *request = context;
76
78
        struct director *dir = request->conn->dir;
77
79
        const char *line;
78
80
        unsigned int secs;
79
81
 
80
 
        T_BEGIN {
81
 
                if (ip != NULL) {
82
 
                        secs = dir->set->director_user_expire / 2;
83
 
                        line = t_strdup_printf("%s\thost=%s\tproxy_refresh=%u",
84
 
                                               request->line, net_ip2addr(ip),
85
 
                                               secs);
86
 
                } else {
87
 
                        i_assert(strncmp(request->line, "OK\t", 3) == 0);
88
 
                        line = t_strconcat("FAIL\t",
89
 
                                           t_strcut(request->line + 3, '\t'),
90
 
                                           "\ttemp", NULL);
91
 
                }
92
 
                login_connection_send_line(request->conn, line);
93
 
        } T_END;
 
82
        if (ip != NULL) {
 
83
                secs = dir->set->director_user_expire / 2;
 
84
                line = t_strdup_printf("%s\thost=%s\tproxy_refresh=%u",
 
85
                                       request->line, net_ip2addr(ip), secs);
 
86
        } else {
 
87
                i_assert(strncmp(request->line, "OK\t", 3) == 0);
 
88
 
 
89
                i_error("director: User %s host lookup failed: %s",
 
90
                        request->username, errormsg);
 
91
                line = t_strconcat("FAIL\t", t_strcut(request->line + 3, '\t'),
 
92
                                   "\ttemp", NULL);
 
93
        }
 
94
        login_connection_send_line(request->conn, line);
94
95
 
95
96
        login_connection_unref(&request->conn);
 
97
        i_free(request->username);
96
98
        i_free(request->line);
97
99
        i_free(request);
98
100
}
119
121
        }
120
122
 
121
123
        /* OK <id> [<parameters>] */
122
 
        args = t_strsplit(line_params, "\t");
 
124
        args = t_strsplit_tab(line_params);
123
125
        if (*args != NULL) {
124
126
                /* we should always get here, but in case we don't just
125
127
                   forward as-is and let login process handle the error. */
155
157
        request = i_new(struct login_host_request, 1);
156
158
        request->conn = conn;
157
159
        request->line = i_strdup(line);
 
160
        request->username = i_strdup(username);
158
161
 
159
162
        conn->refcount++;
160
163
        director_request(conn->dir, username, login_host_callback, request);