X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=module%2Fspl%2Fspl-cred.c;h=a03f459e04efc25499a4783d3774026a75fb4dd0;hb=10946b0206deecf1f7f9df2f443079ddc53a7208;hp=602bd74e883d24720af58f422a370e8500f569e7;hpb=9e4fb5c2f9158743c5e87456334c88008e2e2074;p=mirror_spl-debian.git diff --git a/module/spl/spl-cred.c b/module/spl/spl-cred.c index 602bd74..a03f459 100644 --- a/module/spl/spl-cred.c +++ b/module/spl/spl-cred.c @@ -32,11 +32,6 @@ #define DEBUG_SUBSYSTEM S_CRED -#ifdef HAVE_GROUPS_SEARCH -/* Symbol may be exported by custom kernel patch */ -#define cr_groups_search(gi, grp) groups_search(gi, grp) -#else -/* Implementation from 2.6.30 kernel */ static int #ifdef HAVE_KUIDGID_T cr_groups_search(const struct group_info *group_info, kgid_t grp) @@ -66,14 +61,6 @@ cr_groups_search(const struct group_info *group_info, gid_t grp) } return 0; } -#endif - -#ifdef HAVE_CRED_STRUCT - -/* - * As of 2.6.29 a clean credential API appears in the linux kernel. - * We attempt to layer the Solaris API on top of the linux API. - */ /* Hold a reference on the credential and group info */ void @@ -137,87 +124,6 @@ groupmember(gid_t gid, const cred_t *cr) return rc; } -#else /* HAVE_CRED_STRUCT */ - -/* - * Until very recently all credential information was embedded in - * the linux task struct. For this reason to simulate a Solaris - * cred_t we need to pass the entire task structure around. - */ - -/* Hold a reference on the credential and group info */ -void crhold(cred_t *cr) { } - -/* Free a reference on the credential and group info */ -void crfree(cred_t *cr) { } - -/* Return the number of supplemental groups */ -int -crgetngroups(const cred_t *cr) -{ - int lock, rc; - - lock = (cr != current); - if (lock) - task_lock((struct task_struct *)cr); - - get_group_info(cr->group_info); - rc = cr->group_info->ngroups; - put_group_info(cr->group_info); - - if (lock) - task_unlock((struct task_struct *)cr); - - return rc; -} - -/* - * Return an array of supplemental gids. The returned address is safe - * to use as long as the caller has taken a reference with crhold(). - * The caller is responsible for releasing the reference with crfree(). - */ -gid_t * -crgetgroups(const cred_t *cr) -{ - gid_t *gids; - int lock; - - lock = (cr != current); - if (lock) - task_lock((struct task_struct *)cr); - - get_group_info(cr->group_info); - gids = KGID_TO_SGID(cr->group_info->blocks[0]); - put_group_info(cr->group_info); - - if (lock) - task_unlock((struct task_struct *)cr); - - return gids; -} - -/* Check if the passed gid is available is in supplied credential. */ -int -groupmember(gid_t gid, const cred_t *cr) -{ - int lock, rc; - - lock = (cr != current); - if (lock) - task_lock((struct task_struct *)cr); - - get_group_info(cr->group_info); - rc = cr_groups_search(cr->group_info, gid); - put_group_info(cr->group_info); - - if (lock) - task_unlock((struct task_struct *)cr); - - return rc; -} - -#endif /* HAVE_CRED_STRUCT */ - /* Return the effective user id */ uid_t crgetuid(const cred_t *cr)