}
static void
-service_process_setup_environment(struct service *service, unsigned int uid)
+service_process_setup_environment(struct service *service, unsigned int uid,
+ const char *hostdomain)
{
master_service_env_clean();
}
env_put(t_strdup_printf(MASTER_UID_ENV"=%u", uid));
env_put(t_strdup_printf(MY_HOSTNAME_ENV"=%s", my_hostname));
- env_put(t_strdup_printf(MY_HOSTDOMAIN_ENV"=%s", my_hostdomain()));
+ env_put(t_strdup_printf(MY_HOSTDOMAIN_ENV"=%s", hostdomain));
if (!service->set->master_set->version_ignore)
env_put(MASTER_DOVECOT_VERSION_ENV"="PACKAGE_VERSION);
static unsigned int uid_counter = 0;
struct service_process *process;
unsigned int uid = ++uid_counter;
+ const char *hostdomain;
pid_t pid;
bool process_forked;
new processes now */
return NULL;
}
+ /* look this up before fork()ing so that it gets cached for all the
+ future lookups. */
+ hostdomain = my_hostdomain();
if (service->type == SERVICE_TYPE_ANVIL &&
service_anvil_global->pid != 0) {
}
if (pid == 0) {
/* child */
- service_process_setup_environment(service, uid);
+ service_process_setup_environment(service, uid, hostdomain);
service_reopen_inet_listeners(service);
service_dup_fds(service);
drop_privileges(service);