00001 #ifndef __SYS_PRIV_H__
00002 #define __SYS_PRIV_H__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00025
00026 #if !defined(WINDOWS)
00027 # include <sys/types.h>
00028 #else
00029 # define uid_t unsigned int
00030 # define gid_t unsigned int
00031 #endif
00032
00033 #include "XrdSys/XrdSysPthread.hh"
00034
00035 class XrdSysPriv
00036 {
00037 friend class XrdSysPrivGuard;
00038 private:
00039
00040
00041 static XrdSysRecMutex fgMutex;
00042
00043 XrdSysPriv();
00044
00045 static bool fDebug;
00046
00047 static int ChangeTo(uid_t uid, gid_t gid);
00048 static void DumpUGID(const char *msg = 0);
00049 static int Restore(bool saved = 1);
00050
00051 public:
00052 virtual ~XrdSysPriv() { }
00053 static int ChangePerm(uid_t uid, gid_t gid);
00054 };
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 class XrdSysPrivGuard
00068 {
00069 public:
00070 XrdSysPrivGuard(uid_t uid, gid_t gid);
00071 XrdSysPrivGuard(const char *user);
00072 virtual ~XrdSysPrivGuard();
00073 bool Valid() const { return valid; }
00074 private:
00075 bool dum;
00076 bool valid;
00077 void Init(uid_t uid, gid_t gid);
00078 };
00079
00080 #endif