commit-mailutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU Mailutils branch, master, updated. release-2.2-582-g5eb3405


From: Sergey Poznyakoff
Subject: [SCM] GNU Mailutils branch, master, updated. release-2.2-582-g5eb3405
Date: Wed, 21 Mar 2012 11:53:56 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Mailutils".

http://git.savannah.gnu.org/cgit/mailutils.git/commit/?id=5eb340568f0e025fd0ceec4b1f13efceab093739

The branch, master has been updated
       via  5eb340568f0e025fd0ceec4b1f13efceab093739 (commit)
      from  b84a8723720c55581a4eb0100c5b483fc6adebe5 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 5eb340568f0e025fd0ceec4b1f13efceab093739
Author: Sergey Poznyakoff <address@hidden>
Date:   Tue Mar 20 15:47:28 2012 +0200

    Improve conversion between file mode and safety criteria and vice versa.
    
    * include/mailutils/util.h (mu_file_safety_code_to_name): New proto.
    * libmailutils/base/filesafety.c: Remove static functions which
    checked file mode bits.  Use safety_checker.mode for that directly.
    (mu_file_safety_code_to_name): New function.
    (mu_file_mode_to_safety_criteria): Bugfix.
    (mu_safety_criteria_to_file_mode): Change algorithm.
    * libmailutils/tests/.gitignore: Update
    * libmailutils/tests/fsaftomod.at: New file.
    * libmailutils/tests/fsaftomod.c: New file.
    * libmailutils/tests/modtofsaf.at: New file.
    * libmailutils/tests/modtofsaf.c: New file.
    * libmailutils/tests/Makefile.am (noinst_PROGRAMS): Add
    fsaftomod and modtofsaf.
    (TESTSUITE_AT): Add fsaftomod.at and modtofsaf.at
    * libmailutils/tests/testsuite.at: Include fsaftomod.at and
    modtofsaf.at

-----------------------------------------------------------------------

Summary of changes:
 include/mailutils/util.h                      |    1 +
 libmailutils/base/filesafety.c                |   55 ++++++++++---------------
 libmailutils/tests/.gitignore                 |    2 +
 libmailutils/tests/Makefile.am                |    6 ++-
 libmailutils/tests/{strin.at => fsaftomod.at} |   30 ++++++++-----
 libmailutils/tests/{fsaf.c => fsaftomod.c}    |   52 +++++++++--------------
 libmailutils/tests/{strin.at => modtofsaf.at} |   44 ++++++++++++++-----
 libmailutils/tests/{fsaf.c => modtofsaf.c}    |   53 +++++++++---------------
 libmailutils/tests/testsuite.at               |    2 +
 9 files changed, 121 insertions(+), 124 deletions(-)
 copy libmailutils/tests/{strin.at => fsaftomod.at} (58%)
 copy libmailutils/tests/{fsaf.c => fsaftomod.c} (60%)
 copy libmailutils/tests/{strin.at => modtofsaf.at} (58%)
 copy libmailutils/tests/{fsaf.c => modtofsaf.c} (57%)

diff --git a/include/mailutils/util.h b/include/mailutils/util.h
index f3251e6..45caaa7 100644
--- a/include/mailutils/util.h
+++ b/include/mailutils/util.h
@@ -200,6 +200,7 @@ int mu_onexit (mu_onexit_t func, void *data);
 int mu_file_safety_check (const char *filename, int mode,
                          uid_t uid,
                          mu_list_t idlist);
+const char *mu_file_safety_code_to_name (int code);
 int mu_file_safety_name_to_code (const char *name, int *pcode);
 int mu_file_safety_name_to_error (const char *name, int *pcode);  
 int mu_file_safety_compose (int *res, const char *name, int defval);
diff --git a/libmailutils/base/filesafety.c b/libmailutils/base/filesafety.c
index a3cfb46..0cbc190 100644
--- a/libmailutils/base/filesafety.c
+++ b/libmailutils/base/filesafety.c
@@ -42,30 +42,6 @@ struct file_check_buffer
 };
 
 static int
