xref: /titanic_51/usr/src/cmd/fs.d/nfs/lib/smfcfg.c (revision 54d34259930c76758a7e9e03732cb1e37f9a6ba9)
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 *
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
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
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
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
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
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
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
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
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
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