pion
5.0.6
|
00001 // --------------------------------------------------------------------- 00002 // pion: a Boost C++ framework for building lightweight HTTP interfaces 00003 // --------------------------------------------------------------------- 00004 // Copyright (C) 2007-2014 Splunk Inc. (https://github.com/splunk/pion) 00005 // 00006 // Distributed under the Boost Software License, Version 1.0. 00007 // See http://www.boost.org/LICENSE_1_0.txt 00008 // 00009 00010 #ifndef __PION_ADMIN_RIGHTS_HEADER__ 00011 #define __PION_ADMIN_RIGHTS_HEADER__ 00012 00013 #include <pion/config.hpp> 00014 #include <pion/logger.hpp> 00015 #include <boost/cstdint.hpp> 00016 #include <boost/thread/mutex.hpp> 00017 00018 00019 namespace pion { // begin namespace pion 00020 00021 00025 class PION_API admin_rights { 00026 public: 00027 00034 admin_rights(bool use_log = true); 00035 00037 virtual ~admin_rights() { release(); } 00038 00040 void release(void); 00041 00043 static long run_as_user(const std::string& user_name); 00044 00046 static long run_as_group(const std::string& group_name); 00047 00048 00049 private: 00050 00059 static long find_system_id(const std::string& name, const std::string& file); 00060 00061 00063 static const boost::int16_t ADMIN_USER_ID; 00064 00066 static boost::mutex m_mutex; 00067 00069 logger m_logger; 00070 00072 boost::unique_lock<boost::mutex> m_lock; 00073 00075 boost::int16_t m_user_id; 00076 00078 bool m_has_rights; 00079 00081 bool m_use_log; 00082 }; 00083 00084 00085 } // end namespace pion 00086 00087 #endif 00088