debug_return;
}
-void
-log_error(int flags, const char *fmt, ...)
+/*
+ * Perform logging for log_error()/log_fatal()
+ */
+static void
+vlog_error(int flags, const char *fmt, va_list ap)
{
int serrno = errno;
char *logline, *message;
- va_list ap;
- debug_decl(log_error, SUDO_DEBUG_LOGGING)
+ debug_decl(vlog_error, SUDO_DEBUG_LOGGING)
/* Expand printf-style format + args. */
- va_start(ap, fmt);
evasprintf(&message, fmt, ap);
- va_end(ap);
/* Become root if we are not already to avoid user interference */
set_perms(PERM_ROOT|PERM_NOEXIT);
restore_perms();
- if (!ISSET(flags, NO_EXIT)) {
- plugin_cleanup(0);
- siglongjmp(error_jmp, 1);
- }
debug_return;
}
+void
+log_error(int flags, const char *fmt, ...)
+{
+ va_list ap;
+ debug_decl(log_error, SUDO_DEBUG_LOGGING)
+
+ /* Log the error. */
+ va_start(ap, fmt);
+ vlog_error(flags, fmt, ap);
+ va_end(ap);
+
+ debug_return;
+}
+
+void
+log_fatal(int flags, const char *fmt, ...)
+{
+ va_list ap;
+ debug_decl(log_error, SUDO_DEBUG_LOGGING)
+
+ /* Log the error. */
+ va_start(ap, fmt);
+ vlog_error(flags, fmt, ap);
+ va_end(ap);
+
+ /* Exit the plugin. */
+ plugin_cleanup(0);
+ sudo_debug_exit(__func__, __FILE__, __LINE__, sudo_debug_subsys);
+ siglongjmp(error_jmp, 1);
+}
+
#define MAX_MAILFLAGS 63
/*
debug_return;
/* Fork and return, child will daemonize. */
- switch (pid = fork()) {
+ switch (pid = sudo_debug_fork()) {
case -1:
/* Error. */
error(1, _("unable to fork"));
_exit(1);
}
- switch (pid = fork()) {
+ switch (pid = sudo_debug_fork()) {
case -1:
/* Error. */
mysyslog(LOG_ERR, _("unable to fork: %m"));