Pass a struct to the match functions to track the resolved command.
This makes it possible to update user_cmnd and cmnd_status modified by per-rule CHROOT settings.
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
#ifndef SUDOERS_PARSE_H
|
||||
#define SUDOERS_PARSE_H
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include "sudo_queue.h"
|
||||
|
||||
/* Characters that must be quoted in sudoers. */
|
||||
@@ -281,6 +282,15 @@ struct sudoers_parse_tree {
|
||||
const char *shost, *lhost;
|
||||
};
|
||||
|
||||
/*
|
||||
* Info about the command being resolved.
|
||||
*/
|
||||
struct cmnd_info {
|
||||
struct stat cmnd_stat;
|
||||
char *cmnd_path;
|
||||
int status;
|
||||
};
|
||||
|
||||
/* alias.c */
|
||||
struct rbtree *alloc_aliases(void);
|
||||
void free_aliases(struct rbtree *aliases);
|
||||
@@ -312,7 +322,7 @@ void reparent_parse_tree(struct sudoers_parse_tree *new_tree);
|
||||
bool addr_matches(char *n);
|
||||
|
||||
/* match_command.c */
|
||||
bool command_matches(const char *sudoers_cmnd, const char *sudoers_args, const char *runchroot, const struct command_digest_list *digests);
|
||||
bool command_matches(const char *sudoers_cmnd, const char *sudoers_args, const char *runchroot, struct cmnd_info *info, const struct command_digest_list *digests);
|
||||
|
||||
/* match_digest.c */
|
||||
bool digest_matches(int fd, const char *file, const struct command_digest_list *digests);
|
||||
@@ -325,8 +335,8 @@ bool hostname_matches(const char *shost, const char *lhost, const char *pattern)
|
||||
bool netgr_matches(const char *netgr, const char *lhost, const char *shost, const char *user);
|
||||
bool usergr_matches(const char *group, const char *user, const struct passwd *pw);
|
||||
bool userpw_matches(const char *sudoers_user, const char *user, const struct passwd *pw);
|
||||
int cmnd_matches(struct sudoers_parse_tree *parse_tree, const struct member *m, const char *runchroot);
|
||||
int cmndlist_matches(struct sudoers_parse_tree *parse_tree, const struct member_list *list, const char *runchroot);
|
||||
int cmnd_matches(struct sudoers_parse_tree *parse_tree, const struct member *m, const char *runchroot, struct cmnd_info *info);
|
||||
int cmndlist_matches(struct sudoers_parse_tree *parse_tree, const struct member_list *list, const char *runchroot, struct cmnd_info *info);
|
||||
int host_matches(struct sudoers_parse_tree *parse_tree, const struct passwd *pw, const char *host, const char *shost, const struct member *m);
|
||||
int hostlist_matches(struct sudoers_parse_tree *parse_tree, const struct passwd *pw, const struct member_list *list);
|
||||
int runaslist_matches(struct sudoers_parse_tree *parse_tree, const struct member_list *user_list, const struct member_list *group_list, struct member **matching_user, struct member **matching_group);
|
||||
@@ -362,7 +372,7 @@ const char *digest_type_to_name(int digest_type);
|
||||
|
||||
/* parse.c */
|
||||
struct sudo_nss_list;
|
||||
int sudoers_lookup(struct sudo_nss_list *snl, struct passwd *pw, int validated, int pwflag);
|
||||
int sudoers_lookup(struct sudo_nss_list *snl, struct passwd *pw, int *cmnd_status, int pwflag);
|
||||
int display_privs(struct sudo_nss_list *snl, struct passwd *pw, bool verbose);
|
||||
int display_cmnd(struct sudo_nss_list *snl, struct passwd *pw);
|
||||
|
||||
|
Reference in New Issue
Block a user