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.
This commit is contained in:
Brian Behlendorf 2011-03-22 11:18:15 -07:00
parent 9b0c3b2aa8
commit 734fcac78d
2 changed files with 60 additions and 78 deletions

View File

@ -50,9 +50,11 @@ extern void crfree(cred_t *cr);
extern uid_t crgetuid(const cred_t *cr); extern uid_t crgetuid(const cred_t *cr);
extern uid_t crgetruid(const cred_t *cr); extern uid_t crgetruid(const cred_t *cr);
extern uid_t crgetsuid(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 crgetgid(const cred_t *cr);
extern gid_t crgetrgid(const cred_t *cr); extern gid_t crgetrgid(const cred_t *cr);
extern gid_t crgetsgid(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 int crgetngroups(const cred_t *cr);
extern gid_t * crgetgroups(const cred_t *cr); extern gid_t * crgetgroups(const cred_t *cr);
extern int groupmember(gid_t gid, const cred_t *cr); extern int groupmember(gid_t gid, const cred_t *cr);

View File

@ -84,48 +84,6 @@ crfree(cred_t *cr)
put_cred((const 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 */ /* Return the number of supplemental groups */
int int
crgetngroups(const cred_t *cr) crgetngroups(const cred_t *cr)
@ -186,42 +144,6 @@ void crhold(cred_t *cr) { }
/* Free a reference on the credential and group info */ /* Free a reference on the credential and group info */
void crfree(cred_t *cr) { } 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 */ /* Return the number of supplemental groups */
int int
crgetngroups(const cred_t *cr) crgetngroups(const cred_t *cr)
@ -289,14 +211,72 @@ groupmember(gid_t gid, const cred_t *cr)
#endif /* HAVE_CRED_STRUCT */ #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(crhold);
EXPORT_SYMBOL(crfree); EXPORT_SYMBOL(crfree);
EXPORT_SYMBOL(crgetuid); EXPORT_SYMBOL(crgetuid);
EXPORT_SYMBOL(crgetruid); EXPORT_SYMBOL(crgetruid);
EXPORT_SYMBOL(crgetsuid); EXPORT_SYMBOL(crgetsuid);
EXPORT_SYMBOL(crgetfsuid);
EXPORT_SYMBOL(crgetgid); EXPORT_SYMBOL(crgetgid);
EXPORT_SYMBOL(crgetrgid); EXPORT_SYMBOL(crgetrgid);
EXPORT_SYMBOL(crgetsgid); EXPORT_SYMBOL(crgetsgid);
EXPORT_SYMBOL(crgetfsgid);
EXPORT_SYMBOL(crgetngroups); EXPORT_SYMBOL(crgetngroups);
EXPORT_SYMBOL(crgetgroups); EXPORT_SYMBOL(crgetgroups);
EXPORT_SYMBOL(groupmember); EXPORT_SYMBOL(groupmember);