/* Setup stdin/stdout */
- if (in_fd < 0) {
- in_fd = open("/dev/null", O_RDONLY);
-
- if (in_fd == -1)
- i_fatal("open(/dev/null) failed: %m");
- }
- if (out_fd < 0) {
- out_fd = open("/dev/null", O_WRONLY);
-
- if (out_fd == -1)
- i_fatal("open(/dev/null) failed: %m");
- }
+ if (in_fd < 0)
+ in_fd = dev_null_fd;
+ if (out_fd < 0)
+ out_fd = dev_null_fd;
if (in_fd != STDIN_FILENO && dup2(in_fd, STDIN_FILENO) < 0)
i_fatal("dup2(stdin) failed: %m");
if (out_fd != STDOUT_FILENO && dup2(out_fd, STDOUT_FILENO) < 0)
i_fatal("dup2(stdout) failed: %m");
- if (in_fd != STDIN_FILENO && close(in_fd) < 0)
+ if (in_fd != STDIN_FILENO && in_fd != dev_null_fd && close(in_fd) < 0)
i_error("close(in_fd) failed: %m");
- if (out_fd != STDOUT_FILENO && (out_fd != in_fd) && close(out_fd) < 0)
+ if (out_fd != STDOUT_FILENO && out_fd != dev_null_fd &&
+ (out_fd != in_fd) && close(out_fd) < 0)
i_error("close(out_fd) failed: %m");
/* Drop stderr if requested */
if (drop_stderr) {
- int err_fd = open("/dev/null", O_WRONLY);
- if (err_fd == -1)
- i_fatal("open(/dev/null) failed: %m");
- if (err_fd != STDERR_FILENO) {
- if (dup2(err_fd, STDERR_FILENO) < 0)
- i_fatal("dup2(stderr) failed: %m");
- if (close(err_fd) < 0)
- i_error("close(err_fd) failed: %m");
- }
+ if (dup2(dev_null_fd, STDERR_FILENO) < 0)
+ i_fatal("dup2(stderr) failed: %m");
}
/* Setup extra fds */
return dlopen(path, flags);
#else
void *handle;
- int fd, fd_null;
+ int fd;
/* OpenBSD likes to print all "undefined symbol" errors to stderr.
Hide them by sending them to /dev/null. */
- fd_null = open("/dev/null", O_WRONLY);
- if (fd_null == -1)
- i_fatal("open(/dev/null) failed: %m");
fd = dup(STDERR_FILENO);
if (fd == -1)
i_fatal("dup() failed: %m");
- if (dup2(fd_null, STDERR_FILENO) < 0)
+ if (dup2(dev_null_fd, STDERR_FILENO) < 0)
i_fatal("dup2() failed: %m");
handle = dlopen(path, flags);
if (dup2(fd, STDERR_FILENO) < 0)
i_fatal("dup2() failed: %m");
if (close(fd) < 0)
i_error("close() failed: %m");
- if (close(fd_null) < 0)
- i_error("close() failed: %m");
return handle;
#endif
}
extern gid_t master_gid;
extern bool core_dumps_disabled;
extern const char *ssl_manual_key_password;
-extern int null_fd, global_master_dead_pipe_fd[2];
+extern int global_master_dead_pipe_fd[2];
extern struct service_list *services;
extern bool startup_finished;
gid_t master_gid;
bool core_dumps_disabled;
const char *ssl_manual_key_password;
-int null_fd, global_master_dead_pipe_fd[2];
+int global_master_dead_pipe_fd[2];
struct service_list *services;
bool startup_finished = FALSE;
i_fatal("Unknown argument: --%s", argv[optind]);
}
- null_fd = open("/dev/null", O_WRONLY);
- if (null_fd == -1)
- i_fatal("Can't open /dev/null: %m");
- fd_close_on_exec(null_fd, TRUE);
- i_assert(null_fd > STDERR_FILENO);
-
if (pipe(global_master_dead_pipe_fd) < 0)
i_fatal("pipe() failed: %m");
fd_close_on_exec(global_master_dead_pipe_fd[0], TRUE);
t_askpass("Give the password for SSL keys: ");
}
- if (dup2(null_fd, STDIN_FILENO) < 0)
- i_fatal("dup2(null_fd) failed: %m");
- if (!foreground && dup2(null_fd, STDOUT_FILENO) < 0)
- i_fatal("dup2(null_fd) failed: %m");
+ if (dup2(dev_null_fd, STDIN_FILENO) < 0)
+ i_fatal("dup2(dev_null_fd) failed: %m");
+ if (!foreground && dup2(dev_null_fd, STDOUT_FILENO) < 0)
+ i_fatal("dup2(dev_null_fd) failed: %m");
pidfile_path =
i_strconcat(set->base_dir, "/"MASTER_PID_FILE_NAME, NULL);
case SERVICE_TYPE_LOG:
case SERVICE_TYPE_ANVIL:
case SERVICE_TYPE_CONFIG:
- dup2_append(&dups, null_fd, MASTER_ANVIL_FD);
+ dup2_append(&dups, dev_null_fd, MASTER_ANVIL_FD);
break;
case SERVICE_TYPE_UNKNOWN:
case SERVICE_TYPE_LOGIN: