From: Michael R Sweet Date: Fri, 9 Apr 2021 13:08:53 +0000 (-0400) Subject: Automatically choose an available port. X-Git-Tag: v2.4b1~154 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ac90b74470f327463b93804b8442b82f6219cba8;p=thirdparty%2Fcups.git Automatically choose an available port. --- diff --git a/CHANGES.md b/CHANGES.md index f209db5e5c..d351e6ee1c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -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`, diff --git a/tools/ippeveprinter.c b/tools/ippeveprinter.c index f46ad3149f..86f60ccbc3 100644 --- a/tools/ippeveprinter.c +++ b/tools/ippeveprinter.c @@ -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)