xref: /illumos-gate/usr/src/common/smbsrv/smb_door_legacy.c (revision 3299f39fdcbdab4be7a9c70daa3873f2b78a398d)
19fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /*
29fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * CDDL HEADER START
39fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  *
49fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * The contents of this file are subject to the terms of the
59fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * Common Development and Distribution License (the "License").
69fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * You may not use this file except in compliance with the License.
79fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  *
89fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * or http://www.opensolaris.org/os/licensing.
109fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * See the License for the specific language governing permissions
119fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * and limitations under the License.
129fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  *
139fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * When distributing Covered Code, include this CDDL HEADER in each
149fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * If applicable, add the following below this CDDL HEADER, with the
169fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * fields enclosed by brackets "[]" replaced with your own identifying
179fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * information: Portions Copyright [yyyy] [name of copyright owner]
189fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  *
199fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * CDDL HEADER END
209fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  */
219fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /*
229fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
239fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * Use is subject to license terms.
24b819cea2SGordon Ross  *
25b819cea2SGordon Ross  * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
269fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  */
279fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
289fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States /*
299fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  * Legacy encode/decode routines for door clients and servers.
309fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States  */
319fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
32b819cea2SGordon Ross #if !defined(_KERNEL) && !defined(_FAKE_KERNEL)
339fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <errno.h>
349fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <string.h>
359fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <strings.h>
369fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #else
379fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <sys/types.h>
389fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <sys/sunddi.h>
399fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <sys/errno.h>
409fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #endif
419fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
42*3299f39fSGordon Ross #include <smb/wintypes.h>
439fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/smb_share.h>
449fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/smb_door.h>
459fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/alloc.h>
469fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/smbinfo.h>
479fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
489fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_ctx_t *
smb_dr_decode_start(char * ptr,int size)499fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_decode_start(char *ptr, int size)
509fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
519fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	smb_dr_ctx_t *ctx = MEM_MALLOC("CommonDoor", sizeof (smb_dr_ctx_t));
529fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx) {
539fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		ctx->start_ptr = ctx->ptr = ptr;
549fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		ctx->end_ptr = ptr + size;
559fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		ctx->status = 0;
569fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
579fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return (ctx);
589fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
599fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
609fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int
smb_dr_decode_finish(smb_dr_ctx_t * ctx)619fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_decode_finish(smb_dr_ctx_t *ctx)
629fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
639fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	int status = ctx->status;
649fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (status == 0 && ctx->ptr != ctx->end_ptr)
659fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		status = ENOTEMPTY;
669fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
679fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	MEM_FREE("CommonDoor", ctx);
689fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return (status);
699fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
709fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
719fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_ctx_t *
smb_dr_encode_start(char * ptr,int size)729fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_encode_start(char *ptr, int size)
739fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
749fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	smb_dr_ctx_t *ctx = MEM_MALLOC("CommonDoor",  sizeof (smb_dr_ctx_t));
759fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx) {
769fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		ctx->start_ptr = ctx->ptr = ptr;
779fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		ctx->end_ptr = ptr + size;
789fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		ctx->status = 0;
799fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
809fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return (ctx);
819fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
829fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
839fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int
smb_dr_encode_finish(smb_dr_ctx_t * ctx,unsigned int * used)849fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_encode_finish(smb_dr_ctx_t *ctx, unsigned int *used)
859fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
869fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	int status = ctx->status;
879fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (status == 0) {
889fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr < ctx->end_ptr) {
899fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			/*LINTED E_PTRDIFF_OVERFLOW*/
909fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			*used = ctx->ptr - ctx->start_ptr;
919fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
929fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			status = ENOSPC;
939fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
949fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
959fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
969fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	MEM_FREE("CommonDoor", ctx);
979fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return (status);
989fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
999fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1009fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States DWORD
smb_dr_get_dword(smb_dr_ctx_t * ctx)1019fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_get_dword(smb_dr_ctx_t *ctx)
1029fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
1039fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	DWORD num = 0;
1049fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
1059fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + sizeof (DWORD) <= ctx->end_ptr) {
1069fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(&num, ctx->ptr, sizeof (DWORD));
1079fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += sizeof (DWORD);
1089fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
1099fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
1109fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
1119fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
1129fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return (num);
1139fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
1149fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1159fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int32_t
smb_dr_get_int32(smb_dr_ctx_t * ctx)1169fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_get_int32(smb_dr_ctx_t *ctx)
1179fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
1189fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	int32_t num = 0;
1199fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
1209fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + sizeof (int32_t) <= ctx->end_ptr) {
1219fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(&num, ctx->ptr, sizeof (int32_t));
1229fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += sizeof (int32_t);
1239fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
1249fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
1259fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
1269fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
1279fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return (num);
1289fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
1299fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1309fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States uint32_t
smb_dr_get_uint32(smb_dr_ctx_t * ctx)1319fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_get_uint32(smb_dr_ctx_t *ctx)
1329fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
1339fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return ((uint32_t)smb_dr_get_int32(ctx));
1349fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
1359fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1369fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States char *
smb_dr_get_string(smb_dr_ctx_t * ctx)1379fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_get_string(smb_dr_ctx_t *ctx)
1389fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
1399fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	char *buf = NULL;
1409fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	int len = smb_dr_get_int32(ctx);
1419fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1429fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
1439fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (len == -1)
1449fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			return (buf);
1459fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1469fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + len <= ctx->end_ptr) {
1479fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			buf = MEM_MALLOC("CommonDoor", len +1);
1489fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			if (buf) {
1499fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 				if (len == 0) {
1509fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 					(void) strcpy(buf, "");
1519fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 				} else {
1529fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 					(void) memcpy(buf, ctx->ptr, len);
1539fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 					ctx->ptr += len;
1549fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 					*(buf + len) = '\0';
1559fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 				}
1569fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			} else {
157b819cea2SGordon Ross #if !defined(_KERNEL) && !defined(_FAKE_KERNEL)
1589fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 				ctx->status = errno;
1599fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #else
1609fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 				ctx->status = ENOMEM;
1619fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #endif
1629fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			}
1639fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
1649fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
1659fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
1669fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
1679fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return (buf);
1689fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
1699fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1709fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_put_dword(smb_dr_ctx_t * ctx,DWORD num)1719fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_dword(smb_dr_ctx_t *ctx, DWORD num)
1729fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
1739fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
1749fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + sizeof (DWORD) <= ctx->end_ptr) {
1759fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(ctx->ptr, &num, sizeof (DWORD));
1769fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += sizeof (DWORD);
1779fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
1789fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
1799fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
1809fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
1819fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
1829fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1839fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_put_int32(smb_dr_ctx_t * ctx,int32_t num)1849fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_int32(smb_dr_ctx_t *ctx, int32_t num)
1859fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
1869fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
1879fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + sizeof (int32_t) <= ctx->end_ptr) {
1889fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(ctx->ptr, &num, sizeof (int32_t));
1899fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += sizeof (int32_t);
1909fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
1919fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
1929fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
1939fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
1949fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
1959fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
1969fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_put_uint32(smb_dr_ctx_t * ctx,uint32_t num)1979fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_uint32(smb_dr_ctx_t *ctx, uint32_t num)
1989fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
1999fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	smb_dr_put_int32(ctx, (int32_t)num);
2009fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
2019fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
2029fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_put_string(smb_dr_ctx_t * ctx,const char * buf)2039fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_string(smb_dr_ctx_t *ctx, const char *buf)
2049fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
2059fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	int len;
2069fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
2079fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (!buf)
2089fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		len = -1;
2099fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	else
2109fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		len = strlen(buf);
2119fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
2129fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
2139fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		smb_dr_put_int32(ctx, len);
2149fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (len <= 0)
2159fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			return;
2169fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
2179fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + len <= ctx->end_ptr) {
2189fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(ctx->ptr, buf, len);
2199fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += len;
2209fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
2219fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
2229fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
2239fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
2249fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
2259fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
2269fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_free_string(char * buf)2279fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_free_string(char *buf)
2289fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
2299fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (buf)
2309fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		MEM_FREE("CommonDoor", buf);
2319fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
2329fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
2339fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int64_t
smb_dr_get_int64(smb_dr_ctx_t * ctx)2349fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_get_int64(smb_dr_ctx_t *ctx)
2359fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
2369fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	int64_t num = 0;
2379fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
2389fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + sizeof (int64_t) <= ctx->end_ptr) {
2399fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(&num, ctx->ptr, sizeof (int64_t));
2409fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += sizeof (int64_t);
2419fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
2429fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
2439fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
2449fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
2459fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return (num);
2469fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
2479fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
2489fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States uint64_t
smb_dr_get_uint64(smb_dr_ctx_t * ctx)2499fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_get_uint64(smb_dr_ctx_t *ctx)
2509fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
2519fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return ((uint64_t)smb_dr_get_int64(ctx));
2529fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
2539fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
2549fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
2559fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_put_int64(smb_dr_ctx_t * ctx,int64_t num)2569fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_int64(smb_dr_ctx_t *ctx, int64_t num)
2579fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
2589fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
2599fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + sizeof (int64_t) <= ctx->end_ptr) {
2609fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(ctx->ptr, &num, sizeof (int64_t));
2619fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += sizeof (int64_t);
2629fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
2639fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
2649fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
2659fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
2669fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
2679fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
2689fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_put_uint64(smb_dr_ctx_t * ctx,uint64_t num)2699fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_uint64(smb_dr_ctx_t *ctx, uint64_t num)
2709fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
2719fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	smb_dr_put_int64(ctx, (int64_t)num);
2729fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
2739fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
2749fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_put_short(smb_dr_ctx_t * ctx,short num)2759fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_short(smb_dr_ctx_t *ctx, short num)
2769fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
2779fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
2789fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + sizeof (short) <= ctx->end_ptr) {
2799fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(ctx->ptr, &num, sizeof (short));
2809fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += sizeof (short);
2819fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
2829fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
2839fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
2849fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
2859fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
2869fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
2879fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States short
smb_dr_get_short(smb_dr_ctx_t * ctx)2889fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_get_short(smb_dr_ctx_t *ctx)
2899fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
2909fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	short num = 0;
2919fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
2929fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + sizeof (short) <= ctx->end_ptr) {
2939fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(&num, ctx->ptr, sizeof (short));
2949fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += sizeof (short);
2959fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
2969fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
2979fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
2989fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
2999fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return (num);
3009fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
3019fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
3029fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_put_ushort(smb_dr_ctx_t * ctx,unsigned short num)3039fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_ushort(smb_dr_ctx_t *ctx, unsigned short num)
3049fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
3059fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	smb_dr_put_short(ctx, (short)num);
3069fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
3079fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
3089fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States unsigned short
smb_dr_get_ushort(smb_dr_ctx_t * ctx)3099fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_get_ushort(smb_dr_ctx_t *ctx)
3109fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
3119fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return ((unsigned short)smb_dr_get_short(ctx));
3129fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
3139fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
3149fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_put_word(smb_dr_ctx_t * ctx,WORD num)3159fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_word(smb_dr_ctx_t *ctx, WORD num)
3169fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
3179fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	smb_dr_put_ushort(ctx, num);
3189fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
3199fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
3209fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States WORD
smb_dr_get_word(smb_dr_ctx_t * ctx)3219fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_get_word(smb_dr_ctx_t *ctx)
3229fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
3239fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return (smb_dr_get_ushort(ctx));
3249fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
3259fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
3269fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_put_BYTE(smb_dr_ctx_t * ctx,BYTE byte)3279fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_BYTE(smb_dr_ctx_t *ctx, BYTE byte)
3289fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
3299fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
3309fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + sizeof (BYTE) <= ctx->end_ptr) {
3319fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(ctx->ptr, &byte, sizeof (BYTE));
3329fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += sizeof (BYTE);
3339fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
3349fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
3359fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
3369fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
3379fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
3389fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
3399fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States BYTE
smb_dr_get_BYTE(smb_dr_ctx_t * ctx)3409fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_get_BYTE(smb_dr_ctx_t *ctx)
3419fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
3429fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	BYTE byte = 0;
3439fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
3449fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + sizeof (BYTE) <= ctx->end_ptr) {
3459fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(&byte, ctx->ptr, sizeof (BYTE));
3469fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += sizeof (BYTE);
3479fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
3489fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
3499fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
3509fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
3519fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return (byte);
3529fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
3539fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
3549fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_put_buf(smb_dr_ctx_t * ctx,unsigned char * start,int len)3559fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_buf(smb_dr_ctx_t *ctx, unsigned char *start, int len)
3569fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
3579fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	smb_dr_put_int32(ctx, len);
3589fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
3599fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + len <= ctx->end_ptr) {
3609fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(ctx->ptr, start, len);
3619fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += len;
3629fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
3639fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
3649fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
3659fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
3669fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
3679fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
3689fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States int
smb_dr_get_buf(smb_dr_ctx_t * ctx,unsigned char * buf,int bufsize)3699fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_get_buf(smb_dr_ctx_t *ctx, unsigned char *buf, int bufsize)
3709fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
3719fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	int len = -1;
3729fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
3739fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (!buf)
3749fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		return (-1);
3759fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
3769fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	len = smb_dr_get_int32(ctx);
3779fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
3789fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (bufsize < len) {
3799fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
3809fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			return (-2);
3819fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
3829fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
3839fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + len <= ctx->end_ptr) {
3849fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(buf, ctx->ptr, len);
3859fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += len;
3869fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
3879fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
3889fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			return (-3);
3899fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
3909fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
3919fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
3929fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	return (len);
3939fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
3949fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
3959fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_get_share(smb_dr_ctx_t * ctx,smb_share_t * si)3969fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_get_share(smb_dr_ctx_t *ctx, smb_share_t *si)
3979fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
3989fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (ctx->status == 0) {
3999fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (smb_dr_get_int32(ctx)) {
4009fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(si, ctx->ptr, sizeof (smb_share_t));
4019fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += sizeof (smb_share_t);
4029fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
4039fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			bzero(si, sizeof (smb_share_t));
4049fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
4059fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	} else {
4069fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		bzero(si, sizeof (smb_share_t));
4079fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
4089fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
4099fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 
4109fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States void
smb_dr_put_share(smb_dr_ctx_t * ctx,smb_share_t * si)4119fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States smb_dr_put_share(smb_dr_ctx_t *ctx, smb_share_t *si)
4129fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States {
4139fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	if (si) {
4149fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		smb_dr_put_int32(ctx, 1);
4159fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		if (ctx->ptr + sizeof (smb_share_t) <= ctx->end_ptr) {
4169fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			(void) memcpy(ctx->ptr, si, sizeof (smb_share_t));
4179fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->ptr += sizeof (smb_share_t);
4189fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		} else {
4199fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 			ctx->status = ENOSPC;
4209fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		}
4219fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	} else {
4229fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 		smb_dr_put_int32(ctx, 0);
4239fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States 	}
4249fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States }
425