Subject: racoon patches
To: None <vanhu@netbsd.org, tech-crypto@netbsd.org>
From: Stephen Degler <stephen@degler.net>
List: tech-crypto
Date: 11/10/2006 23:29:26
------=_20061110232926_33707
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

Hello,

Please review these patches.  I'm running -current and anonymous sainfo's
broke for me.  The first patch fixes this.  As I read the code the 1.6
change to sainfo.c made it impossible for the anonymous sainfo to be
selected.

Patch number two I ran into debugging the problem.  cfparse.y permits one
to specify the peer as an address (in the sainfo FROM clause), but then
botches
filling out id_i.

Please review and let me know if its ok to commit.  Or should these just
be forwarded to ipsec-tools?

skd

------=_20061110232926_33707
Content-Type: text/x-patch; name="sainfo.c.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="sainfo.c.patch"

Index: sainfo.c
===================================================================
RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/sainfo.c,v
retrieving revision 1.6
diff -u -u -r1.6 sainfo.c
--- sainfo.c	19 Oct 2006 09:35:51 -0000	1.6
+++ sainfo.c	11 Nov 2006 04:07:48 -0000
@@ -131,6 +131,11 @@
 		if(s->remoteid != remoteid)
 			continue;
 
+		if (s->idsrc == NULL && s->iddst == NULL) {
+			anonymous = s;
+			continue;
+		}
+
 		if (s->id_i != NULL) {
 			if (pass == 2)
 				continue;
@@ -138,10 +143,6 @@
 				continue;
 		} else if (pass == 1)
 			continue;
-		if (s->idsrc == NULL && s->iddst == NULL) {
-			anonymous = s;
-			continue;
-		}
 
 		/* anonymous ? */
 		if (loc == NULL) {
------=_20061110232926_33707
Content-Type: text/x-patch; name="cfparse.y.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="cfparse.y.patch"

Index: cfparse.y
===================================================================
RCS file: /cvsroot/src/crypto/dist/ipsec-tools/src/racoon/cfparse.y,v
retrieving revision 1.17
diff -u -u -r1.17 cfparse.y
--- cfparse.y	22 Oct 2006 15:10:31 -0000	1.17
+++ cfparse.y	11 Nov 2006 04:06:55 -0000
@@ -1346,20 +1346,29 @@
 				yyerror("failed to set identifer.\n");
 				return -1;
 			}
-			cur_sainfo->id_i = vmalloc(sizeof(*id_b) + idv->l);
-			if (cur_sainfo->id_i == NULL) {
-				yyerror("failed to allocate identifier");
-				return -1;
+			if ( $2 == IDTYPE_ADDRESS ) {
+				cur_sainfo->id_i = 
+					ipsecdoi_sockaddr2id((struct sockaddr *)idv->v,
+							     -1, 
+							     IPSEC_ULPROTO_ANY);
 			}
+			else {
+				cur_sainfo->id_i = 
+					vmalloc(sizeof(*id_b) + idv->l);
+				if (cur_sainfo->id_i == NULL) {
+					yyerror("failed to allocate identifier");
+					return -1;
+				}
+				id_b = (struct ipsecdoi_id_b *)cur_sainfo->id_i->v;
+				id_b->type = idtype2doi($2);
 
-			id_b = (struct ipsecdoi_id_b *)cur_sainfo->id_i->v;
-			id_b->type = idtype2doi($2);
-
-			id_b->proto_id = 0;
-			id_b->port = 0;
+				id_b->proto_id = 0;
+				id_b->port = 0;
 
-			memcpy(cur_sainfo->id_i->v + sizeof(*id_b),
-			       idv->v, idv->l);
+				memcpy(cur_sainfo->id_i->v + sizeof(*id_b),
+				       idv->v, idv->l);
+				vfree(idv);
+			}
 			vfree(idv);
 		}
 	|	GROUP QUOTEDSTRING
------=_20061110232926_33707--