-_check_grdfil (struct file_check_buffer *fb)
-{
-  return fb->filst.st_mode & S_IRGRP;
-}
-
-static int
-_check_ardfil (struct file_check_buffer *fb)
-{
-  return fb->filst.st_mode & S_IROTH;
-}
-
-static int
-_check_gwrfil (struct file_check_buffer *fb)
-{
-  return fb->filst.st_mode & S_IWGRP;
-}
-
-static int
-_check_awrfil (struct file_check_buffer *fb)
-{
-  return fb->filst.st_mode & S_IWOTH;
-}
-
-static int
 _check_linkwrdir (struct file_check_buffer *fb)
 {
   return ((((fb->filst.st_mode & S_IFMT) == S_IFLNK) ||
@@ -98,13 +74,13 @@ struct safety_checker
 
 static struct safety_checker file_safety_check_tab[] = {
   { "grdfil", MU_FILE_SAFETY_GROUP_READABLE, MU_ERR_PERM_GROUP_READABLE,
-    0040, 0, _check_grdfil },
+    S_IRGRP },
   { "ardfil", MU_FILE_SAFETY_WORLD_READABLE, MU_ERR_PERM_WORLD_READABLE,
-    0004, 0, _check_ardfil },
+    S_IROTH },
   { "gwrfil", MU_FILE_SAFETY_GROUP_WRITABLE, MU_ERR_PERM_GROUP_WRITABLE,
-    0020, 0, _check_gwrfil },
+    S_IWGRP },
   { "awrfil", MU_FILE_SAFETY_WORLD_WRITABLE, MU_ERR_PERM_WORLD_WRITABLE,
-    0002, 0, _check_awrfil },
+    S_IWOTH },
   { "linkwrdir", MU_FILE_SAFETY_LINKED_WRDIR,   MU_ERR_PERM_LINKED_WRDIR,
     0, 1, _check_linkwrdir },
   { "gwrdir", MU_FILE_SAFETY_DIR_IWGRP,      MU_ERR_PERM_DIR_IWGRP,
@@ -167,6 +143,18 @@ _find_safety_checker (const char *name)
   return NULL;
 }
 
+const char *
+mu_file_safety_code_to_name (int code)
+{
+  struct safety_checker *pck;
+  for (pck = file_safety_check_tab; pck->flag; pck++)
+    {
+      if (pck->flag == code)
+       return pck->name;
+    }
+  return NULL;
+}
+
 int
 mu_file_safety_name_to_code (const char *name, int *pcode)
 {
@@ -244,7 +232,8 @@ mu_file_safety_check (const char *filename, int mode,
                  return errno;
                buf.cdir = 1;
              }
-           if (pck->fun (&buf))
+           if ((pck->fun && pck->fun (&buf)) ||
+               (buf.filst.st_mode & pck->mode))
              return pck->err;
          }
       if (idlist)
@@ -261,7 +250,7 @@ mu_file_mode_to_safety_criteria (int mode)
   struct safety_checker *pck;
 
   for (pck = file_safety_check_tab; pck->name; pck++)
-    if (mode & pck->mode)
+    if (!(mode & pck->mode))
       fl |= pck->flag;
   return fl;
 }
@@ -269,11 +258,11 @@ mu_file_mode_to_safety_criteria (int mode)
 int
 mu_safety_criteria_to_file_mode (int crit)
 {
-  int mode = 0600;
+  int mode = 0666;
   struct safety_checker *pck;
 
   for (pck = file_safety_check_tab; pck->name; pck++)
-    if (crit & pck->flag)
-      mode |= pck->mode;
+    if (pck->flag && (crit & pck->flag))
+      mode &= ~pck->mode;
   return mode;
 }
