From 892efccb2579b2c69b57bbf0d00f5705531c12f7 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Wed, 28 Feb 2018 19:01:29 +0100 Subject: [PATCH] Cygwin: fhandler_socket_unix: store peer credentials in ucred member * Split out cygwin/_ucred.h file * drop local credentials Signed-off-by: Corinna Vinschen --- winsup/cygwin/fhandler.h | 10 +++------- winsup/cygwin/fhandler_socket_unix.cc | 15 ++++++--------- winsup/cygwin/include/cygwin/_ucred.h | 20 ++++++++++++++++++++ winsup/cygwin/include/cygwin/socket.h | 7 +------ 4 files changed, 30 insertions(+), 22 deletions(-) create mode 100644 winsup/cygwin/include/cygwin/_ucred.h diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h index 3d8d745af..d222494af 100644 --- a/winsup/cygwin/fhandler.h +++ b/winsup/cygwin/fhandler.h @@ -11,6 +11,7 @@ details. */ #include "tty.h" #include +#include /* fcntl flags used only internaly. */ #define O_NOSYMLINK 0x080000 @@ -824,15 +825,10 @@ class fhandler_socket_unix : public fhandler_socket char *get_sun_path () {return sun_path;} void set_peer_sun_path (const char *path); char *get_peer_sun_path () {return peer_sun_path;} - void set_cred (); protected: - pid_t sec_pid; - uid_t sec_uid; - gid_t sec_gid; - pid_t sec_peer_pid; - uid_t sec_peer_uid; - gid_t sec_peer_gid; + struct ucred peer_cred; + void set_cred (); public: fhandler_socket_unix (); diff --git a/winsup/cygwin/fhandler_socket_unix.cc b/winsup/cygwin/fhandler_socket_unix.cc index ec4170ff5..d912759fb 100644 --- a/winsup/cygwin/fhandler_socket_unix.cc +++ b/winsup/cygwin/fhandler_socket_unix.cc @@ -178,12 +178,9 @@ fhandler_socket_unix::set_peer_sun_path (const char *path) void fhandler_socket_unix::set_cred () { - sec_pid = getpid (); - sec_uid = geteuid32 (); - sec_gid = getegid32 (); - sec_peer_pid = (pid_t) 0; - sec_peer_uid = (uid_t) -1; - sec_peer_gid = (gid_t) -1; + peer_cred.pid = (pid_t) 0; + peer_cred.uid = (uid_t) -1; + peer_cred.gid = (gid_t) -1; } int @@ -317,11 +314,11 @@ fhandler_socket_unix::getpeereid (pid_t *pid, uid_t *euid, gid_t *egid) __try { if (pid) - *pid = sec_peer_pid; + *pid = peer_cred.pid; if (euid) - *euid = sec_peer_uid; + *euid = peer_cred.uid; if (egid) - *egid = sec_peer_gid; + *egid = peer_cred.gid; return 0; } __except (EFAULT) {} diff --git a/winsup/cygwin/include/cygwin/_ucred.h b/winsup/cygwin/include/cygwin/_ucred.h new file mode 100644 index 000000000..2bcba4202 --- /dev/null +++ b/winsup/cygwin/include/cygwin/_ucred.h @@ -0,0 +1,20 @@ +/* cygwin/_ucred.h + +This file is part of Cygwin. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. */ + +#ifndef _CYGWIN__UCRED_H +#define _CYGWIN__UCRED_H + +#include + +struct ucred { + pid_t pid; + uid_t uid; + gid_t gid; +}; + +#endif /* _CYGWIN__UCRED_H */ diff --git a/winsup/cygwin/include/cygwin/socket.h b/winsup/cygwin/include/cygwin/socket.h index 79c925948..295885256 100644 --- a/winsup/cygwin/include/cygwin/socket.h +++ b/winsup/cygwin/include/cygwin/socket.h @@ -47,12 +47,7 @@ struct sockaddr_storage { #include /* arch-dependent defines */ #include /* the SIOCxxx I/O controls */ #include /* iovec support */ - -struct ucred { - pid_t pid; - uid_t uid; - gid_t gid; -}; +#include /* struct ucred */ struct linger { unsigned short l_onoff; /* Linger active */