(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               ArrayDestroyer<char> un(userName.allocateCString());
145               if ( !System::isSystemUser( un.getPointer() ) )
146               {
147 kumpf 1.5         PEG_METHOD_EXIT();
148 mike  1.2 	throw InvalidSystemUser(userName); 
149               }
150           
151               // 
152               // Add the user to the password file
153               //
154               try
155               {
156                   _userFileHandler->addUserEntry(userName,password);
157               }
158               catch (Exception& e)
159               {
160 kumpf 1.5         PEG_METHOD_EXIT();
161 mike  1.2 	throw e;
162               }
163 kumpf 1.7 #endif
164 mike  1.2 
165 kumpf 1.5     PEG_METHOD_EXIT();
166 mike  1.2 }
167           
168           //
169           // Modify user's password
170           //
171           void UserManager::modifyUser(
172                          const String& userName,
173           	       const String& password,
174           	       const String& newPassword )
175           {
176 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::modifyUser");
177 mike  1.2 
178 kumpf 1.7 #ifndef PEGASUS_NO_PASSWORDFILE
179 mike  1.2     try
180               {
181                   _userFileHandler->modifyUserEntry(userName, password, newPassword);
182               }
183               catch (Exception& e)
184               {
185 kumpf 1.5         PEG_METHOD_EXIT();
186 mike  1.2 	throw e;
187               }
188 kumpf 1.7 #endif
189           
190 kumpf 1.5     PEG_METHOD_EXIT();
191 mike  1.2 }
192           
193           // 
194           // Remove a user
195           //
196           void UserManager::removeUser(const String& userName)
197           {
198 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::removeUser");
199 kumpf 1.7 
200           #ifndef PEGASUS_NO_PASSWORDFILE
201 mike  1.2     try
202               {
203                   _userFileHandler->removeUserEntry(userName);
204               }
205               catch (Exception& e)
206               {
207 kumpf 1.5         PEG_METHOD_EXIT();
208 mike  1.2 	throw e;
209               }
210 kumpf 1.7 #endif
211 mike  1.2 
212 kumpf 1.5     PEG_METHOD_EXIT();
213 mike  1.2 }
214           
215           
216           //
217           // Get a list of all the user names.
218           //
219           void UserManager::getAllUserNames(Array<String>& userNames)
220           {
221 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::getAllUserNames");
222 mike  1.2 
223 kumpf 1.7 #ifndef PEGASUS_NO_PASSWORDFILE
224 mike  1.2     try
225               {
226                   _userFileHandler->getAllUserNames( userNames );
227 kumpf 1.5         PEG_METHOD_EXIT();
228 mike  1.2     }
229               catch (Exception& e)
230               {
231           	throw e;
232               }
233 kumpf 1.7 #endif
234 mike  1.2 
235 kumpf 1.5     PEG_METHOD_EXIT();
236 mike  1.2 }
237           
238           //
239           // Verify whether the specified CIM user is valid
240           //
241           Boolean UserManager::verifyCIMUser (const String& userName)
242           {
243 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::verifyCIMUser");
244 mike  1.2 
245 kumpf 1.7 #ifndef PEGASUS_NO_PASSWORDFILE
246 mike  1.2     try
247               {
248                   if ( _userFileHandler->verifyCIMUser( userName ))
249           	{
250 kumpf 1.5             PEG_METHOD_EXIT();
251 mike  1.2 	    return true;
252                   }
253           	else
254           	{
255 kumpf 1.5             PEG_METHOD_EXIT();
256 mike  1.2 	    return false;
257                   }
258               }
259 kumpf 1.4     catch (InvalidUser& iu)
260               {
261 kumpf 1.5         PEG_METHOD_EXIT();
262 kumpf 1.4 	throw iu;
263               }
264 mike  1.2     catch (Exception& e)
265               {
266 kumpf 1.5         PEG_METHOD_EXIT();
267 mike  1.2 	throw e;
268               }
269 kumpf 1.7 #else
270               PEG_METHOD_EXIT();
271               return false;
272           #endif
273 mike  1.2 }
274           
275           //
276           // Verify whether the specified user's password is valid
277           //
278           Boolean UserManager::verifyCIMUserPassword (
279           			   const String& userName, 
280           			   const String& password)
281           {
282 kumpf 1.5     PEG_METHOD_ENTER(TRC_USER_MANAGER, "UserManager::verifyCIMUserPassword");
283 mike  1.2 
284 kumpf 1.7 #ifndef PEGASUS_NO_PASSWORDFILE
285 mike  1.2     try
286               {
287                   if ( _userFileHandler->verifyCIMUserPassword( userName, password ))
288           	{
289 kumpf 1.5             PEG_METHOD_EXIT();
290 mike  1.2 	    return true;
291                   }
292           	else
293           	{
294 kumpf 1.5             PEG_METHOD_EXIT();
295 mike  1.2 	    return false;
296                   }
297 kumpf 1.4     }
298               catch (InvalidUser& iu)
299               {
300 kumpf 1.5         PEG_METHOD_EXIT();
301 kumpf 1.4 	throw iu;
302 mike  1.2     }
303               catch (Exception& e)
304               {
305 kumpf 1.5         PEG_METHOD_EXIT();
306 mike  1.2 	throw e;
307               }
308 kumpf 1.7 #else
309               PEG_METHOD_EXIT();
310               return false;
311           #endif
312 mike  1.2 }
313           
314           //
315           // Verify whether the specified namespace is valid
316           //
317           Boolean UserManager::verifyNamespace( const String& myNamespace )
318           {
319 kumpf 1.5     PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::verifyNamespace");
320 mike  1.2 
321               try
322               {
323                   if ( _authHandler->verifyNamespace( myNamespace ))
324                   {
325 kumpf 1.5             PEG_METHOD_EXIT();
326 mike  1.2             return true;
327                   }
328                   else
329                   {
330 kumpf 1.5             PEG_METHOD_EXIT();
331 mike  1.2             return false;
332                   }
333               }
334               catch (Exception& e)
335               {
336 kumpf 1.5         PEG_METHOD_EXIT();
337 mike  1.2         throw e;
338               }
339           }
340           
341           //
342           // Verify whether the specified operation has authorization
343           // to be performed by the specified user.
344           //
345           Boolean UserManager::verifyAuthorization(
346                                       const String& userName,
347                                       const String& nameSpace,
348                                       const String& cimMethodName)
349           {
350 kumpf 1.5     PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::verifyAuthorization");
351 mike  1.2 
352               try
353               {
354                   if ( _authHandler->verifyAuthorization(
355                       userName, nameSpace, cimMethodName ) )
356                   {
357 kumpf 1.5             PEG_METHOD_EXIT();
358 mike  1.2             return true;
359                   }
360                   else
361                   {
362 kumpf 1.5             PEG_METHOD_EXIT();
363 mike  1.2             return false;
364                   }
365               }
366               catch (Exception& e)
367               {
368 kumpf 1.5         PEG_METHOD_EXIT();
369 mike  1.2         throw e;
370               }
371           }
372           
373           //
374           // Set the authorizations
375           //
376           void UserManager::setAuthorization(
377                                       const String& userName,
378                                       const String& myNamespace,
379                                       const String& auth)
380           {
381 kumpf 1.5     PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::setAuthorization");
382 kumpf 1.3 
383 mike  1.2     try
384               {
385                   _authHandler->setAuthorization( userName, myNamespace, auth );
386               }
387               catch (Exception& e)
388               {
389 kumpf 1.5         PEG_METHOD_EXIT();
390 mike  1.2         throw e;
391               }
392 kumpf 1.3 
393 kumpf 1.5     PEG_METHOD_EXIT();
394 mike  1.2 }
395           
396           //
397           // Remove the authorizations for the specified user and namespace
398           //
399           void UserManager::removeAuthorization(
400                                       const String& userName,
401                                       const String& myNamespace)
402           {
403 kumpf 1.5     PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::removeAuthorization");
404 kumpf 1.3 
405 mike  1.2     try
406               {
407                   _authHandler->removeAuthorization( userName, myNamespace);
408               }
409               catch (Exception& e)
410               {
411 kumpf 1.5         PEG_METHOD_EXIT();
412 mike  1.2         throw e;
413               }
414 kumpf 1.3 
415 kumpf 1.5     PEG_METHOD_EXIT();
416 mike  1.2 }
417           
418           
419           //
420           // Get the authorizations for the specified user and namespace
421           //
422           String UserManager::getAuthorization(
423                                       const String& userName,
424                                       const String& myNamespace)
425           {
426 kumpf 1.5     PEG_METHOD_ENTER(TRC_AUTHORIZATION, "UserManager::getAuthorization");
427 kumpf 1.3 
428 mike  1.2     String auth = String::EMPTY;
429           
430               try
431               {
432                   auth = _authHandler->getAuthorization( userName, myNamespace);
433               }
434               catch (Exception& e)
435               {
436 kumpf 1.5         PEG_METHOD_EXIT();
437 mike  1.2         throw e;
438               }
439 kumpf 1.3 
440 kumpf 1.5     PEG_METHOD_EXIT();
441 mike  1.2 
442               return auth;
443           }
444           
445           PEGASUS_NAMESPACE_END
446           
447           

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2