summaryrefslogtreecommitdiff
path: root/pre-commit.d
diff options
context:
space:
mode:
authorJoey Hess <joey@kodama.kitenet.net>2007-11-05 22:49:53 -0500
committerJoey Hess <joey@kodama.kitenet.net>2007-11-05 22:49:53 -0500
commit2ef31bb41f1f04a9d7341e7b2fe683f71e922097 (patch)
treed7071bd0fb632fbfb927c6b12da7ad79654c5a18 /pre-commit.d
parentc45d585d40d8d2513c665c7d2f7315a4403fcdac (diff)
store empty directories and restore in etckeeper init
While working on this, I had to consider security policies -- is it ok if etckeeper init can run code from the /etc repository? I've decided this should be ok, and documented that it should only be run on trusted repos. Note that metastore could also be exploited by untrusted repos, and of course, note that you're checking out your *** /etc *** so it damn well better be trusted! With that determined, I decided to use a simple shell script to hold the empty directory info and allow them to be easily created. Expanding this for other files git can't represent is a possibility..
Diffstat (limited to 'pre-commit.d')
-rwxr-xr-xpre-commit.d/10store-empty-directory19
-rwxr-xr-xpre-commit.d/10warn-empty-directory6
-rwxr-xr-xpre-commit.d/20store-metadata (renamed from pre-commit.d/10store-metadata)0
3 files changed, 19 insertions, 6 deletions
diff --git a/pre-commit.d/10store-empty-directory b/pre-commit.d/10store-empty-directory
new file mode 100755
index 0000000..bc698e2
--- /dev/null
+++ b/pre-commit.d/10store-empty-directory
@@ -0,0 +1,19 @@
+#!/bin/sh
+set -ex
+
+# Make sure the file is not readable by others, since it can leak
+# information about contents of non-readable directories in /etc.
+umask 077
+
+if [ -e .etckeeper ]; then
+ egrep -v '^mkdir ' .etckeeper > .etckeeper.new || true
+fi
+find -type d -empty | grep -v /.git/ | sort |
+ sed -e "s/^/mkdir -p '/" -e "s/\$/'/" >> .etckeeper.new
+
+if [ ! -e .etckeeper ] || ! cmp -s .etckeeper .etckeeper.new ; then
+ mv -f .etckeeper.new .etckeeper
+ git add .etckeeper
+else
+ rm -f .etckeeper.new
+fi
diff --git a/pre-commit.d/10warn-empty-directory b/pre-commit.d/10warn-empty-directory
deleted file mode 100755
index b850c86..0000000
--- a/pre-commit.d/10warn-empty-directory
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-set -e
-empty=$(find -type d -empty | grep -v /.git/) || true
-if [ -n "$empty" ]; then
- echo "etckeeper warning: there are some empty directories, which git will ignore" >&2
-fi
diff --git a/pre-commit.d/10store-metadata b/pre-commit.d/20store-metadata
index b878abd..b878abd 100755
--- a/pre-commit.d/10store-metadata
+++ b/pre-commit.d/20store-metadata