summaryrefslogtreecommitdiff
path: root/net-misc/netkit-talk/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /net-misc/netkit-talk/files
reinit the tree, so we can have metadata
Diffstat (limited to 'net-misc/netkit-talk/files')
-rw-r--r--net-misc/netkit-talk/files/netkit-talk-0.17-ipv6.diff56
-rw-r--r--net-misc/netkit-talk/files/netkit-talk-0.17-time.patch20
-rw-r--r--net-misc/netkit-talk/files/talk.xinetd13
3 files changed, 89 insertions, 0 deletions
diff --git a/net-misc/netkit-talk/files/netkit-talk-0.17-ipv6.diff b/net-misc/netkit-talk/files/netkit-talk-0.17-ipv6.diff
new file mode 100644
index 000000000000..f426bf7dfadf
--- /dev/null
+++ b/net-misc/netkit-talk/files/netkit-talk-0.17-ipv6.diff
@@ -0,0 +1,56 @@
+--- a/talkd/talkd.c
++++ b/talkd/talkd.c
+@@ -164,13 +164,14 @@
+ const char *theirip;
+
+ struct hostent *hp;
++ struct sockaddr_in6 addr;
+ struct sockaddr_in sn;
+ int cc, i, ok;
+ socklen_t addrlen;
+
+- addrlen = sizeof(sn);
++ addrlen = sizeof(addr);
+ cc = recvfrom(0, inbuf, sizeof(inbuf), 0,
+- (struct sockaddr *)&sn, &addrlen);
++ (struct sockaddr *)&addr, &addrlen);
+ if (cc<0) {
+ if (errno==EINTR || errno==EAGAIN) {
+ return;
+@@ -185,14 +186,30 @@
+ */
+ lastmsgtime = time(NULL);
+
+- if (addrlen!=sizeof(sn)) {
+- syslog(LOG_WARNING, "recvfrom: bogus address length");
+- return;
+- }
+- if (sn.sin_family!=AF_INET) {
++ sn.sin_family = AF_INET;
++ switch (addr.sin6_family)
++ {
++ case AF_INET:
++ sn.sin_addr=((struct sockaddr_in*)&addr)->sin_addr;
++ sn.sin_port=((struct sockaddr_in*)&addr)->sin_port;
++ break;
++ case AF_INET6:
++ // addr must be ::FFFF:x.x.x.x
++ if (addr.sin6_addr.s6_addr32[0]!=0 ||
++ addr.sin6_addr.s6_addr32[1]!=0 ||
++ addr.sin6_addr.s6_addr16[5]!=0xffff ||
++ addr.sin6_addr.s6_addr16[4]!=0)
++ {
++ syslog(LOG_WARNING, "IPv6 address family not supported by talkd");
++ return;
++ }
++ sn.sin_port=addr.sin6_port;
++ sn.sin_addr.s_addr=addr.sin6_addr.s6_addr32[3];
++ break;
++ default:
+ syslog(LOG_WARNING, "recvfrom: bogus address family");
+ return;
+- }
++ }
+
+ /*
+ * If we get here we have an address we can reply to, although
diff --git a/net-misc/netkit-talk/files/netkit-talk-0.17-time.patch b/net-misc/netkit-talk/files/netkit-talk-0.17-time.patch
new file mode 100644
index 000000000000..3a0ccadcb744
--- /dev/null
+++ b/net-misc/netkit-talk/files/netkit-talk-0.17-time.patch
@@ -0,0 +1,20 @@
+--- a/talkd/table.c
++++ b/talkd/table.c
+@@ -57,6 +57,7 @@
+
+ #include "prot_talkd.h"
+ #include "proto.h"
++#include <time.h>
+
+ #define MAX_ID 16000 /* << 2^15 so I don't have sign troubles */
+
+--- a/talkd/announce.c
++++ b/talkd/announce.c
+@@ -49,6 +49,7 @@
+ #include <fcntl.h>
+ #include <string.h>
+ #include <paths.h>
++#include <time.h>
+ #include "prot_talkd.h"
+ #include "proto.h"
+
diff --git a/net-misc/netkit-talk/files/talk.xinetd b/net-misc/netkit-talk/files/talk.xinetd
new file mode 100644
index 000000000000..524282582b24
--- /dev/null
+++ b/net-misc/netkit-talk/files/talk.xinetd
@@ -0,0 +1,13 @@
+# default: off
+# description: The talk server accepts talk requests for chatting with users \
+# on other systems.
+service ntalk
+{
+# flags = IPv4
+ disable = yes
+ socket_type = dgram
+ wait = yes
+ user = nobody
+ group = tty
+ server = /usr/sbin/in.talkd
+}