Use fcntl and FD_CLOEXEC if O_CLOEXEC is undefined

Same reported at #87 but at src/shrpx_config.cc src/instead of util.cc
This commit is contained in:
acesso 2015-01-22 11:20:16 -03:00 committed by Tatsuhiro Tsujikawa
parent 064bfcc9d2
commit 7ea8037ee1
1 changed files with 9 additions and 0 deletions

View File

@ -242,8 +242,17 @@ read_tls_ticket_key_file(const std::vector<std::string> &files) {
} }
FILE *open_file_for_write(const char *filename) { FILE *open_file_for_write(const char *filename) {
#if defined O_CLOEXEC
auto fd = open(filename, O_WRONLY | O_CLOEXEC | O_CREAT | O_TRUNC, auto fd = open(filename, O_WRONLY | O_CLOEXEC | O_CREAT | O_TRUNC,
S_IRUSR | S_IWUSR); S_IRUSR | S_IWUSR);
#else
auto fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
// We get race condition if execve is called at the same time.
if (fd != -1) {
util::make_socket_closeonexec(fd);
}
#endif
if (fd == -1) { if (fd == -1) {
LOG(ERROR) << "Failed to open " << filename LOG(ERROR) << "Failed to open " << filename
<< " for writing. Cause: " << strerror(errno); << " for writing. Cause: " << strerror(errno);