File: //usr/share/usermin/gnupg/signkey.cgi
#!/usr/bin/perl
# signkey.cgi
# Sign a key, after asking the user if he is sure
require './gnupg-lib.pl';
&ReadParse();
&ui_print_header(undef, $text{'signkey_title'}, "");
@keys = &list_keys();
$key = $keys[$in{'idx'}];
($secret) = grep { $_->{'secret'} } @keys;
if ($in{'confirm'}) {
# Do it!
$cmd = "$gpgpath --edit-key \"$key->{'name'}->[0]\"";
($fh, $fpid) = &foreign_call("proc", "pty_process_exec", $cmd);
&wait_for($fh, "command>");
syswrite($fh, "sign\n");
while(1) {
$rv = &wait_for($fh, "really sign all",
'really sign\?', "already", "your selection",
"passphrase", "nothing to sign", "command>",
"(error|failed).*", "expire at the same time");
sleep(1);
if ($rv == 0 || $rv == 1) {
syswrite($fh, "y\n");
}
elsif ($rv == 2 || $rv == 5) {
print "<p>",&text('signkey_already',
"<tt>$key->{'name'}->[0]</tt>"),"<p>\n";
last;
}
elsif ($rv == 3) {
syswrite($fh, $in{'trust'}."\n");
}
elsif ($rv == 4) {
$pass = &get_passphrase();
syswrite($fh, "$pass\n");
}
elsif ($rv == 6) {
print "<p>",&text('signkey_success',
"<tt>$key->{'name'}->[0]</tt>"),"<p>\n";
last;
}
elsif ($rv == 7) {
print "<p>",&text('signkey_failed',
"<tt>$key->{'name'}->[0]</tt>",
"<pre>$wait_for_input</pre>"),"<p>\n";
last;
}
elsif ($rv == 8) {
syswrite($fh, "y\n");
}
else {
# Unknown response!
last;
}
}
syswrite($fh, "quit\n");
$rv = &wait_for($fh, "save changes");
if ($rv == 0) {
syswrite($fh, "y\n");
sleep(1);
}
close($fh);
}
else {
# Ask the user if he is sure
print &ui_confirmation_form("signkey.cgi",
&text('signkey_confirm', "<tt>$key->{'name'}->[0]</tt>",
$key->{'email'}->[0] ? "<<tt>$key->{'email'}->[0]</tt>>" : "",
"<tt>".&key_fingerprint($key)."</tt>"),
[ [ "idx", $key->{'index'} ] ],
[ [ "confirm", $text{'key_sign'} ] ],
$text{'signkey_trustlevel'}." ".
&ui_select("trust", 0,
[ map { [ $_, $text{'signkey_trust'.$_} ] } (0..3) ])
);
}
&ui_print_footer("list_keys.cgi", $text{'keys_return'},
"", $text{'index_return'});