summaryrefslogtreecommitdiffstats
path: root/usr.bin/ssh
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>1999-09-26 22:01:24 +0000
committerderaadt <deraadt@openbsd.org>1999-09-26 22:01:24 +0000
commitd4b35d47130a7cea0ce98f4adca51156c0b8be2b (patch)
tree185b716e6903021615219d6b2b042693a316c96a /usr.bin/ssh
parentproper groups for install (diff)
downloadwireguard-openbsd-d4b35d47130a7cea0ce98f4adca51156c0b8be2b.tar.xz
wireguard-openbsd-d4b35d47130a7cea0ce98f4adca51156c0b8be2b.zip
use rresvport(), for random port allocation
Diffstat (limited to 'usr.bin/ssh')
-rw-r--r--usr.bin/ssh/sshconnect.c30
1 files changed, 6 insertions, 24 deletions
diff --git a/usr.bin/ssh/sshconnect.c b/usr.bin/ssh/sshconnect.c
index 1ce4b01047f..2e955aad7c6 100644
--- a/usr.bin/ssh/sshconnect.c
+++ b/usr.bin/ssh/sshconnect.c
@@ -15,7 +15,7 @@ login (authentication) dialog.
*/
#include "includes.h"
-RCSID("$Id: sshconnect.c,v 1.1 1999/09/26 20:53:38 deraadt Exp $");
+RCSID("$Id: sshconnect.c,v 1.2 1999/09/26 22:01:24 deraadt Exp $");
#include <gmp.h>
#include "xmalloc.h"
@@ -159,29 +159,11 @@ int ssh_create_socket(uid_t original_real_uid, int privileged)
if (privileged)
{
struct sockaddr_in sin;
- int p;
- for (p = 1023; p > 512; p--)
- {
- sock = socket(AF_INET, SOCK_STREAM, 0);
- if (sock < 0)
- fatal("socket: %.100s", strerror(errno));
-
- /* Initialize the desired sockaddr_in structure. */
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- sin.sin_addr.s_addr = INADDR_ANY;
- sin.sin_port = htons(p);
-
- /* Try to bind the socket to the privileged port. */
- if (bind(sock, (struct sockaddr *)&sin, sizeof(sin)) >= 0)
- break; /* Success. */
- if (errno == EADDRINUSE)
- {
- close(sock);
- continue;
- }
- fatal("bind: %.100s", strerror(errno));
- }
+ int p = IPPORT_RESERVED - 1;
+
+ sock = rresvport(&p);
+ if (sock < 0)
+ fatal("rresvport: %.100s", strerror(errno));
debug("Allocated local port %d.", p);
}
else