1*13080SPavan.Mettu@Oracle.COM /*
2*13080SPavan.Mettu@Oracle.COM * CDDL HEADER START
3*13080SPavan.Mettu@Oracle.COM *
4*13080SPavan.Mettu@Oracle.COM * The contents of this file are subject to the terms of the
5*13080SPavan.Mettu@Oracle.COM * Common Development and Distribution License (the "License").
6*13080SPavan.Mettu@Oracle.COM * You may not use this file except in compliance with the License.
7*13080SPavan.Mettu@Oracle.COM *
8*13080SPavan.Mettu@Oracle.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*13080SPavan.Mettu@Oracle.COM * or http://www.opensolaris.org/os/licensing.
10*13080SPavan.Mettu@Oracle.COM * See the License for the specific language governing permissions
11*13080SPavan.Mettu@Oracle.COM * and limitations under the License.
12*13080SPavan.Mettu@Oracle.COM *
13*13080SPavan.Mettu@Oracle.COM * When distributing Covered Code, include this CDDL HEADER in each
14*13080SPavan.Mettu@Oracle.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*13080SPavan.Mettu@Oracle.COM * If applicable, add the following below this CDDL HEADER, with the
16*13080SPavan.Mettu@Oracle.COM * fields enclosed by brackets "[]" replaced with your own identifying
17*13080SPavan.Mettu@Oracle.COM * information: Portions Copyright [yyyy] [name of copyright owner]
18*13080SPavan.Mettu@Oracle.COM *
19*13080SPavan.Mettu@Oracle.COM * CDDL HEADER END
20*13080SPavan.Mettu@Oracle.COM */
21*13080SPavan.Mettu@Oracle.COM /*
22*13080SPavan.Mettu@Oracle.COM * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
23*13080SPavan.Mettu@Oracle.COM */
24*13080SPavan.Mettu@Oracle.COM #include <stdio.h>
25*13080SPavan.Mettu@Oracle.COM #include <stdlib.h>
26*13080SPavan.Mettu@Oracle.COM #include <syslog.h>
27*13080SPavan.Mettu@Oracle.COM #include <stdarg.h>
28*13080SPavan.Mettu@Oracle.COM #include "smfcfg.h"
29*13080SPavan.Mettu@Oracle.COM
30*13080SPavan.Mettu@Oracle.COM fs_smfhandle_t *
fs_smf_init(char * fmri,char * instance)31*13080SPavan.Mettu@Oracle.COM fs_smf_init(char *fmri, char *instance)
32*13080SPavan.Mettu@Oracle.COM {
33*13080SPavan.Mettu@Oracle.COM fs_smfhandle_t *handle = NULL;
34*13080SPavan.Mettu@Oracle.COM char *svcname, srv[MAXPATHLEN];
35*13080SPavan.Mettu@Oracle.COM
36*13080SPavan.Mettu@Oracle.COM /*
37*13080SPavan.Mettu@Oracle.COM * svc name is of the form svc://network/fs/server:instance1
38*13080SPavan.Mettu@Oracle.COM * FMRI portion is /network/fs/server
39*13080SPavan.Mettu@Oracle.COM */
40*13080SPavan.Mettu@Oracle.COM snprintf(srv, MAXPATHLEN, "%s", fmri + strlen("svc:/"));
41*13080SPavan.Mettu@Oracle.COM svcname = strrchr(srv, ':');
42*13080SPavan.Mettu@Oracle.COM if (svcname != NULL)
43*13080SPavan.Mettu@Oracle.COM *svcname = '\0';
44*13080SPavan.Mettu@Oracle.COM svcname = srv;
45*13080SPavan.Mettu@Oracle.COM
46*13080SPavan.Mettu@Oracle.COM handle = calloc(1, sizeof (fs_smfhandle_t));
47*13080SPavan.Mettu@Oracle.COM if (handle != NULL) {
48*13080SPavan.Mettu@Oracle.COM handle->fs_handle = scf_handle_create(SCF_VERSION);
49*13080SPavan.Mettu@Oracle.COM if (handle->fs_handle == NULL)
50*13080SPavan.Mettu@Oracle.COM goto out;
51*13080SPavan.Mettu@Oracle.COM if (scf_handle_bind(handle->fs_handle) != 0)
52*13080SPavan.Mettu@Oracle.COM goto out;
53*13080SPavan.Mettu@Oracle.COM handle->fs_service =
54*13080SPavan.Mettu@Oracle.COM scf_service_create(handle->fs_handle);
55*13080SPavan.Mettu@Oracle.COM handle->fs_scope =
56*13080SPavan.Mettu@Oracle.COM scf_scope_create(handle->fs_handle);
57*13080SPavan.Mettu@Oracle.COM if (scf_handle_get_local_scope(handle->fs_handle,
58*13080SPavan.Mettu@Oracle.COM handle->fs_scope) != 0)
59*13080SPavan.Mettu@Oracle.COM goto out;
60*13080SPavan.Mettu@Oracle.COM if (scf_scope_get_service(handle->fs_scope,
61*13080SPavan.Mettu@Oracle.COM svcname, handle->fs_service) != SCF_SUCCESS) {
62*13080SPavan.Mettu@Oracle.COM goto out;
63*13080SPavan.Mettu@Oracle.COM }
64*13080SPavan.Mettu@Oracle.COM handle->fs_pg =
65*13080SPavan.Mettu@Oracle.COM scf_pg_create(handle->fs_handle);
66*13080SPavan.Mettu@Oracle.COM handle->fs_instance =
67*13080SPavan.Mettu@Oracle.COM scf_instance_create(handle->fs_handle);
68*13080SPavan.Mettu@Oracle.COM handle->fs_property =
69*13080SPavan.Mettu@Oracle.COM scf_property_create(handle->fs_handle);
70*13080SPavan.Mettu@Oracle.COM handle->fs_value =
71*13080SPavan.Mettu@Oracle.COM scf_value_create(handle->fs_handle);
72*13080SPavan.Mettu@Oracle.COM } else {
73*13080SPavan.Mettu@Oracle.COM fprintf(stderr,
74*13080SPavan.Mettu@Oracle.COM gettext("Cannot access SMF repository: %s\n"), fmri);
75*13080SPavan.Mettu@Oracle.COM }
76*13080SPavan.Mettu@Oracle.COM return (handle);
77*13080SPavan.Mettu@Oracle.COM
78*13080SPavan.Mettu@Oracle.COM out:
79*13080SPavan.Mettu@Oracle.COM fs_smf_fini(handle);
80*13080SPavan.Mettu@Oracle.COM fprintf(stderr, gettext("SMF Initialization problems..%s\n"), fmri);
81*13080SPavan.Mettu@Oracle.COM return (NULL);
82*13080SPavan.Mettu@Oracle.COM }
83*13080SPavan.Mettu@Oracle.COM
84*13080SPavan.Mettu@Oracle.COM
85*13080SPavan.Mettu@Oracle.COM void
fs_smf_fini(fs_smfhandle_t * handle)86*13080SPavan.Mettu@Oracle.COM fs_smf_fini(fs_smfhandle_t *handle)
87*13080SPavan.Mettu@Oracle.COM {
88*13080SPavan.Mettu@Oracle.COM if (handle != NULL) {
89*13080SPavan.Mettu@Oracle.COM scf_scope_destroy(handle->fs_scope);
90*13080SPavan.Mettu@Oracle.COM scf_instance_destroy(handle->fs_instance);
91*13080SPavan.Mettu@Oracle.COM scf_service_destroy(handle->fs_service);
92*13080SPavan.Mettu@Oracle.COM scf_pg_destroy(handle->fs_pg);
93*13080SPavan.Mettu@Oracle.COM scf_property_destroy(handle->fs_property);
94*13080SPavan.Mettu@Oracle.COM scf_value_destroy(handle->fs_value);
95*13080SPavan.Mettu@Oracle.COM if (handle->fs_handle != NULL) {
96*13080SPavan.Mettu@Oracle.COM scf_handle_unbind(handle->fs_handle);
97*13080SPavan.Mettu@Oracle.COM scf_handle_destroy(handle->fs_handle);
98*13080SPavan.Mettu@Oracle.COM }
99*13080SPavan.Mettu@Oracle.COM free(handle);
100*13080SPavan.Mettu@Oracle.COM }
101*13080SPavan.Mettu@Oracle.COM }
102*13080SPavan.Mettu@Oracle.COM
103*13080SPavan.Mettu@Oracle.COM int
fs_smf_set_prop(smf_fstype_t fstype,char * prop_name,char * valbuf,char * instance,scf_type_t sctype,char * fmri)104*13080SPavan.Mettu@Oracle.COM fs_smf_set_prop(smf_fstype_t fstype, char *prop_name, char *valbuf,
105*13080SPavan.Mettu@Oracle.COM char *instance, scf_type_t sctype, char *fmri)
106*13080SPavan.Mettu@Oracle.COM {
107*13080SPavan.Mettu@Oracle.COM fs_smfhandle_t *phandle;
108*13080SPavan.Mettu@Oracle.COM scf_handle_t *handle;
109*13080SPavan.Mettu@Oracle.COM scf_propertygroup_t *pg;
110*13080SPavan.Mettu@Oracle.COM scf_property_t *prop;
111*13080SPavan.Mettu@Oracle.COM scf_transaction_t *tran;
112*13080SPavan.Mettu@Oracle.COM scf_transaction_entry_t *entry;
113*13080SPavan.Mettu@Oracle.COM scf_instance_t *inst;
114*13080SPavan.Mettu@Oracle.COM scf_value_t *val;
115*13080SPavan.Mettu@Oracle.COM int valint;
116*13080SPavan.Mettu@Oracle.COM int index = 0;
117*13080SPavan.Mettu@Oracle.COM int ret = 0;
118*13080SPavan.Mettu@Oracle.COM char *p = NULL;
119*13080SPavan.Mettu@Oracle.COM char *svcname, srv[MAXPATHLEN];
120*13080SPavan.Mettu@Oracle.COM const char *pgname;
121*13080SPavan.Mettu@Oracle.COM
122*13080SPavan.Mettu@Oracle.COM /*
123*13080SPavan.Mettu@Oracle.COM * The SVC names we are using currently are already
124*13080SPavan.Mettu@Oracle.COM * appended by default. Fix this for instances project.
125*13080SPavan.Mettu@Oracle.COM */
126*13080SPavan.Mettu@Oracle.COM snprintf(srv, MAXPATHLEN, "%s", fmri);
127*13080SPavan.Mettu@Oracle.COM p = strstr(fmri, ":default");
128*13080SPavan.Mettu@Oracle.COM if (p == NULL) {
129*13080SPavan.Mettu@Oracle.COM strcat(srv, ":");
130*13080SPavan.Mettu@Oracle.COM if (instance == NULL)
131*13080SPavan.Mettu@Oracle.COM instance = "default";
132*13080SPavan.Mettu@Oracle.COM if (strlen(srv) + strlen(instance) > MAXPATHLEN)
133*13080SPavan.Mettu@Oracle.COM goto out;
134*13080SPavan.Mettu@Oracle.COM strncat(srv, instance, strlen(instance));
135*13080SPavan.Mettu@Oracle.COM }
136*13080SPavan.Mettu@Oracle.COM svcname = srv;
137*13080SPavan.Mettu@Oracle.COM phandle = fs_smf_init(fmri, instance);
138*13080SPavan.Mettu@Oracle.COM if (phandle == NULL) {
139*13080SPavan.Mettu@Oracle.COM return (SMF_SYSTEM_ERR);
140*13080SPavan.Mettu@Oracle.COM }
141*13080SPavan.Mettu@Oracle.COM handle = phandle->fs_handle;
142*13080SPavan.Mettu@Oracle.COM pg = phandle->fs_pg;
143*13080SPavan.Mettu@Oracle.COM prop = phandle->fs_property;
144*13080SPavan.Mettu@Oracle.COM inst = phandle->fs_instance;
145*13080SPavan.Mettu@Oracle.COM val = phandle->fs_value;
146*13080SPavan.Mettu@Oracle.COM tran = scf_transaction_create(handle);
147*13080SPavan.Mettu@Oracle.COM entry = scf_entry_create(handle);
148*13080SPavan.Mettu@Oracle.COM
149*13080SPavan.Mettu@Oracle.COM if (handle == NULL || pg == NULL || prop == NULL ||
150*13080SPavan.Mettu@Oracle.COM val == NULL|| tran == NULL || entry == NULL || inst == NULL) {
151*13080SPavan.Mettu@Oracle.COM ret = SMF_SYSTEM_ERR;
152*13080SPavan.Mettu@Oracle.COM goto out;
153*13080SPavan.Mettu@Oracle.COM }
154*13080SPavan.Mettu@Oracle.COM
155*13080SPavan.Mettu@Oracle.COM if (scf_handle_decode_fmri(handle, svcname, phandle->fs_scope,
156*13080SPavan.Mettu@Oracle.COM phandle->fs_service, inst, NULL, NULL, 0) != 0) {
157*13080SPavan.Mettu@Oracle.COM ret = scf_error();
158*13080SPavan.Mettu@Oracle.COM goto out;
159*13080SPavan.Mettu@Oracle.COM }
160*13080SPavan.Mettu@Oracle.COM if (fstype == AUTOFS_SMF)
161*13080SPavan.Mettu@Oracle.COM pgname = AUTOFS_PROPS_PGNAME;
162*13080SPavan.Mettu@Oracle.COM else
163*13080SPavan.Mettu@Oracle.COM pgname = NFS_PROPS_PGNAME;
164*13080SPavan.Mettu@Oracle.COM
165*13080SPavan.Mettu@Oracle.COM if (scf_instance_get_pg(inst, pgname,
166*13080SPavan.Mettu@Oracle.COM pg) != -1) {
167*13080SPavan.Mettu@Oracle.COM uint8_t vint;
168*13080SPavan.Mettu@Oracle.COM if (scf_transaction_start(tran, pg) == -1) {
169*13080SPavan.Mettu@Oracle.COM ret = scf_error();
170*13080SPavan.Mettu@Oracle.COM goto out;
171*13080SPavan.Mettu@Oracle.COM }
172*13080SPavan.Mettu@Oracle.COM switch (sctype) {
173*13080SPavan.Mettu@Oracle.COM case SCF_TYPE_INTEGER:
174*13080SPavan.Mettu@Oracle.COM errno = 0;
175*13080SPavan.Mettu@Oracle.COM valint = strtoul(valbuf, NULL, 0);
176*13080SPavan.Mettu@Oracle.COM if (errno != 0) {
177*13080SPavan.Mettu@Oracle.COM ret = SMF_SYSTEM_ERR;
178*13080SPavan.Mettu@Oracle.COM goto out;
179*13080SPavan.Mettu@Oracle.COM }
180*13080SPavan.Mettu@Oracle.COM if (scf_transaction_property_change(tran,
181*13080SPavan.Mettu@Oracle.COM entry, prop_name, SCF_TYPE_INTEGER) == 0) {
182*13080SPavan.Mettu@Oracle.COM scf_value_set_integer(val, valint);
183*13080SPavan.Mettu@Oracle.COM if (scf_entry_add_value(entry, val) < 0) {
184*13080SPavan.Mettu@Oracle.COM ret = scf_error();
185*13080SPavan.Mettu@Oracle.COM goto out;
186*13080SPavan.Mettu@Oracle.COM }
187*13080SPavan.Mettu@Oracle.COM }
188*13080SPavan.Mettu@Oracle.COM break;
189*13080SPavan.Mettu@Oracle.COM case SCF_TYPE_ASTRING:
190*13080SPavan.Mettu@Oracle.COM if (scf_transaction_property_change(tran, entry,
191*13080SPavan.Mettu@Oracle.COM prop_name, SCF_TYPE_ASTRING) == 0) {
192*13080SPavan.Mettu@Oracle.COM if (scf_value_set_astring(val,
193*13080SPavan.Mettu@Oracle.COM valbuf) == 0) {
194*13080SPavan.Mettu@Oracle.COM if (scf_entry_add_value(entry,
195*13080SPavan.Mettu@Oracle.COM val) != 0) {
196*13080SPavan.Mettu@Oracle.COM ret = scf_error();
197*13080SPavan.Mettu@Oracle.COM goto out;
198*13080SPavan.Mettu@Oracle.COM }
199*13080SPavan.Mettu@Oracle.COM } else
200*13080SPavan.Mettu@Oracle.COM ret = SMF_SYSTEM_ERR;
201*13080SPavan.Mettu@Oracle.COM } else
202*13080SPavan.Mettu@Oracle.COM ret = SMF_SYSTEM_ERR;
203*13080SPavan.Mettu@Oracle.COM break;
204*13080SPavan.Mettu@Oracle.COM case SCF_TYPE_BOOLEAN:
205*13080SPavan.Mettu@Oracle.COM if (strcmp(valbuf, "1") == 0) {
206*13080SPavan.Mettu@Oracle.COM vint = 1;
207*13080SPavan.Mettu@Oracle.COM } else if (strcmp(valbuf, "0") == 0) {
208*13080SPavan.Mettu@Oracle.COM vint = 0;
209*13080SPavan.Mettu@Oracle.COM } else {
210*13080SPavan.Mettu@Oracle.COM ret = SMF_SYSTEM_ERR;
211*13080SPavan.Mettu@Oracle.COM break;
212*13080SPavan.Mettu@Oracle.COM }
213*13080SPavan.Mettu@Oracle.COM if (scf_transaction_property_change(tran, entry,
214*13080SPavan.Mettu@Oracle.COM prop_name, SCF_TYPE_BOOLEAN) == 0) {
215*13080SPavan.Mettu@Oracle.COM scf_value_set_boolean(val, (uint8_t)vint);
216*13080SPavan.Mettu@Oracle.COM if (scf_entry_add_value(entry, val) != 0) {
217*13080SPavan.Mettu@Oracle.COM ret = scf_error();
218*13080SPavan.Mettu@Oracle.COM goto out;
219*13080SPavan.Mettu@Oracle.COM }
220*13080SPavan.Mettu@Oracle.COM } else {
221*13080SPavan.Mettu@Oracle.COM ret = SMF_SYSTEM_ERR;
222*13080SPavan.Mettu@Oracle.COM }
223*13080SPavan.Mettu@Oracle.COM break;
224*13080SPavan.Mettu@Oracle.COM }
225*13080SPavan.Mettu@Oracle.COM if (ret != SMF_SYSTEM_ERR)
226*13080SPavan.Mettu@Oracle.COM scf_transaction_commit(tran);
227*13080SPavan.Mettu@Oracle.COM }
228*13080SPavan.Mettu@Oracle.COM out:
229*13080SPavan.Mettu@Oracle.COM if (tran != NULL)
230*13080SPavan.Mettu@Oracle.COM scf_transaction_destroy(tran);
231*13080SPavan.Mettu@Oracle.COM if (entry != NULL)
232*13080SPavan.Mettu@Oracle.COM scf_entry_destroy(entry);
233*13080SPavan.Mettu@Oracle.COM fs_smf_fini(phandle);
234*13080SPavan.Mettu@Oracle.COM return (ret);
235*13080SPavan.Mettu@Oracle.COM }
236*13080SPavan.Mettu@Oracle.COM
237*13080SPavan.Mettu@Oracle.COM int
fs_smf_get_prop(smf_fstype_t fstype,char * prop_name,char * cbuf,char * instance,scf_type_t sctype,char * fmri,int * bufsz)238*13080SPavan.Mettu@Oracle.COM fs_smf_get_prop(smf_fstype_t fstype, char *prop_name, char *cbuf,
239*13080SPavan.Mettu@Oracle.COM char *instance, scf_type_t sctype, char *fmri, int *bufsz)
240*13080SPavan.Mettu@Oracle.COM {
241*13080SPavan.Mettu@Oracle.COM fs_smfhandle_t *phandle;
242*13080SPavan.Mettu@Oracle.COM scf_handle_t *handle;
243*13080SPavan.Mettu@Oracle.COM scf_propertygroup_t *pg;
244*13080SPavan.Mettu@Oracle.COM scf_property_t *prop;
245*13080SPavan.Mettu@Oracle.COM scf_value_t *val;
246*13080SPavan.Mettu@Oracle.COM scf_instance_t *inst;
247*13080SPavan.Mettu@Oracle.COM int ret = 0, len = 0, length;
248*13080SPavan.Mettu@Oracle.COM int64_t valint = 0;
249*13080SPavan.Mettu@Oracle.COM char srv[MAXPATHLEN], *p, *svcname;
250*13080SPavan.Mettu@Oracle.COM const char *pgname;
251*13080SPavan.Mettu@Oracle.COM uint8_t bval;
252*13080SPavan.Mettu@Oracle.COM
253*13080SPavan.Mettu@Oracle.COM /*
254*13080SPavan.Mettu@Oracle.COM * The SVC names we are using currently are already
255*13080SPavan.Mettu@Oracle.COM * appended by default. Fix this for instances project.
256*13080SPavan.Mettu@Oracle.COM */
257*13080SPavan.Mettu@Oracle.COM snprintf(srv, MAXPATHLEN, "%s", fmri);
258*13080SPavan.Mettu@Oracle.COM p = strstr(fmri, ":default");
259*13080SPavan.Mettu@Oracle.COM if (p == NULL) {
260*13080SPavan.Mettu@Oracle.COM strcat(srv, ":");
261*13080SPavan.Mettu@Oracle.COM if (instance == NULL)
262*13080SPavan.Mettu@Oracle.COM instance = "default";
263*13080SPavan.Mettu@Oracle.COM if (strlen(srv) + strlen(instance) > MAXPATHLEN)
264*13080SPavan.Mettu@Oracle.COM goto out;
265*13080SPavan.Mettu@Oracle.COM strncat(srv, instance, strlen(instance));
266*13080SPavan.Mettu@Oracle.COM }
267*13080SPavan.Mettu@Oracle.COM svcname = srv;
268*13080SPavan.Mettu@Oracle.COM phandle = fs_smf_init(fmri, instance);
269*13080SPavan.Mettu@Oracle.COM if (phandle == NULL)
270*13080SPavan.Mettu@Oracle.COM return (SMF_SYSTEM_ERR);
271*13080SPavan.Mettu@Oracle.COM handle = phandle->fs_handle;
272*13080SPavan.Mettu@Oracle.COM pg = phandle->fs_pg;
273*13080SPavan.Mettu@Oracle.COM inst = phandle->fs_instance;
274*13080SPavan.Mettu@Oracle.COM prop = phandle->fs_property;
275*13080SPavan.Mettu@Oracle.COM val = phandle->fs_value;
276*13080SPavan.Mettu@Oracle.COM
277*13080SPavan.Mettu@Oracle.COM if (handle == NULL || pg == NULL || prop == NULL || val == NULL ||
278*13080SPavan.Mettu@Oracle.COM inst == NULL) {
279*13080SPavan.Mettu@Oracle.COM return (SMF_SYSTEM_ERR);
280*13080SPavan.Mettu@Oracle.COM }
281*13080SPavan.Mettu@Oracle.COM
282*13080SPavan.Mettu@Oracle.COM
283*13080SPavan.Mettu@Oracle.COM if (scf_handle_decode_fmri(handle, svcname, phandle->fs_scope,
284*13080SPavan.Mettu@Oracle.COM phandle->fs_service, inst, NULL, NULL, 0) != 0) {
285*13080SPavan.Mettu@Oracle.COM ret = scf_error();
286*13080SPavan.Mettu@Oracle.COM goto out;
287*13080SPavan.Mettu@Oracle.COM }
288*13080SPavan.Mettu@Oracle.COM
289*13080SPavan.Mettu@Oracle.COM if (fstype == AUTOFS_SMF)
290*13080SPavan.Mettu@Oracle.COM pgname = AUTOFS_PROPS_PGNAME;
291*13080SPavan.Mettu@Oracle.COM else
292*13080SPavan.Mettu@Oracle.COM pgname = NFS_PROPS_PGNAME;
293*13080SPavan.Mettu@Oracle.COM
294*13080SPavan.Mettu@Oracle.COM if (scf_instance_get_pg(inst, pgname, pg) != -1) {
295*13080SPavan.Mettu@Oracle.COM if (scf_pg_get_property(pg, prop_name,
296*13080SPavan.Mettu@Oracle.COM prop) != SCF_SUCCESS) {
297*13080SPavan.Mettu@Oracle.COM ret = scf_error();
298*13080SPavan.Mettu@Oracle.COM goto out;
299*13080SPavan.Mettu@Oracle.COM }
300*13080SPavan.Mettu@Oracle.COM if (scf_property_get_value(prop, val) != SCF_SUCCESS) {
301*13080SPavan.Mettu@Oracle.COM ret = scf_error();
302*13080SPavan.Mettu@Oracle.COM goto out;
303*13080SPavan.Mettu@Oracle.COM }
304*13080SPavan.Mettu@Oracle.COM switch (sctype) {
305*13080SPavan.Mettu@Oracle.COM case SCF_TYPE_ASTRING:
306*13080SPavan.Mettu@Oracle.COM len = scf_value_get_astring(val, cbuf, *bufsz);
307*13080SPavan.Mettu@Oracle.COM if (len < 0 || len > *bufsz) {
308*13080SPavan.Mettu@Oracle.COM ret = scf_error();
309*13080SPavan.Mettu@Oracle.COM goto out;
310*13080SPavan.Mettu@Oracle.COM }
311*13080SPavan.Mettu@Oracle.COM ret = 0;
312*13080SPavan.Mettu@Oracle.COM *bufsz = len;
313*13080SPavan.Mettu@Oracle.COM break;
314*13080SPavan.Mettu@Oracle.COM case SCF_TYPE_INTEGER:
315*13080SPavan.Mettu@Oracle.COM if (scf_value_get_integer(val, &valint) != 0) {
316*13080SPavan.Mettu@Oracle.COM ret = scf_error();
317*13080SPavan.Mettu@Oracle.COM goto out;
318*13080SPavan.Mettu@Oracle.COM }
319*13080SPavan.Mettu@Oracle.COM length = snprintf(cbuf, *bufsz, "%lld", valint);
320*13080SPavan.Mettu@Oracle.COM if (length < 0 || length > *bufsz) {
321*13080SPavan.Mettu@Oracle.COM ret = SA_BAD_VALUE;
322*13080SPavan.Mettu@Oracle.COM goto out;
323*13080SPavan.Mettu@Oracle.COM }
324*13080SPavan.Mettu@Oracle.COM ret = 0;
325*13080SPavan.Mettu@Oracle.COM break;
326*13080SPavan.Mettu@Oracle.COM case SCF_TYPE_BOOLEAN:
327*13080SPavan.Mettu@Oracle.COM if (scf_value_get_boolean(val, &bval) != 0) {
328*13080SPavan.Mettu@Oracle.COM ret = scf_error();
329*13080SPavan.Mettu@Oracle.COM goto out;
330*13080SPavan.Mettu@Oracle.COM }
331*13080SPavan.Mettu@Oracle.COM if (bval == 1) {
332*13080SPavan.Mettu@Oracle.COM length = snprintf(cbuf, *bufsz, "%s", "true");
333*13080SPavan.Mettu@Oracle.COM } else {
334*13080SPavan.Mettu@Oracle.COM length = snprintf(cbuf, *bufsz, "%s", "false");
335*13080SPavan.Mettu@Oracle.COM }
336*13080SPavan.Mettu@Oracle.COM if (length < 0 || length > *bufsz) {
337*13080SPavan.Mettu@Oracle.COM ret = SA_BAD_VALUE;
338*13080SPavan.Mettu@Oracle.COM goto out;
339*13080SPavan.Mettu@Oracle.COM }
340*13080SPavan.Mettu@Oracle.COM break;
341*13080SPavan.Mettu@Oracle.COM }
342*13080SPavan.Mettu@Oracle.COM } else {
343*13080SPavan.Mettu@Oracle.COM ret = scf_error();
344*13080SPavan.Mettu@Oracle.COM }
345*13080SPavan.Mettu@Oracle.COM if ((ret != 0) && scf_error() != SCF_ERROR_NONE)
346*13080SPavan.Mettu@Oracle.COM fprintf(stdout, gettext("%s\n"), scf_strerror(ret));
347*13080SPavan.Mettu@Oracle.COM out:
348*13080SPavan.Mettu@Oracle.COM fs_smf_fini(phandle);
349*13080SPavan.Mettu@Oracle.COM return (ret);
350*13080SPavan.Mettu@Oracle.COM }
351*13080SPavan.Mettu@Oracle.COM
352*13080SPavan.Mettu@Oracle.COM
353*13080SPavan.Mettu@Oracle.COM int
nfs_smf_get_prop(char * prop_name,char * propbuf,char * instance,scf_type_t sctype,char * svc_name,int * bufsz)354*13080SPavan.Mettu@Oracle.COM nfs_smf_get_prop(char *prop_name, char *propbuf, char *instance,
355*13080SPavan.Mettu@Oracle.COM scf_type_t sctype, char *svc_name, int *bufsz)
356*13080SPavan.Mettu@Oracle.COM {
357*13080SPavan.Mettu@Oracle.COM return (fs_smf_get_prop(NFS_SMF, prop_name, propbuf,
358*13080SPavan.Mettu@Oracle.COM instance, sctype, svc_name, bufsz));
359*13080SPavan.Mettu@Oracle.COM }
360*13080SPavan.Mettu@Oracle.COM
361*13080SPavan.Mettu@Oracle.COM int
nfs_smf_set_prop(char * prop_name,char * value,char * instance,scf_type_t type,char * svc_name)362*13080SPavan.Mettu@Oracle.COM nfs_smf_set_prop(char *prop_name, char *value, char *instance,
363*13080SPavan.Mettu@Oracle.COM scf_type_t type, char *svc_name)
364*13080SPavan.Mettu@Oracle.COM {
365*13080SPavan.Mettu@Oracle.COM return (fs_smf_set_prop(NFS_SMF, prop_name, value, instance,
366*13080SPavan.Mettu@Oracle.COM type, svc_name));
367*13080SPavan.Mettu@Oracle.COM }
368*13080SPavan.Mettu@Oracle.COM
369*13080SPavan.Mettu@Oracle.COM int
autofs_smf_set_prop(char * prop_name,char * value,char * instance,scf_type_t type,char * svc_name)370*13080SPavan.Mettu@Oracle.COM autofs_smf_set_prop(char *prop_name, char *value, char *instance,
371*13080SPavan.Mettu@Oracle.COM scf_type_t type, char *svc_name)
372*13080SPavan.Mettu@Oracle.COM {
373*13080SPavan.Mettu@Oracle.COM return (fs_smf_set_prop(AUTOFS_SMF, prop_name, value, instance,
374*13080SPavan.Mettu@Oracle.COM type, svc_name));
375*13080SPavan.Mettu@Oracle.COM }
376*13080SPavan.Mettu@Oracle.COM
377*13080SPavan.Mettu@Oracle.COM int
autofs_smf_get_prop(char * prop_name,char * propbuf,char * instance,scf_type_t sctype,char * svc_name,int * bufsz)378*13080SPavan.Mettu@Oracle.COM autofs_smf_get_prop(char *prop_name, char *propbuf, char *instance,
379*13080SPavan.Mettu@Oracle.COM scf_type_t sctype, char *svc_name, int *bufsz)
380*13080SPavan.Mettu@Oracle.COM {
381*13080SPavan.Mettu@Oracle.COM return (fs_smf_get_prop(AUTOFS_SMF, prop_name, propbuf,
382*13080SPavan.Mettu@Oracle.COM instance, sctype, svc_name, bufsz));
383*13080SPavan.Mettu@Oracle.COM }
384*13080SPavan.Mettu@Oracle.COM
385*13080SPavan.Mettu@Oracle.COM boolean_t
string_to_boolean(const char * str)386*13080SPavan.Mettu@Oracle.COM string_to_boolean(const char *str)
387*13080SPavan.Mettu@Oracle.COM {
388*13080SPavan.Mettu@Oracle.COM if (strcasecmp(str, "true") == 0 || atoi(str) == 1 ||
389*13080SPavan.Mettu@Oracle.COM strcasecmp(str, "on") == 0 || strcasecmp(str, "yes") == 0) {
390*13080SPavan.Mettu@Oracle.COM return (B_TRUE);
391*13080SPavan.Mettu@Oracle.COM } else
392*13080SPavan.Mettu@Oracle.COM return (B_FALSE);
393*13080SPavan.Mettu@Oracle.COM }
394