Handle hostnames with upper-case letters
[webmin.git] / ipsec / save_secret.cgi
1 #!/usr/local/bin/perl
2 # Create, update or delete a secret key
3
4 require './ipsec-lib.pl';
5 &ReadParse();
6 @secs = &list_secrets();
7 if ($in{'new'}) {
8         $sec = { 'type' => $in{'type'} };
9         }
10 else {
11         $sec = $secs[$in{'idx'}];
12         }
13
14 if ($in{'delete'}) {
15         # Just kill this key
16         @secs > 1 || &error($text{'secret_elast'});
17         &lock_file($config{'secrets'});
18         &delete_secret($sec);
19         &unlock_file($config{'secrets'});
20         &webmin_log("delete", "secret", undef, { 'name' => $sec->{'name'} });
21         }
22 else {
23         # Validate inputs
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'}\"";
32                 }
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)) {
37                         $k = "rsa_$p";
38                         next if (!defined($in{$k}));
39                         $in{$k} =~ s/\s//g;
40                         $in{$k} =~ /\S/ || &error(&text('secret_ersa', $p));
41                         $sec->{'value'} .= "\t".$p.": ".$in{$k}."\n";
42                         }
43                 $sec->{'value'} .= "\t}";
44                 }
45
46         # Update or create
47         &lock_file($config{'secrets'});
48         if ($in{'new'}) {
49                 &create_secret($sec);
50                 $logname = $sec->{'name'};
51                 }
52         else {
53                 &modify_secret($sec);
54                 $logname = $oldname;
55                 }
56         &unlock_file($config{'secrets'});
57         &webmin_log($in{'new'} ? "create" : "modify", "secret", undef,
58                     { 'name' => $logname });
59         }
60 &redirect("list_secrets.cgi");
61