diff --git a/libmailutils/tests/.gitignore b/libmailutils/tests/.gitignore
index 955a4e3..dbeb39b 100644
--- a/libmailutils/tests/.gitignore
+++ b/libmailutils/tests/.gitignore
@@ -12,11 +12,13 @@ decode2047
 encode2047
 fltst
 fsaf
+fsaftomod
 fsfolder
 imapio
 listop
 mailcap
 mimehdr
+modtofsaf
 prop
 scantime
 strftime
diff --git a/libmailutils/tests/Makefile.am b/libmailutils/tests/Makefile.am
index 383e523..3e3a5ba 100644
--- a/libmailutils/tests/Makefile.am
+++ b/libmailutils/tests/Makefile.am
@@ -30,7 +30,7 @@ $(srcdir)/package.m4: $(top_srcdir)/configure.ac
          echo 'm4_define([AT_PACKAGE_VERSION],   address@hidden@])'; \
          echo 'm4_define([AT_PACKAGE_STRING],    address@hidden@])'; \
          echo 'm4_define([AT_PACKAGE_BUGREPORT], address@hidden@])'; \
-       } >$(srcdir)/package.m4
+        } >$(srcdir)/package.m4
 
 #
 
@@ -47,11 +47,13 @@ noinst_PROGRAMS = \
  encode2047\
  fltst\
  fsaf\
+ fsaftomod\
  fsfolder\
  imapio\
  listop\
  mailcap\
  mimehdr\
+ modtofsaf\
  msgset\
  prop\
  scantime\
@@ -81,6 +83,7 @@ TESTSUITE_AT = \
  encode2047.at\
  fromflt.at\
  fsaf.at\
+ fsaftomod.at\
  fsfolder00.at\
  fsfolder01.at\
  fsfolder02.at\
@@ -91,6 +94,7 @@ TESTSUITE_AT = \
  list.at\
  mailcap.at\
  mimehdr.at\
+ modtofsaf.at\
  msgset.at\
  prop.at\
  scantime.at\
diff --git a/libmailutils/tests/strin.at b/libmailutils/tests/fsaftomod.at
similarity index 58%
copy from libmailutils/tests/strin.at
copy to libmailutils/tests/fsaftomod.at
index fb5206b..8323acc 100644
--- a/libmailutils/tests/strin.at
+++ b/libmailutils/tests/fsaftomod.at
@@ -14,24 +14,30 @@
 # You should have received a copy of the GNU General Public License
 # along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>.
 
-AT_SETUP([strin])
-AT_KEYWORDS([stdstream])
+AT_BANNER(File Safety to File Mode)
 
-AT_DATA([input],
-[Omnis enim res, quae dando non deficit,
-dum habetur et non datur, nondum habetur,
-quomodo habenda est.
-])
+dnl ------------------------------------------------------------
+dnl FSAFTOMODE(CRITERIA, MODE)
+dnl
 
