Imported Upstream version 1.8.3
[debian/sudo] / plugins / sudoers / sudoers.h
index 7e5d56bba4ae2e49b22974284b051c92b9b3867b..8b51e1d334f73c370ba0c3a0d02aa9c99a016187 100644 (file)
 #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.
@@ -60,13 +69,7 @@ struct sudo_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;
@@ -74,9 +77,11 @@ struct sudo_user {
 #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;
 };
 
 /*
@@ -155,8 +160,7 @@ struct sudo_user {
 #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)
@@ -214,8 +218,10 @@ int user_is_exempt(void);
 
 /* sudo_auth.c */
 int verify_user(struct passwd *, char *);
-int auth_begin_session(struct passwd *);
-int auth_end_session();
+int sudo_auth_begin_session(struct passwd *);
+int sudo_auth_end_session(struct passwd *);
+int sudo_auth_init(struct passwd *pw);
+int sudo_auth_cleanup(struct passwd *pw);
 
 /* parse.c */
 int sudo_file_open(struct sudo_nss *);
@@ -261,12 +267,17 @@ void sudo_setpwent(void);
 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_fakepwnamid(const char *user, uid_t uid, gid_t gid);
 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 *);
@@ -316,6 +327,9 @@ void group_plugin_unload(void);
 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;
@@ -330,9 +344,4 @@ extern sudo_conv_t sudo_conv;
 extern sudo_printf_t sudo_printf;
 #endif
 
-/* Some systems don't declare errno in errno.h */
-#ifndef errno
-extern int errno;
-#endif
-
 #endif /* _SUDO_SUDOERS_H */