/* * Copyright (c) 1996, 1998-2000, 2004, 2007 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * $Sudo: parse.h,v 1.14.2.2 2008/02/09 14:44:48 millert Exp $ */ #ifndef _SUDO_PARSE_H #define _SUDO_PARSE_H /* * Data structure used in parsing sudoers; * top of stack values are the ones that * apply when parsing is done & can be * accessed by *_matches macros */ #define STACKINCREMENT (32) struct matchstack { int user; int cmnd; int host; int runas; int nopass; int noexec; int setenv; char *role; char *type; }; /* * Data structure describing a command in the * sudoers file. */ struct sudo_command { char *cmnd; char *args; }; /* * SELinux-specific container struct. * Currently just contains a role and type. */ struct selinux_info { char *role; char *type; }; #define user_matches (match[top-1].user) #define cmnd_matches (match[top-1].cmnd) #define host_matches (match[top-1].host) #define runas_matches (match[top-1].runas) #define no_passwd (match[top-1].nopass) #define no_execve (match[top-1].noexec) #define setenv_ok (match[top-1].setenv) /* * Structure containing command matches if "sudo -l" is used. */ struct command_match { char *runas; size_t runas_len; size_t runas_size; char *cmnd; size_t cmnd_len; size_t cmnd_size; char *role; size_t role_len; size_t role_size; char *type; size_t type_len; size_t type_size; int nopasswd; int noexecve; int setenv; }; /* * Structure describing an alias match in parser. */ typedef struct { int type; char *name; int val; } aliasinfo; /* * Structure containing Cmnd_Alias's if "sudo -l" is used. */ struct generic_alias { int type; char *alias; char *entries; size_t entries_size; size_t entries_len; }; /* The matching stack and number of entries on it. */ extern struct matchstack *match; extern int top; /* * Prototypes */ int addr_matches __P((char *)); int command_matches __P((char *, char *)); int hostname_matches __P((char *, char *, char *)); int netgr_matches __P((char *, char *, char *, char *)); int userpw_matches __P((char *, char *, struct passwd *)); int usergr_matches __P((char *, char *, struct passwd *)); #endif /* _SUDO_PARSE_H */