+m4_pushdef([FSAFTOMODE],[
+AT_SETUP([$1])
+AT_KEYWORDS([fsaf fsaftomod fsaftomode])
 AT_CHECK([
-strin < input
+fsaftomod $1
 ],
 [0],
-[Omnis enim res, quae dando non deficit,
-dum habetur et non datur, nondum habetur,
-quomodo habenda est.
+[$2
 ])
-
 AT_CLEANUP
+])
 
+dnl ------------------------------------------------------------
+FSAFTOMODE(all, 600)
+FSAFTOMODE(none, 666)
+FSAFTOMODE([grdfil ardfil], 622)
+FSAFTOMODE([grdfil ardfil awrfil], 620)
+FSAFTOMODE([grdfil gwrfil ardfil awrfil], 600)
 
+dnl ------------------------------------------------------------
+m4_popdef([FSAFTOMODE])
\ No newline at end of file
diff --git a/libmailutils/tests/fsaf.c b/libmailutils/tests/fsaftomod.c
similarity index 60%
copy from libmailutils/tests/fsaf.c
copy to libmailutils/tests/fsaftomod.c
index a3793db..9b95cea 100644
--- a/libmailutils/tests/fsaf.c
+++ b/libmailutils/tests/fsaftomod.c
@@ -19,54 +19,42 @@
 #endif
 #include <stdio.h>
 #include <stdlib.h>
-#include <unistd.h>
+#include <string.h>
 #include <mailutils/types.h>
 #include <mailutils/error.h>
 #include <mailutils/errno.h>
 #include <mailutils/util.h>
 
+#define SAFDEFAULT \
+  (MU_FILE_SAFETY_GROUP_WRITABLE |               \
+   MU_FILE_SAFETY_WORLD_WRITABLE |               \
+   MU_FILE_SAFETY_GROUP_READABLE |               \
+   MU_FILE_SAFETY_WORLD_READABLE |               \
+   MU_FILE_SAFETY_LINKED_WRDIR   |               \
+   MU_FILE_SAFETY_DIR_IWGRP      |               \
+   MU_FILE_SAFETY_DIR_IWOTH      )
+  
 int
 main (int argc, char **argv)
 {
   int i;
-  int mode = MU_FILE_SAFETY_OWNER_MISMATCH, rc, m;
-  mu_list_t idlist;
-  uid_t uid;
-
-  if (argc == 1)
-    {
-      mu_error ("usage: %s [+-]mode... file...", argv[0]);
-      exit (1);
-    }
+  int input = 0;
   
-  rc = mu_list_create (&idlist);
-  if (rc)
+  if (argc == 1)
     {
-      mu_error ("mu_list_create: %s", mu_strerror (rc));
+      mu_error ("usage: %s [+-]mode...", argv[0]);
       exit (1);
     }
-  uid = getuid ();
-  
+
   for (i = 1; i < argc; i++)
     {
-      if (argv[i][0] == '-' || argv[i][0] == '+')
-       {
-         rc = mu_file_safety_name_to_code (argv[i] + 1, &m);
-         if (rc)
-           {
-             mu_error ("%s: %s", argv[i], mu_strerror (rc));
-             exit (1);
-           }
-         if (argv[i][0] == '-')
-           mode &= ~m;
-         else
-           mode |= m;
-       }
-      else
+      int rc = mu_file_safety_compose (&input, argv[i], SAFDEFAULT);
+      if (rc)
        {
-         rc = mu_file_safety_check (argv[i], mode, uid, idlist);
-         printf ("%s: %s\n", argv[i], mu_strerror (rc));
+         mu_error ("%s: %s", argv[i], mu_strerror (rc));
+         exit (1);
        }
     }
-  exit (0);
+  printf ("%03o\n", mu_safety_criteria_to_file_mode (input));
+  return 0;
 }
diff --git a/libmailutils/tests/strin.at b/libmailutils/tests/modtofsaf.at
similarity index 58%
copy from libmailutils/tests/strin.at
copy to libmailutils/tests/modtofsaf.at
index fb5206b..e66d08c 100644
--- a/libmailutils/tests/strin.at
+++ b/libmailutils/tests/modtofsaf.at
@@ -14,24 +14,44 @@
 # You should have received a copy of the GNU General Public License
 # along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>.
 
-AT_SETUP([strin])
-AT_KEYWORDS([stdstream])
+AT_BANNER(File Mode to File Safety)
 
-AT_DATA([input],
-[Omnis enim res, quae dando non deficit,
-dum habetur et non datur, nondum habetur,
-quomodo habenda est.
-])
+dnl ------------------------------------------------------------
+dnl MODETOFSAF(MODE, CRITERIA)
+dnl
 
+m4_pushdef([MODETOFSAF],[
+AT_SETUP([$1])
+AT_KEYWORDS([fsaf modtofsaf modetofsaf])
 AT_CHECK([
-strin < input
+modtofsaf $1
 ],
 [0],
-[Omnis enim res, quae dando non deficit,
-dum habetur et non datur, nondum habetur,
-quomodo habenda est.
+[$2])
+AT_CLEANUP
 ])
 
-AT_CLEANUP
+dnl ------------------------------------------------------------
+MODETOFSAF(600,[gwrfil
+awrfil
+grdfil
+ardfil
+])
+
+MODETOFSAF(666)
 
+MODETOFSAF(622,[grdfil
+ardfil
+])
+
+MODETOFSAF(644,[gwrfil
+awrfil
+])
+
+MODETOFSAF(620,[awrfil
+grdfil
+ardfil
+])
 
+dnl ------------------------------------------------------------
+m4_popdef([MODETOFSAF])
\ No newline at end of file
diff --git a/libmailutils/tests/fsaf.c b/libmailutils/tests/modtofsaf.c
similarity index 57%
copy from libmailutils/tests/fsaf.c
copy to libmailutils/tests/modtofsaf.c
index a3793db..9e56204 100644
--- a/libmailutils/tests/fsaf.c
+++ b/libmailutils/tests/modtofsaf.c
@@ -19,54 +19,39 @@
 #endif
 #include <stdio.h>
 #include <stdlib.h>
-#include <unistd.h>
+#include <string.h>
 #include <mailutils/types.h>
 #include <mailutils/error.h>
 #include <mailutils/errno.h>
 #include <mailutils/util.h>
 
+#define SAFMASK (                              \
+  MU_FILE_SAFETY_GROUP_WRITABLE |              \
+  MU_FILE_SAFETY_WORLD_WRITABLE |              \
+  MU_FILE_SAFETY_GROUP_READABLE |              \
+  MU_FILE_SAFETY_WORLD_READABLE )
+
 int
 main (int argc, char **argv)
 {
-  int i;
-  int mode = MU_FILE_SAFETY_OWNER_MISMATCH, rc, m;
-  mu_list_t idlist;
-  uid_t uid;
-
-  if (argc == 1)
-    {
-      mu_error ("usage: %s [+-]mode... file...", argv[0]);
-      exit (1);
-    }
+  int i, crit;
   
-  rc = mu_list_create (&idlist);
-  if (rc)
+  if (argc != 2)
     {
-      mu_error ("mu_list_create: %s", mu_strerror (rc));
+      mu_error ("usage: %s mode", argv[0]);
       exit (1);
     }
-  uid = getuid ();
-  
-  for (i = 1; i < argc; i++)
+
+  crit = mu_file_mode_to_safety_criteria (strtoul (argv[1], NULL, 8)) &
+         SAFMASK;
+  for (i = 1; crit && i != 0; i <<= 1)
     {
-      if (argv[i][0] == '-' || argv[i][0] == '+')
-       {
-         rc = mu_file_safety_name_to_code (argv[i] + 1, &m);
-         if (rc)
-           {
-             mu_error ("%s: %s", argv[i], mu_strerror (rc));
-             exit (1);
-           }
-         if (argv[i][0] == '-')
-           mode &= ~m;
-         else
-           mode |= m;
-       }
-      else
+      if (crit & i)
        {
-         rc = mu_file_safety_check (argv[i], mode, uid, idlist);
-         printf ("%s: %s\n", argv[i], mu_strerror (rc));
+         const char *s = mu_file_safety_code_to_name (i);
+         printf ("%s\n", s ? s : "UNKNOWN");
        }
+      crit &= ~i;
     }
-  exit (0);
+  return 0;
 }
diff --git a/libmailutils/tests/testsuite.at b/libmailutils/tests/testsuite.at
index 1a6fb79..957e3e5 100644
--- a/libmailutils/tests/testsuite.at
+++ b/libmailutils/tests/testsuite.at
@@ -96,6 +96,8 @@ m4_include([scantime.at])
 m4_include([strftime.at])
 
 m4_include([fsaf.at])
+m4_include([fsaftomod.at])
+m4_include([modtofsaf.at])
 
 m4_include([mimehdr.at])
 


hooks/post-receive
-- 
GNU Mailutils



reply via email to

[Prev in Thread] Current Thread [Next in Thread]