fix broken link
[ikiwiki.git] / ikiwiki-update-wikilist
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
8 my $remove=(@ARGV && $ARGV[0] eq '-r');
9
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
20 my $changed=0;
21 my $seen=0;
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) {
29                         if (! $remove) {
30                                 $seen=1;
31                                 push @lines, $_;
32                         }
33                         else {
34                                 $changed=1;
35                         }
36                 }
37                 else {
38                         push @lines, $_;
39                 }
40         }
41         else {
42                 push @lines, $_;
43         }
44 }
45 if (! $seen && ! $remove) {
46         push @lines, $username;
47         $changed=1;
48 }
49 if ($changed) {
50         close $list || die "ikiwiki-update-wikilist: error reading $list: $!\n";
51         open ($list, ">$wikilist") || die "ikiwiki-update-wikilist: cannot write to $wikilist\n";
52         foreach (@lines) {
53                 print $list "$_\n";
54         }
55         if ($remove) {
56                 print "ikiwiki-update-wikilist: removed user $username from $wikilist\n";
57         }
58         else {
59                 print "ikiwiki-update-wikilist: added user $username to $wikilist\n";
60         }
61         close $list || die "ikiwiki-update-wikilist: error writing $wikilist: $!\n";
62 }
63 else {
64         print "ikiwiki-update-wikilist: no changes need to be made\n";
65 }