=== modified file 'plugins.d/password-prompt.c' --- plugins.d/password-prompt.c 2011-03-17 18:19:08 +0000 +++ plugins.d/password-prompt.c 2011-06-19 20:25:38 +0000 @@ -41,7 +41,7 @@ getenv(), free() */ #include /* scandir(), alphasort() */ #include /* fprintf(), stderr, getline(), - stdin, feof(), fputc() + stdin, feof(), fputc(), vfprintf(), vasprintf() */ #include /* errno, EBADF, ENOTTY, EINVAL, EFAULT, EFBIG, EIO, ENOSPC, EINTR @@ -51,7 +51,7 @@ #include /* bool, false, true */ #include /* strtoumax() */ #include /* struct stat, lstat(), open() */ -#include /* strlen, rindex, memcmp */ +#include /* strlen, rindex, memcmp, strerror() */ #include /* struct argp_option, struct argp_state, struct argp, argp_parse(), error_t, @@ -60,6 +60,7 @@ #include /* EX_SOFTWARE, EX_OSERR, EX_UNAVAILABLE, EX_IOERR, EX_OK */ #include /* open() */ +#include /* va_list, va_start(), ... */ volatile sig_atomic_t quit_now = 0; int signal_received; @@ -70,6 +71,27 @@ /* Needed for conflict resolution */ const char plymouth_name[] = "plymouthd"; +/* Function to use when printing errors */ +void error_plus(int status, int errnum, const char *formatstring, ...){ + va_list ap; + char *text; + int ret; + + va_start(ap, formatstring); + ret = vasprintf(&text, formatstring, ap); + if (ret == -1){ + fprintf(stderr, "Mandos plugin %s: ", program_invocation_short_name); + vfprintf(stderr, formatstring, ap); + fprintf(stderr, ": "); + fprintf(stderr, "%s\n", strerror(errnum)); + error(status, errno, "vasprintf while printing error"); + return; + } + fprintf(stderr, "Mandos plugin "); + error(status, errnum, "%s", text); + free(text); +} + static void termination_handler(int signum){ if(quit_now){ return;