Skip to content

Commit

Permalink
backen/lpd.c: Fix port reserving behavior for RFC 1179
Browse files Browse the repository at this point in the history
From master commit:
9f0ce570117aa

Fixes #743
  • Loading branch information
zdohnal committed Sep 13, 2023
1 parent 8354850 commit 04a36c0
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Changes in CUPS v2.4.7 (TBA)
- Fixed hanging of `lpstat` on IBM AIX (Issue #773)
- Fixed printing to stderr if we can't open cups-files.conf (Issue #777)
- Fixed purging job files via `cancel -x` (Issue #742)
- Fixed RFC 1179 port reserving behavior in LPD backend (Issue #743)
- Fixed a bug in the PPD command interpretation code (Issue #768)


Expand Down
14 changes: 9 additions & 5 deletions backend/lpd.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ static int abort_job = 0; /* Non-zero if we get SIGTERM */
* Local functions...
*/

static int cups_rresvport(int *port, int family);
static int cups_rresvport(int *port, int min, int family);
static int lpd_command(int lpd_fd, char *format, ...)
# ifdef __GNUC__
__attribute__ ((__format__ (__printf__, 2, 3)))
Expand Down Expand Up @@ -552,6 +552,7 @@ main(int argc, /* I - Number of command-line arguments (6 or 7) */

static int /* O - Socket or -1 on error */
cups_rresvport(int *port, /* IO - Port number to bind to */
int min, /* I - Minimim port number use */
int family) /* I - Address family */
{
http_addr_t addr; /* Socket address */
Expand All @@ -576,7 +577,7 @@ cups_rresvport(int *port, /* IO - Port number to bind to */
* Try to bind the socket to a reserved port...
*/

while (*port > 511)
while (*port >= min)
{
/*
* Set the port number...
Expand Down Expand Up @@ -801,11 +802,14 @@ lpd_queue(const char *hostname, /* I - Host to connect to */
else
{
/*
* We're running as root and want to comply with RFC 1179. Reserve a
* privileged lport between 721 and 731...
* We're running as root and want to either:
* a) comply with RFC 1179 and reserve a lport between 721 and 731
* b) just reserve a privileged port between 512 and 1023
*/

if ((fd = cups_rresvport(&lport, addr->addr.addr.sa_family)) < 0)
if ((fd = cups_rresvport(&lport,
reserve == RESERVE_RFC1179 ? 721 : 512,
addr->addr.addr.sa_family)) < 0)
{
perror("DEBUG: Unable to reserve port");
sleep(1);
Expand Down

0 comments on commit 04a36c0

Please sign in to comment.