From: Arran Cudbard-Bell Date: Wed, 28 Apr 2021 17:22:39 +0000 (-0500) Subject: Add function for getting a uid from a string X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6bdf62dde19106d922a42eda3ee988da80783c3b;p=thirdparty%2Ffreeradius-server.git Add function for getting a uid from a string Decorate declarations in perm.c --- diff --git a/src/lib/util/perm.c b/src/lib/util/perm.c index 4f5572bbacc..887fc507885 100644 --- a/src/lib/util/perm.c +++ b/src/lib/util/perm.c @@ -307,11 +307,33 @@ int fr_perm_getgrnam(TALLOC_CTX *ctx, struct group **out, char const *name) return 0; } +/** Resolve a user name to a GID + * + * @param[in] ctx TALLOC_CTX for temporary allocations. + * @param[in] out where to write gid. + * @param[in] name of user. + * @return + * - 0 on success. + * - -1 on failure. + */ +int fr_perm_uid_from_str(TALLOC_CTX *ctx, uid_t *out, char const *name) +{ + int ret; + struct passwd *result; + + ret = fr_perm_getpwnam(ctx, &result, name); + if (ret < 0) return -1; + + *out = result->pw_uid; + talloc_free(result); + return 0; +} + /** Resolve a group name to a GID * - * @param ctx TALLOC_CTX for temporary allocations. - * @param name of group. - * @param out where to write gid. + * @param[in] ctx TALLOC_CTX for temporary allocations. + * @param[in] out where to write gid. + * @param[in] name of group. * @return * - 0 on success. * - -1 on failure. diff --git a/src/lib/util/perm.h b/src/lib/util/perm.h index f72b57d09c8..17378333d11 100644 --- a/src/lib/util/perm.h +++ b/src/lib/util/perm.h @@ -35,14 +35,25 @@ extern "C" { #endif void fr_perm_mode_to_str(char out[static 10], mode_t mode); + void fr_perm_mode_to_oct(char out[static 5], mode_t mode); -int fr_perm_getpwuid(TALLOC_CTX *ctx, struct passwd **out, uid_t uid); -int fr_perm_getpwnam(TALLOC_CTX *ctx, struct passwd **out, char const *name); -int fr_perm_getgrgid(TALLOC_CTX *ctx, struct group **out, gid_t gid); -int fr_perm_getgrnam(TALLOC_CTX *ctx, struct group **out, char const *name); -int fr_perm_gid_from_str(TALLOC_CTX *ctx, gid_t *out, char const *name); + +int fr_perm_getpwuid(TALLOC_CTX *ctx, struct passwd **out, uid_t uid) CC_HINT(nonnull(2)); + +int fr_perm_getpwnam(TALLOC_CTX *ctx, struct passwd **out, char const *name) CC_HINT(nonnull(2,3)); + +int fr_perm_getgrgid(TALLOC_CTX *ctx, struct group **out, gid_t gid) CC_HINT(nonnull(2)); + +int fr_perm_getgrnam(TALLOC_CTX *ctx, struct group **out, char const *name) CC_HINT(nonnull(2,3)); + +int fr_perm_uid_from_str(TALLOC_CTX *ctx, uid_t *out, char const *name) CC_HINT(nonnull(2,3)); + +int fr_perm_gid_from_str(TALLOC_CTX *ctx, gid_t *out, char const *name) CC_HINT(nonnull(2,3)); + char *fr_perm_uid_to_str(TALLOC_CTX *ctx, uid_t uid); + char *fr_perm_gid_to_str(TALLOC_CTX *ctx, gid_t gid); + void fr_perm_file_error(int num); #ifdef __cplusplus