blob: a6425f011c6a7e04c281cdfe8f70094d302818e5 (
plain)
- #!/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 $remove=(@ARGV && $ARGV[0] eq '-r');
- 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 $changed=0;
- my $seen=0;
- my @lines;
- open (my $list, "<$wikilist") || die "read $wikilist: $!";
- while (<$list>) {
- chomp;
- if (/^\s*([^\s]+)\s*$/) {
- my $user=$1;
- if ($user eq $username) {
- if (! $remove) {
- $seen=1;
- push @lines, $_;
- }
- }
- else {
- push @lines, $_;
- }
- }
- else {
- push @lines, $_;
- }
- }
- if (! $seen && ! $remove) {
- push @lines, $username;
- $changed=1;
- }
- if ($changed) {
- close $list || die "ikiwiki-update-wikilist: error reading $list: $!\n";
- open ($list, ">$wikilist") || die "ikiwiki-update-wikilist: cannot write to $wikilist\n";
- foreach (@lines) {
- print $list "$_\n";
- }
- if ($remove) {
- print "ikiwiki-update-wikilist: removed user $username from $wikilist\n";
- }
- else {
- print "ikiwiki-update-wikilist: added user $username to $wikilist\n";
- }
- close $list || die "ikiwiki-update-wikilist: error writing $wikilist: $!\n";
- }
- else {
- print "ikiwiki-update-wikilist: no changes need to be made\n";
- }
|