#!/usr/local/bin/perl
# owner.cgi
# Add or delete an owner from a key
require './gnupg-lib.pl';
&ReadParse();
@keys = &list_keys();
$key = $keys[$in{'idx'}];
if ($in{'add'}) {
# Adding details
&error_setup($text{'owner_err1'});
$in{'name'} =~ /\S/ || &error($text{'owner_ename'});
if ($in{'name'} =~ s/\((.*)\)\s*$//) {
$cmt = $1;
$in{'name'} =~ s/\s+$//;
}
$cmd = "$gpgpath --edit-key \"$key->{'name'}->[0]\"";
($fh, $fpid) = &foreign_call("proc", "pty_process_exec", $cmd);
&wait_for($fh, "command>");
syswrite($fh, "adduid\n");
&wait_for($fh, "name:");
syswrite($fh, "$in{'name'}\n");
&wait_for($fh, "address:");
syswrite($fh, "$in{'email'}\n");
&wait_for($fh, "comment:");
syswrite($fh, "$cmt\n");
&wait_for($fh, "\\?");
syswrite($fh, "o\n");
&wait_for($fh, "command>");
syswrite($fh, "quit\n");
if (&wait_for($fh, "save changes") == 0) {
syswrite($fh, "y\n");
}
sleep(1);
close($fh);
}
else {
# Deleting details
foreach $k (keys %in) {
$delidx = $k if ($k =~ /^\d+$/);
}
&error_setup($text{'owner_err2'});
if (@{$key->{'name'}} == 1) {
&error($text{'owner_elast'});
}
$cmd = "$gpgpath --edit-key \"$key->{'name'}->[0]\"";
($fh, $fpid) = &foreign_call("proc", "pty_process_exec", $cmd);
local %keymap;
while(1) {
local $rv = &wait_for($fh, "command>", '\\((\d+)\\)[\\. ]+(.*)\\n');
last if ($rv == 0);
$matches[2] =~ s/<.*$//;
$matches[2] =~ s/\s+$//;
$keymap{$matches[2]} = $matches[1];
}
local $idx = $keymap{$key->{'name'}->[$delidx]};
syswrite($fh, "uid $idx\n");
&wait_for($fh, "command>");
syswrite($fh, "deluid\n");
&wait_for($fh, "\\?");
syswrite($fh, "y\n");
&wait_for($fh, "command>");
syswrite($fh, "quit\n");
if (&wait_for($fh, "save changes") == 0) {
syswrite($fh, "y\n");
}
sleep(1);
close($fh);
}
&redirect("edit_key.cgi?idx=$in{'idx'}");
syntax highlighted by Code2HTML, v. 0.9.1