Module Name:    src
Committed By:   tteras
Date:           Tue Sep  1 09:50:00 UTC 2009

Modified Files:
        src/crypto/dist/ipsec-tools/src/racoon: remoteconf.c

Log Message:
Change remote conf matching level to matching score. This way one can
override anonymous certificate block config with more exact "inhereted"
IP specific block.


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 \
    src/crypto/dist/ipsec-tools/src/racoon/remoteconf.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/crypto/dist/ipsec-tools/src/racoon/remoteconf.c
diff -u src/crypto/dist/ipsec-tools/src/racoon/remoteconf.c:1.17 src/crypto/dist/ipsec-tools/src/racoon/remoteconf.c:1.18
--- src/crypto/dist/ipsec-tools/src/racoon/remoteconf.c:1.17	Wed Aug 19 13:54:07 2009
+++ src/crypto/dist/ipsec-tools/src/racoon/remoteconf.c	Tue Sep  1 09:49:59 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: remoteconf.c,v 1.17 2009/08/19 13:54:07 vanhu Exp $	*/
+/*	$NetBSD: remoteconf.c,v 1.18 2009/09/01 09:49:59 tteras Exp $	*/
 
 /* Id: remoteconf.c,v 1.38 2006/05/06 15:52:44 manubsd Exp */
 
@@ -183,12 +183,12 @@
 }
 
 enum rmconf_match_t {
-	MATCH_NONE = 0,
-	MATCH_ANONYMOUS,
-	MATCH_ADDRESS,
-	MATCH_SA,
-	MATCH_IDENTITY,
-	MATCH_AUTH_IDENTITY,
+	MATCH_NONE		= 0,
+	MATCH_BASIC		= 0x0000001,
+	MATCH_ADDRESS		= 0x0000002,
+	MATCH_SA		= 0x0000004,
+	MATCH_IDENTITY		= 0x0000008,
+	MATCH_AUTH_IDENTITY	= 0x0000010,
 };
 
 static int
@@ -196,7 +196,7 @@
 	struct rmconfselector *rmsel;
 	struct remoteconf *rmconf;
 {
-	int ret = 1;
+	int ret = MATCH_NONE;
 
 	/* No match at all: unwanted anonymous */
 	if ((rmsel->flags & GETRMCONF_F_NO_ANONYMOUS) &&
@@ -206,6 +206,8 @@
 	if ((rmsel->flags & GETRMCONF_F_NO_PASSIVE) && rmconf->passive)
 		return MATCH_NONE;
 
+	ret |= MATCH_BASIC;
+
 	/* Check address */
 	if (rmsel->remote != NULL) {
 		if (rmconf->remote->sa_family != AF_UNSPEC) {
@@ -213,7 +215,7 @@
 				return MATCH_NONE;
 
 			/* Address matched */
-			ret = MATCH_ADDRESS;
+			ret |= MATCH_ADDRESS;
 		}
 	}
 
@@ -222,14 +224,14 @@
 		if (rmconf_match_etype_and_approval(rmconf, rmsel->etype,
 						    rmsel->approval) != 0)
 			return MATCH_NONE;
-		ret = MATCH_SA;
+		ret |= MATCH_SA;
 	}
 
 	/* Check identity */
 	if (rmsel->identity != NULL && rmconf->verify_identifier) {
 		if (rmconf_match_identity(rmconf, rmsel->identity) != 0)
 			return MATCH_NONE;
-		ret = MATCH_IDENTITY;
+		ret |= MATCH_IDENTITY;
 	}
 
 	/* Check certificate request */
@@ -254,7 +256,7 @@
 				return MATCH_NONE;
 		}
 
-		ret = MATCH_AUTH_IDENTITY;
+		ret |= MATCH_AUTH_IDENTITY;
 	}
 
 	return ret;
@@ -284,7 +286,7 @@
 
 	RACOON_TAILQ_FOREACH_REVERSE(p, &rmtree, _rmtree, chain) {
 		if (rmsel != NULL) {
-			if (rmconf_match_type(rmsel, p) == 0)
+			if (rmconf_match_type(rmsel, p) == MATCH_NONE)
 				continue;
 		}
 
@@ -324,11 +326,7 @@
 			return 0;
 
 		if (match_type == fctx->match_type) {
-			/* Duplicate exact match, something is wrong */
-			if (match_type >= MATCH_AUTH_IDENTITY)
-				return 1;
-
-			/* Otherwise just remember that this is ambiguous match */
+			/* Ambiguous match */
 			fctx->num_found++;
 			return 0;
 		}

Reply via email to