On Monday 29 September 2003 10:14 am, Wagner, David --- Senior Programmer 
Analyst --- WGO wrote:
>       Why re-invent the wheel if some aspect of what you are doing can possibly
> help others. I would enjoy seeing what is going on!

Well, since I started this thread, it's only appropriate that I contribute my 
$0.02 CAD.

test-accounts.pl - Loop through a list of email accounts / passwords, check 
them, and print out which ones work and which ones don't.

unify-passwdshadow.pl - Take a /etc/passwd and /etc/shadow file and merge them 
together to create an un-shadow'd file.

classVersion - Shortcut to print out the version number for a given perl class

There's more where that came from, if people are interested.

-- 
/* Michael A. Nachbaur <[EMAIL PROTECTED]>
 * http://nachbaur.com/pgpkey.asc
 */

"He expanded his chest to make it totally clear that here 
was the sort of man you only dared to cross if you had a 
team of Sherpas with you. "
#!/usr/bin/perl
# Name        : test-emailpasswords.pl
# Description : Takes a /etc/passwd formatted file with clear-text passwords
#             : and attempts to log into a POP3 server to verify if the
#             : username/password tuple works.  Accepts input as multiple
#             : files on the command-line, or from STDIN.
use strict;
use warnings;
use constant POP3LIST => '/home/nachbaur/bin/pop3list';
use constant HOSTNAME => 'mail.shuswap.net';

while (<>) {
    chomp;
    my ($username, $password) = split /:/;
    unless ($username and $password) {
        warn "No username or password supplied on line $.\n";
        next;
    }
    open INPIPE, POP3LIST . " -h " . HOSTNAME .
        " -u '$username' -p '$password' 2>&1 |"
        or die "Can't open the pop3 command: $!\n";
    my $succeeded = 1;
    while (<INPIPE>) {
        if (/failed/i) {
            $succeeded = 0;
            last;
        }
    }
    close INPIPE;
    print join(':', $username, $password, $succeeded), "\n";
}
#!/usr/bin/perl
# Name        : unify-passwdshadow.pl
# Description : Take a passwd and shadow file as input, and merge
#             : the results together creating a unified passwd
#             : file.  Assumes you're giving it intelligent data.
use strict;
use warnings;

my ($passwd_file, $shadow_file) = @ARGV;
my %passwd = ();
my %shadow = ();

open INPASSWD, $passwd_file
    or die "Can't open the bloody password file\n";
foreach my $passwd_ent (<INPASSWD>) {
    chomp $passwd_ent;
    my ($username) = split(':', $passwd_ent);
    $passwd{$username} = $passwd_ent;
}
close INPASSWD;

open INSHADOW, $shadow_file
    or die "Can't open the bloody shadow file\n";
foreach my $shadow_ent (<INSHADOW>) {
    chomp $shadow_ent;
    my ($username) = split(':', $shadow_ent);
    $shadow{$username} = $shadow_ent;
}
close INSHADOW;

foreach my $username (keys %passwd) {
    my ($username, undef, $uid, $gid, $gecos, $home, $shell)
        = split(':', $passwd{$username});
    my (undef, $password) = split(':', $shadow{$username});
    print join(':', $username, $password, $uid, $gid, $gecos, $home, $shell), "\n";
}

Attachment: classVersion
Description: application/shellscript

Reply via email to