1*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* 2*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * CDDL HEADER START 3*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 4*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * The contents of this file are subject to the terms of the 5*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Common Development and Distribution License (the "License"). 6*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * You may not use this file except in compliance with the License. 7*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 8*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * or http://www.opensolaris.org/os/licensing. 10*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * See the License for the specific language governing permissions 11*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * and limitations under the License. 12*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 13*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * When distributing Covered Code, include this CDDL HEADER in each 14*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * If applicable, add the following below this CDDL HEADER, with the 16*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * fields enclosed by brackets "[]" replaced with your own identifying 17*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * information: Portions Copyright [yyyy] [name of copyright owner] 18*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 19*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * CDDL HEADER END 20*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States */ 21*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* 22*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 23*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Use is subject to license terms. 24*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States */ 25*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 26*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <errno.h> 27*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <unistd.h> 28*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <strings.h> 29*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <sys/fs_reparse.h> 30*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/libsmb.h> 31*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 32*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <syslog.h> 33*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 34*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States static int smb_reparse_init(const char *, nvlist_t **); 35*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States static void smb_reparse_free(nvlist_t *); 36*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States static int smb_reparse_set(const char *, nvlist_t *); 37*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 38*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* 39*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Checks the status of the object specified by 'path' 40*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 41*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Returns 0 and fills 'stat' with the proper status on 42*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * success, otherwise returns an error code. 43*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States */ 44*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int 45*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_reparse_stat(const char *path, uint32_t *stat) 46*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States { 47*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States struct stat statbuf; 48*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States char symbuf[MAXREPARSELEN]; 49*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int rptaglen; 50*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 51*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (lstat(path, &statbuf) != 0) { 52*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (errno == ENOENT) { 53*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States *stat = SMB_REPARSE_NOTFOUND; 54*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (0); 55*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 56*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (errno); 57*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 58*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 59*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((statbuf.st_mode & S_IFMT) != S_IFLNK) { 60*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States *stat = SMB_REPARSE_NOTREPARSE; 61*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (0); 62*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 63*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 64*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States bzero(symbuf, MAXREPARSELEN); 65*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (readlink(path, symbuf, MAXREPARSELEN) == -1) 66*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (errno); 67*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 68*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States rptaglen = strlen(FS_REPARSE_TAG_STR); 69*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (strncmp(symbuf, FS_REPARSE_TAG_STR, rptaglen) != 0) 70*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States *stat = SMB_REPARSE_NOTREPARSE; 71*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States else 72*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States *stat = SMB_REPARSE_ISREPARSE; 73*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 74*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (0); 75*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 76*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 77*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* 78*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * If the reparse point specified by the path already exists 79*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * it is updated by given service type and its data. Update means 80*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * that if such service type does not already exist, it is added 81*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * otherwise it is overwritten by given data. 82*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 83*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * If the reparse point does not exist, one is created with given 84*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * service type and its data. 85*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States */ 86*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int 87*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_reparse_svcadd(const char *path, const char *svctype, const char *svcdata) 88*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States { 89*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States nvlist_t *nvl; 90*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int rc; 91*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 92*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((rc = smb_reparse_init(path, &nvl)) != 0) 93*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (rc); 94*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 95*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((rc = reparse_add(nvl, svctype, svcdata)) != 0) { 96*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_reparse_free(nvl); 97*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (rc); 98*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 99*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 100*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States rc = smb_reparse_set(path, nvl); 101*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_reparse_free(nvl); 102*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 103*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (rc); 104*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 105*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 106*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* 107*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Removes the entry for the given service type from the 108*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * specified reparse point. If there is no service entry 109*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * left, the reparse point object will be deleted. 110*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States */ 111*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int 112*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_reparse_svcdel(const char *path, const char *svctype) 113*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States { 114*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States nvlist_t *nvl; 115*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int rc; 116*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 117*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((rc = smb_reparse_init(path, &nvl)) != 0) 118*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (rc); 119*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 120*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((rc = reparse_remove(nvl, svctype)) != 0) { 121*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_reparse_free(nvl); 122*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (rc); 123*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 124*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 125*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (nvlist_next_nvpair(nvl, NULL) == NULL) { 126*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* list is empty remove the object */ 127*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States rc = reparse_delete(path); 128*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((rc != 0) && (rc == ENOENT)) 129*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States rc = 0; 130*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } else { 131*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States rc = smb_reparse_set(path, nvl); 132*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 133*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 134*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_reparse_free(nvl); 135*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (rc); 136*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 137*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 138*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* 139*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Obtains data of the given service type from the specified 140*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * reparse point. Function allocates the memory needed to hold 141*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * the service data so the caller must free this memory by 142*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * calling free(). 143*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 144*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * If 'svcdata' is NULL, successful return means that the reparse 145*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * point contains a record for the given service type. 146*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States */ 147*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int 148*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_reparse_svcget(const char *path, const char *svctype, char **svcdata) 149*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States { 150*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States nvlist_t *nvl; 151*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States nvpair_t *nvp; 152*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States char *stype, *sdata; 153*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int rc; 154*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 155*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((rc = smb_reparse_init(path, &nvl)) != 0) 156*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (rc); 157*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 158*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States rc = ENODATA; 159*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States nvp = nvlist_next_nvpair(nvl, NULL); 160*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 161*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States while (nvp != NULL) { 162*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States stype = nvpair_name(nvp); 163*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 164*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((stype != NULL) && (strcasecmp(stype, svctype) == 0)) { 165*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((rc = nvpair_value_string(nvp, &sdata)) != 0) 166*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States break; 167*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 168*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (svcdata != NULL) { 169*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((*svcdata = strdup(sdata)) == NULL) 170*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States rc = ENOMEM; 171*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 172*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 173*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States rc = 0; 174*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States break; 175*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 176*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States nvp = nvlist_next_nvpair(nvl, nvp); 177*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 178*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 179*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_reparse_free(nvl); 180*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (rc); 181*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 182*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 183*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* 184*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Initializes the given nvpair list. 185*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 186*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * This function assumes that the object specified by this path 187*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * is a reparse point, so it does not do any verification. 188*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 189*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * If specified reparse point does not exist the function 190*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * returns successfully with an empty nvpair list. 191*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * 192*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * If the object exists and readlink is successful then nvpair 193*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * list is polulated with the reparse service information, otherwise 194*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * an error code is returned. 195*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States */ 196*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States static int 197*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_reparse_init(const char *path, nvlist_t **nvl) 198*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States { 199*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States char rp_data[MAXREPARSELEN]; 200*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int rc; 201*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 202*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((*nvl = reparse_init()) == NULL) 203*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (ENOMEM); 204*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 205*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States bzero(rp_data, MAXREPARSELEN); 206*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((rc = readlink(path, rp_data, MAXREPARSELEN)) == -1) { 207*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if (errno == ENOENT) 208*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (0); 209*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 210*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States reparse_free(*nvl); 211*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (errno); 212*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 213*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 214*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((rc = reparse_parse(rp_data, *nvl)) != 0) { 215*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States reparse_free(*nvl); 216*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (rc); 217*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 218*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 219*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (0); 220*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 221*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 222*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* 223*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Frees given nvlist 224*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States */ 225*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States static void 226*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_reparse_free(nvlist_t *nvl) 227*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States { 228*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States reparse_free(nvl); 229*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 230*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 231*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /* 232*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * Create a reparse point with given services in the passed 233*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * nvlist. If the reparse point already exists, it will be 234*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States * deleted and a new one with the given data is created. 235*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States */ 236*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States static int 237*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_reparse_set(const char *path, nvlist_t *nvl) 238*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States { 239*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States char *rp_data; 240*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int rc; 241*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 242*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((rc = reparse_unparse(nvl, &rp_data)) != 0) 243*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (rc); 244*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 245*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States rc = reparse_delete(path); 246*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States if ((rc != 0) && (rc != ENOENT)) { 247*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States free(rp_data); 248*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (rc); 249*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 250*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 251*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States rc = reparse_create(path, rp_data); 252*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States free(rp_data); 253*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 254*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States return (rc); 255*9fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States } 256