summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2016-06-18 13:32:22 -0700
committerMichael Forney <mforney@mforney.org>2016-06-18 13:32:22 -0700
commit23dfa1d03b9a677784ed289769854cade5cda657 (patch)
tree472bc3ff7c321cb7804516dba39a85b908eab5e4 /util
parent81ab516a0c8508ceb6aed9b4740fcc88a735051d (diff)
perms-hook: Read .perms from new revision rather than HEAD
Diffstat (limited to 'util')
-rw-r--r--util/perms-hook.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/util/perms-hook.c b/util/perms-hook.c
index b2505927..6a19bc52 100644
--- a/util/perms-hook.c
+++ b/util/perms-hook.c
@@ -83,9 +83,10 @@ spawn(char **argv, pid_t *pid)
}
static void
-readperms(void)
+readperms(const char *rev)
{
- static char *argv[] = {"git", "show", ":" PERMS_FILE, 0};
+ char object[20 + sizeof(PERMS_FILE)];
+ char *argv[] = {"git", "show", object, 0};
FILE *f;
pid_t pid;
char *line = NULL, *s, *mode;
@@ -93,6 +94,8 @@ readperms(void)
ssize_t n;
int st;
+ if (snprintf(object, sizeof(object), "%s:%s", rev, PERMS_FILE) >= (int)sizeof(object))
+ die("revision is too large: %s", rev);
f = spawn(argv, &pid);
while ((n = getline(&line, &size, f)) >= 0) {
if (line[n-1] == '\n')
@@ -298,7 +301,7 @@ int main(int argc, char *argv[]) {
die("stat:");
rootdev = st.st_dev;
- readperms();
+ readperms(new);
readchanges(old, new);
return 0;