summaryrefslogtreecommitdiff
path: root/path.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-06-09 23:09:49 -0700
committerJunio C Hamano <junkio@cox.net>2006-06-10 01:31:31 -0700
commit94df2506edd76a886a1044376f8c99349b2f226e (patch)
tree08bd44a53885e963bc6e7915c2e8c95df6db7d37 /path.c
parent5e3a620cd5f7baaf27198192a614271c6145ec3b (diff)
downloadgit-94df2506edd76a886a1044376f8c99349b2f226e.tar.gz
shared repository: optionally allow reading to "others".
This enhances core.sharedrepository to have additionally specify that read and exec permissions to be given to others as well. It is useful when serving a repository via gitweb and git-daemon that runs as a user outside the project group. The configuration item can take the following values: [core] sharedrepository ; the same as "group" sharedrepository = true ; ditto sharedrepository = 1 ; ditto sharedrepository = group ; allow rwx to group sharedrepository = all ; allow rwx to group, allow rx to other sharedrepository = umask ; not shared - use umask It also extends "git init-db" to take "--shared=all" and friends from the command line. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'path.c')
-rw-r--r--path.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/path.c b/path.c
index 5168b5f17d..5d82503b6b 100644
--- a/path.c
+++ b/path.c
@@ -262,11 +262,21 @@ int adjust_shared_perm(const char *path)
return -1;
mode = st.st_mode;
if (mode & S_IRUSR)
- mode |= S_IRGRP;
+ mode |= (shared_repository == PERM_GROUP
+ ? S_IRGRP
+ : (shared_repository == PERM_EVERYBODY
+ ? (S_IRGRP|S_IROTH)
+ : 0));
+
if (mode & S_IWUSR)
mode |= S_IWGRP;
+
if (mode & S_IXUSR)
- mode |= S_IXGRP;
+ mode |= (shared_repository == PERM_GROUP
+ ? S_IXGRP
+ : (shared_repository == PERM_EVERYBODY
+ ? (S_IXGRP|S_IXOTH)
+ : 0));
if (S_ISDIR(mode))
mode |= S_ISGID;
if (chmod(path, mode) < 0)