r183 - trunk
Laurent Fousse
lfousse at costa.debian.org
Wed Mar 2 21:59:41 CET 2005
Author: lfousse
Date: 2005-03-02 21:59:41 +0100 (Wed, 02 Mar 2005)
New Revision: 183
Modified:
trunk/ca-recv
Log:
First attempt to get a multi-challenges capable ca-recv.
Modified: trunk/ca-recv
===================================================================
--- trunk/ca-recv 2005-02-28 22:01:58 UTC (rev 182)
+++ trunk/ca-recv 2005-03-02 20:59:41 UTC (rev 183)
@@ -57,101 +57,162 @@
close(MAIL);
};
+my @in;
-my $in;
-{
- local $/=undef;
- $in = <STDIN>;
-};
+sub process_one_reply ($$$) {
+ my ($keyid, $magic, $upload) = @_;
-my ($keyid) = ($in =~ m/Key: ([0-9A-F]{8})/);
-my ($magic) = ($in =~ m/Magic: ([0-9A-F]*)/);
-my ($upload) = ($in =~ m/Upload to keyservers: (Yes)/);
-$upload = 0 unless defined $upload;
+ unless ( -d getkeydir('sentdir', $keyid) ) {
+ send_mail("CABOT: key does not exist in sentdir", "Key $keyid does not exist in sentdir:\n\n at in\n");
+ return;
+ };
-unless ((defined $keyid) && (defined $magic)) {
- send_mail("CABOT: could not parse reply", "Could not parse this message successfully:\n\n$in\n");
- exit(0);
-};
+ unless (opendir(DIR, getkeydir('sentdir', $keyid))) {
+ send_mail("CABOT: error opening sentdir", "Error opening ".getkeydir('sentdir', $keyid).": $!\nOriginal message:\n\n at in\n");
+ return;
+ };
-unless ( -d getkeydir('sentdir', $keyid) ) {
- send_mail("CABOT: key does not exist in sentdir", "Key $keyid does not exist in sentdir:\n\n$in\n");
- exit(0);
-};
+ my @uids= grep { ! /^\./ } readdir(DIR);
+ close(DIR);
-unless (opendir(DIR, getkeydir('sentdir', $keyid))) {
- send_mail("CABOT: error opening sentdir", "Error opening ".getkeydir('sentdir', $keyid).": $!\nOriginal message:\n\n$in\n");
- exit(0);
-};
+ my $ok=0;
+ for my $uid (@uids) {
+ unless (open(MAGIC, getkeydir('sentdir', $keyid, $uid).'/MAGIC')) {
+ send_mail("CABOT: error opening MAGIC",
+ "Error opening ".getkeydir('sentdir', $keyid, $uid)."/MAGIC: $!\nOriginal message:\n\n at in\n");
+ return;
+ };
+ my $storedmagic = <MAGIC>;
+ close(MAGIC);
+ if ($storedmagic eq $magic) {
+ $ok = $uid;
+ last;
+ };
+ };
-my @uids= grep { ! /^\./ } readdir(DIR);
-close(DIR);
+ unless ($ok) {
+ send_mail("CABOT: could not find a matching magic", "could not find a matching magic\nOriginal message:\n\n at in\n");
+ return;
+ };
-my $ok=0;
-for my $uid (@uids) {
- unless (open(MAGIC, getkeydir('sentdir', $keyid, $uid).'/MAGIC')) {
- send_mail("CABOT: error opening MAGIC",
- "Error opening ".getkeydir('sentdir', $keyid, $uid)."/MAGIC: $!\nOriginal message:\n\n$in\n");
- exit(0);
+ my $uid = $ok;
+
+ unless ( -d getkeydir('tosign', $keyid) ) {
+ unless (-d $CONFIG{'tosign'}) {
+ unless (mkpath($CONFIG{'tosign'}, 0, 0711)) {
+ send_mail("CABOT: Cannot create dir",
+ "Cannot create dir ".$CONFIG{'tosign'}.": $!\nOriginal message:\n\n at in\n");
+ return;
+ }
+ }
+ unless (mkpath(getkeydir('tosign', $keyid), 0, 0771)) {
+ send_mail("CABOT: Cannot create dir in tosign",
+ "Cannot create dir ".getkeydir('tosign', $keyid).": $!\nOriginal message:\n\n at in\n");
+ return;
+ };
};
- my $storedmagic = <MAGIC>;
- close(MAGIC);
- if ($storedmagic eq $magic) {
- $ok = $uid;
- last;
+
+ unless (rename(getkeydir('sentdir', $keyid, $uid), getkeydir('tosign', $keyid, $uid)) ) {
+ send_mail("CABOT: Cannot move to tosign", "Cannot move ".getkeydir('sentdir', $keyid, $uid)." to ".
+ getkeydir('tosign', $keyid, $uid).": $!\nOriginal message:\n\n at in\n");
+ return;
};
-};
-unless ($ok) {
- send_mail("CABOT: could not find a matching magic", "could not find a matching magic\nOriginal message:\n\n$in\n");
- exit(0);
-};
+ rmdir( getkeydir('sentdir', $keyid)); # may fail
-my $uid = $ok;
-unless ( -d getkeydir('tosign', $keyid) ) {
- unless (-d $CONFIG{'tosign'}) {
- unless (mkpath($CONFIG{'tosign'}, 0, 0711)) {
- send_mail("CABOT: Cannot create dir",
- "Cannot create dir ".$CONFIG{'tosign'}.": $!\nOriginal message:\n\n$in\n");
- exit(0);
- }
- }
- unless (mkpath(getkeydir('tosign', $keyid), 0, 0771)) {
- send_mail("CABOT: Cannot create dir in tosign",
- "Cannot create dir ".getkeydir('tosign', $keyid).": $!\nOriginal message:\n\n$in\n");
- exit(0);
+ unless (open(LOG, '>'. getkeydir('tosign', $keyid, $uid).'/LOG')) {
+ send_mail("CABOT: Cannot create file in tosign",
+ "Cannot write to ".getkeydir('tosign', $keyid, $uid)."/LOG $!\nOriginal message:\n\n at in\n");
+ return;
};
-};
+ print LOG @in;
+ close(LOG);
-unless (rename(getkeydir('sentdir', $keyid, $uid), getkeydir('tosign', $keyid, $uid)) ) {
- send_mail("CABOT: Cannot move to tosign", "Cannot move ".getkeydir('sentdir', $keyid, $uid)." to ".
- getkeydir('tosign', $keyid, $uid).": $!\nOriginal message:\n\n$in\n");
- exit(0);
-};
+ if ($upload) {
+ unless (open(UPLOAD, '>'. getkeydir('tosign', $keyid, $uid).'/upload')) {
+ send_mail("CABOT: Cannot create file Upload",
+ "Cannot write to ".getkeydir('tosign', $keyid, $uid)."/upload $!\nOriginal message:\n\n at in\n");
+ return;
+ };
+ close(UPLOAD);
+ };
-rmdir( getkeydir('sentdir', $keyid)); # may fail
+ send_mail("CABOT: new key in tosign", "Keyid: $keyid\nUid: $uid\n\nOriginal message:\n\n at in\n");
+}
-unless (open(LOG, '>'. getkeydir('tosign', $keyid, $uid).'/LOG')) {
- send_mail("CABOT: Cannot create file in tosign",
- "Cannot write to ".getkeydir('tosign', $keyid, $uid)."/LOG $!\nOriginal message:\n\n$in\n");
- exit(0);
-};
-print LOG $in;
-close(LOG);
+my ($keyid, $magic, $upload);
+my $found_one = 0;
-if ($upload) {
- unless (open(UPLOAD, '>'. getkeydir('tosign', $keyid, $uid).'/upload')) {
- send_mail("CABOT: Cannot create file Upload",
- "Cannot write to ".getkeydir('tosign', $keyid, $uid)."/upload $!\nOriginal message:\n\n$in\n");
- exit(0);
- };
- close(UPLOAD);
-};
+ at in = <STDIN>;
-send_mail("CABOT: new key in tosign", "Keyid: $keyid\nUid: $uid\n\nOriginal message:\n\n$in\n");
+foreach (@in) {
+ if (/Key: ([0-9A-F]{8})/) {
+ if (defined($keyid)) {
+ if (defined($magic)) {
+ $found_one = 1;
+ process_one_reply($keyid, $magic, $upload);
+ $keyid = $1;
+ undef $magic;
+ undef $upload;
+ }
+ else {
+ send_mail("CABOT: could not parse reply", "Could not parse this message successfully:\n\n at in\n");
+ exit(0);
+ }
+ }
+ else {
+ $keyid = $1;
+ }
+ }
+ if (/Magic: ([0-9A-F]*)/) {
+ if (defined($magic)) {
+ if (defined($keyid)) {
+ $found_one = 1;
+ process_one_reply($keyid, $magic, $upload);
+ undef $keyid;
+ $magic = $1;
+ undef $upload;
+ }
+ else {
+ send_mail("CABOT: could not parse reply", "Could not parse this message successfully:\n\n at in\n");
+ exit(0);
+ }
+ }
+ else {
+ $magic = $1;
+ }
+ }
+ if (/Upload to keyservers: (Yes)/) {
+ if (defined($upload)) {
+ if ((defined($keyid)) && (defined($magic))) {
+ $found_one = 1;
+ process_one_reply($keyid, $magic, $upload);
+ undef $keyid;
+ undef $magic;
+ $upload = $1;
+ }
+ else {
+ send_mail("CABOT: could not parse reply", "Could not parse this message successfully:\n\n at in\n");
+ exit(0);
+ }
+ }
+ else {
+ $upload = $1;
+ }
+ }
+}
+if ((defined($keyid)) && (defined($magic))) {
+ process_one_reply($keyid, $magic, $upload);
+ $found_one = 1;
+}
+
+unless ($found_one) {
+ send_mail("CABOT: no reply found", "Could not find a valid reply in:\n\n at in\n");
+}
+
__END__
=pod
More information about the Cabot-commit
mailing list