[libvirt] [PATCH 1/5] Tighten libvirt's parsing of logging environment variables

Daniel P. Berrange berrange at redhat.com
Thu Aug 6 11:56:32 UTC 2009


On Fri, Jul 31, 2009 at 05:57:25PM -0400, Amy Griffis wrote:
> Don't convert high priority levels to the debug level. Don't parse
> LIBVIRT_LOG_FILTERS and LIBVIRT_LOG_OUTPUTS when they're set to the
> empty string. Warn when the user specifies an invalid value (empty
> string remains a noop).
> ---
> 
>  src/libvirt.c |   13 ++++++++-----
>  src/logging.c |   52 ++++++++++++++++++++++++++++++++--------------------
>  2 files changed, 40 insertions(+), 25 deletions(-)


ACK

Daniel

> 
> diff --git a/src/libvirt.c b/src/libvirt.c
> index 61a9b7c..9e96410 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c
> @@ -274,21 +274,24 @@ virInitialize(void)
>          return -1;
>  
>      debugEnv = getenv("LIBVIRT_DEBUG");
> -    if (debugEnv && *debugEnv && *debugEnv != '0') {
> -        if (STREQ(debugEnv, "2") || STREQ(debugEnv, "info"))
> +    if (debugEnv && *debugEnv) {
> +        if (STREQ(debugEnv, "1") || STREQ(debugEnv, "debug"))
> +            virLogSetDefaultPriority(VIR_LOG_DEBUG);
> +        else if (STREQ(debugEnv, "2") || STREQ(debugEnv, "info"))
>              virLogSetDefaultPriority(VIR_LOG_INFO);
>          else if (STREQ(debugEnv, "3") || STREQ(debugEnv, "warning"))
>              virLogSetDefaultPriority(VIR_LOG_WARN);
>          else if (STREQ(debugEnv, "4") || STREQ(debugEnv, "error"))
>              virLogSetDefaultPriority(VIR_LOG_ERROR);
>          else
> -            virLogSetDefaultPriority(VIR_LOG_DEBUG);
> +            VIR_WARN0(_("Ignoring invalid log level setting."));
>      }
>      debugEnv = getenv("LIBVIRT_LOG_FILTERS");
> -    if (debugEnv)
> +    if (debugEnv && *debugEnv)
>          virLogParseFilters(debugEnv);
> +
>      debugEnv = getenv("LIBVIRT_LOG_OUTPUTS");
> -    if (debugEnv)
> +    if (debugEnv && *debugEnv)
>          virLogParseOutputs(debugEnv);
>  
>      DEBUG0("register drivers");
> diff --git a/src/logging.c b/src/logging.c
> index 46a4f9f..27d6e4b 100644
> --- a/src/logging.c
> +++ b/src/logging.c
> @@ -314,8 +314,10 @@ error:
>   * Returns 0 if successful, -1 in case of error.
>   */
>  int virLogSetDefaultPriority(int priority) {
> -    if ((priority < VIR_LOG_DEBUG) || (priority > VIR_LOG_ERROR))
> +    if ((priority < VIR_LOG_DEBUG) || (priority > VIR_LOG_ERROR)) {
> +        VIR_WARN0(_("Ignoring invalid log level setting."));
>          return(-1);
> +    }
>      if (!virLogInitialized)
>          virLogStartup();
>      virLogDefaultPriority = priority;
> @@ -681,7 +683,8 @@ int virLogParseOutputs(const char *outputs) {
>      const char *cur = outputs, *str;
>      char *name;
>      int prio;
> -    int ret = 0;
> +    int ret = -1;
> +    int count = 0;
>  
>      if (cur == NULL)
>          return(-1);
> @@ -690,53 +693,57 @@ int virLogParseOutputs(const char *outputs) {
>      while (*cur != 0) {
>          prio= virParseNumber(&cur);
>          if ((prio < VIR_LOG_DEBUG) || (prio > VIR_LOG_ERROR))
> -            return(-1);
> +            goto cleanup;
>          if (*cur != ':')
> -            return(-1);
> +            goto cleanup;
>          cur++;
>          if (STREQLEN(cur, "stderr", 6)) {
>              cur += 6;
>              if (virLogAddOutputToStderr(prio) == 0)
> -                ret++;
> +                count++;
>          } else if (STREQLEN(cur, "syslog", 6)) {
>              cur += 6;
>              if (*cur != ':')
> -                return(-1);
> +                goto cleanup;
>              cur++;
>              str = cur;
>              while ((*cur != 0) && (!IS_SPACE(cur)))
>                  cur++;
>              if (str == cur)
> -                return(-1);
> +                goto cleanup;
>  #if HAVE_SYSLOG_H
>              name = strndup(str, cur - str);
>              if (name == NULL)
> -                return(-1);
> +                goto cleanup;
>              if (virLogAddOutputToSyslog(prio, name) == 0)
> -                ret++;
> +                count++;
>              VIR_FREE(name);
>  #endif /* HAVE_SYSLOG_H */
>          } else if (STREQLEN(cur, "file", 4)) {
>              cur += 4;
>              if (*cur != ':')
> -                return(-1);
> +                goto cleanup;
>              cur++;
>              str = cur;
>              while ((*cur != 0) && (!IS_SPACE(cur)))
>                  cur++;
>              if (str == cur)
> -                return(-1);
> +                goto cleanup;
>              name = strndup(str, cur - str);
>              if (name == NULL)
> -                return(-1);
> +                goto cleanup;
>              if (virLogAddOutputToFile(prio, name) == 0)
> -                ret++;
> +                count++;
>              VIR_FREE(name);
>          } else {
> -            return(-1);
> +            goto cleanup;
>          }
>          virSkipSpaces(&cur);
>      }
> +    ret = count;
> +cleanup:
> +    if (ret == -1)
> +        VIR_WARN0(_("Ignoring invalid log output setting."));
>      return(ret);
>  }
>  
> @@ -762,7 +769,8 @@ int virLogParseFilters(const char *filters) {
>      const char *cur = filters, *str;
>      char *name;
>      int prio;
> -    int ret = 0;
> +    int ret = -1;
> +    int count = 0;
>  
>      if (cur == NULL)
>          return(-1);
> @@ -771,22 +779,26 @@ int virLogParseFilters(const char *filters) {
>      while (*cur != 0) {
>          prio= virParseNumber(&cur);
>          if ((prio < VIR_LOG_DEBUG) || (prio > VIR_LOG_ERROR))
> -            return(-1);
> +            goto cleanup;
>          if (*cur != ':')
> -            return(-1);
> +            goto cleanup;
>          cur++;
>          str = cur;
>          while ((*cur != 0) && (!IS_SPACE(cur)))
>              cur++;
>          if (str == cur)
> -            return(-1);
> +            goto cleanup;
>          name = strndup(str, cur - str);
>          if (name == NULL)
> -            return(-1);
> +            goto cleanup;
>          if (virLogDefineFilter(name, prio, 0) >= 0)
> -            ret++;
> +            count++;
>          VIR_FREE(name);
>          virSkipSpaces(&cur);
>      }
> +    ret = count;
> +cleanup:
> +    if (ret == -1)
> +        VIR_WARN0(_("Ignoring invalid log filter setting."));
>      return(ret);
>  }
> 
> --
> Libvir-list mailing list
> Libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list

-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list