[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [SCM] GNU Mailutils branch, master, updated. release-2.2-582-g5eb3405,
Sergey Poznyakoff <=