Support private, group, public as values for umask
authorSimon McVittie <smcv@debian.org>
Sun, 27 Nov 2011 14:14:47 +0000 (14:14 +0000)
committerSimon McVittie <smcv@debian.org>
Sun, 27 Nov 2011 14:14:47 +0000 (14:14 +0000)
These are equivalent to octal 077, 027 and 022, but easier to get from
YAML.

Signed-off-by: Simon McVittie <smcv@debian.org>
IkiWiki.pm

index 637d56c..59fefc6 100644 (file)
@@ -305,9 +305,9 @@ sub getsetup () {
                rebuild => 0,
        },
        umask => {
-               type => "integer",
-               example => "022",
-               description => "force ikiwiki to use a particular umask",
+               type => "string",
+               example => "public",
+               description => "force ikiwiki to use a particular umask (keywords public, group or private, or a number)",
                advanced => 1,
                safe => 0, # paranoia
                rebuild => 0,
@@ -587,7 +587,23 @@ sub checkconfig () {
                unless exists $config{wikistatedir} && defined $config{wikistatedir};
 
        if (defined $config{umask}) {
-               umask(possibly_foolish_untaint($config{umask}));
+               my $u = possibly_foolish_untaint($config{umask});
+
+               if ($u =~ m/^\d+$/) {
+                       umask($u);
+               }
+               elsif ($u eq 'private') {
+                       umask(077);
+               }
+               elsif ($u eq 'group') {
+                       umask(027);
+               }
+               elsif ($u eq 'public') {
+                       umask(022);
+               }
+               else {
+                       error(sprintf(gettext("unsupported umask setting %s"), $u));
+               }
        }
 
        run_hooks(checkconfig => sub { shift->() });