#include "sudo_nss.h"
#include "sudo_plugin.h"
-#ifdef HAVE_MBR_CHECK_MEMBERSHIP
-# include <membership.h>
-#endif
+#define DEFAULT_TEXT_DOMAIN "sudoers"
+#include "gettext.h"
+
+/*
+ * Password db and supplementary group IDs with associated group names.
+ */
+struct group_list {
+ char **groups;
+ GETGROUPS_T *gids;
+ int ngroups;
+ int ngids;
+};
/*
* Info pertaining to the invoking user.
char *cmnd_safe;
char *class_name;
char *krb5_ccname;
- int closefrom;
- int ngroups;
- uid_t uid;
- uid_t gid;
- int lines;
- int cols;
- GETGROUPS_T *groups;
+ struct group_list *group_list;
char * const * env_vars;
#ifdef HAVE_SELINUX
char *role;
#endif
char *cwd;
char *iolog_file;
-#ifdef HAVE_MBR_CHECK_MEMBERSHIP
- uuid_t uuid;
-#endif
+ int closefrom;
+ int lines;
+ int cols;
+ uid_t uid;
+ uid_t gid;
};
/*
#define user_passwd (sudo_user.pw->pw_passwd)
#define user_uuid (sudo_user.uuid)
#define user_dir (sudo_user.pw->pw_dir)
-#define user_ngroups (sudo_user.ngroups)
-#define user_groups (sudo_user.groups)
+#define user_group_list (sudo_user.group_list)
#define user_tty (sudo_user.tty)
#define user_ttypath (sudo_user.ttypath)
#define user_cwd (sudo_user.cwd)
void sudo_endpwent(void);
void sudo_setspent(void);
void sudo_endspent(void);
+struct group_list *get_group_list(struct passwd *pw);
+void set_group_list(const char *, GETGROUPS_T *gids, int ngids);
struct passwd *sudo_getpwnam(const char *);
struct passwd *sudo_fakepwnam(const char *, gid_t);
struct passwd *sudo_getpwuid(uid_t);
struct group *sudo_getgrnam(const char *);
struct group *sudo_fakegrnam(const char *);
struct group *sudo_getgrgid(gid_t);
+void grlist_addref(struct group_list *);
+void grlist_delref(struct group_list *);
void gr_addref(struct group *);
void gr_delref(struct group *);
void pw_addref(struct passwd *);
int group_plugin_query(const char *user, const char *group,
const struct passwd *pwd);
+/* setgroups.c */
+int sudo_setgroups(int ngids, const GETGROUPS_T *gids);
+
#ifndef _SUDO_MAIN
extern struct sudo_user sudo_user;
extern struct passwd *list_pw;