From: Joey Hess Date: Sun, 27 Jul 2008 04:02:04 +0000 (-0400) Subject: ikiwiki-update-wikilist: Add -r switch to remove. Default behavior is now always to add. X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/commitdiff_plain/bc3363beb767a82e3bdde2d038e7b678bd35f193 ikiwiki-update-wikilist: Add -r switch to remove. Default behavior is now always to add. --- diff --git a/debian/changelog b/debian/changelog index 08be87fbe..982c55796 100644 --- a/debian/changelog +++ b/debian/changelog @@ -7,6 +7,8 @@ ikiwiki (2.60) UNRELEASED; urgency=low * The way wrappers are defined in the setup file has changed. Old setup files will continue to work, for now. * Version control backends promoted to first-class plugins. + * ikiwiki-update-wikilist: Add -r switch to remove. Default behavior is now + always to add. -- Joey Hess Mon, 21 Jul 2008 11:35:46 -0400 diff --git a/doc/ikiwiki-update-wikilist.mdwn b/doc/ikiwiki-update-wikilist.mdwn index 4e87f92e6..e5ea72e36 100644 --- a/doc/ikiwiki-update-wikilist.mdwn +++ b/doc/ikiwiki-update-wikilist.mdwn @@ -4,14 +4,16 @@ ikiwiki-update-wikilist - add or remove user from /etc/ikiwiki/wikilist # SYNOPSIS -ikiwiki-update-wikilist +ikiwiki-update-wikilist [-r] # DESCRIPTION -`ikiwiki-update-wikilist` is designed to be made suid root, but not installed +`ikiwiki-update-wikilist` is designed to be made suid root, but is not installed suid by default. If made suid, it allows users to add or remove their names -from the `/etc/ikiwiki/wikilist` file. If a user's name is not in the file, -it will be added; if the name is already present, it will be removed. +from the `/etc/ikiwiki/wikilist` file. + +By default, the user's name will be added. +The `-r` switch causes the user's name to be removed. If your name is in `/etc/ikiwiki/wikilist`, the [[ikiwiki-mass-rebuild]](8) command will look for a ~/.ikiwiki/wikilist file, and rebuild the wikis listed diff --git a/ikiwiki-update-wikilist b/ikiwiki-update-wikilist index 0f3f0bcc6..0b52543cd 100755 --- a/ikiwiki-update-wikilist +++ b/ikiwiki-update-wikilist @@ -5,6 +5,8 @@ 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"; @@ -15,7 +17,8 @@ if (! -e $wikilist) { die "$wikilist does not exist\n"; } -my $removed=0; +my $changed=0; +my $seen=0; my @lines; open (my $list, "<$wikilist") || die "read $wikilist: $!"; while (<$list>) { @@ -23,7 +26,10 @@ while (<$list>) { if (/^\s*([^\s]+)\s*$/) { my $user=$1; if ($user eq $username) { - $removed=1; + if (! $remove) { + $seen=1; + push @lines, $_; + } } else { push @lines, $_; @@ -33,16 +39,24 @@ while (<$list>) { push @lines, $_; } } -close $list || die "error reading $list: $!"; -open ($list, ">$wikilist") || die "write $wikilist: $!"; -foreach (@lines) { - print $list "$_\n"; +if (! $seen && ! $remove) { + push @lines, $username; + $changed=1; } -if ($removed) { - print "removed user $username from $wikilist\n"; +if ($changed) { + close $list || die "ikiwiki-update-wikilist: error reading $list: $!\n"; + open ($list, ">$wikilist") || die "ikiwiki-update-wikilist: error writing $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 $list "$username\n"; - print "added user $username to $wikilist\n"; + print "ikiwiki-update-wikilist: no changes need to be made\n"; } -close $list || die "error writing $list: $!";