summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Behlendorf <[email protected]>2011-03-22 11:18:15 -0700
committerBrian Behlendorf <[email protected]>2011-03-22 12:18:44 -0700
commit734fcac78d8c430aeb3731590b77dfcfa6de224f (patch)
tree76cde119b52cb4c9eee1bcb9dfac669199320d13
parent9b0c3b2aa87610690cf6e1a792ff1484274a392d (diff)
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.
-rw-r--r--include/sys/cred.h2
-rw-r--r--module/spl/spl-cred.c136
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);