diff options
author | Michael R Sweet <michael.r.sweet@gmail.com> | 2021-04-09 09:11:00 -0400 |
---|---|---|
committer | Michael R Sweet <michael.r.sweet@gmail.com> | 2021-04-09 09:11:00 -0400 |
commit | a3fb828390bef5b915abcafdb4e66ce428ffec40 (patch) | |
tree | b48bb4f3c0dcf1c836badf8dea503531c6eff11d /tools | |
parent | 1f3d159e4e8183bca40f16c1cfc80672bb260a46 (diff) | |
download | cups-a3fb828390bef5b915abcafdb4e66ce428ffec40.tar.gz |
Automatically choose an available port.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/ippeveprinter.c | 69 |
1 files changed, 44 insertions, 25 deletions
diff --git a/tools/ippeveprinter.c b/tools/ippeveprinter.c index 87224db9d..b38a7b0f6 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) |