imap-client-hibernate.c revision bcb4e51a409d94ae670de96afb8483a4f7855294
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2014-2018 Dovecot authors, see the included COPYING file */
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen#define IMAP_HIBERNATE_SOCKET_NAME "imap-hibernate"
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen#define IMAP_HIBERNATE_HANDSHAKE "VERSION\timap-hibernate\t1\t0\n"
4ded3d18fa391ae5908f9834f1390cf55e8c99d5Timo Sirainenstatic int imap_hibernate_handshake(int fd, const char *path)
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen } else if ((ret = read(fd, buf, sizeof(buf)-1)) < 0) {
3f442e48e5708f2f80cc937cd722c56a4fbd1c70Timo Sirainen if (version_string_verify(buf, "imap-hibernate", 1))
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen i_error("%s sent invalid VERSION handshake: %s", path, buf);
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainenstatic void imap_hibernate_write_cmd(struct client *client, string_t *cmd,
b3a069922c8150a1cb14ec7683444f60dee98b55Timo Sirainen const char *tag;
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen tag = client->command_queue == NULL ? NULL : client->command_queue->tag;
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen str_append_tabescaped(cmd, user->set->mail_log_prefix);
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen str_printfa(cmd, "\tpeer_dev_major=%lu\tpeer_dev_minor=%lu\tpeer_ino=%llu",
4307c886579381dbb1897ea1388ae6978c96f560Timo Sirainen str_append_tabescaped(cmd, client->session_id);
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen str_printfa(cmd, "\tlip=%s", net_ip2addr(user->conn.local_ip));
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen str_printfa(cmd, "\trip=%s", net_ip2addr(user->conn.remote_ip));
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen unsigned int i;
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen for (i = 0; client->userdb_fields[i] != NULL; i++) {
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen str_append_tabescaped(userdb_fields, client->userdb_fields[i]);
128ab2c52a29068be87e12ab5aebbb8fdc933adfTimo Sirainen str_append_tabescaped(cmd, str_c(userdb_fields));
033e315cc9396332a09b98bee7824b8e6641c2fcTimo Sirainen str_printfa(cmd, "\tuid=%s", dec2str(user->uid));
033e315cc9396332a09b98bee7824b8e6641c2fcTimo Sirainen str_printfa(cmd, "\tgid=%s", dec2str(user->gid));
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen str_append_tabescaped(cmd, client_stats(client));
e156adefc1260d31a145df2f5e9b3c82050d4163Timo Sirainen strcasecmp(client->command_queue->name, "IDLE") == 0)
} else if (ret == 0) {
const char *path;
int fd;
alarm(0);
if (ret < 0) {
const char *error;
return FALSE;
return FALSE;
if (ret < 0) {
&error);
error);
if (ret > 0) {
if (ret > 0) {
return ret > 0;