1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22 /*
23 * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 */
26
27 #pragma ident "%Z%%M% %I% %E% SMI"
28
29 #include <errno.h>
30 #include "Solaris_NFSShareSecurityModes.h"
31 #include "nfs_keys.h"
32 #include "nfs_providers_msgstrings.h"
33 #include "nfs_provider_names.h"
34 #include "messageStrings.h"
35 #include "util.h"
36 #include "common_functions.h"
37 #include "createprop_methods.h"
38 #include "libfsmgt.h"
39
40
41 /*
42 * Private method declarations
43 */
44
45 static CCIMInstanceList *get_associated_nfsShare_instList(
46 CCIMObjectPath *nfsShareOP);
47 static CCIMInstanceList *get_associated_nfsShareSec_instList(
48 CCIMObjectPath *nfsShareSecOP);
49 static CCIMObjectPathList *get_associated_nfsShareSec_OPList(
50 CCIMObjectPath *nfsShareSecOP, int *err);
51 static CCIMObjectPath *get_Solaris_NFSShare_OP(char *nameKey);
52 static CCIMObjectPath *get_Solaris_NFSShareSec_OP(char *, char *);
53 static CCIMInstanceList *update_list_with_secMode_inst(
54 CCIMObjectPath *nfsShareOP,
55 CCIMInstanceList *shareSecModeInstList);
56
57 /*
58 * Public methods
59 */
60 /*
61 * Instance provider methods
62 */
63
64 /*
65 * Method: cp_createInstance_Solaris_NFSShareSecurityModes
66 *
67 * This method is not supported. In order for a Solaris_NFSShareSecurityModes
68 * association to exist a corresponding Solaris_NFSShare and
69 * Solaris_NFSShareSecurity must already exist.
70 */
71 /* ARGSUSED */
72 CCIMObjectPath *
cp_createInstance_Solaris_NFSShareSecurityModes(CCIMObjectPath * pOP,CCIMInstance * pInst)73 cp_createInstance_Solaris_NFSShareSecurityModes(CCIMObjectPath *pOP,
74 CCIMInstance *pInst) {
75
76 int err = 0;
77
78 util_handleError("SOLARIS_NFSSHARESECMODES::CREATE_INSTANCE",
79 CIM_ERR_NOT_SUPPORTED, NULL, NULL, &err);
80
81 return ((CCIMObjectPath *)NULL);
82 } /* cp_createInstance_Solaris_NFSShareSecurityModes */
83
84 /*
85 * Method: cp_deleteInstance_Solaris_NFSShareSecurityModes
86 *
87 * This method is not supported. In order for a Solaris_NFSShareSecurityModes
88 * association to be deleted a corresponding Solaris_NFSShare and
89 * Solaris_NFSShareSecurity must be deleted. The Solaris_NFSShare and
90 * Solaris_NFSShareSecurity should only be deleted through those providers.
91 */
92 /* ARGSUSED */
93 CIMBool
cp_deleteInstance_Solaris_NFSShareSecurityModes(CCIMObjectPath * pOP)94 cp_deleteInstance_Solaris_NFSShareSecurityModes(CCIMObjectPath *pOP) {
95 int err = 0;
96
97 util_handleError("SOLARIS_NFSSHARESECMODES::DELETE_INSTANCE",
98 CIM_ERR_NOT_SUPPORTED, NULL, NULL, &err);
99
100 return (cim_false);
101 } /* cp_deleteInstance_Solaris_NFSShareSecurityModes */
102
103 /*
104 * Method: cp_enumInstances_Solaris_NFSShareSecurityModes
105 *
106 * Description: Enumerates the instances of Solaris_NFSShareSecurityModes
107 * on a host. An instance of Solaris_NFSShareSecurityModes is an
108 * association that links a share to it's share security entry.
109 *
110 * Parameters:
111 * - CCIMObjectPath *pOP - An object path containing the name of
112 * the class of which to enumerate the instances of.
113 *
114 * Return Value:
115 * - A pointer to a list of Solaris_NFSShareSecurityModes instances.
116 * - NULL if an error occurred or if there are no instances of
117 * Solaris_NFSShareSecurityModes on the host. In the case of an
118 * error, the error will be logged.
119 */
120
121 CCIMInstanceList *
cp_enumInstances_Solaris_NFSShareSecurityModes(CCIMObjectPath * pOP)122 cp_enumInstances_Solaris_NFSShareSecurityModes(CCIMObjectPath *pOP) {
123 CCIMInstanceList *shareSecModeInstList;
124 CCIMObjectPathList *nfsShareOPList;
125 CCIMObjectPathList *tmpOPList;
126 CCIMObjectPath *nfsShareOP;
127 CCIMException *ex;
128 int err = 0;
129
130 if (pOP == NULL) {
131 util_handleError("SOLARIS_NFSSHARESECMODES::ENUM_INSTANCES",
132 CIM_ERR_INVALID_PARAMETER, NULL, NULL, &err);
133 return ((CCIMInstanceList *)NULL);
134 }
135
136 nfsShareOP = cim_createEmptyObjectPath(SOLARIS_NFSSHARE);
137 if (nfsShareOP == NULL) {
138 ex = cim_getLastError();
139 util_handleError("SOLARIS_NFSSHARESECMODES::ENUM_INSTANCES",
140 CIM_ERR_FAILED, CREATE_EMPTY_OBJPATH_FAILURE, ex,
141 &err);
142 return ((CCIMInstanceList *)NULL);
143 }
144
145 nfsShareOPList = cimom_enumerateInstanceNames(nfsShareOP, cim_false);
146 if (nfsShareOPList == NULL) {
147 ex = cim_getLastError();
148 util_handleError("SOLARIS_NFSSHARESECMODES::ENUM_INSTANCES",
149 CIM_ERR_FAILED, CIMOM_ENUM_INSTNAMES_FAILURE, ex, &err);
150 cim_freeObjectPath(nfsShareOP);
151 return ((CCIMInstanceList *)NULL);
152 }
153
154 cim_freeObjectPath(nfsShareOP);
155
156
157 if (nfsShareOPList->mDataObject == NULL) {
158 cim_freeObjectPathList(nfsShareOPList);
159 return ((CCIMInstanceList *)NULL);
160 }
161
162 shareSecModeInstList = cim_createInstanceList();
163 if (shareSecModeInstList == NULL) {
164 ex = cim_getLastError();
165 util_handleError("SOLARIS_NFSSHARESECMODES::ENUM_INSTANCES",
166 CIM_ERR_FAILED, CREATE_INSTANCE_LIST_FAILURE, ex, &err);
167 cim_freeObjectPathList(nfsShareOPList);
168 return ((CCIMInstanceList *)NULL);
169 }
170
171
172 for (tmpOPList = nfsShareOPList; tmpOPList != NULL;
173 tmpOPList = tmpOPList->mNext) {
174 shareSecModeInstList = update_list_with_secMode_inst(
175 tmpOPList->mDataObject, shareSecModeInstList);
176 if (shareSecModeInstList == NULL) {
177 cim_freeObjectPathList(nfsShareOPList);
178 return ((CCIMInstanceList *)NULL);
179 }
180 }
181 cim_freeObjectPathList(nfsShareOPList);
182 return (shareSecModeInstList);
183 } /* cp_enumInstances_Solaris_NFSShareSecurityModes */
184
185 /*
186 * Method: cp_enumInstanceNames_Solaris_NFSShareSecurityModes
187 *
188 * Description: Enumerates all of the instances of
189 * Solaris_NFSShareSecurityModes on the host.
190 *
191 * Parameters:
192 * - CCIMObjectPath* pOP - An object path containing the name of the
193 * class of which to enumerate instances of.
194 *
195 * Returns:
196 * - A pointer to a list of Solaris_NFSShareSecurityModes object paths.
197 * - NULL if an error occurred or if there are no NFS mounts on the host.
198 * In the case of an error, the error will be logged.
199 */
200
201 CCIMObjectPathList *
cp_enumInstanceNames_Solaris_NFSShareSecurityModes(CCIMObjectPath * pOP)202 cp_enumInstanceNames_Solaris_NFSShareSecurityModes(CCIMObjectPath *pOP) {
203 CCIMInstanceList *instList;
204 CCIMObjectPathList *OPList;
205 CCIMException *ex;
206 int err = 0;
207
208 /*
209 * First check if pOP is null.
210 */
211 if (pOP == NULL) {
212 util_handleError(
213 "SOLARIS_NFSSHARESECMODES::ENUM_INSTANCENAMES",
214 CIM_ERR_INVALID_PARAMETER, NULL, NULL, &err);
215 return ((CCIMObjectPathList *)NULL);
216 }
217
218 instList = cp_enumInstances_Solaris_NFSShareSecurityModes(pOP);
219 if (instList == NULL) {
220 /*
221 * Either an error occurred or we don't have any
222 * Solaris_NFSShareSecurityModes instances on the host.
223 */
224 return ((CCIMObjectPathList *)NULL);
225 }
226
227 OPList = cim_createObjectPathList(instList);
228 if (OPList == NULL) {
229 ex = cim_getLastError();
230 util_handleError(
231 "SOLARIS_NFSSHARESECMODES::ENUM_INSTANCENAMES",
232 CIM_ERR_FAILED, CREATE_OBJECT_LIST_FAILURE, ex, &err);
233 }
234
235 cim_freeInstanceList(instList);
236 return (OPList);
237 } /* cp_enumInstanceNames_Solaris_NFSShareSecurityModes */
238
239 /*
240 * Method: cp_execQuery_Solaris_NFSShareSecurityModes
241 *
242 * Description: Queries the Solaris_NFSShareSecurityModes instances on the
243 * host to find those that meet the search criteria.
244 *
245 * Parameters:
246 * - CCIMObjectPath *pOP - An object path containing the name of
247 * the class of which to query.
248 * - char *selectClause - Not used.
249 * - char *nonJoinExp - Not used.
250 * - char *queryExp - Not used.
251 * - char *queryLang - Not used.
252 *
253 * Returns:
254 * - A pointer to a list of Solaris_NFSShareSecurityModes instances
255 * that match the search criteria.
256 * - NULL if an error occurred or if there are no
257 * Solaris_NFSShareSecurityModes instances matching the search criteria.
258 * in case of an error, the error will be logged.
259 */
260 /* ARGSUSED */
261 CCIMInstanceList *
cp_execQuery_Solaris_NFSShareSecurityModes(CCIMObjectPath * pOP,char * selectClause,char * nonJoinExp,char * queryExp,char * queryLang)262 cp_execQuery_Solaris_NFSShareSecurityModes(CCIMObjectPath *pOP,
263 char *selectClause, char *nonJoinExp, char *queryExp,
264 char *queryLang) {
265
266 CCIMInstance *emptyInst;
267 CCIMInstanceList *shareSecModeInstList;
268 CCIMException *ex;
269 int err = 0;
270
271 if (pOP == NULL) {
272 util_handleError("SOLARIS_NFSSHARESECMODES::EXEC_QUERY",
273 CIM_ERR_INVALID_PARAMETER, NULL, NULL, &err);
274 return ((CCIMInstanceList *)NULL);
275 }
276
277 shareSecModeInstList =
278 cp_enumInstances_Solaris_NFSShareSecurityModes(pOP);
279 if (shareSecModeInstList == NULL) {
280 return ((CCIMInstanceList *)NULL);
281 }
282
283 emptyInst = cim_createInstance("");
284 if (emptyInst == NULL) {
285 ex = cim_getLastError();
286 util_handleError("SOLARIS_NFSSHARESECMODES::EXEC_QUERY",
287 CIM_ERR_FAILED, CREATE_INSTANCE_FAILURE, ex, &err);
288 cim_freeInstanceList(shareSecModeInstList);
289 return ((CCIMInstanceList *)NULL);
290 }
291
292 shareSecModeInstList = cim_prependInstance(shareSecModeInstList,
293 emptyInst);
294 if (shareSecModeInstList == NULL) {
295 ex = cim_getLastError();
296 util_handleError("SOLARIS_NFSSHARESECMODES::EXEC_QUERY",
297 CIM_ERR_FAILED, PREPEND_INSTANCE_FAILURE, ex, &err);
298 cim_freeInstance(emptyInst);
299 return ((CCIMInstanceList *)NULL);
300 }
301
302 return (shareSecModeInstList);
303 } /* cp_execQuery_Solaris_NFSShareSecurityModes */
304
305 /*
306 * Method: cp_getInstance_Solaris_NFSShareSecurityModes
307 *
308 * Description: Gets the instance corresponding to the
309 * Solaris_NFSShareSecurityModes object path passed in.
310 *
311 * Parameters:
312 * - CCIMObjectPath* pOP - An object path containing all the keys of
313 * the instance that is supposed to be returned.
314 *
315 * Returns:
316 * - A pointer to the Solaris_NFSShareSecurityModes instance corresponding
317 * to the object path parameter.
318 * - NULL if an error occurred or if the instance doesn't exist. In the
319 * case of an error the error is logged.
320 */
321 CCIMInstance *
cp_getInstance_Solaris_NFSShareSecurityModes(CCIMObjectPath * pOP)322 cp_getInstance_Solaris_NFSShareSecurityModes(CCIMObjectPath *pOP) {
323 CCIMInstanceList *instList;
324 CCIMInstance *inst;
325 CCIMObjectPath *settingOP;
326 CCIMObjectPath *elementOP;
327 CCIMPropertyList *shareSecModesPropList;
328 int err = 0;
329
330 if (pOP == NULL) {
331 util_handleError("SOLARIS_NFSSHARESECMODES::GET_INSTANCE",
332 CIM_ERR_INVALID_PARAMETER, NULL, NULL, &err);
333 return ((CCIMInstance *)NULL);
334 }
335
336 /*
337 * Make sure the key values passed in are populated.
338 */
339 shareSecModesPropList = pOP->mKeyProperties;
340 settingOP = util_getKeyValue(shareSecModesPropList,
341 shareSecModeProps[SETTING].type, shareSecModeProps[SETTING].name,
342 &err);
343 elementOP = util_getKeyValue(shareSecModesPropList,
344 shareSecModeProps[ELEMENT].type, shareSecModeProps[ELEMENT].name,
345 &err);
346
347 if (settingOP == NULL || elementOP == NULL ||
348 settingOP->mKeyProperties == NULL ||
349 elementOP->mKeyProperties == NULL) {
350 util_handleError("SOLARIS_NFSSHARESECMODES::GET_INSTANCE",
351 CIM_ERR_INVALID_PARAMETER, NULL, NULL, &err);
352 return ((CCIMInstance *)NULL);
353 }
354
355 instList = cp_enumInstances_Solaris_NFSShareSecurityModes(pOP);
356 if (instList == NULL) {
357 /*
358 * Either an error occurred or we simply don't have any
359 * instances of Solaris_NFSShareSecurityModes on the system.
360 * In the case that an error occurred, it will be handled in
361 * cp_enumInstances_Solaris_NFSShareSecurityModes.
362 */
363 return ((CCIMInstance *)NULL);
364 }
365
366 inst = cim_getInstance(instList, pOP);
367
368 cim_freeInstanceList(instList);
369 return (inst);
370 } /* cp_getInstance_Solaris_NFSShareSecurityModes */
371
372 /*
373 * Method: cp_setInstance_Solaris_NFSShareSecurityModes
374 *
375 * Not Supported: Inorder to change the properties of a
376 * Solaris_NFSShareSecurityModes instance on the host the Solaris_NFSShare and
377 * Solaris_NFSShareSecurity instances would have to be changed. These changes
378 * must be done in the providers for Solaris_NFSShare and
379 * Solaris_NFSShareSecurity.
380 */
381 /* ARGSUSED */
382 CIMBool
cp_setInstance_Solaris_NFSShareSecurityModes(CCIMObjectPath * pOP,CCIMInstance * pInst,char ** props,int num_props)383 cp_setInstance_Solaris_NFSShareSecurityModes(CCIMObjectPath *pOP,
384 CCIMInstance *pInst, char **props, int num_props) {
385
386 int err = 0;
387
388 util_handleError("SOLARIS_NFSSHAREDEFSECMODES::SET_INSTANCE",
389 CIM_ERR_NOT_SUPPORTED, NULL, NULL, &err);
390
391 return (cim_false);
392 } /* cp_setInstance_Solaris_NFSShareDefSecurityModes */
393
394 /*
395 * Method: cp_setInstanceWithList_Solaris_NFSShareSecurityModes
396 *
397 * Not Supported: Inorder to change the properties of a
398 * Solaris_NFSShareSecurityModes instance on the host the Solaris_NFSShare and
399 * Solaris_NFSShareSecurity instances would have to be changed. These changes
400 * must be done in the providers for Solaris_NFSShare and
401 * Solaris_NFSShareSecurity.
402 */
403 /* ARGSUSED */
404 CIMBool
cp_setInstanceWithList_Solaris_NFSShareSecurityModes(CCIMObjectPath * pOP,CCIMInstance * pInst,char ** props,int num_props)405 cp_setInstanceWithList_Solaris_NFSShareSecurityModes(CCIMObjectPath *pOP,
406 CCIMInstance *pInst, char **props, int num_props) {
407
408 int err = 0;
409
410 util_handleError("SOLARIS_NFSSHARESECMODES::SET_INSTANCE",
411 CIM_ERR_NOT_SUPPORTED, NULL, NULL, &err);
412
413 return (cim_false);
414 } /* cp_setInstanceWithList_Solaris_NFSShareSecurityModes */
415
416 /*
417 * Association provider methods
418 */
419 /*
420 * Method: cp_associators_Solaris_NFSShareSecurityModes
421 *
422 * Description: Returns the instances associated with the pObjectName
423 * parameter via the Solaris_NFSShareSecurityModes association.
424 *
425 * Parameters:
426 * - CCIMObjectPath *pAssocName - An object path containing the name of
427 * the association that the caller is trying to reach.
428 * - CCIMObjectPath *pObjectName - The object path containing information
429 * (Class Name, Key Properties) about the object whose associated objects
430 * are to be returned.
431 * - char *pResultClass - If specified, only return instances that are of
432 * this class type.
433 * - char *pRole - If specified, this is the role of the pObjectName
434 * object path passed in. If this is not valid, NULL is returned.
435 * - char *pResultRole - If specified, only return instances that are
436 * playing this role in the association.
437 *
438 * Returns:
439 * - A pointer to a list of Solaris_NFSShareSecurity (if pRole ==
440 * Element && pObjectName is a Solaris_NFSShare object path) or
441 * Solaris_NFSShare (if pRole == Setting && pObjectName is a
442 * Solaris_NFSShareSecurity object path) instances which are associated to
443 * the pObjectName parameter.
444 * - NULL if an error occurred or if there are no instances associated to
445 * the pObjectName passed in. In the case of an error, the error will be
446 * logged.
447 */
448 /* ARGSUSED */
449 CCIMInstanceList *
cp_associators_Solaris_NFSShareSecurityModes(CCIMObjectPath * pAssocName,CCIMObjectPath * pObjectName,char * pResultClass,char * pRole,char * pResultRole)450 cp_associators_Solaris_NFSShareSecurityModes(CCIMObjectPath *pAssocName,
451 CCIMObjectPath *pObjectName, char *pResultClass, char *pRole,
452 char *pResultRole) {
453
454 CCIMInstanceList *returnInstList;
455 int err = 0;
456
457 if (pObjectName == NULL || pObjectName->mKeyProperties == NULL) {
458 util_handleError("SOLARIS_NFSSHARESECMODES::ASSOCIATORS",
459 CIM_ERR_INVALID_PARAMETER, NULL, NULL, &err);
460 return ((CCIMInstanceList *)NULL);
461 }
462
463 /*
464 * Determine whether pObjectname is the Element or the Setting of the
465 * association. Element = Solaris_NFSShare,
466 * Setting = Solaris_NFSShareSecurity.
467 */
468 if ((strcasecmp(pObjectName->mName, SOLARIS_NFSSHARE) == 0)) {
469 if (pRole != NULL && (strcasecmp(pRole,
470 shareSecModeProps[ELEMENT].name) != 0)) {
471 util_handleError(
472 "SOLARIS_NFSSHARESECMODES::ASSOCIATORS",
473 CIM_ERR_INVALID_PARAMETER, NULL, NULL,
474 &err);
475 return ((CCIMInstanceList *)NULL);
476 }
477 returnInstList = get_associated_nfsShareSec_instList(
478 pObjectName);
479 } else if (strcasecmp(pObjectName->mName,
480 SOLARIS_NFSSHARESECURITY) == 0) {
481 if (pRole != NULL && (strcasecmp(pRole,
482 shareSecModeProps[SETTING].name) != 0)) {
483 util_handleError(
484 "SOLARIS_NFSSHARESECMODES::ASSOCIATORS",
485 CIM_ERR_INVALID_PARAMETER, NULL, NULL,
486 &err);
487 return ((CCIMInstanceList *)NULL);
488 }
489 returnInstList = get_associated_nfsShare_instList(pObjectName);
490 } else {
491 util_handleError("SOLARIS_NFSSHARESECMODES::ASSOCIATORS",
492 CIM_ERR_INVALID_PARAMETER, NULL, NULL, &err);
493 return ((CCIMInstanceList *)NULL);
494 }
495
496 return (returnInstList);
497 } /* cp_associators_Solaris_NFSShareSecurityModes */
498
499 /*
500 * Method:cp_associatorNames_Solaris_NFSShareSecurityModes
501 *
502 * Description: Returns the object paths of the instances on the other side
503 * of the association. These are associated via the
504 * Solaris_NFSShareSecurityModes association and have the opposite key
505 * passed in as the parameter(pObjectName).
506 *
507 * Parameters:
508 * - CCIMObjectPath *pAssocName - An object path containing information
509 * about the association that the caller is trying to reach.
510 * - CCIMObjectPath *pObjectName - The object path which contains the
511 * information on whose associated objects are to be returned.
512 * - char *pResultClass - If specified, only return instances that are of
513 * this class type.
514 * - char *pRole - If specified, this is the role of the pObjectName
515 * object path passed in. If this is not valid, NULL is returned.
516 * - char *pResultRole - If specified, only return instances that are
517 * playing this role in the association.
518 *
519 * Returns:
520 * - A pointer to a list of Solaris_NFSShareSecurity (if Role ==
521 * Element and pObjectName is a Solaris_NFSShare object path) or
522 * Solaris_NFSShare (if Role == Setting and pObjectName is a
523 * Solaris_NFSShareSecurity object path) object paths which are
524 * associated to the pObjectName parameter.
525 * - NULL if an error occurred or if there are no instances associated to
526 * the pObjectName passed in. In the case of an error, the error will be
527 * logged.
528 */
529 CCIMObjectPathList *
cp_associatorNames_Solaris_NFSShareSecurityModes(CCIMObjectPath * pAssocName,CCIMObjectPath * pObjectName,char * pResultClass,char * pRole,char * pResultRole)530 cp_associatorNames_Solaris_NFSShareSecurityModes(CCIMObjectPath *pAssocName,
531 CCIMObjectPath *pObjectName, char *pResultClass, char *pRole,
532 char *pResultRole) {
533
534 CCIMInstanceList *instList;
535 CCIMObjectPathList *objPathList = NULL;
536 int err = 0;
537
538 if (pObjectName == NULL || pObjectName->mKeyProperties == NULL) {
539 util_handleError("SOLARIS_NFSSHARESECMODES::ASSOCIATOR_NAMES",
540 CIM_ERR_INVALID_PARAMETER, NULL, NULL, &err);
541 } else {
542 instList =
543 cp_associators_Solaris_NFSShareSecurityModes(pAssocName,
544 pObjectName, pResultClass, pRole, pResultRole);
545 if (instList != NULL) {
546 objPathList = cim_createObjectPathList(instList);
547 cim_freeInstanceList(instList);
548 }
549 }
550 return (objPathList);
551 } /* cp_associatorNames_Solaris_NFSShareSecurityModes */
552
553 /*
554 * Method: cp_references_Solaris_NFSShareSecurityModes
555 *
556 * Description: Returns the Solaris_NFSShareSecurityModes instances that have
557 * the passed in parameter, pObjectName, as one of it's keys.
558 *
559 * Parameters:
560 * - CCIMObjectPath *pAssocName - An object path containing information
561 * about the association that the caller is trying to reach.
562 * - CCIMObjectPath *pObjectName - The object path which contains the
563 * information on whose associated objects are to be returned.
564 * - char *pRole - If specified, this is the role of the pObjectName
565 * object path passed in. If this is not valid, NULL is returned.
566 *
567 * Returns:
568 * - A pointer to a list of Solaris_NFSShareSecurityModes instances.
569 * - NULL if an error occurred or if there are no
570 * Solaris_NFSShareSecurityModes instances having pObjectName as one of
571 * it's keys.
572 */
573 CCIMInstanceList *
cp_references_Solaris_NFSShareSecurityModes(CCIMObjectPath * pAssocName,CCIMObjectPath * pObjectName,char * pRole)574 cp_references_Solaris_NFSShareSecurityModes(CCIMObjectPath *pAssocName,
575 CCIMObjectPath *pObjectName, char *pRole) {
576
577 CCIMInstanceList *instList;
578 CCIMObjectPathList *objPathList;
579 int err = 0;
580
581 if (pObjectName == NULL || pObjectName->mKeyProperties == NULL) {
582 util_handleError("SOLARIS_NFSSHARESECMODES::REFERENCES",
583 CIM_ERR_INVALID_PARAMETER, NULL, NULL, &err);
584 return ((CCIMInstanceList *)NULL);
585 }
586
587
588 /*
589 * Get everything that is related to the pObjectName passed in.
590 */
591 objPathList = cp_associatorNames_Solaris_NFSShareSecurityModes(
592 pAssocName, pObjectName, NULL, pRole, NULL);
593 if (objPathList == NULL) {
594 return ((CCIMInstanceList *)NULL);
595 }
596
597 /*
598 * Determine whether pObjectname is the Element or the Setting of the
599 * association. Element = Solaris_NFSShare,
600 * Setting = Solaris_NFSShareSecurity.
601 */
602 if ((strcasecmp(pObjectName->mName, SOLARIS_NFSSHARE) == 0)) {
603 instList = create_association_instList(
604 SOLARIS_NFSSHARESECMODES, pObjectName,
605 shareSecModeProps[ELEMENT].name, objPathList,
606 shareSecModeProps[SETTING].name, &err);
607 } else {
608 instList =
609 create_association_instList(SOLARIS_NFSSHARESECMODES,
610 pObjectName, shareSecModeProps[SETTING].name,
611 objPathList, shareSecModeProps[ELEMENT].name, &err);
612 }
613 cim_freeObjectPathList(objPathList);
614
615 return (instList);
616 } /* cp_references_Solaris_NFSShareSecurityModes */
617
618 /*
619 * Method: cp_referenceNames_Solaris_NFSShareSecurityModes
620 *
621 * Description: Returns the Solaris_NFSShareSecurityModes object paths for
622 * the instances that have the passed in parameter (pObjectName, as one of
623 * it's keys.
624 *
625 * Parameters:
626 * - CCIMObjectPath *pAssocName - An object path containing information
627 * about the association that the caller is trying to reach.
628 * - CCIMObjectPath *pObjectName - The object path which contains the
629 * information on whose associated objects are to be returned.
630 * - char *pRole - If specified, this is the role of the pObjectName
631 * object path passed in. If this is not valid, NULL is returned.
632 *
633 * Returns:
634 * - A pointer to a list of Solaris_NFSShareSecurityModes object paths.
635 * - NULL if there was an error or if there are no
636 * Solaris_NFSShareSecurityModes instances having pObjectName as one of
637 * it's keys.
638 */
639 CCIMObjectPathList *
cp_referenceNames_Solaris_NFSShareSecurityModes(CCIMObjectPath * pAssocName,CCIMObjectPath * pObjectName,char * pRole)640 cp_referenceNames_Solaris_NFSShareSecurityModes(CCIMObjectPath *pAssocName,
641 CCIMObjectPath *pObjectName, char *pRole) {
642
643 CCIMInstanceList *shareSecModeInstList;
644 CCIMObjectPathList *shareSecModeOPList;
645 int err = 0;
646
647 if (pObjectName == NULL || pObjectName->mKeyProperties == NULL) {
648 util_handleError("SOLARIS_NFSSHARESECMODES::REFERENCE_NAMES",
649 CIM_ERR_INVALID_PARAMETER, NULL, NULL, &err);
650 return ((CCIMInstanceList *)NULL);
651 }
652
653 shareSecModeInstList =
654 cp_references_Solaris_NFSShareSecurityModes(pAssocName,
655 pObjectName, pRole);
656
657 if (shareSecModeInstList == NULL) {
658 return ((CCIMObjectPathList *)NULL);
659 }
660
661 shareSecModeOPList = cim_createObjectPathList(shareSecModeInstList);
662
663 cim_freeInstanceList(shareSecModeInstList);
664
665 return (shareSecModeOPList);
666 } /* cp_referenceNames_Solaris_NFSShareSecurityModes */
667
668 /*
669 * Property provider methods
670 */
671
672 /*
673 * Method: cp_getProperty_Solaris_NFSShareSecurityModes
674 *
675 * Description: Retrieves the property, described by the parameter pOP, from
676 * the instance of Solaris_NFSShareSecurityModes on the host.
677 *
678 * Parameters:
679 * - CCIMObjectPath *pOP - The object path containing all the
680 * information needed to find the instance in which the property is to
681 * be returned.
682 * - cimchar *pPropName - The name of the property to be found.
683 *
684 * Returns:
685 * - A pointer to the property corresponding to the name passed in with
686 * pPropName.
687 * - NULL if an error occurred or if the property doesn't exist. In the
688 * case of an error, the error will be logged.
689 */
690 CCIMProperty *
cp_getProperty_Solaris_NFSShareSecurityModes(CCIMObjectPath * pOP,cimchar * pPropName)691 cp_getProperty_Solaris_NFSShareSecurityModes(CCIMObjectPath *pOP,
692 cimchar *pPropName) {
693
694 CCIMInstance *shareSecModeInst;
695 CCIMProperty *shareSecModeProp;
696 int err = 0;
697
698 if (pOP == NULL) {
699 util_handleError("SOLARIS_NFSSHARESECMODES::GET_PROPERTY",
700 CIM_ERR_INVALID_PARAMETER, NULL, NULL, &err);
701 return ((CCIMProperty *)NULL);
702 }
703
704 shareSecModeInst = cp_getInstance_Solaris_NFSShareSecurityModes(pOP);
705 if (shareSecModeInst == NULL) {
706 return ((CCIMProperty *)NULL);
707 }
708
709 shareSecModeProp = cim_getProperty(shareSecModeInst, pPropName);
710 cim_freeInstance(shareSecModeInst);
711
712 return (shareSecModeProp);
713 } /* cp_getProperty_Solaris_NFSShareSecurityModes */
714
715 /*
716 * Method: cp_setProperty_Solaris_NFSShareSecurityModes
717 *
718 * This method is not supported. This is not allowed because in
719 * order to change the properties a Solaris_NFSShareSecurityModes on
720 * the host, the Solaris_NFSShare and Solaris_NFSShareSecurity must
721 * be changed. Any changes to Solaris_NFSShare and Solaris_NFSShareSecurity
722 * need to be done in those providers.
723 */
724 /* ARGSUSED */
725 CIMBool
cp_setProperty_Solaris_NFSShareSecurityModes(CCIMObjectPath * pOP,CCIMProperty * pProp)726 cp_setProperty_Solaris_NFSShareSecurityModes(
727 CCIMObjectPath *pOP,
728 CCIMProperty *pProp) {
729
730 int err = 0;
731
732 util_handleError("SOLARIS_NFSSHARESECMODES::SET_PROPERTY",
733 CIM_ERR_NOT_SUPPORTED, NULL, NULL, &err);
734
735 return (cim_false);
736 } /* cp_setProperty_Solaris_NFSShareSecurityModes */
737
738 /*
739 * Method provider methods
740 */
741
742 /*
743 * Method: cp_invokeMethod_Solaris_NFSShareSecurityModes
744 *
745 * Description: This method is not supported because the provider doesn't have
746 * any methods.
747 *
748 */
749 /* ARGSUSED */
750 CCIMProperty *
cp_invokeMethod_Solaris_NFSShareSecurityModes(CCIMObjectPath * pOP,cimchar * functionName,CCIMPropertyList * inParams,CCIMPropertyList * outParams)751 cp_invokeMethod_Solaris_NFSShareSecurityModes(
752 CCIMObjectPath *pOP,
753 cimchar *functionName,
754 CCIMPropertyList *inParams,
755 CCIMPropertyList *outParams) {
756 int err = 0;
757
758 util_handleError("SOLARIS_NFSSHARESECMODES::INVOKE_METHOD",
759 CIM_ERR_NOT_SUPPORTED, NULL, NULL, &err);
760 return ((CCIMProperty *)NULL);
761 } /* cp_invokeMethod_Solaris_NFSShareSecurityModes */
762
763
764 /*
765 * Private methods
766 */
767
768 /*
769 * Method: get_associated_nfsShare_instList
770 *
771 * Finds the Solaris_NFSShare instances that are associated to the
772 * Solaris_NFSShareSecurity object path that was passed in.
773 */
774 static CCIMInstanceList *
get_associated_nfsShare_instList(CCIMObjectPath * nfsShareSecOP)775 get_associated_nfsShare_instList(CCIMObjectPath *nfsShareSecOP) {
776 CCIMInstanceList *nfsShareInstList;
777 CCIMInstance *nfsShareInst;
778 CCIMObjectPath *nfsShareOP;
779 CCIMException *ex;
780 char *settingID;
781 int err = 0;
782
783 settingID = util_getKeyValue(nfsShareSecOP->mKeyProperties, string,
784 SETTING_ID, &err);
785 if (settingID == NULL || err != 0) {
786 util_handleError(
787 "SOLARIS_NFSSHARESECMODES::GET_ASSOC_SHARE_INSTLIST",
788 CIM_ERR_INVALID_PARAMETER, NULL, NULL, &err);
789 return ((CCIMInstanceList *)NULL);
790 }
791
792 nfsShareInstList = cim_createInstanceList();
793 if (nfsShareInstList == NULL) {
794 ex = cim_getLastError();
795 util_handleError(
796 "SOLARIS_NFSSHARESECMODES::GET_ASSOC_SHARE_INSTLIST",
797 CIM_ERR_FAILED, CREATE_INSTANCE_LIST_FAILURE, ex, &err);
798 return ((CCIMInstanceList *)NULL);
799 }
800
801 nfsShareOP = get_Solaris_NFSShare_OP(settingID);
802 if (nfsShareOP == NULL) {
803 /*
804 * An error occurred in get_Solaris_NFSShare_OP and was
805 * handled there.
806 */
807 return ((CCIMInstanceList *)NULL);
808 }
809
810 nfsShareInst = cimom_getInstance(nfsShareOP, cim_false, cim_false,
811 cim_false, cim_false, NULL, 0);
812
813 cim_freeObjectPath(nfsShareOP);
814
815 if (nfsShareInst == NULL) {
816 /*
817 * No instances exist which are associated with the passed in
818 * Solaris_NFSShareSecurity object.
819 */
820 cim_freeInstanceList(nfsShareInstList);
821 return ((CCIMInstanceList *)NULL);
822 }
823
824 /*
825 * Work around for cimom bug 4649100.
826 */
827 if (!set_share_keyProperties_to_true(nfsShareInst)) {
828 /*
829 * Key values not found
830 */
831 cim_logDebug(
832 "get_associated_nfsShareSec_instList",
833 "No keyProprties found, should return error here");
834 cim_freeInstance(nfsShareInst);
835 cim_freeInstanceList(nfsShareInstList);
836 return ((CCIMInstanceList *)NULL);
837 }
838
839 if (nfsShareInst->mProperties == NULL) {
840 cim_freeInstanceList(nfsShareInstList);
841 cim_freeInstance(nfsShareInst);
842 return ((CCIMInstanceList *)NULL);
843 }
844
845 nfsShareInstList = cim_addInstance(nfsShareInstList, nfsShareInst);
846 if (nfsShareInstList == NULL) {
847 ex = cim_getLastError();
848 util_handleError(
849 "SOLARIS_NFSSHARESECMODES::GET_ASSOC_SHARE_INSTLIST",
850 CIM_ERR_FAILED, CREATE_INSTANCE_LIST_FAILURE, ex, &err);
851 cim_freeInstance(nfsShareInst);
852 return ((CCIMInstanceList *)NULL);
853 }
854
855 return (nfsShareInstList);
856 } /* get_associated_nfsShare_instList */
857
858 /*
859 * Method: get_associated_nfsShareSec_instList
860 *
861 * Finds the Solaris_NFSShareSecurity instances that are associated to the
862 * Solaris_NFSShare object path that was passed in.
863 */
864 static CCIMInstanceList *
get_associated_nfsShareSec_instList(CCIMObjectPath * nfsShareOP)865 get_associated_nfsShareSec_instList(CCIMObjectPath *nfsShareOP) {
866 CCIMObjectPath *nfsShareSecOP;
867 CCIMInstanceList *nfsShareSecInstList = NULL;
868 CCIMException *ex;
869 char *name;
870 int err = 0;
871 fs_sharelist_t *nfs_sharesec_list, *tmp_sharesec_list;
872
873
874 name = util_getKeyValue(nfsShareOP->mKeyProperties, string,
875 NAME, &err);
876 if (name == NULL || err != 0) {
877 util_handleError(
878 "SOLARIS_NFSSHARESECMODES::GET_ASSOC_SP_INSTLIST",
879 CIM_ERR_INVALID_PARAMETER, NULL, NULL, &err);
880 return ((CCIMInstanceList *)NULL);
881 }
882
883 nfsShareSecInstList = cim_createInstanceList();
884 if (nfsShareSecInstList == NULL) {
885 ex = cim_getLastError();
886 util_handleError(
887 "SOLARIS_NFSSHARESECMODES::GET_ASSOC_SP_INSTLIST",
888 CIM_ERR_FAILED, CREATE_INSTANCE_LIST_FAILURE, ex, &err);
889 return ((CCIMInstanceList *)NULL);
890 }
891
892 nfs_sharesec_list = fs_get_share_list(&err);
893 if (nfs_sharesec_list == NULL) {
894 /*
895 * Check whether an error was returned or if we simply don't
896 * have any nfs shares on the system. If err is not
897 * equal to 0, an error was encountered.
898 */
899
900 if (err != 0) {
901 /*
902 * Determine the error and log it.
903 */
904 if (err == ENOMEM || err == EAGAIN) {
905 util_handleError(
906 "SOLARIS_NFSSHARESECMODES:" \
907 ":GET_ASSOC_SEC_INSTLIST",
908 CIM_ERR_LOW_ON_MEMORY, LOW_MEMORY,
909 NULL, &err);
910 cim_freeInstanceList(nfsShareSecInstList);
911 return ((CCIMInstanceList *)NULL);
912 } else {
913
914 /*
915 * If any other errors were encountered it
916 * can be handled as a general error. We may
917 * not know exactly what the error is.
918 */
919 util_handleError(
920 "SOLARIS_NFSSHARESECMODES:" \
921 ":GET_ASSOC_SEC_INSTLIST",
922 CIM_ERR_FAILED, strerror(err),
923 NULL, &err);
924 cim_freeInstanceList(nfsShareSecInstList);
925 return ((CCIMInstanceList *)NULL);
926 }
927 }
928 }
929
930
931 for (tmp_sharesec_list = nfs_sharesec_list; tmp_sharesec_list != NULL;
932 tmp_sharesec_list = tmp_sharesec_list->next) {
933 char **sec_modes;
934 char *optionValue = NULL;
935 int count = 0;
936
937 err = 0;
938
939
940 sec_modes = fs_parse_opts_for_sec_modes(
941 tmp_sharesec_list->options, &count, &err);
942
943
944 if (sec_modes == NULL || count == 0) {
945 util_handleError(
946 "SOLARIS_NFSSHARESECMODES::GET_ASSOC_SEC_INSTLIST",
947 CIM_ERR_FAILED,
948 FS_PARSE_OPTS_FOR_SEC_MODES_FAILURE, ex, &err);
949 fs_free_share_list(nfs_sharesec_list);
950 cim_freeInstanceList(nfsShareSecInstList);
951 return ((CCIMInstanceList *)NULL);
952 }
953
954
955 if ((strcasecmp(tmp_sharesec_list->fstype, "nfs") == 0) &&
956 (strcmp(tmp_sharesec_list->path, name) == 0)) {
957
958 CCIMInstance *nfsShareSecInst;
959 int i;
960
961 for (i = 0; i < count; i++) {
962 char tmpString[MAXSIZE];
963 (void) strcpy(tmpString, sec_modes[i]);
964 optionValue = get_property_from_opt_string(
965 sec_modes[i], "sec=", B_TRUE, B_FALSE);
966
967 if (strcmp(optionValue, "0") == 0) {
968 free(optionValue);
969 optionValue = strdup("sys");
970 }
971
972 nfsShareSecOP =
973 get_Solaris_NFSShareSec_OP(name,
974 optionValue);
975
976 free(optionValue);
977 if (nfsShareSecOP == NULL) {
978 /*
979 * An error occurred and it was
980 * handled in get_NFSShareSec_OP.
981 */
982 fs_free_share_list(nfs_sharesec_list);
983 fileutil_free_string_array(sec_modes,
984 count);
985 cim_freeInstanceList(
986 nfsShareSecInstList);
987 return ((CCIMInstanceList *)NULL);
988 }
989
990 nfsShareSecInst =
991 cimom_getInstance(nfsShareSecOP, cim_false,
992 cim_false, cim_false, cim_false, NULL, 0);
993 if (nfsShareSecInst == NULL) {
994 /*
995 * An error occurred and it was
996 * handled in cimom_getInstance.
997 */
998 fs_free_share_list(nfs_sharesec_list);
999 fileutil_free_string_array(sec_modes,
1000 count);
1001 cim_freeInstanceList(
1002 nfsShareSecInstList);
1003 return ((CCIMInstanceList *)NULL);
1004 }
1005
1006 /*
1007 * Work around for cimom bug 4649100.
1008 */
1009 if (!set_shareSec_keyProperties_to_true(
1010 nfsShareSecInst)) {
1011 /*
1012 * Key values not found
1013 */
1014 cim_logDebug(
1015 "get_associated_nfsShareSec_" \
1016 "instList", "No keyProprties " \
1017 "found, should return error here");
1018 cim_freeInstance(nfsShareSecInst);
1019 cim_freeInstanceList(
1020 nfsShareSecInstList);
1021 return ((CCIMInstanceList *)NULL);
1022 }
1023
1024 /*
1025 * Add the instance to the instance list.
1026 */
1027 nfsShareSecInstList = cim_addInstance(
1028 nfsShareSecInstList, nfsShareSecInst);
1029 if (nfsShareSecInstList == NULL) {
1030 ex = cim_getLastError();
1031 util_handleError(
1032 "SOLARIS_NFSSHARESECMODES:" \
1033 ":GET_ASSOC_SEC_INSTLIST",
1034 CIM_ERR_FAILED,
1035 ADD_INSTANCE_FAILURE, ex, &err);
1036 cim_freeInstance(nfsShareSecInst);
1037 fs_free_share_list(nfs_sharesec_list);
1038 fileutil_free_string_array(sec_modes,
1039 count);
1040 return ((CCIMInstanceList *)NULL);
1041 }
1042 }
1043 }
1044 fileutil_free_string_array(sec_modes, count);
1045 }
1046 fs_free_share_list(nfs_sharesec_list);
1047 return (nfsShareSecInstList);
1048 } /* get_associated_nfsShareSec_instList */
1049
1050 /*
1051 * Method: get_associated_nfsShareSec_OPList
1052 *
1053 * Finds the Solaris_NFSShareSecurity object paths that are associated
1054 * to the Solaris_NFSShare object path that was passed in.
1055 */
1056 static CCIMObjectPathList *
get_associated_nfsShareSec_OPList(CCIMObjectPath * nfsShareOP,int * errp)1057 get_associated_nfsShareSec_OPList(CCIMObjectPath *nfsShareOP, int *errp) {
1058 CCIMInstanceList *nfsShareSecInstList;
1059 CCIMObjectPathList *nfsShareSecOPList;
1060 CCIMException *ex;
1061 int err = 0;
1062
1063
1064 nfsShareSecInstList =
1065 get_associated_nfsShareSec_instList(nfsShareOP);
1066 if (nfsShareSecInstList == NULL) {
1067 /*
1068 * An error occurred in get_associated_nfsShareSec_InstList
1069 * and was handled in that function.
1070 */
1071 *errp = -1;
1072 return ((CCIMObjectPathList *)NULL);
1073 }
1074
1075 nfsShareSecOPList = cim_createObjectPathList(nfsShareSecInstList);
1076 if (nfsShareSecOPList == NULL) {
1077 ex = cim_getLastError();
1078 util_handleError(
1079 "SOLARIS_NFSSHARESECMODES::GET_ASSOC_SP_OPLIST",
1080 CIM_ERR_FAILED, CREATE_OBJECT_LIST_FAILURE,
1081 ex, &err);
1082 *errp = -1;
1083 }
1084
1085 cim_freeInstanceList(nfsShareSecInstList);
1086 return (nfsShareSecOPList);
1087 } /* get_associated_nfsShareSec_OPList */
1088
1089 /*
1090 * Method: get_Solaris_NFSShare_OP
1091 *
1092 * Gets the Solaris_NFSShare object path based on the passed in name key.
1093 */
1094 static CCIMObjectPath *
get_Solaris_NFSShare_OP(char * nameKey)1095 get_Solaris_NFSShare_OP(char *nameKey) {
1096 CCIMObjectPath *nfsShareOP;
1097 CCIMPropertyList *nfsShareKeyPropList;
1098 CCIMException *ex;
1099 char *sysName;
1100 int err = 0;
1101
1102 nfsShareOP = cim_createEmptyObjectPath(SOLARIS_NFSSHARE);
1103 if (nfsShareOP == NULL) {
1104 ex = cim_getLastError();
1105 util_handleError("SOLARIS_NFSSHARESECMODES::GET_NFSSHARE_OP",
1106 CIM_ERR_FAILED, CREATE_EMPTY_OBJPATH_FAILURE, ex,
1107 &err);
1108 return ((CCIMObjectPath *)NULL);
1109 }
1110
1111 sysName = (cimchar *)sys_get_hostname(&err);
1112 if (sysName == NULL) {
1113 util_handleError("SOLARIS_NFSSHARESECMODES::GET_NFSSHARE_OP",
1114 CIM_ERR_FAILED, GET_HOSTNAME_FAILURE, NULL, &err);
1115 cim_freeObjectPath(nfsShareOP);
1116 return ((CCIMObjectPath *)NULL);
1117 }
1118
1119 /*
1120 * Create the property list which to add all the key properties to and
1121 * which will be added to the object path.
1122 */
1123 nfsShareKeyPropList = cim_createPropertyList();
1124 if (nfsShareKeyPropList == NULL) {
1125 ex = cim_getLastError();
1126 util_handleError("SOLARIS_NFSSHARESECMODES::GET_NFSSHARE_OP",
1127 CIM_ERR_FAILED, CREATE_PROPLIST_FAILURE, ex, &err);
1128 cim_freeObjectPath(nfsShareOP);
1129 free(sysName);
1130 return ((CCIMObjectPath *)NULL);
1131 }
1132
1133 /*
1134 * add_property_to_list parameters are as follows:
1135 * 1.) property name (cimchar *),
1136 * 2.) property type (CIMType),
1137 * 3.) property value (cimchar *),
1138 * 4.) property object path for reference properties (CCIMObjectPath *),
1139 * 5.) is property a key? (CIMBool),
1140 * 6.) property list to add the property to (CCIMPropertyList *).
1141 */
1142
1143 nfsShareKeyPropList = add_property_to_list(CREATION_CLASS, string,
1144 SOLARIS_NFSSHARE, NULL, cim_true, nfsShareKeyPropList);
1145 if (nfsShareKeyPropList == NULL) {
1146 cim_freeObjectPath(nfsShareOP);
1147 free(sysName);
1148 return ((CCIMObjectPath *)NULL);
1149 }
1150
1151 nfsShareKeyPropList = add_property_to_list(NAME, string, nameKey,
1152 NULL, cim_true, nfsShareKeyPropList);
1153 if (nfsShareKeyPropList == NULL) {
1154 cim_freeObjectPath(nfsShareOP);
1155 free(sysName);
1156 return ((CCIMObjectPath *)NULL);
1157 }
1158
1159 nfsShareKeyPropList = add_property_to_list(SYS_CREATION_CLASS, string,
1160 SOLARIS_CS, NULL, cim_true, nfsShareKeyPropList);
1161 if (nfsShareKeyPropList == NULL) {
1162 cim_freeObjectPath(nfsShareOP);
1163 free(sysName);
1164 return ((CCIMObjectPath *)NULL);
1165 }
1166
1167 nfsShareKeyPropList = add_property_to_list(SYSTEM, string, sysName,
1168 NULL, cim_true, nfsShareKeyPropList);
1169 if (nfsShareKeyPropList == NULL) {
1170 cim_freeObjectPath(nfsShareOP);
1171 free(sysName);
1172 return ((CCIMObjectPath *)NULL);
1173 }
1174
1175 nfsShareOP = cim_addPropertyListToObjectPath(nfsShareOP,
1176 nfsShareKeyPropList);
1177 if (nfsShareOP == NULL) {
1178 ex = cim_getLastError();
1179 util_handleError("SOLARIS_NFSSHARESECMODES::GET_NFSSHARE_OP",
1180 CIM_ERR_FAILED, ADD_PROP_TO_OBJPATH_FAILURE, ex, &err);
1181 cim_freePropertyList(nfsShareKeyPropList);
1182 free(sysName);
1183 return ((CCIMObjectPath *)NULL);
1184 }
1185
1186 free(sysName);
1187 return (nfsShareOP);
1188 } /* get_Solaris_NFSShare_OP */
1189
1190 /*
1191 * Method: get_Solaris_NFSShareSec_OP
1192 *
1193 * Gets the Solaris_NFSShareSecurity object path based on the passed in
1194 * path and mode keys.
1195 */
1196 static CCIMObjectPath *
get_Solaris_NFSShareSec_OP(char * path,char * mode)1197 get_Solaris_NFSShareSec_OP(char *path, char *mode) {
1198 CCIMObjectPath *nfsShareSecOP;
1199 CCIMPropertyList *nfsShareSecKeyPropList;
1200 CCIMException *ex;
1201 int err = 0;
1202
1203 cim_logDebug("get_Solaris_NFSShareSec_OP",
1204 "Just entering");
1205
1206 nfsShareSecOP =
1207 cim_createEmptyObjectPath(SOLARIS_NFSSHARESEC);
1208 if (nfsShareSecOP == NULL) {
1209 ex = cim_getLastError();
1210 util_handleError(
1211 "SOLARIS_NFSSHAREDEFSECMODES::GET_NFSSHARESEC_OP",
1212 CIM_ERR_FAILED, CREATE_EMPTY_OBJPATH_FAILURE, ex, &err);
1213 return ((CCIMObjectPath *)NULL);
1214 }
1215
1216 nfsShareSecKeyPropList =
1217 cim_createPropertyList();
1218 if (nfsShareSecKeyPropList == NULL) {
1219 ex = cim_getLastError();
1220 util_handleError(
1221 "SOLARIS_NFSSHAREDEFSECMODES::GET_NFSSHARESEC_OP",
1222 CIM_ERR_FAILED, CREATE_PROPLIST_FAILURE, ex, &err);
1223 cim_freeObjectPath(nfsShareSecOP);
1224 return ((CCIMObjectPath *)NULL);
1225 }
1226
1227 /*
1228 * add_property_to_list parameters are as follows:
1229 * 1.) property settingID (cimchar *),
1230 * 2.) property mode (cimchar *)
1231 */
1232 nfsShareSecKeyPropList = add_property_to_list(SETTING_ID, string,
1233 path, NULL, cim_true, nfsShareSecKeyPropList);
1234 if (nfsShareSecKeyPropList == NULL) {
1235 cim_freeObjectPath(nfsShareSecOP);
1236 return ((CCIMObjectPath *)NULL);
1237 }
1238
1239 nfsShareSecKeyPropList = add_property_to_list(MODE, string, mode,
1240 NULL, cim_true, nfsShareSecKeyPropList);
1241 if (nfsShareSecKeyPropList == NULL) {
1242 cim_freeObjectPath(nfsShareSecOP);
1243 return ((CCIMObjectPath *)NULL);
1244 }
1245
1246 nfsShareSecOP = cim_addPropertyListToObjectPath(
1247 nfsShareSecOP, nfsShareSecKeyPropList);
1248 if (nfsShareSecOP == NULL) {
1249 ex = cim_getLastError();
1250 util_handleError(
1251 "SOLARIS_NFSSHAREDEFSECMODES::GET_NFSSHARESEC_OP",
1252 CIM_ERR_FAILED, ADD_PROPERTY_FAILURE, ex, &err);
1253 cim_freePropertyList(nfsShareSecKeyPropList);
1254 return ((CCIMObjectPath *)NULL);
1255 }
1256
1257 return (nfsShareSecOP);
1258 } /* get_Solaris_NFSShareSec_OP */
1259
1260 /*
1261 * Method: update_list_with_secMode_inst
1262 *
1263 * Adds the Solaris_NFSShareSecurityModes instance described by the passed
1264 * in object path to the shareSecModeInstList instance list.
1265 */
1266 static CCIMInstanceList *
update_list_with_secMode_inst(CCIMObjectPath * nfsShareOP,CCIMInstanceList * shareSecModeInstList)1267 update_list_with_secMode_inst(CCIMObjectPath *nfsShareOP,
1268 CCIMInstanceList *shareSecModeInstList) {
1269
1270 CCIMObjectPathList *nfsShareSecOPList;
1271 CCIMObjectPathList *tmpOPList;
1272 CCIMInstance *shareSecModeInst;
1273 CCIMException *ex;
1274 int err = 0;
1275
1276 /*
1277 * Retrieve all of the Solaris_NFSShareSecurity instances
1278 * associated with the current Solaris_NFSShare object path.
1279 * The get_associate_nfsShareSec_propList function will return
1280 * the appropriate reference properties to be used in creating
1281 * a Solaris_NFSShareSecurityModes instance.
1282 */
1283 nfsShareSecOPList = get_associated_nfsShareSec_OPList(
1284 nfsShareOP, &err);
1285 if (nfsShareSecOPList == NULL) {
1286 if (err != 0) {
1287 return ((CCIMInstanceList *)NULL);
1288 }
1289 return (shareSecModeInstList);
1290 }
1291
1292 for (tmpOPList = nfsShareSecOPList; tmpOPList != NULL;
1293 tmpOPList = tmpOPList->mNext) {
1294 shareSecModeInst = cim_createInstance(SOLARIS_NFSSHARESECMODES);
1295 if (shareSecModeInst == NULL) {
1296 ex = cim_getLastError();
1297 util_handleError(
1298 "SOLARIS_NFSSHARESECMODES::ENUM_INSTANCES",
1299 CIM_ERR_FAILED, CREATE_INSTANCE_FAILURE, ex, &err);
1300 return ((CCIMInstanceList *)NULL);
1301 }
1302 /*
1303 * Add the properties to the
1304 * Solaris_NFSSHareSecurityModes instance.
1305 */
1306
1307 if (add_property_to_instance(shareSecModeProps[SETTING].name,
1308 shareSecModeProps[SETTING].type, NULL,
1309 tmpOPList->mDataObject, shareSecModeProps[SETTING].isKey,
1310 shareSecModeInst) == cim_false) {
1311 cim_freeObjectPathList(nfsShareSecOPList);
1312 return ((CCIMInstanceList *)NULL);
1313 }
1314
1315 if (add_property_to_instance(shareSecModeProps[ELEMENT].name,
1316 shareSecModeProps[ELEMENT].type, NULL,
1317 nfsShareOP, shareSecModeProps[ELEMENT].isKey,
1318 shareSecModeInst) == cim_false) {
1319 cim_freeObjectPathList(nfsShareSecOPList);
1320 return ((CCIMInstanceList *)NULL);
1321 }
1322
1323 shareSecModeInstList =
1324 cim_addInstance(shareSecModeInstList,
1325 shareSecModeInst);
1326 if (shareSecModeInstList == NULL) {
1327 ex = cim_getLastError();
1328 util_handleError(
1329 "SOLARIS_NFSSHARESECMODES::ENUM_INSTANCES",
1330 CIM_ERR_FAILED, ADD_INSTANCE_FAILURE,
1331 ex, &err);
1332 cim_freeInstance(shareSecModeInst);
1333 cim_freeObjectPathList(nfsShareSecOPList);
1334 return ((CCIMInstanceList *)NULL);
1335 }
1336 }
1337
1338 return (shareSecModeInstList);
1339 } /* update_list_with_secMode_inst */
1340