[Nut-upsdev] [nut-commits] svn commit r1837 - trunk/clients
Arnaud Quette
aquette.dev at gmail.com
Mon May 18 12:43:26 UTC 2009
2009/5/17 Daniel O'Connor <doconnor at gsoft.com.au>
> On Sun, 17 May 2009, Arnaud Quette wrote:
> > > Sounds good to me.
> > > I was also thinking of an option to use syslog, that way upslog can
> > > run as whatever user and not have to worry about file perms.
> >
> > can you propose a patch for that?
>
> Well I have this..
> diff -r c79ce7440a78 clients/upslog.c
> --- a/clients/upslog.c Sun May 17 18:09:51 2009 +0930
> +++ b/clients/upslog.c Sun May 17 19:28:15 2009 +0930
> @@ -38,6 +38,9 @@
> #include "timehead.h"
> #include "upslog.h"
>
> +#include <syslog.h>
> +#include <stdarg.h>
> +
> static int port, reopen_flag = 0, exit_flag = 0;
> static char *upsname, *hostname;
> static UPSCONN_t ups;
> @@ -55,6 +58,11 @@
>
> static void reopen_log(void)
> {
> + if (logfile == NULL) {
> + upslogx(LOG_INFO, "logging to syslog");
> + return;
> + }
> +
> if (logfile == stdout) {
> upslogx(LOG_INFO, "logging to stdout");
> return;
> @@ -108,7 +116,7 @@
> printf(" -f <format> - Log format. See below for details.\n");
> printf(" - Use -f \"<format>\" so your shell doesn't
> break it up.\n");
> printf(" -i <interval> - Time between updates, in seconds\n");
> - printf(" -l <logfile> - Log file name, or - for stdout\n");
> + printf(" -l <logfile> - Log file name (- for stdout, syslog for
> syslog)\n");
> printf(" -s <ups> - Monitor UPS <ups> -
> <upsname>@<host>[:<port>]\n");
> printf(" - Example: -s myups at server\n");
> printf(" -u <user> - Switch to <user> if started as root\n");
> @@ -354,9 +362,12 @@
> tmp = tmp->next;
> }
>
> - fprintf(logfile, "%s\n", logbuffer);
> - fflush(logfile);
> -}
> + if (logfile == NULL)
> + syslog(LOG_INFO, "%s", logbuffer);
> + else {
> + fprintf(logfile, "%s\n", logbuffer);
> + fflush(logfile);
> + }
>
> /* -s <monhost>
> * -l <log file>
> @@ -364,6 +375,7 @@
> * -f <format>
> * -u <username>
> */
> +}
>
> int main(int argc, char **argv)
> {
> @@ -458,21 +470,28 @@
> fprintf(stderr, "Warning: initial connect failed: %s\n",
> upscli_strerror(&ups));
>
> - if (strcmp(logfn, "-") == 0)
> - logfile = stdout;
> - else
> - logfile = fopen(logfn, "a");
> -
> - if (logfile == NULL)
> - fatal_with_errno(EXIT_FAILURE, "could not open logfile %s",
> logfn);
> -
> + if (strcmp(logfn, "syslog")) {
> + openlog("upslog", LOG_PID, LOG_DAEMON);
> + logfile = NULL;
> + } else {
> + if (strcmp(logfn, "-") == 0)
> + logfile = stdout;
> + else
> + logfile = fopen(logfn, "a");
> +
> + if (logfile == NULL)
> + fatal_with_errno(EXIT_FAILURE, "could not open
> logfile %s", logfn);
> + }
> +
> /* now drop root if we have it */
> new_uid = get_user_pwent(user);
>
> But I am having trouble debugging it because libtool is being a right pain
> in the arse.
> [cain 19:28] ~/projects/nut-2.4.1 >gdb ./clients/.libs/upslog
> GNU gdb 6.1.1 [FreeBSD]
> Copyright 2004 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you
> are
> welcome to change it and/or distribute copies of it under certain
> conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB. Type "show warranty" for details.
> This GDB was configured as "amd64-marcel-freebsd"...
> (gdb) run
> Starting program:
> /usr/local/Genesis/home/doconnor/projects/nut-2.4.1/clients/.libs/upslog
> /libexec/ld-elf.so.1: Shared object "libupsclient.so.1" not found, required
> by "upslog"
>
> Program exited with code 01.
> (gdb) %
> [cain
> 19:29] ~/projects/nut-2.4.1 >libtool --mode=execute gdb clients/upslog
> clients/upslog: Xclients/upslog: not found
> clients/upslog: /usr/local/bin/libtool: error:
> `/usr/local/Genesis/home/doconnor/projects/nut-2.4.1/.libs/upslog' does
> not exist: not found
> This script is just a wrapper for upslog.: not found
> See the libtool documentation for more information.
>
> I can't just install it because this is on a production system.
>
adding "/usr/local/Genesis/home/doconnor/projects/nut-2.4.1/.libs/" to
$LD_LIBRARY_PATH might help you there.
Also, either my changes broke it or it's already busted, but "-l -" doesn't
> keep it in the foreground..
>
still working in a vanilla trunk.
I've not tried your patch (failing to apply, and not much time to apply by
hand), but it seems fine apart of:
+ if (strcmp(logfn, "syslog")) {
which I guess should be
+ if (strcmp(logfn, "syslog") == 0) {
btw, use the unified format for diffing (ie diff -ru ...).
Arnaud
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/nut-upsdev/attachments/20090518/e87361e9/attachment.htm>
More information about the Nut-upsdev
mailing list