Mercurial > dovecot > core-2.2
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 |