Annotation of embedaddon/sudo/src/sudo.h, revision 1.1.1.4
1.1 misho 1: /*
1.1.1.4 ! misho 2: * Copyright (c) 1993-1996, 1998-2005, 2007-2013
1.1 misho 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:
22: #ifndef _SUDO_SUDO_H
23: #define _SUDO_SUDO_H
24:
25: #include <limits.h>
26: #include <pathnames.h>
1.1.1.2 misho 27: #ifdef HAVE_STDBOOL_H
28: # include <stdbool.h>
29: #else
30: # include "compat/stdbool.h"
31: #endif /* HAVE_STDBOOL_H */
1.1 misho 32:
33: #include "missing.h"
34: #include "alloc.h"
35: #include "error.h"
36: #include "fileops.h"
37: #include "list.h"
1.1.1.2 misho 38: #include "sudo_conf.h"
39: #include "sudo_debug.h"
1.1 misho 40: #include "gettext.h"
41:
1.1.1.3 misho 42: #ifdef HAVE_PRIV_SET
43: # include <priv.h>
44: #endif
45:
1.1 misho 46: #ifdef __TANDEM
1.1.1.4 ! misho 47: # define ROOT_UID 65535
1.1 misho 48: #else
1.1.1.4 ! misho 49: # define ROOT_UID 0
1.1 misho 50: #endif
51:
52: /*
53: * Various modes sudo can be in (based on arguments) in hex
54: */
55: #define MODE_RUN 0x00000001
56: #define MODE_EDIT 0x00000002
57: #define MODE_VALIDATE 0x00000004
58: #define MODE_INVALIDATE 0x00000008
59: #define MODE_KILL 0x00000010
60: #define MODE_VERSION 0x00000020
61: #define MODE_HELP 0x00000040
62: #define MODE_LIST 0x00000080
63: #define MODE_CHECK 0x00000100
64: #define MODE_MASK 0x0000ffff
65:
66: /* Mode flags */
67: /* XXX - prune this */
68: #define MODE_BACKGROUND 0x00010000
69: #define MODE_SHELL 0x00020000
70: #define MODE_LOGIN_SHELL 0x00040000
71: #define MODE_IMPLIED_SHELL 0x00080000
72: #define MODE_RESET_HOME 0x00100000
73: #define MODE_PRESERVE_GROUPS 0x00200000
74: #define MODE_PRESERVE_ENV 0x00400000
75: #define MODE_NONINTERACTIVE 0x00800000
76: #define MODE_LONG_LIST 0x01000000
77:
78: /*
79: * We used to use the system definition of PASS_MAX or _PASSWD_LEN,
80: * but that caused problems with various alternate authentication
81: * methods. So, we just define our own and assume that it is >= the
82: * system max.
83: */
84: #define SUDO_PASS_MAX 256
85:
86: /*
87: * Flags for tgetpass()
88: */
89: #define TGP_NOECHO 0x00 /* turn echo off reading pw (default) */
90: #define TGP_ECHO 0x01 /* leave echo on when reading passwd */
91: #define TGP_STDIN 0x02 /* read from stdin, not /dev/tty */
92: #define TGP_ASKPASS 0x04 /* read from askpass helper program */
93: #define TGP_MASK 0x08 /* mask user input when reading */
94: #define TGP_NOECHO_TRY 0x10 /* turn off echo if possible */
95:
96: struct user_details {
1.1.1.2 misho 97: pid_t pid;
98: pid_t ppid;
99: pid_t pgid;
100: pid_t tcpgid;
101: pid_t sid;
1.1 misho 102: uid_t uid;
103: uid_t euid;
104: uid_t gid;
105: uid_t egid;
106: const char *username;
107: const char *cwd;
108: const char *tty;
109: const char *host;
110: const char *shell;
111: GETGROUPS_T *groups;
112: int ngroups;
113: int ts_cols;
114: int ts_lines;
115: };
116:
117: #define CD_SET_UID 0x0001
118: #define CD_SET_EUID 0x0002
119: #define CD_SET_GID 0x0004
120: #define CD_SET_EGID 0x0008
121: #define CD_PRESERVE_GROUPS 0x0010
122: #define CD_NOEXEC 0x0020
123: #define CD_SET_PRIORITY 0x0040
124: #define CD_SET_UMASK 0x0080
125: #define CD_SET_TIMEOUT 0x0100
126: #define CD_SUDOEDIT 0x0200
127: #define CD_BACKGROUND 0x0400
128: #define CD_RBAC_ENABLED 0x0800
129: #define CD_USE_PTY 0x1000
130: #define CD_SET_UTMP 0x2000
1.1.1.4 ! misho 131: #define CD_EXEC_BG 0x4000
1.1 misho 132:
133: struct command_details {
134: uid_t uid;
135: uid_t euid;
136: gid_t gid;
137: gid_t egid;
138: mode_t umask;
139: int priority;
140: int timeout;
141: int ngroups;
142: int closefrom;
143: int flags;
1.1.1.2 misho 144: struct passwd *pw;
1.1 misho 145: GETGROUPS_T *groups;
146: const char *command;
147: const char *cwd;
148: const char *login_class;
149: const char *chroot;
150: const char *selinux_role;
151: const char *selinux_type;
152: const char *utmp_user;
153: char **argv;
154: char **envp;
1.1.1.3 misho 155: #ifdef HAVE_PRIV_SET
156: priv_set_t *privs;
157: priv_set_t *limitprivs;
158: #endif
1.1 misho 159: };
160:
161: /* Status passed between parent and child via socketpair */
162: struct command_status {
163: #define CMD_INVALID 0
164: #define CMD_ERRNO 1
165: #define CMD_WSTATUS 2
166: #define CMD_SIGNO 3
1.1.1.3 misho 167: #define CMD_PID 4
1.1 misho 168: int type;
169: int val;
170: };
171:
172: struct timeval;
173:
1.1.1.4 ! misho 174: /* For fatal() and fatalx() (XXX - needed?) */
1.1 misho 175: void cleanup(int);
176:
177: /* tgetpass.c */
178: char *tgetpass(const char *, int, int);
179: int tty_present(void);
180:
181: /* zero_bytes.c */
182: void zero_bytes(volatile void *, size_t);
183:
184: /* exec.c */
1.1.1.4 ! misho 185: int pipe_nonblock(int fds[2]);
1.1.1.2 misho 186: int sudo_execute(struct command_details *details, struct command_status *cstat);
1.1 misho 187:
188: /* term.c */
189: int term_cbreak(int);
190: int term_copy(int, int);
191: int term_noecho(int);
192: int term_raw(int, int);
193: int term_restore(int, int);
194:
195: /* fmt_string.h */
196: char *fmt_string(const char *var, const char *value);
197:
198: /* atobool.c */
1.1.1.2 misho 199: bool atobool(const char *str);
1.1 misho 200:
201: /* parse_args.c */
202: int parse_args(int argc, char **argv, int *nargc, char ***nargv,
203: char ***settingsp, char ***env_addp);
204: extern int tgetpass_flags;
205:
206: /* get_pty.c */
207: int get_pty(int *master, int *slave, char *name, size_t namesz, uid_t uid);
208:
209: /* ttysize.c */
210: void get_ttysize(int *rowp, int *colp);
211:
212: /* sudo.c */
1.1.1.2 misho 213: bool exec_setup(struct command_details *details, const char *ptyname, int ptyfd);
214: int policy_init_session(struct command_details *details);
1.1 misho 215: int run_command(struct command_details *details);
1.1.1.4 ! misho 216: int os_init_common(int argc, char *argv[], char *envp[]);
1.1 misho 217: extern const char *list_user, *runas_user, *runas_group;
218: extern struct user_details user_details;
219:
220: /* sudo_edit.c */
221: int sudo_edit(struct command_details *details);
222:
223: /* parse_args.c */
224: void usage(int);
225:
1.1.1.4 ! misho 226: /* openbsd.c */
! 227: int os_init_openbsd(int argc, char *argv[], char *envp[]);
! 228:
1.1 misho 229: /* selinux.c */
230: int selinux_restore_tty(void);
231: int selinux_setup(const char *role, const char *type, const char *ttyn,
232: int ttyfd);
1.1.1.2 misho 233: void selinux_execve(const char *path, char *const argv[], char *const envp[],
234: int noexec);
1.1 misho 235:
1.1.1.4 ! misho 236: /* solaris.c */
! 237: void set_project(struct passwd *);
! 238: int os_init_solaris(int argc, char *argv[], char *envp[]);
! 239:
1.1 misho 240: /* aix.c */
241: void aix_prep_user(char *user, const char *tty);
242: void aix_restoreauthdb(void);
243: void aix_setauthdb(char *user);
244:
1.1.1.2 misho 245: /* hooks.c */
246: /* XXX - move to sudo_plugin_int.h? */
247: struct sudo_hook;
248: int register_hook(struct sudo_hook *hook);
249: int deregister_hook(struct sudo_hook *hook);
250: int process_hooks_getenv(const char *name, char **val);
251: int process_hooks_setenv(const char *name, const char *value, int overwrite);
252: int process_hooks_putenv(char *string);
253: int process_hooks_unsetenv(const char *name);
254:
1.1.1.3 misho 255: /* env_hooks.c */
256: char *getenv_unhooked(const char *name);
257:
1.1 misho 258: /* interfaces.c */
259: int get_net_ifs(char **addrinfo);
260:
261: /* setgroups.c */
262: int sudo_setgroups(int ngids, const GETGROUPS_T *gids);
263:
1.1.1.2 misho 264: /* ttyname.c */
265: char *get_process_ttyname(void);
266:
1.1.1.4 ! misho 267: /* signal.c */
! 268: struct sigaction;
! 269: extern int signal_pipe[2];
! 270: int sudo_sigaction(int signo, struct sigaction *sa, struct sigaction *osa);
! 271: void init_signals(void);
! 272: void restore_signals(void);
! 273: void save_signals(void);
! 274:
1.1 misho 275: #endif /* _SUDO_SUDO_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>