2 # Create, update or delete a secret key
4 require './ipsec-lib.pl';
6 @secs = &list_secrets();
8 $sec = { 'type' => $in{'type'} };
11 $sec = $secs[$in{'idx'}];
16 @secs > 1 || &error($text{'secret_elast'});
17 &lock_file($config{'secrets'});
19 &unlock_file($config{'secrets'});
20 &webmin_log("delete", "secret", undef, { 'name' => $sec->{'name'} });
24 &error_setup($text{'secret_err'});
25 $in{'name_def'} || $in{'name'} =~ /\S/ ||
26 &error($text{'secret_ename'});
27 $oldname = $sec->{'name'};
28 $sec->{'name'} = $in{'name_def'} ? "" : $in{'name'};
29 if (lc($sec->{'type'}) eq 'psk') {
30 $in{'pass'} || &error($text{'secret_epass'});
31 $sec->{'value'} = "\"$in{'pass'}\"";
33 elsif (lc($sec->{'type'}) eq 'rsa') {
34 $sec->{'value'} = "{\n";
35 @rsa_in = map { $_ =~ /^rsa_(\S+)/ ? ( $1 ) : ( ) } keys(%in);
36 foreach $p (&unique(@rsa_attribs, @rsa_in)) {
38 next if (!defined($in{$k}));
40 $in{$k} =~ /\S/ || &error(&text('secret_ersa', $p));
41 $sec->{'value'} .= "\t".$p.": ".$in{$k}."\n";
43 $sec->{'value'} .= "\t}";
47 &lock_file($config{'secrets'});
50 $logname = $sec->{'name'};
56 &unlock_file($config{'secrets'});
57 &webmin_log($in{'new'} ? "create" : "modify", "secret", undef,
58 { 'name' => $logname });
60 &redirect("list_secrets.cgi");