00001 /* 00002 * Copyright (C) 2009, Edmundo Albuquerque de Souza e Silva. 00003 * 00004 * This file may be distributed under the terms of the Q Public License 00005 * as defined by Trolltech AS of Norway and appearing in the file 00006 * LICENSE.QPL included in the packaging of this file. 00007 * 00008 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING 00009 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00010 * PURPOSE. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, 00011 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING 00012 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 00013 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 00014 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 00015 * 00016 * Thanks: Jose Renato Santos 00017 * 00018 */ 00019 00020 /////////////////////////////////////////////////////////////////////////////// 00021 // UserManager.h: manage user attributes, permissions and metadata 00022 /////////////////////////////////////////////////////////////////////////////// 00023 00024 #ifndef __USERMANAGER_H_ 00025 #define __USERMANAGER_H_ 00026 00027 #include <fstream> 00028 #include <vector> 00029 00030 #include "RioUnix.h" 00031 #include "RioTypes.h" 00032 #include "RioMutex.h" 00033 #include "UserManagerTypes.h" 00034 00035 using namespace std; 00036 00037 class RioUser; 00038 00039 /////////////////////////////////////////////////////////////////////////////// 00040 // CUserManager 00041 class CUserManager 00042 { 00043 private: 00044 char *m_UserRoot; 00045 char *m_FileRoot; 00046 // Como existia este mutex que nao estava sendo usado, vou usa-lo para 00047 // garantir o acesso exclusivo ao arquivo. 00048 CMutex *m_Mutex; 00049 bool m_initialized; 00050 //FILE *m_PassFile; 00051 // Nova variavel para armazenar o nome do arquivo com as senhas. 00052 char m_PasswdFileName[ MaxPathSize ]; 00053 00054 public: 00055 CUserManager(); 00056 ~CUserManager(); 00057 00058 // Agora o metodo Initialize da classe CUserManager possuira somente um 00059 // parametro, a estrutura do tipo UserManagerConfig com todos os 00060 // parametos anteriores da funcao (esta estrutura esta descrita 00061 // no arquivo UserManagerTypes.h). 00062 int Initialize( UserManagerConfig *Config ); 00063 int Logon( char *UserName, char* Password, RioUser **User ); 00064 // Novas funcoes para criar um novo usuario, remover um usuario, e 00065 // alterar a senha de um usuario. 00066 00067 /** 00068 * Nova funcao para criar um novo usuario. 00069 * @param UserName ponteiro para o nome do usuario. 00070 * @param Password pontrito para a senha do usuario. 00071 * @return S_OK se o usuario foi criado com sucesso ou o codigo de erro 00072 * caso o usuario nao tenha sido criado com sucesso. 00073 */ 00074 int CreateUser( char *UserName, char *Password ); 00075 00076 /** 00077 * Nova funcao para remover um dos usuarios do RIO. 00078 * @param UserName ponteiro para o nome do usuario. 00079 * @return S_OK se o usuario foi removido com sucesso ou o codigo de 00080 * erro caso nao tenha sido possivel remover o usuario. 00081 */ 00082 int RemoveUser( char *UserName ); 00083 00084 /** 00085 * Nova funcao para alterar a senha de um dos usuarios do RIO. 00086 * @param UserName ponteiro para o nome do usuario. 00087 * @param Password pontrito para a senha do usuario. 00088 * @return S_OK se o a senha fou alterada com sucesso ou o codigo de 00089 * erro caso nao tenha sido possivel alterar a senha do usuario. 00090 */ 00091 int ChangePassword( char *UserName, char *Password ); 00092 00093 /** 00094 * Nova funcao para obter a lista com todos os usuarios 00095 * @param USerList vetor de strings (STL) no qual a lista de usuarios 00096 * sera armazenada. 00097 * @return S_OK caso a lista tenha sido gerada com sucesso ou o codigo 00098 * de erro caso nao tenha sido possivel gerar a lista. 00099 */ 00100 int GetUserList( vector< string > &UserList ); 00101 00102 ofstream m_log; 00103 }; 00104 00105 // represents a single logged on user 00106 // (only created by UserManager) 00107 class RioUser 00108 { 00109 private: 00110 char *user; // Novo campo para armazenar o nome do usuario. 00111 // Atualmente igual a user_home. 00112 char *user_home; 00113 CUserManager *u_mgr; 00114 00115 RioUser(); 00116 RioUser( CUserManager *mgr ); 00117 00118 friend class CUserManager; 00119 00120 public: 00121 ~RioUser(); // is logoff 00122 int CheckAccess( const char *Path, const int action = 0 ); 00123 int GetUserHome( char **Path ); 00124 /** 00125 * Nome funcao para obter o nome do ususario. 00126 * @param User ponteiro para um ponteiro apontado para o inicio da 00127 * string com o nome do usuario. 00128 * @return S_OK. 00129 */ 00130 int GetUser( char **User ); 00131 00132 }; 00133 00134 #endif //__USERMANAGER_H_