da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw/*
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * CDDL HEADER START
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw *
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * The contents of this file are subject to the terms of the
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Common Development and Distribution License (the "License").
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * You may not use this file except in compliance with the License.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw *
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * or http://www.opensolaris.org/os/licensing.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * See the License for the specific language governing permissions
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * and limitations under the License.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw *
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * When distributing Covered Code, include this CDDL HEADER in each
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * If applicable, add the following below this CDDL HEADER, with the
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * fields enclosed by brackets "[]" replaced with your own identifying
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * information: Portions Copyright [yyyy] [name of copyright owner]
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw *
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * CDDL HEADER END
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw/*
c586600796766c83eb9485c446886fd9ed2359a9Keyur Desai * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw/*
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * LanMan share door server
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#include <door.h>
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#include <unistd.h>
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#include <sys/types.h>
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#include <sys/stat.h>
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#include <fcntl.h>
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#include <errno.h>
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#include <syslog.h>
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#include <string.h>
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb#include <strings.h>
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#include <pthread.h>
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#include <smbsrv/libsmb.h>
3db3f65c6274eb042354801a308c8e9bc4994553amw#include <smbsrv/smb_share.h>
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw#include <smbsrv/smbinfo.h>
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States#include "smbd.h"
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
3db3f65c6274eb042354801a308c8e9bc4994553amw#define SMB_SHARE_DSRV_VERSION 1
3db3f65c6274eb042354801a308c8e9bc4994553amw#define SMB_SHARE_DSRV_COOKIE ((void*)(0xdeadbeef^SMB_SHARE_DSRV_VERSION))
3db3f65c6274eb042354801a308c8e9bc4994553amw
3ad684d66b78e06edd37e2c4fd3b3949f095194bjbstatic int smb_share_dsrv_fd = -1;
3ad684d66b78e06edd37e2c4fd3b3949f095194bjbstatic pthread_mutex_t smb_share_dsrv_mtx = PTHREAD_MUTEX_INITIALIZER;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesstatic smbd_door_t smb_share_sdh;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesstatic void smbd_share_dispatch(void *, char *, size_t, door_desc_t *, uint_t);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw/*
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Start the LanMan share door service.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Returns 0 on success. Otherwise, -1.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwint
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statessmbd_share_start(void)
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw{
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross int newfd;
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross const char *door_name;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb (void) pthread_mutex_lock(&smb_share_dsrv_mtx);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb if (smb_share_dsrv_fd != -1) {
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States syslog(LOG_ERR, "smbd_share_start: duplicate");
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb (void) pthread_mutex_unlock(&smb_share_dsrv_mtx);
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb return (smb_share_dsrv_fd);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw }
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smbd_door_init(&smb_share_sdh, "share");
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States if ((smb_share_dsrv_fd = door_create(smbd_share_dispatch,
3db3f65c6274eb042354801a308c8e9bc4994553amw SMB_SHARE_DSRV_COOKIE, (DOOR_UNREF | DOOR_REFUSE_DESC))) < 0) {
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States syslog(LOG_ERR, "smbd_share_start: door_create: %s",
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw strerror(errno));
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb (void) pthread_mutex_unlock(&smb_share_dsrv_mtx);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw return (-1);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw }
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross door_name = getenv("SMB_SHARE_DNAME");
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross if (door_name == NULL)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross door_name = SMB_SHARE_DNAME;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross (void) unlink(door_name);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross if ((newfd = creat(door_name, 0644)) < 0) {
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States syslog(LOG_ERR, "smbd_share_start: open: %s",
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw strerror(errno));
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb (void) door_revoke(smb_share_dsrv_fd);
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb smb_share_dsrv_fd = -1;
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb (void) pthread_mutex_unlock(&smb_share_dsrv_mtx);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw return (-1);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw }
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw (void) close(newfd);
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross (void) fdetach(door_name);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross if (fattach(smb_share_dsrv_fd, door_name) < 0) {
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States syslog(LOG_ERR, "smbd_share_start: fattach: %s",
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw strerror(errno));
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb (void) door_revoke(smb_share_dsrv_fd);
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb smb_share_dsrv_fd = -1;
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb (void) pthread_mutex_unlock(&smb_share_dsrv_mtx);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw return (-1);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw }
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb (void) pthread_mutex_unlock(&smb_share_dsrv_mtx);
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb return (smb_share_dsrv_fd);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw}
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw/*
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Stop the LanMan share door service.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwvoid
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statessmbd_share_stop(void)
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw{
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb (void) pthread_mutex_lock(&smb_share_dsrv_mtx);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smbd_door_fini(&smb_share_sdh);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb if (smb_share_dsrv_fd != -1) {
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross const char *door_name;
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross door_name = getenv("SMB_SHARE_DNAME");
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross if (door_name == NULL)
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross door_name = SMB_SHARE_DNAME;
b819cea2f73f98c5662230cc9affc8cc84f77fcfGordon Ross (void) fdetach(door_name);
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb (void) door_revoke(smb_share_dsrv_fd);
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb smb_share_dsrv_fd = -1;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw }
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb (void) pthread_mutex_unlock(&smb_share_dsrv_mtx);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw}
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw/*
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * This function with which the LMSHARE door is associated
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * will invoke the appropriate CIFS share management function
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * based on the request type of the door call.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw */
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw/*ARGSUSED*/
3ad684d66b78e06edd37e2c4fd3b3949f095194bjbstatic void
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statessmbd_share_dispatch(void *cookie, char *ptr, size_t size, door_desc_t *dp,
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw uint_t n_desc)
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw{
3db3f65c6274eb042354801a308c8e9bc4994553amw uint32_t rc;
3db3f65c6274eb042354801a308c8e9bc4994553amw int req_type;
3db3f65c6274eb042354801a308c8e9bc4994553amw char buf[SMB_SHARE_DSIZE];
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw unsigned int used;
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb smb_dr_ctx_t *dec_ctx;
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb smb_dr_ctx_t *enc_ctx;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw unsigned int dec_status;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw unsigned int enc_status;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw char *sharename, *sharename2;
3db3f65c6274eb042354801a308c8e9bc4994553amw smb_share_t lmshr_info;
3db3f65c6274eb042354801a308c8e9bc4994553amw smb_shrlist_t lmshr_list;
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb int offset;
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smbd_door_enter(&smb_share_sdh);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
3db3f65c6274eb042354801a308c8e9bc4994553amw if ((cookie != SMB_SHARE_DSRV_COOKIE) || (ptr == NULL) ||
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb (size < sizeof (uint32_t))) {
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smbd_door_return(&smb_share_sdh, NULL, 0, NULL, 0);
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb }
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb dec_ctx = smb_dr_decode_start(ptr, size);
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb enc_ctx = smb_dr_encode_start(buf, sizeof (buf));
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw req_type = smb_dr_get_uint32(dec_ctx);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw switch (req_type) {
3db3f65c6274eb042354801a308c8e9bc4994553amw case SMB_SHROP_NUM_SHARES:
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw if ((dec_status = smb_dr_decode_finish(dec_ctx)) != 0)
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw goto decode_error;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
3db3f65c6274eb042354801a308c8e9bc4994553amw rc = smb_shr_count();
3db3f65c6274eb042354801a308c8e9bc4994553amw smb_dr_put_int32(enc_ctx, SMB_SHARE_DSUCCESS);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw smb_dr_put_uint32(enc_ctx, rc);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw break;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
3db3f65c6274eb042354801a308c8e9bc4994553amw case SMB_SHROP_DELETE:
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw sharename = smb_dr_get_string(dec_ctx);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw if ((dec_status = smb_dr_decode_finish(dec_ctx)) != 0) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw smb_dr_free_string(sharename);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw goto decode_error;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw }
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
b89a8333f5e1f75ec0c269b22524bd2eccb972banatalie li - Sun Microsystems - Irvine United States rc = smb_shr_remove(sharename);
3db3f65c6274eb042354801a308c8e9bc4994553amw smb_dr_put_int32(enc_ctx, SMB_SHARE_DSUCCESS);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw smb_dr_put_uint32(enc_ctx, rc);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw smb_dr_free_string(sharename);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw break;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
3db3f65c6274eb042354801a308c8e9bc4994553amw case SMB_SHROP_RENAME:
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw sharename = smb_dr_get_string(dec_ctx);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw sharename2 = smb_dr_get_string(dec_ctx);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw if ((dec_status = smb_dr_decode_finish(dec_ctx)) != 0) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw smb_dr_free_string(sharename);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw smb_dr_free_string(sharename2);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw goto decode_error;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw }
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
c8ec8eea9849cac239663c46be8a7f5d2ba7ca00jose borrego rc = smb_shr_rename(sharename, sharename2);
3db3f65c6274eb042354801a308c8e9bc4994553amw smb_dr_put_int32(enc_ctx, SMB_SHARE_DSUCCESS);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw smb_dr_put_uint32(enc_ctx, rc);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw smb_dr_free_string(sharename);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw smb_dr_free_string(sharename2);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw break;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
3db3f65c6274eb042354801a308c8e9bc4994553amw case SMB_SHROP_ADD:
3db3f65c6274eb042354801a308c8e9bc4994553amw smb_dr_get_share(dec_ctx, &lmshr_info);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw if ((dec_status = smb_dr_decode_finish(dec_ctx)) != 0)
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw goto decode_error;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
b89a8333f5e1f75ec0c269b22524bd2eccb972banatalie li - Sun Microsystems - Irvine United States rc = smb_shr_add(&lmshr_info);
3db3f65c6274eb042354801a308c8e9bc4994553amw smb_dr_put_int32(enc_ctx, SMB_SHARE_DSUCCESS);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw smb_dr_put_uint32(enc_ctx, rc);
3db3f65c6274eb042354801a308c8e9bc4994553amw smb_dr_put_share(enc_ctx, &lmshr_info);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw break;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
c8ec8eea9849cac239663c46be8a7f5d2ba7ca00jose borrego case SMB_SHROP_MODIFY:
b89a8333f5e1f75ec0c269b22524bd2eccb972banatalie li - Sun Microsystems - Irvine United States smb_dr_get_share(dec_ctx, &lmshr_info);
c8ec8eea9849cac239663c46be8a7f5d2ba7ca00jose borrego if ((dec_status = smb_dr_decode_finish(dec_ctx)) != 0) {
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw goto decode_error;
c8ec8eea9849cac239663c46be8a7f5d2ba7ca00jose borrego }
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
b89a8333f5e1f75ec0c269b22524bd2eccb972banatalie li - Sun Microsystems - Irvine United States rc = smb_shr_modify(&lmshr_info);
3db3f65c6274eb042354801a308c8e9bc4994553amw smb_dr_put_int32(enc_ctx, SMB_SHARE_DSUCCESS);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw smb_dr_put_uint32(enc_ctx, rc);
c8ec8eea9849cac239663c46be8a7f5d2ba7ca00jose borrego
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw break;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
3db3f65c6274eb042354801a308c8e9bc4994553amw case SMB_SHROP_LIST:
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw offset = smb_dr_get_int32(dec_ctx);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw if ((dec_status = smb_dr_decode_finish(dec_ctx)) != 0)
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw goto decode_error;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
3db3f65c6274eb042354801a308c8e9bc4994553amw smb_shr_list(offset, &lmshr_list);
3db3f65c6274eb042354801a308c8e9bc4994553amw smb_dr_put_int32(enc_ctx, SMB_SHARE_DSUCCESS);
c8ec8eea9849cac239663c46be8a7f5d2ba7ca00jose borrego smb_dr_put_buf(enc_ctx, (unsigned char *)&lmshr_list,
c8ec8eea9849cac239663c46be8a7f5d2ba7ca00jose borrego sizeof (smb_shrlist_t));
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw break;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw default:
cbfb650a37bf2b1cd913645ee5ab0d1a13ef6246cp dec_status = smb_dr_decode_finish(dec_ctx);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw goto decode_error;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw }
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb if ((enc_status = smb_dr_encode_finish(enc_ctx, &used)) != 0) {
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb enc_ctx = smb_dr_encode_start(buf, sizeof (buf));
3db3f65c6274eb042354801a308c8e9bc4994553amw smb_dr_put_int32(enc_ctx, SMB_SHARE_DERROR);
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb smb_dr_put_uint32(enc_ctx, enc_status);
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb (void) smb_dr_encode_finish(enc_ctx, &used);
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb }
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smbd_door_return(&smb_share_sdh, buf, used, NULL, 0);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw return;
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amwdecode_error:
3db3f65c6274eb042354801a308c8e9bc4994553amw smb_dr_put_int32(enc_ctx, SMB_SHARE_DERROR);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw smb_dr_put_uint32(enc_ctx, dec_status);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw (void) smb_dr_encode_finish(enc_ctx, &used);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smbd_door_return(&smb_share_sdh, buf, used, NULL, 0);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw}