2 * Copyright (c) 1993-1996,1998-2001 Todd C. Miller <Todd.Miller@courtesan.com>
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * 3. The name of the author may not be used to endorse or promote products
17 * derived from this software without specific prior written permission.
19 * 4. Products derived from this software may not be called "Sudo" nor
20 * may "Sudo" appear in their names without specific prior written
21 * permission from the author.
23 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
24 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
25 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
26 * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
27 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
29 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
30 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
31 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
32 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 * $Sudo: sudo.h,v 1.184 2002/01/16 21:27:09 millert Exp $
40 #include <pathnames.h>
46 * Info pertaining to the invoking user.
50 struct passwd *_runas_pw;
66 * Return values for sudoers_lookup(), also used as arguments for log_auth()
67 * Note: cannot use '0' as a value here.
69 /* XXX - VALIDATE_SUCCESS and VALIDATE_FAILURE instead? */
70 #define VALIDATE_ERROR 0x01
71 #define VALIDATE_OK 0x02
72 #define VALIDATE_NOT_OK 0x04
73 #define FLAG_NOPASS 0x10
74 #define FLAG_NO_USER 0x20
75 #define FLAG_NO_HOST 0x40
76 #define FLAG_NO_CHECK 0x80
87 * find_path()/load_cmnd() return values
91 #define NOT_FOUND_DOT -1
94 * Various modes sudo can be in (based on arguments) in octal
96 #define MODE_RUN 000001
97 #define MODE_VALIDATE 000002
98 #define MODE_INVALIDATE 000004
99 #define MODE_KILL 000010
100 #define MODE_VERSION 000020
101 #define MODE_HELP 000040
102 #define MODE_LIST 000100
103 #define MODE_LISTDEFS 000200
104 #define MODE_BACKGROUND 000400
105 #define MODE_SHELL 001000
106 #define MODE_IMPLIED_SHELL 002000
107 #define MODE_RESET_HOME 004000
108 #define MODE_PRESERVE_GROUPS 010000
111 * Used with set_perms()
113 #define PERM_ROOT 0x00
114 #define PERM_FULL_ROOT 0x01
115 #define PERM_USER 0x02
116 #define PERM_FULL_USER 0x03
117 #define PERM_SUDOERS 0x04
118 #define PERM_RUNAS 0x05
121 * Shortcuts for sudo_user contents.
123 #define user_name (sudo_user.pw->pw_name)
124 #define user_passwd (sudo_user.pw->pw_passwd)
125 #define user_uid (sudo_user.pw->pw_uid)
126 #define user_gid (sudo_user.pw->pw_gid)
127 #define user_dir (sudo_user.pw->pw_dir)
128 #define user_shell (sudo_user.shell)
129 #define user_tty (sudo_user.tty)
130 #define user_cwd (sudo_user.cwd)
131 #define user_runas (sudo_user.runas)
132 #define user_cmnd (sudo_user.cmnd)
133 #define user_args (sudo_user.cmnd_args)
134 #define user_path (sudo_user.path)
135 #define user_prompt (sudo_user.prompt)
136 #define user_host (sudo_user.host)
137 #define user_shost (sudo_user.shost)
138 #define safe_cmnd (sudo_user.cmnd_safe)
139 #define login_class (sudo_user.class_name)
140 #define runas_pw (sudo_user._runas_pw)
143 * We used to use the system definition of PASS_MAX or _PASSWD_LEN,
144 * but that caused problems with various alternate authentication
145 * methods. So, we just define our own and assume that it is >= the
148 #define SUDO_PASS_MAX 256
151 * Flags for lock_file()
153 #define SUDO_LOCK 1 /* lock a file */
154 #define SUDO_TLOCK 2 /* test & lock a file (non-blocking) */
155 #define SUDO_UNLOCK 4 /* unlock a file */
158 * Flags for sudoers_lookup:
159 * PASSWD_NEVER: user never has to give a passwd
160 * PASSWD_ALL: no passwd needed if all entries for host have NOPASSWD flag
161 * PASSWD_ANY: no passwd needed if any entry for host has a NOPASSWD flag
162 * PASSWD_ALWAYS: passwd always needed
164 #define PWCHECK_NEVER 0x01
165 #define PWCHECK_ALL 0x02
166 #define PWCHECK_ANY 0x04
167 #define PWCHECK_ALWAYS 0x08
170 * Flags for tgetpass()
172 #define TGP_ECHO 0x01 /* leave echo on when reading passwd */
173 #define TGP_STDIN 0x02 /* read from stdin, not /dev/tty */
176 * Function prototypes
178 #define YY_DECL int yylex __P((void))
181 char *getcwd __P((char *, size_t size));
183 #ifndef HAVE_SNPRINTF
184 int snprintf __P((char *, size_t, const char *, ...));
186 #ifndef HAVE_VSNPRINTF
187 int vsnprintf __P((char *, size_t, const char *, va_list));
189 #ifndef HAVE_ASPRINTF
190 int asprintf __P((char **, const char *, ...));
192 #ifndef HAVE_VASPRINTF
193 int vasprintf __P((char **, const char *, va_list));
195 #ifndef HAVE_STRCASECMP
196 int strcasecmp __P((const char *, const char *));
198 char *sudo_goodpath __P((const char *));
199 char *tgetpass __P((const char *, int, int));
200 int find_path __P((char *, char **, char *));
201 void check_user __P((void));
202 void verify_user __P((struct passwd *, char *));
203 int sudoers_lookup __P((int));
204 void set_perms_posix __P((int, int));
205 void set_perms_fallback __P((int, int));
206 void remove_timestamp __P((int));
207 int check_secureware __P((char *));
208 void sia_attempt_auth __P((void));
209 void pam_attempt_auth __P((void));
210 int yyparse __P((void));
211 void pass_warn __P((FILE *));
212 VOID *emalloc __P((size_t));
213 VOID *erealloc __P((VOID *, size_t));
214 char *estrdup __P((const char *));
215 int easprintf __P((char **, const char *, ...));
216 int evasprintf __P((char **, const char *, va_list));
217 void dump_badenv __P((void));
218 void dump_defaults __P((void));
219 void dump_auth_methods __P((void));
220 void init_envtables __P((void));
221 int lock_file __P((int, int));
222 int touch __P((char *, time_t));
223 int user_is_exempt __P((void));
224 void set_fqdn __P((void));
225 char *sudo_getepw __P((struct passwd *));
226 int pam_prep_user __P((struct passwd *));
229 /* Only provide extern declarations outside of sudo.c. */
231 extern struct sudo_user sudo_user;
232 extern struct passwd *auth_pw;
236 extern FILE *sudoers_fp;
237 extern int tgetpass_flags;
239 extern void (*set_perms) __P((int, int));
243 #endif /* _SUDO_SUDO_H */