return FALSE;
}
-struct client *client_create(int fd_in, int fd_out,
+struct client *client_create(int fd_in, int fd_out, bool unhibernated,
struct event *event, struct mail_user *user,
struct mail_storage_service_user *service_user,
const struct imap_settings *set,
client->v = imap_client_vfuncs;
client->event = event;
event_ref(client->event);
+ client->unhibernated = unhibernated;
client->set = set;
client->smtp_set = smtp_set;
client->service_user = service_user;
bool logged_out:1;
bool disconnected:1;
bool hibernated:1;
+ bool unhibernated:1; /* client was created by unhibernation */
bool destroyed:1;
bool handling_input:1;
bool syncing:1;
/* Create new client with specified input/output handles. socket specifies
if the handle is a socket. */
-struct client *client_create(int fd_in, int fd_out,
+struct client *client_create(int fd_in, int fd_out, bool unhibernated,
struct event *event, struct mail_user *user,
struct mail_storage_service_user *service_user,
const struct imap_settings *set,
void imap_refresh_proctitle_delayed(void);
int client_create_from_input(const struct mail_storage_service_input *input,
- int fd_in, int fd_out, struct client **client_r,
- const char **error_r);
+ int fd_in, int fd_out, bool unhibernated,
+ struct client **client_r, const char **error_r);
#endif
/* NOTE: before client_create_from_input() on failures we need to close
fd_client, but afterward it gets closed by client_destroy() */
ret = client_create_from_input(&input, fd_client, fd_client,
- &imap_client, &error);
+ TRUE, &imap_client, &error);
if (ret < 0) {
e_error(conn->event,
"imap-master(%s): Failed to create client: %s",
}
int client_create_from_input(const struct mail_storage_service_input *input,
- int fd_in, int fd_out,
+ int fd_in, int fd_out, bool unhibernated,
struct client **client_r, const char **error_r)
{
struct mail_storage_service_input service_input;
return -1;
}
- client = client_create(fd_in, fd_out,
+ client = client_create(fd_in, fd_out, unhibernated,
event, mail_user, user, imap_set, smtp_set);
client->userdb_fields = input->userdb_fields == NULL ? NULL :
p_strarray_dup(client->pool, input->userdb_fields);
(void)net_addr2ip(value, &input.local_ip);
if (client_create_from_input(&input, STDIN_FILENO, STDOUT_FILENO,
- &client, &error) < 0)
+ FALSE, &client, &error) < 0)
i_fatal("%s", error);
input_base64 = getenv("CLIENT_INPUT");
&request);
if (client_create_from_input(&input, login_client->fd, login_client->fd,
- &client, &error) < 0) {
+ FALSE, &client, &error) < 0) {
int fd = login_client->fd;
struct ostream *output =
o_stream_create_fd_autoclose(&fd, IO_BLOCK_SIZE);
void imap_refresh_proctitle_delayed(void) { }
int client_create_from_input(const struct mail_storage_service_input *input ATTR_UNUSED,
int fd_in ATTR_UNUSED, int fd_out ATTR_UNUSED,
+ bool unhibernated ATTR_UNUSED,
struct client **client_r ATTR_UNUSED,
const char **error_r ATTR_UNUSED) { return -1; }
struct event *event = event_create(NULL);
int client_fd = dup(dev_null_fd);
- client = client_create(client_fd, client_fd, event,
+ client = client_create(client_fd, client_fd, FALSE, event,
mail_user, service_user,
imap_setting_parser_info.defaults, &smtp_set);
ctx.client = client;