aboutsummaryrefslogtreecommitdiffstats
path: root/main/heimdal/heimdal-remove-broken-auth.patch
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2013-09-27 14:10:53 +0000
committerTimo Teräs <timo.teras@iki.fi>2013-09-27 14:22:25 +0000
commit4819e6abcde1eb62ced53602c27590d3b92ae9e0 (patch)
tree7745acb9545b1a659f2a87cc9af83e2b07e91549 /main/heimdal/heimdal-remove-broken-auth.patch
parent447e3ad633a27422ae2ad67685cbb6b952b09db4 (diff)
downloadaports-4819e6abcde1eb62ced53602c27590d3b92ae9e0.tar.bz2
aports-4819e6abcde1eb62ced53602c27590d3b92ae9e0.tar.xz
main/heimdal: remove broken authentication in rsh/rshd
as stated, it's broken by design security wise. and uses obsolete functions that don't exist in musl. this fixes musl build.
Diffstat (limited to 'main/heimdal/heimdal-remove-broken-auth.patch')
-rw-r--r--main/heimdal/heimdal-remove-broken-auth.patch163
1 files changed, 163 insertions, 0 deletions
diff --git a/main/heimdal/heimdal-remove-broken-auth.patch b/main/heimdal/heimdal-remove-broken-auth.patch
new file mode 100644
index 0000000000..1affcba2c2
--- /dev/null
+++ b/main/heimdal/heimdal-remove-broken-auth.patch
@@ -0,0 +1,163 @@
+--- appl/rsh/rsh.c.orig
++++ appl/rsh/rsh.c
+@@ -399,6 +399,8 @@
+
+ #endif /* KRB5 */
+
++#ifdef BROKEN_AUTH
++
+ static int
+ send_broken_auth(int s,
+ struct sockaddr *thisaddr,
+@@ -428,6 +430,8 @@
+ return 0;
+ }
+
++#endif /* BROKEN_AUTH */
++
+ static int
+ proto (int s, int errsock,
+ const char *hostname, const char *local_user, const char *remote_user,
+@@ -629,6 +633,8 @@
+ return res;
+ }
+
++#ifdef BROKEN_AUTH
++
+ static int
+ doit_broken (int argc,
+ char **argv,
+@@ -702,6 +708,8 @@
+ }
+ }
+
++#endif
++
+ #if defined(KRB5)
+ static int
+ doit (const char *hostname,
+@@ -796,7 +804,9 @@
+ { "protocol", 'P', arg_string, &protocol_version_str,
+ "Protocol version [krb5]", "protocol" },
+ #endif
++#ifdef BROKEN_AUTH
+ { "broken", 'K', arg_flag, &use_only_broken, "Use only priv port" },
++#endif
+ #if defined(KRB5)
+ { "encrypt", 'x', arg_flag, &do_encrypt, "Encrypt connection" },
+ { NULL, 'z', arg_negative_flag, &do_encrypt,
+@@ -831,8 +841,10 @@
+ int
+ main(int argc, char **argv)
+ {
++#ifdef BROKEN_AUTH
+ int priv_port1, priv_port2;
+ int priv_socket1, priv_socket2;
++#endif
+ int argindex = 0;
+ int error;
+ struct addrinfo hints, *ai;
+@@ -848,9 +860,11 @@
+ #endif
+ uid_t uid;
+
++#ifdef BROKEN_AUTH
+ priv_port1 = priv_port2 = IPPORT_RESERVED-1;
+ priv_socket1 = rresvport(&priv_port1);
+ priv_socket2 = rresvport(&priv_port2);
++#endif
+ uid = getuid ();
+ if (setuid (uid) || (uid != 0 && setuid(0) == 0))
+ err (1, "setuid");
+@@ -907,6 +921,7 @@
+
+ #endif
+
++#ifdef BROKEN_AUTH
+ if (use_only_broken) {
+ #ifdef KRB5
+ use_v5 = 0;
+@@ -918,6 +933,7 @@
+ errx (1, "unable to bind reserved port: is rsh setuid root?");
+ use_broken = 0;
+ }
++#endif
+
+ #if defined(KRB5)
+ if (do_encrypt == 1 && use_only_broken)
+@@ -956,8 +972,10 @@
+ }
+
+ if (argindex == argc) {
++#ifdef BROKEN_AUTH
+ close (priv_socket1);
+ close (priv_socket2);
++#endif
+ argv[0] = "rlogin";
+ execvp ("rlogin", argv);
+ err (1, "execvp rlogin");
+@@ -1004,6 +1022,7 @@
+ freeaddrinfo(ai);
+ }
+ #endif
++#ifdef BROKEN_AUTH
+ if (ret && use_broken) {
+ memset (&hints, 0, sizeof(hints));
+ hints.ai_socktype = SOCK_STREAM;
+@@ -1027,6 +1046,7 @@
+ cmd, cmd_len);
+ freeaddrinfo(ai);
+ }
++#endif
+ free(cmd);
+ return ret;
+ }
+--- appl/rsh/rshd.c.orig
++++ appl/rsh/rshd.c
+@@ -131,6 +131,7 @@
+ fatal(s, NULL, "%s too long", expl);
+ }
+
++#ifdef BROKEN_AUTH
+ static int
+ recv_bsd_auth (int s, u_char *buf,
+ struct sockaddr_in *thisaddr,
+@@ -152,6 +153,7 @@
+ fatal(s, NULL, "Login incorrect.");
+ return 0;
+ }
++#endif
+
+ #ifdef KRB5
+ static int
+@@ -658,10 +660,11 @@
+ /*
+ * we only do reserved port for IPv4
+ */
+-
++#ifdef BROKEN_AUTH
+ if (erraddr->sa_family == AF_INET)
+ errsock = rresvport (&priv_port);
+ else
++#endif
+ errsock = socket (erraddr->sa_family, SOCK_STREAM, 0);
+ if (errsock < 0)
+ syslog_and_die ("socket: %s", strerror(errno));
+@@ -689,6 +692,7 @@
+ syslog_and_die ("unrecognized auth protocol: %x %x %x %x",
+ buf[0], buf[1], buf[2], buf[3]);
+ } else {
++#ifdef BROKEN_AUTH
+ if(recv_bsd_auth (s, buf,
+ (struct sockaddr_in *)thisaddr,
+ (struct sockaddr_in *)thataddr,
+@@ -702,6 +706,9 @@
+ }
+ } else
+ syslog_and_die("recv_bsd_auth failed");
++#else
++ syslog_and_die("recv_bsd_auth is disabled for security reasons");
++#endif
+ }
+
+ if (client_user == NULL || server_user == NULL || cmd == NULL)