From: Alejandro Colomar Date: Wed, 4 Dec 2024 12:47:37 +0000 (+0100) Subject: lib/fs/mkstemp/: mkostemp(): Split API from fmkomstemp() X-Git-Tag: 4.18.0-rc1~26 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5fc6509dcb2305f8738f942c65e7bdaa754fce9c;p=thirdparty%2Fshadow.git lib/fs/mkstemp/: mkostemp(): Split API from fmkomstemp() This reduces the complexity of fmkomstemp(). Signed-off-by: Alejandro Colomar --- diff --git a/lib/Makefile.am b/lib/Makefile.am index 0cc393104..d9641b946 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -102,6 +102,8 @@ libshadow_la_SOURCES = \ fputsx.c \ fs/mkstemp/fmkomstemp.c \ fs/mkstemp/fmkomstemp.h \ + fs/mkstemp/mkomstemp.c \ + fs/mkstemp/mkomstemp.h \ fs/readlink/areadlink.c \ fs/readlink/areadlink.h \ fs/readlink/readlinknul.c \ diff --git a/lib/fs/mkstemp/fmkomstemp.h b/lib/fs/mkstemp/fmkomstemp.h index 4770bc92a..c0649d99e 100644 --- a/lib/fs/mkstemp/fmkomstemp.h +++ b/lib/fs/mkstemp/fmkomstemp.h @@ -9,28 +9,26 @@ #include #include -#include -#include #include #include +#include "fs/mkstemp/mkomstemp.h" + inline FILE *fmkomstemp(char *template, unsigned int flags, mode_t m); +// FILE make with-open(2)-flags with-mode secure temporary inline FILE * fmkomstemp(char *template, unsigned int flags, mode_t m) { int fd; FILE *fp; - fd = mkostemp(template, flags); + fd = mkomstemp(template, flags, m); if (fd == -1) return NULL; - if (fchmod(fd, m) == -1) - goto fail; - fp = fdopen(fd, "w"); if (fp == NULL) goto fail; diff --git a/lib/fs/mkstemp/mkomstemp.c b/lib/fs/mkstemp/mkomstemp.c new file mode 100644 index 000000000..9c6e3206c --- /dev/null +++ b/lib/fs/mkstemp/mkomstemp.c @@ -0,0 +1,12 @@ +// SPDX-FileCopyrightText: 2024, Alejandro Colomar +// SPDX-License-Identifier: BSD-3-Clause + + +#include + +#include "fs/mkstemp/mkomstemp.h" + +#include + + +extern inline int mkomstemp(char *template, unsigned int flags, mode_t m); diff --git a/lib/fs/mkstemp/mkomstemp.h b/lib/fs/mkstemp/mkomstemp.h new file mode 100644 index 000000000..6ba5aa348 --- /dev/null +++ b/lib/fs/mkstemp/mkomstemp.h @@ -0,0 +1,41 @@ +// SPDX-FileCopyrightText: 2024, Alejandro Colomar +// SPDX-License-Identifier: BSD-3-Clause + + +#ifndef SHADOW_INCLUDE_LIB_FS_MKSTEMP_MKOMSTEMP_H_ +#define SHADOW_INCLUDE_LIB_FS_MKSTEMP_MKOMSTEMP_H_ + + +#include + +#include +#include +#include +#include + + +inline int mkomstemp(char *template, unsigned int flags, mode_t m); + + +// make with-open(2)-like-flags with-mode secure temporary +inline int +mkomstemp(char *template, unsigned int flags, mode_t m) +{ + int fd; + + fd = mkostemp(template, flags); + if (fd == -1) + return -1; + + if (fchmod(fd, m) == -1) + goto fail; + + return fd; +fail: + close(fd); + unlink(template); + return -1; +} + + +#endif // include guard