Annotation of embedaddon/sudo/src/sudo.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (c) 1993-1996, 1998-2005, 2007-2011
! 3: * Todd C. Miller <Todd.Miller@courtesan.com>
! 4: *
! 5: * Permission to use, copy, modify, and distribute this software for any
! 6: * purpose with or without fee is hereby granted, provided that the above
! 7: * copyright notice and this permission notice appear in all copies.
! 8: *
! 9: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 10: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 11: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 12: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 13: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 14: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 15: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 16: *
! 17: * Sponsored in part by the Defense Advanced Research Projects
! 18: * Agency (DARPA) and Air Force Research Laboratory, Air Force
! 19: * Materiel Command, USAF, under agreement number F39502-99-1-0512.
! 20: *
! 21: * $Sudo: sudo.h,v 1.290 2009/12/12 16:12:26 millert Exp $
! 22: */
! 23:
! 24: #ifndef _SUDO_SUDO_H
! 25: #define _SUDO_SUDO_H
! 26:
! 27: #include <limits.h>
! 28: #include <pathnames.h>
! 29:
! 30: #include "missing.h"
! 31: #include "alloc.h"
! 32: #include "error.h"
! 33: #include "fileops.h"
! 34: #include "list.h"
! 35: #include "gettext.h"
! 36:
! 37: #ifdef __TANDEM
! 38: # define ROOT_UID 65535
! 39: #else
! 40: # define ROOT_UID 0
! 41: #endif
! 42:
! 43: /*
! 44: * Pseudo-boolean values
! 45: */
! 46: #undef TRUE
! 47: #define TRUE 1
! 48: #undef FALSE
! 49: #define FALSE 0
! 50:
! 51: /*
! 52: * Various modes sudo can be in (based on arguments) in hex
! 53: */
! 54: #define MODE_RUN 0x00000001
! 55: #define MODE_EDIT 0x00000002
! 56: #define MODE_VALIDATE 0x00000004
! 57: #define MODE_INVALIDATE 0x00000008
! 58: #define MODE_KILL 0x00000010
! 59: #define MODE_VERSION 0x00000020
! 60: #define MODE_HELP 0x00000040
! 61: #define MODE_LIST 0x00000080
! 62: #define MODE_CHECK 0x00000100
! 63: #define MODE_MASK 0x0000ffff
! 64:
! 65: /* Mode flags */
! 66: /* XXX - prune this */
! 67: #define MODE_BACKGROUND 0x00010000
! 68: #define MODE_SHELL 0x00020000
! 69: #define MODE_LOGIN_SHELL 0x00040000
! 70: #define MODE_IMPLIED_SHELL 0x00080000
! 71: #define MODE_RESET_HOME 0x00100000
! 72: #define MODE_PRESERVE_GROUPS 0x00200000
! 73: #define MODE_PRESERVE_ENV 0x00400000
! 74: #define MODE_NONINTERACTIVE 0x00800000
! 75: #define MODE_LONG_LIST 0x01000000
! 76:
! 77: /*
! 78: * We used to use the system definition of PASS_MAX or _PASSWD_LEN,
! 79: * but that caused problems with various alternate authentication
! 80: * methods. So, we just define our own and assume that it is >= the
! 81: * system max.
! 82: */
! 83: #define SUDO_PASS_MAX 256
! 84:
! 85: /*
! 86: * Flags for tgetpass()
! 87: */
! 88: #define TGP_NOECHO 0x00 /* turn echo off reading pw (default) */
! 89: #define TGP_ECHO 0x01 /* leave echo on when reading passwd */
! 90: #define TGP_STDIN 0x02 /* read from stdin, not /dev/tty */
! 91: #define TGP_ASKPASS 0x04 /* read from askpass helper program */
! 92: #define TGP_MASK 0x08 /* mask user input when reading */
! 93: #define TGP_NOECHO_TRY 0x10 /* turn off echo if possible */
! 94:
! 95: struct user_details {
! 96: uid_t uid;
! 97: uid_t euid;
! 98: uid_t gid;
! 99: uid_t egid;
! 100: const char *username;
! 101: const char *cwd;
! 102: const char *tty;
! 103: const char *host;
! 104: const char *shell;
! 105: GETGROUPS_T *groups;
! 106: int ngroups;
! 107: int ts_cols;
! 108: int ts_lines;
! 109: };
! 110:
! 111: #define CD_SET_UID 0x0001
! 112: #define CD_SET_EUID 0x0002
! 113: #define CD_SET_GID 0x0004
! 114: #define CD_SET_EGID 0x0008
! 115: #define CD_PRESERVE_GROUPS 0x0010
! 116: #define CD_NOEXEC 0x0020
! 117: #define CD_SET_PRIORITY 0x0040
! 118: #define CD_SET_UMASK 0x0080
! 119: #define CD_SET_TIMEOUT 0x0100
! 120: #define CD_SUDOEDIT 0x0200
! 121: #define CD_BACKGROUND 0x0400
! 122: #define CD_RBAC_ENABLED 0x0800
! 123: #define CD_USE_PTY 0x1000
! 124: #define CD_SET_UTMP 0x2000
! 125:
! 126: struct command_details {
! 127: uid_t uid;
! 128: uid_t euid;
! 129: gid_t gid;
! 130: gid_t egid;
! 131: mode_t umask;
! 132: int priority;
! 133: int timeout;
! 134: int ngroups;
! 135: int closefrom;
! 136: int flags;
! 137: GETGROUPS_T *groups;
! 138: const char *command;
! 139: const char *cwd;
! 140: const char *login_class;
! 141: const char *chroot;
! 142: const char *selinux_role;
! 143: const char *selinux_type;
! 144: const char *utmp_user;
! 145: char **argv;
! 146: char **envp;
! 147: };
! 148:
! 149: /* Status passed between parent and child via socketpair */
! 150: struct command_status {
! 151: #define CMD_INVALID 0
! 152: #define CMD_ERRNO 1
! 153: #define CMD_WSTATUS 2
! 154: #define CMD_SIGNO 3
! 155: int type;
! 156: int val;
! 157: };
! 158:
! 159: struct timeval;
! 160:
! 161: /* For error() and errorx() (XXX - needed?) */
! 162: void cleanup(int);
! 163:
! 164: /* tgetpass.c */
! 165: char *tgetpass(const char *, int, int);
! 166: int tty_present(void);
! 167: extern const char *askpass_path;
! 168: extern const char *noexec_path;
! 169:
! 170: /* zero_bytes.c */
! 171: void zero_bytes(volatile void *, size_t);
! 172:
! 173: /* exec.c */
! 174: int sudo_execve(struct command_details *details, struct command_status *cstat);
! 175: void save_signals(void);
! 176: void restore_signals(void);
! 177:
! 178: /* term.c */
! 179: int term_cbreak(int);
! 180: int term_copy(int, int);
! 181: int term_noecho(int);
! 182: int term_raw(int, int);
! 183: int term_restore(int, int);
! 184:
! 185: /* fmt_string.h */
! 186: char *fmt_string(const char *var, const char *value);
! 187:
! 188: /* atobool.c */
! 189: int atobool(const char *str);
! 190:
! 191: /* parse_args.c */
! 192: int parse_args(int argc, char **argv, int *nargc, char ***nargv,
! 193: char ***settingsp, char ***env_addp);
! 194: extern int tgetpass_flags;
! 195:
! 196: /* get_pty.c */
! 197: int get_pty(int *master, int *slave, char *name, size_t namesz, uid_t uid);
! 198:
! 199: /* ttysize.c */
! 200: void get_ttysize(int *rowp, int *colp);
! 201:
! 202: /* sudo.c */
! 203: int exec_setup(struct command_details *details, const char *ptyname, int ptyfd);
! 204: int run_command(struct command_details *details);
! 205: void sudo_debug(int level, const char *format, ...) __printflike(2, 3);
! 206: extern int debug_level;
! 207: extern const char *list_user, *runas_user, *runas_group;
! 208: extern struct user_details user_details;
! 209:
! 210: /* sudo_edit.c */
! 211: int sudo_edit(struct command_details *details);
! 212:
! 213: /* parse_args.c */
! 214: void usage(int);
! 215:
! 216: /* selinux.c */
! 217: int selinux_restore_tty(void);
! 218: int selinux_setup(const char *role, const char *type, const char *ttyn,
! 219: int ttyfd);
! 220: void selinux_execve(const char *path, char *argv[], char *envp[]);
! 221:
! 222: /* aix.c */
! 223: void aix_prep_user(char *user, const char *tty);
! 224: void aix_restoreauthdb(void);
! 225: void aix_setauthdb(char *user);
! 226:
! 227: /* interfaces.c */
! 228: int get_net_ifs(char **addrinfo);
! 229:
! 230: /* setgroups.c */
! 231: int sudo_setgroups(int ngids, const GETGROUPS_T *gids);
! 232:
! 233: #endif /* _SUDO_SUDO_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>