Handle hostnames with upper-case letters
[webmin.git] / usermin / savekey.cgi
1 #!/usr/local/bin/perl
2 # Replace the existing Webmin SSL key
3
4 require './usermin-lib.pl';
5 &ReadParseMime();
6 &error_setup($text{'savekey_err'});
7
8 # Validate inputs
9 $key = $in{'key'} || $in{'keyfile'};
10 $key =~ s/\r//g;
11 $key =~ /BEGIN RSA PRIVATE KEY/ &&
12   $key =~ /END RSA PRIVATE KEY/ || &error($text{'savekey_ekey'});
13 if (!$in{'cert_def'}) {
14         # Make sure cert is valid
15         $cert = $in{'cert'} || $in{'certfile'};
16         $cert =~ s/\r//g;
17         $cert =~ /BEGIN CERTIFICATE/ &&
18           $cert =~ /END CERTIFICATE/ || &error($text{'savekey_ecert'});
19         }
20 else {
21         # Make sure key contains cert
22         $key =~ /BEGIN CERTIFICATE/ &&
23           $key =~ /END CERTIFICATE/ || &error($text{'savekey_ecert2'});
24         }
25 if (!$in{'chain_def'}) {
26         # Make sure chained cert is valid
27         $chain = $in{'chain'} || $in{'chainfile'};
28         $chain =~ s/\r//g;
29         $chain =~ /BEGIN CERTIFICATE/ &&
30           $chain =~ /END CERTIFICATE/ || &error($text{'savekey_echain'});
31         }
32
33 # Save config and key file
34 &lock_file($usermin_miniserv_config);
35 &get_usermin_miniserv_config(\%miniserv);
36 $miniserv{'keyfile'} ||= "$config_directory/miniserv.pem";
37 &lock_file($miniserv{'keyfile'});
38 &open_tempfile(KEY, ">$miniserv{'keyfile'}");
39 &print_tempfile(KEY, $key);
40 &close_tempfile(KEY);
41 &unlock_file($miniserv{'keyfile'});
42 if ($in{'cert_def'}) {
43         delete($miniserv{'certfile'});
44         }
45 else {
46         $miniserv{'certfile'} ||= "$config_directory/miniserv.cert";
47         &lock_file($miniserv{'certfile'});
48         &open_tempfile(CERT, ">$miniserv{'certfile'}");
49         &print_tempfile(CERT, $cert);
50         &close_tempfile(CERT);
51         &unlock_file($miniserv{'certfile'});
52         }
53 if (!$in{'chain_def'}) {
54         $miniserv{'extracas'} = "$config_directory/miniserv.chain"
55                 if (!$miniserv{'extracas'} || $miniserv{'extracas'} =~ /\s/);
56         &lock_file($miniserv{'extracas'});
57         &open_tempfile(CERT, ">$miniserv{'extracas'}");
58         &print_tempfile(CERT, $chain);
59         &close_tempfile(CERT);
60         &unlock_file($miniserv{'extracas'});
61         }
62 &put_usermin_miniserv_config(\%miniserv);
63 &unlock_file($usermin_miniserv_config);
64
65 # Tell the user
66 &ui_print_header(undef, $text{'savekey_title'}, "");
67
68 if ($miniserv{'certfile'}) {
69         print &text('savekey_done2', "<tt>$miniserv{'keyfile'}</tt>",
70                                      "<tt>$miniserv{'certfile'}</tt>"),"<p>\n";
71         }
72 else {
73         print &text('savekey_done', "<tt>$miniserv{'keyfile'}</tt>"),"<p>\n";
74         }
75 if (!$in{'chain_def'}) {
76         print &text('savekey_done3', "<tt>$miniserv{'extracas'}</tt>"),"<p>\n";
77         }
78
79 &ui_print_footer("", $text{'index_return'});
80
81 &webmin_log("savekey");
82 &restart_usermin_miniserv(1);