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