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
|