summaryrefslogtreecommitdiff
path: root/ikiwiki-update-wikilist
diff options
context:
space:
mode:
Diffstat (limited to 'ikiwiki-update-wikilist')
-rwxr-xr-xikiwiki-update-wikilist48
1 files changed, 48 insertions, 0 deletions
diff --git a/ikiwiki-update-wikilist b/ikiwiki-update-wikilist
new file mode 100755
index 000000000..0f3f0bcc6
--- /dev/null
+++ b/ikiwiki-update-wikilist
@@ -0,0 +1,48 @@
+#!/usr/bin/perl -t
+# Add a user to the system wide wikilist.
+# This script can safely be made suid.
+use warnings;
+use strict;
+use English;
+
+my $username=getpwuid($REAL_USER_ID);
+if (! defined $username || ! length $username) {
+ die "unable to determine user name for UID $REAL_USER_ID\n";
+}
+
+my $wikilist="/etc/ikiwiki/wikilist";
+if (! -e $wikilist) {
+ die "$wikilist does not exist\n";
+}
+
+my $removed=0;
+my @lines;
+open (my $list, "<$wikilist") || die "read $wikilist: $!";
+while (<$list>) {
+ chomp;
+ if (/^\s*([^\s]+)\s*$/) {
+ my $user=$1;
+ if ($user eq $username) {
+ $removed=1;
+ }
+ else {
+ push @lines, $_;
+ }
+ }
+ else {
+ push @lines, $_;
+ }
+}
+close $list || die "error reading $list: $!";
+open ($list, ">$wikilist") || die "write $wikilist: $!";
+foreach (@lines) {
+ print $list "$_\n";
+}
+if ($removed) {
+ print "removed user $username from $wikilist\n";
+}
+else {
+ print $list "$username\n";
+ print "added user $username to $wikilist\n";
+}
+close $list || die "error writing $list: $!";