da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * CDDL HEADER START
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 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * See the License for the specific language governing permissions
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * and limitations under the License.
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 * CDDL HEADER END
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 * LanMan share door server
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States#include "smbd.h"
3db3f65c6274eb042354801a308c8e9bc4994553amw#define SMB_SHARE_DSRV_COOKIE ((void*)(0xdeadbeef^SMB_SHARE_DSRV_VERSION))
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;
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statesstatic void smbd_share_dispatch(void *, char *, size_t, door_desc_t *, uint_t);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Start the LanMan share door service.
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Returns 0 on success. Otherwise, -1.
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statessmbd_share_start(void)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States syslog(LOG_ERR, "smbd_share_start: duplicate");
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 return (-1);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States syslog(LOG_ERR, "smbd_share_start: open: %s",
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw return (-1);
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 return (-1);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw * Stop the LanMan share door service.
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statessmbd_share_stop(void)
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smbd_door_fini(&smb_share_sdh);
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States
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/*ARGSUSED*/
3ad684d66b78e06edd37e2c4fd3b3949f095194bjbstatic void
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United Statessmbd_share_dispatch(void *cookie, char *ptr, size_t size, door_desc_t *dp,
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) ||
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smbd_door_return(&smb_share_sdh, NULL, 0, NULL, 0);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw if ((dec_status = smb_dr_decode_finish(dec_ctx)) != 0) {
b89a8333f5e1f75ec0c269b22524bd2eccb972banatalie li - Sun Microsystems - Irvine United States rc = smb_shr_remove(sharename);
da6c28aaf62fa55f0fdb8004aa40f88f23bf53f0amw if ((dec_status = smb_dr_decode_finish(dec_ctx)) != 0) {
b89a8333f5e1f75ec0c269b22524bd2eccb972banatalie li - Sun Microsystems - Irvine United States rc = smb_shr_add(&lmshr_info);
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) {
b89a8333f5e1f75ec0c269b22524bd2eccb972banatalie li - Sun Microsystems - Irvine United States rc = smb_shr_modify(&lmshr_info);
c8ec8eea9849cac239663c46be8a7f5d2ba7ca00jose borrego smb_dr_put_buf(enc_ctx, (unsigned char *)&lmshr_list,
3ad684d66b78e06edd37e2c4fd3b3949f095194bjb if ((enc_status = smb_dr_encode_finish(enc_ctx, &used)) != 0) {
9fb67ea305c66b6a297583b9b0db6796b0dfe497afshin salek ardakani - Sun Microsystems - Irvine United States smbd_door_return(&smb_share_sdh, buf, used, NULL, 0);