File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sudo / plugins / sudoers / plugin_error.c
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:26:49 2012 UTC (12 years, 2 months ago) by misho
Branches: sudo, MAIN
CVS tags: v1_8_5p1, HEAD
sudo 1.8.5p1

    1: /*
    2:  * Copyright (c) 2004-2005, 2010 Todd C. Miller <Todd.Miller@courtesan.com>
    3:  *
    4:  * Permission to use, copy, modify, and distribute this software for any
    5:  * purpose with or without fee is hereby granted, provided that the above
    6:  * copyright notice and this permission notice appear in all copies.
    7:  *
    8:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    9:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   10:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
   11:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   12:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   13:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
   14:  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   15:  */
   16: 
   17: #include <config.h>
   18: 
   19: #include <sys/types.h>
   20: 
   21: #include <errno.h>
   22: #include <stdio.h>
   23: #include <stdlib.h>
   24: #include <string.h>
   25: #include <setjmp.h>
   26: 
   27: #include "missing.h"
   28: #include "alloc.h"
   29: #include "error.h"
   30: #include "sudo_plugin.h"
   31: 
   32: #define DEFAULT_TEXT_DOMAIN	"sudoers"
   33: #include "gettext.h"
   34: 
   35: static void _warning(int, const char *, va_list);
   36:        void plugin_cleanup(int);
   37: 
   38: extern sigjmp_buf error_jmp;
   39: 
   40: extern sudo_conv_t sudo_conv;
   41: 
   42: void
   43: error2(int eval, const char *fmt, ...)
   44: {
   45:     va_list ap;
   46: 
   47:     va_start(ap, fmt);
   48:     _warning(1, fmt, ap);
   49:     va_end(ap);
   50:     plugin_cleanup(0);
   51:     siglongjmp(error_jmp, eval);
   52: }
   53: 
   54: void
   55: errorx2(int eval, const char *fmt, ...)
   56: {
   57:     va_list ap;
   58: 
   59:     va_start(ap, fmt);
   60:     _warning(0, fmt, ap);
   61:     va_end(ap);
   62:     plugin_cleanup(0);
   63:     siglongjmp(error_jmp, eval);
   64: }
   65: 
   66: void
   67: warning2(const char *fmt, ...)
   68: {
   69:     va_list ap;
   70: 
   71:     va_start(ap, fmt);
   72:     _warning(1, fmt, ap);
   73:     va_end(ap);
   74: }
   75: 
   76: void
   77: warningx2(const char *fmt, ...)
   78: {
   79:     va_list ap;
   80:     va_start(ap, fmt);
   81:     _warning(0, fmt, ap);
   82:     va_end(ap);
   83: }
   84: 
   85: static void
   86: _warning(int use_errno, const char *fmt, va_list ap)
   87: {
   88:     struct sudo_conv_message msg[6];
   89:     struct sudo_conv_reply repl[6];
   90:     char *str;
   91:     int nmsgs = 4;
   92: 
   93:     evasprintf(&str, fmt, ap);
   94: 
   95:     /* Call conversation function */
   96:     memset(&msg, 0, sizeof(msg));
   97:     msg[0].msg_type = SUDO_CONV_ERROR_MSG;
   98:     msg[0].msg = getprogname();
   99:     msg[1].msg_type = SUDO_CONV_ERROR_MSG;
  100:     msg[1].msg = _(": ");
  101:     msg[2].msg_type = SUDO_CONV_ERROR_MSG;
  102:     msg[2].msg = str;
  103:     if (use_errno) {
  104: 	msg[3].msg_type = SUDO_CONV_ERROR_MSG;
  105: 	msg[3].msg = _(": ");
  106: 	msg[4].msg_type = SUDO_CONV_ERROR_MSG;
  107: 	msg[4].msg = strerror(errno);
  108: 	nmsgs = 6;
  109:     }
  110:     msg[nmsgs - 1].msg_type = SUDO_CONV_ERROR_MSG;
  111:     msg[nmsgs - 1].msg = "\n";
  112:     memset(&repl, 0, sizeof(repl));
  113:     sudo_conv(nmsgs, msg, repl);
  114:     efree(str);
  115: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>