Use this script at your own risk. I suggest you back-up your
hnpeople directory (e.g., with tar), add a fictitious member,
run this script to delete the new member, and check your
hnpeople directory to make sure nothing got clobbered.
Copy this perl script into the .scripts directory and then
make a link into the SECURED directory (or the HyperNews
parent directory if you want anyone to be able to remove a
member). I call it "remove-members.pl" on my server.
You will have to edit the path to cgi-lib.pl as appropriate.
#!/usr/local/bin/perl
$FILEBAKEXT = "-bak";
require '/home/web/seg/cgi-bin/util/cgi-lib.pl';
#add current directory to load path.
if ($0 =~ m,^(.*)/[^/]+$,) {
local ($cwdir) = $1;
} else {
local ($cwdir) = ".";
}
unshift(@INC, $cwdir, "$cwdir/.scripts");
require 'Admin/hnrc';
require 'log-lib.pl';
&ReadParse;
print &PrintHeader;
print "<HTML><BODY>\n";
if ($in{'submit0'} eq "OK") {
&confirm_delete_members;
} elsif ($in{'submit1'} eq "Delete!") {
&delete_members;
} else {
&show_members;
}
print "</BODY></HTML>\n";
sub get_members
{
opendir(DIR, $hnPeople);
local(@files) = readdir(DIR);
closedir(DIR);
for $file (@files) {
if (-d "$hnPeople/$file") { next;}
if ($file =~ /^\./) { next;}
if (-l "$hnPeople/$file") {
$alias = &get_alias($file);
$members{$alias} = join(' ', $members{$alias}, $file);
} else {
$members{$file} = join(' ', $members{$file}, $file);
}
}
sub get_alias
{
local ($member) = shift;
open(MEMBERINFO, "< $hnPeople/$member");
local (@text) = <MEMBERINFO>;
close(MEMBERINFO);
join(' ', @text) =~ /UserID:\s(\S+)\s/;
return $1;
}
return %members;
}
sub show_members
{
%members = &get_members;
foreach $member (sort keys(%members)) {
local ($dev, $ino, $mode, $nlink, $uid, $gid, $rdef, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat("$hnPeople/$member");
local ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($mtime);
push(membersinfo, "\n<INPUT TYPE=\"checkbox\" NAME=\"$member\">");
push(membersinfo, "<STRONG>$member</STRONG> added or last changed on $mon/$mday/$year\n");
open(MEMBERINFO, "< $hnPeople/$member");
while (<MEMBERINFO>) {
s#(\w+)(\W+)(.*)#<EM>$1</EM>$2$3#;
$UserID = $3;
next if /Password/;
next if /UserID/ && $UserID eq $member;
push(membersinfo, $_);
}
close(MEMBERINFO)
}
$membersinfo = join('', @membersinfo);
print <<EOF;
<FORM >
<STRONG>Checkmark one or more of the following members for deletion:</STRONG>
<PRE>
$membersinfo
</PRE>
<INPUT TYPE="submit" NAME="submit0" VALUE="OK">
<INPUT TYPE="reset">
</FORM>
EOF
}
sub confirm_delete_members
{
%members = &get_members;
print "<FORM><STRONG>Are you sure you want to delete the following members?</STRONG><BR><UL>\n";
foreach $member (sort keys(%members)) {
if ($in{$member} eq "on") {
print "<LI>$member\n";
print "<INPUT TYPE=\"hidden\" NAME=\"$member\" VALUE=\"on\">\n";
}
}
print <<EOF;
</UL><INPUT TYPE="submit" NAME="submit1" VALUE="Delete!">
</FORM>
EOF
}
sub delete_members
{
%members = &get_members;
foreach $member (sort keys(%members)) {
if ($in{$member} eq "on") {
&delete_member_and_aliases($members{$member});
}
}
print <<EOF;
<P>The following members have been removed:
<UL>
EOF
foreach $member (sort keys(%members)) {
if ($in{$member} eq "on") {
print "<LI>$member\n";
&logTransaction("Delete $member");
}
}
print <<EOF;
</UL>
<FORM>
<INPUT TYPE="submit" NAME="submit2" VALUE="OK">
</FORM>
EOF
sub delete_member_and_aliases
{
local ($aliases) = shift;
local (@aliases) = split(' ', $aliases);
print `cp $hnPassword $hnPassword$FILEBAKEXT`;
open(HNPASSWD, "> $hnPassword");
open(HNPASSWDBAK, "< $hnPassword$FILEBAKEXT");
hnpasswdbak:
while (<HNPASSWDBAK>) {
local ($i);
for ($i = 0; $i <= $#aliases; $i++) {
next hnpasswdbak if /^$aliases[$i]/;
}
print HNPASSWD;
}
close(HNPASSWDBAK);
close(HNPASSWD);
print `cp $hnPeople/$hnGroupMembers $hnPeople/$hnGroupMembers$FILEBAKEXT`;
open(HNGROUPMEMBERS, "> $hnPeople/$hnGroupMembers");
open(HNGROUPMEMBERSBAK, "< $hnPeople/$hnGroupMembers$FILEBAKEXT");
while (<HNGROUPMEMBERSBAK>) {
local ($i);
for ($i = 0; $i <= $#aliases; $i++) {
s/$aliases[$i]//g;
}
print HNGROUPMEMBERS;
}
close(HNGROUPMEMBERSBAK);
close(HNGROUPMEMBERS);
@aliases = "$hnPeople/" . join(" $hnPeople/", @aliases);
print `rm @aliases`;
}
}
|
| Inline: | Outline: |
This forum is closed.
|
|