Hello community,

here is the log from the commit of package quota for openSUSE:Factory checked 
in at 2019-08-16 15:44:08
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/quota (Old)
 and      /work/SRC/openSUSE:Factory/.quota.new.22127 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "quota"

Fri Aug 16 15:44:08 2019 rev:57 rq:723505 version:4.05

Changes:
--------
--- /work/SRC/openSUSE:Factory/quota/quota.changes      2019-08-13 
13:25:23.705353165 +0200
+++ /work/SRC/openSUSE:Factory/.quota.new.22127/quota.changes   2019-08-16 
15:44:12.413724490 +0200
@@ -1,0 +2,6 @@
+Thu Aug 15 09:40:56 UTC 2019 - Tomáš Chvátal <tchva...@suse.com>
+
+- Add patch from git to stop config processing on errors bsc#1144265:
+  * 0001-warnquota-Do-not-ignore-errors-in-config-file.patch
+
+-------------------------------------------------------------------

New:
----
  0001-warnquota-Do-not-ignore-errors-in-config-file.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ quota.spec ++++++
--- /var/tmp/diff_new_pack.Cv21KR/_old  2019-08-16 15:44:14.029724020 +0200
+++ /var/tmp/diff_new_pack.Cv21KR/_new  2019-08-16 15:44:14.069724008 +0200
@@ -32,6 +32,7 @@
 Source2:        quotad.service
 Source3:        quotad_env.sh
 Patch2:         %{name}-4.01-warnquota.patch
+Patch3:         0001-warnquota-Do-not-ignore-errors-in-config-file.patch
 BuildRequires:  e2fsprogs-devel
 BuildRequires:  openldap2-devel
 BuildRequires:  pkgconfig
@@ -66,6 +67,7 @@
 %prep
 %setup -q
 %patch2 -p1
+%patch3 -p1
 
 %build
 %configure \

++++++ 0001-warnquota-Do-not-ignore-errors-in-config-file.patch ++++++
>From 6e631074330aa6ea210b05dae3a2dcf5223b311f Mon Sep 17 00:00:00 2001
From: Jan Kara <j...@suse.cz>
Date: Thu, 15 Aug 2019 11:19:20 +0200
Subject: [PATCH] warnquota: Do not ignore errors in config file

Currently warnquota ignores unknown variables, or lines we cannot parse
in the config file. This is potentially dangerous as that may result
in errors being missed and warnquota operating differently than
administrator intended. Change warnquota to abort on errors in config
file and provide -I option for ignoring errors for backward
compatibility.

Signed-off-by: Jan Kara <j...@suse.cz>
---
 common.c    | 13 ++++++---
 common.h    |  4 +++
 warnquota.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++-------
 3 files changed, 85 insertions(+), 14 deletions(-)

Index: quota-4.05/common.c
===================================================================
--- quota-4.05.orig/common.c
+++ quota-4.05/common.c
@@ -61,17 +61,22 @@ void die(int ret, char *fmtstr, ...)
        exit(ret);
 }
 
-void errstr(char *fmtstr, ...)
+void errstrv(char *fmtstr, va_list args)
 {
-       va_list args;
-
-       va_start(args, fmtstr);
        if (enable_syslog)
                do_syslog(LOG_ERR, fmtstr, args);
        else {
                fprintf(stderr, "%s: ", progname);
                vfprintf(stderr, fmtstr, args);
        }
+}
+
+void errstr(char *fmtstr, ...)
+{
+       va_list args;
+
+       va_start(args, fmtstr);
+       errstrv(fmtstr, args);
        va_end(args);
 }
 
Index: quota-4.05/common.h
===================================================================
--- quota-4.05.orig/common.h
+++ quota-4.05/common.h
@@ -8,6 +8,7 @@
 #define GUARD_COMMON_H
 
 #include <time.h>
+#include <stdarg.h>
 
 #ifndef __attribute__
 # if !defined __GNUC__ || __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 
8) || __STRICT_ANSI__
@@ -21,6 +22,9 @@ extern char *progname;
 /* Finish programs being */
 void __attribute ((noreturn)) die(int, char *, ...) __attribute__ ((__format__ 
(__printf__, 2, 3)));
 
+/* Print error from va_list */
+void errstrv(char *, va_list);
+
 /* Print an error */
 void errstr(char *, ...) __attribute__ ((__format__ (__printf__, 1, 2)));
 
Index: quota-4.05/warnquota.c
===================================================================
--- quota-4.05.orig/warnquota.c
+++ quota-4.05/warnquota.c
@@ -24,6 +24,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <errno.h>
+#include <stdarg.h>
 #include <ctype.h>
 #include <signal.h>
 #include <grp.h>
@@ -87,6 +88,7 @@
 #define FL_GROUP 2
 #define FL_NOAUTOFS 4
 #define FL_NODETAILS 16
+#define FL_IGNORE_CFG_ERR 32
 
 struct usage {
        char *devicename;
@@ -707,6 +709,22 @@ Unrecognized expression %%%c.\n"), varna
        }
 }
 
