From 734fcac78d8c430aeb3731590b77dfcfa6de224f Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Tue, 22 Mar 2011 11:18:15 -0700 Subject: [PATCH] Add crgetfsuid()/crgetfsgid() helpers Solaris credentials don't have an fsuid/fsguid field but Linux credentials do. To handle this case the Solaris API is being modestly extended to include the crgetfsuid()/crgetfsgid() helper functions. Addititionally, because the crget*() helpers are implemented identically regardless of HAVE_CRED_STRUCT they have been moved outside the #ifdef to common code. This simplification means we only have one version of the helper to keep to to date. --- include/sys/cred.h | 2 + module/spl/spl-cred.c | 136 ++++++++++++++++++------------------------ 2 files changed, 60 insertions(+), 78 deletions(-) diff --git a/include/sys/cred.h b/include/sys/cred.h index 6f4cde73c..778d05255 100644 --- a/include/sys/cred.h +++ b/include/sys/cred.h @@ -50,9 +50,11 @@ extern void crfree(cred_t *cr); extern uid_t crgetuid(const cred_t *cr); extern uid_t crgetruid(const cred_t *cr); extern uid_t crgetsuid(const cred_t *cr); +extern uid_t crgetfsuid(const cred_t *cr); extern gid_t crgetgid(const cred_t *cr); extern gid_t crgetrgid(const cred_t *cr); extern gid_t crgetsgid(const cred_t *cr); +extern gid_t crgetfsgid(const cred_t *cr); extern int crgetngroups(const cred_t *cr); extern gid_t * crgetgroups(const cred_t *cr); extern int groupmember(gid_t gid, const cred_t *cr); diff --git a/module/spl/spl-cred.c b/module/spl/spl-cred.c index dd5d9da01..ce3425d32 100644 --- a/module/spl/spl-cred.c +++ b/module/spl/spl-cred.c @@ -84,48 +84,6 @@ crfree(cred_t *cr) put_cred((const cred_t *)cr); } -/* Return the effective user id */ -uid_t -crgetuid(const cred_t *cr) -{ - return cr->euid; -} - -/* Return the real user id */ -uid_t -crgetruid(const cred_t *cr) -{ - return cr->uid; -} - -/* Return the saved user id */ -uid_t -crgetsuid(const cred_t *cr) -{ - return cr->suid; -} - -/* Return the effective group id */ -gid_t -crgetgid(const cred_t *cr) -{ - return cr->egid; -} - -/* Return the real group id */ -gid_t -crgetrgid(const cred_t *cr) -{ - return cr->gid; -} - -/* Return the saved group id */ -gid_t -crgetsgid(const cred_t *cr) -{ - return cr->sgid; -} - /* Return the number of supplemental groups */ int crgetngroups(const cred_t *cr) @@ -186,42 +144,6 @@ void crhold(cred_t *cr) { } /* Free a reference on the credential and group info */ void crfree(cred_t *cr) { } -/* Return the effective user id */ -uid_t -crgetuid(const cred_t *cr) { - return cr->euid; -} - -/* Return the effective real id */ -uid_t -crgetruid(const cred_t *cr) { - return cr->uid; -} - -/* Return the effective saved id */ -uid_t -crgetsuid(const cred_t *cr) { - return cr->suid; -} - -/* Return the effective group id */ -gid_t -crgetgid(const cred_t *cr) { - return cr->egid; -} - -/* Return the real group id */ -gid_t -crgetrgid(const cred_t *cr) { - return cr->gid; -} - -/* Return the saved group id */ -gid_t -crgetsgid(const cred_t *cr) { - return cr->sgid; -} - /* Return the number of supplemental groups */ int crgetngroups(const cred_t *cr) @@ -289,14 +211,72 @@ groupmember(gid_t gid, const cred_t *cr) #endif /* HAVE_CRED_STRUCT */ +/* Return the effective user id */ +uid_t +crgetuid(const cred_t *cr) +{ + return cr->euid; +} + +/* Return the real user id */ +uid_t +crgetruid(const cred_t *cr) +{ + return cr->uid; +} + +/* Return the saved user id */ +uid_t +crgetsuid(const cred_t *cr) +{ + return cr->suid; +} + +/* Return the filesystem user id */ +uid_t +crgetfsuid(const cred_t *cr) +{ + return cr->fsuid; +} + +/* Return the effective group id */ +gid_t +crgetgid(const cred_t *cr) +{ + return cr->egid; +} + +/* Return the real group id */ +gid_t +crgetrgid(const cred_t *cr) +{ + return cr->gid; +} + +/* Return the saved group id */ +gid_t +crgetsgid(const cred_t *cr) +{ + return cr->sgid; +} + +/* Return the filesystem group id */ +gid_t +crgetfsgid(const cred_t *cr) +{ + return cr->fsgid; +} + EXPORT_SYMBOL(crhold); EXPORT_SYMBOL(crfree); EXPORT_SYMBOL(crgetuid); EXPORT_SYMBOL(crgetruid); EXPORT_SYMBOL(crgetsuid); +EXPORT_SYMBOL(crgetfsuid); EXPORT_SYMBOL(crgetgid); EXPORT_SYMBOL(crgetrgid); EXPORT_SYMBOL(crgetsgid); +EXPORT_SYMBOL(crgetfsgid); EXPORT_SYMBOL(crgetngroups); EXPORT_SYMBOL(crgetgroups); EXPORT_SYMBOL(groupmember);