50 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| #!/usr/bin/perl
 | |
| 
 | |
| $passwd = '/etc/passwd';
 | |
| $homepagedir = 'public_html';
 | |
| @index = ('index.html', 'index.cgi');
 | |
| $noindex = '.noindex';
 | |
| 
 | |
| open(P, 'ypcat passwd |') || die "open $passwd: $!\n";
 | |
| undef @pages;
 | |
| while(<P>) {
 | |
| 	($login,$password,$uid,$gid,$gcos,$home,$shell) = split(/:/);
 | |
| 
 | |
| 	# cleanup gecos
 | |
| 	$gcos =~ s/,.*//;
 | |
| 
 | |
| 	# disable daemons
 | |
| 	next if $uid <= 100;
 | |
| 	next if $login eq 'nobody';
 | |
| 	next if $shell =~ ~ m%/(pppd|sliplogin|nologin|nonexistent)$%;
 | |
| 
 | |
| 	# uucp accounts
 | |
| 	next if $login =~ /^U/;
 | |
| 
 | |
|  	$p = $home . '/' . $homepagedir;
 | |
| 	
 | |
| 	# user don't want be on the index
 | |
| 	next if -f "$p/$noindex";
 | |
| 
 | |
| 	foreach (@index) {
 | |
| 		if (-f "$p/$_" && -r "$p/$_") {
 | |
| 			if ($_ !~ /\.cgi$/ || -x "$p/$_") {
 | |
| 				push(@pages, $gcos . ':' . $login);
 | |
| 				last;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| close P;
 | |
| if ($#pages < 0) {
 | |
| 	die "No users found!\n";
 | |
| }
 | |
| 
 | |
| foreach (sort @pages) {
 | |
| 	($gcos, $login) = split(/:/);
 | |
| 	($firstgecos, @gecos) = split(/,/, $gcos);
 | |
| 	print qq{<LI><A HREF="http://people.FreeBSD.org/~$login/">},
 | |
| 	      $firstgecos, "</A> ", join(', ', @gecos), "</LI>\n";
 | |
| }
 | |
| 
 |