mirror of
https://github.com/webmin/webmin.git
synced 2025-08-16 14:51:18 +00:00
62 lines
1.5 KiB
Perl
Executable File
62 lines
1.5 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# Create, update or delete a secret key
|
|
|
|
require './ipsec-lib.pl';
|
|
&ReadParse();
|
|
@secs = &list_secrets();
|
|
if ($in{'new'}) {
|
|
$sec = { 'type' => $in{'type'} };
|
|
}
|
|
else {
|
|
$sec = $secs[$in{'idx'}];
|
|
}
|
|
|
|
if ($in{'delete'}) {
|
|
# Just kill this key
|
|
@secs > 1 || &error($text{'secret_elast'});
|
|
&lock_file($config{'secrets'});
|
|
&delete_secret($sec);
|
|
&unlock_file($config{'secrets'});
|
|
&webmin_log("delete", "secret", undef, { 'name' => $sec->{'name'} });
|
|
}
|
|
else {
|
|
# Validate inputs
|
|
&error_setup($text{'secret_err'});
|
|
$in{'name_def'} || $in{'name'} =~ /\S/ ||
|
|
&error($text{'secret_ename'});
|
|
$oldname = $sec->{'name'};
|
|
$sec->{'name'} = $in{'name_def'} ? "" : $in{'name'};
|
|
if (lc($sec->{'type'}) eq 'psk') {
|
|
$in{'pass'} || &error($text{'secret_epass'});
|
|
$sec->{'value'} = "\"$in{'pass'}\"";
|
|
}
|
|
elsif (lc($sec->{'type'}) eq 'rsa') {
|
|
$sec->{'value'} = "{\n";
|
|
@rsa_in = map { $_ =~ /^rsa_(\S+)/ ? ( $1 ) : ( ) } keys(%in);
|
|
foreach $p (&unique(@rsa_attribs, @rsa_in)) {
|
|
$k = "rsa_$p";
|
|
next if (!defined($in{$k}));
|
|
$in{$k} =~ s/\s//g;
|
|
$in{$k} =~ /\S/ || &error(&text('secret_ersa', $p));
|
|
$sec->{'value'} .= "\t".$p.": ".$in{$k}."\n";
|
|
}
|
|
$sec->{'value'} .= "\t}";
|
|
}
|
|
|
|
# Update or create
|
|
&lock_file($config{'secrets'});
|
|
if ($in{'new'}) {
|
|
&create_secret($sec);
|
|
$logname = $sec->{'name'};
|
|
}
|
|
else {
|
|
&modify_secret($sec);
|
|
$logname = $oldname;
|
|
}
|
|
&unlock_file($config{'secrets'});
|
|
&webmin_log($in{'new'} ? "create" : "modify", "secret", undef,
|
|
{ 'name' => $logname });
|
|
}
|
|
&redirect("list_secrets.cgi");
|
|
|