Commit | Line | Data |
---|---|---|
926c04e8 | 1 | #!/usr/bin/perl -t |
2 | # Add a user to the system wide wikilist. | |
3 | # This script can safely be made suid. | |
4 | use warnings; | |
5 | use strict; | |
6 | use English; | |
7 | ||
bc3363be JH |
8 | my $remove=(@ARGV && $ARGV[0] eq '-r'); |
9 | ||
926c04e8 | 10 | my $username=getpwuid($REAL_USER_ID); |
11 | if (! defined $username || ! length $username) { | |
12 | die "unable to determine user name for UID $REAL_USER_ID\n"; | |
13 | } | |
14 | ||
15 | my $wikilist="/etc/ikiwiki/wikilist"; | |
16 | if (! -e $wikilist) { | |
17 | die "$wikilist does not exist\n"; | |
18 | } | |
19 | ||
bc3363be JH |
20 | my $changed=0; |
21 | my $seen=0; | |
926c04e8 | 22 | my @lines; |
23 | open (my $list, "<$wikilist") || die "read $wikilist: $!"; | |
24 | while (<$list>) { | |
25 | chomp; | |
26 | if (/^\s*([^\s]+)\s*$/) { | |
27 | my $user=$1; | |
28 | if ($user eq $username) { | |
bc3363be JH |
29 | if (! $remove) { |
30 | $seen=1; | |
31 | push @lines, $_; | |
32 | } | |
926c04e8 | 33 | } |
34 | else { | |
35 | push @lines, $_; | |
36 | } | |
37 | } | |
38 | else { | |
39 | push @lines, $_; | |
40 | } | |
41 | } | |
bc3363be JH |
42 | if (! $seen && ! $remove) { |
43 | push @lines, $username; | |
44 | $changed=1; | |
926c04e8 | 45 | } |
bc3363be JH |
46 | if ($changed) { |
47 | close $list || die "ikiwiki-update-wikilist: error reading $list: $!\n"; | |
950850f6 | 48 | open ($list, ">$wikilist") || die "ikiwiki-update-wikilist: cannot write to $wikilist\n"; |
bc3363be JH |
49 | foreach (@lines) { |
50 | print $list "$_\n"; | |
51 | } | |
52 | if ($remove) { | |
53 | print "ikiwiki-update-wikilist: removed user $username from $wikilist\n"; | |
54 | } | |
55 | else { | |
56 | print "ikiwiki-update-wikilist: added user $username to $wikilist\n"; | |
57 | } | |
58 | close $list || die "ikiwiki-update-wikilist: error writing $wikilist: $!\n"; | |
926c04e8 | 59 | } |
60 | else { | |
bc3363be | 61 | print "ikiwiki-update-wikilist: no changes need to be made\n"; |
926c04e8 | 62 | } |