mirror of
https://github.com/webmin/webmin.git
synced 2025-07-21 23:40:34 +00:00
90 lines
1.6 KiB
Perl
Executable File
90 lines
1.6 KiB
Perl
Executable File
# secrets-lib.pl
|
|
# Common functions for editing a PPP users file
|
|
|
|
# list_secrets()
|
|
sub list_secrets
|
|
{
|
|
local(@rv, $line, $_);
|
|
open(SEC, "<".$config{'pap_file'});
|
|
$line = 0;
|
|
while(<SEC>) {
|
|
chop;
|
|
s/^#.*$//g;
|
|
@w = &split_words($_);
|
|
if (@w >= 3) {
|
|
local(%sec, @ips);
|
|
$sec{'client'} = $w[0];
|
|
$sec{'server'} = $w[1];
|
|
$sec{'secret'} = $w[2];
|
|
@ips = @w[3..$#w];
|
|
$sec{'ips'} = \@ips;
|
|
$sec{'line'} = $line;
|
|
$sec{'index'} = scalar(@rv);
|
|
push(@rv, \%sec);
|
|
}
|
|
$line++;
|
|
}
|
|
close(SEC);
|
|
return @rv;
|
|
}
|
|
|
|
# create_secret(&secret)
|
|
sub create_secret
|
|
{
|
|
&open_tempfile(SEC, ">>$config{'pap_file'}");
|
|
&print_tempfile(SEC, &join_words($_[0]->{'client'}, $_[0]->{'server'},
|
|
$_[0]->{'secret'}, @{$_[0]->{'ips'}}),"\n");
|
|
&close_tempfile(SEC);
|
|
}
|
|
|
|
# change_secret(&secret)
|
|
sub change_secret
|
|
{
|
|
&replace_file_line($config{'pap_file'}, $_[0]->{'line'},
|
|
&join_words($_[0]->{'client'}, $_[0]->{'server'},
|
|
$_[0]->{'secret'}, @{$_[0]->{'ips'}})."\n");
|
|
}
|
|
|
|
# delete_secret(&secret)
|
|
sub delete_secret
|
|
{
|
|
&replace_file_line($config{'pap_file'}, $_[0]->{'line'});
|
|
}
|
|
|
|
# split_words(string)
|
|
sub split_words
|
|
{
|
|
local($s, @w);
|
|
$s = $_[0];
|
|
while($s =~ /^\s*([^"\s]+|"([^"]*)")(.*)$/) {
|
|
push(@w, defined($2) ? $2 : $1);
|
|
$s = $3;
|
|
}
|
|
return @w;
|
|
}
|
|
|
|
sub join_words
|
|
{
|
|
local(@w, $w);
|
|
foreach $w (@_) {
|
|
if ($w =~ /^[a-zA-Z0-9\.\-]+$/) { push(@w, $w); }
|
|
else { push(@w, "\"$w\""); }
|
|
}
|
|
return join(" ", @w);
|
|
}
|
|
|
|
# opt_crypt(password)
|
|
# Returns the given password, crypted if the user has configured it
|
|
sub opt_crypt
|
|
{
|
|
if ($config{'encrypt_pass'}) {
|
|
local($salt);
|
|
srand(time());
|
|
$salt = chr(int(rand(26))+65).chr(int(rand(26))+65);
|
|
return &unix_crypt($_[0], $salt);
|
|
}
|
|
return $_[0];
|
|
}
|
|
|
|
|