diff options
author | Glenn Strauss <gstrauss@gluelogic.com> | 2019-03-16 01:38:16 -0400 |
---|---|---|
committer | Glenn Strauss <gstrauss@gluelogic.com> | 2019-03-16 01:38:29 -0400 |
commit | a78404cfbfbf7355acc061ced402e249fce828ac (patch) | |
tree | 164dcf4a51eda9af67f9bf44ef00a0613ee1192a /src/fdevent.c | |
parent | 97d4c11ba6e0edb4bf2b3722ab236bb0c5f9eb3a (diff) | |
download | lighttpd-git-a78404cfbfbf7355acc061ced402e249fce828ac.tar.gz |
[core] fdevent_mkstemp_append() (shared)
Diffstat (limited to 'src/fdevent.c')
-rw-r--r-- | src/fdevent.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/fdevent.c b/src/fdevent.c index bd19ec68..47f30ef3 100644 --- a/src/fdevent.c +++ b/src/fdevent.c @@ -550,6 +550,28 @@ int fdevent_open_dirname(char *path, int symlinks) { } +int fdevent_mkstemp_append(char *path) { + #ifdef __COVERITY__ + /* POSIX-2008 requires mkstemp create file with 0600 perms */ + umask(0600); + #endif + /* coverity[secure_temp : FALSE] */ + const int fd = mkstemp(path); + if (fd < 0) return fd; + + if (0 != fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_APPEND)) { + /* (should not happen; fd is regular file) */ + int errnum = errno; + close(fd); + errno = errnum; + return -1; + } + + fdevent_setfd_cloexec(fd); + return fd; +} + + int fdevent_accept_listenfd(int listenfd, struct sockaddr *addr, size_t *addrlen) { int fd; socklen_t len = (socklen_t) *addrlen; |