aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorTomas Mraz <tmraz@fedoraproject.org>2020-11-23 10:26:07 +0100
committerTomas Mraz <tmraz@fedoraproject.org>2020-11-24 15:00:58 +0100
commit5b7ba35ebfd280c931933fedbf98cb7f4a8846f2 (patch)
tree89b6374080adf878b76aa98500a15aa10558a364 /modules
parent28b8c7045ac8ea4ea080bce02a2df9e3b9e98f06 (diff)
downloadpam-5b7ba35ebfd280c931933fedbf98cb7f4a8846f2.tar.gz
pam-5b7ba35ebfd280c931933fedbf98cb7f4a8846f2.tar.bz2
pam-5b7ba35ebfd280c931933fedbf98cb7f4a8846f2.zip
pam_wheel: Use pam_modutil_user_in_group_uid_gid instead of reimplementation
The pam_modutil_user_in_group... functions use getgrouplist to check the membership so they work also in setups with remote services which do not provide group members in struct group. Fixes #297 * modules/pam_wheel/pam_wheel.c (perform_check): Call pam_modutil_user_in_group_uid_gid to do the group check.
Diffstat (limited to 'modules')
-rw-r--r--modules/pam_wheel/pam_wheel.c15
1 files changed, 2 insertions, 13 deletions
diff --git a/modules/pam_wheel/pam_wheel.c b/modules/pam_wheel/pam_wheel.c
index 7fa3cfa9..179f56b3 100644
--- a/modules/pam_wheel/pam_wheel.c
+++ b/modules/pam_wheel/pam_wheel.c
@@ -44,17 +44,6 @@
#include <security/pam_ext.h>
#include "pam_inline.h"
-/* checks if a user is on a list of members of the GID 0 group */
-static int is_on_list(char * const *list, const char *member)
-{
- while (list && *list) {
- if (strcmp(*list, member) == 0)
- return 1;
- list++;
- }
- return 0;
-}
-
/* argument parsing */
#define PAM_DEBUG_ARG 0x0001
@@ -175,7 +164,7 @@ perform_check (pam_handle_t *pamh, int ctrl, const char *use_group)
grp = pam_modutil_getgrnam (pamh, use_group);
}
- if (!grp || (!grp->gr_mem && (tpwd->pw_gid != grp->gr_gid))) {
+ if (grp == NULL) {
if (ctrl & PAM_DEBUG_ARG) {
if (!use_group[0]) {
pam_syslog(pamh, LOG_NOTICE, "no members in a GID 0 group");
@@ -200,7 +189,7 @@ perform_check (pam_handle_t *pamh, int ctrl, const char *use_group)
* user has the "wheel" (sic) group as its primary group.
*/
- if (is_on_list(grp->gr_mem, fromsu) || (tpwd->pw_gid == grp->gr_gid)) {
+ if (pam_modutil_user_in_group_uid_gid(pamh, tpwd->pw_uid, grp->gr_gid)) {
if (ctrl & PAM_DENY_ARG) {
retval = PAM_PERM_DENIED;