From: Alan T. DeKok Date: Thu, 3 Oct 2024 14:02:52 +0000 (-0400) Subject: add function for common case of mkdir X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48a0e499f943fec9544c10e77ee603e879aa87b4;p=thirdparty%2Ffreeradius-server.git add function for common case of mkdir --- diff --git a/src/lib/util/file.c b/src/lib/util/file.c index 3cd094bcda3..182598e2468 100644 --- a/src/lib/util/file.c +++ b/src/lib/util/file.c @@ -33,6 +33,25 @@ RCSID("$Id$") #include #include +/** Callback for the common case of chown() of the directory. + * + */ +int fr_mkdir_chown(int fd, char const *path, void *uctx) +{ + fr_mkdir_chown_t const *ctx = uctx; + + if ((ctx->uid == (uid_t) -1) && (ctx->gid == (gid_t) -1)) return 0; + + if (fchown(fd, ctx->uid, ctx->gid) < 0) { + fr_strerror_printf("Failed changing ownership on directory \"%s\": %s", + path, fr_syserror(errno)); + return -1; + } + + return 0; +} + + static ssize_t _fr_mkdir(int *fd_out, char *start, char *path, mode_t mode, fr_mkdir_func_t func, void *uctx) { int ret, fd; diff --git a/src/lib/util/file.h b/src/lib/util/file.h index 29d3b16c069..a95d4ecbdde 100644 --- a/src/lib/util/file.h +++ b/src/lib/util/file.h @@ -44,6 +44,13 @@ extern "C" { */ typedef int(*fr_mkdir_func_t)(int fd, char const *path, void *uctx); +typedef struct { + uid_t uid; + gid_t gid; +} fr_mkdir_chown_t; + +int fr_mkdir_chown(int fd, char const *path, void *uctx); + ssize_t fr_mkdir(int *fd_out, char const *path, ssize_t len, mode_t mode, fr_mkdir_func_t func, void *uctx);