Annotation of embedaddon/sudo/src/sudo.h, revision 1.1.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>