]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Automatically choose an available port.
authorMichael R Sweet <michael.r.sweet@gmail.com>
Fri, 9 Apr 2021 13:08:53 +0000 (09:08 -0400)
committerMichael R Sweet <michael.r.sweet@gmail.com>
Fri, 9 Apr 2021 13:08:53 +0000 (09:08 -0400)
CHANGES.md
tools/ippeveprinter.c

index f209db5e5ca8058e74ba971b6253c03f177a521c..d351e6ee1cf16f60e66563d90ffd1cee130ff6c4 100644 (file)
@@ -37,6 +37,7 @@ CUPS v2.4rc1 (Pending)
 - Localization updates (Issue #123, Issue #129, Issue #134, Issue #146)
 - USB quirk updates (Apple #5766, Apple #5838, Apple #5843, Apple #5867)
 - Web interface updates (Issue #142)
+- The `ippeveprinter` tool now automatically uses an available port.
 - Deprecated cups-config (Issue #97)
 - Deprecated Kerberos (`AuthType Negotiate`) authentication (Issue #98)
 - Removed support for the (long deprecated and unused) `FontPath`,
index f46ad3149f7e9002cc2f49535a0ce4e72ee8cce5..86f60ccbc3c5d5ee3dbf0f4bc430ecbaab9a9187 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright © 2021 by OpenPrinting.
  * Copyright © 2020 by the IEEE-ISTO Printer Working Group.
- * Copyright © 2010-2019 by Apple Inc.
+ * Copyright © 2010-2021 by Apple Inc.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
  * information.
@@ -649,27 +649,6 @@ main(int  argc,                            /* I - Number of command-line args */
   * Apply defaults as needed...
   */
 
-  if (!serverport)
-  {
-#ifdef _WIN32
-   /*
-    * Windows is almost always used as a single user system, so use a default
-    * port number of 8631.
-    */
-
-    serverport = 8631;
-
-#else
-   /*
-    * Use 8000 + UID mod 1000 for the default port number...
-    */
-
-    serverport = 8000 + ((int)getuid() % 1000);
-#endif /* _WIN32 */
-
-    _cupsLangPrintf(stderr, _("Listening on port %d."), serverport);
-  }
-
   if (!directory[0])
   {
     const char *tmpdir;                        /* Temporary directory */
@@ -1736,10 +1715,50 @@ create_printer(
   * Create the listener sockets...
   */
 
-  if ((printer->ipv4 = create_listener(servername, printer->port, AF_INET)) < 0)
+  if (printer->port)
   {
-    perror("Unable to create IPv4 listener");
-    goto bad_printer;
+    if ((printer->ipv4 = create_listener(servername, printer->port, AF_INET)) < 0)
+    {
+      perror("Unable to create IPv4 listener");
+      goto bad_printer;
+    }
+  }
+  else
+  {
+#ifdef _WIN32
+   /*
+    * Windows is almost always used as a single user system, so use a default
+    * port number of 8631.
+    */
+
+    serverport = 8631;
+
+#else
+   /*
+    * Use 8000 + UID mod 1000 for the default port number...
+    */
+
+    serverport = 8000 + ((int)getuid() % 1000);
+#endif /* _WIN32 */
+
+    while (serverport < 10000)
+    {
+      if ((printer->ipv4 = create_listener(servername, serverport, AF_INET)) >= 0)
+        break;
+
+      serverport ++;
+    }
+
+    if (serverport < 10000)
+    {
+      _cupsLangPrintf(stderr, _("Listening on port %d."), serverport);
+      printer->port = serverport;
+    }
+    else
+    {
+      perror("Unable to create IPv4 listener");
+      goto bad_printer;
+    }
   }
 
   if ((printer->ipv6 = create_listener(servername, printer->port, AF_INET6)) < 0)