/usr/include
NameSizeModeActions
arpa/-0755rm
asm-generic/-0755rm
boost/-0755rm
c++/-0755rm
drm/-0755rm
event2/-0755rm
finclude/-0755rm
google/-0755rm
hwloc/-0755rm
infiniband/-0755rm
iproute2/-0755rm
libdmmp/-0755rm
libltdl/-0755rm
libnl3/-0755rm
libxml2/-0755rm
linux/-0755rm
lua5.2/-0755rm
luabind/-0755rm
misc/-0755rm
mtd/-0755rm
ncursesw/-0755rm
net/-0755rm
netash/-0755rm
netatalk/-0755rm
netax25/-0755rm
neteconet/-0755rm
netinet/-0755rm
netipx/-0755rm
netiucv/-0755rm
netpacket/-0755rm
netrom/-0755rm
netrose/-0755rm
nfs/-0755rm
oneapi/-0755rm
osmpbf/-0755rm
php/-0755rm
protocols/-0755rm
python3.10/-0755rm
rdma/-0755rm
readline/-0755rm
rpc/-0755rm
rpcsvc/-0755rm
scsi/-0755rm
sound/-0755rm
stxxl/-0755rm
tbb/-0755rm
tirpc/-0755rm
unicode/-0755rm
video/-0755rm
x86_64-linux-gnu/-0755rm
xen/-0755rm
xfs/-0755rm
aio.h77380644editdlrm
aliases.h20280644editdlrm
alloca.h12030644editdlrm
ar.h17310644editdlrm
argp.h255480644editdlrm
argz.h60510644editdlrm
assert.h46430644editdlrm
byteswap.h14490644editdlrm
bzlib.h62400644editdlrm
complex.h81400644editdlrm
cpio.h22680644editdlrm
crypt.h111310644editdlrm
ctype.h109690644editdlrm
curses.h1002420644editdlrm
cursesapp.h72250644editdlrm
cursesf.h280290644editdlrm
cursesm.h199080644editdlrm
cursesp.h87510644editdlrm
cursesw.h503060644editdlrm
cursslk.h73210644editdlrm
dirent.h125150644editdlrm
dlfcn.h83650644editdlrm
elf.h1842970644editdlrm
endian.h22990644editdlrm
envz.h28670644editdlrm
err.h23410644editdlrm
errno.h16790644editdlrm
error.h24160644editdlrm
eti.h29690644editdlrm
etip.h99130644editdlrm
evdns.h20190644editdlrm
event.h27440644editdlrm
evhttp.h20350644editdlrm
evrpc.h20150644editdlrm
evutil.h17820644editdlrm
execinfo.h15230644editdlrm
expat.h437040644editdlrm
expat_external.h60290644editdlrm
fcntl.h101260644editdlrm
features-time64.h14090644editdlrm
features.h178600644editdlrm
fenv.h57880644editdlrm
fmtmsg.h32400644editdlrm
fnmatch.h22960644editdlrm
form.h188990644editdlrm
fstab.h31110644editdlrm
fts.h95790644editdlrm
ftw.h63430644editdlrm
gawkapi.h406450644editdlrm
gconv.h42110644editdlrm
getopt.h14690644editdlrm
glob.h72990644editdlrm
gnu-versions.h23430644editdlrm
gnumake.h29120644editdlrm
grp.h66870644editdlrm
gshadow.h45290644editdlrm
hwloc.h1099400644editdlrm
iconv.h18580644editdlrm
ifaddrs.h28410644editdlrm
inttypes.h83370644editdlrm
langinfo.h178490644editdlrm
lastlog.h1260644editdlrm
libgen.h13860644editdlrm
libintl.h45800644editdlrm
limits.h57060644editdlrm
link.h78010644editdlrm
locale.h76750644editdlrm
ltdl.h57090644editdlrm
malloc.h59840644editdlrm
math.h498640644editdlrm
mcheck.h24350644editdlrm
memory.h9560644editdlrm
menu.h118750644editdlrm
mntent.h33590644editdlrm
monetary.h19660644editdlrm
mpath_cmd.h41570644editdlrm
mpath_persist.h114900644editdlrm
mqueue.h46030644editdlrm
ncurses.h1002420644editdlrm
ncurses_dll.h40430644editdlrm
nc_tparm.h47770644editdlrm
netdb.h284610644editdlrm
nl_types.h17530644editdlrm
nss.h144080644editdlrm
numa.h135390644editdlrm
numacompat1.h12310644editdlrm
numaif.h15210644editdlrm
obstack.h213070644editdlrm
panel.h45120644editdlrm
paths.h29830644editdlrm
poll.h220644editdlrm
printf.h68750644editdlrm
proc_service.h34770644editdlrm
pthread.h483760644editdlrm
pty.h15700644editdlrm
pwd.h63170644editdlrm
regex.h259040644editdlrm
regexp.h13870644editdlrm
resolv.h122460644editdlrm
re_comp.h9630644editdlrm
sched.h50380644editdlrm
search.h54500644editdlrm
semaphore.h34640644editdlrm
setjmp.h31900644editdlrm
sgtty.h13440644editdlrm
shadow.h54720644editdlrm
signal.h130400644editdlrm
spawn.h82790644editdlrm
stab.h2640644editdlrm
stdc-predef.h24620644editdlrm
stdint.h84740644editdlrm
stdio.h311760644editdlrm
stdio_ext.h28000644editdlrm
stdlib.h363930644editdlrm
string.h194590644editdlrm
strings.h47530644editdlrm
stxxl.h10320644editdlrm
sudo_plugin.h119180644editdlrm
syscall.h250644editdlrm
sysexits.h52320644editdlrm
syslog.h240644editdlrm
tar.h37520644editdlrm
term.h417240644editdlrm
termcap.h34680644editdlrm
termio.h2140644editdlrm
termios.h35990644editdlrm
term_entry.h90970644editdlrm
tgmath.h446550644editdlrm
threads.h76860644editdlrm
thread_db.h160240644editdlrm
tic.h148990644editdlrm
time.h148390644editdlrm
ttyent.h24940644editdlrm
uchar.h20020644editdlrm
ucontext.h20370644editdlrm
ulimit.h15840644editdlrm
unctrl.h31770644editdlrm
unistd.h449670644editdlrm
utime.h19050644editdlrm
utmp.h32230644editdlrm
utmpx.h41000644editdlrm
values.h19560644editdlrm
wait.h220644editdlrm
wchar.h317920644editdlrm
wctype.h55490644editdlrm
wordexp.h25020644editdlrm
zconf.h162620644editdlrm
zip.h265540644editdlrm
zipconf.h11810644editdlrm
zlib.h962610644editdlrm
Edit: /usr/include/sudo_plugin.h (11918B)
/* * SPDX-License-Identifier: ISC * * Copyright (c) 2009-2020 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. */ #ifndef SUDO_PLUGIN_H #define SUDO_PLUGIN_H /* API version major/minor */ #define SUDO_API_VERSION_MAJOR 1 #define SUDO_API_VERSION_MINOR 18 #define SUDO_API_MKVERSION(x, y) (((x) << 16) | (y)) #define SUDO_API_VERSION SUDO_API_MKVERSION(SUDO_API_VERSION_MAJOR, SUDO_API_VERSION_MINOR) /* Getters and setters for plugin API versions */ #define SUDO_API_VERSION_GET_MAJOR(v) ((v) >> 16) #define SUDO_API_VERSION_GET_MINOR(v) ((v) & 0xffffU) #define SUDO_API_VERSION_SET_MAJOR(vp, n) do { \ *(vp) = (*(vp) & 0x0000ffffU) | ((n) << 16); \ } while(0) #define SUDO_API_VERSION_SET_MINOR(vp, n) do { \ *(vp) = (*(vp) & 0xffff0000U) | (n); \ } while(0) /* "plugin type" for the sudo front end, as passed to an audit plugin */ #define SUDO_FRONT_END 0 /* Conversation function types and defines */ struct sudo_conv_message { #define SUDO_CONV_PROMPT_ECHO_OFF 0x0001 /* do not echo user input */ #define SUDO_CONV_PROMPT_ECHO_ON 0x0002 /* echo user input */ #define SUDO_CONV_ERROR_MSG 0x0003 /* error message */ #define SUDO_CONV_INFO_MSG 0x0004 /* informational message */ #define SUDO_CONV_PROMPT_MASK 0x0005 /* mask user input */ #define SUDO_CONV_PROMPT_ECHO_OK 0x1000 /* flag: allow echo if no tty */ #define SUDO_CONV_PREFER_TTY 0x2000 /* flag: use tty if possible */ int msg_type; int timeout; const char *msg; }; /* * Maximum length of a reply (not including the trailing NUL) when * conversing with the user. In practical terms, this is the longest * password sudo will support. This means that a buffer of size * SUDO_CONV_REPL_MAX+1 is guaranteed to be able to hold any reply * from the conversation function. */ #define SUDO_CONV_REPL_MAX 1023 struct sudo_conv_reply { char *reply; }; /* Conversation callback API version major/minor */ #define SUDO_CONV_CALLBACK_VERSION_MAJOR 1 #define SUDO_CONV_CALLBACK_VERSION_MINOR 0 #define SUDO_CONV_CALLBACK_VERSION SUDO_API_MKVERSION(SUDO_CONV_CALLBACK_VERSION_MAJOR, SUDO_CONV_CALLBACK_VERSION_MINOR) /* * Callback struct to be passed to the conversation function. * Can be used to perform operations on suspend/resume such * as dropping/acquiring locks. */ typedef int (*sudo_conv_callback_fn_t)(int signo, void *closure); struct sudo_conv_callback { unsigned int version; void *closure; sudo_conv_callback_fn_t on_suspend; sudo_conv_callback_fn_t on_resume; }; typedef int (*sudo_conv_t)(int num_msgs, const struct sudo_conv_message msgs[], struct sudo_conv_reply replies[], struct sudo_conv_callback *callback); typedef int (*sudo_printf_t)(int msg_type, const char *fmt, ...); /* * Hooks allow a plugin to hook into specific sudo and/or libc functions. */ #if defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 4) || __GNUC__ > 4) # pragma GCC diagnostic ignored "-Wstrict-prototypes" #endif /* Hook functions typedefs. */ typedef int (*sudo_hook_fn_t)(); typedef int (*sudo_hook_fn_setenv_t)(const char *name, const char *value, int overwrite, void *closure); typedef int (*sudo_hook_fn_putenv_t)(char *string, void *closure); typedef int (*sudo_hook_fn_getenv_t)(const char *name, char **value, void *closure); typedef int (*sudo_hook_fn_unsetenv_t)(const char *name, void *closure); /* Hook structure definition. */ struct sudo_hook { unsigned int hook_version; unsigned int hook_type; sudo_hook_fn_t hook_fn; void *closure; }; /* Hook API version major/minor */ #define SUDO_HOOK_VERSION_MAJOR 1 #define SUDO_HOOK_VERSION_MINOR 0 #define SUDO_HOOK_VERSION SUDO_API_MKVERSION(SUDO_HOOK_VERSION_MAJOR, SUDO_HOOK_VERSION_MINOR) /* * Hook function return values. */ #define SUDO_HOOK_RET_ERROR -1 /* error */ #define SUDO_HOOK_RET_NEXT 0 /* go to the next hook in the list */ #define SUDO_HOOK_RET_STOP 1 /* stop hook processing for this type */ /* * Hooks for setenv/unsetenv/putenv/getenv. * This allows the plugin to be notified when a PAM module modifies * the environment so it can update the copy of the environment that * is passed to execve(). */ #define SUDO_HOOK_SETENV 1 #define SUDO_HOOK_UNSETENV 2 #define SUDO_HOOK_PUTENV 3 #define SUDO_HOOK_GETENV 4 /* * Plugin interface to sudo's main event loop. */ typedef void (*sudo_plugin_ev_callback_t)(int fd, int what, void *closure); struct timespec; struct sudo_plugin_event { int (*set)(struct sudo_plugin_event *pev, int fd, int events, sudo_plugin_ev_callback_t callback, void *closure); int (*add)(struct sudo_plugin_event *pev, struct timespec *timeout); int (*del)(struct sudo_plugin_event *pev); int (*pending)(struct sudo_plugin_event *pev, int events, struct timespec *ts); int (*fd)(struct sudo_plugin_event *pev); void (*setbase)(struct sudo_plugin_event *pev, void *base); void (*loopbreak)(struct sudo_plugin_event *pev); void (*free)(struct sudo_plugin_event *pev); /* actually larger... */ }; /* Sudo plugin Event types */ #define SUDO_PLUGIN_EV_TIMEOUT 0x01 /* fire after timeout */ #define SUDO_PLUGIN_EV_READ 0x02 /* fire when readable */ #define SUDO_PLUGIN_EV_WRITE 0x04 /* fire when writable */ #define SUDO_PLUGIN_EV_PERSIST 0x08 /* persist until deleted */ #define SUDO_PLUGIN_EV_SIGNAL 0x10 /* fire on signal receipt */ /* Policy plugin type and defines. */ struct passwd; struct policy_plugin { #define SUDO_POLICY_PLUGIN 1 unsigned int type; /* always SUDO_POLICY_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, sudo_printf_t sudo_printf, char * const settings[], char * const user_info[], char * const user_env[], char * const plugin_options[], const char **errstr); void (*close)(int exit_status, int error); /* wait status or error */ int (*show_version)(int verbose); int (*check_policy)(int argc, char * const argv[], char *env_add[], char **command_info[], char **argv_out[], char **user_env_out[], const char **errstr); int (*list)(int argc, char * const argv[], int verbose, const char *list_user, const char **errstr); int (*validate)(const char **errstr); void (*invalidate)(int remove); int (*init_session)(struct passwd *pwd, char **user_env_out[], const char **errstr); void (*register_hooks)(int version, int (*register_hook)(struct sudo_hook *hook)); void (*deregister_hooks)(int version, int (*deregister_hook)(struct sudo_hook *hook)); struct sudo_plugin_event * (*event_alloc)(void); }; /* I/O plugin type and defines. */ struct io_plugin { #define SUDO_IO_PLUGIN 2 unsigned int type; /* always SUDO_IO_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, sudo_printf_t sudo_printf, char * const settings[], char * const user_info[], char * const command_info[], int argc, char * const argv[], char * const user_env[], char * const plugin_options[], const char **errstr); void (*close)(int exit_status, int error); /* wait status or error */ int (*show_version)(int verbose); int (*log_ttyin)(const char *buf, unsigned int len, const char **errstr); int (*log_ttyout)(const char *buf, unsigned int len, const char **errstr); int (*log_stdin)(const char *buf, unsigned int len, const char **errstr); int (*log_stdout)(const char *buf, unsigned int len, const char **errstr); int (*log_stderr)(const char *buf, unsigned int len, const char **errstr); void (*register_hooks)(int version, int (*register_hook)(struct sudo_hook *hook)); void (*deregister_hooks)(int version, int (*deregister_hook)(struct sudo_hook *hook)); int (*change_winsize)(unsigned int line, unsigned int cols, const char **errstr); int (*log_suspend)(int signo, const char **errstr); struct sudo_plugin_event * (*event_alloc)(void); }; /* Differ audit plugin close status types. */ #define SUDO_PLUGIN_NO_STATUS 0 #define SUDO_PLUGIN_WAIT_STATUS 1 #define SUDO_PLUGIN_EXEC_ERROR 2 #define SUDO_PLUGIN_SUDO_ERROR 3 /* Audit plugin type and defines */ struct audit_plugin { #define SUDO_AUDIT_PLUGIN 3 unsigned int type; /* always SUDO_AUDIT_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, sudo_printf_t sudo_printf, char * const settings[], char * const user_info[], int submit_optind, char * const submit_argv[], char * const submit_envp[], char * const plugin_options[], const char **errstr); void (*close)(int status_type, int status); int (*accept)(const char *plugin_name, unsigned int plugin_type, char * const command_info[], char * const run_argv[], char * const run_envp[], const char **errstr); int (*reject)(const char *plugin_name, unsigned int plugin_type, const char *audit_msg, char * const command_info[], const char **errstr); int (*error)(const char *plugin_name, unsigned int plugin_type, const char *audit_msg, char * const command_info[], const char **errstr); int (*show_version)(int verbose); void (*register_hooks)(int version, int (*register_hook)(struct sudo_hook *hook)); void (*deregister_hooks)(int version, int (*deregister_hook)(struct sudo_hook *hook)); struct sudo_plugin_event * (*event_alloc)(void); }; /* Approval plugin type and defines */ struct approval_plugin { #define SUDO_APPROVAL_PLUGIN 4 unsigned int type; /* always SUDO_APPROVAL_PLUGIN */ unsigned int version; /* always SUDO_API_VERSION */ int (*open)(unsigned int version, sudo_conv_t conversation, sudo_printf_t sudo_printf, char * const settings[], char * const user_info[], int submit_optind, char * const submit_argv[], char * const submit_envp[], char * const plugin_options[], const char **errstr); void (*close)(void); int (*check)(char * const command_info[], char * const run_argv[], char * const run_envp[], const char **errstr); int (*show_version)(int verbose); }; /* Sudoers group plugin version major/minor */ #define GROUP_API_VERSION_MAJOR 1 #define GROUP_API_VERSION_MINOR 0 #define GROUP_API_VERSION SUDO_API_MKVERSION(GROUP_API_VERSION_MAJOR, GROUP_API_VERSION_MINOR) /* Getters and setters for group version (for source compat only) */ #define GROUP_API_VERSION_GET_MAJOR(v) SUDO_API_VERSION_GET_MAJOR(v) #define GROUP_API_VERSION_GET_MINOR(v) SUDO_API_VERSION_GET_MINOR(v) #define GROUP_API_VERSION_SET_MAJOR(vp, n) SUDO_API_VERSION_SET_MAJOR(vp, n) #define GROUP_API_VERSION_SET_MINOR(vp, n) SUDO_API_VERSION_SET_MINOR(vp, n) /* * version: for compatibility checking * group_init: return 1 on success, 0 if unconfigured, -1 on error. * group_cleanup: called to clean up resources used by provider * user_in_group: returns 1 if user is in group, 0 if not. * note that pwd may be NULL if the user is not in passwd. */ struct sudoers_group_plugin { unsigned int version; int (*init)(int version, sudo_printf_t sudo_printf, char *const argv[]); void (*cleanup)(void); int (*query)(const char *user, const char *group, const struct passwd *pwd); }; #endif /* SUDO_PLUGIN_H */