#include "SysExecGui.h" #include NAMESPACE_UPP #ifdef PLATFORM_POSIX #define IMAGECLASS SysExecGuiImg #define IMAGEFILE #include #define LAYOUTFILE #include /////////////////////////////////////////////////////////////////////////////////////// // password dialog class PasswordDlg : public WithPasswordDlgLayout { private: String user; StaticRect r; protected: public: typedef PasswordDlg CLASSNAME; // constructor PasswordDlg(); String GetPassword(void) { return ~pwd; } // starts dialog, return true on success bool Run(String const &u = "root"); }; PasswordDlg::PasswordDlg() { Add(r.SizePos()); r.Color(LtCyan); CtrlLayout(*this, GetExeTitle()); pwd.Password(); lock.SetImage(SysExecGuiImg::lock()); title1 <<= t_("Please enter password to execute administrative tasks"); title2 <<= Format(t_("[1 '%s' application can change important parts of your system]"), GetExeTitle()); okBtn.Ok() <<= Acceptor(IDOK); cancelBtn.Cancel() <<= Rejector(IDCANCEL); VCenterPos().HCenterPos(); } bool PasswordDlg::Run(String const &u) { // ask for password user = u; while(true) { pwd.Clear(); PopUp(NULL, false, false, true, true); pwd.SetFocus(); switch(Execute()) { case IDOK: // check the password running pwd if(SysExecUser(user, ~pwd, "/bin/pwd", "")) return true; PromptOK(DeQtf(t_("Wrong password -- Try again"))); break; case IDCANCEL: return false; default: NEVER(); } } return true; } static PasswordDlg &pDlg() { static PasswordDlg p; return p; } /////////////////////////////////////////////////////////////////////////////////////////////// // executes an external command as Admin user, passing a command line to it without waiting for its termination // it WILL prompt for user intervention on windows secure systems (Vista+ OSes), on which the password is useless // on linux, will return an error if password is wrong // return true on success, false otherwise bool SysStartAdmin(String const &command, String const &args, const VectorMap &Environ) { // PasswordDlg *pp = &(pDlg()); if(!pDlg().Run()) return false; return SysStartAdmin(pDlg().GetPassword(), command, args, Environ); } bool SysStartAdmin(String const &command, String const &args) { if(!pDlg().Run()) return false; return SysStartAdmin(pDlg().GetPassword(), command, args); } /////////////////////////////////////////////////////////////////////////////////////////////// // executes an external command as required user, passing a command line to it without waiting for its termination // on linux, will return an error if password is required AND wrong // on windows, by now... it just spawn the process without changing security level // I still shall find a way to go back to user mode on windows // return true on success, false otherwise bool SysStartUser(String const &user, String const &command, String const &args, const VectorMap &Environ) { if(!pDlg().Run(user)) return false; return SysStartUser(user, pDlg().GetPassword(), command, args, Environ); } bool SysStartUser(String const &user, String const &command, String const &args) { if(!pDlg().Run(user)) return false; return SysStartUser(user, pDlg().GetPassword(), command, args); } /////////////////////////////////////////////////////////////////////////////////////////////// // executes an external command as Admin user, passing a command line to it waiting for its termination // it WILL prompt for user intervention on windows secure systems (Vista+ OSes), on which the password is useless // on linux, will return an error if password is wrong // return true on success, false otherwise bool SysExecAdmin(String const &command, String const &args, const VectorMap &Environ) { if(!pDlg().Run()) return false; return SysExecAdmin(pDlg().GetPassword(), command, args, Environ); } bool SysExecAdmin(String const &command, String const &args) { if(!pDlg().Run()) return false; return SysExecAdmin(pDlg().GetPassword(), command, args); } /////////////////////////////////////////////////////////////////////////////////////////////// // executes an external command as required user, passing a command line to it waiting for its termination // on linux, will return an error if password is required AND wrong // on windows, by now... it just spawn the process without changing security level // I still shall find a way to go back to user mode on windows // return true on success, false otherwise bool SysExecUser(String const &user, String const &command, String const &args, const VectorMap &Environ) { if(!pDlg().Run(user)) return false; return SysExecUser(user, pDlg().GetPassword(), command, args, Environ); } bool SysExecUser(String const &user, String const &command, String const &args) { if(!pDlg().Run(user)) return false; return SysExecUser(user, pDlg().GetPassword(), command, args); } #else /////////////////////////////////////////////////////////////////////////////////////////////// // executes an external command as Admin user, passing a command line to it without waiting for its termination // it WILL prompt for user intervention on windows secure systems (Vista+ OSes), on which the password is useless // on linux, will return an error if password is wrong // return true on success, false otherwise bool SysStartAdmin(String const &command, String const &args, const VectorMap &Environ) { return SysStartAdmin("", command, args, Environ); } bool SysStartAdmin(String const &command, String const &args) { return SysStartAdmin("", command, args); } /////////////////////////////////////////////////////////////////////////////////////////////// // executes an external command as required user, passing a command line to it without waiting for its termination // on linux, will return an error if password is required AND wrong // on windows, by now... it just spawn the process without changing security level // I still shall find a way to go back to user mode on windows // return true on success, false otherwise bool SysStartUser(String const &user, String const &command, String const &args, const VectorMap &Environ) { return SysStartUser(user, "", command, args, Environ); } bool SysStartUser(String const &user, String const &command, String const &args) { return SysStartUser(user, "", command, args); } /////////////////////////////////////////////////////////////////////////////////////////////// // executes an external command as Admin user, passing a command line to it waiting for its termination // it WILL prompt for user intervention on windows secure systems (Vista+ OSes), on which the password is useless // on linux, will return an error if password is wrong // return true on success, false otherwise bool SysExecAdmin(String const &command, String const &args, const VectorMap &Environ) { return SysExecAdmin("", command, args, Environ); } bool SysExecAdmin(String const &command, String const &args) { return SysExecAdmin("", command, args); } /////////////////////////////////////////////////////////////////////////////////////////////// // executes an external command as required user, passing a command line to it waiting for its termination // on linux, will return an error if password is required AND wrong // on windows, by now... it just spawn the process without changing security level // I still shall find a way to go back to user mode on windows // return true on success, false otherwise bool SysExecUser(String const &user, String const &command, String const &args, const VectorMap &Environ) { return SysExecUser(user, "", command, args, Environ); } bool SysExecUser(String const &user, String const &command, String const &args) { return SysExecUser(user, "", command, args); } #endif END_UPP_NAMESPACE