Unhelpful error message when matching hosts in access list [PATCH]

Thorild Selen thorild at Update.UU.SE
Sat Jul 5 10:15:09 EST 2003


Sorry, I missed that an address should be able to contain a slash
(used with netmask) and a % and some more stuff too if it's a scoped
IPv6 address. Here's a new patch.

Thorild Selén
Datorföreningen Update / Update Computer Club, Uppsala, SE

----------------------------------------------------------------------

--- rsync/access.c	2003-01-20 14:46:28.000000000 +0100
+++ rsync-new/access.c	2003-07-05 02:02:09.000000000 +0200
@@ -93,7 +93,10 @@
 	if (p)
 		*p++ = '/';
 	if (gai) {
-		rprintf(FERROR,"malformed address %s\n", tok);
+		rprintf(FERROR,
+			"error matching address %s: %s\n",
+			tok,
+			gai_strerror(gai));
 		freeaddrinfo(resa);
 		return 0;
 	}
@@ -192,6 +195,19 @@
 	return ret;
 }
 
+/* Test if a string is likely to be an (IPv4 or IPv6) address */
+static int likely_address(char *s)
+{
+  size_t len = strlen(s);
+  
+  return ((strspn(s, "./0123456789") == len)
+#ifdef INET6
+	  || (strspn(s, "/0123456789:ABCDEFabcdef") == len)
+	  || strchr(s, '%')
+#endif
+	  );
+}
+
 static int access_match(char *list, char *addr, char *host)
 {
 	char *tok;
@@ -203,7 +219,9 @@
 	if (host) strlower(host);
 
 	for (tok=strtok(list2," ,\t"); tok; tok=strtok(NULL," ,\t")) {
-		if (match_hostname(host, tok) || match_address(addr, tok)) {
+		if (match_hostname(host, tok)
+		    || (likely_address(tok)
+			&& match_address(addr, tok))) {
 			free(list2);
 			return 1;
 		}



More information about the rsync mailing list