svn commit: r314684 - user/bapt/diff
Baptiste Daroussin
bapt at FreeBSD.org
Sat Mar 4 22:24:00 UTC 2017
Author: bapt
Date: Sat Mar 4 22:23:59 2017
New Revision: 314684
URL: https://svnweb.freebsd.org/changeset/base/314684
Log:
Only capsicumize in case of direct call to direct files
For now diffing directories is not capsicumized as it needs more work
Modified:
user/bapt/diff/diff.c
user/bapt/diff/diffdir.c
user/bapt/diff/diffreg.c
Modified: user/bapt/diff/diff.c
==============================================================================
--- user/bapt/diff/diff.c Sat Mar 4 22:15:32 2017 (r314683)
+++ user/bapt/diff/diff.c Sat Mar 4 22:23:59 2017 (r314684)
@@ -307,8 +307,8 @@ main(int argc, char **argv)
if (stat(argv[1], &stb2) < 0)
err(2, "%s", argv[1]);
}
- print_status(diffreg(argv[0], argv[1], dflags), argv[0], argv[1],
- "");
+ print_status(diffreg(argv[0], argv[1], dflags, 1), argv[0],
+ argv[1], "");
}
exit(status);
}
Modified: user/bapt/diff/diffdir.c
==============================================================================
--- user/bapt/diff/diffdir.c Sat Mar 4 22:15:32 2017 (r314683)
+++ user/bapt/diff/diffdir.c Sat Mar 4 22:23:59 2017 (r314684)
@@ -207,7 +207,7 @@ diffit(struct dirent *dp, char *path1, s
else if (!S_ISREG(stb2.st_mode) && !S_ISDIR(stb2.st_mode))
dp->d_status = D_SKIPPED2;
else
- dp->d_status = diffreg(path1, path2, flags);
+ dp->d_status = diffreg(path1, path2, flags, 0);
print_status(dp->d_status, path1, path2, "");
}
Modified: user/bapt/diff/diffreg.c
==============================================================================
--- user/bapt/diff/diffreg.c Sat Mar 4 22:15:32 2017 (r314683)
+++ user/bapt/diff/diffreg.c Sat Mar 4 22:23:59 2017 (r314684)
@@ -306,7 +306,7 @@ static u_char cup2low[256] = {
};
int
-diffreg(char *file1, char *file2, int flags)
+diffreg(char *file1, char *file2, int flags, int capsicum)
{
FILE *f1, *f2;
int i, rval;
@@ -405,23 +405,25 @@ diffreg(char *file1, char *file2, int fl
}
}
- cap_rights_init(&rights_ro, CAP_READ, CAP_FSTAT, CAP_SEEK);
- if (cap_rights_limit(fileno(f1), &rights_ro) < 0)
- err(2, "unable to limit rights on: %s", file1);
- if (cap_rights_limit(fileno(f2), &rights_ro) < 0)
- err(2, "unable to limit rights on: %s", file2);
- if (fileno(f1) == STDIN_FILENO || fileno(f2) == STDIN_FILENO) {
- /* stding has already been limited */
- if (caph_limit_stderr() == -1)
- err(2, "unable to limit stderr");
- if (caph_limit_stdout() == -1)
- err(2, "unable to limit stdout");
- } else if (caph_limit_stdio() == -1)
- err(2, "unable to limit stdio");
-
- caph_cache_catpages();
- if (cap_enter() < 0 && errno != ENOSYS)
- err(2, "unable to enter capability mode");
+ if (capsicum) {
+ cap_rights_init(&rights_ro, CAP_READ, CAP_FSTAT, CAP_SEEK);
+ if (cap_rights_limit(fileno(f1), &rights_ro) < 0)
+ err(2, "unable to limit rights on: %s", file1);
+ if (cap_rights_limit(fileno(f2), &rights_ro) < 0)
+ err(2, "unable to limit rights on: %s", file2);
+ if (fileno(f1) == STDIN_FILENO || fileno(f2) == STDIN_FILENO) {
+ /* stding has already been limited */
+ if (caph_limit_stderr() == -1)
+ err(2, "unable to limit stderr");
+ if (caph_limit_stdout() == -1)
+ err(2, "unable to limit stdout");
+ } else if (caph_limit_stdio() == -1)
+ err(2, "unable to limit stdio");
+
+ caph_cache_catpages();
+ if (cap_enter() < 0 && errno != ENOSYS)
+ err(2, "unable to enter capability mode");
+ }
switch (files_differ(f1, f2, flags)) {
case 0:
More information about the svn-src-user
mailing list