(file) Return to UserManager.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Security / UserManager

  1 kumpf 1.8 //%/////////////////////////////////////////////////////////////////////////////
  2 mike  1.2 //
  3 kumpf 1.8 // Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM,
  4 mike  1.2 // The Open Group, Tivoli Systems
  5           //
  6           // Permission is hereby granted, free of charge, to any person obtaining a copy
  7 kumpf 1.8 // of this software and associated documentation files (the "Software"), to
  8           // deal in the Software without restriction, including without limitation the
  9           // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 10 mike  1.2 // sell copies of the Software, and to permit persons to whom the Software is
 11           // furnished to do so, subject to the following conditions:
 12           // 
 13 kumpf 1.8 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 14 mike  1.2 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 15           // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 16 kumpf 1.8 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 17           // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 18           // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 19 mike  1.2 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 20           // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 21           //
 22 kumpf 1.8 //==============================================================================
 23 mike  1.2 //
 24           // Author: Sushma Fernandes, Hewlett Packard Company (sushma_fernandes@hp.com)
 25           //
 26           // Modified By: Nag Boranna, Hewlett Packard Company (nagaraja_boranna@hp.com)
 27           //
 28           //%////////////////////////////////////////////////////////////////////////////
 29           
 30           
 31           ///////////////////////////////////////////////////////////////////////////////
 32           // 
 33           // User Manager
 34           //
 35           ///////////////////////////////////////////////////////////////////////////////
 36           
 37           #include <Pegasus/Common/Destroyer.h>
 38           #include <Pegasus/Common/System.h>
 39           #include <Pegasus/Common/Tracer.h>
 40 kumpf 1.6 #include <Pegasus/Common/PegasusVersion.h>
 41           
 42 mike  1.2 #include <Pegasus/Security/UserManager/UserManager.h>
 43           #include <Pegasus/Security/UserManager/UserExceptions.h>
 44           
 45           
 46           PEGASUS_USING_STD;
 47           
 48           PEGASUS_NAMESPACE_BEGIN
 49           
 50           /**
 51           Initialize UserManager instance
 52           */
 53           UserManager* UserManager::_instance = 0;
 54           
 55           //
 56           // Constructor
 57           //
 58           UserManager::UserManager(CIMRepository* repository)
 59           {
 60 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::UserManager");
 61 mike  1.2 
 62               try
 63               {
 64                   _userFileHandler = 0;
 65 kumpf 1.7 
 66           #ifndef PEGASUS_NO_PASSWORDFILE
 67 mike  1.2         _userFileHandler = new UserFileHandler();
 68 kumpf 1.7 #endif
 69 mike  1.2         _authHandler = 0;
 70 kumpf 1.5         _authHandler = new AuthorizationHandler(repository);
 71 mike  1.2     }
 72               catch (Exception& e)
 73               {
 74                   if (_userFileHandler)
 75                   {
 76                       delete _userFileHandler;
 77                   }
 78                   if (_authHandler)
 79                   {
 80                       delete _authHandler;
 81                   }
 82           
 83 kumpf 1.5         PEG_METHOD_EXIT();
 84 mike  1.2         throw e;
 85               }
 86           
 87 kumpf 1.5     PEG_METHOD_EXIT();
 88 mike  1.2 }
 89           
 90           //
 91           // Destructor
 92           //
 93           UserManager::~UserManager()
 94           {
 95 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::~UserManager");
 96 mike  1.2 
 97 kumpf 1.4     if (_userFileHandler)
 98               {
 99                   delete _userFileHandler;
100               }
101               if (_authHandler)
102               {
103                   delete _authHandler;
104               }
105 mike  1.2 
106 kumpf 1.5     PEG_METHOD_EXIT();
107 mike  1.2 }
108           
109           //
110           // Construct the singleton instance of the UserManager and return a
111           // pointer to that instance.
112           //
113           UserManager* UserManager::getInstance(CIMRepository* repository)
114           {
115 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::getInstance");
116 mike  1.2 
117 kumpf 1.5     if (!_instance && !repository)
118               {
119                   PEG_METHOD_EXIT();
120                   throw CannotCreateUserManagerInstance();
121               }
122 mike  1.2 
123 kumpf 1.4     if (!_instance)
124 mike  1.2     {
125                   _instance = new UserManager(repository);
126               }
127           
128 kumpf 1.5     PEG_METHOD_EXIT();
129 mike  1.2 
130               return _instance;
131           }
132           
133           // 
134           // Add a user
135           //
136           void UserManager::addUser(const String& userName, const String& password)
137           {
138 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::addUser");
139 mike  1.2 
140 kumpf 1.7 #ifndef PEGASUS_NO_PASSWORDFILE
141 mike  1.2     //
142               // Check if the user is a valid system user
143               //
144 kumpf 1.9     if ( !System::isSystemUser( userName.getCString() ) )
145 mike  1.2     {
146 kumpf 1.5         PEG_METHOD_EXIT();
147 mike  1.2 	throw InvalidSystemUser(userName); 
148               }
149           
150               // 
151               // Add the user to the password file
152               //
153               try
154               {
155                   _userFileHandler->addUserEntry(userName,password);
156               }
157               catch (Exception& e)
158               {
159 kumpf 1.5         PEG_METHOD_EXIT();
160 mike  1.2 	throw e;
161               }
162 kumpf 1.7 #endif
163 mike  1.2 
164 kumpf 1.5     PEG_METHOD_EXIT();
165 mike  1.2 }
166           
167           //
168           // Modify user's password
169           //
170           void UserManager::modifyUser(
171                          const String& userName,
172           	       const String& password,
173           	       const String& newPassword )
174           {
175 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::modifyUser");
176 mike  1.2 
177 kumpf 1.7 #ifndef PEGASUS_NO_PASSWORDFILE
178 mike  1.2     try
179               {
180                   _userFileHandler->modifyUserEntry(userName, password, newPassword);
181               }
182               catch (Exception& e)
183               {
184 kumpf 1.5         PEG_METHOD_EXIT();
185 mike  1.2 	throw e;
186               }
187 kumpf 1.7 #endif
188           
189 kumpf 1.5     PEG_METHOD_EXIT();
190 mike  1.2 }
191           
192           // 
193           // Remove a user
194           //
195           void UserManager::removeUser(const String& userName)
196           {
197 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::removeUser");
198 kumpf 1.7 
199           #ifndef PEGASUS_NO_PASSWORDFILE
200 mike  1.2     try
201               {
202                   _userFileHandler->removeUserEntry(userName);
203               }
204               catch (Exception& e)
205               {
206 kumpf 1.5         PEG_METHOD_EXIT();
207 mike  1.2 	throw e;
208               }
209 kumpf 1.7 #endif
210 mike  1.2 
211 kumpf 1.5     PEG_METHOD_EXIT();
212 mike  1.2 }
213           
214           
215           //
216           // Get a list of all the user names.
217           //
218           void UserManager::getAllUserNames(Array<String>& userNames)
219           {
220 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::getAllUserNames");
221 mike  1.2 
222 kumpf 1.7 #ifndef PEGASUS_NO_PASSWORDFILE
223 mike  1.2     try
224               {
225                   _userFileHandler->getAllUserNames( userNames );
226 kumpf 1.5         PEG_METHOD_EXIT();
227 mike  1.2     }
228               catch (Exception& e)
229               {
230           	throw e;
231               }
232 kumpf 1.7 #endif
233 mike  1.2 
234 kumpf 1.5     PEG_METHOD_EXIT();
235 mike  1.2 }
236           
237           //
238           // Verify whether the specified CIM user is valid
239           //
240           Boolean UserManager::verifyCIMUser (const String& userName)
241           {
242 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::verifyCIMUser");
243 mike  1.2 
244 kumpf 1.7 #ifndef PEGASUS_NO_PASSWORDFILE
245 mike  1.2     try
246               {
247                   if ( _userFileHandler->verifyCIMUser( userName ))
248           	{
249 kumpf 1.5             PEG_METHOD_EXIT();
250 mike  1.2 	    return true;
251                   }
252           	else
253           	{
254 kumpf 1.5             PEG_METHOD_EXIT();
255 mike  1.2 	    return false;
256                   }
257               }
258 kumpf 1.4     catch (InvalidUser& iu)
259               {
260 kumpf 1.5         PEG_METHOD_EXIT();
261 kumpf 1.4 	throw iu;
262               }
263 mike  1.2     catch (Exception& e)
264               {
265 kumpf 1.5         PEG_METHOD_EXIT();
266 mike  1.2 	throw e;
267               }
268 kumpf 1.7 #else
269               PEG_METHOD_EXIT();
270               return false;
271           #endif
272 mike  1.2 }
273           
274           //
275           // Verify whether the specified user's password is valid
276           //
277           Boolean UserManager::verifyCIMUserPassword (
278           			   const String& userName, 
279           			   const String& password)
280           {
281 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::verifyCIMUserPassword");
282 mike  1.2 
283 kumpf 1.7 #ifndef PEGASUS_NO_PASSWORDFILE
284 mike  1.2     try
285               {
286                   if ( _userFileHandler->verifyCIMUserPassword( userName, password ))
287           	{
288 kumpf 1.5             PEG_METHOD_EXIT();
289 mike  1.2 	    return true;
290                   }
291           	else
292           	{
293 kumpf 1.5             PEG_METHOD_EXIT();
294 mike  1.2 	    return false;
295                   }
296 kumpf 1.4     }
297               catch (InvalidUser& iu)
298               {
299 kumpf 1.5         PEG_METHOD_EXIT();
300 kumpf 1.4 	throw iu;
301 mike  1.2     }
302               catch (Exception& e)
303               {
304 kumpf 1.5         PEG_METHOD_EXIT();
305 mike  1.2 	throw e;
306               }
307 kumpf 1.7 #else
308               PEG_METHOD_EXIT();
309               return false;
310           #endif
311 mike  1.2 }
312           
313           //
314           // Verify whether the specified namespace is valid
315           //
316           Boolean UserManager::verifyNamespace( const String& myNamespace )
317           {
318 kumpf 1.5     PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::verifyNamespace");
319 mike  1.2 
320               try
321               {
322                   if ( _authHandler->verifyNamespace( myNamespace ))
323                   {
324 kumpf 1.5             PEG_METHOD_EXIT();
325 mike  1.2             return true;
326                   }
327                   else
328                   {
329 kumpf 1.5             PEG_METHOD_EXIT();
330 mike  1.2             return false;
331                   }
332               }
333               catch (Exception& e)
334               {
335 kumpf 1.5         PEG_METHOD_EXIT();
336 mike  1.2         throw e;
337               }
338           }
339           
340           //
341           // Verify whether the specified operation has authorization
342           // to be performed by the specified user.
343           //
344           Boolean UserManager::verifyAuthorization(
345                                       const String& userName,
346                                       const String& nameSpace,
347                                       const String& cimMethodName)
348           {
349 kumpf 1.5     PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::verifyAuthorization");
350 mike  1.2 
351               try
352               {
353                   if ( _authHandler->verifyAuthorization(
354                       userName, nameSpace, cimMethodName ) )
355                   {
356 kumpf 1.5             PEG_METHOD_EXIT();
357 mike  1.2             return true;
358                   }
359                   else
360                   {
361 kumpf 1.5             PEG_METHOD_EXIT();
362 mike  1.2             return false;
363                   }
364               }
365               catch (Exception& e)
366               {
367 kumpf 1.5         PEG_METHOD_EXIT();
368 mike  1.2         throw e;
369               }
370           }
371           
372           //
373           // Set the authorizations
374           //
375           void UserManager::setAuthorization(
376                                       const String& userName,
377                                       const String& myNamespace,
378                                       const String& auth)
379           {
380 kumpf 1.5     PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::setAuthorization");
381 kumpf 1.3 
382 mike  1.2     try
383               {
384                   _authHandler->setAuthorization( userName, myNamespace, auth );
385               }
386               catch (Exception& e)
387               {
388 kumpf 1.5         PEG_METHOD_EXIT();
389 mike  1.2         throw e;
390               }
391 kumpf 1.3 
392 kumpf 1.5     PEG_METHOD_EXIT();
393 mike  1.2 }
394           
395           //
396           // Remove the authorizations for the specified user and namespace
397           //
398           void UserManager::removeAuthorization(
399                                       const String& userName,
400                                       const String& myNamespace)
401           {
402 kumpf 1.5     PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::removeAuthorization");
403 kumpf 1.3 
404 mike  1.2     try
405               {
406                   _authHandler->removeAuthorization( userName, myNamespace);
407               }
408               catch (Exception& e)
409               {
410 kumpf 1.5         PEG_METHOD_EXIT();
411 mike  1.2         throw e;
412               }
413 kumpf 1.3 
414 kumpf 1.5     PEG_METHOD_EXIT();
415 mike  1.2 }
416           
417           
418           //
419           // Get the authorizations for the specified user and namespace
420           //
421           String UserManager::getAuthorization(
422                                       const String& userName,
423                                       const String& myNamespace)
424           {
425 kumpf 1.5     PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::getAuthorization");
426 kumpf 1.3 
427 mike  1.2     String auth = String::EMPTY;
428           
429               try
430               {
431                   auth = _authHandler->getAuthorization( userName, myNamespace);
432               }
433               catch (Exception& e)
434               {
435 kumpf 1.5         PEG_METHOD_EXIT();
436 mike  1.2         throw e;
437               }
438 kumpf 1.3 
439 kumpf 1.5     PEG_METHOD_EXIT();
440 mike  1.2 
441               return auth;
442           }
443           
444           PEGASUS_NAMESPACE_END
445           
446           

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2