From: Timo Sirainen Date: Thu, 26 Jun 2014 17:48:13 +0000 (+0300) Subject: lib: Moved rawlog dir stat()s to iostream_rawlog_create() internally. X-Git-Tag: 2.2.14.rc1~349 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f8e6e85ab508e80a66f323390f8f4e2edfff2730;p=thirdparty%2Fdovecot%2Fcore.git lib: Moved rawlog dir stat()s to iostream_rawlog_create() internally. This is required to allow TCP rawlogs to actually work. --- diff --git a/src/lib-http/http-client-connection.c b/src/lib-http/http-client-connection.c index 0381d5b2a4..26610af039 100644 --- a/src/lib-http/http-client-connection.c +++ b/src/lib-http/http-client-connection.c @@ -769,8 +769,6 @@ http_client_connection_start_tunnel(struct http_client_connection **_conn, static void http_client_connection_ready(struct http_client_connection *conn) { - struct stat st; - /* connected */ conn->connected = TRUE; if (conn->to_connect != NULL && @@ -783,8 +781,7 @@ http_client_connection_ready(struct http_client_connection *conn) http_client_peer_connection_success(conn->peer); /* start raw log */ - if (conn->client->set.rawlog_dir != NULL && - stat(conn->client->set.rawlog_dir, &st) == 0) { + if (conn->client->set.rawlog_dir != NULL) { iostream_rawlog_create(conn->client->set.rawlog_dir, &conn->conn.input, &conn->conn.output); } diff --git a/src/lib-imap-client/imapc-connection.c b/src/lib-imap-client/imapc-connection.c index 7d0d1d681b..bbf716043e 100644 --- a/src/lib-imap-client/imapc-connection.c +++ b/src/lib-imap-client/imapc-connection.c @@ -1185,7 +1185,6 @@ static int imapc_connection_ssl_handshaked(const char **error_r, void *context) static int imapc_connection_ssl_init(struct imapc_connection *conn) { struct ssl_iostream_settings ssl_set; - struct stat st; const char *error; if (conn->client->ssl_ctx == NULL) { @@ -1230,8 +1229,7 @@ static int imapc_connection_ssl_init(struct imapc_connection *conn) return -1; } - if (*conn->client->set.rawlog_dir != '\0' && - stat(conn->client->set.rawlog_dir, &st) == 0) { + if (*conn->client->set.rawlog_dir != '\0') { iostream_rawlog_create(conn->client->set.rawlog_dir, &conn->input, &conn->output); } @@ -1315,7 +1313,6 @@ static void imapc_connection_reset_idle(struct imapc_connection *conn) static void imapc_connection_connect_next_ip(struct imapc_connection *conn) { const struct ip_addr *ip; - struct stat st; int fd; i_assert(conn->client->set.max_idle_time > 0); @@ -1333,8 +1330,7 @@ static void imapc_connection_connect_next_ip(struct imapc_connection *conn) o_stream_set_no_error_handling(conn->output, TRUE); if (*conn->client->set.rawlog_dir != '\0' && - conn->client->set.ssl_mode != IMAPC_CLIENT_SSL_MODE_IMMEDIATE && - stat(conn->client->set.rawlog_dir, &st) == 0) { + conn->client->set.ssl_mode != IMAPC_CLIENT_SSL_MODE_IMMEDIATE) { iostream_rawlog_create(conn->client->set.rawlog_dir, &conn->input, &conn->output); } diff --git a/src/lib-storage/index/pop3c/pop3c-client.c b/src/lib-storage/index/pop3c/pop3c-client.c index 948b5f94f9..966daee9cf 100644 --- a/src/lib-storage/index/pop3c/pop3c-client.c +++ b/src/lib-storage/index/pop3c/pop3c-client.c @@ -441,7 +441,6 @@ static int pop3c_client_ssl_handshaked(const char **error_r, void *context) static int pop3c_client_ssl_init(struct pop3c_client *client) { struct ssl_iostream_settings ssl_set; - struct stat st; const char *error; if (client->ssl_ctx == NULL) { @@ -485,8 +484,7 @@ static int pop3c_client_ssl_init(struct pop3c_client *client) return -1; } - if (*client->set.rawlog_dir != '\0' && - stat(client->set.rawlog_dir, &st) == 0) { + if (*client->set.rawlog_dir != '\0') { iostream_rawlog_create(client->set.rawlog_dir, &client->input, &client->output); } @@ -517,8 +515,6 @@ static void pop3c_client_connected(struct pop3c_client *client) static void pop3c_client_connect_ip(struct pop3c_client *client) { - struct stat st; - client->fd = net_connect_ip(&client->ip, client->set.port, NULL); if (client->fd == -1) { pop3c_client_disconnect(client); @@ -532,8 +528,7 @@ static void pop3c_client_connect_ip(struct pop3c_client *client) o_stream_set_no_error_handling(client->output, TRUE); if (*client->set.rawlog_dir != '\0' && - client->set.ssl_mode != POP3C_CLIENT_SSL_MODE_IMMEDIATE && - stat(client->set.rawlog_dir, &st) == 0) { + client->set.ssl_mode != POP3C_CLIENT_SSL_MODE_IMMEDIATE) { iostream_rawlog_create(client->set.rawlog_dir, &client->input, &client->output); } diff --git a/src/lib/iostream-rawlog.c b/src/lib/iostream-rawlog.c index 2201c21424..9a8468666a 100644 --- a/src/lib/iostream-rawlog.c +++ b/src/lib/iostream-rawlog.c @@ -214,10 +214,16 @@ int iostream_rawlog_create(const char *dir, struct istream **input, { static unsigned int counter = 0; const char *timestamp, *prefix; + struct stat st; int ret; if ((ret = iostream_rawlog_try_create_tcp(dir, input, output)) != 0) return ret < 0 ? -1 : 0; + if (stat(dir, &st) < 0) { + if (errno != ENOENT && errno != EACCES) + i_error("rawlog: stat(%s) failed: %m", dir); + return -1; + } timestamp = t_strflocaltime("%Y%m%d-%H%M%S", ioloop_time);