HyperNews homepage - About HyperNews
 Next-in-Thread Next-in-Thread
 Next Message Next Message

Idea Here's a perl script to remove members 

Forum: Instructions for Becoming a Member
Re: Question Removing members? (Abhijeet Chavan)
Re: Feedback No Removing, yet (Daniel M LaLiberte)
Date: 1998, Jun 30
From: Mark :) Ohrenschall <mao>

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`;
}
}

 Next-in-Thread Next-in-Thread
 Next Message Next Message
Inline:
 1 1
 All All
Outline:
 1 1
 2 2
 All All

1 None: Thanks for the remove-members script by liberte@emancholl.pair.com, 1998, Jun 30

This forum is closed.

 Members Members
 Subscribe Subscribe
 Admin Mode Admin Mode
 Show Frames Show Frames
 Help Help


HyperNews Instructions for:
|| Reading Messages || Administration of Messages || Subscribing and Unsubscribing ||
|| Adding Messages || Posting by Email || Becoming a Member ||
Earn money with Scour!
Google
 
Web www.HyperNews.org
Earn money with Scour!