tuser_includes setting - gitzone - git-based zone management tool for static and dynamic domains HTML git clone https://git.parazyd.org/gitzone DIR Log DIR Files DIR Refs --- DIR commit 5433f6a3dd621beb152560d64f86f9f1e998221f DIR parent a321956a9c086334addbae62d5d9b784c4835562 HTML Author: tg(x) <*@tg-x.net> Date: Mon, 14 Feb 2011 08:16:55 +0100 user_includes setting Diffstat: M bin/gitzone | 18 ++++++++++++------ M etc/gitzone.conf | 4 ++++ 2 files changed, 16 insertions(+), 6 deletions(-) --- DIR diff --git a/bin/gitzone b/bin/gitzone t@@ -14,7 +14,7 @@ use POSIX qw/strftime/; use Cwd qw/cwd realpath/; use File::Basename qw/fileparse/; -our ($zone_dir, $git, $named_checkzone, $rndc, $class, $default_view, $update_record, $max_depth, $zones, $verbosity); +our ($zone_dir, $git, $named_checkzone, $rndc, $class, $default_view, $update_record, $user_includes, $max_depth, $zones, $verbosity); our $user = getpwuid $<; @ARGV >= 2 or die "Usage: gitzone /path/to/gitzone.conf <command>\n"; t@@ -121,11 +121,13 @@ sub process_file { $line = "$a$s$z\n"; $changed = 1; } elsif (/^(\W*\$INCLUDE\W+)(\S+)(.*)$/) { - # check $INCLUDE lines for files outside the user dir my ($a,$inc_file,$z) = ($1,$2,$3); - unless ($inc_file =~ m,^$user/, && $inc_file !~ /\.\./) { - close FILE; - die "Error in $file:$n: invalid included file name, it should start with: $user/\n"; + if ($user_includes) { + # check $INCLUDE lines for files outside the user dir + unless ($inc_file =~ m,^$user/, && $inc_file !~ /\.\./) { + close FILE; + die "Error in $file:$n: invalid included file name, it should start with: $user/\n"; + } } } else { if ($n == 1 && /^;INCLUDED_BY\s+(.*)$/) { t@@ -186,7 +188,11 @@ sub check_zones { $dir = substr $dir, 0, -1; next unless $files{$file} > 0 && exists $zones->{$user}->{$dir}->{$zone}; - print `$named_checkzone -kn -w .. '$zone' '$user/$file'`; + if ($user_includes) { + print `$named_checkzone -kn -w .. '$zone' '$user/$file'`; + } else { + print `$named_checkzone -kn '$zone' '$file'`; + } clean_exit 1 if $?; # error, reject push push @zones, $file; } DIR diff --git a/etc/gitzone.conf b/etc/gitzone.conf t@@ -17,6 +17,10 @@ $rndc = '/usr/sbin/rndc'; # update-record command: 1 = enabled, 0 = disabled $update_record = 1; +# restrict includes to user directories +# $INCLUDE file names should be prefixed with <username>/ in this case +$user_includes = 1; + # max depth to follow INCLUDED_BY files $max_depth = 256; # output verbosity (0..3)