summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--misc.c10
-rw-r--r--misc.h3
-rw-r--r--readconf.c4
-rw-r--r--serverloop.c6
4 files changed, 16 insertions, 7 deletions
diff --git a/misc.c b/misc.c
index 9421b4d39..07d4179e4 100644
--- a/misc.c
+++ b/misc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: misc.c,v 1.105 2016/07/15 00:24:30 djm Exp $ */ 1/* $OpenBSD: misc.c,v 1.106 2016/10/23 22:04:05 dtucker Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * Copyright (c) 2005,2006 Damien Miller. All rights reserved. 4 * Copyright (c) 2005,2006 Damien Miller. All rights reserved.
@@ -1243,3 +1243,11 @@ forward_equals(const struct Forward *a, const struct Forward *b)
1243 return 1; 1243 return 1;
1244} 1244}
1245 1245
1246/* returns 1 if bind to specified port by specified user is permitted */
1247int
1248bind_permitted(int port, uid_t uid)
1249{
1250 if (port < IPPORT_RESERVED && uid != 0)
1251 return 0;
1252 return 1;
1253}
diff --git a/misc.h b/misc.h
index 8f954198b..3578e8ef5 100644
--- a/misc.h
+++ b/misc.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: misc.h,v 1.59 2016/09/12 01:22:38 deraadt Exp $ */ 1/* $OpenBSD: misc.h,v 1.60 2016/10/23 22:04:05 dtucker Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -30,6 +30,7 @@ struct Forward {
30}; 30};
31 31
32int forward_equals(const struct Forward *, const struct Forward *); 32int forward_equals(const struct Forward *, const struct Forward *);
33int bind_permitted(int, uid_t);
33 34
34/* Common server and client forwarding options. */ 35/* Common server and client forwarding options. */
35struct ForwardOptions { 36struct ForwardOptions {
diff --git a/readconf.c b/readconf.c
index 351a22c32..1be564856 100644
--- a/readconf.c
+++ b/readconf.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: readconf.c,v 1.260 2016/08/25 23:56:51 djm Exp $ */ 1/* $OpenBSD: readconf.c,v 1.261 2016/10/23 22:04:05 dtucker Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -312,7 +312,7 @@ add_local_forward(Options *options, const struct Forward *newfwd)
312 extern uid_t original_real_uid; 312 extern uid_t original_real_uid;
313 int i; 313 int i;
314 314
315 if (newfwd->listen_port < IPPORT_RESERVED && original_real_uid != 0 && 315 if (bind_permitted(newfwd->listen_port, original_real_uid) &&
316 newfwd->listen_path == NULL) 316 newfwd->listen_path == NULL)
317 fatal("Privileged ports can only be forwarded by root."); 317 fatal("Privileged ports can only be forwarded by root.");
318 /* Don't add duplicates */ 318 /* Don't add duplicates */
diff --git a/serverloop.c b/serverloop.c
index 87e619fe4..4a9a16d41 100644
--- a/serverloop.c
+++ b/serverloop.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: serverloop.c,v 1.186 2016/09/12 01:22:38 deraadt Exp $ */ 1/* $OpenBSD: serverloop.c,v 1.187 2016/10/23 22:04:05 dtucker Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -724,8 +724,8 @@ server_input_global_request(int type, u_int32_t seq, void *ctxt)
724 if ((options.allow_tcp_forwarding & FORWARD_REMOTE) == 0 || 724 if ((options.allow_tcp_forwarding & FORWARD_REMOTE) == 0 ||
725 no_port_forwarding_flag || 725 no_port_forwarding_flag ||
726 (!want_reply && fwd.listen_port == 0) || 726 (!want_reply && fwd.listen_port == 0) ||
727 (fwd.listen_port != 0 && fwd.listen_port < IPPORT_RESERVED && 727 (fwd.listen_port != 0 &&
728 pw->pw_uid != 0)) { 728 !bind_permitted(fwd.listen_port, pw->pw_uid))) {
729 success = 0; 729 success = 0;
730 packet_send_debug("Server has disabled port forwarding."); 730 packet_send_debug("Server has disabled port forwarding.");
731 } else { 731 } else {