This code has a number of issues:
- It doesn't support IPv6 https://bugs.freedesktop.org/show_bug.cgi?id=7611
- The IP address is set by the selection owner so it doesn't bring any
  security for anyone querying the selection
- The extra DNS query that it does is problematic in some sandboxed
  environments (like OpenBSD's pledge
  https://marc.info/?l=openbsd-bugs&m=157842725819911&w=2)

Signed-off-by: Matthieu Herrb <matth...@herrb.eu>
---
 src/CvtStdSel.c | 30 ++----------------------------
 1 file changed, 2 insertions(+), 28 deletions(-)

diff --git a/src/CvtStdSel.c b/src/CvtStdSel.c
index 36423c6..5089623 100644
--- a/src/CvtStdSel.c
+++ b/src/CvtStdSel.c
@@ -54,7 +54,6 @@ in this Software without prior written authorization from The 
Open Group.
 #ifndef SYSVNET
 #ifdef WIN32
 #include <X11/Xwinsock.h>
-#define XOS_USE_MTSAFE_NETDBAPI
 #else
 #ifndef Lynx
 #include <sys/socket.h>
@@ -64,7 +63,6 @@ in this Software without prior written authorization from The 
Open Group.
 #endif
 #define XOS_USE_XT_LOCKING
 #endif
-#define X_INCLUDE_NETDB_H
 #include <X11/Xos_r.h>
 #endif
 
@@ -219,29 +217,6 @@ XmuConvertStandardSelection(Widget w, Time time, Atom 
*selection, Atom *target,
        *format = 8;
        return True;
     }
-#if defined(TCPCONN)
-    if (*target == XA_IP_ADDRESS(d)) {
-       char hostname[1024];
-#ifdef XTHREADS_NEEDS_BYNAMEPARAMS
-       _Xgethostbynameparams hparams;
-#endif
-       struct hostent *hostp;
-
-       hostname[0] = '\0';
-       (void) XmuGetHostname (hostname, sizeof hostname);
-
-       if ((hostp = _XGethostbyname (hostname,hparams)) == NULL)
-           return False;
-
-       if (hostp->h_addrtype != AF_INET) return False;
-       *length = hostp->h_length;
-       *value = XtMalloc(*length);
-       (void) memmove (*value, hostp->h_addr, *length);
-       *type = XA_NET_ADDRESS(d);
-       *format = 8;
-       return True;
-    }
-#endif
     if (*target == XA_USER(d)) {
        char *name = (char*)getenv("USER");
        if (name == NULL) return False;
@@ -308,15 +283,14 @@ XmuConvertStandardSelection(Widget w, Time time, Atom 
*selection, Atom *target,
     }
     if (*target == XA_TARGETS(d)) {
 #if defined(unix)
-#  define NUM_TARGETS 8
-#else
 #  define NUM_TARGETS 7
+#else
+#  define NUM_TARGETS 6
 #endif
        Atom* std_targets = (Atom*)XtMalloc(NUM_TARGETS*sizeof(Atom));
        int i = 0;
        std_targets[i++] = XA_TIMESTAMP(d);
        std_targets[i++] = XA_HOSTNAME(d);
-       std_targets[i++] = XA_IP_ADDRESS(d);
        std_targets[i++] = XA_USER(d);
        std_targets[i++] = XA_CLASS(d);
        std_targets[i++] = XA_NAME(d);
-- 
2.24.1

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to