+static void print_cfg_err(char *fmt, ...)
+{
+       va_list args;
+
+       va_start(args, fmt);
+       errstrv(fmt, args);
+       va_end(args);
+       if (flags & FL_IGNORE_CFG_ERR) {
+               errstr(_("Ignoring error in config file.\n"));
+       } else {
+               errstr(_("Aborting. Use option -I if you want warnquota to "
+                       "ignore errors in the config file as it used to in "
+                       "older versions.\n"));
+       }
+}
+
 /*
  * Reads config parameters from configfile
  * uses default values if errstr occurs
@@ -771,9 +789,18 @@ static int readconfigfile(const char *fi
                                continue;
                }
                len = bufpos + strlen(buff+bufpos);
-               if (buff[len-1] != '\n')
-                       errstr(_("Line %d too long. Truncating.\n"), line);
-               else {
+               if (buff[len-1] != '\n') {
+                       if (len == IOBUF_SIZE-1) {
+                               print_cfg_err(
+                                       _("line %d: Line too long! Maximum is 
%d.\n"),
+                                       line, IOBUF_SIZE-1);
+                               if (flags & FL_IGNORE_CFG_ERR)
+                                       continue;
+                               return -1;
+                       }
+                       /* Last line without \n. Just pretend there is one. */
+                       len++;
+               } else {
                        len--;
                        if (buff[len-1] == '\\') {      /* Should join with 
next line? */
                                bufpos = len-1;
@@ -886,15 +913,45 @@ cc_parse_err:
                                sstrncpy(config->ldap_mail_attr, value, 
CNF_BUFFER);
                        else if(!strcmp(var, "LDAP_DEFAULT_MAIL_DOMAIN"))
                                sstrncpy(config->default_domain, value, 
CNF_BUFFER);
+#else
+                       else if (!strcmp(var, "LDAP_MAIL") ||
+                                !strcmp(var, "LDAP_TLS") ||
+                                !strcmp(var, "LDAP_HOST") ||
+                                !strcmp(var, "LDAP_PORT") ||
+                                !strcmp(var, "LDAP_URI") ||
+                                !strcmp(var, "LDAP_BINDDN") ||
+                                !strcmp(var, "LDAP_BINDPW") ||
+                                !strcmp(var, "LDAP_BASEDN") ||
+                                !strcmp(var, "LDAP_SEARCH_ATTRIBUTE") ||
+                                !strcmp(var, "LDAP_MAIL_ATTRIBUTE") ||
+                                !strcmp(var, "LDAP_DEFAULT_MAIL_DOMAIN")) {
+                               print_cfg_err(_("line %d: LDAP variable in 
config "
+                                       "file but LDAP support is not 
compiled.\n"), line);
+                               if (flags & FL_IGNORE_CFG_ERR)
+                                       continue;
+                               return -1;
+                       }
 #endif
-                       else    /* not matched at all */
-                               errstr(_("Error in config file (line %d), 
ignoring\n"), line);
+                       else {  /* not matched at all */
+                               print_cfg_err(_("line %d: Unknown variable %s 
in "
+                                       "config file.\n"), line, var);
+                               if (flags & FL_IGNORE_CFG_ERR)
+                                       continue;
+                               return -1;
+                       }
                }
-               else            /* no '=' char in this line */
-                       errstr(_("Possible error in config file (line %d), 
ignoring\n"), line);
+               else {          /* no '=' char in this line */
+                       print_cfg_err(_("line %d: Missing '=' in config 
file.\n"), line);
+                       if (flags & FL_IGNORE_CFG_ERR)
+                               continue;
+                       return -1;
+               }
+       }
+       if (bufpos) {
+               print_cfg_err(_("line %d: Unterminated last line.\n"), line);
+               if (!(flags & FL_IGNORE_CFG_ERR))
+                       return -1;
        }
-       if (bufpos)
-               errstr(_("Unterminated last line, ignoring\n"));
 #ifdef USE_LDAP_MAIL_LOOKUP
        if (config->use_ldap_mail)
        {
@@ -1041,6 +1098,7 @@ static void usage(void)
 -c, --config=config-file        non-default config file\n\
 -q, --quota-tab=quotatab-file   non-default quotatab\n\
 -a, --admins-file=admins-file   non-default admins file\n\
+-I, --ignore-config-errors     ignore unknown statements in config file\n\
 -h, --help                      display this help message and exit\n\
 -v, --version                   display version information and exit\n\n"));
        errstr(_("Bugs to %s\n"), PACKAGE_BUGREPORT);
@@ -1062,10 +1120,11 @@ static void parse_options(int argcnt, ch
                { "no-autofs", 0, NULL, 'i' },
                { "human-readable", 2, NULL, 's' },
                { "no-details", 0, NULL, 'd' },
+               { "ignore-config-errors", 0, NULL, 'I' },
                { NULL, 0, NULL, 0 }
        };
  
-       while ((ret = getopt_long(argcnt, argstr, "ugVF:hc:q:a:is::d", 
long_opts, NULL)) != -1) {
+       while ((ret = getopt_long(argcnt, argstr, "ugVF:hc:q:a:is::dI", 
long_opts, NULL)) != -1) {
                switch (ret) {
                  case '?':
                  case 'h':
@@ -1105,6 +1164,9 @@ static void parse_options(int argcnt, ch
                  case 'd':
                        flags |= FL_NODETAILS;
                        break;
+                 case 'I':
+                       flags |= FL_IGNORE_CFG_ERR;
+                       break;
                }
        }
        if (!(flags & FL_USER) && !(flags & FL_GROUP))

Reply via email to