From f2ecf068c61c77d46d20667557bd65f1cc32a7e7 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Wed, 30 Jul 2025 14:30:08 +0200 Subject: [PATCH] WIP: XTRANS_SEND_FDS --- os/Xtrans.c | 10 ++++++---- os/Xtransint.h | 6 ------ os/Xtranssock.c | 19 +------------------ os/io.c | 20 +++++--------------- 4 files changed, 12 insertions(+), 43 deletions(-) diff --git a/os/Xtrans.c b/os/Xtrans.c index f97a0d3037..34ae4e5f66 100644 --- a/os/Xtrans.c +++ b/os/Xtrans.c @@ -682,17 +682,19 @@ ssize_t _XSERVTransWrite (XtransConnInfo ciptr, const char *buf, size_t size) return ciptr->transptr->Write (ciptr, buf, size); } -#if XTRANS_SEND_FDS int _XSERVTransSendFd (XtransConnInfo ciptr, int fd, int do_close) { - return ciptr->transptr->SendFd(ciptr, fd, do_close); + if (ciptr->transptr->SendFd) + return ciptr->transptr->SendFd(ciptr, fd, do_close); + return -1; } int _XSERVTransRecvFd (XtransConnInfo ciptr) { - return ciptr->transptr->RecvFd(ciptr); + if (ciptr->transptr->RecvFd) + return ciptr->transptr->RecvFd(ciptr); + return -1; } -#endif int _XSERVTransDisconnect (XtransConnInfo ciptr) { diff --git a/os/Xtransint.h b/os/Xtransint.h index 20cf9a9502..9dd1d19b9e 100644 --- a/os/Xtransint.h +++ b/os/Xtransint.h @@ -100,16 +100,12 @@ from The Open Group. #define X_TCP_PORT 6000 -#if XTRANS_SEND_FDS - struct _XtransConnFd { struct _XtransConnFd *next; int fd; int do_close; }; -#endif - struct _XtransConnInfo { struct _Xtransport *transptr; int index; @@ -175,7 +171,6 @@ typedef struct _Xtransport { ssize_t (*Write)(XtransConnInfo ciptr, const char *buf, size_t size); -#if XTRANS_SEND_FDS int (*SendFd)( XtransConnInfo, /* connection */ int, /* fd */ @@ -185,7 +180,6 @@ typedef struct _Xtransport { int (*RecvFd)( XtransConnInfo /* connection */ ); -#endif int (*Disconnect)( XtransConnInfo /* connection */ diff --git a/os/Xtranssock.c b/os/Xtranssock.c index c1091b21ac..0129f2bc01 100644 --- a/os/Xtranssock.c +++ b/os/Xtranssock.c @@ -1,3 +1,4 @@ + /* * Copyright (c) 2002, 2025, Oracle and/or its affiliates. * @@ -1138,8 +1139,6 @@ static XtransConnInfo _XSERVTransSocketUNIXAccept ( #endif /* UNIXCONN */ -#if XTRANS_SEND_FDS - static void appendFd(struct _XtransConnFd **prev, int fd, int do_close) { @@ -1241,8 +1240,6 @@ union fd_pass { char buf[CMSG_SPACE(MAX_FDS * sizeof(int))]; }; -#endif /* XTRANS_SEND_FDS */ - static int _XSERVTransSocketRead ( XtransConnInfo ciptr, char *buf, int size) { @@ -1378,9 +1375,7 @@ static int _XSERVTransSocketUNIXClose (XtransConnInfo ciptr) prmsg (2,"SocketUNIXClose(%p,%d)\n", (void *) ciptr, ciptr->fd); -#if XTRANS_SEND_FDS cleanupFds(ciptr); -#endif ret = ossock_close(ciptr->fd); if (ciptr->flags @@ -1404,9 +1399,7 @@ static int _XSERVTransSocketUNIXCloseForCloning (XtransConnInfo ciptr) prmsg (2,"SocketUNIXCloseForCloning(%p,%d)\n", (void *) ciptr, ciptr->fd); -#if XTRANS_SEND_FDS cleanupFds(ciptr); -#endif return ossock_close(ciptr->fd); } @@ -1439,10 +1432,8 @@ static Xtransport _XSERVTransSocketTCPFuncs = { _XSERVTransSocketINETAccept, _XSERVTransSocketRead, _XSERVTransSocketWrite, -#if XTRANS_SEND_FDS _XSERVTransSocketSendFdInvalid, _XSERVTransSocketRecvFdInvalid, -#endif _XSERVTransSocketDisconnect, _XSERVTransSocketINETClose, _XSERVTransSocketINETClose, @@ -1461,10 +1452,8 @@ static Xtransport _XSERVTransSocketINETFuncs = { _XSERVTransSocketINETAccept, _XSERVTransSocketRead, _XSERVTransSocketWrite, -#if XTRANS_SEND_FDS _XSERVTransSocketSendFdInvalid, _XSERVTransSocketRecvFdInvalid, -#endif _XSERVTransSocketDisconnect, _XSERVTransSocketINETClose, _XSERVTransSocketINETClose, @@ -1484,10 +1473,8 @@ static Xtransport _XSERVTransSocketINET6Funcs = { _XSERVTransSocketINETAccept, _XSERVTransSocketRead, _XSERVTransSocketWrite, -#if XTRANS_SEND_FDS _XSERVTransSocketSendFdInvalid, _XSERVTransSocketRecvFdInvalid, -#endif _XSERVTransSocketDisconnect, _XSERVTransSocketINETClose, _XSERVTransSocketINETClose, @@ -1512,10 +1499,8 @@ static Xtransport _XSERVTransSocketLocalFuncs = { _XSERVTransSocketUNIXAccept, _XSERVTransSocketRead, _XSERVTransSocketWrite, -#if XTRANS_SEND_FDS _XSERVTransSocketSendFd, _XSERVTransSocketRecvFd, -#endif _XSERVTransSocketDisconnect, _XSERVTransSocketUNIXClose, _XSERVTransSocketUNIXCloseForCloning, @@ -1540,10 +1525,8 @@ static Xtransport _XSERVTransSocketUNIXFuncs = { _XSERVTransSocketUNIXAccept, _XSERVTransSocketRead, _XSERVTransSocketWrite, -#if XTRANS_SEND_FDS _XSERVTransSocketSendFd, _XSERVTransSocketRecvFd, -#endif _XSERVTransSocketDisconnect, _XSERVTransSocketUNIXClose, _XSERVTransSocketUNIXCloseForCloning, diff --git a/os/io.c b/os/io.c index 485c9b5715..0e2e3a60de 100644 --- a/os/io.c +++ b/os/io.c @@ -255,14 +255,13 @@ ReadRequestFromClient(ClientPtr client) oc->input = oci; } -#if XTRANS_SEND_FDS /* Discard any unused file descriptors */ while (client->req_fds > 0) { int req_fd = ReadFdFromClient(client); if (req_fd >= 0) close(req_fd); } -#endif + /* advance to start of next request */ oci->bufptr += oci->lenLastReq; @@ -474,31 +473,22 @@ ReadRequestFromClient(ClientPtr client) int ReadFdFromClient(ClientPtr client) { - int fd = -1; - -#if XTRANS_SEND_FDS if (client->req_fds > 0) { OsCommPtr oc = (OsCommPtr) client->osPrivate; --client->req_fds; - fd = _XSERVTransRecvFd(oc->trans_conn); - } else - LogMessage(X_ERROR, "Request asks for FD without setting req_fds\n"); -#endif + return _XSERVTransRecvFd(oc->trans_conn); + } - return fd; + LogMessage(X_ERROR, "Request asks for FD without setting req_fds\n"); + return -1; } int WriteFdToClient(ClientPtr client, int fd, Bool do_close) { -#if XTRANS_SEND_FDS OsCommPtr oc = (OsCommPtr) client->osPrivate; - return _XSERVTransSendFd(oc->trans_conn, fd, do_close); -#else - return -1; -#endif } /*****************************************************************