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