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