client->fd_out = fd_out;
client->remote_ip = conn->remote_ip;
client->remote_port = conn->remote_port;
- (void)net_getsockname(conn->fd, &client->local_ip, &client->local_port);
+ client->local_ip = conn->local_ip;
+ client->local_port = conn->local_port;
client->input = i_stream_create_fd(fd_in, CLIENT_MAX_INPUT_SIZE, FALSE);
client->output = o_stream_create_fd(fd_out, (size_t)-1, FALSE);
struct client *
client_create(int fd, bool ssl, pool_t pool,
+ const struct master_service_connection *conn,
const struct login_settings *set,
const struct master_service_ssl_settings *ssl_set,
- void **other_sets,
- const struct ip_addr *local_ip, const struct ip_addr *remote_ip)
+ void **other_sets)
{
struct client *client;
client->pool = pool;
client->set = set;
client->ssl_set = ssl_set;
- client->real_local_ip = client->local_ip = *local_ip;
- client->real_remote_ip = client->ip = *remote_ip;
+
client->fd = fd;
client->tls = ssl;
+
+ client->local_ip = conn->local_ip;
+ client->local_port = conn->local_port;
+ client->ip = conn->remote_ip;
+ client->remote_port = conn->remote_port;
+ client->real_local_ip = conn->real_local_ip;
+ client->real_local_port = conn->real_local_port;
+ client->real_remote_ip = conn->real_remote_ip;
+ client->real_remote_port = conn->real_remote_port;
+
client->trusted = client_is_trusted(client);
client->secured = ssl || client->trusted ||
- net_ip_compare(remote_ip, local_ip);
+ net_ip_compare(&conn->real_remote_ip, &conn->real_local_ip);
client->proxy_ttl = LOGIN_PROXY_TTL;
if (last_client == NULL)
#define AUTH_MASTER_WAITING_MSG \
"Waiting for authentication master process to respond.."
+struct master_service_connection;
+
enum client_disconnect_reason {
CLIENT_DISCONNECT_TIMEOUT,
CLIENT_DISCONNECT_SYSTEM_SHUTDOWN,
struct client *
client_create(int fd, bool ssl, pool_t pool,
+ const struct master_service_connection *conn,
const struct login_settings *set,
const struct master_service_ssl_settings *ssl_set,
- void **other_sets,
- const struct ip_addr *local_ip, const struct ip_addr *remote_ip);
+ void **other_sets);
void client_destroy(struct client *client, const char *reason);
void client_destroy_success(struct client *client, const char *reason);
void client_destroy_internal_failure(struct client *client);
{
struct client *client;
struct ssl_proxy *proxy;
- struct ip_addr local_ip;
const struct login_settings *set;
const struct master_service_ssl_settings *ssl_set;
- unsigned int local_port;
pool_t pool;
int fd_ssl;
void **other_sets;
- if (net_getsockname(conn->fd, &local_ip, &local_port) < 0) {
- memset(&local_ip, 0, sizeof(local_ip));
- local_port = 0;
- }
-
pool = pool_alloconly_create("login client", 8*1024);
- set = login_settings_read(pool, &local_ip,
+ set = login_settings_read(pool, &conn->local_ip,
&conn->remote_ip, NULL, &ssl_set, &other_sets);
if (!ssl_connections && !conn->ssl) {
- client = client_create(conn->fd, FALSE, pool,
- set, ssl_set, other_sets,
- &local_ip, &conn->remote_ip);
+ client = client_create(conn->fd, FALSE, pool, conn,
+ set, ssl_set, other_sets);
} else {
fd_ssl = ssl_proxy_alloc(conn->fd, &conn->remote_ip, pool,
set, ssl_set, &proxy);
return;
}
- client = client_create(fd_ssl, TRUE, pool,
- set, ssl_set, other_sets,
- &local_ip, &conn->remote_ip);
+ client = client_create(fd_ssl, TRUE, pool, conn,
+ set, ssl_set, other_sets);
client->ssl_proxy = proxy;
ssl_proxy_set_client(proxy, client);
ssl_proxy_start(proxy);
}
- client->real_remote_port = client->remote_port = conn->remote_port;
- client->real_local_port = client->local_port = local_port;
-
if (auth_client_to != NULL)
timeout_remove(&auth_client_to);
}