[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