34 #include "datatype.h" |
34 #include "datatype.h" |
35 |
35 |
36 /*ARGSUSED*/ |
36 /*ARGSUSED*/ |
37 conerr_t |
37 conerr_t |
38 interface_Entity_read_fmri(rad_instance_t *inst, adr_attribute_t *attr, |
38 interface_Entity_read_fmri(rad_instance_t *inst, adr_attribute_t *attr, |
39 data_t **data, data_t **error) |
39 adr_data_t **data, adr_data_t **error) |
40 { |
40 { |
41 smfobj_t *smfo = instance_getdata(inst); |
41 smfobj_t *smfo = instance_getdata(inst); |
42 *data = data_new_string(smfo->fmri, lt_copy); |
42 *data = adr_data_new_string(smfo->fmri, LT_COPY); |
43 return (*data == NULL ? ce_nomem : ce_ok); |
43 return (*data == NULL ? ce_nomem : ce_ok); |
44 } |
44 } |
45 |
45 |
46 /*ARGSUSED*/ |
46 /*ARGSUSED*/ |
47 conerr_t |
47 conerr_t |
48 interface_Entity_read_scope(rad_instance_t *inst, adr_attribute_t *attr, |
48 interface_Entity_read_scope(rad_instance_t *inst, adr_attribute_t *attr, |
49 data_t **data, data_t **error) |
49 adr_data_t **data, adr_data_t **error) |
50 { |
50 { |
51 *data = data_new_string("localhost", lt_const); |
51 *data = adr_data_new_string("localhost", LT_CONST); |
52 return (*data == NULL ? ce_nomem : ce_ok); |
52 return (*data == NULL ? ce_nomem : ce_ok); |
53 } |
53 } |
54 |
54 |
55 /*ARGSUSED*/ |
55 /*ARGSUSED*/ |
56 conerr_t |
56 conerr_t |
57 interface_Entity_read_service(rad_instance_t *inst, adr_attribute_t *attr, |
57 interface_Entity_read_service(rad_instance_t *inst, adr_attribute_t *attr, |
58 data_t **data, data_t **error) |
58 adr_data_t **data, adr_data_t **error) |
59 { |
59 { |
60 smfobj_t *smfo = instance_getdata(inst); |
60 smfobj_t *smfo = instance_getdata(inst); |
61 *data = data_new_string(smfo->sname, lt_copy); |
61 *data = adr_data_new_string(smfo->sname, LT_COPY); |
62 return (*data == NULL ? ce_nomem : ce_ok); |
62 return (*data == NULL ? ce_nomem : ce_ok); |
63 } |
63 } |
64 |
64 |
65 |
65 |
66 /* |
66 /* |
73 * property group isn't of interest and should be skipped. |
73 * property group isn't of interest and should be skipped. |
74 */ |
74 */ |
75 |
75 |
76 struct pgargs { |
76 struct pgargs { |
77 smfobj_t *smfo; |
77 smfobj_t *smfo; |
78 type_t *type; |
78 adr_type_t *type; |
79 const char *pgtype; |
79 const char *pgtype; |
80 svcerr_t (*cb)(scf_handle_t *, scf_propertygroup_t *, data_t **); |
80 svcerr_t (*cb)(scf_handle_t *, scf_propertygroup_t *, adr_data_t **); |
81 }; |
81 }; |
82 |
82 |
83 /*ARGSUSED*/ |
83 /*ARGSUSED*/ |
84 static svcerr_t |
84 static svcerr_t |
85 rt_collect_pgs(scf_handle_t *h, void *arg, data_t **ret, data_t **error) |
85 rt_collect_pgs(scf_handle_t *h, void *arg, adr_data_t **ret, adr_data_t **error) |
86 { |
86 { |
87 struct pgargs *pga = arg; |
87 struct pgargs *pga = arg; |
88 smfobj_t *smfo = pga->smfo; |
88 smfobj_t *smfo = pga->smfo; |
89 smfu_entity_t entity = SMFU_ENTITY_INIT; |
89 smfu_entity_t entity = SMFU_ENTITY_INIT; |
90 svcerr_t se = SE_OK; |
90 svcerr_t se = SE_OK; |
91 data_t *result = data_new_array(pga->type, 5); |
91 adr_data_t *result = adr_data_new_array(pga->type, 5); |
92 scf_propertygroup_t *pg = scf_pg_create(h); |
92 scf_propertygroup_t *pg = scf_pg_create(h); |
93 scf_iter_t *iter = scf_iter_create(h); |
93 scf_iter_t *iter = scf_iter_create(h); |
94 |
94 |
95 if (pg == NULL || iter == NULL) { |
95 if (pg == NULL || iter == NULL) { |
96 se = SE_FATAL; |
96 se = SE_FATAL; |
103 if ((se = smfu_iter_pg_r(h, &entity, pga->pgtype, iter)) != SE_OK) |
103 if ((se = smfu_iter_pg_r(h, &entity, pga->pgtype, iter)) != SE_OK) |
104 goto done; |
104 goto done; |
105 |
105 |
106 int err; |
106 int err; |
107 while ((err = scf_iter_next_pg(iter, pg)) > 0) { |
107 while ((err = scf_iter_next_pg(iter, pg)) > 0) { |
108 data_t *item = NULL; |
108 adr_data_t *item = NULL; |
109 se = pga->cb(h, pg, &item); |
109 se = pga->cb(h, pg, &item); |
110 if (se == SE_OK) |
110 if (se == SE_OK) |
111 (void) array_add(result, item); |
111 (void) adr_array_add(result, item); |
112 else if (se != SE_NOTFOUND) |
112 else if (se != SE_NOTFOUND) |
113 goto done; |
113 goto done; |
114 } |
114 } |
115 se = (err != 0) ? smfu_maperr(scf_error()) : SE_OK; |
115 se = (err != 0) ? smfu_maperr(scf_error()) : SE_OK; |
116 |
116 |
124 } |
124 } |
125 |
125 |
126 /*ARGSUSED*/ |
126 /*ARGSUSED*/ |
127 conerr_t |
127 conerr_t |
128 interface_Entity_read_dependencies(rad_instance_t *inst, adr_attribute_t *attr, |
128 interface_Entity_read_dependencies(rad_instance_t *inst, adr_attribute_t *attr, |
129 data_t **data, data_t **error) |
129 adr_data_t **data, adr_data_t **error) |
130 { |
130 { |
131 struct pgargs pga = { |
131 struct pgargs pga = { |
132 .smfo = instance_getdata(inst), |
132 .smfo = instance_getdata(inst), |
133 .type = &t_array__Dependency, |
133 .type = &t_array__Dependency, |
134 .pgtype = SCF_GROUP_DEPENDENCY, |
134 .pgtype = SCF_GROUP_DEPENDENCY, |
138 } |
138 } |
139 |
139 |
140 /*ARGSUSED*/ |
140 /*ARGSUSED*/ |
141 conerr_t |
141 conerr_t |
142 interface_Entity_read_manpages(rad_instance_t *inst, adr_attribute_t *attr, |
142 interface_Entity_read_manpages(rad_instance_t *inst, adr_attribute_t *attr, |
143 data_t **data, data_t **error) |
143 adr_data_t **data, adr_data_t **error) |
144 { |
144 { |
145 struct pgargs pga = { |
145 struct pgargs pga = { |
146 .smfo = instance_getdata(inst), |
146 .smfo = instance_getdata(inst), |
147 .type = &t_array__Manpage, |
147 .type = &t_array__Manpage, |
148 .pgtype = SCF_GROUP_TEMPLATE, |
148 .pgtype = SCF_GROUP_TEMPLATE, |
152 } |
152 } |
153 |
153 |
154 /*ARGSUSED*/ |
154 /*ARGSUSED*/ |
155 conerr_t |
155 conerr_t |
156 interface_Entity_read_doclinks(rad_instance_t *inst, adr_attribute_t *attr, |
156 interface_Entity_read_doclinks(rad_instance_t *inst, adr_attribute_t *attr, |
157 data_t **data, data_t **error) |
157 adr_data_t **data, adr_data_t **error) |
158 { |
158 { |
159 struct pgargs pga = { |
159 struct pgargs pga = { |
160 .smfo = instance_getdata(inst), |
160 .smfo = instance_getdata(inst), |
161 .type = &t_array__Doclink, |
161 .type = &t_array__Doclink, |
162 .pgtype = SCF_GROUP_TEMPLATE, |
162 .pgtype = SCF_GROUP_TEMPLATE, |
165 return (smfu_rtrun(rt_collect_pgs, &pga, data, error)); |
165 return (smfu_rtrun(rt_collect_pgs, &pga, data, error)); |
166 } |
166 } |
167 |
167 |
168 /*ARGSUSED*/ |
168 /*ARGSUSED*/ |
169 static svcerr_t |
169 static svcerr_t |
170 rt_read_pgs(scf_handle_t *h, void *arg, data_t **ret, data_t **error) |
170 rt_read_pgs(scf_handle_t *h, void *arg, adr_data_t **ret, adr_data_t **error) |
171 { |
171 { |
172 smfobj_t *smfo = arg; |
172 smfobj_t *smfo = arg; |
173 svcerr_t se = SE_OK; |
173 svcerr_t se = SE_OK; |
174 smfu_entity_t entity = SMFU_ENTITY_INIT; |
174 smfu_entity_t entity = SMFU_ENTITY_INIT; |
175 |
175 |
176 scf_propertygroup_t *pg = scf_pg_create(h); |
176 scf_propertygroup_t *pg = scf_pg_create(h); |
177 scf_iter_t *iter = scf_iter_create(h); |
177 scf_iter_t *iter = scf_iter_create(h); |
178 data_t *result = data_new_array(&t_array__PropertyGroup, 5); |
178 adr_data_t *result = adr_data_new_array(&t_array__PropertyGroup, 5); |
179 |
179 |
180 if (pg == NULL || iter == NULL) { |
180 if (pg == NULL || iter == NULL) { |
181 se = SE_FATAL; |
181 se = SE_FATAL; |
182 goto done; |
182 goto done; |
183 } |
183 } |
208 } |
208 } |
209 |
209 |
210 /*ARGSUSED*/ |
210 /*ARGSUSED*/ |
211 conerr_t |
211 conerr_t |
212 interface_Entity_read_pgs(rad_instance_t *inst, adr_attribute_t *attr, |
212 interface_Entity_read_pgs(rad_instance_t *inst, adr_attribute_t *attr, |
213 data_t **data, data_t **error) |
213 adr_data_t **data, adr_data_t **error) |
214 { |
214 { |
215 return (smfu_rtrun(rt_read_pgs, instance_getdata(inst), data, error)); |
215 return (smfu_rtrun(rt_read_pgs, instance_getdata(inst), data, error)); |
216 } |
216 } |
217 |
217 |
218 |
218 |
219 /*ARGSUSED*/ |
219 /*ARGSUSED*/ |
220 static svcerr_t |
220 static svcerr_t |
221 rt_invoke_delete(scf_handle_t *h, void *arg, data_t **ret, data_t **error) |
221 rt_invoke_delete(scf_handle_t *h, void *arg, adr_data_t **ret, |
|
222 adr_data_t **error) |
222 { |
223 { |
223 smfobj_t *smfo = arg; |
224 smfobj_t *smfo = arg; |
224 svcerr_t se = SE_OK; |
225 svcerr_t se = SE_OK; |
225 smfu_entity_t entity = SMFU_ENTITY_INIT; |
226 smfu_entity_t entity = SMFU_ENTITY_INIT; |
226 |
227 |
255 } |
256 } |
256 |
257 |
257 /*ARGSUSED*/ |
258 /*ARGSUSED*/ |
258 conerr_t |
259 conerr_t |
259 interface_Entity_invoke_delete(rad_instance_t *inst, adr_method_t *meth, |
260 interface_Entity_invoke_delete(rad_instance_t *inst, adr_method_t *meth, |
260 data_t **ret, data_t **args, int count, data_t **error) |
261 adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error) |
261 { |
262 { |
262 return (smfu_rtrun(rt_invoke_delete, instance_getdata(inst), NULL, |
263 return (smfu_rtrun(rt_invoke_delete, instance_getdata(inst), NULL, |
263 error)); |
264 error)); |
264 } |
265 } |
265 |
266 |
266 |
267 |
267 /*ARGSUSED*/ |
268 /*ARGSUSED*/ |
268 static svcerr_t |
269 static svcerr_t |
269 rt_invoke_deleteCust(scf_handle_t *h, void *arg, data_t **ret, data_t **error) |
270 rt_invoke_deleteCust(scf_handle_t *h, void *arg, adr_data_t **ret, |
|
271 adr_data_t **error) |
270 { |
272 { |
271 smfobj_t *smfo = arg; |
273 smfobj_t *smfo = arg; |
272 svcerr_t se = SE_OK; |
274 svcerr_t se = SE_OK; |
273 smfu_entity_t entity = SMFU_ENTITY_INIT; |
275 smfu_entity_t entity = SMFU_ENTITY_INIT; |
274 |
276 |
304 } |
306 } |
305 |
307 |
306 /*ARGSUSED*/ |
308 /*ARGSUSED*/ |
307 conerr_t |
309 conerr_t |
308 interface_Entity_invoke_deleteCust(rad_instance_t *inst, adr_method_t *meth, |
310 interface_Entity_invoke_deleteCust(rad_instance_t *inst, adr_method_t *meth, |
309 data_t **ret, data_t **args, int count, data_t **error) |
311 adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error) |
310 { |
312 { |
311 return (smfu_rtrun(rt_invoke_deleteCust, instance_getdata(inst), NULL, |
313 return (smfu_rtrun(rt_invoke_deleteCust, instance_getdata(inst), NULL, |
312 error)); |
314 error)); |
313 } |
315 } |
314 |
316 |
315 /*ARGSUSED*/ |
317 /*ARGSUSED*/ |
316 static svcerr_t |
318 static svcerr_t |
317 rt_invoke_createPG(scf_handle_t *h, void *arg, data_t **ret, data_t **error) |
319 rt_invoke_createPG(scf_handle_t *h, void *arg, adr_data_t **ret, |
|
320 adr_data_t **error) |
318 { |
321 { |
319 radarg_t *ra = arg; |
322 radarg_t *ra = arg; |
320 smfobj_t *smfo = instance_getdata(ra->inst); |
323 smfobj_t *smfo = instance_getdata(ra->inst); |
321 const char *pgname = data_to_string(ra->args[0]); |
324 const char *pgname = adr_data_to_string(ra->args[0]); |
322 const char *pgtype = data_to_string(ra->args[1]); |
325 const char *pgtype = adr_data_to_string(ra->args[1]); |
323 unsigned int pgflags = data_to_uinteger(ra->args[2]); |
326 unsigned int pgflags = adr_data_to_uinteger(ra->args[2]); |
324 svcerr_t se = SE_OK; |
327 svcerr_t se = SE_OK; |
325 smfu_entity_t entity = SMFU_ENTITY_INIT; |
328 smfu_entity_t entity = SMFU_ENTITY_INIT; |
326 |
329 |
327 if ((se = smfu_lookup(h, smfo->sname, smfo->iname, &entity)) != SE_OK) |
330 if ((se = smfu_lookup(h, smfo->sname, smfo->iname, &entity)) != SE_OK) |
328 goto done; |
331 goto done; |
361 } |
364 } |
362 |
365 |
363 /*ARGSUSED*/ |
366 /*ARGSUSED*/ |
364 conerr_t |
367 conerr_t |
365 interface_Entity_invoke_createPG(rad_instance_t *inst, adr_method_t *meth, |
368 interface_Entity_invoke_createPG(rad_instance_t *inst, adr_method_t *meth, |
366 data_t **ret, data_t **args, int count, data_t **error) |
369 adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error) |
367 { |
370 { |
368 radarg_t ra = { .inst = inst, .args = args }; |
371 radarg_t ra = { .inst = inst, .args = args }; |
369 return (smfu_rtrun(rt_invoke_createPG, &ra, NULL, error)); |
372 return (smfu_rtrun(rt_invoke_createPG, &ra, NULL, error)); |
370 } |
373 } |
371 |
374 |
372 |
375 |
373 /*ARGSUSED*/ |
376 /*ARGSUSED*/ |
374 static svcerr_t |
377 static svcerr_t |
375 rt_invoke_deletePG(scf_handle_t *h, void *arg, data_t **ret, data_t **error) |
378 rt_invoke_deletePG(scf_handle_t *h, void *arg, adr_data_t **ret, |
|
379 adr_data_t **error) |
376 { |
380 { |
377 radarg_t *ra = arg; |
381 radarg_t *ra = arg; |
378 smfobj_t *smfo = instance_getdata(ra->inst); |
382 smfobj_t *smfo = instance_getdata(ra->inst); |
379 const char *pgname = data_to_string(ra->args[0]); |
383 const char *pgname = adr_data_to_string(ra->args[0]); |
380 svcerr_t se = SE_OK; |
384 svcerr_t se = SE_OK; |
381 smfu_entity_t entity = SMFU_ENTITY_INIT; |
385 smfu_entity_t entity = SMFU_ENTITY_INIT; |
382 scf_propertygroup_t *pg = scf_pg_create(h); |
386 scf_propertygroup_t *pg = scf_pg_create(h); |
383 |
387 |
384 if (pg == NULL) { |
388 if (pg == NULL) { |
414 } |
418 } |
415 |
419 |
416 /*ARGSUSED*/ |
420 /*ARGSUSED*/ |
417 conerr_t |
421 conerr_t |
418 interface_Entity_invoke_deletePG(rad_instance_t *inst, adr_method_t *meth, |
422 interface_Entity_invoke_deletePG(rad_instance_t *inst, adr_method_t *meth, |
419 data_t **ret, data_t **args, int count, data_t **error) |
423 adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error) |
420 { |
424 { |
421 radarg_t ra = { .inst = inst, .args = args }; |
425 radarg_t ra = { .inst = inst, .args = args }; |
422 return (smfu_rtrun(rt_invoke_deletePG, &ra, NULL, error)); |
426 return (smfu_rtrun(rt_invoke_deletePG, &ra, NULL, error)); |
423 } |
427 } |
424 |
428 |
425 |
429 |
426 /*ARGSUSED*/ |
430 /*ARGSUSED*/ |
427 static svcerr_t |
431 static svcerr_t |
428 rt_invoke_deletePGCust(scf_handle_t *h, void *arg, data_t **ret, data_t **error) |
432 rt_invoke_deletePGCust(scf_handle_t *h, void *arg, adr_data_t **ret, |
|
433 adr_data_t **error) |
429 { |
434 { |
430 radarg_t *ra = arg; |
435 radarg_t *ra = arg; |
431 smfobj_t *smfo = instance_getdata(ra->inst); |
436 smfobj_t *smfo = instance_getdata(ra->inst); |
432 const char *pgname = data_to_string(ra->args[0]); |
437 const char *pgname = adr_data_to_string(ra->args[0]); |
433 svcerr_t se = SE_OK; |
438 svcerr_t se = SE_OK; |
434 smfu_entity_t entity = SMFU_ENTITY_INIT; |
439 smfu_entity_t entity = SMFU_ENTITY_INIT; |
435 scf_propertygroup_t *pg = scf_pg_create(h); |
440 scf_propertygroup_t *pg = scf_pg_create(h); |
436 |
441 |
437 if (pg == NULL) { |
442 if (pg == NULL) { |
471 } |
476 } |
472 |
477 |
473 /*ARGSUSED*/ |
478 /*ARGSUSED*/ |
474 conerr_t |
479 conerr_t |
475 interface_Entity_invoke_deletePGCust(rad_instance_t *inst, adr_method_t *meth, |
480 interface_Entity_invoke_deletePGCust(rad_instance_t *inst, adr_method_t *meth, |
476 data_t **ret, data_t **args, int count, data_t **error) |
481 adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error) |
477 { |
482 { |
478 radarg_t ra = { .inst = inst, .args = args }; |
483 radarg_t ra = { .inst = inst, .args = args }; |
479 return (smfu_rtrun(rt_invoke_deletePGCust, &ra, NULL, error)); |
484 return (smfu_rtrun(rt_invoke_deletePGCust, &ra, NULL, error)); |
480 } |
485 } |
481 |
486 |
482 static svcerr_t |
487 static svcerr_t |
483 rt_invoke_readProperties(scf_handle_t *h, void *arg, data_t **ret, |
488 rt_invoke_readProperties(scf_handle_t *h, void *arg, adr_data_t **ret, |
484 data_t **error) |
489 adr_data_t **error) |
485 { |
490 { |
486 radarg_t *ra = arg; |
491 radarg_t *ra = arg; |
487 smfobj_t *smfo = instance_getdata(ra->inst); |
492 smfobj_t *smfo = instance_getdata(ra->inst); |
488 const char *pgname = data_to_string(ra->args[0]); |
493 const char *pgname = adr_data_to_string(ra->args[0]); |
489 svcerr_t se = SE_OK; |
494 svcerr_t se = SE_OK; |
490 smfu_entity_t entity = SMFU_ENTITY_INIT; |
495 smfu_entity_t entity = SMFU_ENTITY_INIT; |
491 scf_propertygroup_t *pg = scf_pg_create(h); |
496 scf_propertygroup_t *pg = scf_pg_create(h); |
492 |
497 |
493 if (pg == NULL) { |
498 if (pg == NULL) { |
509 } |
514 } |
510 |
515 |
511 /*ARGSUSED*/ |
516 /*ARGSUSED*/ |
512 conerr_t |
517 conerr_t |
513 interface_Entity_invoke_readProperties(rad_instance_t *inst, adr_method_t *meth, |
518 interface_Entity_invoke_readProperties(rad_instance_t *inst, adr_method_t *meth, |
514 data_t **ret, data_t **args, int count, data_t **error) |
519 adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error) |
515 { |
520 { |
516 radarg_t ra = { .inst = inst, .args = args }; |
521 radarg_t ra = { .inst = inst, .args = args }; |
517 return (smfu_rtrun(rt_invoke_readProperties, &ra, ret, error)); |
522 return (smfu_rtrun(rt_invoke_readProperties, &ra, ret, error)); |
518 } |
523 } |
519 |
524 |
520 /*ARGSUSED*/ |
525 /*ARGSUSED*/ |
521 static svcerr_t |
526 static svcerr_t |
522 tx_write_prop(scf_handle_t *h, scf_transaction_t *tx, |
527 tx_write_prop(scf_handle_t *h, scf_transaction_t *tx, |
523 const char *name, scf_type_t type, data_t *values, data_t **error) |
528 const char *name, scf_type_t type, adr_data_t *values, adr_data_t **error) |
524 { |
529 { |
525 scf_transaction_entry_t *entry = scf_entry_create(h); |
530 scf_transaction_entry_t *entry = scf_entry_create(h); |
526 |
531 |
527 if (entry == NULL) |
532 if (entry == NULL) |
528 return (SE_FATAL); |
533 return (SE_FATAL); |
547 &e__ErrorTarget_PROPERTY, name, NULL)); |
552 &e__ErrorTarget_PROPERTY, name, NULL)); |
548 return (smfu_maperr(e)); |
553 return (smfu_maperr(e)); |
549 } |
554 } |
550 } |
555 } |
551 |
556 |
552 int nvalues = array_size(values); |
557 int nvalues = adr_array_size(values); |
553 for (int i = 0; i < nvalues; i++) { |
558 for (int i = 0; i < nvalues; i++) { |
554 const char *vstr = data_to_string(array_get(values, i)); |
559 const char *vstr = adr_data_to_string(adr_array_get(values, i)); |
555 scf_value_t *v = scf_value_create(h); |
560 scf_value_t *v = scf_value_create(h); |
556 if (v == NULL) |
561 if (v == NULL) |
557 return (SE_FATAL); |
562 return (SE_FATAL); |
558 if (scf_value_set_from_string(v, type, vstr) == -1 || |
563 if (scf_value_set_from_string(v, type, vstr) == -1 || |
559 scf_entry_add_value(entry, v) == -1) { |
564 scf_entry_add_value(entry, v) == -1) { |
569 return (SE_OK); |
574 return (SE_OK); |
570 } |
575 } |
571 |
576 |
572 /*ARGSUSED*/ |
577 /*ARGSUSED*/ |
573 static svcerr_t |
578 static svcerr_t |
574 rt_invoke_writeProperties(scf_handle_t *h, void *arg, data_t **ret, |
579 rt_invoke_writeProperties(scf_handle_t *h, void *arg, adr_data_t **ret, |
575 data_t **error) |
580 adr_data_t **error) |
576 { |
581 { |
577 radarg_t *ra = arg; |
582 radarg_t *ra = arg; |
578 smfobj_t *smfo = instance_getdata(ra->inst); |
583 smfobj_t *smfo = instance_getdata(ra->inst); |
579 const char *pgname = data_to_string(ra->args[0]); |
584 const char *pgname = adr_data_to_string(ra->args[0]); |
580 data_t *data = ra->args[1]; |
585 adr_data_t *data = ra->args[1]; |
581 svcerr_t se = SE_OK; |
586 svcerr_t se = SE_OK; |
582 smfu_entity_t entity = SMFU_ENTITY_INIT; |
587 smfu_entity_t entity = SMFU_ENTITY_INIT; |
583 scf_propertygroup_t *pg = scf_pg_create(h); |
588 scf_propertygroup_t *pg = scf_pg_create(h); |
584 scf_transaction_t *tx = scf_transaction_create(h); |
589 scf_transaction_t *tx = scf_transaction_create(h); |
585 |
590 |
596 |
601 |
597 top: |
602 top: |
598 if (scf_transaction_start(tx, pg) == -1) |
603 if (scf_transaction_start(tx, pg) == -1) |
599 goto txerror; |
604 goto txerror; |
600 |
605 |
601 int nprops = array_size(data); |
606 int nprops = adr_array_size(data); |
602 for (int i = 0; i < nprops; i++) { |
607 for (int i = 0; i < nprops; i++) { |
603 data_t *propdata = array_get(data, i); |
608 adr_data_t *propdata = adr_array_get(data, i); |
604 const char *propname = |
609 const char *propname = |
605 data_to_string(struct_get(propdata, "name")); |
610 adr_data_to_string(adr_struct_get(propdata, "name")); |
606 scf_type_t proptype = |
611 scf_type_t proptype = |
607 from_PropertyType(struct_get(propdata, "type")); |
612 from_PropertyType(adr_struct_get(propdata, "type")); |
608 data_t *values = struct_get(propdata, "values"); |
613 adr_data_t *values = adr_struct_get(propdata, "values"); |
609 |
614 |
610 se = tx_write_prop(h, tx, propname, proptype, values, error); |
615 se = tx_write_prop(h, tx, propname, proptype, values, error); |
611 if (se != SE_OK) |
616 if (se != SE_OK) |
612 goto done; |
617 goto done; |
613 } |
618 } |
645 } |
650 } |
646 |
651 |
647 /*ARGSUSED*/ |
652 /*ARGSUSED*/ |
648 conerr_t |
653 conerr_t |
649 interface_Entity_invoke_writeProperties(rad_instance_t *inst, |
654 interface_Entity_invoke_writeProperties(rad_instance_t *inst, |
650 adr_method_t *meth, data_t **ret, data_t **args, int count, data_t **error) |
655 adr_method_t *meth, adr_data_t **ret, adr_data_t **args, int count, |
|
656 adr_data_t **error) |
651 { |
657 { |
652 radarg_t ra = { .inst = inst, .args = args }; |
658 radarg_t ra = { .inst = inst, .args = args }; |
653 return (smfu_rtrun(rt_invoke_writeProperties, &ra, NULL, error)); |
659 return (smfu_rtrun(rt_invoke_writeProperties, &ra, NULL, error)); |
654 } |
660 } |
655 |
661 |
656 static svcerr_t |
662 static svcerr_t |
657 rt_invoke_readProperty(scf_handle_t *h, void *arg, data_t **ret, data_t **error) |
663 rt_invoke_readProperty(scf_handle_t *h, void *arg, adr_data_t **ret, |
|
664 adr_data_t **error) |
658 { |
665 { |
659 radarg_t *ra = arg; |
666 radarg_t *ra = arg; |
660 smfobj_t *smfo = instance_getdata(ra->inst); |
667 smfobj_t *smfo = instance_getdata(ra->inst); |
661 const char *pgname = data_to_string(ra->args[0]); |
668 const char *pgname = adr_data_to_string(ra->args[0]); |
662 const char *propname = data_to_string(ra->args[1]); |
669 const char *propname = adr_data_to_string(ra->args[1]); |
663 svcerr_t se = SE_OK; |
670 svcerr_t se = SE_OK; |
664 smfu_entity_t entity = SMFU_ENTITY_INIT; |
671 smfu_entity_t entity = SMFU_ENTITY_INIT; |
665 scf_propertygroup_t *pg = scf_pg_create(h); |
672 scf_propertygroup_t *pg = scf_pg_create(h); |
666 scf_property_t *prop = scf_property_create(h); |
673 scf_property_t *prop = scf_property_create(h); |
667 scf_iter_t *iter = scf_iter_create(h); |
674 scf_iter_t *iter = scf_iter_create(h); |
695 } |
702 } |
696 |
703 |
697 /*ARGSUSED*/ |
704 /*ARGSUSED*/ |
698 conerr_t |
705 conerr_t |
699 interface_Entity_invoke_readProperty(rad_instance_t *inst, adr_method_t *meth, |
706 interface_Entity_invoke_readProperty(rad_instance_t *inst, adr_method_t *meth, |
700 data_t **ret, data_t **args, int count, data_t **error) |
707 adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error) |
701 { |
708 { |
702 radarg_t ra = { .inst = inst, .args = args }; |
709 radarg_t ra = { .inst = inst, .args = args }; |
703 return (smfu_rtrun(rt_invoke_readProperty, &ra, ret, error)); |
710 return (smfu_rtrun(rt_invoke_readProperty, &ra, ret, error)); |
704 } |
711 } |
705 |
712 |
706 |
713 |
707 /*ARGSUSED*/ |
714 /*ARGSUSED*/ |
708 static svcerr_t |
715 static svcerr_t |
709 rt_invoke_writeProperty(scf_handle_t *h, void *arg, data_t **ret, |
716 rt_invoke_writeProperty(scf_handle_t *h, void *arg, adr_data_t **ret, |
710 data_t **error) |
717 adr_data_t **error) |
711 { |
718 { |
712 radarg_t *ra = arg; |
719 radarg_t *ra = arg; |
713 smfobj_t *smfo = instance_getdata(ra->inst); |
720 smfobj_t *smfo = instance_getdata(ra->inst); |
714 const char *pgname = data_to_string(ra->args[0]); |
721 const char *pgname = adr_data_to_string(ra->args[0]); |
715 const char *propname = data_to_string(ra->args[1]); |
722 const char *propname = adr_data_to_string(ra->args[1]); |
716 scf_type_t proptype = from_PropertyType(ra->args[2]); |
723 scf_type_t proptype = from_PropertyType(ra->args[2]); |
717 data_t *data = ra->args[3]; |
724 adr_data_t *data = ra->args[3]; |
718 svcerr_t se = SE_OK; |
725 svcerr_t se = SE_OK; |
719 smfu_entity_t entity = SMFU_ENTITY_INIT; |
726 smfu_entity_t entity = SMFU_ENTITY_INIT; |
720 scf_propertygroup_t *pg = scf_pg_create(h); |
727 scf_propertygroup_t *pg = scf_pg_create(h); |
721 scf_transaction_t *tx = scf_transaction_create(h); |
728 scf_transaction_t *tx = scf_transaction_create(h); |
722 |
729 |
772 } |
779 } |
773 |
780 |
774 /*ARGSUSED*/ |
781 /*ARGSUSED*/ |
775 conerr_t |
782 conerr_t |
776 interface_Entity_invoke_writeProperty(rad_instance_t *inst, adr_method_t *meth, |
783 interface_Entity_invoke_writeProperty(rad_instance_t *inst, adr_method_t *meth, |
777 data_t **ret, data_t **args, int count, data_t **error) |
784 adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error) |
778 { |
785 { |
779 radarg_t ra = { .inst = inst, .args = args }; |
786 radarg_t ra = { .inst = inst, .args = args }; |
780 return (smfu_rtrun(rt_invoke_writeProperty, &ra, NULL, error)); |
787 return (smfu_rtrun(rt_invoke_writeProperty, &ra, NULL, error)); |
781 } |
788 } |
782 |
789 |
783 static svcerr_t |
790 static svcerr_t |
784 tx_delete_prop(scf_handle_t *h, scf_transaction_t *tx, |
791 tx_delete_prop(scf_handle_t *h, scf_transaction_t *tx, |
785 const char *name, data_t **error) |
792 const char *name, adr_data_t **error) |
786 { |
793 { |
787 scf_transaction_entry_t *entry = scf_entry_create(h); |
794 scf_transaction_entry_t *entry = scf_entry_create(h); |
788 |
795 |
789 if (entry == NULL) |
796 if (entry == NULL) |
790 return (SE_FATAL); |
797 return (SE_FATAL); |
808 return (SE_OK); |
815 return (SE_OK); |
809 } |
816 } |
810 |
817 |
811 /*ARGSUSED*/ |
818 /*ARGSUSED*/ |
812 static svcerr_t |
819 static svcerr_t |
813 rt_invoke_deleteProperty(scf_handle_t *h, void *arg, data_t **ret, |
820 rt_invoke_deleteProperty(scf_handle_t *h, void *arg, adr_data_t **ret, |
814 data_t **error) |
821 adr_data_t **error) |
815 { |
822 { |
816 radarg_t *ra = arg; |
823 radarg_t *ra = arg; |
817 smfobj_t *smfo = instance_getdata(ra->inst); |
824 smfobj_t *smfo = instance_getdata(ra->inst); |
818 const char *pgname = data_to_string(ra->args[0]); |
825 const char *pgname = adr_data_to_string(ra->args[0]); |
819 const char *propname = data_to_string(ra->args[1]); |
826 const char *propname = adr_data_to_string(ra->args[1]); |
820 svcerr_t se = SE_OK; |
827 svcerr_t se = SE_OK; |
821 smfu_entity_t entity = SMFU_ENTITY_INIT; |
828 smfu_entity_t entity = SMFU_ENTITY_INIT; |
822 scf_propertygroup_t *pg = scf_pg_create(h); |
829 scf_propertygroup_t *pg = scf_pg_create(h); |
823 scf_transaction_t *tx = scf_transaction_create(h); |
830 scf_transaction_t *tx = scf_transaction_create(h); |
824 |
831 |
873 } |
880 } |
874 |
881 |
875 /*ARGSUSED*/ |
882 /*ARGSUSED*/ |
876 conerr_t |
883 conerr_t |
877 interface_Entity_invoke_deleteProperty(rad_instance_t *inst, adr_method_t *meth, |
884 interface_Entity_invoke_deleteProperty(rad_instance_t *inst, adr_method_t *meth, |
878 data_t **ret, data_t **args, int count, data_t **error) |
885 adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error) |
879 { |
886 { |
880 radarg_t ra = { .inst = inst, .args = args }; |
887 radarg_t ra = { .inst = inst, .args = args }; |
881 return (smfu_rtrun(rt_invoke_deleteProperty, &ra, NULL, error)); |
888 return (smfu_rtrun(rt_invoke_deleteProperty, &ra, NULL, error)); |
882 } |
889 } |
883 |
890 |
884 static svcerr_t |
891 static svcerr_t |
885 tx_delete_propcust(scf_handle_t *h, scf_transaction_t *tx, |
892 tx_delete_propcust(scf_handle_t *h, scf_transaction_t *tx, |
886 const char *name, data_t **error) |
893 const char *name, adr_data_t **error) |
887 { |
894 { |
888 svcerr_t se = SE_OK; |
895 svcerr_t se = SE_OK; |
889 scf_transaction_entry_t *entry = scf_entry_create(h); |
896 scf_transaction_entry_t *entry = scf_entry_create(h); |
890 |
897 |
891 if (entry == NULL) |
898 if (entry == NULL) |
914 return (se); |
921 return (se); |
915 } |
922 } |
916 |
923 |
917 /*ARGSUSED*/ |
924 /*ARGSUSED*/ |
918 static svcerr_t |
925 static svcerr_t |
919 rt_invoke_deletePropertyCust(scf_handle_t *h, void *arg, data_t **ret, |
926 rt_invoke_deletePropertyCust(scf_handle_t *h, void *arg, adr_data_t **ret, |
920 data_t **error) |
927 adr_data_t **error) |
921 { |
928 { |
922 radarg_t *ra = arg; |
929 radarg_t *ra = arg; |
923 smfobj_t *smfo = instance_getdata(ra->inst); |
930 smfobj_t *smfo = instance_getdata(ra->inst); |
924 const char *pgname = data_to_string(ra->args[0]); |
931 const char *pgname = adr_data_to_string(ra->args[0]); |
925 const char *propname = data_to_string(ra->args[1]); |
932 const char *propname = adr_data_to_string(ra->args[1]); |
926 svcerr_t se = SE_OK; |
933 svcerr_t se = SE_OK; |
927 smfu_entity_t entity = SMFU_ENTITY_INIT; |
934 smfu_entity_t entity = SMFU_ENTITY_INIT; |
928 scf_propertygroup_t *pg = scf_pg_create(h); |
935 scf_propertygroup_t *pg = scf_pg_create(h); |
929 scf_transaction_t *tx = scf_transaction_create(h); |
936 scf_transaction_t *tx = scf_transaction_create(h); |
930 |
937 |
979 } |
986 } |
980 |
987 |
981 /*ARGSUSED*/ |
988 /*ARGSUSED*/ |
982 conerr_t |
989 conerr_t |
983 interface_Entity_invoke_deletePropertyCust(rad_instance_t *inst, |
990 interface_Entity_invoke_deletePropertyCust(rad_instance_t *inst, |
984 adr_method_t *meth, data_t **ret, data_t **args, int count, data_t **error) |
991 adr_method_t *meth, adr_data_t **ret, adr_data_t **args, int count, |
|
992 adr_data_t **error) |
985 { |
993 { |
986 radarg_t ra = { .inst = inst, .args = args }; |
994 radarg_t ra = { .inst = inst, .args = args }; |
987 return (smfu_rtrun(rt_invoke_deletePropertyCust, &ra, NULL, error)); |
995 return (smfu_rtrun(rt_invoke_deletePropertyCust, &ra, NULL, error)); |
988 } |
996 } |
989 |
997 |
1034 } |
1043 } |
1035 |
1044 |
1036 /*ARGSUSED*/ |
1045 /*ARGSUSED*/ |
1037 conerr_t |
1046 conerr_t |
1038 interface_Entity_invoke_getCommonName(rad_instance_t *inst, adr_method_t *meth, |
1047 interface_Entity_invoke_getCommonName(rad_instance_t *inst, adr_method_t *meth, |
1039 data_t **ret, data_t **args, int count, data_t **error) |
1048 adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error) |
1040 { |
1049 { |
1041 struct tmplarg ta = { |
1050 struct tmplarg ta = { |
1042 .smfo = instance_getdata(inst), |
1051 .smfo = instance_getdata(inst), |
1043 .pgname = SCF_PG_TM_COMMON_NAME, |
1052 .pgname = SCF_PG_TM_COMMON_NAME, |
1044 .locale = data_to_string(args[0]) |
1053 .locale = adr_data_to_string(args[0]) |
1045 }; |
1054 }; |
1046 return (smfu_rtrun_opt(rt_get_template, &ta, ret, error)); |
1055 return (smfu_rtrun_opt(rt_get_template, &ta, ret, error)); |
1047 } |
1056 } |
1048 |
1057 |
1049 /*ARGSUSED*/ |
1058 /*ARGSUSED*/ |
1050 conerr_t |
1059 conerr_t |
1051 interface_Entity_invoke_getDescription(rad_instance_t *inst, adr_method_t *meth, |
1060 interface_Entity_invoke_getDescription(rad_instance_t *inst, adr_method_t *meth, |
1052 data_t **ret, data_t **args, int count, data_t **error) |
1061 adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error) |
1053 { |
1062 { |
1054 struct tmplarg ta = { |
1063 struct tmplarg ta = { |
1055 .smfo = instance_getdata(inst), |
1064 .smfo = instance_getdata(inst), |
1056 .pgname = SCF_PG_TM_DESCRIPTION, |
1065 .pgname = SCF_PG_TM_DESCRIPTION, |
1057 .locale = data_to_string(args[0]) |
1066 .locale = adr_data_to_string(args[0]) |
1058 }; |
1067 }; |
1059 return (smfu_rtrun_opt(rt_get_template, &ta, ret, error)); |
1068 return (smfu_rtrun_opt(rt_get_template, &ta, ret, error)); |
1060 } |
1069 } |
1061 |
1070 |
1062 |
1071 |
1063 /*ARGSUSED*/ |
1072 /*ARGSUSED*/ |
1064 static svcerr_t |
1073 static svcerr_t |
1065 rt_invoke_getPGTemplates(scf_handle_t *h, void *arg, data_t **ret, |
1074 rt_invoke_getPGTemplates(scf_handle_t *h, void *arg, adr_data_t **ret, |
1066 data_t **error) |
1075 adr_data_t **error) |
1067 { |
1076 { |
1068 radarg_t *ra = arg; |
1077 radarg_t *ra = arg; |
1069 smfobj_t *smfo = instance_getdata(ra->inst); |
1078 smfobj_t *smfo = instance_getdata(ra->inst); |
1070 const char *locale = data_to_string(ra->args[0]); |
1079 const char *locale = adr_data_to_string(ra->args[0]); |
1071 svcerr_t se = SE_OK; |
1080 svcerr_t se = SE_OK; |
1072 data_t *result = data_new_array(&t_array__PGTemplate, 5); |
1081 adr_data_t *result = adr_data_new_array(&t_array__PGTemplate, 5); |
1073 |
1082 |
1074 scf_pg_tmpl_t *pgtmpl = scf_tmpl_pg_create(h); |
1083 scf_pg_tmpl_t *pgtmpl = scf_tmpl_pg_create(h); |
1075 if (pgtmpl == NULL) { |
1084 if (pgtmpl == NULL) { |
1076 se = SE_FATAL; |
1085 se = SE_FATAL; |
1077 goto done; |
1086 goto done; |
1078 } |
1087 } |
1079 |
1088 |
1080 int e; |
1089 int e; |
1081 while ((e = scf_tmpl_iter_pgs(pgtmpl, smfo->fmri, NULL, NULL, |
1090 while ((e = scf_tmpl_iter_pgs(pgtmpl, smfo->fmri, NULL, NULL, |
1082 SCF_PG_TMPL_FLAG_CURRENT)) == 1) { |
1091 SCF_PG_TMPL_FLAG_CURRENT)) == 1) { |
1083 data_t *t = NULL; |
1092 adr_data_t *t = NULL; |
1084 if ((se = create_PGTemplate(pgtmpl, locale, &t)) != SE_OK) |
1093 if ((se = create_PGTemplate(pgtmpl, locale, &t)) != SE_OK) |
1085 goto done; |
1094 goto done; |
1086 (void) array_add(result, t); |
1095 (void) adr_array_add(result, t); |
1087 } |
1096 } |
1088 if (e == -1) |
1097 if (e == -1) |
1089 se = smfu_maperr(scf_error()); |
1098 se = smfu_maperr(scf_error()); |
1090 done: |
1099 done: |
1091 *ret = result; |
1100 *ret = result; |
1095 } |
1104 } |
1096 |
1105 |
1097 /*ARGSUSED*/ |
1106 /*ARGSUSED*/ |
1098 conerr_t |
1107 conerr_t |
1099 interface_Entity_invoke_getPGTemplates(rad_instance_t *inst, adr_method_t *meth, |
1108 interface_Entity_invoke_getPGTemplates(rad_instance_t *inst, adr_method_t *meth, |
1100 data_t **ret, data_t **args, int count, data_t **error) |
1109 adr_data_t **ret, adr_data_t **args, int count, adr_data_t **error) |
1101 { |
1110 { |
1102 radarg_t ra = { .inst = inst, .args = args }; |
1111 radarg_t ra = { .inst = inst, .args = args }; |
1103 return (smfu_rtrun(rt_invoke_getPGTemplates, &ra, ret, error)); |
1112 return (smfu_rtrun(rt_invoke_getPGTemplates, &ra, ret, error)); |
1104 } |
1113 } |
1105 |
1114 |
1106 |
1115 |
1107 /*ARGSUSED*/ |
1116 /*ARGSUSED*/ |
1108 static svcerr_t |
1117 static svcerr_t |
1109 rt_invoke_getPropTemplates(scf_handle_t *h, void *arg, data_t **ret, |
1118 rt_invoke_getPropTemplates(scf_handle_t *h, void *arg, adr_data_t **ret, |
1110 data_t **error) |
1119 adr_data_t **error) |
1111 { |
1120 { |
1112 radarg_t *ra = arg; |
1121 radarg_t *ra = arg; |
1113 smfobj_t *smfo = instance_getdata(ra->inst); |
1122 smfobj_t *smfo = instance_getdata(ra->inst); |
1114 const char *pgname = data_to_string(ra->args[0]); |
1123 const char *pgname = adr_data_to_string(ra->args[0]); |
1115 const char *pgtype = data_to_string(ra->args[1]); |
1124 const char *pgtype = adr_data_to_string(ra->args[1]); |
1116 const char *locale = data_to_string(ra->args[2]); |
1125 const char *locale = adr_data_to_string(ra->args[2]); |
1117 svcerr_t se = SE_OK; |
1126 svcerr_t se = SE_OK; |
1118 data_t *result = data_new_array(&t_array__PropTemplate, 5); |
1127 adr_data_t *result = adr_data_new_array(&t_array__PropTemplate, 5); |
1119 |
1128 |
1120 scf_pg_tmpl_t *pgtmpl = scf_tmpl_pg_create(h); |
1129 scf_pg_tmpl_t *pgtmpl = scf_tmpl_pg_create(h); |
1121 scf_prop_tmpl_t *proptmpl = scf_tmpl_prop_create(h); |
1130 scf_prop_tmpl_t *proptmpl = scf_tmpl_prop_create(h); |
1122 |
1131 |
1123 if (pgtmpl == NULL || proptmpl == NULL) { |
1132 if (pgtmpl == NULL || proptmpl == NULL) { |
1149 } |
1158 } |
1150 |
1159 |
1151 /*ARGSUSED*/ |
1160 /*ARGSUSED*/ |
1152 conerr_t |
1161 conerr_t |
1153 interface_Entity_invoke_getPropTemplates(rad_instance_t *inst, |
1162 interface_Entity_invoke_getPropTemplates(rad_instance_t *inst, |
1154 adr_method_t *meth, data_t **ret, data_t **args, int count, data_t **error) |
1163 adr_method_t *meth, adr_data_t **ret, adr_data_t **args, int count, |
|
1164 adr_data_t **error) |
1155 { |
1165 { |
1156 radarg_t ra = { .inst = inst, .args = args }; |
1166 radarg_t ra = { .inst = inst, .args = args }; |
1157 return (smfu_rtrun(rt_invoke_getPropTemplates, &ra, ret, error)); |
1167 return (smfu_rtrun(rt_invoke_getPropTemplates, &ra, ret, error)); |
1158 } |
1168 } |