]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Clean up ".local" domain checking - would fail for the trailing "." case.
authormike <mike@7a7537e8-13f0-0310-91df-b6672ffda945>
Mon, 7 May 2012 22:41:30 +0000 (22:41 +0000)
committermike <mike@7a7537e8-13f0-0310-91df-b6672ffda945>
Mon, 7 May 2012 22:41:30 +0000 (22:41 +0000)
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/trunk@10455 7a7537e8-13f0-0310-91df-b6672ffda945

scheduler/client.c

index 7c123e37804fb6f49cb8fcaf9a9e68de411b137b..304c2db3de32b7fddbcb34b15db1a71ea7ec4377 100644 (file)
@@ -4026,9 +4026,19 @@ valid_host(cupsd_client_t *con)          /* I - Client connection */
   * Check if the hostname is something.local (Bonjour); if so, allow it.
   */
 
-  if ((end = strrchr(host, '.')) != NULL &&
-      (!_cups_strcasecmp(end, ".local") || !_cups_strncasecmp(end, ".local:", 7) ||
-       !_cups_strcasecmp(end, ".local.") || !_cups_strncasecmp(end, ".local.:", 8)))
+  if ((end = strrchr(host, '.')) != NULL && end > host &&
+      (!end[1] || end[1] == ':'))
+  {
+   /*
+    * "." on end, work back to second-to-last "."...
+    */
+    for (end --; end > host && *end != '.'; end --);
+  }
+
+  if (end && (!_cups_strcasecmp(end, ".local") ||
+             !_cups_strncasecmp(end, ".local:", 7) ||
+             !_cups_strcasecmp(end, ".local.") ||
+             !_cups_strncasecmp(end, ".local.:", 8)))
     return (1);
 #endif /* HAVE_DNSSD */