xref: /titanic_54/usr/src/lib/libshare/autofs/libshare_autofs.c (revision 652601fb657e961ff66dadcd87ddfc146c5db0ca)
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  */
21dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
22dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States /*
23dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
24dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  */
25dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
26dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States /*
27dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * AUTOMOUNT specific functions
28dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  */
29dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <stdio.h>
30dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <string.h>
31dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <ctype.h>
32dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <stdlib.h>
33dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <unistd.h>
34dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <zone.h>
35dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <errno.h>
36dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <locale.h>
37dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <fcntl.h>
38dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <sys/types.h>
39dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <sys/stat.h>
40dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <syslog.h>
41dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include "libshare.h"
42dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include "libshare_impl.h"
43dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <pwd.h>
44dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <limits.h>
45dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <libscf.h>
46dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <strings.h>
47dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include <libdlpi.h>
48dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #include "smfcfg.h"
49dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
50dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
51dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int autofs_init();
52dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static void autofs_fini();
53dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int autofs_validate_property(sa_handle_t, sa_property_t, sa_optionset_t);
54dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int autofs_set_proto_prop(sa_property_t);
55dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static sa_protocol_properties_t autofs_get_proto_set();
56dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static char *autofs_get_status();
57dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static uint64_t autofs_features();
58dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
59dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int initautofsprotofromsmf();
60dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int true_false_validator(int index, char *value);
61dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int strlen_validator(int index, char *value);
62dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int range_check_validator(int index, char *value);
63dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
64dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States /*
65dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * ops vector that provides the protocol specific info and operations
66dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * for share management.
67dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  */
68dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States struct sa_plugin_ops sa_plugin_ops = {
69dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	SA_PLUGIN_VERSION,
70dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	"autofs",
71dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	autofs_init, 		/* Init autofs */
72dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	autofs_fini, 		/* Fini autofs */
73dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* Start Sharing */
74dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* stop sharing */
75dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	autofs_validate_property,
76dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* valid_space */
77dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* security_prop */
78dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* parse optstring */
79dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* format optstring */
80dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	autofs_set_proto_prop,	/* Set properties */
81dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	autofs_get_proto_set,	/* get properties */
82dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	autofs_get_status,	/* get status */
83dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* space_alias */
84dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* update_legacy */
85dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* delete_legacy */
86dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* change notify */
87dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* enable resource */
88dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* disable resource */
89dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	autofs_features,	/* features */
90dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* transient shares */
91dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* notify resource */
92dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* rename resource */
93dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* run_command */
94dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL,			/* command_help */
95dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	NULL			/* delete_proto_section */
96dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States };
97dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
98dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
99dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static sa_protocol_properties_t protoset;
100dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
101dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #define	AUTOMOUNT_VERBOSE_DEFAULT	0
102dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #define	AUTOMOUNTD_VERBOSE_DEFAULT	0
103dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #define	AUTOMOUNT_NOBROWSE_DEFAULT	0
104dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #define	AUTOMOUNT_TIMEOUT_DEFAULT	600
105dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #define	AUTOMOUNT_TRACE_DEFAULT		0
106dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States /*
107dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * Protocol Management functions
108dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  */
109dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States struct proto_option_defs {
110dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	char *tag;
111dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	char *name;	/* display name -- remove protocol identifier */
112dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int index;
113dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	scf_type_t type;
114dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	union {
115dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    int intval;
116dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    char *string;
117dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	} defvalue;
118dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int32_t minval;
119dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int32_t maxval;
120dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int (*check)(int, char *);
121dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States } proto_options[] = {
122dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #define	PROTO_OPT_AUTOMOUNT_TIMEOUT	0
123dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	{ "timeout",
124dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    "timeout",	PROTO_OPT_AUTOMOUNT_TIMEOUT,
125dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    SCF_TYPE_INTEGER, AUTOMOUNT_TIMEOUT_DEFAULT,
126dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    1, INT32_MAX, range_check_validator},
127dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #define	PROTO_OPT_AUTOMOUNT_VERBOSE	1
128dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	{ "automount_verbose",
129dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    "automount_verbose", PROTO_OPT_AUTOMOUNT_VERBOSE,
130dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    SCF_TYPE_BOOLEAN, AUTOMOUNT_VERBOSE_DEFAULT, 0, 1,
131dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    true_false_validator},
132dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #define	PROTO_OPT_AUTOMOUNTD_VERBOSE	2
133dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	{ "automountd_verbose",
134dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    "automountd_verbose", PROTO_OPT_AUTOMOUNTD_VERBOSE,
135dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    SCF_TYPE_BOOLEAN, AUTOMOUNTD_VERBOSE_DEFAULT, 0, 1,
136dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    true_false_validator},
137dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #define	PROTO_OPT_AUTOMOUNTD_NOBROWSE	3
138dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	{ "nobrowse",
139dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    "nobrowse", PROTO_OPT_AUTOMOUNTD_NOBROWSE, SCF_TYPE_BOOLEAN,
140dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    AUTOMOUNT_NOBROWSE_DEFAULT, 0, 1, true_false_validator},
141dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #define	PROTO_OPT_AUTOMOUNTD_TRACE	4
142dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	{ "trace",
143dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    "trace", PROTO_OPT_AUTOMOUNTD_TRACE,
144dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    SCF_TYPE_INTEGER, AUTOMOUNT_TRACE_DEFAULT,
145dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    0, 20, range_check_validator},
146dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #define	PROTO_OPT_AUTOMOUNTD_ENV	5
147dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	{ "environment",
148dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    "environment", PROTO_OPT_AUTOMOUNTD_ENV, SCF_TYPE_ASTRING,
149dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    NULL, 0, 1024, strlen_validator},
150dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	{NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
151dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States };
152dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
153dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #define	AUTOFS_PROP_MAX	(sizeof (proto_options) / sizeof (proto_options[0]))
154dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
155dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static void
add_defaults()156dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States add_defaults()
157dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
158dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int i;
159dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	char number[MAXDIGITS];
160dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
161dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	for (i = 0; proto_options[i].tag != NULL; i++) {
162dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		sa_property_t prop;
163dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		prop = sa_get_protocol_property(protoset,
164dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		    proto_options[i].name);
165dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		if (prop == NULL) {
166dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			/* add the default value */
167dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			switch (proto_options[i].type) {
168dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			case SCF_TYPE_INTEGER:
169dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				(void) snprintf(number, sizeof (number), "%d",
170dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				    proto_options[i].defvalue.intval);
171dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				prop = sa_create_property(proto_options[i].name,
172dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				    number);
173dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				break;
174dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
175dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			case SCF_TYPE_BOOLEAN:
176dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				prop = sa_create_property(proto_options[i].name,
177dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				    proto_options[i].defvalue.intval ?
178dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				    "true" : "false");
179dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				break;
180dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
181dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			default:
182dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				/* treat as strings of zero length */
183dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				prop = sa_create_property(proto_options[i].name,
184dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				    "");
185dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				break;
186dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			}
187dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			if (prop != NULL)
188dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				(void) sa_add_protocol_property(protoset, prop);
189dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		}
190dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
191dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
192dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
193dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int
autofs_init()194dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States autofs_init()
195dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
196dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int ret = SA_OK;
197dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
198dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (sa_plugin_ops.sa_init != autofs_init) {
199dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		(void) printf(dgettext(TEXT_DOMAIN,
200dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		    "AUTOFS plugin not installed properly\n"));
201dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		return (SA_CONFIG_ERR);
202dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
203dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
204dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	ret = initautofsprotofromsmf();
205dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (ret != SA_OK) {
206dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		(void) printf(dgettext(TEXT_DOMAIN,
207dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		    "AUTOFS plugin problem with SMF properties: %s\n"),
208dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		    sa_errorstr(ret));
209dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		ret = SA_OK;
210dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
211dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	add_defaults();
212dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (ret);
213dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
214dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
215dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static void
free_protoprops()216dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States free_protoprops()
217dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
218dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (protoset != NULL) {
219dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		xmlFreeNode(protoset);
220dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		protoset = NULL;
221dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
222dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
223dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
224dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static void
autofs_fini()225dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States autofs_fini()
226dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
227dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	free_protoprops();
228dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
229dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
230dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int
findprotoopt(char * propname)231dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States findprotoopt(char *propname)
232dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
233dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int i;
234dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
235dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	for (i = 0; proto_options[i].tag != NULL; i++)
236dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		if (strcmp(proto_options[i].name, propname) == 0)
237dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			return (i);
238dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (-1);
239dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
240dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
241dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int
autofs_validate_property(sa_handle_t handle,sa_property_t property,sa_optionset_t parent)242dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States autofs_validate_property(sa_handle_t handle, sa_property_t property,
243dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States     sa_optionset_t parent)
244dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
245dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int ret = SA_OK;
246dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	char *propname;
247dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int optionindex;
248dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	char *value;
249dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
250dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #ifdef lint
251dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	handle = handle;
252dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	parent = parent;
253dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #endif
254dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	propname = sa_get_property(property, "type");
255dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (propname == NULL)
256dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		return (SA_NO_SUCH_PROP);
257dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
258dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if ((optionindex = findprotoopt(propname)) < 0)
259dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		ret = SA_NO_SUCH_PROP;
260dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
261dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (ret != SA_OK) {
262dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		if (propname != NULL)
263dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			sa_free_attr_string(propname);
264dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		return (ret);
265dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
266dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
267dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	value = sa_get_property_attr(property, "value");
268dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (value != NULL) {
269dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		/*
270dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		 * If any property is added to AUTOFS, which is a different
271dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		 * type than the below list, a case needs to be added for that
272dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		 * to check the values. For now AUTOFS type are just integers,
273dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		 * string and boolean properties. Just taking care of them.
274dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		 */
275dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		switch (proto_options[optionindex].type) {
276dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		case SCF_TYPE_INTEGER:
277dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		case SCF_TYPE_BOOLEAN:
278dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		case SCF_TYPE_ASTRING:
279dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			ret = proto_options[optionindex].check(optionindex,
280dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			    value);
281dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			break;
282dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		default:
283dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			break;
284dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		}
285dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
286dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
287dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	/* Free the value */
288dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (value != NULL)
289dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		sa_free_attr_string(value);
290dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (propname != NULL)
291dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		sa_free_attr_string(propname);
292dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (ret);
293dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
294dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
295dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States /*
296dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * service_in_state(service, chkstate)
297dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  *
298dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * Want to know if the specified service is in the desired state
299dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * (chkstate) or not. Return true (1) if it is and false (0) if it
300dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * isn't.
301dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  */
302dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int
service_in_state(char * service,const char * chkstate)303dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States service_in_state(char *service, const char *chkstate)
304dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
305dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	char *state;
306dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int ret = B_FALSE;
307dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
308dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	state = smf_get_state(service);
309dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (state != NULL) {
310dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		/* got the state so get the equality for the return value */
311dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		ret = strcmp(state, chkstate) == 0 ? B_TRUE : B_FALSE;
312dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		free(state);
313dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
314dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (ret);
315dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
316dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
317dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static void
restart_service(char * service)318dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States restart_service(char *service)
319dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
320dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int ret = -1;
321dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
322dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	/*
323dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	 * Only attempt to restart the service if it is
324dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	 * currently running. In the future, it may be
325dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	 * desirable to use smf_refresh_instance if the AUTOFS
326dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	 * services ever implement the refresh method.
327dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	 */
328dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (service_in_state(service, SCF_STATE_STRING_ONLINE)) {
329dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		ret = smf_restart_instance(service);
330dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		/*
331dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		 * There are only a few SMF errors at this point, but
332dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		 * it is also possible that a bad value may have put
333dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		 * the service into maintenance if there wasn't an
334dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		 * SMF level error.
335dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		 */
336dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		if (ret != 0) {
337dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			(void) fprintf(stderr,
338dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			    dgettext(TEXT_DOMAIN,
339dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			    "%s failed to restart: %s\n"),
340dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			    scf_strerror(scf_error()));
341dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		} else {
342dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			/*
343dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			 * Check whether it has gone to "maintenance"
344dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			 * mode or not. Maintenance implies something
345dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			 * went wrong.
346dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			 */
347dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			if (service_in_state(service,
348dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			    SCF_STATE_STRING_MAINT)) {
349dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				(void) fprintf(stderr,
350dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				    dgettext(TEXT_DOMAIN,
351dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				    "%s failed to restart\n"),
352dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				    service);
353dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			}
354dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		}
355dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
356dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
357dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
358dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int
is_a_number(char * number)359dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States is_a_number(char *number)
360dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
361dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int ret = 1;
362dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int hex = 0;
363dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
364dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (strncmp(number, "0x", 2) == 0) {
365dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		number += 2;
366dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		hex = 1;
367dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	} else if (*number == '-') {
368dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		number++; /* skip the minus */
369dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
370dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	while (ret == 1 && *number != '\0') {
371dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		if (hex) {
372dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			ret = isxdigit(*number++);
373dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		} else {
374dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			ret = isdigit(*number++);
375dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		}
376dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
377dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (ret);
378dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
379dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
380dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States /*
381dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * fixcaselower(str)
382dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  *
383dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * convert a string to lower case (inplace).
384dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  */
385dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
386dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static void
fixcaselower(char * str)387dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States fixcaselower(char *str)
388dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
389dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	while (*str) {
390dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		*str = tolower(*str);
391dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		str++;
392dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
393dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
394dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
395dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States /*
396dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * skipwhitespace(str)
397dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  *
398dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * Skip leading white space. It is assumed that it is called with a
399dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * valid pointer.
400dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  */
401dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static char *
skipwhitespace(char * str)402dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States skipwhitespace(char *str)
403dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
404dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	while (*str && isspace(*str))
405dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		str++;
406dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
407dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (str);
408dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
409dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
410dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States /*
411dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * extractprop()
412dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  *
413dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * Extract the property and value out of the line and create the
414dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  * property in the optionset.
415dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States  */
416dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int
extractprop(char * name,char * value)417dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States extractprop(char *name, char *value)
418dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
419dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	sa_property_t prop;
420dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int index;
421dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int ret = SA_OK;
422dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	/*
423dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	 * Remove any leading
424dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	 * white space.
425dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	 */
426dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	name = skipwhitespace(name);
427dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
428dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	index = findprotoopt(name);
429dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (index >= 0) {
430dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		fixcaselower(name);
431dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		prop = sa_create_property(proto_options[index].name, value);
432dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		if (prop != NULL)
433dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			ret = sa_add_protocol_property(protoset, prop);
434dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		else
435dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			ret = SA_NO_MEMORY;
436dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
437dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (ret);
438dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
439dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
440dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int
initautofsprotofromsmf(void)441dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States initautofsprotofromsmf(void)
442dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
443dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	char name[PATH_MAX];
444dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	char value[PATH_MAX];
445dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int ret = SA_OK, bufsz = 0, i;
446dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	char *instance = NULL;
447dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	scf_type_t sctype;
448dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
449dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	protoset = sa_create_protocol_properties("autofs");
450dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (protoset != NULL) {
451dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		for (i = 0; proto_options[i].tag != NULL; i++) {
452dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			bzero(value, PATH_MAX);
453dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			(void) strncpy(name, proto_options[i].name, PATH_MAX);
454dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			sctype = proto_options[i].type;
455dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			bufsz = PATH_MAX;
456dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			ret = autofs_smf_get_prop(name, value,
457dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			    instance, sctype, AUTOFS_FMRI, &bufsz);
458dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			if (ret == SA_OK) {
459dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				ret = extractprop(name, value);
460dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			}
461dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		}
462dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	} else {
463dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		ret = SA_NO_MEMORY;
464dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
465dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (ret);
466dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
467dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
468dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int
range_check_validator(int index,char * value)469dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States range_check_validator(int index, char *value)
470dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
471dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int ret = SA_OK;
472dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (!is_a_number(value)) {
473dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		ret = SA_BAD_VALUE;
474dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	} else {
475dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		int val;
476dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		errno = 0;
477dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		val = strtoul(value, NULL, 0);
478dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		if (errno != 0)
479dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			return (SA_BAD_VALUE);
480dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
481dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		if (val < proto_options[index].minval ||
482dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		    val > proto_options[index].maxval)
483dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			ret = SA_BAD_VALUE;
484dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
485dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (ret);
486dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
487dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
488dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int
true_false_validator(int index,char * value)489dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States true_false_validator(int index, char *value)
490dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
491dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
492dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #ifdef lint
493dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	index = index;
494dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #endif
495dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if ((strcasecmp(value, "true") == 0) ||
496dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    (strcasecmp(value, "on") == 0) ||
497dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    (strcasecmp(value, "yes") == 0) ||
498dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    (strcmp(value, "1") == 0) ||
499dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    (strcasecmp(value, "false") == 0) ||
500dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    (strcasecmp(value, "off") == 0) ||
501dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    (strcasecmp(value, "no") == 0) ||
502dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    (strcmp(value, "0") == 0)) {
503dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		return (SA_OK);
504dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
505dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (SA_BAD_VALUE);
506dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
507dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
508dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int
strlen_validator(int index,char * value)509dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States strlen_validator(int index, char *value)
510dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
511dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int ret = SA_OK;
512dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (value == NULL) {
513dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		if (proto_options[index].minval == 0) {
514dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			return (ret);
515dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		} else {
516dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			return (SA_BAD_VALUE);
517dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		}
518dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
519dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (strlen(value) > proto_options[index].maxval ||
520dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	    strlen(value) < proto_options[index].minval)
521dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		ret = SA_BAD_VALUE;
522dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (ret);
523dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
524dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
525dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int
autofs_validate_proto_prop(int index,char * name,char * value)526dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States autofs_validate_proto_prop(int index, char *name, char *value)
527dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
528dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #ifdef lint
529dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	name = name;
530dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States #endif
531dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (proto_options[index].check(index, value));
532dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
533dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
534dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static int
autofs_set_proto_prop(sa_property_t prop)535dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States autofs_set_proto_prop(sa_property_t prop)
536dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
537dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	int ret = SA_OK;
538dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	char *name;
539dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	char *value, *instance = NULL;
540dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	scf_type_t sctype;
541dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
542dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	name = sa_get_property_attr(prop, "type");
543dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	value = sa_get_property_attr(prop, "value");
544dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (name != NULL && value != NULL) {
545dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		int index = findprotoopt(name);
546dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		if (index >= 0) {
547dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			ret = autofs_validate_proto_prop(index, name, value);
548dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			if (ret == SA_OK) {
549dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				sctype = proto_options[index].type;
550dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				if (sctype == SCF_TYPE_BOOLEAN) {
551dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 					if (value != NULL)
552dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 						sa_free_attr_string(value);
553dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 					if (string_to_boolean(value) == 0)
554dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 						value = strdup("0");
555dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 					else
556dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 						value = strdup("1");
557dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				}
558dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				ret = autofs_smf_set_prop(name, value,
559dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				    instance, sctype, AUTOFS_FMRI);
560dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				/*
561dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				 * Make an instance based FMRI.
562dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				 * For now its DEFAULT_AUTOFS_FMRI.
563dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				 */
564dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 				if (ret == SA_OK)
565dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 					restart_service(AUTOFS_DEFAULT_FMRI);
566dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			}
567dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		} else {
568dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 			ret = SA_NO_SUCH_PROP;
569dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		}
570dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	} else {
571dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		ret = SA_CONFIG_ERR;
572dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	}
573dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
574dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (name != NULL)
575dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		sa_free_attr_string(name);
576dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	if (value != NULL)
577dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 		sa_free_attr_string(value);
578dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (ret);
579dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
580dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
581dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
582dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static sa_protocol_properties_t
autofs_get_proto_set(void)583dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States autofs_get_proto_set(void)
584dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
585dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (protoset);
586dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
587dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
588dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static uint64_t
autofs_features(void)589dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States autofs_features(void)
590dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
591dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 	return (0);
592dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
593dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States 
594dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States static char *
autofs_get_status(void)595dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States autofs_get_status(void)
596dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States {
597*652601fbSRobert Mustacchi 	return (smf_get_state(AUTOFS_DEFAULT_FMRI));
598dd51520eSPavan Mettu - Oracle Corporation - Menlo Park United States }
599