diff --git a/src/XrdCl/XrdClUtils.hh b/src/XrdCl/XrdClUtils.hh index 9c152c17bc7..2ae8c013ba5 100644 --- a/src/XrdCl/XrdClUtils.hh +++ b/src/XrdCl/XrdClUtils.hh @@ -26,6 +26,8 @@ #include "XrdCl/XrdClURL.hh" #include "XrdCl/XrdClXRootDResponses.hh" #include "XrdCl/XrdClPropertyList.hh" +#include "XrdCl/XrdClDefaultEnv.hh" +#include "XrdCl/XrdClConstants.hh" #include "XrdNet/XrdNetUtils.hh" #include @@ -243,7 +245,8 @@ namespace XrdCl //------------------------------------------------------------------------ //! Constructor //------------------------------------------------------------------------ - ScopedFsUidSetter(uid_t fsuid, gid_t fsgid) : pFsUid(fsuid), pFsGid(fsgid) + ScopedFsUidSetter(uid_t fsuid, gid_t fsgid, const std::string &streamName) + : pFsUid(fsuid), pFsGid(fsgid), pStreamName(streamName) { pOk = true; pPrevFsUid = -1; @@ -255,7 +258,7 @@ namespace XrdCl if(pFsUid >= 0) { pPrevFsUid = setfsuid(pFsUid); - if(setfsuid(-1) != pFsUid) { + if(setfsuid(pFsUid) != pFsUid) { pOk = false; return; } @@ -267,7 +270,7 @@ namespace XrdCl if(pFsGid >= 0) { pPrevFsGid = setfsgid(pFsGid); - if(setfsgid(-1) != pFsGid) { + if(setfsgid(pFsGid) != pFsGid) { pOk = false; return; } @@ -278,12 +281,16 @@ namespace XrdCl //! Destructor //------------------------------------------------------------------------ ~ScopedFsUidSetter() { + Log *log = DefaultEnv::GetLog(); + if(pPrevFsUid >= 0) { - setfsuid(pPrevFsUid); + int retcode = setfsuid(pPrevFsUid); + log->Dump(XRootDTransportMsg, "[%s] Restored fsuid from %d to %d", pStreamName.c_str(), retcode, pPrevFsUid); } if(pPrevFsGid >= 0) { - setfsgid(pPrevFsGid); + int retcode = setfsgid(pPrevFsGid); + log->Dump(XRootDTransportMsg, "[%s] Restored fsgid from %d to %d", pStreamName.c_str(), retcode, pPrevFsGid); } } @@ -295,6 +302,8 @@ namespace XrdCl int pFsUid; int pFsGid; + const std::string &pStreamName; + int pPrevFsUid; int pPrevFsGid; diff --git a/src/XrdCl/XrdClXRootDTransport.cc b/src/XrdCl/XrdClXRootDTransport.cc index 7f43711db51..6798a2c36b6 100644 --- a/src/XrdCl/XrdClXRootDTransport.cc +++ b/src/XrdCl/XrdClXRootDTransport.cc @@ -1836,7 +1836,7 @@ namespace XrdCl if(secgidc) secgid = atoi(secgidc); #ifdef __linux__ - ScopedFsUidSetter uidSetter(secuid, secgid); + ScopedFsUidSetter uidSetter(secuid, secgid, hsData->streamName); if(!uidSetter.IsOk()) { log->Error( XRootDTransportMsg, "[%s] Error while setting (fsuid, fsgid) to (%d, %d)", hsData->streamName.c_str(), secuid, secgid );