#include <config.h>
#include <compat.h>
-#include "error.h"
+#include <error.h>
+#include <sudo_plugin.h>
static void _warning(int, const char *, va_list);
void cleanup(int);
_warning(1, fmt, ap);
va_end(ap);
cleanup(0);
- if (error_jmp)
- siglongjmp(error_jmp, 1);
- else
- exit(eval);
+ siglongjmp(error_jmp, 1);
}
void
_warning(0, fmt, ap);
va_end(ap);
cleanup(0);
- if (error_jmp)
- siglongjmp(error_jmp, 1);
- else
- exit(eval);
+ siglongjmp(error_jmp, 1);
}
void
static void
_warning(int use_errno, const char *fmt, va_list ap)
{
- int serrno = errno;
+ struct sudo_conv_message msg[5];
+ struct sudo_conv_reply repl[5];
+ char *str;
+ int nmsgs = 3;
- fputs(getprogname(), stderr);
- if (fmt != NULL) {
- fputs(": ", stderr);
- vfprintf(stderr, fmt, ap);
- }
- if (use_errno) {
- fputs(": ", stderr);
- fputs(strerror(serrno), stderr);
- }
- putc('\n', stderr);
+ evasprintf(&str, fmt, ap);
+
+ /* Call conversation function */
+ memset(&msg, 0, sizeof(msg));
+ msg[0].msg_type = SUDO_CONV_ERROR_MSG;
+ msg[0].msg = getprogname();
+ msg[1].msg_type = SUDO_CONV_ERROR_MSG;
+ msg[1].msg = ":";
+ msg[2].msg_type = SUDO_CONV_ERROR_MSG;
+ msg[2].msg = str;
+ if (use_errno) {
+ msg[3].msg_type = SUDO_CONV_ERROR_MSG;
+ msg[3].msg = ":";
+ msg[4].msg_type = SUDO_CONV_ERROR_MSG;
+ msg[4].msg = strerror(errno);
+ nmsgs = 5;
+ }
+ memset(&repl, 0, sizeof(repl));
+ sudo_conv(nmsgs, msg, repl);
}
/*
- * Copyright (c) 1993-1996, 1998-2009 Todd C. Miller <Todd.Miller@courtesan.com>
+ * Copyright (c) 1993-1996, 1998-2010 Todd C. Miller <Todd.Miller@courtesan.com>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
return flags;
}
-#if 0 /* move to error.c */
-void
-warning(const char *fmt, ...)
-{
- struct sudo_conv_message msg;
- struct sudo_conv_reply repl;
- va_list ap;
- char *str, *tmp;
-
- va_start(ap, fmt);
- evasprintf(&tmp, fmt, ap);
- va_end(ap);
- easprintf(&str, "%s: %s: %s\n", getprogname(), tmp, strerror(errno));
- efree(tmp);
-
- /* Call conversation function */
- memset(&msg, 0, sizeof(msg));
- msg.msg_type = SUDO_CONV_ERROR_MSG;
- msg.msg = str;
- memset(&repl, 0, sizeof(repl));
- sudo_conv(1, &msg, &repl);
-}
-
-void
-warningx(const char *fmt, ...)
-{
- struct sudo_conv_message msg;
- struct sudo_conv_reply repl;
- va_list ap;
- char *str, *tmp;
- int rc;
-
- va_start(ap, fmt);
- rc = wvasprintf(&tmp, fmt, ap);
- va_end(ap);
- if (rc == -1)
- return;
- easprintf(&str, "%s: %s\n", getprogname(), tmp);
- efree(tmp);
-
- /* Call conversation function */
- memset(&msg, 0, sizeof(msg));
- msg.msg_type = SUDO_CONV_ERROR_MSG;
- msg.msg = str;
- memset(&repl, 0, sizeof(repl));
- sudo_conv(1, &msg, &repl);
-}
-#endif
-
struct policy_plugin sudoers_policy = {
SUDO_POLICY_PLUGIN,
SUDO_API_VERSION,