tech-pkg archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: www/serf install permissions fix
On 04/04, Greg Troxel wrote:
> so I added a post-extract chmod.
OK, great! Thank you!
> Please file a bug with serf so they can fix this, or at least not get it
> wrong in the future.
Done:
https://issues.apache.org/jira/browse/SERF-181
> Also, if you add a PKG_DEVELOPER test for writable files, we can chmod
> those and get someone to file bugs too.
Below is my attempt at such a PKG_DEVELOPER test. I have a few comments
and questions about it:
1. It checks for group- or world-writable files. If it should only
check for world-writable files, obviously it's trivial to change it
to do that.
2. I used find, grep, and sed directly in the _check-distfile-perms
target since mk/check/bsd.check-vars.mk adds them to USE_TOOLS. It
seems that some mk/check/check-*.mk files use the tools directly
while others use the variable for them (e.g., find vs. ${FIND}). Are
both correct?
3. I used "[" (test) in the _check-distfile-perms target, but I did
not add that to USE_TOOLS. Is this OK? Other mk/check/check-*.mk
files use it without adding it to USE_TOOLS. It's also usually a
shell built-in, but I'm not sure it's safe to assume that. And it
gets added to USE_TOOLS in mk/bsd.prefs.mk (which is included by
(among others) mk/misc/common.mk which is included by (among others)
mk/bsd.pkg.mk).
4. I added the include for check-distfile-perms.mk to
mk/check/bsd.check.mk in alphabetical order where the other
check-*.mk files were added. However, I noticed that the include for
check-fakehome.mk is not in alphabetical order; it's the last to be
included. Is alphabetical order correct, or should it be added at
the end after check-fakehome.mk?
Regards,
Lewis
diff --git a/mk/check/bsd.check.mk b/mk/check/bsd.check.mk
index 8db4197..925b798 100644
--- a/mk/check/bsd.check.mk
+++ b/mk/check/bsd.check.mk
@@ -5,6 +5,9 @@
#
# There are some predefined hooks where checks can be added:
#
+# post-extract-checks-hook
+# Is run after extracting the package distfiles.
+#
# pre-configure-checks-hook
# Is run before configuring the package.
#
@@ -25,6 +28,7 @@
# check-interpreter, check-shlibs, check-vulnerable, check-wrkref
#
+.include "check-distfile-perms.mk"
.include "check-files.mk"
.include "check-headers.mk"
.include "check-interpreter.mk"
@@ -36,6 +40,7 @@
.include "check-wrkref.mk"
.include "check-fakehome.mk"
+post-extract-checks-hook \
pre-configure-checks-hook \
pre-build-checks-hook: .PHONY
@${DO_NADA}
diff --git a/mk/check/check-distfile-perms.mk b/mk/check/check-distfile-perms.mk
new file mode 100644
index 0000000..01770bd
--- /dev/null
+++ b/mk/check/check-distfile-perms.mk
@@ -0,0 +1,52 @@
+# $NetBSD$
+#
+# This file checks that extracted files are not group- nor world-writable.
+#
+# User-settable variables:
+#
+# CHECK_DISTFILE_PERMS
+# Specifies whether the check should be run at all.
+#
+# Possible values: yes, no.
+#
+# Default value: yes for PKG_DEVELOPER, no otherwise.
+#
+# Package-settable variables:
+#
+
+_VARGROUPS+= check-distfile-perms
+_USER_VARS.check-distfile-perms= CHECK_DISTFILE_PERMS
+
+.if ${PKG_DEVELOPER:Uno} != "no"
+CHECK_DISTFILE_PERMS?= yes
+.else
+CHECK_DISTFILE_PERMS?= no
+.endif
+
+.if ${CHECK_DISTFILE_PERMS:M[Yy][Ee][Ss]}
+post-extract-checks-hook: _check-distfile-perms
+.endif
+
+_CHECK_DISTFILE_PERMS_QUOTED_EXTRACT_DIRS= # empty
+.for f in ${EXTRACT_ONLY}
+_CHECK_DISTFILE_PERMS_QUOTED_EXTRACT_DIRS+= ${EXTRACT_DIR.${f}:Q}
+.endfor
+
+_check-distfile-perms: .PHONY
+ @${STEP_MSG} "Checking for group- or world-writable extracted files"
+ ${RUN} \
+ ok=yes; \
+ for each in ${_CHECK_DISTFILE_PERMS_QUOTED_EXTRACT_DIRS}; do \
+ cd ${WRKDIR:Q} && \
+ if find "$$each" -perm -g=w -o -perm -o=w | grep . > /dev/null; then \
+ ok=no; \
+ break; \
+ fi; \
+ done; \
+ [ $$ok = yes ] && exit 0; \
+ ${ERROR_MSG} "[check-distfile-perms.mk] group- or world-writable files:"; \
+ for each in ${_CHECK_DISTFILE_PERMS_QUOTED_EXTRACT_DIRS}; do \
+ cd ${WRKDIR:Q} && \
+ find "$$each" -perm -g=w -o -perm -o=w | sed 's/^/ /'; \
+ done; \
+ exit 1
diff --git a/mk/extract/extract.mk b/mk/extract/extract.mk
index f23b7ef..f5ee3ea 100644
--- a/mk/extract/extract.mk
+++ b/mk/extract/extract.mk
@@ -105,6 +105,7 @@ _REAL_EXTRACT_TARGETS+= extract-dir
_REAL_EXTRACT_TARGETS+= pre-extract
_REAL_EXTRACT_TARGETS+= do-extract
_REAL_EXTRACT_TARGETS+= post-extract
+_REAL_EXTRACT_TARGETS+= post-extract-checks-hook
_REAL_EXTRACT_TARGETS+= extract-cookie
_REAL_EXTRACT_TARGETS+= error-check
Home |
Main Index |
Thread Index |
Old Index