2
# based on ikiwiki-mass-rebuild, part of ikiwiki, written by Joey Hess
7
sub supplemental_groups {
11
while (my @fields=getgrent()) {
12
if (grep { $_ eq $user } split(' ', $fields[3])) {
13
push @list, $fields[2];
24
if (! getpwnam("$user")) {
25
print STDERR "warning: user $user does not exist\n";
28
# TODO: add sanity check for $url
29
print "Processing moin wiki at $url as user $user ...\n";
30
# su is not used because it passes arguments through the shell,
31
# which might not be safe.
32
defined(my $pid = fork) or die "Can’t fork: $!";
34
my ($uuid, $ugid) = (getpwnam($user))[2, 3];
35
my $grouplist=join(" ", $ugid, $ugid, supplemental_groups($user));
38
die "failed to set egid $grouplist: $!";
43
if ($< != $uuid || $> != $uuid || $( != $ugid) {
44
die "failed to drop permissions to $user";
48
HOME => (getpwnam($user))[7],
50
exec("moin", "--wiki-url", $url, "migration", "data", @ARGV);
51
die "failed to run moin: $!";
55
print STDERR "Processing moin wiki at $url as user $user failed with code $?\n";
64
open ($list, "<$file") || die "$file: $!";
69
next if /^#/ || ! length;
71
if (/^([^\s]+)\s+([^\s]+)$/) {
74
if (defined $forceuser && $forceuser ne $user) {
75
print STDERR "warning: in $file line $., attempt to set user to $user, but user forced to $forceuser. Skipping\n";
77
processline($user, $url);
78
# We once supported a middle config_dir value...
79
} elsif (/^([^\s]+)\s+([^\s]+)\s+([^\s]+)$/) {
82
print STDERR "\nWARNING: $file line $., deprecated 3-value format (not \"USER URL\"). Stripping middle value\n\n";
83
if (defined $forceuser && $forceuser ne $user) {
84
print STDERR "warning: in $file line $., attempt to set user to $user, but user forced to $forceuser. Skipping\n";
86
processline($user, $url);
88
elsif (/^([^\s]+)$/) {
90
my $home=(getpwnam($user))[7];
91
if (defined $home && -d $home) {
92
my $dotfile="$home/.moin/wikilist";
94
processlist($dotfile, $user);
102
my $wikilist="/etc/moin/wikilist";
105
processlist($wikilist);