ikiwiki-update-wikilist: Add -r switch to remove. Default behavior is now always...
authorJoey Hess <joey@kodama.kitenet.net>
Sun, 27 Jul 2008 04:02:04 +0000 (00:02 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Sun, 27 Jul 2008 04:02:04 +0000 (00:02 -0400)
debian/changelog
doc/ikiwiki-update-wikilist.mdwn
ikiwiki-update-wikilist

index 08be87fbecdff3759e4ababcff1deae83136cf38..982c557962325d19741f69f5155a3d4d276772dd 100644 (file)
@@ -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.
   * 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 <joeyh@debian.org>  Mon, 21 Jul 2008 11:35:46 -0400
 
 
  -- Joey Hess <joeyh@debian.org>  Mon, 21 Jul 2008 11:35:46 -0400
 
index 4e87f92e67b31b81ae8dcd6864f2a2bd471628ff..e5ea72e36cf519816489c17d34b45c9eb895031e 100644 (file)
@@ -4,14 +4,16 @@ ikiwiki-update-wikilist - add or remove user from /etc/ikiwiki/wikilist
 
 # SYNOPSIS
 
 
 # SYNOPSIS
 
-ikiwiki-update-wikilist
+ikiwiki-update-wikilist [-r]
 
 # DESCRIPTION
 
 
 # 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
 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
 
 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
index 0f3f0bcc6497f2b6f6b73cf6821f01847bb6925c..0b52543cda5bdfb3a1b1e6bbd03a0a697210a141 100755 (executable)
@@ -5,6 +5,8 @@ use warnings;
 use strict;
 use English;
 
 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 $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";
 }
 
        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>) {
 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) {
        if (/^\s*([^\s]+)\s*$/) {
                my $user=$1;
                if ($user eq $username) {
-                       $removed=1;             
+                       if (! $remove) {
+                               $seen=1;
+                               push @lines, $_;
+                       }
                }
                else {
                        push @lines, $_;
                }
                else {
                        push @lines, $_;
@@ -33,16 +39,24 @@ while (<$list>) {
                push @lines, $_;
        }
 }
                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 {
 }
 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: $!";