From 76448e806720d99a57f492fbaeff44bf3250b914 Mon Sep 17 00:00:00 2001 From: "Rafael G. Martins" Date: Tue, 12 Jun 2018 18:45:32 +0200 Subject: git-receiver: git shell should reinstall hooks if symlinks are broken --- src/blogc-git-receiver/shell.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/blogc-git-receiver') diff --git a/src/blogc-git-receiver/shell.c b/src/blogc-git-receiver/shell.c index 8c45b54..d288654 100644 --- a/src/blogc-git-receiver/shell.c +++ b/src/blogc-git-receiver/shell.c @@ -19,6 +19,17 @@ #include "shell.h" +static bool +lexists(const char *pathname) +{ + struct stat b; + int tmp_errno = errno; + bool rv = lstat(pathname, &b) == 0; + errno = tmp_errno; + return rv; +} + + int bgr_shell(int argc, char *argv[]) { @@ -96,7 +107,7 @@ bgr_shell(int argc, char *argv[]) goto cleanup; } - if (0 == access("pre-receive", F_OK)) { + if (lexists("pre-receive")) { if (0 != unlink("pre-receive")) { fprintf(stderr, "error: failed to remove old symlink " "(%s/hooks/pre-receive): %s\n", repo, strerror(errno)); @@ -112,7 +123,7 @@ bgr_shell(int argc, char *argv[]) goto cleanup; } - if (0 == access("post-receive", F_OK)) { + if (lexists("post-receive")) { if (0 != unlink("post-receive")) { fprintf(stderr, "error: failed to remove old symlink " "(%s/hooks/post-receive): %s\n", repo, strerror(errno)); -- cgit v1.2.3-18-g5258