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. 24*b819cea2SGordon Ross * 25*b819cea2SGordon 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 32*b819cea2SGordon 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 429fb67ea3Safshin salek ardakani - Sun Microsystems - Irvine United States #include <smbsrv/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 * 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 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 * 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 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 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 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 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 * 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 { 157*b819cea2SGordon 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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