70
70
(void)o_stream_sendv(conn->output, iov, N_ELEMENTS(iov));
73
static void login_host_callback(const struct ip_addr *ip, void *context)
74
login_host_callback(const struct ip_addr *ip, const char *errormsg,
75
77
struct login_host_request *request = context;
76
78
struct director *dir = request->conn->dir;
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),
87
i_assert(strncmp(request->line, "OK\t", 3) == 0);
88
line = t_strconcat("FAIL\t",
89
t_strcut(request->line + 3, '\t'),
92
login_connection_send_line(request->conn, line);
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);
87
i_assert(strncmp(request->line, "OK\t", 3) == 0);
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'),
94
login_connection_send_line(request->conn, line);
95
96
login_connection_unref(&request->conn);
97
i_free(request->username);
96
98
i_free(request->line);
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);
159
162
conn->refcount++;
160
163
director_request(conn->dir, username, login_host_callback, request);