#!/usr/local/bin/perl -w
use strict;

## Scott Wiersdorf
## Created: Fri Jun  7 17:55:34 MDT 2002
## $Id: bulkload.pl,v 1.1 2005/08/15 18:25:30 scott Exp $

use vars qw($VERSION);
$VERSION = '1.05';

use Getopt::Std;
use vars qw($opt_v);
getopts('v');

die "This is bulkload.pl version $VERSION\n" if $opt_v;

use VPS::Passwd;
use VPS::Privs;

## defaults
my $uid = $<;
my $gid = 100;

my $vpriv = new VPS::Privs;

open BL, "./bulkload.txt"
    or die "Can't open bulkload.txt: $!\n";

while( <BL> ) {
    next if /^\#/;   ## skip comments
    next if /^\s*$/; ## skip whitespace
    chomp;
    my( $login, $passwd1, $full_name, $services, $home_opt) = split /\t/;

    next if $login =~ /^\s*\#/;
    my $home = ( $home_opt ? $home_opt : "/usr/home/$login" );

    ## check for existing account
    my $pw = getpwnam($login);
    if( $pw && $pw->name ) {
         warn "$login already has an account\n";
         next;
    }

    my $crypt = crypt( $passwd1, join('', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64]) );

    my $str = "$login:$crypt:$uid:$gid:$full_name:$home:noshell";
    $pw = addpwent($str);
    unless( $pw->as_string eq $str ) {
        warn "Could not write passwd file entry for $login\n";
        next;
    }

    ## write vpriv info
    my(@services) = split /:/, $services;
    for my $vp ( @services ) {
        my ($srv,$quota) = split /,/, $vp;
        $quota = ( defined $quota ? $quota : 0 );
        $vpriv->set_service( $login, $srv, $quota );
    }
    print "$login successfully added\n";

}
$vpriv->flush;

close BL;

exit;
