#!/usr/local/bin/perl
# signcsr.cgi
# Signs CSRs with a cert
require './certmgr-lib.pl';
$access{'signcsr'} || &error($text{'ecannot'});
&ReadParse();
&header($text{'signcsr_title'}, "");
if ($in{'submitted'} eq "sign") {
if (!$in{'days'}) { $error.=$text{'gencert_e_nodays'}."
\n"; }
if (!$in{'csrfile'}) {
$error.=$text{'signcsr_e_nocsrfile'}."
\n";
}
if (!$in{'signfile'}) {
$error.=$text{'signcsr_e_nosignfile'}."
\n";
}
if (!$in{'cakeyfile'}) {
$error.=$text{'signcsr_e_nokeyfile'}."
\n";
}
if (!$in{'cacertfile'}) {
$error.=$text{'signcsr_e_nokeyfile'}."
\n";
}
if (!$error) {
&process();
exit;
}
} else {
if (!$in{'csrfile'}) { $in{'csrfile'}=$config{'ssl_csr_dir'}."/".
$config{'incsr_filename'}; }
if (!$in{'signfile'}) { $in{'signfile'}=$config{'ssl_cert_dir'}."/".
$config{'sign_filename'}; }
if (!$in{'cacertfile'}) { $in{'cacertfile'}=$config{'cacert_path'}; }
if (!$in{'cakeyfile'}) { $in{'cakeyfile'}=$config{'cakey_path'}; }
if (!$in{'days'}) { $in{'days'}=$config{'default_days'}; }
}
if ($error) {
print &ui_hr()."$text{'signcsr_error'}\n
$text{'signcsr_e_nopassword'}\n";
print &ui_hr();
&footer("", $text{'index_return'});
exit;
}
}
$out = `yes | $config{'openssl_cmd'} ca -in $in{'csrfile'} -out $in{'signfile'} -cert $in{'cacertfile'} -keyfile $in{'cakeyfile'} -outdir $tempdir -days $in{'days'} -config $config{'ssl_cnf_file'} $des 2>&1`;
system("rm -rf $tempdir");
if ($out =~ /^ERROR(.*$)/mi || $out =~ /:error:/mi) {
$error=$out;
} else{
$error=0;
chmod(0400,$in{'signfile'});
}
print &ui_hr();
if ($error){ print "$text{'signcsr_e_signfailed'}\n$error\n";} else { print "$text{'signcsr_worked'}\n
$out\n"; $url="view.cgi?certfile=".&my_urlize($in{'signfile'}); print "$text{'signcsr_saved_cert'}: ".&ui_link($url,$in{'signfile'}).""; } print &ui_hr(); &footer("", $text{'index_return'}); } sub overwriteprompt{ my($buffer1,$buffer2,$buffer,$key,$temp_pem,$url); my $rv = ""; my $link = ""; if (-e $in{'signfile'}) { open(OPENSSL,"$config{'openssl_cmd'} x509 -in $in{'signfile'} -text -fingerprint -noout|"); while(