File: csr.cgi

package info (click to toggle)
webmin-virtual-server 2.50-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 1,608 kB
  • ctags: 392
  • sloc: perl: 15,687; makefile: 95; sh: 8
file content (70 lines) | stat: -rwxr-xr-x 2,299 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/local/bin/perl
# Generate a CSR and private key for this domain

require './virtual-server-lib.pl';
&ReadParse();
$d = &get_domain($in{'dom'});
$access{'edit'} && &can_edit_domain($d) || &error($text{'edit_ecannot'});
&foreign_require("webmin", "webmin-lib.pl");

# Validate inputs
&error_setup($text{'csr_err'});
$in{'commonName'} =~ /^[A-Za-z0-9\.\-]+$/ ||
	&error($webmin::text{'newkey_ecn'});
$in{'size_def'} || $in{'size'} =~ /^\d+$/ ||
	&error($webmin::text{'newkey_esize'});
$in{'days'} =~ /^\d+$/ || &error($webmin::text{'newkey_edays'});

# Generate the private key
$d->{'ssl_csr'} ||= "$d->{'home'}/ssl.csr";
$d->{'ssl_newkey'} ||= "$d->{'home'}/ssl.newkey";
unlink($d->{'ssl_newkey'});
$out = &backquote_logged("openssl genrsa -out ".quotemeta($d->{'ssl_newkey'})." $size 2>&1 </dev/null");
chown($d->{'uid'}, $d->{'ugid'}, $d->{'ssl_newkey'});
chmod(0755, $d->{'ssl_newkey'});
if (!-r $d->{'ssl_newkey'} || $?) {
	&error(&text('csr_ekey', "<pre>$out</pre>"));
	}

# Generate the CSR
$outtemp = &tempname();
unlink($d->{'ssl_csr'});
open(CA, "| openssl req -new -key ".quotemeta($d->{'ssl_newkey'})." -out ".
	 quotemeta($d->{'ssl_csr'})." >$outtemp 2>&1");
print CA ($in{'countryName'} || "."),"\n";
print CA ($in{'stateOrProvinceName'} || "."),"\n";
print CA ".\n";
print CA ($in{'organizationName'} || "."),"\n";
print CA ($in{'organizationalUnitName'} || "."),"\n";
print CA ($in{'commonName_def'} ? "*" : $in{'commonName'}),"\n";
print CA ($in{'emailAddress'} || "."),"\n";
print CA ".\n";
print CA ".\n";
close(CA);
$rv = $?;
$out = `cat $outtemp`;
unlink($outtemp);
chown($d->{'uid'}, $d->{'ugid'}, $d->{'ssl_csr'});
chmod(0755, $d->{'ssl_csr'});
if (!-r $d->{'ssl_csr'} || $?) {
	&error(&text('csr_ecsr', "<pre>$out</pre>"));
	}

# Save the domain
&save_domain($d);
&run_post_actions();

# Show the output
&ui_print_header(&domain_in($d), $text{'csr_title'}, "");

print "$text{'csr_done'}<p>\n";

print &text('csr_csr', "<tt>$d->{'ssl_csr'}</tt>"),"\n";
print "<pre>",`cat $d->{'ssl_csr'}`,"</pre>\n";

print &text('csr_key', "<tt>$d->{'ssl_newkey'}</tt>"),"\n";
print "<pre>",`cat $d->{'ssl_newkey'}`,"</pre>\n";

&ui_print_footer("cert_form.cgi?dom=$in{'dom'}", $text{'cert_return'},
	"edit_domain.cgi?dom=$in{'dom'}", $text{'edit_return'},
	"", $text{'index_return'});