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
|