comparison src/director/login-connection.c @ 22644:2ed6735ffc7a

director: Change request callback to take mail_host parameter This allows accessing the IP address both as struct and as string without any conversions.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sat, 04 Nov 2017 02:05:26 +0200
parents 25af9d4dad59
children 57e7fafb10c5
comparison
equal deleted inserted replaced
22643:6e235143e177 22644:2ed6735ffc7a
9 #include "llist.h" 9 #include "llist.h"
10 #include "strescape.h" 10 #include "strescape.h"
11 #include "master-service.h" 11 #include "master-service.h"
12 #include "director.h" 12 #include "director.h"
13 #include "director-request.h" 13 #include "director-request.h"
14 #include "mail-host.h"
14 #include "auth-connection.h" 15 #include "auth-connection.h"
15 #include "login-connection.h" 16 #include "login-connection.h"
16 17
17 #include <unistd.h> 18 #include <unistd.h>
18 19
130 return FALSE; 131 return FALSE;
131 return TRUE; 132 return TRUE;
132 } 133 }
133 134
134 static void 135 static void
135 login_host_callback(const struct ip_addr *ip, const char *hostname, 136 login_host_callback(const struct mail_host *host, const char *hostname,
136 const char *errormsg, void *context) 137 const char *errormsg, void *context)
137 { 138 {
138 struct login_host_request *request = context; 139 struct login_host_request *request = context;
139 struct director *dir = request->conn->dir; 140 struct director *dir = request->conn->dir;
140 const char *line, *line_params; 141 const char *line, *line_params;
141 unsigned int secs; 142 unsigned int secs;
142 143
143 if (ip == NULL) { 144 if (host == NULL) {
144 if (strncmp(request->line, "OK\t", 3) == 0) 145 if (strncmp(request->line, "OK\t", 3) == 0)
145 line_params = request->line + 3; 146 line_params = request->line + 3;
146 else if (strncmp(request->line, "PASS\t", 5) == 0) 147 else if (strncmp(request->line, "PASS\t", 5) == 0)
147 line_params = request->line + 5; 148 line_params = request->line + 5;
148 else 149 else
151 i_error("director: User %s host lookup failed: %s", 152 i_error("director: User %s host lookup failed: %s",
152 request->username, errormsg); 153 request->username, errormsg);
153 line = t_strconcat("FAIL\t", t_strcut(line_params, '\t'), 154 line = t_strconcat("FAIL\t", t_strcut(line_params, '\t'),
154 "\ttemp", NULL); 155 "\ttemp", NULL);
155 } else if (request->director_proxy_maybe && 156 } else if (request->director_proxy_maybe &&
156 login_host_request_is_self(request, ip)) { 157 login_host_request_is_self(request, &host->ip)) {
157 line = request->line; 158 line = request->line;
158 } else { 159 } else {
159 string_t *str = t_str_new(64); 160 string_t *str = t_str_new(64);
160 161
161 secs = dir->set->director_user_expire / 2; 162 secs = dir->set->director_user_expire / 2;
162 str_printfa(str, "%s\tproxy_refresh=%u\t", request->line, secs); 163 str_printfa(str, "%s\tproxy_refresh=%u\t", request->line, secs);
163 if (hostname == NULL || hostname[0] == '\0') 164 if (hostname == NULL || hostname[0] == '\0')
164 str_printfa(str, "host=%s", net_ip2addr(ip)); 165 str_printfa(str, "host=%s", host->ip_str);
165 else { 166 else {
166 str_printfa(str, "host=%s\thostip=%s", 167 str_printfa(str, "host=%s\thostip=%s",
167 hostname, net_ip2addr(ip)); 168 hostname, host->ip_str);
168 } 169 }
169 line = str_c(str); 170 line = str_c(str);
170 } 171 }
171 login_connection_send_line(request->conn, line); 172 login_connection_send_line(request->conn, line);
172 173