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