]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib: Moved rawlog dir stat()s to iostream_rawlog_create() internally.
authorTimo Sirainen <tss@iki.fi>
Thu, 26 Jun 2014 17:48:13 +0000 (20:48 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 26 Jun 2014 17:48:13 +0000 (20:48 +0300)
This is required to allow TCP rawlogs to actually work.

src/lib-http/http-client-connection.c
src/lib-imap-client/imapc-connection.c
src/lib-storage/index/pop3c/pop3c-client.c
src/lib/iostream-rawlog.c

index 0381d5b2a42851bea3f6ca0e80776c6872fa3a81..26610af03967cf1e51a84f7dc449b95962b23d7a 100644 (file)
@@ -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);
        }
index 7d0d1d681bf4c0a6944acdc1e927fe583235ebb0..bbf716043eb50696c3e813c8b9d77d77f8d0b413 100644 (file)
@@ -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);
        }
index 948b5f94f9e869f9a3afc4697c47e366c2ec4bfe..966daee9cf5c4662b2c8fb74c52a30d5fbb7a072 100644 (file)
@@ -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);
        }
index 2201c21424d80fdb29cd33721865aab25d2376a3..9a8468666afec9ab766314696392d84997e487c8 100644 (file)
@@ -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);