summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-02-04 07:50:55 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-02-06 00:51:01 (GMT)
commit363f24c93695d26f5af584e99093689077b1c7dd (patch)
tree888ad8b5e4d3a74de7aba083b10f060a949b8eab
parentdf9892ffce46d1f1bd6fe64aa445be2ffe7346cf (diff)
downloadgit-363f24c93695d26f5af584e99093689077b1c7dd.zip
git-363f24c93695d26f5af584e99093689077b1c7dd.tar.gz
git-363f24c93695d26f5af584e99093689077b1c7dd.tar.bz2
daemon: do not forbid user relative paths unconditionally under --base-path
Using base-path to relocate the server public space does not have anything to do with allowing or forbidding user relative paths. Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--daemon.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/daemon.c b/daemon.c
index 532bb0c..324bb04 100644
--- a/daemon.c
+++ b/daemon.c
@@ -145,13 +145,17 @@ static char *path_ok(char *dir)
if (base_path) {
static char rpath[PATH_MAX];
- if (*dir != '/') {
- /* Forbid possible base-path evasion using ~paths. */
+ if (!strict_paths && *dir == '~')
+ ; /* allow user relative paths */
+ else if (*dir != '/') {
+ /* otherwise allow only absolute */
logerror("'%s': Non-absolute path denied (base-path active)", dir);
return NULL;
}
- snprintf(rpath, PATH_MAX, "%s%s", base_path, dir);
- dir = rpath;
+ else {
+ snprintf(rpath, PATH_MAX, "%s%s", base_path, dir);
+ dir = rpath;
+ }
}
path = enter_repo(dir, strict_paths);