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