#!/usr/bin/perl5
# ppp-in.cgi
# Scott A. Hotes, 3 / 25 / 96
# Silicon Graphics
require "/usr/OnRamp/lib/OnRamp.pm";
$conf = "/etc/passwd";
$dummy = "/etc/passwd.temp";
$myname = "ppp-in.cgi";
$title = "Dial-in PPP Accounts";
print "Content-type: text/html\n\n";
&title_block($title);
if ( ! -e "/usr/etc/ppp" ) {
&header_block($title);
print "PPP software not installed. Install subsystem
eoe.sw.ppp from the 6.2 CD.";
exit 0;
}
&get_fields;
&getAccounts;
if (%fld) {
$fld{'chosen'} =~ s/\W//g;
$help = $ENV{"DOCUMENT_ROOT"} . $ENV{"SCRIPT_NAME"};
$help =~ s/cgi$/hlp/;
exec $help if ($fld{'help'} eq "Help");
if ($fld{'add'}) {
&error(2,"Login name required.") if !$fld{'new_account'};
@test = getpwnam($fld{'new_account'});
&error(2,"Account already exists.") if $test[0];
&error(2,"Invalid login name.")
if $fld{'new_account'} =~ /$METACHARS/o || $fld{'new_account'} =~ /\s/;
$val{'login'} = $fld{'new_account'};
&addAccount;
}
if ($fld{'delete'}) {
&error(2,"To delete an existing account, first select an account from
list, then click the delete button.") if !$fld{'chosen'};
$message = qq|Click "Ok" to save changes.|;
&generic($fld{'chosen'});
}
if ($fld{'edit'}) {
&error(2,"To edit an existing account, first select an account from
list, then click the edit button.") if !$fld{'chosen'};
$val{'login'} = $fld{'chosen'};
&editAccount;
}
if ($fld{'doedit'}) { &formValid_doEdit; &doEdit; &getAccounts; &generic; }
if ($fld{'doit'}) { &tryToDelete; &getAccounts; &generic; }
if ($fld{'doadd'}) { &formValid_doAdd; &doAdd; &getAccounts; &generic; }
} else { &generic; }
sub formValid_doAdd {
if (!$fld{'password'})
{ &error(0,"You must enter a password."); }
if ($fld{'password'} ne $fld{'passcheck'})
{ &error(0,"Input passwords not equivalent."); }
&error(0,"Invalid login name.") if $fld{'login'} =~ /$METACHARS/o;
}
sub formValid_doEdit {
if ($fld{'password'} ne $fld{'passcheck'})
{ &error(1,"Input passwords not equivalent."); }
&error(1,"Invalid login name.") if $fld{'login'} =~ /$METACHARS/o;
}
sub error {
&error_block($_[1]);
%val = %fld;
if ($_[0] == 0) { &addAccount; }
elsif ($_[0] == 1) { &editAccount; }
else { &generic; }
exit 0;
}
sub doEdit {
open(IN,"< $conf");
open(OUT,"> $dummy");
while() {
@items = split(/:/);
if ($items[0] ne $fld{'chosen'}) { print OUT $_; }
else { $oldcrypt = $items[1]; }
}
close(IN);
close(OUT);
rename($dummy,$conf);
if ($fld{'password'}) {
&add_password($fld{'login'},$fld{'password'},0,0,$fld{'login'}." ppp","/","/usr/etc/ppp");
} else {
open(OUT,">> $conf");
print OUT "$fld{'login'}:$oldcrypt:0:0:$fld{'login'} ppp:/:/usr/etc/ppp\n";
close(OUT);
}
$message = "Account edited.";
}
sub editAccount {
&header_block("Edit Dial-in PPP Account");
print "