Imported Upstream version 1.6.6
[debian/sudo] / sudo.h
1 /*
2  * Copyright (c) 1993-1996,1998-2001 Todd C. Miller <Todd.Miller@courtesan.com>
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  *
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.
15  *
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.
18  *
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.
22  *
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.
33  *
34  * $Sudo: sudo.h,v 1.184 2002/01/16 21:27:09 millert Exp $
35  */
36
37 #ifndef _SUDO_SUDO_H
38 #define _SUDO_SUDO_H
39
40 #include <pathnames.h>
41 #include "compat.h"
42 #include "defaults.h"
43 #include "logging.h"
44
45 /*
46  * Info pertaining to the invoking user.
47  */
48 struct sudo_user {
49     struct passwd *pw;
50     struct passwd *_runas_pw;
51     char *path;
52     char *shell;
53     char *tty;
54     char  cwd[MAXPATHLEN];
55     char *host;
56     char *shost;
57     char **runas;
58     char *prompt;
59     char *cmnd_safe;
60     char *cmnd;
61     char *cmnd_args;
62     char *class_name;
63 };
64
65 /*
66  * Return values for sudoers_lookup(), also used as arguments for log_auth()
67  * Note: cannot use '0' as a value here.
68  */
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
77
78 /*
79  * Boolean values
80  */
81 #undef TRUE
82 #define TRUE                     1
83 #undef FALSE
84 #define FALSE                    0
85
86 /*
87  * find_path()/load_cmnd() return values
88  */
89 #define FOUND                    1
90 #define NOT_FOUND                0
91 #define NOT_FOUND_DOT           -1
92
93 /*
94  * Various modes sudo can be in (based on arguments) in octal
95  */
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
109
110 /*
111  * Used with set_perms()
112  */
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
119
120 /*
121  * Shortcuts for sudo_user contents.
122  */
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)
141
142 /*
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
146  * system max.
147  */
148 #define SUDO_PASS_MAX   256
149
150 /*
151  * Flags for lock_file()
152  */
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 */
156
157 /*
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
163  */
164 #define PWCHECK_NEVER   0x01
165 #define PWCHECK_ALL     0x02
166 #define PWCHECK_ANY     0x04
167 #define PWCHECK_ALWAYS  0x08
168
169 /*
170  * Flags for tgetpass()
171  */
172 #define TGP_ECHO        0x01            /* leave echo on when reading passwd */
173 #define TGP_STDIN       0x02            /* read from stdin, not /dev/tty */
174
175 /*
176  * Function prototypes
177  */
178 #define YY_DECL int yylex __P((void))
179
180 #ifndef HAVE_GETCWD
181 char *getcwd            __P((char *, size_t size));
182 #endif
183 #ifndef HAVE_SNPRINTF
184 int snprintf            __P((char *, size_t, const char *, ...));
185 #endif
186 #ifndef HAVE_VSNPRINTF
187 int vsnprintf           __P((char *, size_t, const char *, va_list));
188 #endif
189 #ifndef HAVE_ASPRINTF
190 int asprintf            __P((char **, const char *, ...));
191 #endif
192 #ifndef HAVE_VASPRINTF
193 int vasprintf           __P((char **, const char *, va_list));
194 #endif
195 #ifndef HAVE_STRCASECMP
196 int strcasecmp          __P((const char *, const char *));
197 #endif
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 *));
227 YY_DECL;
228
229 /* Only provide extern declarations outside of sudo.c. */
230 #ifndef _SUDO_SUDO_C
231 extern struct sudo_user sudo_user;
232 extern struct passwd *auth_pw;
233
234 extern int Argc;
235 extern char **Argv;
236 extern FILE *sudoers_fp;
237 extern int tgetpass_flags;
238
239 extern void (*set_perms) __P((int, int));
240 #endif
241 extern int errno;
242
243 #endif /* _SUDO_SUDO_H */