Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sudo-project
GitHub Repository: sudo-project/sudo
Path: blob/main/include/sudo_debug.h
1532 views
1
/*
2
* SPDX-License-Identifier: ISC
3
*
4
* Copyright (c) 2011-2017 Todd C. Miller <[email protected]>
5
*
6
* Permission to use, copy, modify, and distribute this software for any
7
* purpose with or without fee is hereby granted, provided that the above
8
* copyright notice and this permission notice appear in all copies.
9
*
10
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
*/
18
19
#ifndef SUDO_DEBUG_H
20
#define SUDO_DEBUG_H
21
22
#include <sys/types.h> /* for id_t, mode_t, size_t, ssize_t, time_t */
23
#include <stdarg.h>
24
#ifdef HAVE_STDBOOL_H
25
# include <stdbool.h>
26
#else
27
# include <compat/stdbool.h>
28
#endif
29
#include <sudo_queue.h>
30
31
/*
32
* List of debug files and flags for use in registration.
33
*/
34
struct sudo_debug_file {
35
TAILQ_ENTRY(sudo_debug_file) entries;
36
char *debug_file;
37
char *debug_flags;
38
};
39
struct sudo_conf_debug_file_list;
40
41
/*
42
* The priority and subsystem are encoded in a single 32-bit value.
43
* The lower 4 bits are the priority and the top 26 bits are the subsystem.
44
* This allows for 16 priorities and a very large number of subsystems.
45
* Bit 5 is used as a flag to specify whether to log the errno value.
46
* Bit 6 specifies whether to log the function, file and line number data.
47
*/
48
49
/*
50
* Sudo debug priorities, ordered least to most verbose,
51
* in other words, highest to lowest priority. Max pri is 15.
52
* Note: order must match sudo_debug_priorities[]
53
*/
54
#define SUDO_DEBUG_CRIT 1 /* critical errors */
55
#define SUDO_DEBUG_ERROR 2 /* non-critical errors */
56
#define SUDO_DEBUG_WARN 3 /* non-fatal warnings */
57
#define SUDO_DEBUG_NOTICE 4 /* non-error condition notices */
58
#define SUDO_DEBUG_DIAG 5 /* diagnostic messages */
59
#define SUDO_DEBUG_INFO 6 /* informational message */
60
#define SUDO_DEBUG_TRACE 7 /* log function enter/exit */
61
#define SUDO_DEBUG_DEBUG 8 /* very verbose debugging */
62
63
/* Flag to include string version of errno in debug info. */
64
#define SUDO_DEBUG_ERRNO (1<<4)
65
66
/* Flag to include function, file and line number in debug info. */
67
#define SUDO_DEBUG_LINENO (1<<5)
68
69
/*
70
* Sudo debug subsystems.
71
* This includes subsystems in the sudoers plugin.
72
* Note: order must match sudo_debug_subsystems[]
73
*/
74
#define SUDO_DEBUG_ARGS ( 1<<6) /* command line argument handling */
75
#define SUDO_DEBUG_CONV ( 2<<6) /* user conversation */
76
#define SUDO_DEBUG_EDIT ( 3<<6) /* sudoedit */
77
#define SUDO_DEBUG_EVENT ( 4<<6) /* event handling */
78
#define SUDO_DEBUG_EXEC ( 5<<6) /* command execution */
79
#define SUDO_DEBUG_HOOKS ( 6<<6) /* hook functions */
80
#define SUDO_DEBUG_MAIN ( 7<<6) /* sudo main() */
81
#define SUDO_DEBUG_NETIF ( 8<<6) /* network interface functions */
82
#define SUDO_DEBUG_PCOMM ( 9<<6) /* plugin communications */
83
#define SUDO_DEBUG_PLUGIN (10<<6) /* main plugin functions */
84
#define SUDO_DEBUG_PTY (11<<6) /* pseudo-tty */
85
#define SUDO_DEBUG_SELINUX (12<<6) /* selinux */
86
#define SUDO_DEBUG_UTIL (13<<6) /* utility functions */
87
#define SUDO_DEBUG_UTMP (14<<6) /* utmp file ops */
88
#define SUDO_DEBUG_APPARMOR (15<<6) /* AppArmor */
89
#define SUDO_DEBUG_ALL 0xffff0000 /* all subsystems */
90
91
/* Error return for sudo_debug_register(). */
92
#define SUDO_DEBUG_INSTANCE_ERROR -2
93
94
/* Initializer for instance index to indicate that debugging is not setup. */
95
#define SUDO_DEBUG_INSTANCE_INITIALIZER -1
96
97
/* Extract priority number and convert to an index. */
98
#define SUDO_DEBUG_PRI(n) (((n) & 0x0f) - 1)
99
100
/* Extract subsystem number and convert to an index. */
101
#define SUDO_DEBUG_SUBSYS(n) (((n) >> 6) - 1)
102
103
/*
104
* Wrapper for sudo_debug_enter() that declares __func__ as needed
105
* and sets sudo_debug_subsys for sudo_debug_exit().
106
*/
107
#ifdef HAVE___FUNC__
108
# define debug_decl_func(funcname)
109
# define debug_decl_vars(funcname, subsys) \
110
const unsigned int sudo_debug_subsys = (subsys)
111
#else
112
# define debug_decl_func(funcname) \
113
const char __func__[] = #funcname;
114
# define debug_decl_vars(funcname, subsys) \
115
debug_decl_func(funcname) \
116
const unsigned int sudo_debug_subsys = (subsys)
117
#endif
118
#define debug_decl(funcname, subsys) \
119
debug_decl_vars((funcname), (subsys)); \
120
sudo_debug_enter(__func__, __FILE__, __LINE__, sudo_debug_subsys)
121
122
/*
123
* Different flavors of sudo_debug_exit() macros.
124
*/
125
#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
126
# define sudo_debug_enter(_func, _file, _line, _sys) \
127
do { \
128
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
129
"-> %s @ %s:%d", (_func), (_file), (_line)); \
130
} while (0)
131
132
# define sudo_debug_exit(_func, _file, _line, _sys) \
133
do { \
134
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
135
"<- %s @ %s:%d", (_func), (_file), (_line)); \
136
} while (0)
137
138
# define sudo_debug_exit_int(_func, _file, _line, _sys, _ret) \
139
do { \
140
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
141
"<- %s @ %s:%d := %d", (_func), (_file), (_line), (_ret)); \
142
} while (0)
143
144
# define sudo_debug_exit_uint(_func, _file, _line, _sys, _ret) \
145
do { \
146
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
147
"<- %s @ %s:%d := %u", (_func), (_file), (_line), (_ret)); \
148
} while (0)
149
150
# define sudo_debug_exit_long(_func, _file, _line, _sys, _ret) \
151
do { \
152
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
153
"<- %s @ %s:%d := %ld", (_func), (_file), (_line), (_ret)); \
154
} while (0)
155
156
# define sudo_debug_exit_dev_t(_func, _file, _line, _sys, _ret) \
157
do { \
158
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
159
"<- %s @ %s:%d := %lu", (_func), (_file), (_line), \
160
(unsigned long)(_ret)); \
161
} while (0)
162
163
# if SIZEOF_ID_T == 8
164
# define sudo_debug_exit_id_t(_func, _file, _line, _sys, _ret) \
165
do { \
166
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
167
"<- %s @ %s:%d := %lld", (_func), (_file), (_line), (long long)(_ret));\
168
} while (0)
169
# else
170
# define sudo_debug_exit_id_t(_func, _file, _line, _sys, _ret) \
171
do { \
172
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
173
"<- %s @ %s:%d := %d", (_func), (_file), (_line), (int)(_ret)); \
174
} while (0)
175
# endif
176
177
# define sudo_debug_exit_size_t(_func, _file, _line, _sys, _ret) \
178
do { \
179
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
180
"<- %s @ %s:%d := %zu", (_func), (_file), (_line), (_ret)); \
181
} while (0)
182
183
# define sudo_debug_exit_ssize_t(_func, _file, _line, _sys, _ret) \
184
do { \
185
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
186
"<- %s @ %s:%d := %zd", (_func), (_file), (_line), (_ret)); \
187
} while (0)
188
189
# if SIZEOF_TIME_T == 8
190
# define sudo_debug_exit_time_t(_func, _file, _line, _sys, _ret) \
191
do { \
192
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
193
"<- %s @ %s:%d := %lld", (_func), (_file), (_line), (long long)(_ret));\
194
} while (0)
195
# else
196
# define sudo_debug_exit_time_t(_func, _file, _line, _sys, _ret) \
197
do { \
198
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
199
"<- %s @ %s:%d := %d", (_func), (_file), (_line), (int)(_ret)); \
200
} while (0)
201
# endif
202
203
# define sudo_debug_exit_mode_t(_func, _file, _line, _sys, _ret) \
204
do { \
205
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
206
"<- %s @ %s:%d := %d", (_func), (_file), (_line), (int)(_ret)); \
207
} while (0)
208
209
# define sudo_debug_exit_bool(_func, _file, _line, _sys, _ret) \
210
do { \
211
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
212
"<- %s @ %s:%d := %s", (_func), (_file), (_line), (_ret) ? "true": "false");\
213
} while (0)
214
215
# define sudo_debug_exit_str(_func, _file, _line, _sys, _ret) \
216
do { \
217
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
218
"<- %s @ %s:%d := %s", (_func), (_file), (_line), (_ret) ? (_ret) : "(null)");\
219
} while (0)
220
221
# define sudo_debug_exit_str_masked(_func, _file, _line, _sys, _ret) \
222
do { \
223
const char _stars[] = "********************************************************************************"; \
224
const size_t _len = (_ret) ? strlen(_ret) : sizeof("(null)") - 1; \
225
const char *_s = (_ret) ? _stars : "(null)"; \
226
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
227
"<- %s @ %s:%d := %.*s", (_func), (_file), (_line), (int)_len, _s);\
228
} while (0)
229
230
# define sudo_debug_exit_ptr(_func, _file, _line, _sys, _ret) \
231
do { \
232
sudo_debug_printf2(NULL, NULL, 0, (_sys) | SUDO_DEBUG_TRACE, \
233
"<- %s @ %s:%d := %p", (_func), (_file), (_line), (_ret)); \
234
} while (0)
235
#else /* FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION */
236
# define sudo_debug_enter(_a, _b, _c, _d) ((void)&(_d))
237
# define sudo_debug_exit(_a, _b, _c, _d) ((void)&(_d))
238
# define sudo_debug_exit_int(_a, _b, _c, _d, _e) ((void)&(_d))
239
# define sudo_debug_exit_uint(_a, _b, _c, _d, _e) ((void)&(_d))
240
# define sudo_debug_exit_long(_a, _b, _c, _d, _e) ((void)&(_d))
241
# define sudo_debug_exit_dev_t(_a, _b, _c, _d, _e) ((void)&(_d))
242
# define sudo_debug_exit_id_t(_a, _b, _c, _d, _e) ((void)&(_d))
243
# define sudo_debug_exit_size_t(_a, _b, _c, _d, _e) ((void)&(_d))
244
# define sudo_debug_exit_ssize_t(_a, _b, _c, _d, _e) ((void)&(_d))
245
# define sudo_debug_exit_time_t(_a, _b, _c, _d, _e) ((void)&(_d))
246
# define sudo_debug_exit_mode_t(_a, _b, _c, _d, _e) ((void)&(_d))
247
# define sudo_debug_exit_bool(_a, _b, _c, _d, _e) ((void)&(_d))
248
# define sudo_debug_exit_str(_a, _b, _c, _d, _e) ((void)&(_d))
249
# define sudo_debug_exit_str_masked(_a, _b, _c, _d, _e) ((void)&(_d))
250
# define sudo_debug_exit_ptr(_a, _b, _c, _d, _e) ((void)&(_d))
251
#endif /* FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION */
252
253
/*
254
* Wrappers for sudo_debug_exit() and friends.
255
*/
256
#define debug_return \
257
do { \
258
sudo_debug_exit(__func__, __FILE__, __LINE__, sudo_debug_subsys); \
259
return; \
260
} while (0)
261
262
#define debug_return_int(ret) \
263
do { \
264
int sudo_debug_ret = (ret); \
265
sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, \
266
sudo_debug_ret); \
267
return sudo_debug_ret; \
268
} while (0)
269
270
#define debug_return_uint(ret) \
271
do { \
272
unsigned int sudo_debug_ret = (ret); \
273
sudo_debug_exit_uint(__func__, __FILE__, __LINE__, sudo_debug_subsys, \
274
sudo_debug_ret); \
275
return sudo_debug_ret; \
276
} while (0)
277
278
#define debug_return_dev_t(ret) \
279
do { \
280
dev_t sudo_debug_ret = (ret); \
281
sudo_debug_exit_dev_t(__func__, __FILE__, __LINE__, sudo_debug_subsys,\
282
sudo_debug_ret); \
283
return sudo_debug_ret; \
284
} while (0)
285
286
#define debug_return_id_t(ret) \
287
do { \
288
id_t sudo_debug_ret = (ret); \
289
sudo_debug_exit_id_t(__func__, __FILE__, __LINE__, sudo_debug_subsys,\
290
sudo_debug_ret); \
291
return sudo_debug_ret; \
292
} while (0)
293
294
#define debug_return_size_t(ret) \
295
do { \
296
size_t sudo_debug_ret = (ret); \
297
sudo_debug_exit_size_t(__func__, __FILE__, __LINE__, sudo_debug_subsys,\
298
sudo_debug_ret); \
299
return sudo_debug_ret; \
300
} while (0)
301
302
#define debug_return_ssize_t(ret) \
303
do { \
304
ssize_t sudo_debug_ret = (ret); \
305
sudo_debug_exit_ssize_t(__func__, __FILE__, __LINE__, sudo_debug_subsys,\
306
sudo_debug_ret); \
307
return sudo_debug_ret; \
308
} while (0)
309
310
#define debug_return_time_t(ret) \
311
do { \
312
time_t sudo_debug_ret = (ret); \
313
sudo_debug_exit_time_t(__func__, __FILE__, __LINE__, sudo_debug_subsys,\
314
sudo_debug_ret); \
315
return sudo_debug_ret; \
316
} while (0)
317
318
#define debug_return_mode_t(ret) \
319
do { \
320
mode_t sudo_debug_ret = (ret); \
321
sudo_debug_exit_mode_t(__func__, __FILE__, __LINE__, sudo_debug_subsys,\
322
sudo_debug_ret); \
323
return sudo_debug_ret; \
324
} while (0)
325
326
#define debug_return_long(ret) \
327
do { \
328
long sudo_debug_ret = (ret); \
329
sudo_debug_exit_long(__func__, __FILE__, __LINE__, sudo_debug_subsys, \
330
sudo_debug_ret); \
331
return sudo_debug_ret; \
332
} while (0)
333
334
#define debug_return_bool(ret) \
335
do { \
336
bool sudo_debug_ret = (ret); \
337
sudo_debug_exit_bool(__func__, __FILE__, __LINE__, sudo_debug_subsys, \
338
sudo_debug_ret); \
339
return sudo_debug_ret; \
340
} while (0)
341
342
#define debug_return_str(ret) \
343
do { \
344
char *sudo_debug_ret = (ret); \
345
sudo_debug_exit_str(__func__, __FILE__, __LINE__, sudo_debug_subsys, \
346
sudo_debug_ret); \
347
return sudo_debug_ret; \
348
} while (0)
349
350
#define debug_return_const_str(ret) \
351
do { \
352
const char *sudo_debug_ret = (ret); \
353
sudo_debug_exit_str(__func__, __FILE__, __LINE__, sudo_debug_subsys, \
354
sudo_debug_ret); \
355
return sudo_debug_ret; \
356
} while (0)
357
358
#define debug_return_str_masked(ret) \
359
do { \
360
char *sudo_debug_ret = (ret); \
361
sudo_debug_exit_str_masked(__func__, __FILE__, __LINE__, \
362
sudo_debug_subsys, sudo_debug_ret); \
363
return sudo_debug_ret; \
364
} while (0)
365
366
#define debug_return_ptr(ret) \
367
do { \
368
void *sudo_debug_ret = (ret); \
369
sudo_debug_exit_ptr(__func__, __FILE__, __LINE__, sudo_debug_subsys, \
370
sudo_debug_ret); \
371
return sudo_debug_ret; \
372
} while (0)
373
374
#define debug_return_const_ptr(ret) \
375
do { \
376
const void *sudo_debug_ret = (ret); \
377
sudo_debug_exit_ptr(__func__, __FILE__, __LINE__, sudo_debug_subsys, \
378
sudo_debug_ret); \
379
return sudo_debug_ret; \
380
} while (0)
381
382
/*
383
* Variadic macros are a C99 feature but GNU cpp has supported
384
* a (different) version of them for a long time.
385
*/
386
#if defined(NO_VARIADIC_MACROS)
387
# define sudo_debug_printf sudo_debug_printf_nvm
388
#elif defined(__GNUC__) && __GNUC__ == 2
389
# define sudo_debug_printf(pri, fmt...) \
390
sudo_debug_printf2(__func__, __FILE__, __LINE__, (pri)|sudo_debug_subsys, \
391
fmt)
392
#else
393
# define sudo_debug_printf(pri, ...) \
394
sudo_debug_printf2(__func__, __FILE__, __LINE__, (pri)|sudo_debug_subsys, \
395
__VA_ARGS__)
396
#endif
397
398
#define sudo_debug_execve(pri, path, argv, envp) \
399
sudo_debug_execve2((pri)|sudo_debug_subsys, (path), (argv), (envp))
400
401
#define sudo_debug_write(fd, str, len, errnum) \
402
sudo_debug_write2(fd, NULL, NULL, 0, (str), (len), (errnum))
403
404
sudo_dso_public int sudo_debug_deregister_v1(int instance_id);
405
sudo_dso_public void sudo_debug_enter_v1(const char *func, const char *file, int line, unsigned int subsys);
406
sudo_dso_public void sudo_debug_execve2_v1(unsigned int level, const char *path, char *const argv[], char *const envp[]);
407
sudo_dso_public void sudo_debug_exit_v1(const char *func, const char *file, int line, unsigned int subsys);
408
sudo_dso_public void sudo_debug_exit_bool_v1(const char *func, const char *file, int line, unsigned int subsys, bool ret);
409
sudo_dso_public void sudo_debug_exit_int_v1(const char *func, const char *file, int line, unsigned int subsys, int ret);
410
sudo_dso_public void sudo_debug_exit_uint_v1(const char *func, const char *file, int line, unsigned int subsys, unsigned int ret);
411
sudo_dso_public void sudo_debug_exit_long_v1(const char *func, const char *file, int line, unsigned int subsys, long ret);
412
sudo_dso_public void sudo_debug_exit_ptr_v1(const char *func, const char *file, int line, unsigned int subsys, const void *ret);
413
sudo_dso_public void sudo_debug_exit_id_t_v1(const char *func, const char *file, int line, unsigned int subsys, id_t ret);
414
sudo_dso_public void sudo_debug_exit_size_t_v1(const char *func, const char *file, int line, unsigned int subsys, size_t ret);
415
sudo_dso_public void sudo_debug_exit_ssize_t_v1(const char *func, const char *file, int line, unsigned int subsys, ssize_t ret);
416
sudo_dso_public void sudo_debug_exit_str_v1(const char *func, const char *file, int line, unsigned int subsys, const char *ret);
417
sudo_dso_public void sudo_debug_exit_str_masked_v1(const char *func, const char *file, int line, unsigned int subsys, const char *ret);
418
sudo_dso_public void sudo_debug_exit_time_t_v1(const char *func, const char *file, int line, unsigned int subsys, time_t ret);
419
sudo_dso_public void sudo_debug_exit_mode_t_v1(const char *func, const char *file, int line, unsigned int subsys, mode_t ret);
420
sudo_dso_public pid_t sudo_debug_fork_v1(void);
421
sudo_dso_public int sudo_debug_get_active_instance_v1(void);
422
sudo_dso_public int sudo_debug_get_fds_v1(unsigned char **fds);
423
sudo_dso_public int sudo_debug_get_instance_v1(const char *program);
424
sudo_dso_public int sudo_debug_parse_flags_v1(struct sudo_conf_debug_file_list *debug_files, const char *entry);
425
sudo_dso_public void sudo_debug_printf2_v1(const char *func, const char *file, int line, unsigned int level, const char * restrict fmt, ...) sudo_printf0like(5, 6);
426
sudo_dso_public void sudo_debug_printf_nvm_v1(int pri, const char * restrict fmt, ...) sudo_printf0like(2, 3);
427
sudo_dso_public int sudo_debug_register_v1(const char *program, const char *const subsystems[], unsigned int ids[], struct sudo_conf_debug_file_list *debug_files);
428
sudo_dso_public int sudo_debug_register_v2(const char *program, const char *const subsystems[], unsigned int ids[], struct sudo_conf_debug_file_list *debug_files, int minfd);
429
sudo_dso_public int sudo_debug_set_active_instance_v1(int inst);
430
sudo_dso_public void sudo_debug_update_fd_v1(int ofd, int nfd);
431
sudo_dso_public void sudo_debug_vprintf2_v1(const char *func, const char *file, int line, unsigned int level, const char * restrict fmt, va_list ap) sudo_printf0like(5, 0);
432
sudo_dso_public void sudo_debug_write2_v1(int fd, const char *func, const char *file, int line, const char *str, unsigned int len, int errnum);
433
sudo_dso_public bool sudo_debug_needed_v1(unsigned int level);
434
435
#define sudo_debug_needed(level) sudo_debug_needed_v1((level)|sudo_debug_subsys)
436
#define sudo_debug_deregister(_a) sudo_debug_deregister_v1((_a))
437
#define sudo_debug_execve2(_a, _b, _c, _d) sudo_debug_execve2_v1((_a), (_b), (_c), (_d))
438
#define sudo_debug_fork() sudo_debug_fork_v1()
439
#define sudo_debug_get_active_instance() sudo_debug_get_active_instance_v1()
440
#define sudo_debug_get_fds(_a) sudo_debug_get_fds_v1((_a))
441
#define sudo_debug_get_instance(_a) sudo_debug_get_instance_v1((_a))
442
#define sudo_debug_parse_flags(_a, _b) sudo_debug_parse_flags_v1((_a), (_b))
443
#define sudo_debug_printf2 sudo_debug_printf2_v1
444
#define sudo_debug_printf_nvm sudo_debug_printf_nvm_v1
445
#define sudo_debug_register(_a, _b, _c, _d, _e) sudo_debug_register_v2((_a), (_b), (_c), (_d), (_e))
446
#define sudo_debug_set_active_instance(_a) sudo_debug_set_active_instance_v1((_a))
447
#define sudo_debug_update_fd(_a, _b) sudo_debug_update_fd_v1((_a), (_b))
448
#define sudo_debug_vprintf2(_a, _b, _c, _d, _e, _f) sudo_debug_vprintf2_v1((_a), (_b), (_c), (_d), (_e), (_f))
449
#define sudo_debug_write2(_a, _b, _c, _d, _e, _f, _g) sudo_debug_write2_v1((_a), (_b), (_c), (_d), (_e), (_f), (_g))
450
451
#endif /* SUDO_DEBUG_H */
452
453