summaryrefslogtreecommitdiff
path: root/usr/src/uts/common
diff options
context:
space:
mode:
authorJordan Brown <Jordan.Brown@Sun.COM>2009-11-05 14:34:36 -0800
committerJordan Brown <Jordan.Brown@Sun.COM>2009-11-05 14:34:36 -0800
commitbbf6f00c25b6a2bed23c35eac6d62998ecdb338c (patch)
tree8cf72fd47362b5b0da2ffe9be7fe7726a3d24426 /usr/src/uts/common
parentd95ac3ffcdcc13296bb4c53f621f72c0535f32c3 (diff)
downloadillumos-gate-bbf6f00c25b6a2bed23c35eac6d62998ecdb338c.tar.gz
6747532 ns_lookup_bypid spams syslog with too many messages
6888836 Not listing all files in a directory of a CIFS share in Windows XP 6812570 Trans2 is missing pass-through levels: FILE_RENAME_INFORMATION (and others) 6888827 Add Unicode codepage support 6865488 libadutils: leak in ldap_lookup_domains_in_forest() 6888708 idmapd crashing periodically. Need cores analyzed. 6891342 invalid, redundant SQL in rule WHERE expressions 6891767 minor cleanups in idmap 6892544 Panic occurred at smb_node_ref+0x7f(ffffffd612297310) --HG-- rename : usr/src/uts/common/smbsrv/cifs.h => usr/src/uts/common/smbsrv/smb.h
Diffstat (limited to 'usr/src/uts/common')
-rw-r--r--usr/src/uts/common/Makefile.files3
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_acl.c6
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_alloc.c142
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_close.c3
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_common_open.c52
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_common_transact.c71
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_create.c4
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_delete.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_directory.c17
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_dispatch.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_echo.c8
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_fem.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_find.c5
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_flush.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_fsops.c42
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_init.c3
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_lock.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_lock_byte_range.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_locking_andx.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_logoff_andx.c6
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_mangle_name.c40
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_mbuf_marshaling.c52
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_mbuf_util.c3
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_memory_manager.c107
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_negotiate.c9
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_node.c3
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_nt_cancel.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_nt_create_andx.c17
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_nt_transact_create.c18
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_nt_transact_ioctl.c3
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_nt_transact_notify_change.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_nt_transact_security.c4
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_odir.c9
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_ofile.c7
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_open_andx.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_opipe.c6
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_oplock.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_path_name_reduction.c4
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_print.c6
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_process_exit.c4
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_query_fileinfo.c72
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_query_information_disk.c6
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_read.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_rename.c675
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_sd.c3
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_seek.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_server.c12
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_session.c29
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_session_setup_andx.c14
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_set_fileinfo.c65
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_signing.c7
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_trans2_create_directory.c4
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_trans2_dfs.c6
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_trans2_find.c6
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_trans2_query_fs_information.c6
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_tree.c10
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_tree_connect.c5
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_unlock_byte_range.c2
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_user.c36
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_util.c35
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_vfs.c5
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_vops.c32
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_vss.c6
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_write.c3
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_write_raw.c3
-rw-r--r--usr/src/uts/common/fs/smbsrv/smb_xlate.c6
-rw-r--r--usr/src/uts/common/smbsrv/Makefile15
-rw-r--r--usr/src/uts/common/smbsrv/alloc.h23
-rw-r--r--usr/src/uts/common/smbsrv/cifs.h1217
-rw-r--r--usr/src/uts/common/smbsrv/codepage.h85
-rw-r--r--usr/src/uts/common/smbsrv/cp_cyrillic.h312
-rw-r--r--usr/src/uts/common/smbsrv/cp_latin1.h317
-rw-r--r--usr/src/uts/common/smbsrv/cp_latin2.h314
-rw-r--r--usr/src/uts/common/smbsrv/cp_latin3.h311
-rw-r--r--usr/src/uts/common/smbsrv/cp_latin4.h312
-rw-r--r--usr/src/uts/common/smbsrv/cp_latin5.h311
-rw-r--r--usr/src/uts/common/smbsrv/cp_latin6.h309
-rw-r--r--usr/src/uts/common/smbsrv/cp_unicode.h14
-rw-r--r--usr/src/uts/common/smbsrv/cp_usascii.h18
-rw-r--r--usr/src/uts/common/smbsrv/ctype.h76
-rw-r--r--usr/src/uts/common/smbsrv/lm.h47
-rw-r--r--usr/src/uts/common/smbsrv/mac_cifs.h6
-rw-r--r--usr/src/uts/common/smbsrv/mbuf.h2
-rw-r--r--usr/src/uts/common/smbsrv/msgbuf.h6
-rw-r--r--usr/src/uts/common/smbsrv/ndl/srvsvc.ndl2
-rw-r--r--usr/src/uts/common/smbsrv/ndr.h6
-rw-r--r--usr/src/uts/common/smbsrv/nmpipes.h6
-rw-r--r--usr/src/uts/common/smbsrv/oem.h106
-rw-r--r--usr/src/uts/common/smbsrv/smb.h1372
-rw-r--r--usr/src/uts/common/smbsrv/smb_fsops.h6
-rw-r--r--usr/src/uts/common/smbsrv/smb_i18n.h41
-rw-r--r--usr/src/uts/common/smbsrv/smb_incl.h120
-rw-r--r--usr/src/uts/common/smbsrv/smb_kproto.h29
-rw-r--r--usr/src/uts/common/smbsrv/smb_ktypes.h32
-rw-r--r--usr/src/uts/common/smbsrv/smb_vops.h2
-rw-r--r--usr/src/uts/common/smbsrv/smbfmt.h55
-rw-r--r--usr/src/uts/common/smbsrv/string.h128
97 files changed, 2338 insertions, 4990 deletions
diff --git a/usr/src/uts/common/Makefile.files b/usr/src/uts/common/Makefile.files
index ded59fafd2..4a55f0eae9 100644
--- a/usr/src/uts/common/Makefile.files
+++ b/usr/src/uts/common/Makefile.files
@@ -1137,8 +1137,6 @@ SMBSRV_SHARED_OBJS += \
smb_match.o \
smb_msgbuf.o \
smb_oem.o \
- smb_opmlang.o \
- smb_strcase.o \
smb_string.o \
smb_utf8.o \
smb_common_door_decode.o \
@@ -1176,7 +1174,6 @@ SMBSRV_OBJS += $(SMBSRV_SHARED_OBJS) \
smb_logoff_andx.o \
smb_mangle_name.o \
smb_mbuf_marshaling.o \
- smb_memory_manager.o \
smb_mbuf_util.o \
smb_negotiate.o \
smb_net.o \
diff --git a/usr/src/uts/common/fs/smbsrv/smb_acl.c b/usr/src/uts/common/fs/smbsrv/smb_acl.c
index 8577663acf..75e579a636 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_acl.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_acl.c
@@ -19,20 +19,16 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "@(#)smb_acl.c 1.5 08/07/28 SMI"
-
#include <sys/acl.h>
#include <acl/acl_common.h>
#include <smbsrv/smb_sid.h>
#include <smbsrv/smb_fsops.h>
#include <smbsrv/smb_idmap.h>
#include <smbsrv/smb_kproto.h>
-#include <smbsrv/ntstatus.h>
-#include <smbsrv/ntaccess.h>
#define ACE_FD_INHERIT_ACE (ACE_FILE_INHERIT_ACE | ACE_DIRECTORY_INHERIT_ACE)
diff --git a/usr/src/uts/common/fs/smbsrv/smb_alloc.c b/usr/src/uts/common/fs/smbsrv/smb_alloc.c
index dccb93d10e..fc3a3c0b5f 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_alloc.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_alloc.c
@@ -27,53 +27,43 @@
#include <sys/sunddi.h>
#include <sys/kmem.h>
#include <sys/sysmacros.h>
-#include <sys/types.h>
-
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/alloc.h>
#define MEM_HDR_SIZE 8
-static uint32_t mem_get_size(void *ptr);
+static uint32_t smb_memsize(void *);
void *
-mem_malloc(uint32_t size)
+smb_malloc(uint32_t size)
{
- uint8_t *p;
+ uint32_t *hdr;
+ uint8_t *p;
size += MEM_HDR_SIZE;
- p = kmem_alloc(size, KM_SLEEP);
- /*LINTED E_BAD_PTR_CAST_ALIGN*/
- *(uint32_t *)p = size;
- p += MEM_HDR_SIZE;
-
- return (p);
-}
-
-void *
-mem_zalloc(uint32_t size)
-{
- uint8_t *p;
+ hdr = kmem_zalloc(size, KM_SLEEP);
+ *hdr = size;
- p = mem_malloc(size);
- (void) memset(p, 0, size);
+ p = (uint8_t *)hdr;
+ p += MEM_HDR_SIZE;
return (p);
}
char *
-mem_strdup(const char *ptr)
+smb_strdup(const char *ptr)
{
- char *p;
- size_t size;
+ char *p;
+ size_t size;
size = strlen(ptr) + 1;
- p = mem_malloc(size);
+ p = smb_malloc(size);
(void) memcpy(p, ptr, size);
return (p);
}
static uint32_t
-mem_get_size(void *ptr)
+smb_memsize(void *ptr)
{
- uint32_t *p;
+ uint32_t *p;
/*LINTED E_BAD_PTR_CAST_ALIGN*/
p = (uint32_t *)((uint8_t *)ptr - MEM_HDR_SIZE);
@@ -82,40 +72,120 @@ mem_get_size(void *ptr)
}
void *
-mem_realloc(void *ptr, uint32_t size)
+smb_realloc(void *ptr, uint32_t size)
{
- void *new_ptr;
- uint32_t current_size;
+ void *new_ptr;
+ uint32_t current_size;
if (ptr == NULL)
- return (mem_malloc(size));
+ return (smb_malloc(size));
if (size == 0) {
- smb_mem_free(ptr);
+ smb_mfree(ptr);
return (NULL);
}
- current_size = mem_get_size(ptr) - MEM_HDR_SIZE;
+ current_size = smb_memsize(ptr) - MEM_HDR_SIZE;
if (size <= current_size)
return (ptr);
- new_ptr = mem_malloc(size);
+ new_ptr = smb_malloc(size);
(void) memcpy(new_ptr, ptr, current_size);
- smb_mem_free(ptr);
+ smb_mfree(ptr);
return (new_ptr);
}
void
-smb_mem_free(void *ptr)
+smb_mfree(void *ptr)
{
- uint8_t *p;
+ uint8_t *p;
- if (ptr == 0)
+ if (ptr == NULL)
return;
p = (uint8_t *)ptr - MEM_HDR_SIZE;
/*LINTED E_BAD_PTR_CAST_ALIGN*/
kmem_free(p, *(uint32_t *)p);
}
+
+/*
+ * Initialize the list for request-specific temporary storage.
+ */
+void
+smb_srm_init(smb_request_t *sr)
+{
+ list_create(&sr->sr_storage, sizeof (smb_srm_t),
+ offsetof(smb_srm_t, srm_lnd));
+}
+
+/*
+ * Free everything on the request-specific temporary storage list
+ * and destroy the list.
+ */
+void
+smb_srm_fini(smb_request_t *sr)
+{
+ smb_srm_t *srm;
+
+ while ((srm = list_head(&sr->sr_storage)) != NULL) {
+ list_remove(&sr->sr_storage, srm);
+ smb_mfree(srm);
+ }
+
+ list_destroy(&sr->sr_storage);
+}
+
+/*
+ * Allocate memory and associate it with the specified request.
+ * Memory allocated here can only be used for the duration of
+ * this request; it will be freed automatically on completion
+ * of the request
+ */
+void *
+smb_srm_alloc(smb_request_t *sr, size_t size)
+{
+ smb_srm_t *srm;
+
+ size += sizeof (smb_srm_t);
+ srm = smb_malloc(size);
+ srm->srm_size = size;
+ srm->srm_sr = sr;
+ list_insert_tail(&sr->sr_storage, srm);
+
+ /*
+ * The memory allocated for use be the caller is
+ * immediately after our storage context area.
+ */
+ return (void *)(srm + 1);
+}
+
+/*
+ * Allocate or resize memory previously allocated for the specified
+ * request.
+ */
+void *
+smb_srm_realloc(smb_request_t *sr, void *p, size_t size)
+{
+ smb_srm_t *old_srm = (smb_srm_t *)p;
+ smb_srm_t *new_srm;
+
+ if (old_srm == NULL)
+ return (smb_srm_alloc(sr, size));
+
+ old_srm--;
+ list_remove(&sr->sr_storage, old_srm);
+
+ size += sizeof (smb_srm_t);
+ new_srm = smb_realloc(old_srm, size);
+ new_srm->srm_size = smb_memsize(new_srm);
+ new_srm->srm_sr = sr;
+ list_insert_tail(&sr->sr_storage, new_srm);
+
+ /*
+ * The memory allocated for use be the caller is
+ * immediately after our storage context area.
+ */
+ return (void *)(new_srm + 1);
+}
diff --git a/usr/src/uts/common/fs/smbsrv/smb_close.c b/usr/src/uts/common/fs/smbsrv/smb_close.c
index d64c01586f..282411a6a3 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_close.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_close.c
@@ -23,8 +23,7 @@
* Use is subject to license terms.
*/
-#include <smbsrv/smb_incl.h>
-
+#include <smbsrv/smb_kproto.h>
/*
* Close a file by fid. All locks or other resources held by the
diff --git a/usr/src/uts/common/fs/smbsrv/smb_common_open.c b/usr/src/uts/common/fs/smbsrv/smb_common_open.c
index 74049d0c60..e63a7dca32 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_common_open.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_common_open.c
@@ -28,13 +28,14 @@
* open and create SMB interface functions.
*/
-#include <smbsrv/smb_incl.h>
-#include <smbsrv/smb_fsops.h>
-#include <smbsrv/nterror.h>
-#include <smbsrv/ntstatus.h>
-#include <smbsrv/smbinfo.h>
+#include <sys/types.h>
+#include <sys/cmn_err.h>
#include <sys/fcntl.h>
#include <sys/nbmlock.h>
+#include <smbsrv/string.h>
+#include <smbsrv/smb_kproto.h>
+#include <smbsrv/smb_fsops.h>
+#include <smbsrv/smbinfo.h>
volatile uint32_t smb_fids = 0;
@@ -44,7 +45,7 @@ static void smb_delete_new_object(smb_request_t *);
static int smb_set_open_timestamps(smb_request_t *, smb_ofile_t *, boolean_t);
static char *smb_pathname_strdup(smb_request_t *, const char *);
-static char *smb_pathname_strcat(char *, const char *);
+static char *smb_pathname_strcat(smb_request_t *, char *, const char *);
/*
* smb_access_generic_to_file
@@ -177,16 +178,22 @@ smb_ofun_to_crdisposition(uint16_t ofun)
uint32_t
smb_common_open(smb_request_t *sr)
{
- uint32_t status = NT_STATUS_SUCCESS;
- int count;
+ open_param_t *parg;
+ uint32_t status = NT_STATUS_SUCCESS;
+ int count;
+
+ parg = kmem_alloc(sizeof (*parg), KM_SLEEP);
+ bcopy(&sr->arg.open, parg, sizeof (*parg));
for (count = 0; count <= 4; count++) {
- if (count)
+ if (count != 0)
delay(MSEC_TO_TICK(400));
status = smb_open_subr(sr);
if (status != NT_STATUS_SHARING_VIOLATION)
break;
+
+ bcopy(parg, &sr->arg.open, sizeof (*parg));
}
if (status == NT_STATUS_SHARING_VIOLATION) {
@@ -199,6 +206,8 @@ smb_common_open(smb_request_t *sr)
ERRDOS, ERROR_FILE_NOT_FOUND);
}
+ kmem_free(parg, sizeof (*parg));
+
return (status);
}
@@ -951,7 +960,7 @@ smb_validate_object_name(smb_pathname_t *pn)
{
if (pn->pn_fname &&
strlen(pn->pn_fname) == 5 &&
- mts_isdigit(pn->pn_fname[3]) &&
+ smb_isdigit(pn->pn_fname[3]) &&
pn->pn_fname[4] == ':') {
return (NT_STATUS_OBJECT_NAME_INVALID);
}
@@ -991,8 +1000,8 @@ smb_delete_new_object(smb_request_t *sr)
* smb_pathname_setup
* Parse path: pname/fname:sname:stype
*
- * Elements of the smb_pathname_t structure are allocated using
- * smbsr_malloc and will thus be free'd when the sr is destroyed.
+ * Elements of the smb_pathname_t structure are allocated using request
+ * specific storage and will be free'd when the sr is destroyed.
*
* Eliminate duplicate slashes in pn->pn_path.
* Populate pn structure elements with the individual elements
@@ -1048,10 +1057,10 @@ smb_pathname_setup(smb_request_t *sr, smb_pathname_t *pn)
pn->pn_sname = smb_pathname_strdup(sr, sname);
pn->pn_stype = strchr(pn->pn_sname + 1, ':');
if (pn->pn_stype) {
- (void) utf8_strupr(pn->pn_stype);
+ (void) smb_strupr(pn->pn_stype);
} else {
len = strlen(pn->pn_sname);
- pn->pn_sname = smb_pathname_strcat(pn->pn_sname, ":$DATA");
+ pn->pn_sname = smb_pathname_strcat(sr, pn->pn_sname, ":$DATA");
pn->pn_stype = pn->pn_sname + len;
}
++pn->pn_stype;
@@ -1061,8 +1070,9 @@ smb_pathname_setup(smb_request_t *sr, smb_pathname_t *pn)
* smb_pathname_strdup
*
* Duplicate NULL terminated string s.
- * The new string buffer is allocated using smbsr_malloc and
- * will thus be free'd when the sr is destroyed.
+ *
+ * The new string is allocated using request specific storage and will
+ * be free'd when the sr is destroyed.
*/
static char *
smb_pathname_strdup(smb_request_t *sr, const char *s)
@@ -1071,7 +1081,7 @@ smb_pathname_strdup(smb_request_t *sr, const char *s)
size_t n;
n = strlen(s) + 1;
- s2 = (char *)smbsr_malloc(&sr->request_storage, n);
+ s2 = smb_srm_alloc(sr, n);
(void) strlcpy(s2, s, n);
return (s2);
}
@@ -1083,16 +1093,16 @@ smb_pathname_strdup(smb_request_t *sr, const char *s)
* concatenating NULL terminated string s2.
* Append s2 and return resulting NULL terminated string.
*
- * The string buffer is reallocated using smbsr_realloc
- * and will thus be free'd when the sr is destroyed.
+ * The string buffer is reallocated using request specific
+ * storage and will be free'd when the sr is destroyed.
*/
static char *
-smb_pathname_strcat(char *s1, const char *s2)
+smb_pathname_strcat(smb_request_t *sr, char *s1, const char *s2)
{
size_t n;
n = strlen(s1) + strlen(s2) + 1;
- s1 = smbsr_realloc(s1, n);
+ s1 = smb_srm_realloc(sr, s1, n);
(void) strlcat(s1, s2, n);
return (s1);
}
diff --git a/usr/src/uts/common/fs/smbsrv/smb_common_transact.c b/usr/src/uts/common/fs/smbsrv/smb_common_transact.c
index 75358d2bc8..5b76e0397c 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_common_transact.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_common_transact.c
@@ -23,14 +23,13 @@
* Use is subject to license terms.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
#include <smbsrv/smb_share.h>
-#include <smbsrv/oem.h>
+#include <smbsrv/string.h>
#include <smbsrv/nmpipes.h>
#include <smbsrv/mailslot.h>
#include <smbsrv/lmerr.h>
-#include <smbsrv/nterror.h>
#define SMB_QUOTA_UNLIMITED 0xFFFFFFFFFFFFFFFF;
@@ -105,8 +104,8 @@ smb_com_transaction(smb_request_t *sr)
smb_xa_rele(sr->session, xa);
return (SDRC_ERROR);
}
- xa->xa_smb_trans_name = MEM_STRDUP("smb", stn);
+ xa->xa_pipe_name = smb_strdup(stn);
xa->smb_flags = flags;
xa->smb_timeout = timeo;
xa->req_disp_param = pscnt;
@@ -460,6 +459,10 @@ smb_nt_trans_dispatch(struct smb_request *sr, struct smb_xa *xa)
smbsr_error(sr, 0, ERRSRV, ERRaccess);
return (SDRC_ERROR);
+ case NT_TRANSACT_RENAME:
+ rc = smb_nt_transact_rename(sr, xa);
+ break;
+
default:
smbsr_error(sr, 0, ERRSRV, ERRsmbcmd);
return (SDRC_ERROR);
@@ -1014,7 +1017,7 @@ smb_trans_net_share_getinfo(smb_request_t *sr, struct smb_xa *xa)
&share, &level, &max_bytes) != 0)
return (SDRC_NOT_IMPLEMENTED);
- (void) utf8_strlwr(share);
+ (void) smb_strlwr(share);
rc = smb_kshare_getinfo(sr->sr_server->sv_lmshrd, share, &si, NULL);
if ((rc != NERR_Success) || (si.shr_flags & SMB_SHRF_LONGNAME)) {
(void) smb_mbc_encodef(&xa->rep_param_mb, "www",
@@ -1377,7 +1380,7 @@ smb_trans_net_server_enum2(struct smb_request *sr, struct smb_xa *xa)
si = sr->sr_cfg;
- if (utf8_strcasecmp(si->skc_nbdomain, (char *)domain) != 0) {
+ if (smb_strcasecmp(si->skc_nbdomain, (char *)domain, 0) != 0) {
(void) smb_mbc_encodef(&xa->rep_param_mb, "wwww", 0, 0, 0, 0);
return (SDRC_SUCCESS);
}
@@ -1405,19 +1408,36 @@ smb_trans_net_server_enum2(struct smb_request *sr, struct smb_xa *xa)
return (SDRC_SUCCESS);
}
+static boolean_t
+is_supported_mailslot(const char *mailslot)
+{
+ static char *mailslots[] = {
+ PIPE_LANMAN,
+ MAILSLOT_LANMAN,
+ MAILSLOT_BROWSE,
+ MAILSLOT_MSBROWSE
+ };
+
+ int i;
+
+ for (i = 0; i < sizeof (mailslots)/sizeof (mailslots[0]); ++i)
+ if (smb_strcasecmp(mailslot, mailslots[i], 0) == 0)
+ return (B_TRUE);
+
+ return (B_FALSE);
+}
+
/*
- * is_supported_pipe
- *
- * Currently, just return 0 if the pipe is \\PIPE\repl otherwise
- * return 1.
+ * Currently, just return false if the pipe is \\PIPE\repl.
+ * Otherwise, return true.
*/
-int
-is_supported_pipe(char *pname)
+static boolean_t
+is_supported_pipe(const char *pname)
{
- if (utf8_strcasecmp(pname, PIPE_REPL) == 0)
- return (0);
+ if (smb_strcasecmp(pname, PIPE_REPL, 0) == 0)
+ return (B_FALSE);
- return (1);
+ return (B_TRUE);
}
static smb_sdrc_t
@@ -1476,7 +1496,7 @@ smb_trans_dispatch(struct smb_request *sr, struct smb_xa *xa)
break;
case TRANS_WAIT_NMPIPE:
- if (is_supported_pipe(xa->xa_smb_trans_name) == 0) {
+ if (!is_supported_pipe(xa->xa_pipe_name)) {
smbsr_error(sr, 0, ERRDOS, ERRbadfile);
return (SDRC_ERROR);
}
@@ -1487,14 +1507,7 @@ smb_trans_dispatch(struct smb_request *sr, struct smb_xa *xa)
goto trans_err_not_supported;
}
} else {
- if ((utf8_strcasecmp(xa->xa_smb_trans_name,
- PIPE_LANMAN) != 0) &&
- (utf8_strcasecmp(
- xa->xa_smb_trans_name, MAILSLOT_LANMAN) != 0) &&
- (utf8_strcasecmp(
- xa->xa_smb_trans_name, MAILSLOT_BROWSE) != 0) &&
- (utf8_strcasecmp(
- xa->xa_smb_trans_name, MAILSLOT_MSBROWSE) != 0))
+ if (!is_supported_mailslot(xa->xa_pipe_name))
goto trans_err_not_supported;
if ((rc = smb_mbc_decodef(&xa->req_param_mb, "%wss", sr,
@@ -1839,7 +1852,7 @@ smb_xa_create(
smb_xa_t *xa, *nxa;
smb_llist_t *xlist;
- xa = MEM_ZALLOC("xa", sizeof (smb_xa_t));
+ xa = kmem_zalloc(sizeof (smb_xa_t), KM_SLEEP);
xa->xa_refcnt = 1;
xa->smb_com = sr->smb_com;
xa->smb_flg = sr->smb_flg;
@@ -1872,7 +1885,7 @@ smb_xa_create(
!SMB_XA_CLOSED(nxa) &&
!(nxa->xa_flags & SMB_XA_FLAG_COMPLETE)) {
smb_llist_exit(xlist);
- MEM_FREE("xa", xa);
+ kmem_free(xa, sizeof (smb_xa_t));
return (NULL);
}
nxa = smb_llist_next(xlist, nxa);
@@ -1888,8 +1901,8 @@ smb_xa_delete(smb_xa_t *xa)
ASSERT(xa->xa_refcnt == 0);
ASSERT(SMB_XA_CLOSED(xa));
- if (xa->xa_smb_trans_name)
- MEM_FREE("smb", xa->xa_smb_trans_name);
+ if (xa->xa_pipe_name)
+ smb_mfree(xa->xa_pipe_name);
if (xa->rep_setup_mb.chain != NULL)
m_freem(xa->rep_setup_mb.chain);
@@ -1899,7 +1912,7 @@ smb_xa_delete(smb_xa_t *xa)
m_freem(xa->rep_data_mb.chain);
xa->xa_magic = (uint32_t)~SMB_XA_MAGIC;
- MEM_FREE("xa", xa);
+ kmem_free(xa, sizeof (smb_xa_t));
}
smb_xa_t *
diff --git a/usr/src/uts/common/fs/smbsrv/smb_create.c b/usr/src/uts/common/fs/smbsrv/smb_create.c
index ddc8408248..066b66bb85 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_create.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_create.c
@@ -23,7 +23,7 @@
* Use is subject to license terms.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#define SMB_CREATE_NAMEBUF_SZ 16
@@ -159,7 +159,7 @@ smb_com_create_temporary(smb_request_t *sr)
bcc = 1; /* null terminator */
bcc += snprintf(name, SMB_CREATE_NAMEBUF_SZ, "tt%05d.tmp", tmp_id);
- buf = smbsr_malloc(&sr->request_storage, MAXPATHLEN);
+ buf = smb_srm_alloc(sr, MAXPATHLEN);
(void) snprintf(buf, MAXPATHLEN, "%s\\%s",
op->fqi.fq_path.pn_path, name);
op->fqi.fq_path.pn_path = buf;
diff --git a/usr/src/uts/common/fs/smbsrv/smb_delete.c b/usr/src/uts/common/fs/smbsrv/smb_delete.c
index 7c1481bfae..e6d357c378 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_delete.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_delete.c
@@ -23,7 +23,7 @@
* Use is subject to license terms.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
#include <smbsrv/smbinfo.h>
#include <sys/nbmlock.h>
diff --git a/usr/src/uts/common/fs/smbsrv/smb_directory.c b/usr/src/uts/common/fs/smbsrv/smb_directory.c
index 60d95d0198..e21742220a 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_directory.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_directory.c
@@ -23,10 +23,8 @@
* Use is subject to license terms.
*/
-#include <smbsrv/nterror.h>
-#include <smbsrv/ntstatus.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smbinfo.h>
-#include <smbsrv/smb_incl.h>
#include <smbsrv/smb_fsops.h>
typedef struct smb_dirpath {
@@ -259,13 +257,12 @@ smb_dirpath_new(smb_request_t *sr)
char *xpath;
smb_dirpath_t *spp;
- /* Malloc from the request storage area. This is freed automatically */
- /* so we don't need to worry about freeing it later */
- spp = smbsr_malloc(&sr->request_storage, sizeof (smb_dirpath_t));
+ /* Allocate using request specific memory. */
+ spp = smb_srm_alloc(sr, sizeof (smb_dirpath_t));
spp->sp_path = sr->arg.dirop.fqi.fq_path.pn_path;
pathLen = strlen(spp->sp_path);
spp->sp_curp = spp->sp_path;
- xpath = smbsr_malloc(&sr->request_storage, pathLen + 1);
+ xpath = smb_srm_alloc(sr, pathLen + 1);
sr->arg.dirop.fqi.fq_path.pn_path = xpath;
spp->sp_sr = sr;
@@ -589,7 +586,7 @@ smb_dirpath_isvalid(const char *path)
if (*path == '\0')
return (B_TRUE);
- cp = smb_kstrdup(path, MAXPATHLEN);
+ cp = smb_strdup(path);
p = strcanon(cp, "\\");
p += strspn(p, "\\");
@@ -597,11 +594,11 @@ smb_dirpath_isvalid(const char *path)
bad = &bad_paths[i];
if (strncmp(p, bad->name, bad->len) == 0) {
- kmem_free(cp, MAXPATHLEN);
+ smb_mfree(cp);
return (B_FALSE);
}
}
- kmem_free(cp, MAXPATHLEN);
+ smb_mfree(cp);
return (B_TRUE);
}
diff --git a/usr/src/uts/common/fs/smbsrv/smb_dispatch.c b/usr/src/uts/common/fs/smbsrv/smb_dispatch.c
index 75b42e37bb..296ef8f2c2 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_dispatch.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_dispatch.c
@@ -135,7 +135,7 @@
* empty if an error.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_kstat.h>
#include <sys/sdt.h>
diff --git a/usr/src/uts/common/fs/smbsrv/smb_echo.c b/usr/src/uts/common/fs/smbsrv/smb_echo.c
index d934ccafd4..d7c8c7c859 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_echo.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_echo.c
@@ -19,13 +19,11 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
/*
* The echo request is used to test the connection to the server,
@@ -62,7 +60,7 @@ smb_com_echo(struct smb_request *sr)
return (SDRC_ERROR);
nbytes = sr->smb_bcc;
- data = smbsr_malloc(&sr->request_storage, nbytes);
+ data = smb_srm_alloc(sr, nbytes);
if (smb_mbc_decodef(&sr->smb_data, "#c", nbytes, data))
return (SDRC_ERROR);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_fem.c b/usr/src/uts/common/fs/smbsrv/smb_fem.c
index 3582ce4986..ee3a38851f 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_fem.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_fem.c
@@ -23,7 +23,7 @@
* Use is subject to license terms.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
#include <sys/sdt.h>
#include <sys/fcntl.h>
diff --git a/usr/src/uts/common/fs/smbsrv/smb_find.c b/usr/src/uts/common/fs/smbsrv/smb_find.c
index ec55d1e6ba..f556f683ac 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_find.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_find.c
@@ -23,6 +23,7 @@
* Use is subject to license terms.
*/
+#include <smbsrv/smb_kproto.h>
/*
* smb_com_search
@@ -194,8 +195,6 @@
* circuit to the consumer.
*/
-#include <smbsrv/smb_incl.h>
-
/* *** smb_com_search *** */
smb_sdrc_t
@@ -329,7 +328,7 @@ smb_com_search(smb_request_t *sr)
(void) strlcpy(name, fileinfo.fi_name,
SMB_SHORTNAMELEN - 1);
if (to_upper)
- (void) utf8_strupr(name);
+ (void) smb_strupr(name);
} else {
(void) strlcpy(name, fileinfo.fi_shortname,
SMB_SHORTNAMELEN - 1);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_flush.c b/usr/src/uts/common/fs/smbsrv/smb_flush.c
index 5f86e42dee..5de347b6b5 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_flush.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_flush.c
@@ -36,7 +36,7 @@
* draft-heizer-cifs-v1-spec-00.txt
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
diff --git a/usr/src/uts/common/fs/smbsrv/smb_fsops.c b/usr/src/uts/common/fs/smbsrv/smb_fsops.c
index c427df5632..e78a5c1a8a 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_fsops.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_fsops.c
@@ -27,9 +27,6 @@
#include <sys/nbmlock.h>
#include <smbsrv/smb_fsops.h>
#include <smbsrv/smb_kproto.h>
-#include <smbsrv/ntstatus.h>
-#include <smbsrv/ntaccess.h>
-#include <smbsrv/smb_incl.h>
#include <acl/acl_common.h>
#include <sys/fcntl.h>
#include <sys/flock.h>
@@ -972,8 +969,8 @@ smb_fsop_getattr(smb_request_t *sr, cred_t *cr, smb_node_t *snode,
* into this routine.
*/
int
-smb_fsop_link(smb_request_t *sr, cred_t *cr, smb_node_t *to_dnode,
- smb_node_t *from_fnode, char *to_name)
+smb_fsop_link(smb_request_t *sr, cred_t *cr, smb_node_t *from_fnode,
+ smb_node_t *to_dnode, char *to_name)
{
char *longname = NULL;
int flags = 0;
@@ -1102,6 +1099,28 @@ smb_fsop_rename(
(ACE_DELETE | ACE_ADD_FILE)))
return (EACCES);
+ /*
+ * SMB checks access on open and retains an access granted
+ * mask for use while the file is open. ACL changes should
+ * not affect access to an open file.
+ *
+ * If the rename is being performed on an ofile:
+ * - Check the ofile's access granted mask to see if the
+ * rename is permitted - requires DELETE access.
+ * - If the file system does access checking, set the
+ * ATTR_NOACLCHECK flag to ensure that the file system
+ * does not check permissions on subsequent calls.
+ */
+ if (sr && sr->fid_ofile) {
+ rc = smb_ofile_access(sr->fid_ofile, cr, DELETE);
+ if (rc != NT_STATUS_SUCCESS)
+ return (EACCES);
+
+ if (smb_tree_has_feature(sr->tid_tree,
+ SMB_TREE_ACEMASKONACCESS))
+ flags = ATTR_NOACLCHECK;
+ }
+
rc = smb_vop_rename(from_dnode->vp, from_name, to_dnode->vp,
to_name, flags, cr);
@@ -1648,6 +1667,13 @@ smb_fsop_lookup_name(
*
* Other smb_fsop_* routines will call SMB_TREE_CONTAINS_NODE() to prevent
* operations on files not in the parent mount.
+ *
+ * Case sensitivity flags (SMB_IGNORE_CASE, SMB_CASE_SENSITIVE):
+ * if SMB_CASE_SENSITIVE is set, the SMB_IGNORE_CASE flag will NOT be set
+ * based on the tree's case sensitivity. However, if the SMB_IGNORE_CASE
+ * flag is set in the flags value passed as a parameter, a case insensitive
+ * lookup WILL be done (regardless of whether SMB_CASE_SENSITIVE is set
+ * or not).
*/
int
smb_fsop_lookup(
@@ -1678,8 +1704,10 @@ smb_fsop_lookup(
if (SMB_TREE_CONTAINS_NODE(sr, dnode) == 0)
return (EACCES);
- if (SMB_TREE_IS_CASEINSENSITIVE(sr))
- flags |= SMB_IGNORE_CASE;
+ if (!(flags & SMB_CASE_SENSITIVE)) {
+ if (SMB_TREE_IS_CASEINSENSITIVE(sr))
+ flags |= SMB_IGNORE_CASE;
+ }
if (SMB_TREE_SUPPORTS_CATIA(sr))
flags |= SMB_CATIA;
if (SMB_TREE_SUPPORTS_ABE(sr))
diff --git a/usr/src/uts/common/fs/smbsrv/smb_init.c b/usr/src/uts/common/fs/smbsrv/smb_init.c
index 2059dd572b..a974bdbd30 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_init.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_init.c
@@ -30,10 +30,9 @@
#include <sys/ioccom.h>
#include <sys/policy.h>
#include <sys/cmn_err.h>
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_door_svc.h>
#include <smbsrv/smb_ioctl.h>
-#include <smbsrv/smb_kproto.h>
static int smb_drv_open(dev_t *, int, int, cred_t *);
static int smb_drv_close(dev_t, int, int, cred_t *);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_lock.c b/usr/src/uts/common/fs/smbsrv/smb_lock.c
index c7901ca7f2..d74aa0be32 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_lock.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_lock.c
@@ -31,7 +31,7 @@
* error code.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
#include <sys/nbmlock.h>
#include <sys/param.h>
diff --git a/usr/src/uts/common/fs/smbsrv/smb_lock_byte_range.c b/usr/src/uts/common/fs/smbsrv/smb_lock_byte_range.c
index bf74578aba..02ade5c43d 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_lock_byte_range.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_lock_byte_range.c
@@ -57,7 +57,7 @@
* should return failure to the client
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
smb_sdrc_t
smb_pre_lock_byte_range(smb_request_t *sr)
diff --git a/usr/src/uts/common/fs/smbsrv/smb_locking_andx.c b/usr/src/uts/common/fs/smbsrv/smb_locking_andx.c
index dd765c0979..98906e97e2 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_locking_andx.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_locking_andx.c
@@ -208,7 +208,7 @@
* ERRSRV/ERRbaduid
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
smb_sdrc_t
smb_pre_locking_andx(smb_request_t *sr)
diff --git a/usr/src/uts/common/fs/smbsrv/smb_logoff_andx.c b/usr/src/uts/common/fs/smbsrv/smb_logoff_andx.c
index 6eedfe3d19..6e9a00d975 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_logoff_andx.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_logoff_andx.c
@@ -19,13 +19,11 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
/*
diff --git a/usr/src/uts/common/fs/smbsrv/smb_mangle_name.c b/usr/src/uts/common/fs/smbsrv/smb_mangle_name.c
index 2d73bb38ac..860e82cc5a 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_mangle_name.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_mangle_name.c
@@ -28,15 +28,10 @@
#include <sys/sunddi.h>
#include <sys/errno.h>
#include <smbsrv/string.h>
-#include <smbsrv/ctype.h>
-#include <smbsrv/smb_i18n.h>
#include <smbsrv/smb_vops.h>
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
-#define SMB_NAME83_BASELEN 8
-#define SMB_NAME83_LEN 12
-
/*
* Characters we don't allow in DOS file names.
* If a filename contains any of these chars, it should get mangled.
@@ -138,7 +133,7 @@ smb_match_unknown(char *name, char *pattern)
char *np, *pp;
rc = 0;
- if (utf8_isstrupr(pattern) <= 0)
+ if (smb_isstrupr(pattern) <= 0)
return (rc);
np = name;
@@ -149,7 +144,7 @@ smb_match_unknown(char *name, char *pattern)
if (nc == ' ')
continue;
- nc = mts_toupper(nc);
+ nc = smb_toupper(nc);
if ((pc = *pp++) != nc)
break;
}
@@ -157,7 +152,7 @@ smb_match_unknown(char *name, char *pattern)
if ((pc == '~') &&
(pp != (pattern + 1)) &&
((pc = *pp++) != 0)) {
- while (mts_isdigit(pc))
+ while (smb_isdigit(pc))
pc = *pp++;
if (pc == '.') {
@@ -167,7 +162,7 @@ smb_match_unknown(char *name, char *pattern)
}
while ((nc = *np++) != 0) {
- nc = mts_toupper(nc);
+ nc = smb_toupper(nc);
if ((pc = *pp++) != nc)
break;
}
@@ -222,7 +217,7 @@ smb_is_reserved_dos_name(const char *name)
int len;
int i;
- ch = mts_toupper(*name);
+ ch = smb_toupper(*name);
switch (ch) {
case 'A':
@@ -246,7 +241,7 @@ smb_is_reserved_dos_name(const char *name)
for (i = 0; i < n_reserved; ++i) {
len = strlen(reserved[i]);
- if (utf8_strncasecmp(reserved[i], name, len) == 0) {
+ if (smb_strcasecmp(reserved[i], name, len) == 0) {
ch = *(name + len);
if ((ch == '\0') || (ch == '.'))
return (B_TRUE);
@@ -329,7 +324,7 @@ smb_needs_mangle(char *name, char **dot_pos)
}
for (namep = name; *namep; namep++) {
- if (!mts_isascii(*namep) ||
+ if (!smb_isascii(*namep) ||
strchr(special_chars, *namep) ||
strchr(invalid_dos_chars, *namep))
return (1);
@@ -391,7 +386,7 @@ smb_needs_shortname(char *name)
if (len) {
(void) snprintf(buf, len + 1, "%s", name);
/* if the name contains both lower and upper cases */
- if (utf8_isstrupr(buf) == 0 && utf8_isstrlwr(buf) == 0) {
+ if (smb_isstrupr(buf) == 0 && smb_isstrlwr(buf) == 0) {
/* create shortname */
create = 1;
} else if (dot_pos) {
@@ -401,7 +396,7 @@ smb_needs_shortname(char *name)
* if the extension contains both lower and upper
* cases
*/
- if (utf8_isstrupr(buf) == 0 && utf8_isstrlwr(buf) == 0)
+ if (smb_isstrupr(buf) == 0 && smb_isstrlwr(buf) == 0)
/* create shortname */
create = 1;
}
@@ -430,7 +425,7 @@ smb_mangle_char(unsigned char ch)
if (strchr(special_chars, ch))
return ('_');
- return (mts_toupper(ch));
+ return (smb_toupper(ch));
}
/*
@@ -565,21 +560,21 @@ int smb_mangle_name(
if (smb_needs_shortname(name)) {
namep = (unsigned char *)name;
while (*namep)
- *out_short++ = mts_toupper(*namep++);
+ *out_short++ = smb_toupper(*namep++);
*out_short = '\0';
}
out_83 = (unsigned char *)name83;
(void) strcpy((char *)out_83, " . ");
while (*name && *name != '.')
- *out_83++ = mts_toupper(*name++);
+ *out_83++ = smb_toupper(*name++);
if (*name == '.') {
/* copy extension */
name++;
out_83 = (unsigned char *)name83 + 9;
while (*name)
- *out_83++ = mts_toupper(*name++);
+ *out_83++ = smb_toupper(*name++);
}
return (1);
}
@@ -723,10 +718,15 @@ smb_unmangle_name(smb_node_t *dnode, char *name, char *namebuf,
namep = dp->d_name;
}
+ /* skip non utf8 filename */
+ if (u8_validate(namep, strlen(namep), NULL,
+ U8_VALIDATE_ENTIRE, &err) < 0)
+ continue;
+
(void) smb_mangle_name(ino, namep,
shortname, name83, 1);
- if (utf8_strcasecmp(name, shortname) == 0) {
+ if (smb_strcasecmp(name, shortname, 0) == 0) {
(void) strlcpy(namebuf, namep, buflen);
kmem_free(buf, SMB_UNMANGLE_BUFSIZE);
return (0);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_mbuf_marshaling.c b/usr/src/uts/common/fs/smbsrv/smb_mbuf_marshaling.c
index 3eb054e383..3d60f5fd77 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_mbuf_marshaling.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_mbuf_marshaling.c
@@ -27,9 +27,7 @@
* SMB mbuf marshaling encode/decode.
*/
-#include <smbsrv/smb_incl.h>
-
-#include <sys/sunddi.h>
+#include <smbsrv/smb_kproto.h>
#define MALLOC_QUANTUM 80
@@ -58,10 +56,10 @@ static int mbc_marshal_get_long(mbuf_chain_t *mbc, uint32_t *data);
static uint64_t qswap(uint64_t ll);
static int mbc_marshal_get_odd_long_long(mbuf_chain_t *mbc, uint64_t *data);
static int mbc_marshal_get_long_long(mbuf_chain_t *mbc, uint64_t *data);
-static int mbc_marshal_get_ascii_string(struct smb_malloc_list *,
- mbuf_chain_t *, uint8_t **ascii, int);
-static int mbc_marshal_get_unicode_string(struct smb_malloc_list *,
- mbuf_chain_t *, uint8_t **, int);
+static int mbc_marshal_get_ascii_string(smb_request_t *, mbuf_chain_t *,
+ uint8_t **ascii, int);
+static int mbc_marshal_get_unicode_string(smb_request_t *, mbuf_chain_t *,
+ uint8_t **, int);
static int mbc_marshal_get_mbufs(mbuf_chain_t *, int32_t, mbuf_t **);
static int mbc_marshal_get_mbuf_chain(mbuf_chain_t *, int32_t, mbuf_chain_t *);
static int mbc_marshal_get_uio(mbuf_chain_t *, struct uio *);
@@ -298,7 +296,7 @@ ascii_conversion:
cvalpp = va_arg(ap, uint8_t **);
if (repc <= 1)
repc = 0;
- if (mbc_marshal_get_ascii_string(&sr->request_storage,
+ if (mbc_marshal_get_ascii_string(sr,
mbc, cvalpp, repc) != 0)
return (-1);
break;
@@ -311,7 +309,7 @@ unicode_translation:
repc = 0;
if (mbc->chain_offset & 1)
mbc->chain_offset++;
- if (mbc_marshal_get_unicode_string(&sr->request_storage,
+ if (mbc_marshal_get_unicode_string(sr,
mbc, cvalpp, repc) != 0)
return (-1);
break;
@@ -909,11 +907,11 @@ mbc_marshal_put_long_long(mbuf_chain_t *mbc, uint64_t data)
static int
mbc_marshal_put_ascii_string(mbuf_chain_t *mbc, char *mbs, int repc)
{
- mts_wchar_t wide_char;
+ smb_wchar_t wide_char;
int nbytes;
int length;
- if ((length = mts_sbequiv_strlen(mbs)) == -1)
+ if ((length = smb_sbequiv_strlen(mbs)) == -1)
return (DECODE_NO_MORE_DATA);
length += sizeof (char);
@@ -927,7 +925,7 @@ mbc_marshal_put_ascii_string(mbuf_chain_t *mbc, char *mbs, int repc)
/*
* We should restore oem chars here.
*/
- nbytes = mts_mbtowc(&wide_char, mbs, MTS_MB_CHAR_MAX);
+ nbytes = smb_mbtowc(&wide_char, mbs, MTS_MB_CHAR_MAX);
if (nbytes == -1)
return (DECODE_NO_MORE_DATA);
@@ -946,14 +944,14 @@ mbc_marshal_put_ascii_string(mbuf_chain_t *mbc, char *mbs, int repc)
static int
mbc_marshal_put_unicode_string(mbuf_chain_t *mbc, char *ascii, int repc)
{
- mts_wchar_t wchar;
+ smb_wchar_t wchar;
int consumed;
int length;
- if ((length = mts_wcequiv_strlen(ascii)) == -1)
+ if ((length = smb_wcequiv_strlen(ascii)) == -1)
return (DECODE_NO_MORE_DATA);
- length += sizeof (mts_wchar_t);
+ length += sizeof (smb_wchar_t);
if ((repc > 1) && (repc < length))
length = repc;
@@ -961,7 +959,7 @@ mbc_marshal_put_unicode_string(mbuf_chain_t *mbc, char *ascii, int repc)
if (mbc_marshal_make_room(mbc, length))
return (DECODE_NO_MORE_DATA);
while (length > 0) {
- consumed = mts_mbtowc(&wchar, ascii, MTS_MB_CHAR_MAX);
+ consumed = smb_mbtowc(&wchar, ascii, MTS_MB_CHAR_MAX);
if (consumed == -1)
break; /* Invalid sequence */
/*
@@ -973,7 +971,7 @@ mbc_marshal_put_unicode_string(mbuf_chain_t *mbc, char *ascii, int repc)
ascii += consumed;
mbc_marshal_store_byte(mbc, wchar);
mbc_marshal_store_byte(mbc, wchar >> 8);
- length -= sizeof (mts_wchar_t);
+ length -= sizeof (smb_wchar_t);
}
return (0);
}
@@ -1215,10 +1213,10 @@ mbc_marshal_get_long_long(mbuf_chain_t *mbc, uint64_t *data)
*/
static int
mbc_marshal_get_ascii_string(
- struct smb_malloc_list *ml,
- mbuf_chain_t *mbc,
+ smb_request_t *sr,
+ mbuf_chain_t *mbc,
uint8_t **ascii,
- int max_ascii)
+ int max_ascii)
{
char *rcvbuf;
char *ch;
@@ -1226,7 +1224,7 @@ mbc_marshal_get_ascii_string(
int length = 0;
max = MALLOC_QUANTUM;
- rcvbuf = smbsr_malloc(ml, max);
+ rcvbuf = smb_srm_alloc(sr, max);
if (max_ascii == 0)
max_ascii = 0xffff;
@@ -1247,7 +1245,7 @@ mbc_marshal_get_ascii_string(
length++;
}
max += MALLOC_QUANTUM;
- rcvbuf = smbsr_realloc(rcvbuf, max);
+ rcvbuf = smb_srm_realloc(sr, rcvbuf, max);
ch = rcvbuf + length;
}
@@ -1256,13 +1254,13 @@ multibyte_encode:
* UTF-8 encode the string for internal system use.
*/
length = strlen(rcvbuf) + 1;
- *ascii = smbsr_malloc(ml, length * MTS_MB_CHAR_MAX);
+ *ascii = smb_srm_alloc(sr, length * MTS_MB_CHAR_MAX);
return (mbc_marshal_cstou8("CP850", (char *)*ascii,
(size_t)length * MTS_MB_CHAR_MAX, rcvbuf, (size_t)length));
}
static int
-mbc_marshal_get_unicode_string(struct smb_malloc_list *ml,
+mbc_marshal_get_unicode_string(smb_request_t *sr,
mbuf_chain_t *mbc, uint8_t **ascii, int max_unicode)
{
int max;
@@ -1275,7 +1273,7 @@ mbc_marshal_get_unicode_string(struct smb_malloc_list *ml,
max_unicode = 0xffff;
max = MALLOC_QUANTUM;
- *ascii = smbsr_malloc(ml, max);
+ *ascii = smb_srm_alloc(sr, max);
ch = (char *)*ascii;
for (;;) {
@@ -1289,12 +1287,12 @@ mbc_marshal_get_unicode_string(struct smb_malloc_list *ml,
if (wchar == 0) goto done;
- emitted = mts_wctomb(ch, wchar);
+ emitted = smb_wctomb(ch, wchar);
length += emitted;
ch += emitted;
}
max += MALLOC_QUANTUM;
- *ascii = smbsr_realloc(*ascii, max);
+ *ascii = smb_srm_realloc(sr, *ascii, max);
ch = (char *)*ascii + length;
}
done: *ch = 0;
diff --git a/usr/src/uts/common/fs/smbsrv/smb_mbuf_util.c b/usr/src/uts/common/fs/smbsrv/smb_mbuf_util.c
index 8dcba3b111..76d468eebe 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_mbuf_util.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_mbuf_util.c
@@ -57,8 +57,7 @@
*
*/
-#include <smbsrv/smb_incl.h>
-#include <smbsrv/mbuf.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_kstat.h>
static kmem_cache_t *smb_mbc_cache = NULL;
diff --git a/usr/src/uts/common/fs/smbsrv/smb_memory_manager.c b/usr/src/uts/common/fs/smbsrv/smb_memory_manager.c
deleted file mode 100644
index 61e1066388..0000000000
--- a/usr/src/uts/common/fs/smbsrv/smb_memory_manager.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
- * Memory management functions.
- */
-
-#include <smbsrv/smb_incl.h>
-
-/*
- * smbsr_malloc
- *
- * allocate a block of memory with the given size and
- * add it to the given linked list. This function is
- * used to allocate temporary memories which are needed
- * during processing of a SMB request. These memories
- * get freed when request processing is finished.
- */
-void *
-smbsr_malloc(smb_malloc_list *list, size_t size)
-{
- smb_malloc_list *element;
-
- size += sizeof (smb_malloc_list);
- element = MEM_MALLOC("smb", size);
- element->forw = list->forw;
- element->back = list;
- list->forw->back = element;
- list->forw = element;
- return (void *)(element + 1); /* return address of data */
-}
-
-/*
- * smbsr_realloc
- *
- * This function is used in conjunction with smbsr_malloc to
- * resize an already allocated entity.
- */
-void *
-smbsr_realloc(void *mem, size_t size)
-{
- smb_malloc_list *element = (smb_malloc_list *)mem;
- smb_malloc_list *new_entry;
- smb_malloc_list *list;
-
- element--;
- list = element->back;
- QUEUE_CLIP(element);
- size += sizeof (smb_malloc_list);
-
- new_entry = MEM_REALLOC("smb", element, size);
- new_entry->forw = list->forw;
- new_entry->back = list;
- list->forw->back = new_entry;
- list->forw = new_entry;
- return (void *)(new_entry + 1); /* return address of new data */
-}
-
-/*
- * smbsr_free_malloc_list
- *
- * Frees all memory block in the given linked list.
- */
-void
-smbsr_free_malloc_list(smb_malloc_list *root)
-{
- smb_malloc_list *element;
-
- /*
- * we initialize smb_request structure in smb_nt_notify_change
- * function, so we should check root->forw to make sure it's
- * not NULL.
- */
- while (root->forw && root->forw != root) {
- element = root->forw;
-
- element->forw->back = element->back;
- element->back->forw = element->forw;
-
- /* and release it... */
- MEM_FREE("smb", element);
- }
-}
diff --git a/usr/src/uts/common/fs/smbsrv/smb_negotiate.c b/usr/src/uts/common/fs/smbsrv/smb_negotiate.c
index acca9991c9..17975468cc 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_negotiate.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_negotiate.c
@@ -175,7 +175,7 @@
* Connectionless clients must set Sid to 0 in the SMB request header.
*
* Capabilities allows the server to tell the client what it supports.
- * The bit definitions defined in cifs.h. Bit 0x2000 used to be set in
+ * The bit definitions defined in smb.h. Bit 0x2000 used to be set in
* the negotiate response capabilities but it caused problems with
* Windows 2000. It is probably not valid, it doesn't appear in the
* CIFS spec.
@@ -191,9 +191,8 @@
#include <sys/socket.h>
#include <sys/random.h>
#include <netinet/in.h>
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smbinfo.h>
-#include <smbsrv/smb_i18n.h>
/*
* Maximum buffer size for DOS: chosen to be the same as NT.
@@ -400,8 +399,8 @@ smb_com_negotiate(smb_request_t *sr)
* skc_nbdomain is not expected to be aligned.
* Use temporary buffer to avoid alignment padding
*/
- buflen = mts_wcequiv_strlen(sr->sr_cfg->skc_nbdomain) +
- sizeof (mts_wchar_t);
+ buflen = smb_wcequiv_strlen(sr->sr_cfg->skc_nbdomain) +
+ sizeof (smb_wchar_t);
tmpbuf = kmem_zalloc(buflen, KM_SLEEP);
smb_msgbuf_init(&mb, (uint8_t *)tmpbuf, buflen,
SMB_MSGBUF_UNICODE);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_node.c b/usr/src/uts/common/fs/smbsrv/smb_node.c
index bd97813765..ae578f0899 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_node.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_node.c
@@ -128,7 +128,7 @@
* course the state of the node should be tested/updated under the
* protection of the mutex).
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
#include <smbsrv/smb_kstat.h>
#include <sys/pathname.h>
@@ -1283,6 +1283,7 @@ smb_node_getattr(smb_request_t *sr, smb_node_t *node, smb_attr_t *attr)
if (node->vp->v_type == VDIR) {
attr->sa_vattr.va_size = 0;
attr->sa_allocsz = 0;
+ attr->sa_vattr.va_nlink = 1;
}
if (node->readonly_creator)
diff --git a/usr/src/uts/common/fs/smbsrv/smb_nt_cancel.c b/usr/src/uts/common/fs/smbsrv/smb_nt_cancel.c
index b49705efb8..1e4d9df892 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_nt_cancel.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_nt_cancel.c
@@ -41,7 +41,7 @@
* the original request. No other response is generated for this SMB.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
smb_sdrc_t
smb_pre_nt_cancel(smb_request_t *sr)
diff --git a/usr/src/uts/common/fs/smbsrv/smb_nt_create_andx.c b/usr/src/uts/common/fs/smbsrv/smb_nt_create_andx.c
index aa12b2c96b..c5222de5ab 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_nt_create_andx.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_nt_create_andx.c
@@ -28,7 +28,7 @@
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
#include <smbsrv/smb_vops.h>
@@ -220,6 +220,11 @@ void
smb_post_nt_create_andx(smb_request_t *sr)
{
DTRACE_SMB_1(op__NtCreateX__done, smb_request_t *, sr);
+
+ if (sr->arg.open.dir != NULL) {
+ smb_ofile_release(sr->arg.open.dir);
+ sr->arg.open.dir = NULL;
+ }
}
smb_sdrc_t
@@ -260,16 +265,14 @@ smb_com_nt_create_andx(struct smb_request *sr)
if (op->rootdirfid == 0) {
op->fqi.fq_dnode = sr->tid_tree->t_snode;
} else {
- sr->smb_fid = (ushort_t)op->rootdirfid;
- smbsr_lookup_file(sr);
- if (sr->fid_ofile == NULL) {
+ op->dir = smb_ofile_lookup_by_fid(sr->tid_tree,
+ (uint16_t)op->rootdirfid);
+ if (op->dir == NULL) {
smbsr_error(sr, NT_STATUS_INVALID_HANDLE,
ERRDOS, ERRbadfid);
return (SDRC_ERROR);
}
-
- op->fqi.fq_dnode = sr->fid_ofile->f_node;
- smbsr_release_file(sr);
+ op->fqi.fq_dnode = op->dir->f_node;
}
if (smb_common_open(sr) != NT_STATUS_SUCCESS)
diff --git a/usr/src/uts/common/fs/smbsrv/smb_nt_transact_create.c b/usr/src/uts/common/fs/smbsrv/smb_nt_transact_create.c
index 80f2319a96..22786fe92d 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_nt_transact_create.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_nt_transact_create.c
@@ -35,11 +35,6 @@
#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
-#include <smbsrv/ntstatus.h>
-#include <smbsrv/ntaccess.h>
-#include <smbsrv/nterror.h>
-#include <smbsrv/cifs.h>
-#include <smbsrv/doserror.h>
/*
* smb_nt_transact_create
@@ -136,6 +131,9 @@ smb_post_nt_transact_create(smb_request_t *sr, smb_xa_t *xa)
smb_sd_term(sd);
kmem_free(sd, sizeof (smb_sd_t));
}
+
+ if (sr->arg.open.dir != NULL)
+ smb_ofile_release(sr->arg.open.dir);
}
smb_sdrc_t
@@ -176,16 +174,14 @@ smb_nt_transact_create(smb_request_t *sr, smb_xa_t *xa)
if (op->rootdirfid == 0) {
op->fqi.fq_dnode = sr->tid_tree->t_snode;
} else {
- sr->smb_fid = (ushort_t)op->rootdirfid;
- smbsr_lookup_file(sr);
- if (sr->fid_ofile == NULL) {
+ op->dir = smb_ofile_lookup_by_fid(sr->tid_tree,
+ (uint16_t)op->rootdirfid);
+ if (op->dir == NULL) {
smbsr_error(sr, NT_STATUS_INVALID_HANDLE,
ERRDOS, ERRbadfid);
return (SDRC_ERROR);
}
-
- op->fqi.fq_dnode = sr->fid_ofile->f_node;
- smbsr_release_file(sr);
+ op->fqi.fq_dnode = op->dir->f_node;
}
status = smb_common_open(sr);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_nt_transact_ioctl.c b/usr/src/uts/common/fs/smbsrv/smb_nt_transact_ioctl.c
index d1290e5889..ac52576534 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_nt_transact_ioctl.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_nt_transact_ioctl.c
@@ -23,9 +23,8 @@
* Use is subject to license terms.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/winioctl.h>
-#include <smbsrv/ntstatus.h>
static uint32_t smb_nt_trans_ioctl_noop(smb_request_t *, smb_xa_t *);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_nt_transact_notify_change.c b/usr/src/uts/common/fs/smbsrv/smb_nt_transact_notify_change.c
index cfb82e5419..e806482f3a 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_nt_transact_notify_change.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_nt_transact_notify_change.c
@@ -109,7 +109,7 @@
* FILE_ACTION_MODIFIED_STREAM 0x00000008
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <sys/sdt.h>
static void smb_notify_change_daemon(smb_thread_t *, void *);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_nt_transact_security.c b/usr/src/uts/common/fs/smbsrv/smb_nt_transact_security.c
index de6b9b385f..e2ceeb9de5 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_nt_transact_security.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_nt_transact_security.c
@@ -24,10 +24,6 @@
*/
#include <smbsrv/smb_kproto.h>
-#include <smbsrv/ntstatus.h>
-#include <smbsrv/nterror.h>
-#include <smbsrv/doserror.h>
-#include <smbsrv/cifs.h>
static void smb_encode_sd(struct smb_xa *, smb_sd_t *, uint32_t);
static void smb_encode_sacl(struct smb_xa *, smb_acl_t *);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_odir.c b/usr/src/uts/common/fs/smbsrv/smb_odir.c
index c953aa05a5..c89bee8e98 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_odir.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_odir.c
@@ -243,7 +243,6 @@
* See smb_search, smb_find, smb_find_unique, and smb_trans2_find for details
*/
-#include <smbsrv/smb_incl.h>
#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
#include <smbsrv/smb_share.h>
@@ -573,7 +572,7 @@ int
smb_odir_read_fileinfo(smb_request_t *sr, smb_odir_t *od,
smb_fileinfo_t *fileinfo, boolean_t *eof)
{
- int rc;
+ int rc, errnum;
smb_odirent_t *odirent;
boolean_t ignore_case;
@@ -612,6 +611,12 @@ smb_odir_read_fileinfo(smb_request_t *sr, smb_odir_t *od,
if ((rc = smb_odir_next_odirent(od, odirent)) != 0)
break;
+ /* skip non utf8 filename */
+ if (u8_validate(odirent->od_name,
+ strlen(odirent->od_name), NULL,
+ U8_VALIDATE_ENTIRE, &errnum) < 0)
+ continue;
+
if (!smb_match_name(odirent->od_ino, odirent->od_name,
od->d_pattern, ignore_case))
continue;
diff --git a/usr/src/uts/common/fs/smbsrv/smb_ofile.c b/usr/src/uts/common/fs/smbsrv/smb_ofile.c
index 8d7ec2f06d..fa0904040f 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_ofile.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_ofile.c
@@ -160,7 +160,6 @@
* being queued in that list is NOT registered by incrementing the
* reference count.
*/
-#include <smbsrv/smb_incl.h>
#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
@@ -616,7 +615,7 @@ smb_ofile_disallow_fclose(smb_ofile_t *of)
case SMB_FTYPE_MESG_PIPE:
ASSERT(of->f_pipe);
- if (utf8_strcasecmp(of->f_pipe->p_name, "SRVSVC") == 0)
+ if (smb_strcasecmp(of->f_pipe->p_name, "SRVSVC", 0) == 0)
return (B_TRUE);
break;
default:
@@ -1282,7 +1281,7 @@ smb_ofile_netinfo_init(smb_ofile_t *of, smb_netfileinfo_t *fi)
fi->fi_fid = of->f_fid;
fi->fi_uniqid = of->f_uniqid;
fi->fi_pathlen = strlen(buf) + 1;
- fi->fi_path = smb_kstrdup(buf, fi->fi_pathlen);
+ fi->fi_path = smb_strdup(buf);
kmem_free(buf, MAXPATHLEN);
fi->fi_namelen = user->u_domain_len + user->u_name_len + 2;
@@ -1299,7 +1298,7 @@ smb_ofile_netinfo_fini(smb_netfileinfo_t *fi)
return;
if (fi->fi_path)
- kmem_free(fi->fi_path, fi->fi_pathlen);
+ smb_mfree(fi->fi_path);
if (fi->fi_username)
kmem_free(fi->fi_username, fi->fi_namelen);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_open_andx.c b/usr/src/uts/common/fs/smbsrv/smb_open_andx.c
index f701f35c7b..ee67413338 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_open_andx.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_open_andx.c
@@ -23,8 +23,8 @@
* Use is subject to license terms.
*/
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_vops.h>
-#include <smbsrv/smb_incl.h>
int smb_open_dsize_check = 0;
diff --git a/usr/src/uts/common/fs/smbsrv/smb_opipe.c b/usr/src/uts/common/fs/smbsrv/smb_opipe.c
index a2917039c9..3048e034e7 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_opipe.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_opipe.c
@@ -32,7 +32,7 @@
#include <sys/door_data.h>
#include <sys/uio.h>
#include <sys/ksynch.h>
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_xdr.h>
#define SMB_OPIPE_ISOPEN(OPIPE) \
@@ -170,13 +170,13 @@ smb_opipe_lookup(const char *path)
name = path;
name += strspn(name, "\\");
- if (utf8_strncasecmp(name, "PIPE", 4) == 0) {
+ if (smb_strcasecmp(name, "PIPE", 4) == 0) {
path += 4;
name += strspn(name, "\\");
}
for (i = 0; i < sizeof (named_pipes) / sizeof (named_pipes[0]); ++i) {
- if (utf8_strcasecmp(name, named_pipes[i]) == 0)
+ if (smb_strcasecmp(name, named_pipes[i], 0) == 0)
return (named_pipes[i]);
}
diff --git a/usr/src/uts/common/fs/smbsrv/smb_oplock.c b/usr/src/uts/common/fs/smbsrv/smb_oplock.c
index 20fdfd10dc..53685acdb0 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_oplock.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_oplock.c
@@ -37,7 +37,7 @@
* that is not the case anymore.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
#include <inet/tcp.h>
diff --git a/usr/src/uts/common/fs/smbsrv/smb_path_name_reduction.c b/usr/src/uts/common/fs/smbsrv/smb_path_name_reduction.c
index cfc1956044..6537da627e 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_path_name_reduction.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_path_name_reduction.c
@@ -23,7 +23,7 @@
* Use is subject to license terms.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
#include <sys/pathname.h>
#include <sys/sdt.h>
@@ -41,7 +41,7 @@ smb_is_executable(char *path)
if ((len >= 4) && (path[len - 4] == '.')) {
(void) strcpy(extension, &path[len - 3]);
- (void) utf8_strupr(extension);
+ (void) smb_strupr(extension);
if (strcmp(extension, "EXE") == 0)
return (NODE_FLAGS_EXECUTABLE);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_print.c b/usr/src/uts/common/fs/smbsrv/smb_print.c
index fb45b80339..4e21dfdd2b 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_print.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_print.c
@@ -19,17 +19,15 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* SMB print interface.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
/*
diff --git a/usr/src/uts/common/fs/smbsrv/smb_process_exit.c b/usr/src/uts/common/fs/smbsrv/smb_process_exit.c
index 83c626bab8..f39b376ee1 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_process_exit.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_process_exit.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -51,7 +51,7 @@
* send this message at all.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
smb_sdrc_t
smb_pre_process_exit(smb_request_t *sr)
diff --git a/usr/src/uts/common/fs/smbsrv/smb_query_fileinfo.c b/usr/src/uts/common/fs/smbsrv/smb_query_fileinfo.c
index 377baec57e..d87e3994b9 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_query_fileinfo.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_query_fileinfo.c
@@ -23,8 +23,8 @@
* Use is subject to license terms.
*/
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_vops.h>
-#include <smbsrv/smb_incl.h>
#include <smbsrv/smb_fsops.h>
/*
@@ -91,7 +91,8 @@ static int smb_query_encode_response(smb_request_t *, smb_xa_t *,
uint16_t, smb_queryinfo_t *);
static void smb_encode_stream_info(smb_request_t *, smb_xa_t *,
smb_queryinfo_t *);
-static int smb_all_info_filename(smb_tree_t *, smb_node_t *, char *, size_t);
+static int smb_query_pathname(smb_tree_t *, smb_node_t *, boolean_t,
+ char *, size_t);
uint32_t smb_pad_align(uint32_t offset, uint32_t align);
@@ -500,7 +501,7 @@ smb_query_encode_response(smb_request_t *sr, smb_xa_t *xa,
case SMB_FILE_ALT_NAME_INFORMATION:
(void) smb_mbc_encodef(&xa->rep_param_mb, "w", 0);
(void) smb_mbc_encodef(&xa->rep_data_mb, "%lU", sr,
- mts_wcequiv_strlen(qinfo->qi_shortname),
+ smb_wcequiv_strlen(qinfo->qi_shortname),
qinfo->qi_shortname);
break;
@@ -688,19 +689,22 @@ smb_pad_align(uint32_t offset, uint32_t align)
}
/*
- * smb_all_info_filename
- *
- * This format of filename is only used by the ALL_INFO levels.
+ * smb_query_pathname
*
* Determine the absolute pathname of 'node' within the share.
+ * For some levels (e.g. ALL_INFO) the pathname should include the
+ * sharename for others (e.g. NAME_INFO) the pathname should be
+ * relative to the share.
* For example if the node represents file "test1.txt" in directory
- * "dir1" on share "share1", the path would be: \share1\dir1\test1.txt
+ * "dir1" on share "share1"
+ * - if include_share is TRUE the pathname would be: \share1\dir1\test1.txt
+ * - if include_share is FALSE the pathname would be: \dir1\test1.txt
*
* If node represents a named stream, construct the pathname for the
* associated unnamed stream then append the stream name.
*/
static int
-smb_all_info_filename(smb_tree_t *tree, smb_node_t *node,
+smb_query_pathname(smb_tree_t *tree, smb_node_t *node, boolean_t include_share,
char *buf, size_t buflen)
{
char *sharename = tree->t_sharename;
@@ -708,12 +712,14 @@ smb_all_info_filename(smb_tree_t *tree, smb_node_t *node,
size_t len;
vnode_t *vp;
- len = snprintf(buf, buflen, "\\%s", sharename);
- if (len == (buflen - 1))
- return (ENAMETOOLONG);
+ if (include_share) {
+ len = snprintf(buf, buflen, "\\%s", sharename);
+ if (len == (buflen - 1))
+ return (ENAMETOOLONG);
- buf += len;
- buflen -= len;
+ buf += len;
+ buflen -= len;
+ }
if (SMB_IS_STREAM(node))
vp = node->n_unode->vp;
@@ -741,8 +747,8 @@ int
smb_query_fileinfo(smb_request_t *sr, smb_node_t *node, uint16_t infolev,
smb_queryinfo_t *qinfo)
{
- char *namep = node->od_name;
int rc;
+ boolean_t include_sharename = B_FALSE;
(void) bzero(qinfo, sizeof (smb_queryinfo_t));
@@ -768,31 +774,18 @@ smb_query_fileinfo(smb_request_t *sr, smb_node_t *node, uint16_t infolev,
/* populate name, namelen and shortname */
- /* ALL_INFO levels are a special case for name field */
+ /* ALL_INFO levels include the sharename in the name field */
if ((infolev == SMB_QUERY_FILE_ALL_INFO) ||
(infolev == SMB_FILE_ALL_INFORMATION)) {
- rc = smb_all_info_filename(sr->tid_tree, node,
- qinfo->qi_name, MAXPATHLEN);
- if (rc != 0) {
- smbsr_errno(sr, rc);
- return (-1);
- }
- qinfo->qi_namelen =
- smb_ascii_or_unicode_strlen(sr, qinfo->qi_name);
- return (0);
+ include_sharename = B_TRUE;
}
- /*
- * It looks like NT doesn't know what to do with the name "."
- * so we convert it to "\\" to indicate the root directory.
- * If the leading \ is missing, add it.
- */
- if (strcmp(namep, ".") == 0)
- (void) strlcpy(qinfo->qi_name, "\\", MAXNAMELEN);
- else if (*namep != '\\')
- (void) snprintf(qinfo->qi_name, MAXNAMELEN, "\\%s", namep);
- else
- (void) strlcpy(qinfo->qi_name, namep, MAXNAMELEN);
+ rc = smb_query_pathname(sr->tid_tree, node, include_sharename,
+ qinfo->qi_name, MAXPATHLEN);
+ if (rc != 0) {
+ smbsr_errno(sr, rc);
+ return (-1);
+ }
qinfo->qi_namelen = smb_ascii_or_unicode_strlen(sr, qinfo->qi_name);
@@ -809,14 +802,15 @@ smb_query_fileinfo(smb_request_t *sr, smb_node_t *node, uint16_t infolev,
/*
* If the shortname is generated by smb_mangle_name()
* it will be returned as the alternative name.
- * Otherwise, convert the original name to upper-case
+ * Otherwise, convert the original name to upper-case
* and return it as the alternative name.
*/
(void) smb_mangle_name(qinfo->qi_attr.sa_vattr.va_nodeid,
- namep, qinfo->qi_shortname, qinfo->qi_name83, 0);
+ node->od_name, qinfo->qi_shortname, qinfo->qi_name83, 0);
if (*qinfo->qi_shortname == 0) {
- (void) strlcpy(qinfo->qi_shortname, namep, SMB_SHORTNAMELEN);
- (void) utf8_strupr(qinfo->qi_shortname);
+ (void) strlcpy(qinfo->qi_shortname, node->od_name,
+ SMB_SHORTNAMELEN);
+ (void) smb_strupr(qinfo->qi_shortname);
}
return (0);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_query_information_disk.c b/usr/src/uts/common/fs/smbsrv/smb_query_information_disk.c
index 42831bb821..3053fa3a67 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_query_information_disk.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_query_information_disk.c
@@ -19,12 +19,10 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* SMB: query_information_disk
*
@@ -64,7 +62,7 @@
* TotalUnit or FreeUnits (i.e. 0xFFFF) should be returned.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
smb_sdrc_t
diff --git a/usr/src/uts/common/fs/smbsrv/smb_read.c b/usr/src/uts/common/fs/smbsrv/smb_read.c
index 9593b18beb..e79a595b15 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_read.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_read.c
@@ -23,7 +23,7 @@
* Use is subject to license terms.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
diff --git a/usr/src/uts/common/fs/smbsrv/smb_rename.c b/usr/src/uts/common/fs/smbsrv/smb_rename.c
index 6da6809374..1a88f12700 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_rename.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_rename.c
@@ -23,9 +23,8 @@
* Use is subject to license terms.
*/
-#include <smbsrv/nterror.h>
#include <sys/synch.h>
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
#include <sys/nbmlock.h>
@@ -42,11 +41,20 @@
#define SMB_NT_RENAME_RENAME_FILE 0x0104
#define SMB_NT_RENAME_MOVE_FILE 0x0105
-static int smb_do_rename(smb_request_t *, smb_fqi_t *, smb_fqi_t *);
+/*
+ * SMB_TRANS2_SET_FILE/PATH_INFO (RENAME_INFORMATION level) flag
+ */
+#define SMB_RENAME_FLAG_OVERWRITE 0x001
+
+static int smb_common_rename(smb_request_t *, smb_fqi_t *, smb_fqi_t *);
static int smb_make_link(smb_request_t *, smb_fqi_t *, smb_fqi_t *);
+static int smb_rename_check_stream(smb_fqi_t *, smb_fqi_t *);
static int smb_rename_check_attr(smb_request_t *, smb_node_t *, uint16_t);
static void smb_rename_set_error(smb_request_t *, int);
+static int smb_rename_lookup_src(smb_request_t *);
+static void smb_rename_release_src(smb_request_t *);
+
/*
* smb_com_rename
*
@@ -62,8 +70,7 @@ static void smb_rename_set_error(smb_request_t *, int);
* have. If SearchAttributes is zero then only normal files are renamed.
* If the system file or hidden attributes are specified then the rename
* is inclusive - both the specified type(s) of files and normal files are
- * renamed. The encoding of SearchAttributes is described in section 3.10
- * - File Attribute Encoding.
+ * renamed.
*/
smb_sdrc_t
smb_pre_rename(smb_request_t *sr)
@@ -104,7 +111,7 @@ smb_com_rename(smb_request_t *sr)
return (SDRC_ERROR);
}
- rc = smb_do_rename(sr, src_fqi, dst_fqi);
+ rc = smb_common_rename(sr, src_fqi, dst_fqi);
if (rc != 0) {
smb_rename_set_error(sr, rc);
@@ -116,208 +123,17 @@ smb_com_rename(smb_request_t *sr)
}
/*
- * smb_do_rename
- *
- * Common code for renaming a file.
- *
- * If the source and destination are identical, we go through all
- * the checks but we don't actually do the rename. If the source
- * and destination files differ only in case, we do a case-sensitive
- * rename. Otherwise, we do a full case-insensitive rename.
- *
- * Returns errno values.
- */
-static int
-smb_do_rename(smb_request_t *sr, smb_fqi_t *src_fqi, smb_fqi_t *dst_fqi)
-{
- smb_node_t *src_node, *tnode;
- char *dstname;
- DWORD status;
- int rc;
- int count;
- char *path;
-
- tnode = sr->tid_tree->t_snode;
-
- /* Lookup the source node. It MUST exist. */
- path = src_fqi->fq_path.pn_path;
- rc = smb_pathname_reduce(sr, sr->user_cr, path, tnode, tnode,
- &src_fqi->fq_dnode, src_fqi->fq_last_comp);
- if (rc != 0)
- return (rc);
-
- rc = smb_fsop_lookup(sr, sr->user_cr, SMB_FOLLOW_LINKS, tnode,
- src_fqi->fq_dnode, src_fqi->fq_last_comp, &src_fqi->fq_fnode);
- if (rc != 0) {
- smb_node_release(src_fqi->fq_dnode);
- return (rc);
- }
-
- src_node = src_fqi->fq_fnode;
- rc = smb_rename_check_attr(sr, src_node, src_fqi->fq_sattr);
- if (rc != 0) {
- smb_node_release(src_fqi->fq_fnode);
- smb_node_release(src_fqi->fq_dnode);
- return (rc);
- }
-
- /*
- * Break the oplock before access checks. If a client
- * has a file open, this will force a flush or close,
- * which may affect the outcome of any share checking.
- */
- (void) smb_oplock_break(src_node, sr->session, B_FALSE);
-
- for (count = 0; count <= 3; count++) {
- if (count) {
- smb_node_end_crit(src_node);
- delay(MSEC_TO_TICK(400));
- }
-
- smb_node_start_crit(src_node, RW_READER);
-
- status = smb_node_rename_check(src_node);
-
- if (status != NT_STATUS_SHARING_VIOLATION)
- break;
- }
-
- if (status == NT_STATUS_SHARING_VIOLATION) {
- smb_node_end_crit(src_node);
- smb_node_release(src_fqi->fq_fnode);
- smb_node_release(src_fqi->fq_dnode);
- return (EPIPE); /* = ERRbadshare */
- }
-
- status = smb_range_check(sr, src_node, 0, UINT64_MAX, B_TRUE);
-
- if (status != NT_STATUS_SUCCESS) {
- smb_node_end_crit(src_node);
- smb_node_release(src_fqi->fq_fnode);
- smb_node_release(src_fqi->fq_dnode);
- return (EACCES);
- }
-
- /* Lookup destination node. */
- path = dst_fqi->fq_path.pn_path;
- rc = smb_pathname_reduce(sr, sr->user_cr, path, tnode, tnode,
- &dst_fqi->fq_dnode, dst_fqi->fq_last_comp);
- if (rc != 0) {
- smb_node_end_crit(src_node);
- smb_node_release(src_fqi->fq_fnode);
- smb_node_release(src_fqi->fq_dnode);
- return (rc);
- }
-
- rc = smb_fsop_lookup(sr, sr->user_cr, SMB_FOLLOW_LINKS, tnode,
- dst_fqi->fq_dnode, dst_fqi->fq_last_comp, &dst_fqi->fq_fnode);
- if ((rc != 0) && (rc != ENOENT)) {
- smb_node_end_crit(src_node);
- smb_node_release(src_fqi->fq_fnode);
- smb_node_release(src_fqi->fq_dnode);
- smb_node_release(dst_fqi->fq_dnode);
- return (rc);
- }
-
- if (utf8_strcasecmp(src_fqi->fq_path.pn_path,
- dst_fqi->fq_path.pn_path) == 0) {
-
- if (dst_fqi->fq_fnode)
- smb_node_release(dst_fqi->fq_fnode);
-
- rc = strcmp(src_fqi->fq_fnode->od_name, dst_fqi->fq_last_comp);
- if (rc == 0) {
- smb_node_end_crit(src_node);
- smb_node_release(src_fqi->fq_fnode);
- smb_node_release(src_fqi->fq_dnode);
- smb_node_release(dst_fqi->fq_dnode);
- return (0);
- }
-
- rc = smb_fsop_rename(sr, sr->user_cr,
- src_fqi->fq_dnode, src_fqi->fq_fnode->od_name,
- dst_fqi->fq_dnode, dst_fqi->fq_last_comp);
-
- smb_node_end_crit(src_node);
- if (rc == 0)
- smb_node_notify_change(dst_fqi->fq_dnode);
- smb_node_release(src_fqi->fq_fnode);
- smb_node_release(src_fqi->fq_dnode);
- smb_node_release(dst_fqi->fq_dnode);
- return (rc);
- }
-
- /* dst node must not exist */
- if (dst_fqi->fq_fnode) {
- smb_node_end_crit(src_node);
- smb_node_release(src_fqi->fq_fnode);
- smb_node_release(src_fqi->fq_dnode);
- smb_node_release(dst_fqi->fq_fnode);
- smb_node_release(dst_fqi->fq_dnode);
- return (EEXIST);
- }
-
- /*
- * If the source name is mangled but the source and destination
- * on-disk names are identical, we'll use the on-disk name.
- */
- if ((smb_maybe_mangled_name(src_fqi->fq_last_comp)) &&
- (strcmp(src_fqi->fq_last_comp, dst_fqi->fq_last_comp) == 0)) {
- dstname = src_fqi->fq_fnode->od_name;
- } else {
- dstname = dst_fqi->fq_last_comp;
- }
-
- rc = smb_fsop_rename(sr, sr->user_cr,
- src_fqi->fq_dnode, src_fqi->fq_fnode->od_name,
- dst_fqi->fq_dnode, dstname);
-
- smb_node_end_crit(src_node);
- if (rc == 0)
- smb_node_notify_change(dst_fqi->fq_dnode);
- smb_node_release(src_fqi->fq_fnode);
- smb_node_release(src_fqi->fq_dnode);
- smb_node_release(dst_fqi->fq_dnode);
- return (rc);
-}
-
-/*
* smb_com_nt_rename
*
* Rename a file. Files OldFileName must exist and NewFileName must not.
* Both pathnames must be relative to the Tid specified in the request.
* Open files may be renamed.
*
- * Multiple files may be renamed in response to a single request as Rename
- * File supports wildcards in the file name (last component of the path).
- * NOTE: we don't support rename with wildcards.
- *
* SearchAttributes indicates the attributes that the target file(s) must
* have. If SearchAttributes is zero then only normal files are renamed.
* If the system file or hidden attributes are specified then the rename
* is inclusive - both the specified type(s) of files and normal files are
- * renamed. The encoding of SearchAttributes is described in section 3.10
- * - File Attribute Encoding.
- *
- * Client Request Description
- * ================================= ==================================
- * UCHAR WordCount; Count of parameter words = 4
- * USHORT SearchAttributes;
- * USHORT InformationLevel; 0x0103 Create a hard link
- * 0x0104 In-place rename
- * 0x0105 Move (rename) a file
- * ULONG ClusterCount Servers should ignore this value
- * USHORT ByteCount; Count of data bytes; min = 4
- * UCHAR Buffer[]; Buffer containing:
- * UCHAR BufferFormat1 0x04
- * UCHAR OldFileName[] OldFileName
- * UCHAR BufferFormat1 0x04
- * UCHAR OldFileName[] NewFileName
- *
- * Server Response Description
- * ================================= ==================================
- * UCHAR WordCount; Count of parameter words = 0
- * UCHAR ByteCount; Count of data bytes = 0
+ * renamed.
*/
smb_sdrc_t
smb_pre_nt_rename(smb_request_t *sr)
@@ -373,7 +189,7 @@ smb_com_nt_rename(smb_request_t *sr)
break;
case SMB_NT_RENAME_RENAME_FILE:
case SMB_NT_RENAME_MOVE_FILE:
- rc = smb_do_rename(sr, src_fqi, dst_fqi);
+ rc = smb_common_rename(sr, src_fqi, dst_fqi);
break;
case SMB_NT_RENAME_MOVE_CLUSTER_INFO:
rc = EINVAL;
@@ -393,43 +209,423 @@ smb_com_nt_rename(smb_request_t *sr)
}
/*
+ * smb_nt_transact_rename
+ *
+ * Windows servers return SUCCESS without renaming file.
+ * The only check required is to check that the handle (fid) is valid.
+ */
+smb_sdrc_t
+smb_nt_transact_rename(smb_request_t *sr, smb_xa_t *xa)
+{
+ if (smb_mbc_decodef(&xa->req_param_mb, "w", &sr->smb_fid) != 0)
+ return (SDRC_ERROR);
+
+ smbsr_lookup_file(sr);
+ if (sr->fid_ofile == NULL) {
+ smbsr_error(sr, NT_STATUS_INVALID_HANDLE, ERRDOS, ERRbadfid);
+ return (SDRC_ERROR);
+ }
+ smbsr_release_file(sr);
+
+ return (SDRC_SUCCESS);
+}
+
+/*
+ * smb_trans2_rename
+ *
+ * Implements SMB_FILE_RENAME_INFORMATION level of Trans2_Set_FileInfo
+ * and Trans2_Set_PathInfo.
+ * If the new filename (dst_fqi) already exists it may be overwritten
+ * if flags == 1.
+ */
+int
+smb_trans2_rename(smb_request_t *sr, smb_node_t *node, char *fname, int flags)
+{
+ int rc;
+ smb_fqi_t *src_fqi = &sr->arg.dirop.fqi;
+ smb_fqi_t *dst_fqi = &sr->arg.dirop.dst_fqi;
+
+ sr->arg.dirop.flags = flags ? SMB_RENAME_FLAG_OVERWRITE : 0;
+ sr->arg.dirop.info_level = SMB_NT_RENAME_RENAME_FILE;
+
+ src_fqi->fq_sattr = SMB_SEARCH_ATTRIBUTES;
+ src_fqi->fq_fnode = node;
+ src_fqi->fq_dnode = node->n_dnode;
+
+ dst_fqi->fq_path.pn_path = fname;
+ dst_fqi->fq_dnode = node->n_dnode;
+ (void) strlcpy(dst_fqi->fq_last_comp, fname, MAXNAMELEN);
+
+ rc = smb_common_rename(sr, src_fqi, dst_fqi);
+ if (rc != 0) {
+ smb_rename_set_error(sr, rc);
+ return (-1);
+ }
+
+ return (0);
+}
+
+/*
+ * smb_common_rename
+ *
+ * Common code for renaming a file.
+ *
+ * If the source and destination are identical, we go through all
+ * the checks but we don't actually do the rename. If the source
+ * and destination files differ only in case, we do a case-sensitive
+ * rename. Otherwise, we do a full case-insensitive rename.
+ *
+ * Returns errno values.
+ */
+static int
+smb_common_rename(smb_request_t *sr, smb_fqi_t *src_fqi, smb_fqi_t *dst_fqi)
+{
+ smb_node_t *src_fnode, *src_dnode, *dst_fnode, *dst_dnode;
+ smb_node_t *tnode;
+ int rc, count;
+ DWORD status;
+ char *new_name, *path;
+
+ path = dst_fqi->fq_path.pn_path;
+
+ /* Check if attempting to rename a stream - not yet supported */
+ rc = smb_rename_check_stream(src_fqi, dst_fqi);
+ if (rc != 0)
+ return (rc);
+
+ /* The source node may already have been provided */
+ if (src_fqi->fq_fnode) {
+ smb_node_start_crit(src_fqi->fq_fnode, RW_READER);
+ smb_node_ref(src_fqi->fq_fnode);
+ smb_node_ref(src_fqi->fq_dnode);
+ } else {
+ /* lookup and validate src node */
+ rc = smb_rename_lookup_src(sr);
+ if (rc != 0)
+ return (rc);
+ }
+
+ src_fnode = src_fqi->fq_fnode;
+ src_dnode = src_fqi->fq_dnode;
+
+ /* Find destination dnode and last_comp */
+ if (dst_fqi->fq_dnode) {
+ smb_node_ref(dst_fqi->fq_dnode);
+ } else {
+ tnode = sr->tid_tree->t_snode;
+ rc = smb_pathname_reduce(sr, sr->user_cr, path, tnode, tnode,
+ &dst_fqi->fq_dnode, dst_fqi->fq_last_comp);
+ if (rc != 0) {
+ smb_rename_release_src(sr);
+ return (rc);
+ }
+ }
+
+ dst_dnode = dst_fqi->fq_dnode;
+ new_name = dst_fqi->fq_last_comp;
+
+ /* If exact name match in same directory, we're done */
+ if ((src_dnode == dst_dnode) &&
+ (strcmp(src_fnode->od_name, new_name) == 0)) {
+ smb_rename_release_src(sr);
+ smb_node_release(dst_dnode);
+ return (0);
+ }
+
+ /* Lookup destination node */
+ rc = smb_fsop_lookup(sr, sr->user_cr, 0, tnode,
+ dst_dnode, new_name, &dst_fqi->fq_fnode);
+
+ /*
+ * Handle case where changing case of the same directory entry.
+ *
+ * If we found the dst node in the same directory as the src node,
+ * and their names differ only in case:
+ *
+ * If the tree is case sensitive (or mixed):
+ * Do case sensitive lookup to see if exact match exists.
+ * If the exact match is the same node as src_node we're done.
+ *
+ * If the tree is case insensitive:
+ * There is currently no way to tell if the case is different
+ * or not, so do the rename (unless the specified new name was
+ * mangled).
+ */
+ if ((rc == 0) &&
+ (src_dnode == dst_dnode) &&
+ (smb_strcasecmp(src_fnode->od_name,
+ dst_fqi->fq_fnode->od_name, 0) == 0)) {
+ smb_node_release(dst_fqi->fq_fnode);
+ dst_fqi->fq_fnode = NULL;
+
+ if (smb_tree_has_feature(sr->tid_tree,
+ SMB_TREE_NO_CASESENSITIVE)) {
+ if (smb_strcasecmp(src_fnode->od_name,
+ dst_fqi->fq_last_comp, 0) != 0) {
+ smb_rename_release_src(sr);
+ smb_node_release(dst_dnode);
+ return (0);
+ }
+ } else {
+ rc = smb_fsop_lookup(sr, sr->user_cr,
+ SMB_CASE_SENSITIVE, tnode, dst_dnode, new_name,
+ &dst_fqi->fq_fnode);
+
+ if ((rc == 0) &&
+ (dst_fqi->fq_fnode == src_fnode)) {
+ smb_rename_release_src(sr);
+ smb_node_release(dst_fqi->fq_fnode);
+ smb_node_release(dst_dnode);
+ return (0);
+ }
+ }
+ }
+
+ if ((rc != 0) && (rc != ENOENT)) {
+ smb_rename_release_src(sr);
+ smb_node_release(dst_fqi->fq_dnode);
+ return (rc);
+ }
+
+ if (dst_fqi->fq_fnode) {
+ dst_fnode = dst_fqi->fq_fnode;
+
+ if (!(sr->arg.dirop.flags && SMB_RENAME_FLAG_OVERWRITE)) {
+ smb_rename_release_src(sr);
+ smb_node_release(dst_fnode);
+ smb_node_release(dst_dnode);
+ return (EEXIST);
+ }
+
+ (void) smb_oplock_break(dst_fnode, sr->session, B_FALSE);
+
+ for (count = 0; count <= 3; count++) {
+ if (count) {
+ smb_node_end_crit(dst_fnode);
+ delay(MSEC_TO_TICK(400));
+ }
+
+ smb_node_start_crit(dst_fnode, RW_READER);
+ status = smb_node_delete_check(dst_fnode);
+
+ if (status != NT_STATUS_SHARING_VIOLATION)
+ break;
+ }
+
+ if (status != NT_STATUS_SHARING_VIOLATION)
+ status = smb_range_check(sr, dst_fnode,
+ 0, UINT64_MAX, B_TRUE);
+
+ if (status != NT_STATUS_SUCCESS) {
+ smb_rename_release_src(sr);
+ smb_node_end_crit(dst_fnode);
+ smb_node_release(dst_fnode);
+ smb_node_release(dst_dnode);
+ return (EACCES);
+ }
+
+ if (smb_maybe_mangled_name(new_name)) {
+ (void) strlcpy(new_name, dst_fnode->od_name,
+ MAXNAMELEN);
+ }
+ }
+
+ rc = smb_fsop_rename(sr, sr->user_cr,
+ src_dnode, src_fnode->od_name,
+ dst_dnode, new_name);
+
+ smb_rename_release_src(sr);
+
+ if (rc == 0)
+ smb_node_notify_change(dst_dnode);
+
+ if (dst_fqi->fq_fnode) {
+ smb_node_end_crit(dst_fnode);
+ smb_node_release(dst_fnode);
+ }
+ smb_node_release(dst_dnode);
+
+ return (rc);
+}
+
+/*
+ * smb_rename_check_stream
+ *
+ * For a stream rename the dst path must begin with ':', or "\\:".
+ * We don't yet support stream rename, Return EACCES.
+ *
+ * If not a stream rename, in accordance with the above rule,
+ * it is not valid for either the src or dst to be a stream.
+ * Return EINVAL.
+ */
+static int
+smb_rename_check_stream(smb_fqi_t *src_fqi, smb_fqi_t *dst_fqi)
+{
+ smb_node_t *src_fnode = src_fqi->fq_fnode;
+ char *src_path = src_fqi->fq_path.pn_path;
+ char *dst_path = dst_fqi->fq_path.pn_path;
+
+ /* We do not yet support named stream rename - ACCESS DENIED */
+ if ((dst_path[0] == ':') ||
+ ((dst_path[0] == '\\') && (dst_path[1] == ':'))) {
+ return (EACCES);
+ }
+
+ /*
+ * If not stream rename (above) neither src or dst can be
+ * a named stream.
+ */
+
+ if (smb_is_stream_name(dst_path))
+ return (EINVAL);
+
+ if (src_fqi->fq_fnode) {
+ if (SMB_IS_STREAM(src_fnode))
+ return (EINVAL);
+ } else {
+ if (smb_is_stream_name(src_path))
+ return (EINVAL);
+ }
+
+ return (0);
+}
+
+
+/*
* smb_make_link
*
- * Common code for creating a hard link (adding an additional name
- * for a file.
+ * Creating a hard link (adding an additional name) for a file.
*
* If the source and destination are identical, we go through all
* the checks but we don't create a link.
*
+ * If the file is a symlink we create the hardlink on the target
+ * of the symlink (i.e. use SMB_FOLLOW_LINKS when looking up src).
+ * If the target of the symlink does not exist we fail with ENOENT.
+ *
* Returns errno values.
*/
static int
smb_make_link(smb_request_t *sr, smb_fqi_t *src_fqi, smb_fqi_t *dst_fqi)
{
- smb_node_t *src_fnode, *tnode;
+ smb_node_t *tnode;
+ char *path;
+ int rc;
+
+ /* Cannnot create link on named stream */
+ if (smb_is_stream_name(src_fqi->fq_path.pn_path) ||
+ smb_is_stream_name(dst_fqi->fq_path.pn_path)) {
+ return (EINVAL);
+ }
+
+ /* lookup and validate src node */
+ rc = smb_rename_lookup_src(sr);
+ if (rc != 0)
+ return (rc);
+
+ /* if src and dest paths match we're done */
+ if (smb_strcasecmp(src_fqi->fq_path.pn_path,
+ dst_fqi->fq_path.pn_path, 0) == 0) {
+ smb_rename_release_src(sr);
+ return (0);
+ }
+
+ /* find the destination dnode and last_comp */
+ tnode = sr->tid_tree->t_snode;
+ path = dst_fqi->fq_path.pn_path;
+ rc = smb_pathname_reduce(sr, sr->user_cr, path, tnode, tnode,
+ &dst_fqi->fq_dnode, dst_fqi->fq_last_comp);
+ if (rc != 0) {
+ smb_rename_release_src(sr);
+ return (rc);
+ }
+
+ /* If name match in same directory, we're done */
+ if ((src_fqi->fq_dnode == dst_fqi->fq_dnode) &&
+ (smb_strcasecmp(src_fqi->fq_fnode->od_name,
+ dst_fqi->fq_last_comp, 0) == 0)) {
+ smb_rename_release_src(sr);
+ smb_node_release(dst_fqi->fq_dnode);
+ return (0);
+ }
+
+ /* Lookup the destination node. It MUST NOT exist. */
+ rc = smb_fsop_lookup(sr, sr->user_cr, 0, tnode,
+ dst_fqi->fq_dnode, dst_fqi->fq_last_comp, &dst_fqi->fq_fnode);
+ if (rc == 0) {
+ smb_node_release(dst_fqi->fq_fnode);
+ rc = EEXIST;
+ }
+ if (rc != ENOENT) {
+ smb_rename_release_src(sr);
+ smb_node_release(dst_fqi->fq_dnode);
+ return (rc);
+ }
+
+ rc = smb_fsop_link(sr, sr->user_cr, src_fqi->fq_fnode,
+ dst_fqi->fq_dnode, dst_fqi->fq_last_comp);
+
+ smb_rename_release_src(sr);
+ if (rc == 0)
+ smb_node_notify_change(dst_fqi->fq_dnode);
+ smb_node_release(dst_fqi->fq_dnode);
+ return (rc);
+}
+
+/*
+ * smb_rename_lookup_src
+ *
+ * Lookup the src node, checking for sharing violations and
+ * breaking any existing oplock.
+ * Populate sr->arg.dirop.fqi
+ *
+ * Upon success, the dnode and fnode will have holds and the
+ * fnode will be in a critical section. These should be
+ * released using smb_rename_release_src().
+ *
+ * Returns errno values.
+ */
+static int
+smb_rename_lookup_src(smb_request_t *sr)
+{
+ smb_node_t *src_node, *tnode;
DWORD status;
int rc;
int count;
char *path;
- tnode = sr->tid_tree->t_snode;
+ struct dirop *dirop = &sr->arg.dirop;
+ smb_fqi_t *src_fqi = &sr->arg.dirop.fqi;
+
+ if (smb_is_stream_name(src_fqi->fq_path.pn_path))
+ return (EINVAL);
- /* Lookup the source node. It MUST exist. */
+ /* Lookup the source node */
+ tnode = sr->tid_tree->t_snode;
path = src_fqi->fq_path.pn_path;
rc = smb_pathname_reduce(sr, sr->user_cr, path, tnode, tnode,
&src_fqi->fq_dnode, src_fqi->fq_last_comp);
if (rc != 0)
return (rc);
- rc = smb_fsop_lookup(sr, sr->user_cr, SMB_FOLLOW_LINKS, tnode,
+ rc = smb_fsop_lookup(sr, sr->user_cr, 0, tnode,
src_fqi->fq_dnode, src_fqi->fq_last_comp, &src_fqi->fq_fnode);
if (rc != 0) {
smb_node_release(src_fqi->fq_dnode);
return (rc);
}
- src_fnode = src_fqi->fq_fnode;
- rc = smb_rename_check_attr(sr, src_fnode, src_fqi->fq_sattr);
+ /* Not valid to create hardlink for directory */
+ if ((dirop->info_level == SMB_NT_RENAME_SET_LINK_INFO) &&
+ (smb_node_is_dir(src_fqi->fq_fnode))) {
+ smb_node_release(src_fqi->fq_fnode);
+ smb_node_release(src_fqi->fq_dnode);
+ return (EISDIR);
+ }
+
+ src_node = src_fqi->fq_fnode;
+
+ rc = smb_rename_check_attr(sr, src_node, src_fqi->fq_sattr);
if (rc != 0) {
smb_node_release(src_fqi->fq_fnode);
smb_node_release(src_fqi->fq_dnode);
@@ -441,81 +637,53 @@ smb_make_link(smb_request_t *sr, smb_fqi_t *src_fqi, smb_fqi_t *dst_fqi)
* has a file open, this will force a flush or close,
* which may affect the outcome of any share checking.
*/
- (void) smb_oplock_break(src_fnode, sr->session, B_FALSE);
+ (void) smb_oplock_break(src_node, sr->session, B_FALSE);
for (count = 0; count <= 3; count++) {
if (count) {
- smb_node_end_crit(src_fnode);
+ smb_node_end_crit(src_node);
delay(MSEC_TO_TICK(400));
}
- smb_node_start_crit(src_fnode, RW_READER);
- status = smb_node_rename_check(src_fnode);
+ smb_node_start_crit(src_node, RW_READER);
+ status = smb_node_rename_check(src_node);
if (status != NT_STATUS_SHARING_VIOLATION)
break;
}
if (status == NT_STATUS_SHARING_VIOLATION) {
- smb_node_end_crit(src_fnode);
+ smb_node_end_crit(src_node);
smb_node_release(src_fqi->fq_fnode);
smb_node_release(src_fqi->fq_dnode);
return (EPIPE); /* = ERRbadshare */
}
- status = smb_range_check(sr, src_fnode, 0, UINT64_MAX, B_TRUE);
+ status = smb_range_check(sr, src_node, 0, UINT64_MAX, B_TRUE);
if (status != NT_STATUS_SUCCESS) {
- smb_node_end_crit(src_fnode);
+ smb_node_end_crit(src_node);
smb_node_release(src_fqi->fq_fnode);
smb_node_release(src_fqi->fq_dnode);
return (EACCES);
}
- if (utf8_strcasecmp(src_fqi->fq_path.pn_path,
- dst_fqi->fq_path.pn_path) == 0) {
- smb_node_end_crit(src_fnode);
- smb_node_release(src_fqi->fq_fnode);
- smb_node_release(src_fqi->fq_dnode);
- return (0);
- }
-
- /* Lookup the destination node. It MUST NOT exist. */
- path = dst_fqi->fq_path.pn_path;
- rc = smb_pathname_reduce(sr, sr->user_cr, path, tnode, tnode,
- &dst_fqi->fq_dnode, dst_fqi->fq_last_comp);
- if (rc != 0) {
- smb_node_end_crit(src_fnode);
- smb_node_release(src_fqi->fq_fnode);
- smb_node_release(src_fqi->fq_dnode);
- return (rc);
- }
-
- rc = smb_fsop_lookup(sr, sr->user_cr, SMB_FOLLOW_LINKS, tnode,
- dst_fqi->fq_dnode, dst_fqi->fq_last_comp, &dst_fqi->fq_fnode);
- if (rc == 0) {
- smb_node_release(dst_fqi->fq_fnode);
- rc = EEXIST;
- }
- if (rc != ENOENT) {
- smb_node_end_crit(src_fnode);
- smb_node_release(src_fqi->fq_fnode);
- smb_node_release(src_fqi->fq_dnode);
- smb_node_release(dst_fqi->fq_dnode);
- return (rc);
- }
+ return (0);
+}
- rc = smb_fsop_link(sr, sr->user_cr, dst_fqi->fq_dnode, src_fnode,
- dst_fqi->fq_last_comp);
+/*
+ * smb_rename_release_src
+ */
+static void
+smb_rename_release_src(smb_request_t *sr)
+{
+ smb_fqi_t *src_fqi = &sr->arg.dirop.fqi;
- smb_node_end_crit(src_fnode);
- if (rc == 0)
- smb_node_notify_change(dst_fqi->fq_dnode);
+ smb_node_end_crit(src_fqi->fq_fnode);
smb_node_release(src_fqi->fq_fnode);
smb_node_release(src_fqi->fq_dnode);
- smb_node_release(dst_fqi->fq_dnode);
- return (rc);
}
+
static int
smb_rename_check_attr(smb_request_t *sr, smb_node_t *node, uint16_t sattr)
{
@@ -558,6 +726,7 @@ smb_rename_set_error(smb_request_t *sr, int errnum)
{ ESRCH, ERROR_FILE_NOT_FOUND, NT_STATUS_NO_SUCH_FILE },
{ EINVAL, ERROR_INVALID_PARAMETER, NT_STATUS_INVALID_PARAMETER },
{ EACCES, ERROR_ACCESS_DENIED, NT_STATUS_ACCESS_DENIED },
+ { EISDIR, ERROR_ACCESS_DENIED, NT_STATUS_FILE_IS_A_DIRECTORY },
{ EIO, ERROR_INTERNAL_ERROR, NT_STATUS_INTERNAL_ERROR }
};
diff --git a/usr/src/uts/common/fs/smbsrv/smb_sd.c b/usr/src/uts/common/fs/smbsrv/smb_sd.c
index 6a9bc70418..b8d7fd3b7a 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_sd.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_sd.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -30,7 +30,6 @@
#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
#include <smbsrv/smb_idmap.h>
-#include <smbsrv/ntstatus.h>
static void smb_sd_set_sacl(smb_sd_t *, smb_acl_t *, boolean_t, int);
static void smb_sd_set_dacl(smb_sd_t *, smb_acl_t *, boolean_t, int);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_seek.c b/usr/src/uts/common/fs/smbsrv/smb_seek.c
index d60a44d9e1..4e734063d9 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_seek.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_seek.c
@@ -41,7 +41,7 @@
* file offset is beyond the 32-bit limit.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
/*
diff --git a/usr/src/uts/common/fs/smbsrv/smb_server.c b/usr/src/uts/common/fs/smbsrv/smb_server.c
index 98c7c17bbd..8da1310dc8 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_server.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_server.c
@@ -215,10 +215,15 @@
#include <sys/priv.h>
#include <sys/socketvar.h>
#include <sys/zone.h>
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
+#include <netinet/ip.h>
+#include <netinet/ip_icmp.h>
+#include <netinet/ip_var.h>
+#include <netinet/tcp.h>
#include <smbsrv/smb_kproto.h>
+#include <smbsrv/string.h>
#include <smbsrv/netbios.h>
-#include <smbsrv/smb_incl.h>
-#include <smbsrv/cifs.h>
#include <smbsrv/smb_fsops.h>
#include <smbsrv/smb_share.h>
#include <smbsrv/smb_door_svc.h>
@@ -559,6 +564,7 @@ smb_server_start(smb_ioc_start_t *ioc)
mutex_enter(&sv->sv_mutex);
switch (sv->sv_state) {
case SMB_SERVER_STATE_CONFIGURED:
+ smb_codepage_init();
sv->sv_thread_pool = taskq_create("smb_workers",
sv->sv_cfg.skc_maxworkers, SMB_WORKER_PRIORITY,
@@ -589,8 +595,6 @@ smb_server_start(smb_ioc_start_t *ioc)
break;
}
- (void) oem_language_set("english");
-
sv->sv_state = SMB_SERVER_STATE_RUNNING;
mutex_exit(&sv->sv_mutex);
smb_server_release(sv);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_session.c b/usr/src/uts/common/fs/smbsrv/smb_session.c
index 68a597eeed..14971d067e 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_session.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_session.c
@@ -30,8 +30,8 @@
#include <sys/socketvar.h>
#include <sys/sdt.h>
#include <smbsrv/netbios.h>
-#include <smbsrv/smb_incl.h>
-#include <smbsrv/smb_i18n.h>
+#include <smbsrv/smb_kproto.h>
+#include <smbsrv/string.h>
#include <inet/tcp.h>
static volatile uint64_t smb_kids;
@@ -219,10 +219,9 @@ smb_session_request(struct smb_session *session)
char client_name[NETBIOS_NAME_SZ];
struct mbuf_chain mbc;
char *names = NULL;
- mts_wchar_t *wbuf = NULL;
+ smb_wchar_t *wbuf = NULL;
smb_xprt_t hdr;
char *p;
- unsigned int cpid = oem_get_smb_cpid();
int rc1, rc2;
session->keep_alive = smb_keep_alive;
@@ -283,10 +282,10 @@ smb_session_request(struct smb_session *session)
* multi-byte format. We also need to strip off any
* spaces added as part of the NetBIOS name encoding.
*/
- wbuf = kmem_alloc((SMB_PI_MAX_HOST * sizeof (mts_wchar_t)), KM_SLEEP);
- (void) oemstounicodes(wbuf, client_name, SMB_PI_MAX_HOST, cpid);
- (void) mts_wcstombs(session->workstation, wbuf, SMB_PI_MAX_HOST);
- kmem_free(wbuf, (SMB_PI_MAX_HOST * sizeof (mts_wchar_t)));
+ wbuf = kmem_alloc((SMB_PI_MAX_HOST * sizeof (smb_wchar_t)), KM_SLEEP);
+ (void) oemtoucs(wbuf, client_name, SMB_PI_MAX_HOST, OEM_CPG_850);
+ (void) smb_wcstombs(session->workstation, wbuf, SMB_PI_MAX_HOST);
+ kmem_free(wbuf, (SMB_PI_MAX_HOST * sizeof (smb_wchar_t)));
if ((p = strchr(session->workstation, ' ')) != 0)
*p = '\0';
@@ -1039,8 +1038,8 @@ smb_session_lookup_user(smb_session_t *session, char *domain, char *name)
user = smb_llist_head(ulist);
while (user) {
ASSERT(user->u_magic == SMB_USER_MAGIC);
- if (!utf8_strcasecmp(user->u_name, name) &&
- !utf8_strcasecmp(user->u_domain, domain)) {
+ if (!smb_strcasecmp(user->u_name, name, 0) &&
+ !smb_strcasecmp(user->u_domain, domain, 0)) {
if (smb_user_hold(user))
break;
}
@@ -1123,14 +1122,14 @@ smb_session_isclient(smb_session_t *sn, const char *client)
client += strspn(client, "\\");
- if (utf8_strcasecmp(client, sn->workstation) == 0)
+ if (smb_strcasecmp(client, sn->workstation, 0) == 0)
return (B_TRUE);
ipaddr = &sn->ipaddr;
if (smb_inet_ntop(ipaddr, buf, SMB_IPSTRLEN(ipaddr->a_family)) == NULL)
return (B_FALSE);
- if (utf8_strcasecmp(client, buf) == 0)
+ if (smb_strcasecmp(client, buf, 0) == 0)
return (B_TRUE);
return (B_FALSE);
@@ -1161,13 +1160,12 @@ smb_request_alloc(smb_session_t *session, int req_length)
bzero(sr, sizeof (smb_request_t));
mutex_init(&sr->sr_mutex, NULL, MUTEX_DEFAULT, NULL);
+ smb_srm_init(sr);
sr->session = session;
sr->sr_server = session->s_server;
sr->sr_gmtoff = session->s_server->si_gmtoff;
sr->sr_cache = session->s_server->si_cache_request;
sr->sr_cfg = &session->s_cfg;
- sr->request_storage.forw = &sr->request_storage;
- sr->request_storage.back = &sr->request_storage;
sr->command.max_bytes = req_length;
sr->reply.max_bytes = smb_maxbufsize;
sr->sr_req_length = req_length;
@@ -1204,8 +1202,7 @@ smb_request_free(smb_request_t *sr)
sr->session = NULL;
- /* Release any temp storage */
- smbsr_free_malloc_list(&sr->request_storage);
+ smb_srm_fini(sr);
if (sr->sr_request_buf)
kmem_free(sr->sr_request_buf, sr->sr_req_length);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_session_setup_andx.c b/usr/src/uts/common/fs/smbsrv/smb_session_setup_andx.c
index 761706078f..7f2d86a1f9 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_session_setup_andx.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_session_setup_andx.c
@@ -222,7 +222,7 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_token.h>
#include <smbsrv/smb_door_svc.h>
@@ -477,8 +477,7 @@ smb_authenticate(smb_request_t *sr, smb_sessionsetup_info_t *sinfo,
boolean_t need_lookup = B_FALSE;
uint32_t privileges;
cred_t *cr;
- char *buf;
- size_t buflen = 0;
+ char *buf = NULL;
char *p;
bzero(&clnt_info, sizeof (netr_client_t));
@@ -500,8 +499,7 @@ smb_authenticate(smb_request_t *sr, smb_sessionsetup_info_t *sinfo,
* for some forms of authentication.
*/
if (*sinfo->ssi_domain == '\0') {
- buflen = strlen(sinfo->ssi_user) + 1;
- buf = smb_kstrdup(sinfo->ssi_user, buflen);
+ buf = smb_strdup(sinfo->ssi_user);
if ((p = strchr(buf, '@')) != NULL) {
*p = '\0';
clnt_info.e_username = buf;
@@ -531,8 +529,7 @@ smb_authenticate(smb_request_t *sr, smb_sessionsetup_info_t *sinfo,
sr->smb_uid = user->u_uid;
sr->uid_user = user;
- if (buflen != 0)
- kmem_free(buf, buflen);
+ smb_mfree(buf);
return ((user->u_flags & SMB_USER_FLAG_GUEST)
? SMB_AUTH_GUEST : SMB_AUTH_USER);
@@ -561,8 +558,7 @@ smb_authenticate(smb_request_t *sr, smb_sessionsetup_info_t *sinfo,
usr_token = smb_get_token(&clnt_info);
- if (buflen != 0)
- kmem_free(buf, buflen);
+ smb_mfree(buf);
if (usr_token == NULL) {
smbsr_error(sr, 0, ERRSRV, ERRbadpw);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_set_fileinfo.c b/usr/src/uts/common/fs/smbsrv/smb_set_fileinfo.c
index 2f9111516d..2c98d81c5e 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_set_fileinfo.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_set_fileinfo.c
@@ -33,8 +33,10 @@
* SMB_SET_FILE_END_OF_FILE_INFO
* SMB_SET_FILE_ALLOCATION_INFO
*
- * Supported Passthrough levels:
+ * Handled Passthrough levels:
* SMB_FILE_BASIC_INFORMATION
+ * SMB_FILE_RENAME_INFORMATION
+ * SMB_FILE_LINK_INFORMATION
* SMB_FILE_DISPOSITION_INFORMATION
* SMB_FILE_END_OF_FILE_INFORMATION
* SMB_FILE_ALLOCATION_INFORMATION
@@ -61,7 +63,7 @@
* attributes.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
typedef struct smb_setinfo {
@@ -84,6 +86,7 @@ static int smb_set_basic_info(smb_request_t *, smb_setinfo_t *);
static int smb_set_disposition_info(smb_request_t *, smb_setinfo_t *);
static int smb_set_eof_info(smb_request_t *sr, smb_setinfo_t *);
static int smb_set_alloc_info(smb_request_t *sr, smb_setinfo_t *);
+static int smb_set_rename_info(smb_request_t *sr, smb_setinfo_t *);
/*
* smb_com_trans2_set_file_information
@@ -285,7 +288,12 @@ smb_set_by_path(smb_request_t *sr, smb_xa_t *xa,
kmem_free(name, MAXNAMELEN);
if (rc != 0) {
- smbsr_errno(sr, rc);
+ if (rc == ENOENT) {
+ smbsr_error(sr, NT_STATUS_OBJECT_NAME_NOT_FOUND,
+ ERRDOS, ERROR_FILE_NOT_FOUND);
+ } else {
+ smbsr_errno(sr, rc);
+ }
return (-1);
}
@@ -305,6 +313,9 @@ smb_set_by_path(smb_request_t *sr, smb_xa_t *xa,
/*
* smb_set_fileinfo
+ *
+ * For compatibility with windows servers, SMB_FILE_LINK_INFORMATION
+ * is handled by returning NT_STATUS_NOT_SUPPORTED.
*/
static int
smb_set_fileinfo(smb_request_t *sr, smb_setinfo_t *sinfo)
@@ -339,6 +350,13 @@ smb_set_fileinfo(smb_request_t *sr, smb_setinfo_t *sinfo)
case SMB_FILE_ALLOCATION_INFORMATION:
return (smb_set_alloc_info(sr, sinfo));
+ case SMB_FILE_RENAME_INFORMATION:
+ return (smb_set_rename_info(sr, sinfo));
+
+ case SMB_FILE_LINK_INFORMATION:
+ smbsr_error(sr, NT_STATUS_NOT_SUPPORTED,
+ ERRDOS, ERROR_NOT_SUPPORTED);
+ return (-1);
default:
break;
}
@@ -681,3 +699,44 @@ smb_set_disposition_info(smb_request_t *sr, smb_setinfo_t *sinfo)
}
return (0);
}
+
+/*
+ * smb_set_rename_info
+ *
+ * Explicity specified parameter validation rules:
+ * - If rootdir is not NULL respond with NT_STATUS_INVALID_PARAMETER.
+ * - If the filename contains a separator character respond with
+ * NT_STATUS_INVALID_PARAMETER.
+ */
+static int
+smb_set_rename_info(smb_request_t *sr, smb_setinfo_t *sinfo)
+{
+ int rc;
+ uint32_t flags, rootdir, namelen;
+ char *fname;
+
+ rc = smb_mbc_decodef(&sinfo->si_xa->req_data_mb, "lll",
+ &flags, &rootdir, &namelen);
+ if (rc == 0) {
+ rc = smb_mbc_decodef(&sinfo->si_xa->req_data_mb, "%#U",
+ sr, namelen, &fname);
+ }
+ if (rc != 0)
+ return (-1);
+
+ if ((rootdir != 0) || (namelen == 0) || (namelen >= MAXNAMELEN)) {
+ smbsr_error(sr, NT_STATUS_INVALID_PARAMETER,
+ ERRDOS, ERROR_INVALID_PARAMETER);
+ return (-1);
+ }
+
+ if (strchr(fname, '\\') != NULL) {
+ smbsr_error(sr, NT_STATUS_NOT_SUPPORTED,
+ ERRDOS, ERROR_NOT_SUPPORTED);
+ return (-1);
+ }
+
+ rc = smb_trans2_rename(sr, sinfo->si_node, fname, flags);
+
+ return ((rc == 0) ? 0 : -1);
+}
diff --git a/usr/src/uts/common/fs/smbsrv/smb_signing.c b/usr/src/uts/common/fs/smbsrv/smb_signing.c
index d587c21850..55c7e45b0b 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_signing.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_signing.c
@@ -19,12 +19,10 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "@(#)smb_signing.c 1.4 08/07/08 SMI"
-
/*
* These routines provide the SMB MAC signing for the SMB server.
* The routines calculate the signature of a SMB message in an mbuf chain.
@@ -42,10 +40,9 @@
*/
#include <sys/uio.h>
-#include <smbsrv/mbuf.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/msgbuf.h>
#include <sys/crypto/api.h>
-#include <smbsrv/smb_incl.h>
#define SMBAUTH_SESSION_KEY_SZ 16
#define SMB_SIG_SIZE 8
diff --git a/usr/src/uts/common/fs/smbsrv/smb_trans2_create_directory.c b/usr/src/uts/common/fs/smbsrv/smb_trans2_create_directory.c
index e6a6ed1360..8f22111344 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_trans2_create_directory.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_trans2_create_directory.c
@@ -51,9 +51,7 @@
* occurred while setting EAs
*/
-#include <smbsrv/nterror.h>
-#include <smbsrv/ntstatus.h>
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
/*
diff --git a/usr/src/uts/common/fs/smbsrv/smb_trans2_dfs.c b/usr/src/uts/common/fs/smbsrv/smb_trans2_dfs.c
index 67073b5871..166fc20179 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_trans2_dfs.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_trans2_dfs.c
@@ -19,13 +19,11 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
/*
diff --git a/usr/src/uts/common/fs/smbsrv/smb_trans2_find.c b/usr/src/uts/common/fs/smbsrv/smb_trans2_find.c
index f3aef8da99..11158d9d5c 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_trans2_find.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_trans2_find.c
@@ -202,7 +202,7 @@
* STRING FileName; Files full length name
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/msgbuf.h>
#include <smbsrv/smb_fsops.h>
@@ -686,7 +686,7 @@ smb_trans2_find_mbc_encode(smb_request_t *sr, smb_xa_t *xa,
* Regardless of whether unicode or ascii, a single
* termination byte is used.
*/
- buflen = namelen + sizeof (mts_wchar_t);
+ buflen = namelen + sizeof (smb_wchar_t);
tmpbuf = kmem_zalloc(buflen, KM_SLEEP);
smb_msgbuf_init(&mb, (uint8_t *)tmpbuf, buflen, mb_flags);
if (smb_msgbuf_encode(&mb, "u", fileinfo->fi_name) < 0) {
@@ -768,7 +768,7 @@ smb_trans2_find_mbc_encode(smb_request_t *sr, smb_xa_t *xa,
smb_msgbuf_term(&mb);
return (-1);
}
- shortlen = mts_wcequiv_strlen(fileinfo->fi_shortname);
+ shortlen = smb_wcequiv_strlen(fileinfo->fi_shortname);
(void) smb_mbc_encodef(&xa->rep_data_mb, "%llTTTTqqlllb.24cu",
sr,
diff --git a/usr/src/uts/common/fs/smbsrv/smb_trans2_query_fs_information.c b/usr/src/uts/common/fs/smbsrv/smb_trans2_query_fs_information.c
index 1d87b3dc6b..4d95fb3154 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_trans2_query_fs_information.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_trans2_query_fs_information.c
@@ -230,7 +230,7 @@
* ERRSRV/ERRinvdevice - resource identified by TID is not a file system
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
#include <smbsrv/smbinfo.h>
@@ -315,7 +315,7 @@ smb_com_trans2_query_fs_information(struct smb_request *sr, struct smb_xa *xa)
case SMB_QUERY_FS_VOLUME_INFO:
if ((sr->smb_flg2 & SMB_FLAGS2_UNICODE) ||
(sr->session->native_os == NATIVE_OS_WIN95)) {
- length = mts_wcequiv_strlen(tree->t_volume);
+ length = smb_wcequiv_strlen(tree->t_volume);
encode_str = "%qllb.U";
} else {
length = strlen(tree->t_volume);
@@ -364,7 +364,7 @@ smb_com_trans2_query_fs_information(struct smb_request *sr, struct smb_xa *xa)
(sr->session->native_os == NATIVE_OS_WIN2000) ||
(sr->session->native_os == NATIVE_OS_WIN95) ||
(sr->session->native_os == NATIVE_OS_MACOS)) {
- length = mts_wcequiv_strlen(fsname);
+ length = smb_wcequiv_strlen(fsname);
encode_str = "%lllU";
sr->smb_flg2 |= SMB_FLAGS2_UNICODE;
} else {
diff --git a/usr/src/uts/common/fs/smbsrv/smb_tree.c b/usr/src/uts/common/fs/smbsrv/smb_tree.c
index ebe14f4cae..48e412345e 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_tree.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_tree.c
@@ -170,7 +170,7 @@
#include <sys/stat.h>
#include <sys/varargs.h>
#include <sys/cred_impl.h>
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/lmerr.h>
#include <smbsrv/smb_fsops.h>
#include <smbsrv/smb_door_svc.h>
@@ -215,7 +215,7 @@ smb_tree_connect(smb_request_t *sr)
const char *name;
int32_t stype;
- (void) utf8_strlwr(unc_path);
+ (void) smb_strlwr(unc_path);
if ((name = smb_tree_get_sharename(unc_path)) == NULL) {
smbsr_error(sr, 0, ERRSRV, ERRinvnetname);
@@ -1048,7 +1048,7 @@ smb_tree_get_flags(const smb_share_t *si, vfs_t *vfsp, smb_tree_t *tree)
}
(void) strlcpy(tree->t_typename, name, SMB_TYPENAMELEN);
- (void) utf8_strupr((char *)tree->t_typename);
+ (void) smb_strupr((char *)tree->t_typename);
if (vfs_has_feature(vfsp, VFSFT_XVATTR))
flags |= SMB_TREE_XVATTR;
@@ -1339,7 +1339,7 @@ smb_tree_netinfo_init(smb_tree_t *tree, smb_netconnectinfo_t *info)
info->ci_time = gethrestime_sec() - tree->t_connect_time;
info->ci_sharelen = strlen(tree->t_sharename) + 1;
- info->ci_share = smb_kstrdup(tree->t_sharename, info->ci_sharelen);
+ info->ci_share = smb_strdup(tree->t_sharename);
user = tree->t_user;
ASSERT(user);
@@ -1359,7 +1359,7 @@ smb_tree_netinfo_fini(smb_netconnectinfo_t *info)
if (info->ci_username)
kmem_free(info->ci_username, info->ci_namelen);
if (info->ci_share)
- kmem_free(info->ci_share, info->ci_sharelen);
+ smb_mfree(info->ci_share);
bzero(info, sizeof (smb_netconnectinfo_t));
}
diff --git a/usr/src/uts/common/fs/smbsrv/smb_tree_connect.c b/usr/src/uts/common/fs/smbsrv/smb_tree_connect.c
index 5f3f4279b2..07ba7a7776 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_tree_connect.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_tree_connect.c
@@ -23,7 +23,7 @@
* Use is subject to license terms.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
/*
@@ -251,8 +251,7 @@ smb_pre_tree_connect_andx(smb_request_t *sr)
&sr->arg.tcon.flags, &pwlen);
if (rc == 0) {
if (pwlen != 0) {
- pwbuf = (uint8_t *)smbsr_malloc(&sr->request_storage,
- pwlen);
+ pwbuf = smb_srm_alloc(sr, pwlen);
bzero(pwbuf, pwlen);
}
diff --git a/usr/src/uts/common/fs/smbsrv/smb_unlock_byte_range.c b/usr/src/uts/common/fs/smbsrv/smb_unlock_byte_range.c
index aab82acfff..5fc5654f4a 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_unlock_byte_range.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_unlock_byte_range.c
@@ -51,7 +51,7 @@
* USHORT ByteCount; Count of data bytes = 0
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
smb_sdrc_t
smb_pre_unlock_byte_range(smb_request_t *sr)
diff --git a/usr/src/uts/common/fs/smbsrv/smb_user.c b/usr/src/uts/common/fs/smbsrv/smb_user.c
index 0b92d8993e..3cd07490b9 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_user.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_user.c
@@ -163,7 +163,7 @@
* being queued in that list is NOT registered by incrementing the
* reference count.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_door_svc.h>
@@ -230,8 +230,8 @@ smb_user_login(
user->u_privileges = privileges;
user->u_name_len = strlen(account_name) + 1;
user->u_domain_len = strlen(domain_name) + 1;
- user->u_name = smb_kstrdup(account_name, user->u_name_len);
- user->u_domain = smb_kstrdup(domain_name, user->u_domain_len);
+ user->u_name = smb_strdup(account_name);
+ user->u_domain = smb_strdup(domain_name);
user->u_cred = cr;
user->u_privcred = smb_cred_create_privs(cr, privileges);
user->u_audit_sid = audit_sid;
@@ -254,8 +254,8 @@ smb_user_login(
}
smb_idpool_free(&session->s_uid_pool, user->u_uid);
}
- kmem_free(user->u_name, (size_t)user->u_name_len);
- kmem_free(user->u_domain, (size_t)user->u_domain_len);
+ smb_mfree(user->u_name);
+ smb_mfree(user->u_domain);
kmem_cache_free(session->s_server->si_cache_user, user);
return (NULL);
}
@@ -582,7 +582,7 @@ smb_user_lookup_share(
while (tree) {
ASSERT(tree->t_magic == SMB_TREE_MAGIC);
ASSERT(tree->t_user == user);
- if (utf8_strcasecmp(tree->t_sharename, sharename) == 0) {
+ if (smb_strcasecmp(tree->t_sharename, sharename, 0) == 0) {
if (smb_tree_hold(tree)) {
smb_llist_exit(&user->u_tree_list);
return (tree);
@@ -625,7 +625,7 @@ smb_user_lookup_volume(
ASSERT(tree->t_magic == SMB_TREE_MAGIC);
ASSERT(tree->t_user == user);
- if (utf8_strcasecmp(tree->t_volume, name) == 0) {
+ if (smb_strcasecmp(tree->t_volume, name, 0) == 0) {
if (smb_tree_hold(tree)) {
smb_llist_exit(&user->u_tree_list);
return (tree);
@@ -776,7 +776,7 @@ smb_user_namecmp(smb_user_t *user, const char *name)
char *fq_name;
boolean_t match;
- if (utf8_strcasecmp(name, user->u_name) == 0)
+ if (smb_strcasecmp(name, user->u_name, 0) == 0)
return (B_TRUE);
fq_name = kmem_alloc(MAXNAMELEN, KM_SLEEP);
@@ -784,12 +784,12 @@ smb_user_namecmp(smb_user_t *user, const char *name)
(void) snprintf(fq_name, MAXNAMELEN, "%s\\%s",
user->u_domain, user->u_name);
- match = (utf8_strcasecmp(name, fq_name) == 0);
+ match = (smb_strcasecmp(name, fq_name, 0) == 0);
if (!match) {
(void) snprintf(fq_name, MAXNAMELEN, "%s@%s",
user->u_name, user->u_domain);
- match = (utf8_strcasecmp(name, fq_name) == 0);
+ match = (smb_strcasecmp(name, fq_name, 0) == 0);
}
kmem_free(fq_name, MAXNAMELEN);
@@ -891,8 +891,8 @@ smb_user_delete(
crfree(user->u_cred);
if (user->u_privcred)
crfree(user->u_privcred);
- kmem_free(user->u_name, (size_t)user->u_name_len);
- kmem_free(user->u_domain, (size_t)user->u_domain_len);
+ smb_mfree(user->u_name);
+ smb_mfree(user->u_domain);
kmem_cache_free(user->u_server->si_cache_user, user);
}
@@ -1018,15 +1018,15 @@ smb_user_netinfo_init(smb_user_t *user, smb_netuserinfo_t *info)
info->ui_flags = user->u_flags;
info->ui_domain_len = user->u_domain_len;
- info->ui_domain = smb_kstrdup(user->u_domain, info->ui_domain_len);
+ info->ui_domain = smb_strdup(user->u_domain);
info->ui_account_len = user->u_name_len;
- info->ui_account = smb_kstrdup(user->u_name, info->ui_account_len);
+ info->ui_account = smb_strdup(user->u_name);
buf = kmem_alloc(MAXNAMELEN, KM_SLEEP);
smb_session_getclient(session, buf, MAXNAMELEN);
info->ui_workstation_len = strlen(buf) + 1;
- info->ui_workstation = smb_kstrdup(buf, info->ui_workstation_len);
+ info->ui_workstation = smb_strdup(buf);
kmem_free(buf, MAXNAMELEN);
}
@@ -1037,11 +1037,11 @@ smb_user_netinfo_fini(smb_netuserinfo_t *info)
return;
if (info->ui_domain)
- kmem_free(info->ui_domain, info->ui_domain_len);
+ smb_mfree(info->ui_domain);
if (info->ui_account)
- kmem_free(info->ui_account, info->ui_account_len);
+ smb_mfree(info->ui_account);
if (info->ui_workstation)
- kmem_free(info->ui_workstation, info->ui_workstation_len);
+ smb_mfree(info->ui_workstation);
bzero(info, sizeof (smb_netuserinfo_t));
}
diff --git a/usr/src/uts/common/fs/smbsrv/smb_util.c b/usr/src/uts/common/fs/smbsrv/smb_util.c
index 870c68ae51..cfc1264fb4 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_util.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_util.c
@@ -29,10 +29,9 @@
#include <sys/atomic.h>
#include <sys/kidmap.h>
#include <sys/time.h>
-#include <smbsrv/smb_incl.h>
+#include <sys/cpuvar.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
-#include <smbsrv/string.h>
-#include <smbsrv/mbuf.h>
#include <smbsrv/smbinfo.h>
#include <smbsrv/smb_xdr.h>
#include <smbsrv/smb_vops.h>
@@ -41,9 +40,6 @@
#include <sys/sid.h>
#include <sys/priv_names.h>
-#define SMB_NAME83_BASELEN 8
-#define SMB_NAME83_EXTLEN 3
-
static void smb_replace_wildcards(char *);
static boolean_t
@@ -77,7 +73,7 @@ int
smb_ascii_or_unicode_strlen(struct smb_request *sr, char *str)
{
if (sr->smb_flg2 & SMB_FLAGS2_UNICODE)
- return (mts_wcequiv_strlen(str));
+ return (smb_wcequiv_strlen(str));
return (strlen(str));
}
@@ -85,7 +81,7 @@ int
smb_ascii_or_unicode_strlen_null(struct smb_request *sr, char *str)
{
if (sr->smb_flg2 & SMB_FLAGS2_UNICODE)
- return (mts_wcequiv_strlen(str) + 2);
+ return (smb_wcequiv_strlen(str) + 2);
return (strlen(str) + 1);
}
@@ -310,7 +306,7 @@ smb_stream_parse_name(char *path, char *filename, char *stream)
if (stype == NULL)
(void) strlcat(stream, ":$DATA", MAXNAMELEN);
else
- (void) utf8_strupr(stype);
+ (void) smb_strupr(stype);
}
/*
@@ -1440,7 +1436,7 @@ smb_idmap_batch_destroy(smb_idmap_batch_t *sib)
for (i = 0; i < sib->sib_nmap; i++) {
domsid = sib->sib_maps[i].sim_domsid;
if (domsid)
- kmem_free(domsid, strlen(domsid) + 1);
+ smb_mfree(domsid);
}
}
@@ -1474,7 +1470,7 @@ smb_idmap_batch_getid(idmap_get_handle_t *idmaph, smb_idmap_t *sim,
smb_sid_tostr(sid, strsid);
if (smb_sid_splitstr(strsid, &sim->sim_rid) != 0)
return (IDMAP_ERR_SID);
- sim->sim_domsid = smb_kstrdup(strsid, strlen(strsid) + 1);
+ sim->sim_domsid = smb_strdup(strsid);
switch (idtype) {
case SMB_IDMAP_USER:
@@ -2036,23 +2032,6 @@ smb_cred_is_member(cred_t *cr, smb_sid_t *sid)
}
/*
- * smb_kstrdup
- *
- * Duplicate the given string s.
- */
-char *
-smb_kstrdup(const char *s, size_t n)
-{
- char *s2;
-
- ASSERT(s);
- ASSERT(n);
- s2 = kmem_alloc(n, KM_SLEEP);
- (void) strlcpy(s2, s, n);
- return (s2);
-}
-
-/*
* smb_cred_create_privs
*
* Creates a duplicate credential that contains system privileges for
diff --git a/usr/src/uts/common/fs/smbsrv/smb_vfs.c b/usr/src/uts/common/fs/smbsrv/smb_vfs.c
index 40d0497096..cbbd77c8a5 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_vfs.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_vfs.c
@@ -19,19 +19,16 @@
* CDDL HEADER END
*/
/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "@(#)smb_vfs.c 1.3 08/08/07 SMI"
-
#include <sys/types.h>
#include <sys/fsid.h>
#include <sys/vfs.h>
#include <sys/stat.h>
#include <smbsrv/smb_ktypes.h>
#include <smbsrv/smb_kproto.h>
-#include <smbsrv/string.h>
static smb_vfs_t *smb_vfs_lookup(smb_server_t *, vnode_t *);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_vops.c b/usr/src/uts/common/fs/smbsrv/smb_vops.c
index 386e02af4b..93782f0b6d 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_vops.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_vops.c
@@ -37,12 +37,10 @@
#include <sys/fcntl.h>
#include <nfs/lm.h>
-#include <smbsrv/smb_vops.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/string.h>
-
+#include <smbsrv/smb_vops.h>
#include <smbsrv/smb_fsops.h>
-#include <smbsrv/smb_kproto.h>
-#include <smbsrv/smb_incl.h>
/*
* CATIA support
@@ -110,7 +108,7 @@
typedef struct smb_catia_map
{
unsigned char unixchar; /* v4 */
- mts_wchar_t winchar; /* v5 */
+ smb_wchar_t winchar; /* v5 */
} smb_catia_map_t;
smb_catia_map_t catia_maps[SMB_CATIA_NUM_MAPS] =
@@ -126,8 +124,8 @@ smb_catia_map_t catia_maps[SMB_CATIA_NUM_MAPS] =
{'|', SMB_CATIA_WIN_BROKEN_BAR}
};
-static mts_wchar_t smb_catia_v5_lookup[SMB_CATIA_V5_LOOKUP_MAX];
-static mts_wchar_t smb_catia_v4_lookup[SMB_CATIA_V4_LOOKUP_MAX];
+static smb_wchar_t smb_catia_v5_lookup[SMB_CATIA_V5_LOOKUP_MAX];
+static smb_wchar_t smb_catia_v4_lookup[SMB_CATIA_V4_LOOKUP_MAX];
static void smb_vop_setup_xvattr(smb_attr_t *smb_attr, xvattr_t *xvattr);
static void smb_sa_to_va_mask(uint_t sa_mask, uint_t *va_maskp);
@@ -1400,11 +1398,11 @@ smb_vop_catia_init_v4_lookup()
int i, idx, offset = SMB_CATIA_V4_LOOKUP_LOW;
for (i = 0; i < SMB_CATIA_V4_LOOKUP_MAX; i++)
- smb_catia_v4_lookup[i] = (mts_wchar_t)(i + offset);
+ smb_catia_v4_lookup[i] = (smb_wchar_t)(i + offset);
for (i = 0; i < SMB_CATIA_NUM_MAPS; i++) {
idx = (int)catia_maps[i].winchar - offset;
- smb_catia_v4_lookup[idx] = (mts_wchar_t)catia_maps[i].unixchar;
+ smb_catia_v4_lookup[idx] = (smb_wchar_t)catia_maps[i].unixchar;
}
}
@@ -1420,7 +1418,7 @@ smb_vop_catia_init_v5_lookup()
int i, idx;
for (i = 0; i < SMB_CATIA_V5_LOOKUP_MAX; i++)
- smb_catia_v5_lookup[i] = (mts_wchar_t)i;
+ smb_catia_v5_lookup[i] = (smb_wchar_t)i;
for (i = 0; i < SMB_CATIA_NUM_MAPS; i++) {
idx = (int)catia_maps[i].unixchar;
@@ -1452,7 +1450,7 @@ smb_vop_catia_v5tov4(char *name, char *buf, int buflen)
{
int v4_idx, numbytes, inc;
int space_left = buflen - 1; /* one byte reserved for null */
- mts_wchar_t wc;
+ smb_wchar_t wc;
char mbstring[MTS_MB_CHAR_MAX];
char *p, *src = name, *dst = buf;
@@ -1465,7 +1463,7 @@ smb_vop_catia_v5tov4(char *name, char *buf, int buflen)
bzero(buf, buflen);
while (*src) {
- if ((numbytes = mts_mbtowc(&wc, src, MTS_MB_CHAR_MAX)) < 0)
+ if ((numbytes = smb_mbtowc(&wc, src, MTS_MB_CHAR_MAX)) < 0)
return (name);
if (wc < SMB_CATIA_V4_LOOKUP_LOW ||
@@ -1475,7 +1473,7 @@ smb_vop_catia_v5tov4(char *name, char *buf, int buflen)
} else {
/* Lookup required. */
v4_idx = (int)wc - SMB_CATIA_V4_LOOKUP_LOW;
- inc = mts_wctomb(mbstring, smb_catia_v4_lookup[v4_idx]);
+ inc = smb_wctomb(mbstring, smb_catia_v4_lookup[v4_idx]);
p = mbstring;
}
@@ -1509,7 +1507,7 @@ smb_vop_catia_v4tov5(char *name, char *buf, int buflen)
{
int v5_idx, numbytes;
int space_left = buflen - 1; /* one byte reserved for null */
- mts_wchar_t wc;
+ smb_wchar_t wc;
char mbstring[MTS_MB_CHAR_MAX];
char *src = name, *dst = buf;
@@ -1521,16 +1519,16 @@ smb_vop_catia_v4tov5(char *name, char *buf, int buflen)
(void) bzero(buf, buflen);
while (*src) {
- if (mts_isascii(*src)) {
+ if (smb_isascii(*src)) {
/* Lookup required */
v5_idx = (int)*src++;
- numbytes = mts_wctomb(mbstring,
+ numbytes = smb_wctomb(mbstring,
smb_catia_v5_lookup[v5_idx]);
if (space_left < numbytes)
break;
(void) strncpy(dst, mbstring, numbytes);
} else {
- if ((numbytes = mts_mbtowc(&wc, src,
+ if ((numbytes = smb_mbtowc(&wc, src,
MTS_MB_CHAR_MAX)) < 0)
break;
if (space_left < numbytes)
diff --git a/usr/src/uts/common/fs/smbsrv/smb_vss.c b/usr/src/uts/common/fs/smbsrv/smb_vss.c
index 78300cf788..e70c292b38 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_vss.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_vss.c
@@ -39,9 +39,9 @@
* in the snapshot.
*/
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
+#include <smbsrv/string.h>
#include <smbsrv/winioctl.h>
-#include <smbsrv/ntstatus.h>
#include <smbsrv/smb_door_svc.h>
/* Size of the token on the wire due to encoding */
@@ -249,7 +249,7 @@ smb_vss_is_gmttoken(const char *s)
while (*template) {
if (*template == 'N') {
- if (!mts_isdigit(*str))
+ if (!smb_isdigit(*str))
return (B_FALSE);
} else if (*template != *str) {
return (B_FALSE);
diff --git a/usr/src/uts/common/fs/smbsrv/smb_write.c b/usr/src/uts/common/fs/smbsrv/smb_write.c
index c913770205..a07e555494 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_write.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_write.c
@@ -24,9 +24,8 @@
*/
#include <sys/sdt.h>
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
-#include <smbsrv/mbuf.h>
#include <smbsrv/netbios.h>
diff --git a/usr/src/uts/common/fs/smbsrv/smb_write_raw.c b/usr/src/uts/common/fs/smbsrv/smb_write_raw.c
index a1d7948412..446b25bb23 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_write_raw.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_write_raw.c
@@ -182,9 +182,8 @@
*/
#include <sys/sdt.h>
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
#include <smbsrv/smb_fsops.h>
-#include <smbsrv/mbuf.h>
#include <smbsrv/netbios.h>
extern uint32_t smb_keep_alive;
diff --git a/usr/src/uts/common/fs/smbsrv/smb_xlate.c b/usr/src/uts/common/fs/smbsrv/smb_xlate.c
index ffe1aa199d..c0f4f66391 100644
--- a/usr/src/uts/common/fs/smbsrv/smb_xlate.c
+++ b/usr/src/uts/common/fs/smbsrv/smb_xlate.c
@@ -19,13 +19,11 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <smbsrv/smb_incl.h>
+#include <smbsrv/smb_kproto.h>
struct xlate_table {
int code;
diff --git a/usr/src/uts/common/smbsrv/Makefile b/usr/src/uts/common/smbsrv/Makefile
index 07e63dfa7e..d9ed78c1b7 100644
--- a/usr/src/uts/common/smbsrv/Makefile
+++ b/usr/src/uts/common/smbsrv/Makefile
@@ -25,21 +25,10 @@
include ../../../Makefile.master
HDRS= alloc.h \
- cifs.h \
- codepage.h \
- cp_cyrillic.h \
- cp_latin1.h \
- cp_latin2.h \
- cp_latin3.h \
- cp_latin4.h \
- cp_latin5.h \
- cp_latin6.h \
cp_unicode.h \
cp_usascii.h \
- ctype.h \
doserror.h \
hash_table.h \
- lm.h \
lmdfs.h \
lmerr.h \
mac_cifs.h \
@@ -56,14 +45,11 @@ HDRS= alloc.h \
ntlocale.h \
smb_sid.h \
ntstatus.h \
- oem.h \
smb.h \
smb_common_door.h \
smb_door_svc.h \
smb_fsops.h \
- smb_i18n.h \
smb_idmap.h \
- smb_incl.h \
smb_inet.h \
smb_ioctl.h \
smb_kproto.h \
@@ -74,7 +60,6 @@ HDRS= alloc.h \
smb_token.h \
smb_vops.h \
smb_xdr.h \
- smbfmt.h \
smbinfo.h \
string.h \
svrapi.h \
diff --git a/usr/src/uts/common/smbsrv/alloc.h b/usr/src/uts/common/smbsrv/alloc.h
index 8d49256863..28d80342c4 100644
--- a/usr/src/uts/common/smbsrv/alloc.h
+++ b/usr/src/uts/common/smbsrv/alloc.h
@@ -19,15 +19,13 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SMBSRV_ALLOC_H
#define _SMBSRV_ALLOC_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -68,17 +66,16 @@ extern "C" {
#else /* _KERNEL */
-void *mem_malloc(uint32_t size);
-void *mem_zalloc(uint32_t size);
-char *mem_strdup(const char *ptr);
-void *mem_realloc(void *ptr, uint32_t size);
-void smb_mem_free(void *ptr);
+void *smb_malloc(uint32_t);
+char *smb_strdup(const char *);
+void *smb_realloc(void *, uint32_t);
+void smb_mfree(void *);
-#define MEM_MALLOC(AREA, SIZE) mem_malloc(SIZE)
-#define MEM_ZALLOC(AREA, SIZE) mem_zalloc(SIZE)
-#define MEM_STRDUP(AREA, PTR) mem_strdup(PTR)
-#define MEM_REALLOC(AREA, PTR, SIZE) mem_realloc((PTR), (SIZE))
-#define MEM_FREE(AREA, PTR) smb_mem_free(PTR)
+#define MEM_MALLOC(AREA, SIZE) smb_malloc(SIZE)
+#define MEM_ZALLOC(AREA, SIZE) smb_malloc(SIZE)
+#define MEM_STRDUP(AREA, PTR) smb_strdup(PTR)
+#define MEM_REALLOC(AREA, PTR, SIZE) smb_realloc((PTR), (SIZE))
+#define MEM_FREE(AREA, PTR) smb_mfree(PTR)
#endif /* _KERNEL */
diff --git a/usr/src/uts/common/smbsrv/cifs.h b/usr/src/uts/common/smbsrv/cifs.h
deleted file mode 100644
index 2f6339c04d..0000000000
--- a/usr/src/uts/common/smbsrv/cifs.h
+++ /dev/null
@@ -1,1217 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SMBSRV_CIFS_H
-#define _SMBSRV_CIFS_H
-
-
-/*
- * This file provides definitions for the CIFS interface. The Macintosh
- * Extensions for CIFS are defined in mac_cifs.h.
- */
-
-/*
- * Macintosh Extensions for CIFS
- */
-#include <smbsrv/mac_cifs.h>
-
-/*
- * NT Installable File System (IFS) interface.
- */
-#include <smbsrv/ntifs.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Share types */
-#ifndef _SHARE_TYPES_DEFINED_
-#define _SHARE_TYPES_DEFINED_
-#define STYPE_DISKTREE 0x00000000
-#define STYPE_PRINTQ 0x00000001
-#define STYPE_DEVICE 0x00000002
-#define STYPE_IPC 0x00000003
-#define STYPE_MASK 0x0000000F
-#define STYPE_DFS 0x00000064
-#define STYPE_HIDDEN 0x80000000
-#define STYPE_SPECIAL 0x80000000
-#endif /* _SHARE_TYPES_DEFINED_ */
-
-#define STYPE_ISDSK(S) (((S) & STYPE_MASK) == STYPE_DISKTREE)
-#define STYPE_ISPRN(S) (((S) & STYPE_MASK) == STYPE_PRINTQ)
-#define STYPE_ISDEV(S) (((S) & STYPE_MASK) == STYPE_DEVICE)
-#define STYPE_ISIPC(S) (((S) & STYPE_MASK) == STYPE_IPC)
-
-/*
- * NtCreateAndX and NtTransactCreate creation flags: defined in CIFS
- * section 4.2.2
- *
- * Creation Flag Name Value Description
- * ========================== ====== ==================================
- * NT_CREATE_REQUEST_OPLOCK 0x02 Level I oplock requested
- * NT_CREATE_REQUEST_OPBATCH 0x04 Batch oplock requested
- * NT_CREATE_OPEN_TARGET_DIR 0x08 Target for open is a directory
- */
-#define NT_CREATE_FLAG_REQUEST_OPLOCK 0x02
-#define NT_CREATE_FLAG_REQUEST_OPBATCH 0x04
-#define NT_CREATE_FLAG_OPEN_TARGET_DIR 0x08
-
-
-/*
- * Define the filter flags for NtNotifyChangeDirectoryFile
- */
-#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
-#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
-#define FILE_NOTIFY_CHANGE_NAME 0x00000003
-#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
-#define FILE_NOTIFY_CHANGE_SIZE 0x00000008
-#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
-#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
-#define FILE_NOTIFY_CHANGE_CREATION 0x00000040
-#define FILE_NOTIFY_CHANGE_EA 0x00000080
-#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
-#define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
-#define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
-#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
-#define FILE_NOTIFY_VALID_MASK 0x00000fff
-
-
-/*
- * Define the file action type codes for NtNotifyChangeDirectoryFile
- */
-#define FILE_ACTION_ADDED 0x00000001
-#define FILE_ACTION_REMOVED 0x00000002
-#define FILE_ACTION_MODIFIED 0x00000003
-#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
-#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
-#define FILE_ACTION_ADDED_STREAM 0x00000006
-#define FILE_ACTION_REMOVED_STREAM 0x00000007
-#define FILE_ACTION_MODIFIED_STREAM 0x00000008
-
-
-/* Lock type flags */
-#define LOCKING_ANDX_NORMAL_LOCK 0x00
-#define LOCKING_ANDX_SHARED_LOCK 0x01
-#define LOCKING_ANDX_OPLOCK_RELEASE 0x02
-#define LOCKING_ANDX_CHANGE_LOCK_TYPE 0x04
-#define LOCKING_ANDX_CANCEL_LOCK 0x08
-#define LOCKING_ANDX_LARGE_FILES 0x10
-
-#define SMB_COM_CREATE_DIRECTORY 0x00
-#define SMB_COM_DELETE_DIRECTORY 0x01
-#define SMB_COM_OPEN 0x02
-#define SMB_COM_CREATE 0x03
-#define SMB_COM_CLOSE 0x04
-#define SMB_COM_FLUSH 0x05
-#define SMB_COM_DELETE 0x06
-#define SMB_COM_RENAME 0x07
-#define SMB_COM_QUERY_INFORMATION 0x08
-#define SMB_COM_SET_INFORMATION 0x09
-#define SMB_COM_READ 0x0A
-#define SMB_COM_WRITE 0x0B
-#define SMB_COM_LOCK_BYTE_RANGE 0x0C
-#define SMB_COM_UNLOCK_BYTE_RANGE 0x0D
-#define SMB_COM_CREATE_TEMPORARY 0x0E
-#define SMB_COM_CREATE_NEW 0x0F
-#define SMB_COM_CHECK_DIRECTORY 0x10
-#define SMB_COM_PROCESS_EXIT 0x11
-#define SMB_COM_SEEK 0x12
-#define SMB_COM_LOCK_AND_READ 0x13
-#define SMB_COM_WRITE_AND_UNLOCK 0x14
-
-#define SMB_COM_READ_RAW 0x1A
-#define SMB_COM_READ_MPX 0x1B
-#define SMB_COM_READ_MPX_SECONDARY 0x1C
-#define SMB_COM_WRITE_RAW 0x1D
-#define SMB_COM_WRITE_MPX 0x1E
-#define SMB_COM_WRITE_MPX_SECONDARY 0x1F
-#define SMB_COM_WRITE_COMPLETE 0x20
-
-#define SMB_COM_SET_INFORMATION2 0x22
-#define SMB_COM_QUERY_INFORMATION2 0x23
-#define SMB_COM_LOCKING_ANDX 0x24
-#define SMB_COM_TRANSACTION 0x25
-#define SMB_COM_TRANSACTION_SECONDARY 0x26
-#define SMB_COM_IOCTL 0x27
-#define SMB_COM_IOCTL_SECONDARY 0x28
-#define SMB_COM_COPY 0x29
-#define SMB_COM_MOVE 0x2A
-#define SMB_COM_ECHO 0x2B
-#define SMB_COM_WRITE_AND_CLOSE 0x2C
-#define SMB_COM_OPEN_ANDX 0x2D
-#define SMB_COM_READ_ANDX 0x2E
-#define SMB_COM_WRITE_ANDX 0x2F
-
-#define SMB_COM_CLOSE_AND_TREE_DISC 0x31
-#define SMB_COM_TRANSACTION2 0x32
-#define SMB_COM_TRANSACTION2_SECONDARY 0x33
-#define SMB_COM_FIND_CLOSE2 0x34
-#define SMB_COM_FIND_NOTIFY_CLOSE 0x35
-
-#define SMB_COM_TREE_CONNECT 0x70
-#define SMB_COM_TREE_DISCONNECT 0x71
-#define SMB_COM_NEGOTIATE 0x72
-#define SMB_COM_SESSION_SETUP_ANDX 0x73
-#define SMB_COM_LOGOFF_ANDX 0x74
-#define SMB_COM_TREE_CONNECT_ANDX 0x75
-
-#define SMB_COM_QUERY_INFORMATION_DISK 0x80
-#define SMB_COM_SEARCH 0x81
-#define SMB_COM_FIND 0x82
-#define SMB_COM_FIND_UNIQUE 0x83
-#define SMB_COM_FIND_CLOSE 0x84
-
-#define SMB_COM_NT_TRANSACT 0xA0
-#define SMB_COM_NT_TRANSACT_SECONDARY 0xA1
-#define SMB_COM_NT_CREATE_ANDX 0xA2
-#define SMB_COM_NT_CANCEL 0xA4
-
-#define SMB_COM_OPEN_PRINT_FILE 0xC0
-#define SMB_COM_WRITE_PRINT_FILE 0xC1
-#define SMB_COM_CLOSE_PRINT_FILE 0xC2
-#define SMB_COM_GET_PRINT_QUEUE 0xC3
-
-
-/*
- * Flags field of the SMB header. The names in parenthesis represent
- * alternative names for the flags.
- *
- * SMB_FLAGS_LOCK_AND_READ_OK If the server supports LockAndRead and
- * (SMB_FLAGS_LOCKS_SUBDIALECT) WriteAndUnlock, it sets this bit in the
- * Negotiate response.
- *
- * SMB_FLAGS_SEND_NO_ACK When on, the client guarantees that there
- * (SMB_FLAGS_RCV_BUF_POSTED) is a receive buffer posted such that a
- * "Send-No-Ack" can be used by the server
- * to respond to the client's request.
- *
- * SMB_FLAGS_CASE_INSENSITIVE This is part of the Flags field of every
- * SMB header. If this bit is set, then all
- * pathnames in the SMB should be treated as
- * case-insensitive. Otherwise pathnames are
- * case-sensitive.
- *
- * SMB_FLAGS_CANONICALIZED_PATHS When on in SessionSetupX, this indicates
- * that all paths sent to the server are
- * already in OS/2 canonicalized format.
- *
- * OS/2 canonical format means that file/directory names are in upper case,
- * are valid characters, . and .. have been removed and single backslashes
- * are used as separators.
- *
- * SMB_FLAGS_OPLOCK When set in an open file request SMBs
- * (Open, Create, OpenX, etc.) this bit
- * indicates a request for an oplock on the
- * file. When set in the response, this bit
- * indicates that the oplock was granted.
- *
- * SMB_FLAGS_OPLOCK_NOTIFY_ANY When on, this bit indicates that the server
- * should notify the client on any request
- * that could cause the file to be changed.
- * If not set, the server only notifies the
- * client on other open requests on the file.
- * This bit is only relevant when
- * SMB_FLAGS_OPLOCK is set.
- *
- * SMB_FLAGS_SERVER_TO_REDIR This bit indicates that the SMB is being
- * (SMB_FLAGS_REPLY) sent from server to (client) redirector.
- */
-#define SMB_FLAGS_LOCK_AND_READ_OK 0x01
-#define SMB_FLAGS_SEND_NO_ACK 0x02
-#define SMB_FLAGS_RESERVED 0x04
-#define SMB_FLAGS_CASE_INSENSITIVE 0x08
-#define SMB_FLAGS_CANONICALIZED_PATHS 0x10
-#define SMB_FLAGS_OPLOCK 0x20
-#define SMB_FLAGS_OPLOCK_NOTIFY_ANY 0x40
-#define SMB_FLAGS_REPLY 0x80
-
-
-/*
- * Flags2 field of the SMB header.
- */
-#define SMB_FLAGS2_KNOWS_LONG_NAMES 0x0001
-#define SMB_FLAGS2_KNOWS_EAS 0x0002
-#define SMB_FLAGS2_SMB_SECURITY_SIGNATURE 0x0004
-#define SMB_FLAGS2_IS_LONG_NAME 0x0040
-#define SMB_FLAGS2_REPARSE_PATH 0x0400
-#define SMB_FLAGS2_EXT_SEC 0x0800
-#define SMB_FLAGS2_DFS 0x1000
-#define SMB_FLAGS2_PAGING_IO 0x2000
-#define SMB_FLAGS2_NT_STATUS 0x4000
-#define SMB_FLAGS2_UNICODE 0x8000
-
-#define DIALECT_UNKNOWN 0
-#define PC_NETWORK_PROGRAM_1_0 1 /* The original MSNET SMB protocol */
-#define PCLAN1_0 2 /* Some versions of the original MSNET */
-#define MICROSOFT_NETWORKS_1_03 3 /* This is used for the MS-NET 1.03 */
-#define MICROSOFT_NETWORKS_3_0 4 /* This is the DOS LANMAN 1.0 specific */
-#define LANMAN1_0 5 /* This is the first version of the full */
-#define LM1_2X002 6 /* This is the first version of the full */
-#define DOS_LM1_2X002 7 /* This is the dos equivalent of the */
-#define DOS_LANMAN2_1 8 /* DOS LANMAN2.1 */
-#define LANMAN2_1 9 /* OS/2 LANMAN2.1 */
-#define Windows_for_Workgroups_3_1a 10 /* Windows for Workgroups Version 1.0 */
-#define NT_LM_0_12 11 /* The SMB protocol designed for NT */
-
-/*
- * SMB_TREE_CONNECT_ANDX OptionalSupport flags
- *
- * SMB_SUPPORT_SEARCH_BITS The server supports SearchAttributes.
- * SMB_SHARE_IS_IN_DFS The share is managed by DFS.
- * SMB_CSC_MASK Offline-caching mask - see CSC values.
- * SMB_UNIQUE_FILE_NAME The server uses long names and does not support
- * short names. This indicates to clients that
- * they may perform directory name-space caching.
- * SMB_EXTENDED_SIGNATURES The server will use signing key protection.
- *
- * SMB_CSC_CACHE_MANUAL_REINT Clients are allowed to cache files for offline
- * use as requested by users but automatic
- * file-by-file reintegration is not allowed.
- * SMB_CSC_CACHE_AUTO_REINT Clients are allowed to automatically cache
- * files for offline use and file-by-file
- * reintegration is allowed.
- * SMB_CSC_CACHE_VDO Clients are allowed to automatically cache files
- * for offline use, file-by-file reintegration is
- * allowed and clients are permitted to work from
- * their local cache even while offline.
- * SMB_CSC_CACHE_NONE Client-side caching is disabled for this share.
- *
- * SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM
- * The server will filter directory entries based
- * on the access permissions of the client.
- */
-#define SMB_SUPPORT_SEARCH_BITS 0x0001
-#define SMB_SHARE_IS_IN_DFS 0x0002
-#define SMB_CSC_MASK 0x000C
-#define SMB_UNIQUE_FILE_NAME 0x0010
-#define SMB_EXTENDED_SIGNATURES 0x0020
-
-#define SMB_CSC_CACHE_MANUAL_REINT 0x0000
-#define SMB_CSC_CACHE_AUTO_REINT 0x0004
-#define SMB_CSC_CACHE_VDO 0x0008
-#define SMB_CSC_CACHE_NONE 0x000C
-
-#define SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM 0x0800
-
-/*
- * The subcommand codes, placed in SETUP[0], for named pipe operations are:
- * SubCommand Code Value Description
- * =================== ===== =========================================
- */
-
-#define CallNamedPipe 0x54 /* open/write/read/close pipe */
-#define WaitNamedPipe 0x53 /* wait for pipe to be nonbusy */
-#define PeekNmPipe 0x23 /* read but don't remove data */
-#define QNmPHandState 0x21 /* query pipe handle modes */
-#define SetNmPHandState 0x01 /* set pipe handle modes */
-#define QNmPipeInfo 0x22 /* query pipe attributes */
-#define TransactNmPipe 0x26 /* write/read operation on pipe */
-#define RawReadNmPipe 0x11 /* read pipe in "raw" (non message mode) */
-#define RawWriteNmPipe 0x31 /* write pipe "raw" (non message mode) */
-
-
-
-/*
- * Setup[0] Transaction2 Value Description
- * Subcommand Code
- * ========================== ===== =============================
- */
-
-#define TRANS2_OPEN2 0x00 /* Create file, extended attributes */
-#define TRANS2_FIND_FIRST2 0x01 /* Begin search for files */
-#define TRANS2_FIND_NEXT2 0x02 /* Resume search for files */
-#define TRANS2_QUERY_FS_INFORMATION 0x03 /* Get file system information */
-#define _TRANS2_RESV_0x04 0x04 /* Reserved */
-#define TRANS2_QUERY_PATH_INFORMATION 0x05 /* Get info, named file or dir */
-#define TRANS2_SET_PATH_INFORMATION 0x06 /* Set info, named file or dir */
-#define TRANS2_QUERY_FILE_INFORMATION 0x07 /* Get info, handle */
-#define TRANS2_SET_FILE_INFORMATION 0x08 /* Set info, handle */
-#define TRANS2_FSCTL 0x09 /* Not implemented by NT server */
-#define TRANS2_IOCTL2 0x0A /* Not implemented by NT server */
-#define TRANS2_FIND_NOTIFY_FIRST 0x0B /* Not implemented by NT server */
-#define TRANS2_FIND_NOTIFY_NEXT 0x0C /* Not implemented by NT server */
-#define TRANS2_CREATE_DIRECTORY 0x0D /* Create dir, extended attributes */
-#define TRANS2_SESSION_SETUP 0x0E /* Session setup, extended security */
-#define TRANS2_GET_DFS_REFERRAL 0x10 /* Get a Dfs referral */
-#define TRANS2_REPORT_DFS_INCONSISTENCY 0x11 /* Report a Dfs inconsistency */
-
-/*
- * Access Mode Encoding (CIFS/1.0 1996 Section 3.8).
- *
- * The desired access mode passed in SmbOpen and SmbOpenAndX has the following
- * mapping:
- *
- * 1111 11
- * 5432 1098 7654 3210
- * rWrC rLLL rSSS rAAA
- *
- * where:
- *
- * W - Write through mode. No read ahead or write behind allowed on
- * this file or device. When protocol is returned, data is expected
- * to be on the disk or device.
- *
- * S - Sharing mode:
- * 0 - Compatibility mode (as in core open)
- * 1 - Deny read/write/execute (exclusive)
- * 2 - Deny write
- * 3 - Deny read/execute
- * 4 - Deny none
- *
- * A - Access mode
- * 0 - Open for reading
- * 1 - Open for writing
- * 2 - Open for reading and writing
- * 3 - Open for execute
- *
- * rSSSrAAA = 11111111 (hex FF) indicates FCB open (as in core protocol)
- *
- * C - Cache mode
- * 0 - Normal file
- * 1 - Do not cache this file
- *
- * L - Locality of reference
- * 0 - Locality of reference is unknown
- * 1 - Mainly sequential access
- * 2 - Mainly random access
- * 3 - Random access with some locality
- * 4 to 7 - Currently undefined
- */
-
-
-#define SMB_DA_SHARE_MASK 0x70
-#define SMB_DA_ACCESS_MASK 0x07
-#define SMB_DA_FCB_MASK (UCHAR)0xFF
-
-#define SMB_DA_ACCESS_READ 0x00
-#define SMB_DA_ACCESS_WRITE 0x01
-#define SMB_DA_ACCESS_READ_WRITE 0x02
-#define SMB_DA_ACCESS_EXECUTE 0x03
-
-#define SMB_DA_SHARE_COMPATIBILITY 0x00
-#define SMB_DA_SHARE_EXCLUSIVE 0x10
-#define SMB_DA_SHARE_DENY_WRITE 0x20
-#define SMB_DA_SHARE_DENY_READ 0x30
-#define SMB_DA_SHARE_DENY_NONE 0x40
-
-#define SMB_DA_FCB (UCHAR)0xFF
-
-#define SMB_CACHE_NORMAL 0x0000
-#define SMB_DO_NOT_CACHE 0x1000
-
-#define SMB_LR_UNKNOWN 0x0000
-#define SMB_LR_SEQUENTIAL 0x0100
-#define SMB_LR_RANDOM 0x0200
-#define SMB_LR_RANDOM_WITH_LOCALITY 0x0300
-#define SMB_LR_MASK 0x0F00
-
-#define SMB_DA_WRITE_THROUGH 0x4000
-
-/*
- * Macros used for share reservation rule checking
- */
-
-#define SMB_DENY_READ(share_access) ((share_access & FILE_SHARE_READ) == 0)
-
-#define SMB_DENY_WRITE(share_access) ((share_access & FILE_SHARE_WRITE) == 0)
-
-#define SMB_DENY_DELETE(share_access) ((share_access & FILE_SHARE_DELETE) == 0)
-
-#define SMB_DENY_RW(share_access) \
- ((share_access & (FILE_SHARE_READ | FILE_SHARE_WRITE)) == 0)
-
-#define SMB_DENY_ALL(share_access) (share_access == 0)
-
-#define SMB_DENY_NONE(share_access) (share_access == FILE_SHARE_ALL)
-
-/*
- * The SMB open function determines what action should be taken depending
- * on the existence or lack thereof of files used in the operation. It
- * has the following mapping:
- *
- * 1111 1
- * 5432 1098 7654 3210
- * rrrr rrrr rrrC rrOO
- *
- * where:
- *
- * O - Open (action to be taken if the target file exists)
- * 0 - Fail
- * 1 - Open or Append file
- * 2 - Truncate file
- *
- * C - Create (action to be taken if the target file does not exist)
- * 0 - Fail
- * 1 - Create file
- */
-
-#define SMB_OFUN_OPEN_MASK 0x3
-#define SMB_OFUN_CREATE_MASK 0x10
-
-#define SMB_OFUN_OPEN_FAIL 0
-#define SMB_OFUN_OPEN_APPEND 1
-#define SMB_OFUN_OPEN_OPEN 1
-#define SMB_OFUN_OPEN_TRUNCATE 2
-
-#define SMB_OFUN_CREATE_FAIL 0x00
-#define SMB_OFUN_CREATE_CREATE 0x10
-
-/*
- * The Action field of OpenAndX has the following format:
- *
- * 1111 11
- * 5432 1098 7654 3210
- * Lrrr rrrr rrrr rrOO
- *
- * where:
- *
- * L - Opportunistic lock. 1 if lock granted, else 0.
- *
- * O - Open action:
- * 1 - The file existed and was opened
- * 2 - The file did not exist but was created
- * 3 - The file existed and was truncated
- */
-
-#define SMB_OACT_LOCK 0x8000
-#define SMB_OACT_OPENED 0x01
-#define SMB_OACT_CREATED 0x02
-#define SMB_OACT_TRUNCATED 0x03
-
-#define SMB_OACT_OPLOCK 0x8000
-
-#define SMB_FTYPE_DISK 0
-#define SMB_FTYPE_BYTE_PIPE 1
-#define SMB_FTYPE_MESG_PIPE 2
-#define SMB_FTYPE_PRINTER 3
-#define SMB_FTYPE_UNKNOWN 0xFFFF
-
-#define SMB_DEVST_BLOCKING 0x8000
-#define SMB_DEVST_ENDPOINT 0x4000
-#define SMB_DEVST_TYPE_MASK 0x0C00
-#define SMB_DEVST_TYPE_BYTE_PIPE 0x0000
-#define SMB_DEVST_TYPE_MESG_PIPE 0x0400
-#define SMB_DEVST_RMODE_MASK 0x0300
-#define SMB_DEVST_RMODE_BYTES 0x0000
-#define SMB_DEVST_RMODE_MESGS 0x0100
-#define SMB_DEVST_ICOUNT_MASK 0x00FF /* not used */
-
-#define SMB_FTYPE_IS_DISK(F) ((F) == SMB_FTYPE_DISK)
-#define SMB_FTYPE_IS_PIPE(F) \
- (((F) == SMB_FTYPE_BYTE_PIPE) || ((F) == SMB_FTYPE_MESG_PIPE))
-#define SMB_FTYPE_IS_PRINTER(F) ((F) == SMB_FTYPE_PRINTER)
-
-/*
- * TRANS2_FIND
- */
-#define SMB_FIND_FILE_DIRECTORY_INFO 0x101
-#define SMB_FIND_FILE_FULL_DIRECTORY_INFO 0x102
-#define SMB_FIND_FILE_NAMES_INFO 0x103
-#define SMB_FIND_FILE_BOTH_DIRECTORY_INFO 0x104
-#define SMB_FIND_FILE_ID_FULL_DIRECTORY_INFO 0x105
-#define SMB_FIND_FILE_ID_BOTH_DIRECTORY_INFO 0x106
-#define SMB_MAC_FIND_BOTH_HFS_INFO MAC_FIND_BOTH_HFS_INFO
-
-
-/*
- * Flags for TRANS2_FIND_FIRST2 and TRANS2_FIND_NEXT2
- * (NTDDK cifs.h).
- *
- * If SMB_FIND_RETURN_RESUME_KEYS was set in the request parameters,
- * each entry is preceded by a four-byte resume key.
- */
-#define SMB_FIND_CLOSE_AFTER_REQUEST 0x01
-#define SMB_FIND_CLOSE_AT_EOS 0x02
-#define SMB_FIND_RETURN_RESUME_KEYS 0x04
-#define SMB_FIND_CONTINUE_FROM_LAST 0x08
-#define SMB_FIND_WITH_BACKUP_INTENT 0x10
-
-
-/*
- * TRANS2_QUERY_FS_INFORMATION
- */
-#define SMB_INFO_ALLOCATION 1
-#define SMB_INFO_VOLUME 2
-#define SMB_QUERY_FS_LABEL_INFO 0x101
-#define SMB_QUERY_FS_VOLUME_INFO 0x102
-#define SMB_QUERY_FS_SIZE_INFO 0x103
-#define SMB_QUERY_FS_DEVICE_INFO 0x104
-#define SMB_QUERY_FS_ATTRIBUTE_INFO 0x105
-#define SMB_QUERY_FS_QUOTA_INFO 0x106 /* unused? */
-#define SMB_QUERY_FS_CONTROL_INFO 0x107
-#define SMB_MAC_QUERY_FS_INFO MAC_QUERY_FS_INFO
-
-
-/*
- * Internal use only.
- * Define information levels to represent the following requests:
- * smb_query_information
- * smb_query_information2
- * smb_set_information
- * smb_set_information2
- */
-#define SMB_QUERY_INFORMATION 0x3001
-#define SMB_QUERY_INFORMATION2 0x3002
-#define SMB_SET_INFORMATION 0x3001
-#define SMB_SET_INFORMATION2 0x3002
-
-/* TRANS2_QUERY_{PATH,FILE}_INFORMATION */
-#define SMB_INFO_STANDARD 1 /* query, set */
-#define SMB_INFO_QUERY_EA_SIZE 2 /* query */
-#define SMB_INFO_SET_EAS 2 /* set */
-#define SMB_INFO_QUERY_EAS_FROM_LIST 3 /* query */
-#define SMB_INFO_QUERY_ALL_EAS 4 /* query */
-#define SMB_INFO_QUERY_FULL_NAME 5 /* unused */
-#define SMB_INFO_IS_NAME_VALID 6 /* query */
-
-#define SMB_QUERY_FILE_BASIC_INFO 0x101
-#define SMB_QUERY_FILE_STANDARD_INFO 0x102
-#define SMB_QUERY_FILE_EA_INFO 0x103
-#define SMB_QUERY_FILE_NAME_INFO 0x104
-#define SMB_QUERY_FILE_ALLOCATION_INFO 0x105 /* unused */
-#define SMB_QUERY_FILE_END_OF_FILE_INFO 0x106 /* unused */
-#define SMB_QUERY_FILE_ALL_INFO 0x107
-#define SMB_QUERY_FILE_ALT_NAME_INFO 0x108
-#define SMB_QUERY_FILE_STREAM_INFO 0x109
-#define SMB_QUERY_FILE_COMPRESSION_INFO 0x10B
-
-#define SMB_MAC_SET_FINDER_INFO MAC_SET_FINDER_INFO
-#define SMB_MAC_DT_ADD_APPL MAC_DT_ADD_APPL
-#define SMB_MAC_DT_REMOVE_APPL MAC_DT_REMOVE_APPL
-#define SMB_MAC_DT_GET_APPL MAC_DT_GET_APPL
-#define SMB_MAC_DT_GET_ICON MAC_DT_GET_ICON
-#define SMB_MAC_DT_GET_ICON_INFO MAC_DT_GET_ICON_INFO
-#define SMB_MAC_DT_ADD_ICON MAC_DT_ADD_ICON
-
-#define SMB_SET_FILE_BASIC_INFO 0x101
-#define SMB_SET_FILE_DISPOSITION_INFO 0x102
-#define SMB_SET_FILE_ALLOCATION_INFO 0x103
-#define SMB_SET_FILE_END_OF_FILE_INFO 0x104
-
-
-/* NT passthrough levels - see ntifs.h FILE_INFORMATION_CLASS */
-#define SMB_FILE_BASIC_INFORMATION 1004
-#define SMB_FILE_STANDARD_INFORMATION 1005
-#define SMB_FILE_INTERNAL_INFORMATION 1006
-#define SMB_FILE_EA_INFORMATION 1007
-#define SMB_FILE_ACCESS_INFORMATION 1008
-#define SMB_FILE_NAME_INFORMATION 1009
-#define SMB_FILE_DISPOSITION_INFORMATION 1013
-#define SMB_FILE_ALL_INFORMATION 1018
-#define SMB_FILE_ALLOCATION_INFORMATION 1019
-#define SMB_FILE_END_OF_FILE_INFORMATION 1020
-#define SMB_FILE_ALT_NAME_INFORMATION 1021
-#define SMB_FILE_STREAM_INFORMATION 1022
-#define SMB_FILE_COMPRESSION_INFORMATION 1028
-#define SMB_FILE_ATTR_TAG_INFORMATION 1035
-
-/*
- * The following bits may be set in the SecurityMode field of the
- * SMB_COM_NEGOTIATE response.
- *
- * Notes:
- * NEGOTIATE_SECURITY_SHARE_LEVEL is a montana2 invention.
- *
- * The NTDDK cifs.h definitions are:
- * #define NEGOTIATE_USER_SECURITY 0x01
- * #define NEGOTIATE_ENCRYPT_PASSWORDS 0x02
- * #define NEGOTIATE_SECURITY_SIGNATURES_ENABLED 0x04
- * #define NEGOTIATE_SECURITY_SIGNATURES_REQUIRED 0x08
- */
-#define NEGOTIATE_SECURITY_SHARE_LEVEL 0x00
-#define NEGOTIATE_SECURITY_USER_LEVEL 0x01
-#define NEGOTIATE_SECURITY_CHALLENGE_RESPONSE 0x02
-#define NEGOTIATE_SECURITY_SIGNATURES_ENABLED 0x04
-#define NEGOTIATE_SECURITY_SIGNATURES_REQUIRED 0x08
-
-
-/*
- * Negotiated Capabilities (CIFS/1.0 section 4.1.1)
- *
- * Capabilities allow the server to tell the client what it supports.
- * Undefined bits MUST be set to zero by servers, and MUST be ignored
- * by clients. The bit definitions are:
- *
- * Capability Name Encoding Meaning
- * ==================== ======== ==================================
- * CAP_RAW_MODE 0x0001 The server supports SMB_COM_READ_RAW and
- * SMB_COM_WRITE_RAW (obsolescent)
- * CAP_MPX_MODE 0x0002 The server supports SMB_COM_READ_MPX and
- * SMB_COM_WRITE_MPX (obsolescent)
- * CAP_UNICODE 0x0004 The server supports Unicode strings
- * CAP_LARGE_FILES 0x0008 The server supports large files with 64
- * bit offsets
- * CAP_NT_SMBS 0x0010 The server supports the SMBs particular
- * to the NT LM 0.12 dialect.
- * Implies CAP_NT_FIND.
- * CAP_RPC_REMOTE_APIS 0x0020 The server supports remote admin API
- * requests via DCE RPC
- * CAP_STATUS32 0x0040 The server can respond with 32 bit
- * status codes in Status.Status
- * CAP_LEVEL_II_OPLOCKS 0x0080 The server supports level 2 oplocks
- * CAP_LOCK_AND_READ 0x0100 The server supports the
- * SMB_COM_LOCK_AND_READ SMB
- * CAP_NT_FIND 0x0200
- * CAP_BULK_TRANSFER 0x0400
- * CAP_COMPRESSED_BULK 0x0800
- * CAP_DFS 0x1000 The server is DFS aware
- * CAP_LARGE_READX 0x4000 The server supports large
- * SMB_COM_READ_ANDX
- * CAP_LARGE_WRITEX 0x8000 The server supports large
- * SMB_COM_WRITE_ANDX
- * CAP_RESERVED 0x02000000 Reserved for future use.
- * CAP_EXTENDED_SECURITY 0x80000000 The server supports extended security
- * exchanges.
- *
- * Extended security exchanges provides a means of supporting arbitrary
- * authentication protocols within CIFS. Security blobs are opaque to the
- * CIFS protocol; they are messages in some authentication protocol that
- * has been agreed upon by client and server by some out of band mechanism,
- * for which CIFS merely functions as a transport. When
- * CAP_EXTENDED_SECURITY is negotiated, the server includes a first
- * security blob in its response; subsequent security blobs are exchanged
- * in SMB_COM_SESSION_SETUP_ANDX requests and responses until the
- * authentication protocol terminates.
- */
-#define CAP_RAW_MODE 0x0001
-#define CAP_MPX_MODE 0x0002
-#define CAP_UNICODE 0x0004
-#define CAP_LARGE_FILES 0x0008
-#define CAP_NT_SMBS 0x0010
-#define CAP_RPC_REMOTE_APIS 0x0020
-#define CAP_STATUS32 0x0040
-#define CAP_LEVEL_II_OPLOCKS 0x0080
-#define CAP_LOCK_AND_READ 0x0100
-#define CAP_NT_FIND 0x0200
-#define CAP_BULK_TRANSFER 0x0400
-#define CAP_COMPRESSED_BULK 0x0800
-#define CAP_DFS 0x1000
-#define CAP_LARGE_READX 0x4000
-#define CAP_LARGE_WRITEX 0x8000
-#define CAP_RESERVED 0x02000000
-#define CAP_EXTENDED_SECURITY 0x80000000
-
-
-/*
- * Different device types according to NT
- */
-#define FILE_DEVICE_BEEP 0x00000001
-#define FILE_DEVICE_CD_ROM 0x00000002
-#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
-#define FILE_DEVICE_CONTROLLER 0x00000004
-#define FILE_DEVICE_DATALINK 0x00000005
-#define FILE_DEVICE_DFS 0x00000006
-#define FILE_DEVICE_DISK 0x00000007
-#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
-#define FILE_DEVICE_FILE_SYSTEM 0x00000009
-#define FILE_DEVICE_INPORT_PORT 0x0000000a
-#define FILE_DEVICE_KEYBOARD 0x0000000b
-#define FILE_DEVICE_MAILSLOT 0x0000000c
-#define FILE_DEVICE_MIDI_IN 0x0000000d
-#define FILE_DEVICE_MIDI_OUT 0x0000000e
-#define FILE_DEVICE_MOUSE 0x0000000f
-#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
-#define FILE_DEVICE_NAMED_PIPE 0x00000011
-#define FILE_DEVICE_NETWORK 0x00000012
-#define FILE_DEVICE_NETWORK_BROWSER 0x00000013
-#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
-#define FILE_DEVICE_NULL 0x00000015
-#define FILE_DEVICE_PARALLEL_PORT 0x00000016
-#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
-#define FILE_DEVICE_PRINTER 0x00000018
-#define FILE_DEVICE_SCANNER 0x00000019
-#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
-#define FILE_DEVICE_SERIAL_PORT 0x0000001b
-#define FILE_DEVICE_SCREEN 0x0000001c
-#define FILE_DEVICE_SOUND 0x0000001d
-#define FILE_DEVICE_STREAMS 0x0000001e
-#define FILE_DEVICE_TAPE 0x0000001f
-#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
-#define FILE_DEVICE_TRANSPORT 0x00000021
-#define FILE_DEVICE_UNKNOWN 0x00000022
-#define FILE_DEVICE_VIDEO 0x00000023
-#define FILE_DEVICE_VIRTUAL_DISK 0x00000024
-#define FILE_DEVICE_WAVE_IN 0x00000025
-#define FILE_DEVICE_WAVE_OUT 0x00000026
-#define FILE_DEVICE_8042_PORT 0x00000027
-#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
-#define FILE_DEVICE_BATTERY 0x00000029
-#define FILE_DEVICE_BUS_EXTENDER 0x0000002a
-#define FILE_DEVICE_MODEM 0x0000002b
-#define FILE_DEVICE_VDM 0x0000002c
-
-/*
- * Some of these device types are not currently accessible over the network
- * and may never be accessible over the network. Some may change to be
- *
- * accessible over the network. The values for device types that may never
- * be accessible over the network may be redefined to be just reserved at
- * some date in the future.
- *
- * Characteristics is the sum of any of the following:
- */
-
-#define FILE_REMOVABLE_MEDIA 0x00000001
-#define FILE_READ_ONLY_DEVICE 0x00000002
-#define FILE_FLOPPY_DISKETTE 0x00000004
-#define FILE_WRITE_ONE_MEDIA 0x00000008
-#define FILE_REMOTE_DEVICE 0x00000010
-#define FILE_DEVICE_IS_MOUNTED 0x00000020
-#define FILE_VIRTUAL_VOLUME 0x00000040
-
-/*
- * CREATE_ANDX ShareAccess Flags
- */
-
-#define FILE_SHARE_NONE 0x00000000
-#define FILE_SHARE_READ 0x00000001
-#define FILE_SHARE_WRITE 0x00000002
-#define FILE_SHARE_DELETE 0x00000004
-#define FILE_SHARE_ALL 0x00000007
-#define FILE_SHARE_VALID_FLAGS 0x00000007
-
-
-/*
- * CREATE_ANDX CreateDisposition flags
- *
- * FILE_SUPERSEDE If the file already exists it should be superseded
- * by the specified file. If the file does not already
- * exist then it should be created.
- *
- * FILE_CREATE If the file already exists the operation should fail.
- * If the file does not already exist then it should be
- * created. (aka CREATE_NEW)
- *
- * FILE_OPEN If the file already exists then it should be opened.
- * If the file does not already exist then the operation
- * should fail. (aka OPEN_EXISTING)
- *
- * FILE_OPEN_IF If the file already exists then it should be opened.
- * If the file does not already exist then it should be
- * created. (aka OPEN_ALWAYS)
- *
- * FILE_OVERWRITE If the file already exists, it should be opened and
- * overwritten. If the file does not already exist then
- * the operation should fail. (aka TRUNCATE_EXISTING)
- *
- * FILE_OVERWRITE_IF If the file already exists, it should be opened and
- * overwritten. If the file does not already exist then
- * it should be created. (aka CREATE_ALWAYS)
- */
-#define FILE_SUPERSEDE 0x00000000
-#define FILE_OPEN 0x00000001
-#define FILE_CREATE 0x00000002
-#define FILE_OPEN_IF 0x00000003
-#define FILE_OVERWRITE 0x00000004
-#define FILE_OVERWRITE_IF 0x00000005
-#define FILE_MAXIMUM_DISPOSITION 0x00000005
-
-/*
- * CREATE_ANDX Impersonation levels
- */
-
-#define SECURITY_ANONYMOUS 0x00000001
-#define SECURITY_IDENTIFICATION 0x00000002
-#define SECURITY_IMPERSONATION 0x00000003
-#define SECURITY_DELEGATION 0x00000004
-
-/*
- * CREATE_ANDX SecurityFlags
- */
-
-#define SECURITY_CONTEXT_TRACKING 0x00000001
-#define SECURITY_EFFECTIVE_ONLY 0x00000002
-
-/*
- * Server types
- */
-#define SV_WORKSTATION 0x00000001 /* All workstations */
-#define SV_SERVER 0x00000002 /* All servers */
-#define SV_SQLSERVER 0x00000004 /* running with SQL server */
-#define SV_DOMAIN_CTRL 0x00000008 /* Primary domain controller */
-#define SV_DOMAIN_BAKCTRL 0x00000010 /* Backup domain controller */
-#define SV_TIME_SOURCE 0x00000020 /* running timesource service */
-#define SV_AFP 0x00000040 /* Apple File Protocol */
-#define SV_NOVELL 0x00000080 /* Novell servers */
-#define SV_DOMAIN_MEMBER 0x00000100 /* Domain Member */
-#define SV_PRINTQ_SERVER 0x00000200 /* Server sharing print queue */
-#define SV_DIALIN_SERVER 0x00000400 /* Server running dialin */
-#define SV_XENIX_SERVER 0x00000800 /* Xenix server */
-#define SV_NT 0x00001000 /* NT server */
-#define SV_WFW 0x00002000 /* Server running Windows for */
-#define SV_SERVER_NT 0x00008000 /* Windows NT non DC server */
-#define SV_POTENTIAL_BROWSER 0x00010000 /* can run browser service */
-#define SV_BACKUP_BROWSER 0x00020000 /* Backup browser server */
-#define SV_MASTER_BROWSER 0x00040000 /* Master browser server */
-#define SV_DOMAIN_MASTER 0x00080000 /* Domain Master Browser */
-#define SV_OSF 0x00100000 /* OSF operating system */
-#define SV_VMS 0x00200000 /* VMS operating system */
-#define SV_WINDOWS_95_PLUS 0x00400000 /* Windows 95 or better */
-
-#define SV_LOCAL_LIST_ONLY 0x40000000 /* Enumerate only "local" */
-#define SV_TYPE_DOMAIN_ENUM 0x80000000 /* Enumerate Domains */
-
-#define MY_SERVER_TYPE (SV_SERVER | SV_NT | SV_SERVER_NT)
-
-
-#define PRQ_ACTIVE 0 /* Active */
-#define PRQ_PAUSE 1 /* Paused */
-#define PRQ_ERROR 2 /* Error Occurred */
-#define PRQ_PENDING 3 /* Deletion pending */
-
-#define PRJ_QS_QUEUED 0 /* Active */
-#define PRJ_QS_PAUSED 1 /* Paused */
-#define PRJ_QS_SPOOLING 2 /* Paused */
-#define PRJ_QS_PRINTING 3 /* Paused */
-
-
-#define SHARE_ACCESS_READ 0x01 /* read & execute from resource */
-#define SHARE_ACCESS_WRITE 0x02 /* write data to resource */
-#define SHARE_ACCESS_CREATE 0x04 /* create an instance of */
-#define SHARE_ACCESS_EXEC 0x08 /* execute from resource */
-#define SHARE_ACCESS_DELETE 0x10 /* Permission to delete the resource */
-#define SHARE_ACCESS_ATTRIB 0x20 /* Permission to modify the resource */
-#define SHARE_ACCESS_PERM 0x40 /* Permission to change permissions */
-#define SHARE_ACCESS_ALL 0x7F /* All of the above permissions */
-
-
-/*
- * SMB_COM_NT_TRANSACTION sub-command codes (CIFS/1.0 section 5.3)
- *
- * SubCommand Code Value Description
- * =============================== ===== =================================
- * NT_TRANSACT_CREATE 1 File open/create
- * NT_TRANSACT_IOCTL 2 Device IOCTL
- * NT_TRANSACT_SET_SECURITY_DESC 3 Set security descriptor
- * NT_TRANSACT_NOTIFY_CHANGE 4 Start directory watch
- * NT_TRANSACT_RENAME 5 Reserved (handle-based rename)
- * NT_TRANSACT_QUERY_SECURITY_DESC 6 Retrieve security descriptor
- * NT_TRANSACT_QUERY_QUOTA 7 Retrieve quota information
- * NT_TRANSACT_SET_QUOTA 8 Set quota information
- */
-#define NT_TRANSACT_MIN_FUNCTION 1
-
-#define NT_TRANSACT_CREATE 1
-#define NT_TRANSACT_IOCTL 2
-#define NT_TRANSACT_SET_SECURITY_DESC 3
-#define NT_TRANSACT_NOTIFY_CHANGE 4
-#define NT_TRANSACT_RENAME 5
-#define NT_TRANSACT_QUERY_SECURITY_DESC 6
-#define NT_TRANSACT_QUERY_QUOTA 7
-#define NT_TRANSACT_SET_QUOTA 8
-
-#define NT_TRANSACT_MAX_FUNCTION 8
-
-
-/*
- * Pipe states
- */
-#define SMB_PIPE_READMODE_BYTE 0x0000
-#define SMB_PIPE_READMODE_MESSAGE 0x0100
-#define SMB_PIPE_TYPE_BYTE 0x0000
-#define SMB_PIPE_TYPE_MESSAGE 0x0400
-#define SMB_PIPE_END_CLIENT 0x0000
-#define SMB_PIPE_END_SERVER 0x4000
-#define SMB_PIPE_WAIT 0x0000
-#define SMB_PIPE_NOWAIT 0x8000
-#define SMB_PIPE_UNLIMITED_INSTANCES 0x00FF
-
-/*
- * smb_com_seek request
- */
-#define SMB_SEEK_SET 0 /* set file offset to specified offset */
-#define SMB_SEEK_CUR 1 /* set file offset to current plus specified offset */
-#define SMB_SEEK_END 2 /* set file offset to EOF plus specified offset */
-
-/*
- * API Numbers for Transact based RAP (Remote Administration Protocol) calls
- */
-#define API_WshareEnum 0
-#define API_WshareGetInfo 1
-#define API_WshareSetInfo 2
-#define API_WshareAdd 3
-#define API_WshareDel 4
-#define API_NetShareCheck 5
-#define API_WsessionEnum 6
-#define API_WsessionGetInfo 7
-#define API_WsessionDel 8
-#define API_WconnectionEnum 9
-#define API_WfileEnum 10
-#define API_WfileGetInfo 11
-#define API_WfileClose 12
-#define API_WserverGetInfo 13
-#define API_WserverSetInfo 14
-#define API_WserverDiskEnum 15
-#define API_WserverAdminCommand 16
-#define API_NetAuditOpen 17
-#define API_WauditClear 18
-#define API_NetErrorLogOpen 19
-#define API_WerrorLogClear 20
-#define API_NetCharDevEnum 21
-#define API_NetCharDevGetInfo 22
-#define API_WCharDevControl 23
-#define API_NetCharDevQEnum 24
-#define API_NetCharDevQGetInfo 25
-#define API_WCharDevQSetInfo 26
-#define API_WCharDevQPurge 27
-#define API_WCharDevQPurgeSelf 28
-#define API_WMessageNameEnum 29
-#define API_WMessageNameGetInfo 30
-#define API_WMessageNameAdd 31
-#define API_WMessageNameDel 32
-#define API_WMessageNameFwd 33
-#define API_WMessageNameUnFwd 34
-#define API_WMessageBufferSend 35
-#define API_WMessageFileSend 36
-#define API_WMessageLogFileSet 37
-#define API_WMessageLogFileGet 38
-#define API_WServiceEnum 39
-#define API_WServiceInstall 40
-#define API_WServiceControl 41
-#define API_WAccessEnum 42
-#define API_WAccessGetInfo 43
-#define API_WAccessSetInfo 44
-#define API_WAccessAdd 45
-#define API_WAccessDel 46
-#define API_WGroupEnum 47
-#define API_WGroupAdd 48
-#define API_WGroupDel 49
-#define API_WGroupAddUser 50
-#define API_WGroupDelUser 51
-#define API_WGroupGetUsers 52
-#define API_WUserEnum 53
-#define API_WUserAdd 54
-#define API_WUserDel 55
-#define API_WUserGetInfo 56
-#define API_WUserSetInfo 57
-#define API_WUserPasswordSet 58
-#define API_WUserGetGroups 59
-#define API_DeadTableEntry 60
-#define API_WWkstaSetUID 62
-#define API_WWkstaGetInfo 63
-#define API_WWkstaSetInfo 64
-#define API_WUseEnum 65
-#define API_WUseAdd 66
-#define API_WUseDel 67
-#define API_WUseGetInfo 68
-#define API_WPrintQEnum 69
-#define API_WPrintQGetInfo 70
-#define API_WPrintQSetInfo 71
-#define API_WPrintQAdd 72
-#define API_WPrintQDel 73
-#define API_WPrintQPause 74
-#define API_WPrintQContinue 75
-#define API_WPrintJobEnum 76
-#define API_WPrintJobGetInfo 77
-#define API_WPrintJobSetInfo_OLD 78
-#define API_WPrintJobDel 81
-#define API_WPrintJobPause 82
-#define API_WPrintJobContinue 83
-#define API_WPrintDestEnum 84
-#define API_WPrintDestGetInfo 85
-#define API_WPrintDestControl 86
-#define API_WProfileSave 87
-#define API_WProfileLoad 88
-#define API_WStatisticsGet 89
-#define API_WStatisticsClear 90
-#define API_NetRemoteTOD 91
-#define API_WNetBiosEnum 92
-#define API_WNetBiosGetInfo 93
-#define API_NetServerEnum 94
-#define API_I_NetServerEnum 95
-#define API_WServiceGetInfo 96
-#define API_WPrintQPurge 103
-#define API_NetServerEnum2 104
-#define API_WAccessGetUserPerms 105
-#define API_WGroupGetInfo 106
-#define API_WGroupSetInfo 107
-#define API_WGroupSetUsers 108
-#define API_WUserSetGroups 109
-#define API_WUserModalsGet 110
-#define API_WUserModalsSet 111
-#define API_WFileEnum2 112
-#define API_WUserAdd2 113
-#define API_WUserSetInfo2 114
-#define API_WUserPasswordSet2 115
-#define API_I_NetServerEnum2 116
-#define API_WConfigGet2 117
-#define API_WConfigGetAll2 118
-#define API_WGetDCName 119
-#define API_NetHandleGetInfo 120
-#define API_NetHandleSetInfo 121
-#define API_WStatisticsGet2 122
-#define API_WBuildGetInfo 123
-#define API_WFileGetInfo2 124
-#define API_WFileClose2 125
-#define API_WNetServerReqChallenge 126
-#define API_WNetServerAuthenticate 127
-#define API_WNetServerPasswordSet 128
-#define API_WNetAccountDeltas 129
-#define API_WNetAccountSync 130
-#define API_WUserEnum2 131
-#define API_WWkstaUserLogon 132
-#define API_WWkstaUserLogoff 133
-#define API_WLogonEnum 134
-#define API_WErrorLogRead 135
-#define API_WI_NetPathType 136
-#define API_WI_NetPathCanonicalize 137
-#define API_WI_NetPathCompare 138
-#define API_WI_NetNameValidate 139
-#define API_WI_NetNameCanonicalize 140
-#define API_WI_NetNameCompare 141
-#define API_WAuditRead 142
-#define API_WPrintDestAdd 143
-#define API_WPrintDestSetInfo 144
-#define API_WPrintDestDel 145
-#define API_WUserValidate2 146
-#define API_WPrintJobSetInfo 147
-#define API_TI_NetServerDiskEnum 148
-#define API_TI_NetServerDiskGetInfo 149
-#define API_TI_FTVerifyMirror 150
-#define API_TI_FTAbortVerify 151
-#define API_TI_FTGetInfo 152
-#define API_TI_FTSetInfo 153
-#define API_TI_FTLockDisk 154
-#define API_TI_FTFixError 155
-#define API_TI_FTAbortFix 156
-#define API_TI_FTDiagnoseError 157
-#define API_TI_FTGetDriveStats 158
-#define API_TI_FTErrorGetInfo 160
-#define API_NetAccessCheck 163
-#define API_NetAlertRaise 164
-#define API_NetAlertStart 165
-#define API_NetAlertStop 166
-#define API_NetAuditWrite 167
-#define API_NetIRemoteAPI 168
-#define API_NetServiceStatus 169
-#define API_I_NetServerRegister 170
-#define API_I_NetServerDeregister 171
-#define API_I_NetSessionEntryMake 172
-#define API_I_NetSessionEntryClear 173
-#define API_I_NetSessionEntryGetInfo 174
-#define API_I_NetSessionEntrySetInfo 175
-#define API_I_NetConnectionEntryMake 176
-#define API_I_NetConnectionEntryClear 177
-#define API_I_NetConnectionEntrySetInfo 178
-#define API_I_NetConnectionEntryGetInfo 179
-#define API_I_NetFileEntryMake 180
-#define API_I_NetFileEntryClear 181
-#define API_I_NetFileEntrySetInfo 182
-#define API_I_NetFileEntryGetInfo 183
-#define API_AltSrvMessageBufferSend 184
-#define API_AltSrvMessageFileSend 185
-#define API_wI_NetRplWkstaEnum 186
-#define API_wI_NetRplWkstaGetInfo 187
-#define API_wI_NetRplWkstaSetInfo 188
-#define API_wI_NetRplWkstaAdd 189
-#define API_wI_NetRplWkstaDel 190
-#define API_wI_NetRplProfileEnum 191
-#define API_wI_NetRplProfileGetInfo 192
-#define API_wI_NetRplProfileSetInfo 193
-#define API_wI_NetRplProfileAdd 194
-#define API_wI_NetRplProfileDel 195
-#define API_wI_NetRplProfileClone 196
-#define API_wI_NetRplBaseProfileEnum 197
-#define API_WIServerSetInfo 201
-#define API_WPrintDriverEnum 205
-#define API_WPrintQProcessorEnum 206
-#define API_WPrintPortEnum 207
-#define API_WNetWriteUpdateLog 208
-#define API_WNetAccountUpdate 209
-#define API_WNetAccountConfirmUpdate 210
-#define API_WConfigSet 211
-#define API_WAccountsReplicate 212
-#define API_SamOEMChgPasswordUser2_P 214
-#define API_NetServerEnum3 215
-#define API_WprintDriverGetInfo 250
-#define API_WprintDriverSetInfo 251
-#define API_WaliasAdd 252
-#define API_WaliasDel 253
-#define API_WaliasGetInfo 254
-#define API_WaliasSetInfo 255
-#define API_WaliasEnum 256
-#define API_WuserGetLogonAsn 257
-#define API_WuserSetLogonAsn 258
-#define API_WuserGetAppSel 259
-#define API_WuserSetAppSel 260
-#define API_WappAdd 261
-#define API_WappDel 262
-#define API_WappGetInfo 263
-#define API_WappSetInfo 264
-#define API_WappEnum 265
-#define API_WUserDCDBInit 266
-#define API_WDASDAdd 267
-#define API_WDASDDel 268
-#define API_WDASDGetInfo 269
-#define API_WDASDSetInfo 270
-#define API_WDASDEnum 271
-#define API_WDASDCheck 272
-#define API_WDASDCtl 273
-#define API_WuserRemoteLogonCheck 274
-#define API_WUserPasswordSet3 275
-#define API_WCreateRIPLMachine 276
-#define API_WDeleteRIPLMachine 277
-#define API_WGetRIPLMachineInfo 278
-#define API_WSetRIPLMachineInfo 279
-#define API_WEnumRIPLMachine 280
-#define API_WI_ShareAdd 281
-#define API_WI_AliasEnum 282
-#define API_WaccessApply 283
-#define API_WPrt16Query 284
-#define API_WPrt16Set 285
-#define API_WUserDel100 286
-#define API_WUserRemoteLogonCheck2 287
-#define API_WRemoteTODSet 294
-#define API_WprintJobMoveAll 295
-#define API_W16AppParmAdd 296
-#define API_W16AppParmDel 297
-#define API_W16AppParmGet 298
-#define API_W16AppParmSet 299
-#define API_W16RIPLMachineCreate 300
-#define API_W16RIPLMachineGetInfo 301
-#define API_W16RIPLMachineSetInfo 302
-#define API_W16RIPLMachineEnum 303
-#define API_W16RIPLMachineListParmEnum 304
-#define API_W16RIPLMachClassGetInfo 305
-#define API_W16RIPLMachClassEnum 306
-#define API_W16RIPLMachClassCreate 307
-#define API_W16RIPLMachClassSetInfo 308
-#define API_W16RIPLMachClassDelete 309
-#define API_W16RIPLMachClassLPEnum 310
-#define API_W16RIPLMachineDelete 311
-#define API_W16WSLevelGetInfo 312
-#define API_WserverNameAdd 313
-#define API_WserverNameDel 314
-#define API_WserverNameEnum 315
-#define API_I_WDASDEnum 316
-#define API_I_WDASDEnumTerminate 317
-#define API_I_WDASDSetInfo2 318
-#define MAX_RAP_API 318
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_CIFS_H */
diff --git a/usr/src/uts/common/smbsrv/codepage.h b/usr/src/uts/common/smbsrv/codepage.h
deleted file mode 100644
index baefb9de22..0000000000
--- a/usr/src/uts/common/smbsrv/codepage.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SMBSRV_CODEPAGE_H
-#define _SMBSRV_CODEPAGE_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <smbsrv/string.h>
-#include <smbsrv/smb_i18n.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Labels to define whether a code page table entry is an uppercase
- * character, a lowercase character or neither. One of these values
- * should appear in the ctype field of the code page tables.
- */
-#define CODEPAGE_ISNONE 0x00
-#define CODEPAGE_ISUPPER 0x01
-#define CODEPAGE_ISLOWER 0x02
-
-/*
- * The structure of a code page entry. Each code page table will
- * consist of an array of 256 codepage entries.
- *
- * ctype indicates case of the value.
- * upper indicates the uppercase equivalent value.
- * lower indicates the lowercase equivalent value.
- */
-typedef struct codepage {
- unsigned char ctype;
- mts_wchar_t upper;
- mts_wchar_t lower;
-} codepage_t;
-
-/*
- * Global pointer to the current code page. This is
- * defaulted to a standard ASCII table.
- */
-extern codepage_t usascii_codepage[];
-
-/*
- * This buffer is used to store the language string for display.
- */
-#define CODEPAGE_BUFSIZ 48
-
-extern int oem_language_set(char *language);
-extern unsigned int oem_get_smb_cpid(void);
-extern unsigned int oem_get_telnet_cpid(void);
-
-extern int codepage_isupper(int c);
-extern int codepage_islower(int c);
-extern int codepage_toupper(int c);
-extern int codepage_tolower(int c);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_CODEPAGE_H */
diff --git a/usr/src/uts/common/smbsrv/cp_cyrillic.h b/usr/src/uts/common/smbsrv/cp_cyrillic.h
deleted file mode 100644
index d3b2a27596..0000000000
--- a/usr/src/uts/common/smbsrv/cp_cyrillic.h
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SMBSRV_CP_CYRILLIC_H
-#define _SMBSRV_CP_CYRILLIC_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
- * This file specifies a codepage mapping for a given character set as
- * specified below:
- *
- * This is the codepage for Cyrillic Character Set
- * This codepage defines values for the special
- * characters needed for the written alphabets of the
- * following languages: Bulgarian, Byelorussian,
- * Macedonian, Russian, Serbian, and pre-1990 Ukrainian
- * The cyrillic character set is also known as iso-8859-5
- */
-
-#include <smbsrv/codepage.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-codepage_t cyrillic_codepage[256] = {
- { CODEPAGE_ISNONE, 0x0000, 0x0000 }, /* 0x0000 */
- { CODEPAGE_ISNONE, 0x0001, 0x0001 }, /* 0x0001 */
- { CODEPAGE_ISNONE, 0x0002, 0x0002 }, /* 0x0002 */
- { CODEPAGE_ISNONE, 0x0003, 0x0003 }, /* 0x0003 */
- { CODEPAGE_ISNONE, 0x0004, 0x0004 }, /* 0x0004 */
- { CODEPAGE_ISNONE, 0x0005, 0x0005 }, /* 0x0005 */
- { CODEPAGE_ISNONE, 0x0006, 0x0006 }, /* 0x0006 */
- { CODEPAGE_ISNONE, 0x0007, 0x0007 }, /* 0x0007 */
- { CODEPAGE_ISNONE, 0x0008, 0x0008 }, /* 0x0008 */
- { CODEPAGE_ISNONE, 0x0009, 0x0009 }, /* 0x0009 */
- { CODEPAGE_ISNONE, 0x000a, 0x000a }, /* 0x000a */
- { CODEPAGE_ISNONE, 0x000b, 0x000b }, /* 0x000b */
- { CODEPAGE_ISNONE, 0x000c, 0x000c }, /* 0x000c */
- { CODEPAGE_ISNONE, 0x000d, 0x000d }, /* 0x000d */
- { CODEPAGE_ISNONE, 0x000e, 0x000e }, /* 0x000e */
- { CODEPAGE_ISNONE, 0x000f, 0x000f }, /* 0x000f */
- { CODEPAGE_ISNONE, 0x0010, 0x0010 }, /* 0x0010 */
- { CODEPAGE_ISNONE, 0x0011, 0x0011 }, /* 0x0011 */
- { CODEPAGE_ISNONE, 0x0012, 0x0012 }, /* 0x0012 */
- { CODEPAGE_ISNONE, 0x0013, 0x0013 }, /* 0x0013 */
- { CODEPAGE_ISNONE, 0x0014, 0x0014 }, /* 0x0014 */
- { CODEPAGE_ISNONE, 0x0015, 0x0015 }, /* 0x0015 */
- { CODEPAGE_ISNONE, 0x0016, 0x0016 }, /* 0x0016 */
- { CODEPAGE_ISNONE, 0x0017, 0x0017 }, /* 0x0017 */
- { CODEPAGE_ISNONE, 0x0018, 0x0018 }, /* 0x0018 */
- { CODEPAGE_ISNONE, 0x0019, 0x0019 }, /* 0x0019 */
- { CODEPAGE_ISNONE, 0x001a, 0x001a }, /* 0x001a */
- { CODEPAGE_ISNONE, 0x001b, 0x001b }, /* 0x001b */
- { CODEPAGE_ISNONE, 0x001c, 0x001c }, /* 0x001c */
- { CODEPAGE_ISNONE, 0x001d, 0x001d }, /* 0x001d */
- { CODEPAGE_ISNONE, 0x001e, 0x001e }, /* 0x001e */
- { CODEPAGE_ISNONE, 0x001f, 0x001f }, /* 0x001f */
- { CODEPAGE_ISNONE, 0x0020, 0x0020 }, /* 0x0020 */
- { CODEPAGE_ISNONE, 0x0021, 0x0021 }, /* 0x0021 */
- { CODEPAGE_ISNONE, 0x0022, 0x0022 }, /* 0x0022 */
- { CODEPAGE_ISNONE, 0x0023, 0x0023 }, /* 0x0023 */
- { CODEPAGE_ISNONE, 0x0024, 0x0024 }, /* 0x0024 */
- { CODEPAGE_ISNONE, 0x0025, 0x0025 }, /* 0x0025 */
- { CODEPAGE_ISNONE, 0x0026, 0x0026 }, /* 0x0026 */
- { CODEPAGE_ISNONE, 0x0027, 0x0027 }, /* 0x0027 */
- { CODEPAGE_ISNONE, 0x0028, 0x0028 }, /* 0x0028 */
- { CODEPAGE_ISNONE, 0x0029, 0x0029 }, /* 0x0029 */
- { CODEPAGE_ISNONE, 0x002a, 0x002a }, /* 0x002a */
- { CODEPAGE_ISNONE, 0x002b, 0x002b }, /* 0x002b */
- { CODEPAGE_ISNONE, 0x002c, 0x002c }, /* 0x002c */
- { CODEPAGE_ISNONE, 0x002d, 0x002d }, /* 0x002d */
- { CODEPAGE_ISNONE, 0x002e, 0x002e }, /* 0x002e */
- { CODEPAGE_ISNONE, 0x002f, 0x002f }, /* 0x002f */
- { CODEPAGE_ISNONE, 0x0030, 0x0030 }, /* 0x0030 */
- { CODEPAGE_ISNONE, 0x0031, 0x0031 }, /* 0x0031 */
- { CODEPAGE_ISNONE, 0x0032, 0x0032 }, /* 0x0032 */
- { CODEPAGE_ISNONE, 0x0033, 0x0033 }, /* 0x0033 */
- { CODEPAGE_ISNONE, 0x0034, 0x0034 }, /* 0x0034 */
- { CODEPAGE_ISNONE, 0x0035, 0x0035 }, /* 0x0035 */
- { CODEPAGE_ISNONE, 0x0036, 0x0036 }, /* 0x0036 */
- { CODEPAGE_ISNONE, 0x0037, 0x0037 }, /* 0x0037 */
- { CODEPAGE_ISNONE, 0x0038, 0x0038 }, /* 0x0038 */
- { CODEPAGE_ISNONE, 0x0039, 0x0039 }, /* 0x0039 */
- { CODEPAGE_ISNONE, 0x003a, 0x003a }, /* 0x003a */
- { CODEPAGE_ISNONE, 0x003b, 0x003b }, /* 0x003b */
- { CODEPAGE_ISNONE, 0x003c, 0x003c }, /* 0x003c */
- { CODEPAGE_ISNONE, 0x003d, 0x003d }, /* 0x003d */
- { CODEPAGE_ISNONE, 0x003e, 0x003e }, /* 0x003e */
- { CODEPAGE_ISNONE, 0x003f, 0x003f }, /* 0x003f */
- { CODEPAGE_ISNONE, 0x0040, 0x0040 }, /* 0x0040 */
- { CODEPAGE_ISUPPER, 0x0041, 0x0061 }, /* 0x0041 */
- { CODEPAGE_ISUPPER, 0x0042, 0x0062 }, /* 0x0042 */
- { CODEPAGE_ISUPPER, 0x0043, 0x0063 }, /* 0x0043 */
- { CODEPAGE_ISUPPER, 0x0044, 0x0064 }, /* 0x0044 */
- { CODEPAGE_ISUPPER, 0x0045, 0x0065 }, /* 0x0045 */
- { CODEPAGE_ISUPPER, 0x0046, 0x0066 }, /* 0x0046 */
- { CODEPAGE_ISUPPER, 0x0047, 0x0067 }, /* 0x0047 */
- { CODEPAGE_ISUPPER, 0x0048, 0x0068 }, /* 0x0048 */
- { CODEPAGE_ISUPPER, 0x0049, 0x0069 }, /* 0x0049 */
- { CODEPAGE_ISUPPER, 0x004a, 0x006a }, /* 0x004a */
- { CODEPAGE_ISUPPER, 0x004b, 0x006b }, /* 0x004b */
- { CODEPAGE_ISUPPER, 0x004c, 0x006c }, /* 0x004c */
- { CODEPAGE_ISUPPER, 0x004d, 0x006d }, /* 0x004d */
- { CODEPAGE_ISUPPER, 0x004e, 0x006e }, /* 0x004e */
- { CODEPAGE_ISUPPER, 0x004f, 0x006f }, /* 0x004f */
- { CODEPAGE_ISUPPER, 0x0050, 0x0070 }, /* 0x0050 */
- { CODEPAGE_ISUPPER, 0x0051, 0x0071 }, /* 0x0051 */
- { CODEPAGE_ISUPPER, 0x0052, 0x0072 }, /* 0x0052 */
- { CODEPAGE_ISUPPER, 0x0053, 0x0073 }, /* 0x0053 */
- { CODEPAGE_ISUPPER, 0x0054, 0x0074 }, /* 0x0054 */
- { CODEPAGE_ISUPPER, 0x0055, 0x0075 }, /* 0x0055 */
- { CODEPAGE_ISUPPER, 0x0056, 0x0076 }, /* 0x0056 */
- { CODEPAGE_ISUPPER, 0x0057, 0x0077 }, /* 0x0057 */
- { CODEPAGE_ISUPPER, 0x0058, 0x0078 }, /* 0x0058 */
- { CODEPAGE_ISUPPER, 0x0059, 0x0079 }, /* 0x0059 */
- { CODEPAGE_ISUPPER, 0x005a, 0x007a }, /* 0x005a */
- { CODEPAGE_ISNONE, 0x005b, 0x005b }, /* 0x005b */
- { CODEPAGE_ISNONE, 0x005c, 0x005c }, /* 0x005c */
- { CODEPAGE_ISNONE, 0x005d, 0x005d }, /* 0x005d */
- { CODEPAGE_ISNONE, 0x005e, 0x005e }, /* 0x005e */
- { CODEPAGE_ISNONE, 0x005f, 0x005f }, /* 0x005f */
- { CODEPAGE_ISNONE, 0x0060, 0x0060 }, /* 0x0060 */
- { CODEPAGE_ISLOWER, 0x0041, 0x0061 }, /* 0x0061 */
- { CODEPAGE_ISLOWER, 0x0042, 0x0062 }, /* 0x0062 */
- { CODEPAGE_ISLOWER, 0x0043, 0x0063 }, /* 0x0063 */
- { CODEPAGE_ISLOWER, 0x0044, 0x0064 }, /* 0x0064 */
- { CODEPAGE_ISLOWER, 0x0045, 0x0065 }, /* 0x0065 */
- { CODEPAGE_ISLOWER, 0x0046, 0x0066 }, /* 0x0066 */
- { CODEPAGE_ISLOWER, 0x0047, 0x0067 }, /* 0x0067 */
- { CODEPAGE_ISLOWER, 0x0048, 0x0068 }, /* 0x0068 */
- { CODEPAGE_ISLOWER, 0x0049, 0x0069 }, /* 0x0069 */
- { CODEPAGE_ISLOWER, 0x004a, 0x006a }, /* 0x006a */
- { CODEPAGE_ISLOWER, 0x004b, 0x006b }, /* 0x006b */
- { CODEPAGE_ISLOWER, 0x004c, 0x006c }, /* 0x006c */
- { CODEPAGE_ISLOWER, 0x004d, 0x006d }, /* 0x006d */
- { CODEPAGE_ISLOWER, 0x004e, 0x006e }, /* 0x006e */
- { CODEPAGE_ISLOWER, 0x004f, 0x006f }, /* 0x006f */
- { CODEPAGE_ISLOWER, 0x0050, 0x0070 }, /* 0x0070 */
- { CODEPAGE_ISLOWER, 0x0051, 0x0071 }, /* 0x0071 */
- { CODEPAGE_ISLOWER, 0x0052, 0x0072 }, /* 0x0072 */
- { CODEPAGE_ISLOWER, 0x0053, 0x0073 }, /* 0x0073 */
- { CODEPAGE_ISLOWER, 0x0054, 0x0074 }, /* 0x0074 */
- { CODEPAGE_ISLOWER, 0x0055, 0x0075 }, /* 0x0075 */
- { CODEPAGE_ISLOWER, 0x0056, 0x0076 }, /* 0x0076 */
- { CODEPAGE_ISLOWER, 0x0057, 0x0077 }, /* 0x0077 */
- { CODEPAGE_ISLOWER, 0x0058, 0x0078 }, /* 0x0078 */
- { CODEPAGE_ISLOWER, 0x0059, 0x0079 }, /* 0x0079 */
- { CODEPAGE_ISLOWER, 0x005a, 0x007a }, /* 0x007a */
- { CODEPAGE_ISNONE, 0x007b, 0x007b }, /* 0x007b */
- { CODEPAGE_ISNONE, 0x007c, 0x007c }, /* 0x007c */
- { CODEPAGE_ISNONE, 0x007d, 0x007d }, /* 0x007d */
- { CODEPAGE_ISNONE, 0x007e, 0x007e }, /* 0x007e */
- { CODEPAGE_ISNONE, 0x007f, 0x007f }, /* 0x007f */
- { CODEPAGE_ISNONE, 0x0080, 0x0080 }, /* 0x0080 */
- { CODEPAGE_ISNONE, 0x0081, 0x0081 }, /* 0x0081 */
- { CODEPAGE_ISNONE, 0x0082, 0x0082 }, /* 0x0082 */
- { CODEPAGE_ISNONE, 0x0083, 0x0083 }, /* 0x0083 */
- { CODEPAGE_ISNONE, 0x0084, 0x0084 }, /* 0x0084 */
- { CODEPAGE_ISNONE, 0x0085, 0x0085 }, /* 0x0085 */
- { CODEPAGE_ISNONE, 0x0086, 0x0086 }, /* 0x0086 */
- { CODEPAGE_ISNONE, 0x0087, 0x0087 }, /* 0x0087 */
- { CODEPAGE_ISNONE, 0x0088, 0x0088 }, /* 0x0088 */
- { CODEPAGE_ISNONE, 0x0089, 0x0089 }, /* 0x0089 */
- { CODEPAGE_ISNONE, 0x008a, 0x008a }, /* 0x008a */
- { CODEPAGE_ISNONE, 0x008b, 0x008b }, /* 0x008b */
- { CODEPAGE_ISNONE, 0x008c, 0x008c }, /* 0x008c */
- { CODEPAGE_ISNONE, 0x008d, 0x008d }, /* 0x008d */
- { CODEPAGE_ISNONE, 0x008e, 0x008e }, /* 0x008e */
- { CODEPAGE_ISNONE, 0x008f, 0x008f }, /* 0x008f */
- { CODEPAGE_ISNONE, 0x0090, 0x0090 }, /* 0x0090 */
- { CODEPAGE_ISNONE, 0x0091, 0x0091 }, /* 0x0091 */
- { CODEPAGE_ISNONE, 0x0092, 0x0092 }, /* 0x0092 */
- { CODEPAGE_ISNONE, 0x0093, 0x0093 }, /* 0x0093 */
- { CODEPAGE_ISNONE, 0x0094, 0x0094 }, /* 0x0094 */
- { CODEPAGE_ISNONE, 0x0095, 0x0095 }, /* 0x0095 */
- { CODEPAGE_ISNONE, 0x0096, 0x0096 }, /* 0x0096 */
- { CODEPAGE_ISNONE, 0x0097, 0x0097 }, /* 0x0097 */
- { CODEPAGE_ISNONE, 0x0098, 0x0098 }, /* 0x0098 */
- { CODEPAGE_ISNONE, 0x0099, 0x0099 }, /* 0x0099 */
- { CODEPAGE_ISNONE, 0x009a, 0x009a }, /* 0x009a */
- { CODEPAGE_ISNONE, 0x009b, 0x009b }, /* 0x009b */
- { CODEPAGE_ISNONE, 0x009c, 0x009c }, /* 0x009c */
- { CODEPAGE_ISNONE, 0x009d, 0x009d }, /* 0x009d */
- { CODEPAGE_ISNONE, 0x009e, 0x009e }, /* 0x009e */
- { CODEPAGE_ISNONE, 0x009f, 0x009f }, /* 0x009f */
- { CODEPAGE_ISNONE, 0x00a0, 0x00a0 }, /* 0x00a0 */
- { CODEPAGE_ISUPPER, 0x00a1, 0x00f1 }, /* 0x00a1 */
- { CODEPAGE_ISUPPER, 0x00a2, 0x00f2 }, /* 0x00a2 */
- { CODEPAGE_ISUPPER, 0x00a3, 0x00f3 }, /* 0x00a3 */
- { CODEPAGE_ISUPPER, 0x00a4, 0x00f4 }, /* 0x00a4 */
- { CODEPAGE_ISUPPER, 0x00a5, 0x00f5 }, /* 0x00a5 */
- { CODEPAGE_ISUPPER, 0x00a6, 0x00f6 }, /* 0x00a6 */
- { CODEPAGE_ISUPPER, 0x00a7, 0x00f7 }, /* 0x00a7 */
- { CODEPAGE_ISUPPER, 0x00a8, 0x00f8 }, /* 0x00a8 */
- { CODEPAGE_ISUPPER, 0x00a9, 0x00f9 }, /* 0x00a9 */
- { CODEPAGE_ISUPPER, 0x00aa, 0x00fa }, /* 0x00aa */
- { CODEPAGE_ISUPPER, 0x00ab, 0x00fb }, /* 0x00ab */
- { CODEPAGE_ISUPPER, 0x00ac, 0x00fc }, /* 0x00ac */
- { CODEPAGE_ISUPPER, 0x00ad, 0x00fd }, /* 0x00ad */
- { CODEPAGE_ISUPPER, 0x00ae, 0x00fe }, /* 0x00ae */
- { CODEPAGE_ISUPPER, 0x00af, 0x00ff }, /* 0x00af */
- { CODEPAGE_ISNONE, 0x00b0, 0x00b0 }, /* 0x00b0 */
- { CODEPAGE_ISNONE, 0x00b1, 0x00b1 }, /* 0x00b1 */
- { CODEPAGE_ISNONE, 0x00b2, 0x00b2 }, /* 0x00b2 */
- { CODEPAGE_ISNONE, 0x00b3, 0x00b3 }, /* 0x00b3 */
- { CODEPAGE_ISNONE, 0x00b4, 0x00b4 }, /* 0x00b4 */
- { CODEPAGE_ISNONE, 0x00b5, 0x00b5 }, /* 0x00b5 */
- { CODEPAGE_ISNONE, 0x00b6, 0x00b6 }, /* 0x00b6 */
- { CODEPAGE_ISNONE, 0x00b7, 0x00b7 }, /* 0x00b7 */
- { CODEPAGE_ISNONE, 0x00b8, 0x00b8 }, /* 0x00b8 */
- { CODEPAGE_ISNONE, 0x00b9, 0x00b9 }, /* 0x00b9 */
- { CODEPAGE_ISNONE, 0x00ba, 0x00ba }, /* 0x00ba */
- { CODEPAGE_ISNONE, 0x00bb, 0x00bb }, /* 0x00bb */
- { CODEPAGE_ISNONE, 0x00bc, 0x00bc }, /* 0x00bc */
- { CODEPAGE_ISNONE, 0x00bd, 0x00bd }, /* 0x00bd */
- { CODEPAGE_ISNONE, 0x00be, 0x00be }, /* 0x00be */
- { CODEPAGE_ISNONE, 0x00bf, 0x00bf }, /* 0x00bf */
- { CODEPAGE_ISUPPER, 0x00c0, 0x00e0 }, /* 0x00c0 */
- { CODEPAGE_ISUPPER, 0x00c1, 0x00e1 }, /* 0x00c1 */
- { CODEPAGE_ISUPPER, 0x00c2, 0x00e2 }, /* 0x00c2 */
- { CODEPAGE_ISUPPER, 0x00c3, 0x00e3 }, /* 0x00c3 */
- { CODEPAGE_ISUPPER, 0x00c4, 0x00e4 }, /* 0x00c4 */
- { CODEPAGE_ISUPPER, 0x00c5, 0x00e5 }, /* 0x00c5 */
- { CODEPAGE_ISUPPER, 0x00c6, 0x00e6 }, /* 0x00c6 */
- { CODEPAGE_ISUPPER, 0x00c7, 0x00e7 }, /* 0x00c7 */
- { CODEPAGE_ISUPPER, 0x00c8, 0x00e8 }, /* 0x00c8 */
- { CODEPAGE_ISUPPER, 0x00c9, 0x00e9 }, /* 0x00c9 */
- { CODEPAGE_ISUPPER, 0x00ca, 0x00ea }, /* 0x00ca */
- { CODEPAGE_ISUPPER, 0x00cb, 0x00eb }, /* 0x00cb */
- { CODEPAGE_ISUPPER, 0x00cc, 0x00ec }, /* 0x00cc */
- { CODEPAGE_ISUPPER, 0x00cd, 0x00ed }, /* 0x00cd */
- { CODEPAGE_ISUPPER, 0x00ce, 0x00ee }, /* 0x00ce */
- { CODEPAGE_ISUPPER, 0x00cf, 0x00ef }, /* 0x00cf */
- { CODEPAGE_ISNONE, 0x00d0, 0x00d0 }, /* 0x00d0 */
- { CODEPAGE_ISNONE, 0x00d1, 0x00d1 }, /* 0x00d1 */
- { CODEPAGE_ISNONE, 0x00d2, 0x00d2 }, /* 0x00d2 */
- { CODEPAGE_ISNONE, 0x00d3, 0x00d3 }, /* 0x00d3 */
- { CODEPAGE_ISNONE, 0x00d4, 0x00d4 }, /* 0x00d4 */
- { CODEPAGE_ISNONE, 0x00d5, 0x00d5 }, /* 0x00d5 */
- { CODEPAGE_ISNONE, 0x00d6, 0x00d6 }, /* 0x00d6 */
- { CODEPAGE_ISNONE, 0x00d7, 0x00d7 }, /* 0x00d7 */
- { CODEPAGE_ISNONE, 0x00d8, 0x00d8 }, /* 0x00d8 */
- { CODEPAGE_ISNONE, 0x00d9, 0x00d9 }, /* 0x00d9 */
- { CODEPAGE_ISNONE, 0x00da, 0x00da }, /* 0x00da */
- { CODEPAGE_ISNONE, 0x00db, 0x00db }, /* 0x00db */
- { CODEPAGE_ISNONE, 0x00dc, 0x00dc }, /* 0x00dc */
- { CODEPAGE_ISNONE, 0x00dd, 0x00dd }, /* 0x00dd */
- { CODEPAGE_ISNONE, 0x00de, 0x00de }, /* 0x00de */
- { CODEPAGE_ISNONE, 0x00df, 0x00df }, /* 0x00df */
- { CODEPAGE_ISLOWER, 0x00c0, 0x00e0 }, /* 0x00e0 */
- { CODEPAGE_ISLOWER, 0x00c1, 0x00e1 }, /* 0x00e1 */
- { CODEPAGE_ISLOWER, 0x00c2, 0x00e2 }, /* 0x00e2 */
- { CODEPAGE_ISLOWER, 0x00c3, 0x00e3 }, /* 0x00e3 */
- { CODEPAGE_ISLOWER, 0x00c4, 0x00e4 }, /* 0x00e4 */
- { CODEPAGE_ISLOWER, 0x00c5, 0x00e5 }, /* 0x00e5 */
- { CODEPAGE_ISLOWER, 0x00c6, 0x00e6 }, /* 0x00e6 */
- { CODEPAGE_ISLOWER, 0x00c7, 0x00e7 }, /* 0x00e7 */
- { CODEPAGE_ISLOWER, 0x00c8, 0x00e8 }, /* 0x00e8 */
- { CODEPAGE_ISLOWER, 0x00c9, 0x00e9 }, /* 0x00e9 */
- { CODEPAGE_ISLOWER, 0x00ca, 0x00ea }, /* 0x00ea */
- { CODEPAGE_ISLOWER, 0x00cb, 0x00eb }, /* 0x00eb */
- { CODEPAGE_ISLOWER, 0x00cc, 0x00ec }, /* 0x00ec */
- { CODEPAGE_ISLOWER, 0x00cd, 0x00ed }, /* 0x00ed */
- { CODEPAGE_ISLOWER, 0x00ce, 0x00ee }, /* 0x00ee */
- { CODEPAGE_ISLOWER, 0x00cf, 0x00ef }, /* 0x00ef */
- { CODEPAGE_ISNONE, 0x00f0, 0x00f0 }, /* 0x00f0 */
- { CODEPAGE_ISLOWER, 0x00a1, 0x00f1 }, /* 0x00f1 */
- { CODEPAGE_ISLOWER, 0x00a2, 0x00f2 }, /* 0x00f2 */
- { CODEPAGE_ISLOWER, 0x00a3, 0x00f3 }, /* 0x00f3 */
- { CODEPAGE_ISLOWER, 0x00a4, 0x00f4 }, /* 0x00f4 */
- { CODEPAGE_ISLOWER, 0x00a5, 0x00f5 }, /* 0x00f5 */
- { CODEPAGE_ISLOWER, 0x00a6, 0x00f6 }, /* 0x00f6 */
- { CODEPAGE_ISLOWER, 0x00a7, 0x00f7 }, /* 0x00f7 */
- { CODEPAGE_ISLOWER, 0x00a8, 0x00f8 }, /* 0x00f8 */
- { CODEPAGE_ISLOWER, 0x00a9, 0x00f9 }, /* 0x00f9 */
- { CODEPAGE_ISLOWER, 0x00aa, 0x00fa }, /* 0x00fa */
- { CODEPAGE_ISLOWER, 0x00ab, 0x00fb }, /* 0x00fb */
- { CODEPAGE_ISLOWER, 0x00ac, 0x00fc }, /* 0x00fc */
- { CODEPAGE_ISLOWER, 0x00ad, 0x00fd }, /* 0x00fd */
- { CODEPAGE_ISLOWER, 0x00ae, 0x00fe }, /* 0x00fe */
- { CODEPAGE_ISLOWER, 0x00af, 0x00ff } /* 0x00ff */
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_CP_CYRILLIC_H */
diff --git a/usr/src/uts/common/smbsrv/cp_latin1.h b/usr/src/uts/common/smbsrv/cp_latin1.h
deleted file mode 100644
index 728b28e05b..0000000000
--- a/usr/src/uts/common/smbsrv/cp_latin1.h
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SMBSRV_CP_LATIN1_H
-#define _SMBSRV_CP_LATIN1_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
- * This file specifies a codepage mapping for a given character set as
- * specified below:
- *
- * This is the codepage for the Latin-1 Character Set
- * (Western Europe). This codepage defines values for
- * the special characters needed for the written alphabets
- * of the following Languages: French, Spanish, Catalan,
- * Basque, Portuguese, Italian, Albanian, Rhaeto-Romanic,
- * Dutch, German, Danish, Swedish, Norwegian, Finnish,
- * Faroese, Icelandic, Irish, Scottish, English, Afrikaans
- * and Swahili.
- * This codepage is also used in North & South America,
- * Canada, Australia, and much of Africa
- * The Latin-1 character set is also Known as iso-8859-1.
- */
-
-#include <smbsrv/codepage.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-codepage_t Latin1_codepage[256] = {
- { CODEPAGE_ISNONE, 0x0000, 0x0000 }, /* 0x0000 */
- { CODEPAGE_ISNONE, 0x0001, 0x0001 }, /* 0x0001 */
- { CODEPAGE_ISNONE, 0x0002, 0x0002 }, /* 0x0002 */
- { CODEPAGE_ISNONE, 0x0003, 0x0003 }, /* 0x0003 */
- { CODEPAGE_ISNONE, 0x0004, 0x0004 }, /* 0x0004 */
- { CODEPAGE_ISNONE, 0x0005, 0x0005 }, /* 0x0005 */
- { CODEPAGE_ISNONE, 0x0006, 0x0006 }, /* 0x0006 */
- { CODEPAGE_ISNONE, 0x0007, 0x0007 }, /* 0x0007 */
- { CODEPAGE_ISNONE, 0x0008, 0x0008 }, /* 0x0008 */
- { CODEPAGE_ISNONE, 0x0009, 0x0009 }, /* 0x0009 */
- { CODEPAGE_ISNONE, 0x000a, 0x000a }, /* 0x000a */
- { CODEPAGE_ISNONE, 0x000b, 0x000b }, /* 0x000b */
- { CODEPAGE_ISNONE, 0x000c, 0x000c }, /* 0x000c */
- { CODEPAGE_ISNONE, 0x000d, 0x000d }, /* 0x000d */
- { CODEPAGE_ISNONE, 0x000e, 0x000e }, /* 0x000e */
- { CODEPAGE_ISNONE, 0x000f, 0x000f }, /* 0x000f */
- { CODEPAGE_ISNONE, 0x0010, 0x0010 }, /* 0x0010 */
- { CODEPAGE_ISNONE, 0x0011, 0x0011 }, /* 0x0011 */
- { CODEPAGE_ISNONE, 0x0012, 0x0012 }, /* 0x0012 */
- { CODEPAGE_ISNONE, 0x0013, 0x0013 }, /* 0x0013 */
- { CODEPAGE_ISNONE, 0x0014, 0x0014 }, /* 0x0014 */
- { CODEPAGE_ISNONE, 0x0015, 0x0015 }, /* 0x0015 */
- { CODEPAGE_ISNONE, 0x0016, 0x0016 }, /* 0x0016 */
- { CODEPAGE_ISNONE, 0x0017, 0x0017 }, /* 0x0017 */
- { CODEPAGE_ISNONE, 0x0018, 0x0018 }, /* 0x0018 */
- { CODEPAGE_ISNONE, 0x0019, 0x0019 }, /* 0x0019 */
- { CODEPAGE_ISNONE, 0x001a, 0x001a }, /* 0x001a */
- { CODEPAGE_ISNONE, 0x001b, 0x001b }, /* 0x001b */
- { CODEPAGE_ISNONE, 0x001c, 0x001c }, /* 0x001c */
- { CODEPAGE_ISNONE, 0x001d, 0x001d }, /* 0x001d */
- { CODEPAGE_ISNONE, 0x001e, 0x001e }, /* 0x001e */
- { CODEPAGE_ISNONE, 0x001f, 0x001f }, /* 0x001f */
- { CODEPAGE_ISNONE, 0x0020, 0x0020 }, /* 0x0020 */
- { CODEPAGE_ISNONE, 0x0021, 0x0021 }, /* 0x0021 */
- { CODEPAGE_ISNONE, 0x0022, 0x0022 }, /* 0x0022 */
- { CODEPAGE_ISNONE, 0x0023, 0x0023 }, /* 0x0023 */
- { CODEPAGE_ISNONE, 0x0024, 0x0024 }, /* 0x0024 */
- { CODEPAGE_ISNONE, 0x0025, 0x0025 }, /* 0x0025 */
- { CODEPAGE_ISNONE, 0x0026, 0x0026 }, /* 0x0026 */
- { CODEPAGE_ISNONE, 0x0027, 0x0027 }, /* 0x0027 */
- { CODEPAGE_ISNONE, 0x0028, 0x0028 }, /* 0x0028 */
- { CODEPAGE_ISNONE, 0x0029, 0x0029 }, /* 0x0029 */
- { CODEPAGE_ISNONE, 0x002a, 0x002a }, /* 0x002a */
- { CODEPAGE_ISNONE, 0x002b, 0x002b }, /* 0x002b */
- { CODEPAGE_ISNONE, 0x002c, 0x002c }, /* 0x002c */
- { CODEPAGE_ISNONE, 0x002d, 0x002d }, /* 0x002d */
- { CODEPAGE_ISNONE, 0x002e, 0x002e }, /* 0x002e */
- { CODEPAGE_ISNONE, 0x002f, 0x002f }, /* 0x002f */
- { CODEPAGE_ISNONE, 0x0030, 0x0030 }, /* 0x0030 */
- { CODEPAGE_ISNONE, 0x0031, 0x0031 }, /* 0x0031 */
- { CODEPAGE_ISNONE, 0x0032, 0x0032 }, /* 0x0032 */
- { CODEPAGE_ISNONE, 0x0033, 0x0033 }, /* 0x0033 */
- { CODEPAGE_ISNONE, 0x0034, 0x0034 }, /* 0x0034 */
- { CODEPAGE_ISNONE, 0x0035, 0x0035 }, /* 0x0035 */
- { CODEPAGE_ISNONE, 0x0036, 0x0036 }, /* 0x0036 */
- { CODEPAGE_ISNONE, 0x0037, 0x0037 }, /* 0x0037 */
- { CODEPAGE_ISNONE, 0x0038, 0x0038 }, /* 0x0038 */
- { CODEPAGE_ISNONE, 0x0039, 0x0039 }, /* 0x0039 */
- { CODEPAGE_ISNONE, 0x003a, 0x003a }, /* 0x003a */
- { CODEPAGE_ISNONE, 0x003b, 0x003b }, /* 0x003b */
- { CODEPAGE_ISNONE, 0x003c, 0x003c }, /* 0x003c */
- { CODEPAGE_ISNONE, 0x003d, 0x003d }, /* 0x003d */
- { CODEPAGE_ISNONE, 0x003e, 0x003e }, /* 0x003e */
- { CODEPAGE_ISNONE, 0x003f, 0x003f }, /* 0x003f */
- { CODEPAGE_ISNONE, 0x0040, 0x0040 }, /* 0x0040 */
- { CODEPAGE_ISUPPER, 0x0041, 0x0061 }, /* 0x0041 */
- { CODEPAGE_ISUPPER, 0x0042, 0x0062 }, /* 0x0042 */
- { CODEPAGE_ISUPPER, 0x0043, 0x0063 }, /* 0x0043 */
- { CODEPAGE_ISUPPER, 0x0044, 0x0064 }, /* 0x0044 */
- { CODEPAGE_ISUPPER, 0x0045, 0x0065 }, /* 0x0045 */
- { CODEPAGE_ISUPPER, 0x0046, 0x0066 }, /* 0x0046 */
- { CODEPAGE_ISUPPER, 0x0047, 0x0067 }, /* 0x0047 */
- { CODEPAGE_ISUPPER, 0x0048, 0x0068 }, /* 0x0048 */
- { CODEPAGE_ISUPPER, 0x0049, 0x0069 }, /* 0x0049 */
- { CODEPAGE_ISUPPER, 0x004a, 0x006a }, /* 0x004a */
- { CODEPAGE_ISUPPER, 0x004b, 0x006b }, /* 0x004b */
- { CODEPAGE_ISUPPER, 0x004c, 0x006c }, /* 0x004c */
- { CODEPAGE_ISUPPER, 0x004d, 0x006d }, /* 0x004d */
- { CODEPAGE_ISUPPER, 0x004e, 0x006e }, /* 0x004e */
- { CODEPAGE_ISUPPER, 0x004f, 0x006f }, /* 0x004f */
- { CODEPAGE_ISUPPER, 0x0050, 0x0070 }, /* 0x0050 */
- { CODEPAGE_ISUPPER, 0x0051, 0x0071 }, /* 0x0051 */
- { CODEPAGE_ISUPPER, 0x0052, 0x0072 }, /* 0x0052 */
- { CODEPAGE_ISUPPER, 0x0053, 0x0073 }, /* 0x0053 */
- { CODEPAGE_ISUPPER, 0x0054, 0x0074 }, /* 0x0054 */
- { CODEPAGE_ISUPPER, 0x0055, 0x0075 }, /* 0x0055 */
- { CODEPAGE_ISUPPER, 0x0056, 0x0076 }, /* 0x0056 */
- { CODEPAGE_ISUPPER, 0x0057, 0x0077 }, /* 0x0057 */
- { CODEPAGE_ISUPPER, 0x0058, 0x0078 }, /* 0x0058 */
- { CODEPAGE_ISUPPER, 0x0059, 0x0079 }, /* 0x0059 */
- { CODEPAGE_ISUPPER, 0x005a, 0x007a }, /* 0x005a */
- { CODEPAGE_ISNONE, 0x005b, 0x005b }, /* 0x005b */
- { CODEPAGE_ISNONE, 0x005c, 0x005c }, /* 0x005c */
- { CODEPAGE_ISNONE, 0x005d, 0x005d }, /* 0x005d */
- { CODEPAGE_ISNONE, 0x005e, 0x005e }, /* 0x005e */
- { CODEPAGE_ISNONE, 0x005f, 0x005f }, /* 0x005f */
- { CODEPAGE_ISNONE, 0x0060, 0x0060 }, /* 0x0060 */
- { CODEPAGE_ISLOWER, 0x0041, 0x0061 }, /* 0x0061 */
- { CODEPAGE_ISLOWER, 0x0042, 0x0062 }, /* 0x0062 */
- { CODEPAGE_ISLOWER, 0x0043, 0x0063 }, /* 0x0063 */
- { CODEPAGE_ISLOWER, 0x0044, 0x0064 }, /* 0x0064 */
- { CODEPAGE_ISLOWER, 0x0045, 0x0065 }, /* 0x0065 */
- { CODEPAGE_ISLOWER, 0x0046, 0x0066 }, /* 0x0066 */
- { CODEPAGE_ISLOWER, 0x0047, 0x0067 }, /* 0x0067 */
- { CODEPAGE_ISLOWER, 0x0048, 0x0068 }, /* 0x0068 */
- { CODEPAGE_ISLOWER, 0x0049, 0x0069 }, /* 0x0069 */
- { CODEPAGE_ISLOWER, 0x004a, 0x006a }, /* 0x006a */
- { CODEPAGE_ISLOWER, 0x004b, 0x006b }, /* 0x006b */
- { CODEPAGE_ISLOWER, 0x004c, 0x006c }, /* 0x006c */
- { CODEPAGE_ISLOWER, 0x004d, 0x006d }, /* 0x006d */
- { CODEPAGE_ISLOWER, 0x004e, 0x006e }, /* 0x006e */
- { CODEPAGE_ISLOWER, 0x004f, 0x006f }, /* 0x006f */
- { CODEPAGE_ISLOWER, 0x0050, 0x0070 }, /* 0x0070 */
- { CODEPAGE_ISLOWER, 0x0051, 0x0071 }, /* 0x0071 */
- { CODEPAGE_ISLOWER, 0x0052, 0x0072 }, /* 0x0072 */
- { CODEPAGE_ISLOWER, 0x0053, 0x0073 }, /* 0x0073 */
- { CODEPAGE_ISLOWER, 0x0054, 0x0074 }, /* 0x0074 */
- { CODEPAGE_ISLOWER, 0x0055, 0x0075 }, /* 0x0075 */
- { CODEPAGE_ISLOWER, 0x0056, 0x0076 }, /* 0x0076 */
- { CODEPAGE_ISLOWER, 0x0057, 0x0077 }, /* 0x0077 */
- { CODEPAGE_ISLOWER, 0x0058, 0x0078 }, /* 0x0078 */
- { CODEPAGE_ISLOWER, 0x0059, 0x0079 }, /* 0x0079 */
- { CODEPAGE_ISLOWER, 0x005a, 0x007a }, /* 0x007a */
- { CODEPAGE_ISNONE, 0x007b, 0x007b }, /* 0x007b */
- { CODEPAGE_ISNONE, 0x007c, 0x007c }, /* 0x007c */
- { CODEPAGE_ISNONE, 0x007d, 0x007d }, /* 0x007d */
- { CODEPAGE_ISNONE, 0x007e, 0x007e }, /* 0x007e */
- { CODEPAGE_ISNONE, 0x007f, 0x007f }, /* 0x007f */
- { CODEPAGE_ISNONE, 0x0080, 0x0080 }, /* 0x0080 */
- { CODEPAGE_ISNONE, 0x0081, 0x0081 }, /* 0x0081 */
- { CODEPAGE_ISNONE, 0x0082, 0x0082 }, /* 0x0082 */
- { CODEPAGE_ISNONE, 0x0083, 0x0083 }, /* 0x0083 */
- { CODEPAGE_ISNONE, 0x0084, 0x0084 }, /* 0x0084 */
- { CODEPAGE_ISNONE, 0x0085, 0x0085 }, /* 0x0085 */
- { CODEPAGE_ISNONE, 0x0086, 0x0086 }, /* 0x0086 */
- { CODEPAGE_ISNONE, 0x0087, 0x0087 }, /* 0x0087 */
- { CODEPAGE_ISNONE, 0x0088, 0x0088 }, /* 0x0088 */
- { CODEPAGE_ISNONE, 0x0089, 0x0089 }, /* 0x0089 */
- { CODEPAGE_ISNONE, 0x008a, 0x008a }, /* 0x008a */
- { CODEPAGE_ISNONE, 0x008b, 0x008b }, /* 0x008b */
- { CODEPAGE_ISNONE, 0x008c, 0x008c }, /* 0x008c */
- { CODEPAGE_ISNONE, 0x008d, 0x008d }, /* 0x008d */
- { CODEPAGE_ISNONE, 0x008e, 0x008e }, /* 0x008e */
- { CODEPAGE_ISNONE, 0x008f, 0x008f }, /* 0x008f */
- { CODEPAGE_ISNONE, 0x0090, 0x0090 }, /* 0x0090 */
- { CODEPAGE_ISNONE, 0x0091, 0x0091 }, /* 0x0091 */
- { CODEPAGE_ISNONE, 0x0092, 0x0092 }, /* 0x0092 */
- { CODEPAGE_ISNONE, 0x0093, 0x0093 }, /* 0x0093 */
- { CODEPAGE_ISNONE, 0x0094, 0x0094 }, /* 0x0094 */
- { CODEPAGE_ISNONE, 0x0095, 0x0095 }, /* 0x0095 */
- { CODEPAGE_ISNONE, 0x0096, 0x0096 }, /* 0x0096 */
- { CODEPAGE_ISNONE, 0x0097, 0x0097 }, /* 0x0097 */
- { CODEPAGE_ISNONE, 0x0098, 0x0098 }, /* 0x0098 */
- { CODEPAGE_ISNONE, 0x0099, 0x0099 }, /* 0x0099 */
- { CODEPAGE_ISNONE, 0x009a, 0x009a }, /* 0x009a */
- { CODEPAGE_ISNONE, 0x009b, 0x009b }, /* 0x009b */
- { CODEPAGE_ISNONE, 0x009c, 0x009c }, /* 0x009c */
- { CODEPAGE_ISNONE, 0x009d, 0x009d }, /* 0x009d */
- { CODEPAGE_ISNONE, 0x009e, 0x009e }, /* 0x009e */
- { CODEPAGE_ISNONE, 0x009f, 0x009f }, /* 0x009f */
- { CODEPAGE_ISNONE, 0x00a0, 0x00a0 }, /* 0x00a0 */
- { CODEPAGE_ISNONE, 0x00a1, 0x00a1 }, /* 0x00a1 */
- { CODEPAGE_ISNONE, 0x00a2, 0x00a2 }, /* 0x00a2 */
- { CODEPAGE_ISNONE, 0x00a3, 0x00a3 }, /* 0x00a3 */
- { CODEPAGE_ISNONE, 0x00a4, 0x00a4 }, /* 0x00a4 */
- { CODEPAGE_ISNONE, 0x00a5, 0x00a5 }, /* 0x00a5 */
- { CODEPAGE_ISNONE, 0x00a6, 0x00a6 }, /* 0x00a6 */
- { CODEPAGE_ISNONE, 0x00a7, 0x00a7 }, /* 0x00a7 */
- { CODEPAGE_ISNONE, 0x00a8, 0x00a8 }, /* 0x00a8 */
- { CODEPAGE_ISNONE, 0x00a9, 0x00a9 }, /* 0x00a9 */
- { CODEPAGE_ISNONE, 0x00aa, 0x00aa }, /* 0x00aa */
- { CODEPAGE_ISNONE, 0x00ab, 0x00ab }, /* 0x00ab */
- { CODEPAGE_ISNONE, 0x00ac, 0x00ac }, /* 0x00ac */
- { CODEPAGE_ISNONE, 0x00ad, 0x00ad }, /* 0x00ad */
- { CODEPAGE_ISNONE, 0x00ae, 0x00ae }, /* 0x00ae */
- { CODEPAGE_ISNONE, 0x00af, 0x00af }, /* 0x00af */
- { CODEPAGE_ISNONE, 0x00b0, 0x00b0 }, /* 0x00b0 */
- { CODEPAGE_ISNONE, 0x00b1, 0x00b1 }, /* 0x00b1 */
- { CODEPAGE_ISNONE, 0x00b2, 0x00b2 }, /* 0x00b2 */
- { CODEPAGE_ISNONE, 0x00b3, 0x00b3 }, /* 0x00b3 */
- { CODEPAGE_ISNONE, 0x00b4, 0x00b4 }, /* 0x00b4 */
- { CODEPAGE_ISNONE, 0x00b5, 0x00b5 }, /* 0x00b5 */
- { CODEPAGE_ISNONE, 0x00b6, 0x00b6 }, /* 0x00b6 */
- { CODEPAGE_ISNONE, 0x00b7, 0x00b7 }, /* 0x00b7 */
- { CODEPAGE_ISNONE, 0x00b8, 0x00b8 }, /* 0x00b8 */
- { CODEPAGE_ISNONE, 0x00b9, 0x00b9 }, /* 0x00b9 */
- { CODEPAGE_ISNONE, 0x00ba, 0x00ba }, /* 0x00ba */
- { CODEPAGE_ISNONE, 0x00bb, 0x00bb }, /* 0x00bb */
- { CODEPAGE_ISNONE, 0x00bc, 0x00bc }, /* 0x00bc */
- { CODEPAGE_ISNONE, 0x00bd, 0x00bd }, /* 0x00bd */
- { CODEPAGE_ISNONE, 0x00be, 0x00be }, /* 0x00be */
- { CODEPAGE_ISNONE, 0x00bf, 0x00bf }, /* 0x00bf */
- { CODEPAGE_ISUPPER, 0x00c0, 0x00e0 }, /* 0x00c0 */
- { CODEPAGE_ISUPPER, 0x00c1, 0x00e1 }, /* 0x00c1 */
- { CODEPAGE_ISUPPER, 0x00c2, 0x00e2 }, /* 0x00c2 */
- { CODEPAGE_ISUPPER, 0x00c3, 0x00e3 }, /* 0x00c3 */
- { CODEPAGE_ISUPPER, 0x00c4, 0x00e4 }, /* 0x00c4 */
- { CODEPAGE_ISUPPER, 0x00c5, 0x00e5 }, /* 0x00c5 */
- { CODEPAGE_ISUPPER, 0x00c6, 0x00e6 }, /* 0x00c6 */
- { CODEPAGE_ISUPPER, 0x00c7, 0x00e7 }, /* 0x00c7 */
- { CODEPAGE_ISUPPER, 0x00c8, 0x00e8 }, /* 0x00c8 */
- { CODEPAGE_ISUPPER, 0x00c9, 0x00e9 }, /* 0x00c9 */
- { CODEPAGE_ISUPPER, 0x00ca, 0x00ea }, /* 0x00ca */
- { CODEPAGE_ISUPPER, 0x00cb, 0x00eb }, /* 0x00cb */
- { CODEPAGE_ISUPPER, 0x00cc, 0x00ec }, /* 0x00cc */
- { CODEPAGE_ISUPPER, 0x00cd, 0x00ed }, /* 0x00cd */
- { CODEPAGE_ISUPPER, 0x00ce, 0x00ee }, /* 0x00ce */
- { CODEPAGE_ISUPPER, 0x00cf, 0x00ef }, /* 0x00cf */
- { CODEPAGE_ISUPPER, 0x00d0, 0x00f0 }, /* 0x00d0 */
- { CODEPAGE_ISUPPER, 0x00d1, 0x00f1 }, /* 0x00d1 */
- { CODEPAGE_ISUPPER, 0x00d2, 0x00f2 }, /* 0x00d2 */
- { CODEPAGE_ISUPPER, 0x00d3, 0x00f3 }, /* 0x00d3 */
- { CODEPAGE_ISUPPER, 0x00d4, 0x00f4 }, /* 0x00d4 */
- { CODEPAGE_ISUPPER, 0x00d5, 0x00f5 }, /* 0x00d5 */
- { CODEPAGE_ISUPPER, 0x00d6, 0x00f6 }, /* 0x00d6 */
- { CODEPAGE_ISNONE, 0x00d7, 0x00d7 }, /* 0x00d7 */
- { CODEPAGE_ISUPPER, 0x00d8, 0x00f8 }, /* 0x00d8 */
- { CODEPAGE_ISUPPER, 0x00d9, 0x00f9 }, /* 0x00d9 */
- { CODEPAGE_ISUPPER, 0x00da, 0x00fa }, /* 0x00da */
- { CODEPAGE_ISUPPER, 0x00db, 0x00fb }, /* 0x00db */
- { CODEPAGE_ISUPPER, 0x00dc, 0x00fc }, /* 0x00dc */
- { CODEPAGE_ISUPPER, 0x00dd, 0x00fd }, /* 0x00dd */
- { CODEPAGE_ISUPPER, 0x00de, 0x00fe }, /* 0x00de */
- { CODEPAGE_ISNONE, 0x00df, 0x00df }, /* 0x00df */
- { CODEPAGE_ISLOWER, 0x00c0, 0x00e0 }, /* 0x00e0 */
- { CODEPAGE_ISLOWER, 0x00c1, 0x00e1 }, /* 0x00e1 */
- { CODEPAGE_ISLOWER, 0x00c2, 0x00e2 }, /* 0x00e2 */
- { CODEPAGE_ISLOWER, 0x00c3, 0x00e3 }, /* 0x00e3 */
- { CODEPAGE_ISLOWER, 0x00c4, 0x00e4 }, /* 0x00e4 */
- { CODEPAGE_ISLOWER, 0x00c5, 0x00e5 }, /* 0x00e5 */
- { CODEPAGE_ISLOWER, 0x00c6, 0x00e6 }, /* 0x00e6 */
- { CODEPAGE_ISLOWER, 0x00c7, 0x00e7 }, /* 0x00e7 */
- { CODEPAGE_ISLOWER, 0x00c8, 0x00e8 }, /* 0x00e8 */
- { CODEPAGE_ISLOWER, 0x00c9, 0x00e9 }, /* 0x00e9 */
- { CODEPAGE_ISLOWER, 0x00ca, 0x00ea }, /* 0x00ea */
- { CODEPAGE_ISLOWER, 0x00cb, 0x00eb }, /* 0x00eb */
- { CODEPAGE_ISLOWER, 0x00cc, 0x00ec }, /* 0x00ec */
- { CODEPAGE_ISLOWER, 0x00cd, 0x00ed }, /* 0x00ed */
- { CODEPAGE_ISLOWER, 0x00ce, 0x00ee }, /* 0x00ee */
- { CODEPAGE_ISLOWER, 0x00cf, 0x00ef }, /* 0x00ef */
- { CODEPAGE_ISLOWER, 0x00d0, 0x00f0 }, /* 0x00f0 */
- { CODEPAGE_ISLOWER, 0x00d1, 0x00f1 }, /* 0x00f1 */
- { CODEPAGE_ISLOWER, 0x00d2, 0x00f2 }, /* 0x00f2 */
- { CODEPAGE_ISLOWER, 0x00d3, 0x00f3 }, /* 0x00f3 */
- { CODEPAGE_ISLOWER, 0x00d4, 0x00f4 }, /* 0x00f4 */
- { CODEPAGE_ISLOWER, 0x00d5, 0x00f5 }, /* 0x00f5 */
- { CODEPAGE_ISLOWER, 0x00d6, 0x00f6 }, /* 0x00f6 */
- { CODEPAGE_ISNONE, 0x00f7, 0x00f7 }, /* 0x00f7 */
- { CODEPAGE_ISLOWER, 0x00d8, 0x00f8 }, /* 0x00f8 */
- { CODEPAGE_ISLOWER, 0x00d9, 0x00f9 }, /* 0x00f9 */
- { CODEPAGE_ISLOWER, 0x00da, 0x00fa }, /* 0x00fa */
- { CODEPAGE_ISLOWER, 0x00db, 0x00fb }, /* 0x00fb */
- { CODEPAGE_ISLOWER, 0x00dc, 0x00fc }, /* 0x00fc */
- { CODEPAGE_ISLOWER, 0x00dd, 0x00fd }, /* 0x00fd */
- { CODEPAGE_ISLOWER, 0x00de, 0x00fe }, /* 0x00fe */
- { CODEPAGE_ISNONE, 0x00ff, 0x00ff } /* 0x00ff */
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_CP_LATIN1_H */
diff --git a/usr/src/uts/common/smbsrv/cp_latin2.h b/usr/src/uts/common/smbsrv/cp_latin2.h
deleted file mode 100644
index 77f2e5a2a4..0000000000
--- a/usr/src/uts/common/smbsrv/cp_latin2.h
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SMBSRV_CP_LATIN2_H
-#define _SMBSRV_CP_LATIN2_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
- * This file specifies a codepage mapping for a given character set as
- * specified below:
- *
- * This is the codepage for the Latin-2 Character Set
- * (Central & Eastern Europe). This codepage defines
- * values for the special characters needed
- * for the written alphabets of the following languages: Czech,
- * Hungarian, Polish, Romanian, Croatian, Slovak,
- * Slovenian, and Sorbian
- * The Latin-2 character set is also known as iso-8859-2
- *
- */
-
-#include <smbsrv/codepage.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-codepage_t Latin2_codepage[256] = {
- { CODEPAGE_ISNONE, 0x0000, 0x0000 }, /* 0x0000 */
- { CODEPAGE_ISNONE, 0x0001, 0x0001 }, /* 0x0001 */
- { CODEPAGE_ISNONE, 0x0002, 0x0002 }, /* 0x0002 */
- { CODEPAGE_ISNONE, 0x0003, 0x0003 }, /* 0x0003 */
- { CODEPAGE_ISNONE, 0x0004, 0x0004 }, /* 0x0004 */
- { CODEPAGE_ISNONE, 0x0005, 0x0005 }, /* 0x0005 */
- { CODEPAGE_ISNONE, 0x0006, 0x0006 }, /* 0x0006 */
- { CODEPAGE_ISNONE, 0x0007, 0x0007 }, /* 0x0007 */
- { CODEPAGE_ISNONE, 0x0008, 0x0008 }, /* 0x0008 */
- { CODEPAGE_ISNONE, 0x0009, 0x0009 }, /* 0x0009 */
- { CODEPAGE_ISNONE, 0x000a, 0x000a }, /* 0x000a */
- { CODEPAGE_ISNONE, 0x000b, 0x000b }, /* 0x000b */
- { CODEPAGE_ISNONE, 0x000c, 0x000c }, /* 0x000c */
- { CODEPAGE_ISNONE, 0x000d, 0x000d }, /* 0x000d */
- { CODEPAGE_ISNONE, 0x000e, 0x000e }, /* 0x000e */
- { CODEPAGE_ISNONE, 0x000f, 0x000f }, /* 0x000f */
- { CODEPAGE_ISNONE, 0x0010, 0x0010 }, /* 0x0010 */
- { CODEPAGE_ISNONE, 0x0011, 0x0011 }, /* 0x0011 */
- { CODEPAGE_ISNONE, 0x0012, 0x0012 }, /* 0x0012 */
- { CODEPAGE_ISNONE, 0x0013, 0x0013 }, /* 0x0013 */
- { CODEPAGE_ISNONE, 0x0014, 0x0014 }, /* 0x0014 */
- { CODEPAGE_ISNONE, 0x0015, 0x0015 }, /* 0x0015 */
- { CODEPAGE_ISNONE, 0x0016, 0x0016 }, /* 0x0016 */
- { CODEPAGE_ISNONE, 0x0017, 0x0017 }, /* 0x0017 */
- { CODEPAGE_ISNONE, 0x0018, 0x0018 }, /* 0x0018 */
- { CODEPAGE_ISNONE, 0x0019, 0x0019 }, /* 0x0019 */
- { CODEPAGE_ISNONE, 0x001a, 0x001a }, /* 0x001a */
- { CODEPAGE_ISNONE, 0x001b, 0x001b }, /* 0x001b */
- { CODEPAGE_ISNONE, 0x001c, 0x001c }, /* 0x001c */
- { CODEPAGE_ISNONE, 0x001d, 0x001d }, /* 0x001d */
- { CODEPAGE_ISNONE, 0x001e, 0x001e }, /* 0x001e */
- { CODEPAGE_ISNONE, 0x001f, 0x001f }, /* 0x001f */
- { CODEPAGE_ISNONE, 0x0020, 0x0020 }, /* 0x0020 */
- { CODEPAGE_ISNONE, 0x0021, 0x0021 }, /* 0x0021 */
- { CODEPAGE_ISNONE, 0x0022, 0x0022 }, /* 0x0022 */
- { CODEPAGE_ISNONE, 0x0023, 0x0023 }, /* 0x0023 */
- { CODEPAGE_ISNONE, 0x0024, 0x0024 }, /* 0x0024 */
- { CODEPAGE_ISNONE, 0x0025, 0x0025 }, /* 0x0025 */
- { CODEPAGE_ISNONE, 0x0026, 0x0026 }, /* 0x0026 */
- { CODEPAGE_ISNONE, 0x0027, 0x0027 }, /* 0x0027 */
- { CODEPAGE_ISNONE, 0x0028, 0x0028 }, /* 0x0028 */
- { CODEPAGE_ISNONE, 0x0029, 0x0029 }, /* 0x0029 */
- { CODEPAGE_ISNONE, 0x002a, 0x002a }, /* 0x002a */
- { CODEPAGE_ISNONE, 0x002b, 0x002b }, /* 0x002b */
- { CODEPAGE_ISNONE, 0x002c, 0x002c }, /* 0x002c */
- { CODEPAGE_ISNONE, 0x002d, 0x002d }, /* 0x002d */
- { CODEPAGE_ISNONE, 0x002e, 0x002e }, /* 0x002e */
- { CODEPAGE_ISNONE, 0x002f, 0x002f }, /* 0x002f */
- { CODEPAGE_ISNONE, 0x0030, 0x0030 }, /* 0x0030 */
- { CODEPAGE_ISNONE, 0x0031, 0x0031 }, /* 0x0031 */
- { CODEPAGE_ISNONE, 0x0032, 0x0032 }, /* 0x0032 */
- { CODEPAGE_ISNONE, 0x0033, 0x0033 }, /* 0x0033 */
- { CODEPAGE_ISNONE, 0x0034, 0x0034 }, /* 0x0034 */
- { CODEPAGE_ISNONE, 0x0035, 0x0035 }, /* 0x0035 */
- { CODEPAGE_ISNONE, 0x0036, 0x0036 }, /* 0x0036 */
- { CODEPAGE_ISNONE, 0x0037, 0x0037 }, /* 0x0037 */
- { CODEPAGE_ISNONE, 0x0038, 0x0038 }, /* 0x0038 */
- { CODEPAGE_ISNONE, 0x0039, 0x0039 }, /* 0x0039 */
- { CODEPAGE_ISNONE, 0x003a, 0x003a }, /* 0x003a */
- { CODEPAGE_ISNONE, 0x003b, 0x003b }, /* 0x003b */
- { CODEPAGE_ISNONE, 0x003c, 0x003c }, /* 0x003c */
- { CODEPAGE_ISNONE, 0x003d, 0x003d }, /* 0x003d */
- { CODEPAGE_ISNONE, 0x003e, 0x003e }, /* 0x003e */
- { CODEPAGE_ISNONE, 0x003f, 0x003f }, /* 0x003f */
- { CODEPAGE_ISNONE, 0x0040, 0x0040 }, /* 0x0040 */
- { CODEPAGE_ISUPPER, 0x0041, 0x0061 }, /* 0x0041 */
- { CODEPAGE_ISUPPER, 0x0042, 0x0062 }, /* 0x0042 */
- { CODEPAGE_ISUPPER, 0x0043, 0x0063 }, /* 0x0043 */
- { CODEPAGE_ISUPPER, 0x0044, 0x0064 }, /* 0x0044 */
- { CODEPAGE_ISUPPER, 0x0045, 0x0065 }, /* 0x0045 */
- { CODEPAGE_ISUPPER, 0x0046, 0x0066 }, /* 0x0046 */
- { CODEPAGE_ISUPPER, 0x0047, 0x0067 }, /* 0x0047 */
- { CODEPAGE_ISUPPER, 0x0048, 0x0068 }, /* 0x0048 */
- { CODEPAGE_ISUPPER, 0x0049, 0x0069 }, /* 0x0049 */
- { CODEPAGE_ISUPPER, 0x004a, 0x006a }, /* 0x004a */
- { CODEPAGE_ISUPPER, 0x004b, 0x006b }, /* 0x004b */
- { CODEPAGE_ISUPPER, 0x004c, 0x006c }, /* 0x004c */
- { CODEPAGE_ISUPPER, 0x004d, 0x006d }, /* 0x004d */
- { CODEPAGE_ISUPPER, 0x004e, 0x006e }, /* 0x004e */
- { CODEPAGE_ISUPPER, 0x004f, 0x006f }, /* 0x004f */
- { CODEPAGE_ISUPPER, 0x0050, 0x0070 }, /* 0x0050 */
- { CODEPAGE_ISUPPER, 0x0051, 0x0071 }, /* 0x0051 */
- { CODEPAGE_ISUPPER, 0x0052, 0x0072 }, /* 0x0052 */
- { CODEPAGE_ISUPPER, 0x0053, 0x0073 }, /* 0x0053 */
- { CODEPAGE_ISUPPER, 0x0054, 0x0074 }, /* 0x0054 */
- { CODEPAGE_ISUPPER, 0x0055, 0x0075 }, /* 0x0055 */
- { CODEPAGE_ISUPPER, 0x0056, 0x0076 }, /* 0x0056 */
- { CODEPAGE_ISUPPER, 0x0057, 0x0077 }, /* 0x0057 */
- { CODEPAGE_ISUPPER, 0x0058, 0x0078 }, /* 0x0058 */
- { CODEPAGE_ISUPPER, 0x0059, 0x0079 }, /* 0x0059 */
- { CODEPAGE_ISUPPER, 0x005a, 0x007a }, /* 0x005a */
- { CODEPAGE_ISNONE, 0x005b, 0x005b }, /* 0x005b */
- { CODEPAGE_ISNONE, 0x005c, 0x005c }, /* 0x005c */
- { CODEPAGE_ISNONE, 0x005d, 0x005d }, /* 0x005d */
- { CODEPAGE_ISNONE, 0x005e, 0x005e }, /* 0x005e */
- { CODEPAGE_ISNONE, 0x005f, 0x005f }, /* 0x005f */
- { CODEPAGE_ISNONE, 0x0060, 0x0060 }, /* 0x0060 */
- { CODEPAGE_ISLOWER, 0x0041, 0x0061 }, /* 0x0061 */
- { CODEPAGE_ISLOWER, 0x0042, 0x0062 }, /* 0x0062 */
- { CODEPAGE_ISLOWER, 0x0043, 0x0063 }, /* 0x0063 */
- { CODEPAGE_ISLOWER, 0x0044, 0x0064 }, /* 0x0064 */
- { CODEPAGE_ISLOWER, 0x0045, 0x0065 }, /* 0x0065 */
- { CODEPAGE_ISLOWER, 0x0046, 0x0066 }, /* 0x0066 */
- { CODEPAGE_ISLOWER, 0x0047, 0x0067 }, /* 0x0067 */
- { CODEPAGE_ISLOWER, 0x0048, 0x0068 }, /* 0x0068 */
- { CODEPAGE_ISLOWER, 0x0049, 0x0069 }, /* 0x0069 */
- { CODEPAGE_ISLOWER, 0x004a, 0x006a }, /* 0x006a */
- { CODEPAGE_ISLOWER, 0x004b, 0x006b }, /* 0x006b */
- { CODEPAGE_ISLOWER, 0x004c, 0x006c }, /* 0x006c */
- { CODEPAGE_ISLOWER, 0x004d, 0x006d }, /* 0x006d */
- { CODEPAGE_ISLOWER, 0x004e, 0x006e }, /* 0x006e */
- { CODEPAGE_ISLOWER, 0x004f, 0x006f }, /* 0x006f */
- { CODEPAGE_ISLOWER, 0x0050, 0x0070 }, /* 0x0070 */
- { CODEPAGE_ISLOWER, 0x0051, 0x0071 }, /* 0x0071 */
- { CODEPAGE_ISLOWER, 0x0052, 0x0072 }, /* 0x0072 */
- { CODEPAGE_ISLOWER, 0x0053, 0x0073 }, /* 0x0073 */
- { CODEPAGE_ISLOWER, 0x0054, 0x0074 }, /* 0x0074 */
- { CODEPAGE_ISLOWER, 0x0055, 0x0075 }, /* 0x0075 */
- { CODEPAGE_ISLOWER, 0x0056, 0x0076 }, /* 0x0076 */
- { CODEPAGE_ISLOWER, 0x0057, 0x0077 }, /* 0x0077 */
- { CODEPAGE_ISLOWER, 0x0058, 0x0078 }, /* 0x0078 */
- { CODEPAGE_ISLOWER, 0x0059, 0x0079 }, /* 0x0079 */
- { CODEPAGE_ISLOWER, 0x005a, 0x007a }, /* 0x007a */
- { CODEPAGE_ISNONE, 0x007b, 0x007b }, /* 0x007b */
- { CODEPAGE_ISNONE, 0x007c, 0x007c }, /* 0x007c */
- { CODEPAGE_ISNONE, 0x007d, 0x007d }, /* 0x007d */
- { CODEPAGE_ISNONE, 0x007e, 0x007e }, /* 0x007e */
- { CODEPAGE_ISNONE, 0x007f, 0x007f }, /* 0x007f */
- { CODEPAGE_ISNONE, 0x0080, 0x0080 }, /* 0x0080 */
- { CODEPAGE_ISNONE, 0x0081, 0x0081 }, /* 0x0081 */
- { CODEPAGE_ISNONE, 0x0082, 0x0082 }, /* 0x0082 */
- { CODEPAGE_ISNONE, 0x0083, 0x0083 }, /* 0x0083 */
- { CODEPAGE_ISNONE, 0x0084, 0x0084 }, /* 0x0084 */
- { CODEPAGE_ISNONE, 0x0085, 0x0085 }, /* 0x0085 */
- { CODEPAGE_ISNONE, 0x0086, 0x0086 }, /* 0x0086 */
- { CODEPAGE_ISNONE, 0x0087, 0x0087 }, /* 0x0087 */
- { CODEPAGE_ISNONE, 0x0088, 0x0088 }, /* 0x0088 */
- { CODEPAGE_ISNONE, 0x0089, 0x0089 }, /* 0x0089 */
- { CODEPAGE_ISNONE, 0x008a, 0x008a }, /* 0x008a */
- { CODEPAGE_ISNONE, 0x008b, 0x008b }, /* 0x008b */
- { CODEPAGE_ISNONE, 0x008c, 0x008c }, /* 0x008c */
- { CODEPAGE_ISNONE, 0x008d, 0x008d }, /* 0x008d */
- { CODEPAGE_ISNONE, 0x008e, 0x008e }, /* 0x008e */
- { CODEPAGE_ISNONE, 0x008f, 0x008f }, /* 0x008f */
- { CODEPAGE_ISNONE, 0x0090, 0x0090 }, /* 0x0090 */
- { CODEPAGE_ISNONE, 0x0091, 0x0091 }, /* 0x0091 */
- { CODEPAGE_ISNONE, 0x0092, 0x0092 }, /* 0x0092 */
- { CODEPAGE_ISNONE, 0x0093, 0x0093 }, /* 0x0093 */
- { CODEPAGE_ISNONE, 0x0094, 0x0094 }, /* 0x0094 */
- { CODEPAGE_ISNONE, 0x0095, 0x0095 }, /* 0x0095 */
- { CODEPAGE_ISNONE, 0x0096, 0x0096 }, /* 0x0096 */
- { CODEPAGE_ISNONE, 0x0097, 0x0097 }, /* 0x0097 */
- { CODEPAGE_ISNONE, 0x0098, 0x0098 }, /* 0x0098 */
- { CODEPAGE_ISNONE, 0x0099, 0x0099 }, /* 0x0099 */
- { CODEPAGE_ISNONE, 0x009a, 0x009a }, /* 0x009a */
- { CODEPAGE_ISNONE, 0x009b, 0x009b }, /* 0x009b */
- { CODEPAGE_ISNONE, 0x009c, 0x009c }, /* 0x009c */
- { CODEPAGE_ISNONE, 0x009d, 0x009d }, /* 0x009d */
- { CODEPAGE_ISNONE, 0x009e, 0x009e }, /* 0x009e */
- { CODEPAGE_ISNONE, 0x009f, 0x009f }, /* 0x009f */
- { CODEPAGE_ISNONE, 0x00a0, 0x00a0 }, /* 0x00a0 */
- { CODEPAGE_ISUPPER, 0x00a1, 0x00b1 }, /* 0x00a1 */
- { CODEPAGE_ISNONE, 0x00a2, 0x00a2 }, /* 0x00a2 */
- { CODEPAGE_ISUPPER, 0x00a3, 0x00b3 }, /* 0x00a3 */
- { CODEPAGE_ISNONE, 0x00a4, 0x00a4 }, /* 0x00a4 */
- { CODEPAGE_ISUPPER, 0x00a5, 0x00b5 }, /* 0x00a5 */
- { CODEPAGE_ISUPPER, 0x00a6, 0x00b6 }, /* 0x00a6 */
- { CODEPAGE_ISNONE, 0x00a7, 0x00a7 }, /* 0x00a7 */
- { CODEPAGE_ISNONE, 0x00a8, 0x00a8 }, /* 0x00a8 */
- { CODEPAGE_ISUPPER, 0x00a9, 0x00b9 }, /* 0x00a9 */
- { CODEPAGE_ISUPPER, 0x00aa, 0x00ba }, /* 0x00aa */
- { CODEPAGE_ISUPPER, 0x00ab, 0x00bb }, /* 0x00ab */
- { CODEPAGE_ISUPPER, 0x00ac, 0x00bc }, /* 0x00ac */
- { CODEPAGE_ISNONE, 0x00ad, 0x00ad }, /* 0x00ad */
- { CODEPAGE_ISUPPER, 0x00ae, 0x00be }, /* 0x00ae */
- { CODEPAGE_ISUPPER, 0x00af, 0x00bf }, /* 0x00af */
- { CODEPAGE_ISNONE, 0x00b0, 0x00b0 }, /* 0x00b0 */
- { CODEPAGE_ISLOWER, 0x00a1, 0x00b1 }, /* 0x00b1 */
- { CODEPAGE_ISNONE, 0x00b2, 0x00b2 }, /* 0x00b2 */
- { CODEPAGE_ISLOWER, 0x00a3, 0x00b3 }, /* 0x00b3 */
- { CODEPAGE_ISNONE, 0x00b4, 0x00b4 }, /* 0x00b4 */
- { CODEPAGE_ISLOWER, 0x00a5, 0x00b5 }, /* 0x00b5 */
- { CODEPAGE_ISLOWER, 0x00a6, 0x00b6 }, /* 0x00b6 */
- { CODEPAGE_ISNONE, 0x00b7, 0x00b7 }, /* 0x00b7 */
- { CODEPAGE_ISNONE, 0x00b8, 0x00b8 }, /* 0x00b8 */
- { CODEPAGE_ISLOWER, 0x00a9, 0x00b9 }, /* 0x00b9 */
- { CODEPAGE_ISLOWER, 0x00aa, 0x00ba }, /* 0x00ba */
- { CODEPAGE_ISLOWER, 0x00ab, 0x00bb }, /* 0x00bb */
- { CODEPAGE_ISLOWER, 0x00ac, 0x00bc }, /* 0x00bc */
- { CODEPAGE_ISNONE, 0x00bd, 0x00bd }, /* 0x00bd */
- { CODEPAGE_ISLOWER, 0x00ae, 0x00be }, /* 0x00be */
- { CODEPAGE_ISLOWER, 0x00af, 0x00bf }, /* 0x00bf */
- { CODEPAGE_ISUPPER, 0x00c0, 0x00e0 }, /* 0x00c0 */
- { CODEPAGE_ISUPPER, 0x00c1, 0x00e1 }, /* 0x00c1 */
- { CODEPAGE_ISUPPER, 0x00c2, 0x00e2 }, /* 0x00c2 */
- { CODEPAGE_ISUPPER, 0x00c3, 0x00e3 }, /* 0x00c3 */
- { CODEPAGE_ISUPPER, 0x00c4, 0x00e4 }, /* 0x00c4 */
- { CODEPAGE_ISUPPER, 0x00c5, 0x00e5 }, /* 0x00c5 */
- { CODEPAGE_ISUPPER, 0x00c6, 0x00e6 }, /* 0x00c6 */
- { CODEPAGE_ISUPPER, 0x00c7, 0x00e7 }, /* 0x00c7 */
- { CODEPAGE_ISUPPER, 0x00c8, 0x00e8 }, /* 0x00c8 */
- { CODEPAGE_ISUPPER, 0x00c9, 0x00e9 }, /* 0x00c9 */
- { CODEPAGE_ISUPPER, 0x00ca, 0x00ea }, /* 0x00ca */
- { CODEPAGE_ISUPPER, 0x00cb, 0x00eb }, /* 0x00cb */
- { CODEPAGE_ISUPPER, 0x00cc, 0x00ec }, /* 0x00cc */
- { CODEPAGE_ISUPPER, 0x00cd, 0x00ed }, /* 0x00cd */
- { CODEPAGE_ISUPPER, 0x00ce, 0x00ee }, /* 0x00ce */
- { CODEPAGE_ISUPPER, 0x00cf, 0x00ef }, /* 0x00cf */
- { CODEPAGE_ISUPPER, 0x00d0, 0x00f0 }, /* 0x00d0 */
- { CODEPAGE_ISUPPER, 0x00d1, 0x00f1 }, /* 0x00d1 */
- { CODEPAGE_ISUPPER, 0x00d2, 0x00f2 }, /* 0x00d2 */
- { CODEPAGE_ISUPPER, 0x00d3, 0x00f3 }, /* 0x00d3 */
- { CODEPAGE_ISUPPER, 0x00d4, 0x00f4 }, /* 0x00d4 */
- { CODEPAGE_ISUPPER, 0x00d5, 0x00f5 }, /* 0x00d5 */
- { CODEPAGE_ISUPPER, 0x00d6, 0x00f6 }, /* 0x00d6 */
- { CODEPAGE_ISNONE, 0x00d7, 0x00d7 }, /* 0x00d7 */
- { CODEPAGE_ISUPPER, 0x00d8, 0x00f8 }, /* 0x00d8 */
- { CODEPAGE_ISUPPER, 0x00d9, 0x00f9 }, /* 0x00d9 */
- { CODEPAGE_ISUPPER, 0x00da, 0x00fa }, /* 0x00da */
- { CODEPAGE_ISUPPER, 0x00db, 0x00fb }, /* 0x00db */
- { CODEPAGE_ISUPPER, 0x00dc, 0x00fc }, /* 0x00dc */
- { CODEPAGE_ISUPPER, 0x00dd, 0x00fd }, /* 0x00dd */
- { CODEPAGE_ISUPPER, 0x00de, 0x00fe }, /* 0x00de */
- { CODEPAGE_ISNONE, 0x00df, 0x00df }, /* 0x00df */
- { CODEPAGE_ISLOWER, 0x00c0, 0x00e0 }, /* 0x00e0 */
- { CODEPAGE_ISLOWER, 0x00c1, 0x00e1 }, /* 0x00e1 */
- { CODEPAGE_ISLOWER, 0x00c2, 0x00e2 }, /* 0x00e2 */
- { CODEPAGE_ISLOWER, 0x00c3, 0x00e3 }, /* 0x00e3 */
- { CODEPAGE_ISLOWER, 0x00c4, 0x00e4 }, /* 0x00e4 */
- { CODEPAGE_ISLOWER, 0x00c5, 0x00e5 }, /* 0x00e5 */
- { CODEPAGE_ISLOWER, 0x00c6, 0x00e6 }, /* 0x00e6 */
- { CODEPAGE_ISLOWER, 0x00c7, 0x00e7 }, /* 0x00e7 */
- { CODEPAGE_ISLOWER, 0x00c8, 0x00e8 }, /* 0x00e8 */
- { CODEPAGE_ISLOWER, 0x00c9, 0x00e9 }, /* 0x00e9 */
- { CODEPAGE_ISLOWER, 0x00ca, 0x00ea }, /* 0x00ea */
- { CODEPAGE_ISLOWER, 0x00cb, 0x00eb }, /* 0x00eb */
- { CODEPAGE_ISLOWER, 0x00cc, 0x00ec }, /* 0x00ec */
- { CODEPAGE_ISLOWER, 0x00cd, 0x00ed }, /* 0x00ed */
- { CODEPAGE_ISLOWER, 0x00ce, 0x00ee }, /* 0x00ee */
- { CODEPAGE_ISLOWER, 0x00cf, 0x00ef }, /* 0x00ef */
- { CODEPAGE_ISLOWER, 0x00d0, 0x00f0 }, /* 0x00f0 */
- { CODEPAGE_ISLOWER, 0x00d1, 0x00f1 }, /* 0x00f1 */
- { CODEPAGE_ISLOWER, 0x00d2, 0x00f2 }, /* 0x00f2 */
- { CODEPAGE_ISLOWER, 0x00d3, 0x00f3 }, /* 0x00f3 */
- { CODEPAGE_ISLOWER, 0x00d4, 0x00f4 }, /* 0x00f4 */
- { CODEPAGE_ISLOWER, 0x00d5, 0x00f5 }, /* 0x00f5 */
- { CODEPAGE_ISLOWER, 0x00d6, 0x00f6 }, /* 0x00f6 */
- { CODEPAGE_ISNONE, 0x00f7, 0x00f7 }, /* 0x00f7 */
- { CODEPAGE_ISLOWER, 0x00d8, 0x00f8 }, /* 0x00f8 */
- { CODEPAGE_ISLOWER, 0x00d9, 0x00f9 }, /* 0x00f9 */
- { CODEPAGE_ISLOWER, 0x00da, 0x00fa }, /* 0x00fa */
- { CODEPAGE_ISLOWER, 0x00db, 0x00fb }, /* 0x00fb */
- { CODEPAGE_ISLOWER, 0x00dc, 0x00fc }, /* 0x00fc */
- { CODEPAGE_ISLOWER, 0x00dd, 0x00fd }, /* 0x00fd */
- { CODEPAGE_ISLOWER, 0x00de, 0x00fe }, /* 0x00fe */
- { CODEPAGE_ISNONE, 0x00ff, 0x00ff } /* 0x00ff */
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_CP_LATIN2_H */
diff --git a/usr/src/uts/common/smbsrv/cp_latin3.h b/usr/src/uts/common/smbsrv/cp_latin3.h
deleted file mode 100644
index afc7ae4355..0000000000
--- a/usr/src/uts/common/smbsrv/cp_latin3.h
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SMBSRV_CP_LATIN3_H
-#define _SMBSRV_CP_LATIN3_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
- * This file specifies a codepage mapping for a given character set as
- * specified below:
- *
- * This is the codepage for Latin-3 Character Set
- * This codepage defines values for the special characters
- * needed for the written alphabets of the following
- * languages: Esperanto and Maltese.
- * The Latin-3 character set is also known as iso-8859-3
- */
-
-#include <smbsrv/codepage.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-codepage_t Latin3_codepage[256] = {
- { CODEPAGE_ISNONE, 0x0000, 0x0000 }, /* 0x0000 */
- { CODEPAGE_ISNONE, 0x0001, 0x0001 }, /* 0x0001 */
- { CODEPAGE_ISNONE, 0x0002, 0x0002 }, /* 0x0002 */
- { CODEPAGE_ISNONE, 0x0003, 0x0003 }, /* 0x0003 */
- { CODEPAGE_ISNONE, 0x0004, 0x0004 }, /* 0x0004 */
- { CODEPAGE_ISNONE, 0x0005, 0x0005 }, /* 0x0005 */
- { CODEPAGE_ISNONE, 0x0006, 0x0006 }, /* 0x0006 */
- { CODEPAGE_ISNONE, 0x0007, 0x0007 }, /* 0x0007 */
- { CODEPAGE_ISNONE, 0x0008, 0x0008 }, /* 0x0008 */
- { CODEPAGE_ISNONE, 0x0009, 0x0009 }, /* 0x0009 */
- { CODEPAGE_ISNONE, 0x000a, 0x000a }, /* 0x000a */
- { CODEPAGE_ISNONE, 0x000b, 0x000b }, /* 0x000b */
- { CODEPAGE_ISNONE, 0x000c, 0x000c }, /* 0x000c */
- { CODEPAGE_ISNONE, 0x000d, 0x000d }, /* 0x000d */
- { CODEPAGE_ISNONE, 0x000e, 0x000e }, /* 0x000e */
- { CODEPAGE_ISNONE, 0x000f, 0x000f }, /* 0x000f */
- { CODEPAGE_ISNONE, 0x0010, 0x0010 }, /* 0x0010 */
- { CODEPAGE_ISNONE, 0x0011, 0x0011 }, /* 0x0011 */
- { CODEPAGE_ISNONE, 0x0012, 0x0012 }, /* 0x0012 */
- { CODEPAGE_ISNONE, 0x0013, 0x0013 }, /* 0x0013 */
- { CODEPAGE_ISNONE, 0x0014, 0x0014 }, /* 0x0014 */
- { CODEPAGE_ISNONE, 0x0015, 0x0015 }, /* 0x0015 */
- { CODEPAGE_ISNONE, 0x0016, 0x0016 }, /* 0x0016 */
- { CODEPAGE_ISNONE, 0x0017, 0x0017 }, /* 0x0017 */
- { CODEPAGE_ISNONE, 0x0018, 0x0018 }, /* 0x0018 */
- { CODEPAGE_ISNONE, 0x0019, 0x0019 }, /* 0x0019 */
- { CODEPAGE_ISNONE, 0x001a, 0x001a }, /* 0x001a */
- { CODEPAGE_ISNONE, 0x001b, 0x001b }, /* 0x001b */
- { CODEPAGE_ISNONE, 0x001c, 0x001c }, /* 0x001c */
- { CODEPAGE_ISNONE, 0x001d, 0x001d }, /* 0x001d */
- { CODEPAGE_ISNONE, 0x001e, 0x001e }, /* 0x001e */
- { CODEPAGE_ISNONE, 0x001f, 0x001f }, /* 0x001f */
- { CODEPAGE_ISNONE, 0x0020, 0x0020 }, /* 0x0020 */
- { CODEPAGE_ISNONE, 0x0021, 0x0021 }, /* 0x0021 */
- { CODEPAGE_ISNONE, 0x0022, 0x0022 }, /* 0x0022 */
- { CODEPAGE_ISNONE, 0x0023, 0x0023 }, /* 0x0023 */
- { CODEPAGE_ISNONE, 0x0024, 0x0024 }, /* 0x0024 */
- { CODEPAGE_ISNONE, 0x0025, 0x0025 }, /* 0x0025 */
- { CODEPAGE_ISNONE, 0x0026, 0x0026 }, /* 0x0026 */
- { CODEPAGE_ISNONE, 0x0027, 0x0027 }, /* 0x0027 */
- { CODEPAGE_ISNONE, 0x0028, 0x0028 }, /* 0x0028 */
- { CODEPAGE_ISNONE, 0x0029, 0x0029 }, /* 0x0029 */
- { CODEPAGE_ISNONE, 0x002a, 0x002a }, /* 0x002a */
- { CODEPAGE_ISNONE, 0x002b, 0x002b }, /* 0x002b */
- { CODEPAGE_ISNONE, 0x002c, 0x002c }, /* 0x002c */
- { CODEPAGE_ISNONE, 0x002d, 0x002d }, /* 0x002d */
- { CODEPAGE_ISNONE, 0x002e, 0x002e }, /* 0x002e */
- { CODEPAGE_ISNONE, 0x002f, 0x002f }, /* 0x002f */
- { CODEPAGE_ISNONE, 0x0030, 0x0030 }, /* 0x0030 */
- { CODEPAGE_ISNONE, 0x0031, 0x0031 }, /* 0x0031 */
- { CODEPAGE_ISNONE, 0x0032, 0x0032 }, /* 0x0032 */
- { CODEPAGE_ISNONE, 0x0033, 0x0033 }, /* 0x0033 */
- { CODEPAGE_ISNONE, 0x0034, 0x0034 }, /* 0x0034 */
- { CODEPAGE_ISNONE, 0x0035, 0x0035 }, /* 0x0035 */
- { CODEPAGE_ISNONE, 0x0036, 0x0036 }, /* 0x0036 */
- { CODEPAGE_ISNONE, 0x0037, 0x0037 }, /* 0x0037 */
- { CODEPAGE_ISNONE, 0x0038, 0x0038 }, /* 0x0038 */
- { CODEPAGE_ISNONE, 0x0039, 0x0039 }, /* 0x0039 */
- { CODEPAGE_ISNONE, 0x003a, 0x003a }, /* 0x003a */
- { CODEPAGE_ISNONE, 0x003b, 0x003b }, /* 0x003b */
- { CODEPAGE_ISNONE, 0x003c, 0x003c }, /* 0x003c */
- { CODEPAGE_ISNONE, 0x003d, 0x003d }, /* 0x003d */
- { CODEPAGE_ISNONE, 0x003e, 0x003e }, /* 0x003e */
- { CODEPAGE_ISNONE, 0x003f, 0x003f }, /* 0x003f */
- { CODEPAGE_ISNONE, 0x0040, 0x0040 }, /* 0x0040 */
- { CODEPAGE_ISUPPER, 0x0041, 0x0061 }, /* 0x0041 */
- { CODEPAGE_ISUPPER, 0x0042, 0x0062 }, /* 0x0042 */
- { CODEPAGE_ISUPPER, 0x0043, 0x0063 }, /* 0x0043 */
- { CODEPAGE_ISUPPER, 0x0044, 0x0064 }, /* 0x0044 */
- { CODEPAGE_ISUPPER, 0x0045, 0x0065 }, /* 0x0045 */
- { CODEPAGE_ISUPPER, 0x0046, 0x0066 }, /* 0x0046 */
- { CODEPAGE_ISUPPER, 0x0047, 0x0067 }, /* 0x0047 */
- { CODEPAGE_ISUPPER, 0x0048, 0x0068 }, /* 0x0048 */
- { CODEPAGE_ISUPPER, 0x0049, 0x0069 }, /* 0x0049 */
- { CODEPAGE_ISUPPER, 0x004a, 0x006a }, /* 0x004a */
- { CODEPAGE_ISUPPER, 0x004b, 0x006b }, /* 0x004b */
- { CODEPAGE_ISUPPER, 0x004c, 0x006c }, /* 0x004c */
- { CODEPAGE_ISUPPER, 0x004d, 0x006d }, /* 0x004d */
- { CODEPAGE_ISUPPER, 0x004e, 0x006e }, /* 0x004e */
- { CODEPAGE_ISUPPER, 0x004f, 0x006f }, /* 0x004f */
- { CODEPAGE_ISUPPER, 0x0050, 0x0070 }, /* 0x0050 */
- { CODEPAGE_ISUPPER, 0x0051, 0x0071 }, /* 0x0051 */
- { CODEPAGE_ISUPPER, 0x0052, 0x0072 }, /* 0x0052 */
- { CODEPAGE_ISUPPER, 0x0053, 0x0073 }, /* 0x0053 */
- { CODEPAGE_ISUPPER, 0x0054, 0x0074 }, /* 0x0054 */
- { CODEPAGE_ISUPPER, 0x0055, 0x0075 }, /* 0x0055 */
- { CODEPAGE_ISUPPER, 0x0056, 0x0076 }, /* 0x0056 */
- { CODEPAGE_ISUPPER, 0x0057, 0x0077 }, /* 0x0057 */
- { CODEPAGE_ISUPPER, 0x0058, 0x0078 }, /* 0x0058 */
- { CODEPAGE_ISUPPER, 0x0059, 0x0079 }, /* 0x0059 */
- { CODEPAGE_ISUPPER, 0x005a, 0x007a }, /* 0x005a */
- { CODEPAGE_ISNONE, 0x005b, 0x005b }, /* 0x005b */
- { CODEPAGE_ISNONE, 0x005c, 0x005c }, /* 0x005c */
- { CODEPAGE_ISNONE, 0x005d, 0x005d }, /* 0x005d */
- { CODEPAGE_ISNONE, 0x005e, 0x005e }, /* 0x005e */
- { CODEPAGE_ISNONE, 0x005f, 0x005f }, /* 0x005f */
- { CODEPAGE_ISNONE, 0x0060, 0x0060 }, /* 0x0060 */
- { CODEPAGE_ISLOWER, 0x0041, 0x0061 }, /* 0x0061 */
- { CODEPAGE_ISLOWER, 0x0042, 0x0062 }, /* 0x0062 */
- { CODEPAGE_ISLOWER, 0x0043, 0x0063 }, /* 0x0063 */
- { CODEPAGE_ISLOWER, 0x0044, 0x0064 }, /* 0x0064 */
- { CODEPAGE_ISLOWER, 0x0045, 0x0065 }, /* 0x0065 */
- { CODEPAGE_ISLOWER, 0x0046, 0x0066 }, /* 0x0066 */
- { CODEPAGE_ISLOWER, 0x0047, 0x0067 }, /* 0x0067 */
- { CODEPAGE_ISLOWER, 0x0048, 0x0068 }, /* 0x0068 */
- { CODEPAGE_ISLOWER, 0x0049, 0x0069 }, /* 0x0069 */
- { CODEPAGE_ISLOWER, 0x004a, 0x006a }, /* 0x006a */
- { CODEPAGE_ISLOWER, 0x004b, 0x006b }, /* 0x006b */
- { CODEPAGE_ISLOWER, 0x004c, 0x006c }, /* 0x006c */
- { CODEPAGE_ISLOWER, 0x004d, 0x006d }, /* 0x006d */
- { CODEPAGE_ISLOWER, 0x004e, 0x006e }, /* 0x006e */
- { CODEPAGE_ISLOWER, 0x004f, 0x006f }, /* 0x006f */
- { CODEPAGE_ISLOWER, 0x0050, 0x0070 }, /* 0x0070 */
- { CODEPAGE_ISLOWER, 0x0051, 0x0071 }, /* 0x0071 */
- { CODEPAGE_ISLOWER, 0x0052, 0x0072 }, /* 0x0072 */
- { CODEPAGE_ISLOWER, 0x0053, 0x0073 }, /* 0x0073 */
- { CODEPAGE_ISLOWER, 0x0054, 0x0074 }, /* 0x0074 */
- { CODEPAGE_ISLOWER, 0x0055, 0x0075 }, /* 0x0075 */
- { CODEPAGE_ISLOWER, 0x0056, 0x0076 }, /* 0x0076 */
- { CODEPAGE_ISLOWER, 0x0057, 0x0077 }, /* 0x0077 */
- { CODEPAGE_ISLOWER, 0x0058, 0x0078 }, /* 0x0078 */
- { CODEPAGE_ISLOWER, 0x0059, 0x0079 }, /* 0x0079 */
- { CODEPAGE_ISLOWER, 0x005a, 0x007a }, /* 0x007a */
- { CODEPAGE_ISNONE, 0x007b, 0x007b }, /* 0x007b */
- { CODEPAGE_ISNONE, 0x007c, 0x007c }, /* 0x007c */
- { CODEPAGE_ISNONE, 0x007d, 0x007d }, /* 0x007d */
- { CODEPAGE_ISNONE, 0x007e, 0x007e }, /* 0x007e */
- { CODEPAGE_ISNONE, 0x007f, 0x007f }, /* 0x007f */
- { CODEPAGE_ISNONE, 0x0080, 0x0080 }, /* 0x0080 */
- { CODEPAGE_ISNONE, 0x0081, 0x0081 }, /* 0x0081 */
- { CODEPAGE_ISNONE, 0x0082, 0x0082 }, /* 0x0082 */
- { CODEPAGE_ISNONE, 0x0083, 0x0083 }, /* 0x0083 */
- { CODEPAGE_ISNONE, 0x0084, 0x0084 }, /* 0x0084 */
- { CODEPAGE_ISNONE, 0x0085, 0x0085 }, /* 0x0085 */
- { CODEPAGE_ISNONE, 0x0086, 0x0086 }, /* 0x0086 */
- { CODEPAGE_ISNONE, 0x0087, 0x0087 }, /* 0x0087 */
- { CODEPAGE_ISNONE, 0x0088, 0x0088 }, /* 0x0088 */
- { CODEPAGE_ISNONE, 0x0089, 0x0089 }, /* 0x0089 */
- { CODEPAGE_ISNONE, 0x008a, 0x008a }, /* 0x008a */
- { CODEPAGE_ISNONE, 0x008b, 0x008b }, /* 0x008b */
- { CODEPAGE_ISNONE, 0x008c, 0x008c }, /* 0x008c */
- { CODEPAGE_ISNONE, 0x008d, 0x008d }, /* 0x008d */
- { CODEPAGE_ISNONE, 0x008e, 0x008e }, /* 0x008e */
- { CODEPAGE_ISNONE, 0x008f, 0x008f }, /* 0x008f */
- { CODEPAGE_ISNONE, 0x0090, 0x0090 }, /* 0x0090 */
- { CODEPAGE_ISNONE, 0x0091, 0x0091 }, /* 0x0091 */
- { CODEPAGE_ISNONE, 0x0092, 0x0092 }, /* 0x0092 */
- { CODEPAGE_ISNONE, 0x0093, 0x0093 }, /* 0x0093 */
- { CODEPAGE_ISNONE, 0x0094, 0x0094 }, /* 0x0094 */
- { CODEPAGE_ISNONE, 0x0095, 0x0095 }, /* 0x0095 */
- { CODEPAGE_ISNONE, 0x0096, 0x0096 }, /* 0x0096 */
- { CODEPAGE_ISNONE, 0x0097, 0x0097 }, /* 0x0097 */
- { CODEPAGE_ISNONE, 0x0098, 0x0098 }, /* 0x0098 */
- { CODEPAGE_ISNONE, 0x0099, 0x0099 }, /* 0x0099 */
- { CODEPAGE_ISNONE, 0x009a, 0x009a }, /* 0x009a */
- { CODEPAGE_ISNONE, 0x009b, 0x009b }, /* 0x009b */
- { CODEPAGE_ISNONE, 0x009c, 0x009c }, /* 0x009c */
- { CODEPAGE_ISNONE, 0x009d, 0x009d }, /* 0x009d */
- { CODEPAGE_ISNONE, 0x009e, 0x009e }, /* 0x009e */
- { CODEPAGE_ISNONE, 0x009f, 0x009f }, /* 0x009f */
- { CODEPAGE_ISNONE, 0x00a0, 0x00a0 }, /* 0x00a0 */
- { CODEPAGE_ISUPPER, 0x00a1, 0x00b1 }, /* 0x00a1 */
- { CODEPAGE_ISNONE, 0x00a2, 0x00a2 }, /* 0x00a2 */
- { CODEPAGE_ISNONE, 0x00a3, 0x00a3 }, /* 0x00a3 */
- { CODEPAGE_ISNONE, 0x00a4, 0x00a4 }, /* 0x00a4 */
- { CODEPAGE_ISNONE, 0x00a5, 0x00a5 }, /* 0x00a5 */
- { CODEPAGE_ISUPPER, 0x00a6, 0x00b6 }, /* 0x00a6 */
- { CODEPAGE_ISNONE, 0x00a7, 0x00a7 }, /* 0x00a7 */
- { CODEPAGE_ISNONE, 0x00a8, 0x00a8 }, /* 0x00a8 */
- { CODEPAGE_ISUPPER, 0x00a9, 0x00b9 }, /* 0x00a9 */
- { CODEPAGE_ISUPPER, 0x00aa, 0x00ba }, /* 0x00aa */
- { CODEPAGE_ISUPPER, 0x00ab, 0x00bb }, /* 0x00ab */
- { CODEPAGE_ISUPPER, 0x00ac, 0x00bc }, /* 0x00ac */
- { CODEPAGE_ISNONE, 0x00ad, 0x00ad }, /* 0x00ad */
- { CODEPAGE_ISNONE, 0x00ae, 0x00ae }, /* 0x00ae */
- { CODEPAGE_ISUPPER, 0x00af, 0x00bf }, /* 0x00af */
- { CODEPAGE_ISNONE, 0x00b0, 0x00b0 }, /* 0x00b0 */
- { CODEPAGE_ISLOWER, 0x00a1, 0x00b1 }, /* 0x00b1 */
- { CODEPAGE_ISNONE, 0x00b2, 0x00b2 }, /* 0x00b2 */
- { CODEPAGE_ISNONE, 0x00b3, 0x00b3 }, /* 0x00b3 */
- { CODEPAGE_ISNONE, 0x00b4, 0x00b4 }, /* 0x00b4 */
- { CODEPAGE_ISNONE, 0x00b5, 0x00b5 }, /* 0x00b5 */
- { CODEPAGE_ISLOWER, 0x00a6, 0x00b6 }, /* 0x00b6 */
- { CODEPAGE_ISNONE, 0x00b7, 0x00b7 }, /* 0x00b7 */
- { CODEPAGE_ISNONE, 0x00b8, 0x00b8 }, /* 0x00b8 */
- { CODEPAGE_ISLOWER, 0x00a9, 0x00b9 }, /* 0x00b9 */
- { CODEPAGE_ISLOWER, 0x00aa, 0x00ba }, /* 0x00ba */
- { CODEPAGE_ISLOWER, 0x00ab, 0x00bb }, /* 0x00bb */
- { CODEPAGE_ISLOWER, 0x00ac, 0x00bc }, /* 0x00bc */
- { CODEPAGE_ISNONE, 0x00bd, 0x00bd }, /* 0x00bd */
- { CODEPAGE_ISNONE, 0x00be, 0x00be }, /* 0x00be */
- { CODEPAGE_ISLOWER, 0x00af, 0x00bf }, /* 0x00bf */
- { CODEPAGE_ISUPPER, 0x00c0, 0x00e0 }, /* 0x00c0 */
- { CODEPAGE_ISUPPER, 0x00c1, 0x00e1 }, /* 0x00c1 */
- { CODEPAGE_ISUPPER, 0x00c2, 0x00e2 }, /* 0x00c2 */
- { CODEPAGE_ISNONE, 0x00c3, 0x00c3 }, /* 0x00c3 */
- { CODEPAGE_ISUPPER, 0x00c4, 0x00e4 }, /* 0x00c4 */
- { CODEPAGE_ISUPPER, 0x00c5, 0x00e5 }, /* 0x00c5 */
- { CODEPAGE_ISUPPER, 0x00c6, 0x00e6 }, /* 0x00c6 */
- { CODEPAGE_ISUPPER, 0x00c7, 0x00e7 }, /* 0x00c7 */
- { CODEPAGE_ISUPPER, 0x00c8, 0x00e8 }, /* 0x00c8 */
- { CODEPAGE_ISUPPER, 0x00c9, 0x00e9 }, /* 0x00c9 */
- { CODEPAGE_ISUPPER, 0x00ca, 0x00ea }, /* 0x00ca */
- { CODEPAGE_ISUPPER, 0x00cb, 0x00eb }, /* 0x00cb */
- { CODEPAGE_ISUPPER, 0x00cc, 0x00ec }, /* 0x00cc */
- { CODEPAGE_ISUPPER, 0x00cd, 0x00ed }, /* 0x00cd */
- { CODEPAGE_ISUPPER, 0x00ce, 0x00ee }, /* 0x00ce */
- { CODEPAGE_ISUPPER, 0x00cf, 0x00ef }, /* 0x00cf */
- { CODEPAGE_ISNONE, 0x00d0, 0x00d0 }, /* 0x00d0 */
- { CODEPAGE_ISUPPER, 0x00d1, 0x00f1 }, /* 0x00d1 */
- { CODEPAGE_ISUPPER, 0x00d2, 0x00f2 }, /* 0x00d2 */
- { CODEPAGE_ISUPPER, 0x00d3, 0x00f3 }, /* 0x00d3 */
- { CODEPAGE_ISUPPER, 0x00d4, 0x00f4 }, /* 0x00d4 */
- { CODEPAGE_ISUPPER, 0x00d5, 0x00f5 }, /* 0x00d5 */
- { CODEPAGE_ISUPPER, 0x00d6, 0x00f6 }, /* 0x00d6 */
- { CODEPAGE_ISNONE, 0x00d7, 0x00d7 }, /* 0x00d7 */
- { CODEPAGE_ISUPPER, 0x00d8, 0x00f8 }, /* 0x00d8 */
- { CODEPAGE_ISUPPER, 0x00d9, 0x00f9 }, /* 0x00d9 */
- { CODEPAGE_ISUPPER, 0x00da, 0x00fa }, /* 0x00da */
- { CODEPAGE_ISUPPER, 0x00db, 0x00fb }, /* 0x00db */
- { CODEPAGE_ISUPPER, 0x00dc, 0x00fc }, /* 0x00dc */
- { CODEPAGE_ISUPPER, 0x00dd, 0x00fd }, /* 0x00dd */
- { CODEPAGE_ISUPPER, 0x00de, 0x00fe }, /* 0x00de */
- { CODEPAGE_ISNONE, 0x00df, 0x00df }, /* 0x00df */
- { CODEPAGE_ISLOWER, 0x00c0, 0x00e0 }, /* 0x00e0 */
- { CODEPAGE_ISLOWER, 0x00c1, 0x00e1 }, /* 0x00e1 */
- { CODEPAGE_ISLOWER, 0x00c2, 0x00e2 }, /* 0x00e2 */
- { CODEPAGE_ISNONE, 0x00e3, 0x00e3 }, /* 0x00e3 */
- { CODEPAGE_ISLOWER, 0x00c4, 0x00e4 }, /* 0x00e4 */
- { CODEPAGE_ISLOWER, 0x00c5, 0x00e5 }, /* 0x00e5 */
- { CODEPAGE_ISLOWER, 0x00c6, 0x00e6 }, /* 0x00e6 */
- { CODEPAGE_ISLOWER, 0x00c7, 0x00e7 }, /* 0x00e7 */
- { CODEPAGE_ISLOWER, 0x00c8, 0x00e8 }, /* 0x00e8 */
- { CODEPAGE_ISLOWER, 0x00c9, 0x00e9 }, /* 0x00e9 */
- { CODEPAGE_ISLOWER, 0x00ca, 0x00ea }, /* 0x00ea */
- { CODEPAGE_ISLOWER, 0x00cb, 0x00eb }, /* 0x00eb */
- { CODEPAGE_ISLOWER, 0x00cc, 0x00ec }, /* 0x00ec */
- { CODEPAGE_ISLOWER, 0x00cd, 0x00ed }, /* 0x00ed */
- { CODEPAGE_ISLOWER, 0x00ce, 0x00ee }, /* 0x00ee */
- { CODEPAGE_ISLOWER, 0x00cf, 0x00ef }, /* 0x00ef */
- { CODEPAGE_ISNONE, 0x00f0, 0x00f0 }, /* 0x00f0 */
- { CODEPAGE_ISLOWER, 0x00d1, 0x00f1 }, /* 0x00f1 */
- { CODEPAGE_ISLOWER, 0x00d2, 0x00f2 }, /* 0x00f2 */
- { CODEPAGE_ISLOWER, 0x00d3, 0x00f3 }, /* 0x00f3 */
- { CODEPAGE_ISLOWER, 0x00d4, 0x00f4 }, /* 0x00f4 */
- { CODEPAGE_ISLOWER, 0x00d5, 0x00f5 }, /* 0x00f5 */
- { CODEPAGE_ISLOWER, 0x00d6, 0x00f6 }, /* 0x00f6 */
- { CODEPAGE_ISNONE, 0x00f7, 0x00f7 }, /* 0x00f7 */
- { CODEPAGE_ISLOWER, 0x00d8, 0x00f8 }, /* 0x00f8 */
- { CODEPAGE_ISLOWER, 0x00d9, 0x00f9 }, /* 0x00f9 */
- { CODEPAGE_ISLOWER, 0x00da, 0x00fa }, /* 0x00fa */
- { CODEPAGE_ISLOWER, 0x00db, 0x00fb }, /* 0x00fb */
- { CODEPAGE_ISLOWER, 0x00dc, 0x00fc }, /* 0x00fc */
- { CODEPAGE_ISLOWER, 0x00dd, 0x00fd }, /* 0x00fd */
- { CODEPAGE_ISLOWER, 0x00de, 0x00fe }, /* 0x00fe */
- { CODEPAGE_ISNONE, 0x00ff, 0x00ff } /* 0x00ff */
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_CP_LATIN3_H */
diff --git a/usr/src/uts/common/smbsrv/cp_latin4.h b/usr/src/uts/common/smbsrv/cp_latin4.h
deleted file mode 100644
index 87e8282510..0000000000
--- a/usr/src/uts/common/smbsrv/cp_latin4.h
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SMBSRV_CP_LATIN4_H
-#define _SMBSRV_CP_LATIN4_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
- * This file specifies a codepage mapping for a given character set as
- * specified below:
- *
- * This is the codepage for Latin-4 Character Set.
- * This codepage defines values for the special
- * characters needed for the written alphabets of the
- * following languages: Estonian, Baltic [Latvian &
- * Lithuanian], Greenlandic, and Lappish
- * The Latin-4 character set is also known as iso-8859-4
- */
-
-#include <smbsrv/codepage.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-codepage_t Latin4_codepage[256] = {
- { CODEPAGE_ISNONE, 0x0000, 0x0000 }, /* 0x0000 */
- { CODEPAGE_ISNONE, 0x0001, 0x0001 }, /* 0x0001 */
- { CODEPAGE_ISNONE, 0x0002, 0x0002 }, /* 0x0002 */
- { CODEPAGE_ISNONE, 0x0003, 0x0003 }, /* 0x0003 */
- { CODEPAGE_ISNONE, 0x0004, 0x0004 }, /* 0x0004 */
- { CODEPAGE_ISNONE, 0x0005, 0x0005 }, /* 0x0005 */
- { CODEPAGE_ISNONE, 0x0006, 0x0006 }, /* 0x0006 */
- { CODEPAGE_ISNONE, 0x0007, 0x0007 }, /* 0x0007 */
- { CODEPAGE_ISNONE, 0x0008, 0x0008 }, /* 0x0008 */
- { CODEPAGE_ISNONE, 0x0009, 0x0009 }, /* 0x0009 */
- { CODEPAGE_ISNONE, 0x000a, 0x000a }, /* 0x000a */
- { CODEPAGE_ISNONE, 0x000b, 0x000b }, /* 0x000b */
- { CODEPAGE_ISNONE, 0x000c, 0x000c }, /* 0x000c */
- { CODEPAGE_ISNONE, 0x000d, 0x000d }, /* 0x000d */
- { CODEPAGE_ISNONE, 0x000e, 0x000e }, /* 0x000e */
- { CODEPAGE_ISNONE, 0x000f, 0x000f }, /* 0x000f */
- { CODEPAGE_ISNONE, 0x0010, 0x0010 }, /* 0x0010 */
- { CODEPAGE_ISNONE, 0x0011, 0x0011 }, /* 0x0011 */
- { CODEPAGE_ISNONE, 0x0012, 0x0012 }, /* 0x0012 */
- { CODEPAGE_ISNONE, 0x0013, 0x0013 }, /* 0x0013 */
- { CODEPAGE_ISNONE, 0x0014, 0x0014 }, /* 0x0014 */
- { CODEPAGE_ISNONE, 0x0015, 0x0015 }, /* 0x0015 */
- { CODEPAGE_ISNONE, 0x0016, 0x0016 }, /* 0x0016 */
- { CODEPAGE_ISNONE, 0x0017, 0x0017 }, /* 0x0017 */
- { CODEPAGE_ISNONE, 0x0018, 0x0018 }, /* 0x0018 */
- { CODEPAGE_ISNONE, 0x0019, 0x0019 }, /* 0x0019 */
- { CODEPAGE_ISNONE, 0x001a, 0x001a }, /* 0x001a */
- { CODEPAGE_ISNONE, 0x001b, 0x001b }, /* 0x001b */
- { CODEPAGE_ISNONE, 0x001c, 0x001c }, /* 0x001c */
- { CODEPAGE_ISNONE, 0x001d, 0x001d }, /* 0x001d */
- { CODEPAGE_ISNONE, 0x001e, 0x001e }, /* 0x001e */
- { CODEPAGE_ISNONE, 0x001f, 0x001f }, /* 0x001f */
- { CODEPAGE_ISNONE, 0x0020, 0x0020 }, /* 0x0020 */
- { CODEPAGE_ISNONE, 0x0021, 0x0021 }, /* 0x0021 */
- { CODEPAGE_ISNONE, 0x0022, 0x0022 }, /* 0x0022 */
- { CODEPAGE_ISNONE, 0x0023, 0x0023 }, /* 0x0023 */
- { CODEPAGE_ISNONE, 0x0024, 0x0024 }, /* 0x0024 */
- { CODEPAGE_ISNONE, 0x0025, 0x0025 }, /* 0x0025 */
- { CODEPAGE_ISNONE, 0x0026, 0x0026 }, /* 0x0026 */
- { CODEPAGE_ISNONE, 0x0027, 0x0027 }, /* 0x0027 */
- { CODEPAGE_ISNONE, 0x0028, 0x0028 }, /* 0x0028 */
- { CODEPAGE_ISNONE, 0x0029, 0x0029 }, /* 0x0029 */
- { CODEPAGE_ISNONE, 0x002a, 0x002a }, /* 0x002a */
- { CODEPAGE_ISNONE, 0x002b, 0x002b }, /* 0x002b */
- { CODEPAGE_ISNONE, 0x002c, 0x002c }, /* 0x002c */
- { CODEPAGE_ISNONE, 0x002d, 0x002d }, /* 0x002d */
- { CODEPAGE_ISNONE, 0x002e, 0x002e }, /* 0x002e */
- { CODEPAGE_ISNONE, 0x002f, 0x002f }, /* 0x002f */
- { CODEPAGE_ISNONE, 0x0030, 0x0030 }, /* 0x0030 */
- { CODEPAGE_ISNONE, 0x0031, 0x0031 }, /* 0x0031 */
- { CODEPAGE_ISNONE, 0x0032, 0x0032 }, /* 0x0032 */
- { CODEPAGE_ISNONE, 0x0033, 0x0033 }, /* 0x0033 */
- { CODEPAGE_ISNONE, 0x0034, 0x0034 }, /* 0x0034 */
- { CODEPAGE_ISNONE, 0x0035, 0x0035 }, /* 0x0035 */
- { CODEPAGE_ISNONE, 0x0036, 0x0036 }, /* 0x0036 */
- { CODEPAGE_ISNONE, 0x0037, 0x0037 }, /* 0x0037 */
- { CODEPAGE_ISNONE, 0x0038, 0x0038 }, /* 0x0038 */
- { CODEPAGE_ISNONE, 0x0039, 0x0039 }, /* 0x0039 */
- { CODEPAGE_ISNONE, 0x003a, 0x003a }, /* 0x003a */
- { CODEPAGE_ISNONE, 0x003b, 0x003b }, /* 0x003b */
- { CODEPAGE_ISNONE, 0x003c, 0x003c }, /* 0x003c */
- { CODEPAGE_ISNONE, 0x003d, 0x003d }, /* 0x003d */
- { CODEPAGE_ISNONE, 0x003e, 0x003e }, /* 0x003e */
- { CODEPAGE_ISNONE, 0x003f, 0x003f }, /* 0x003f */
- { CODEPAGE_ISNONE, 0x0040, 0x0040 }, /* 0x0040 */
- { CODEPAGE_ISUPPER, 0x0041, 0x0061 }, /* 0x0041 */
- { CODEPAGE_ISUPPER, 0x0042, 0x0062 }, /* 0x0042 */
- { CODEPAGE_ISUPPER, 0x0043, 0x0063 }, /* 0x0043 */
- { CODEPAGE_ISUPPER, 0x0044, 0x0064 }, /* 0x0044 */
- { CODEPAGE_ISUPPER, 0x0045, 0x0065 }, /* 0x0045 */
- { CODEPAGE_ISUPPER, 0x0046, 0x0066 }, /* 0x0046 */
- { CODEPAGE_ISUPPER, 0x0047, 0x0067 }, /* 0x0047 */
- { CODEPAGE_ISUPPER, 0x0048, 0x0068 }, /* 0x0048 */
- { CODEPAGE_ISUPPER, 0x0049, 0x0069 }, /* 0x0049 */
- { CODEPAGE_ISUPPER, 0x004a, 0x006a }, /* 0x004a */
- { CODEPAGE_ISUPPER, 0x004b, 0x006b }, /* 0x004b */
- { CODEPAGE_ISUPPER, 0x004c, 0x006c }, /* 0x004c */
- { CODEPAGE_ISUPPER, 0x004d, 0x006d }, /* 0x004d */
- { CODEPAGE_ISUPPER, 0x004e, 0x006e }, /* 0x004e */
- { CODEPAGE_ISUPPER, 0x004f, 0x006f }, /* 0x004f */
- { CODEPAGE_ISUPPER, 0x0050, 0x0070 }, /* 0x0050 */
- { CODEPAGE_ISUPPER, 0x0051, 0x0071 }, /* 0x0051 */
- { CODEPAGE_ISUPPER, 0x0052, 0x0072 }, /* 0x0052 */
- { CODEPAGE_ISUPPER, 0x0053, 0x0073 }, /* 0x0053 */
- { CODEPAGE_ISUPPER, 0x0054, 0x0074 }, /* 0x0054 */
- { CODEPAGE_ISUPPER, 0x0055, 0x0075 }, /* 0x0055 */
- { CODEPAGE_ISUPPER, 0x0056, 0x0076 }, /* 0x0056 */
- { CODEPAGE_ISUPPER, 0x0057, 0x0077 }, /* 0x0057 */
- { CODEPAGE_ISUPPER, 0x0058, 0x0078 }, /* 0x0058 */
- { CODEPAGE_ISUPPER, 0x0059, 0x0079 }, /* 0x0059 */
- { CODEPAGE_ISUPPER, 0x005a, 0x007a }, /* 0x005a */
- { CODEPAGE_ISNONE, 0x005b, 0x005b }, /* 0x005b */
- { CODEPAGE_ISNONE, 0x005c, 0x005c }, /* 0x005c */
- { CODEPAGE_ISNONE, 0x005d, 0x005d }, /* 0x005d */
- { CODEPAGE_ISNONE, 0x005e, 0x005e }, /* 0x005e */
- { CODEPAGE_ISNONE, 0x005f, 0x005f }, /* 0x005f */
- { CODEPAGE_ISNONE, 0x0060, 0x0060 }, /* 0x0060 */
- { CODEPAGE_ISLOWER, 0x0041, 0x0061 }, /* 0x0061 */
- { CODEPAGE_ISLOWER, 0x0042, 0x0062 }, /* 0x0062 */
- { CODEPAGE_ISLOWER, 0x0043, 0x0063 }, /* 0x0063 */
- { CODEPAGE_ISLOWER, 0x0044, 0x0064 }, /* 0x0064 */
- { CODEPAGE_ISLOWER, 0x0045, 0x0065 }, /* 0x0065 */
- { CODEPAGE_ISLOWER, 0x0046, 0x0066 }, /* 0x0066 */
- { CODEPAGE_ISLOWER, 0x0047, 0x0067 }, /* 0x0067 */
- { CODEPAGE_ISLOWER, 0x0048, 0x0068 }, /* 0x0068 */
- { CODEPAGE_ISLOWER, 0x0049, 0x0069 }, /* 0x0069 */
- { CODEPAGE_ISLOWER, 0x004a, 0x006a }, /* 0x006a */
- { CODEPAGE_ISLOWER, 0x004b, 0x006b }, /* 0x006b */
- { CODEPAGE_ISLOWER, 0x004c, 0x006c }, /* 0x006c */
- { CODEPAGE_ISLOWER, 0x004d, 0x006d }, /* 0x006d */
- { CODEPAGE_ISLOWER, 0x004e, 0x006e }, /* 0x006e */
- { CODEPAGE_ISLOWER, 0x004f, 0x006f }, /* 0x006f */
- { CODEPAGE_ISLOWER, 0x0050, 0x0070 }, /* 0x0070 */
- { CODEPAGE_ISLOWER, 0x0051, 0x0071 }, /* 0x0071 */
- { CODEPAGE_ISLOWER, 0x0052, 0x0072 }, /* 0x0072 */
- { CODEPAGE_ISLOWER, 0x0053, 0x0073 }, /* 0x0073 */
- { CODEPAGE_ISLOWER, 0x0054, 0x0074 }, /* 0x0074 */
- { CODEPAGE_ISLOWER, 0x0055, 0x0075 }, /* 0x0075 */
- { CODEPAGE_ISLOWER, 0x0056, 0x0076 }, /* 0x0076 */
- { CODEPAGE_ISLOWER, 0x0057, 0x0077 }, /* 0x0077 */
- { CODEPAGE_ISLOWER, 0x0058, 0x0078 }, /* 0x0078 */
- { CODEPAGE_ISLOWER, 0x0059, 0x0079 }, /* 0x0079 */
- { CODEPAGE_ISLOWER, 0x005a, 0x007a }, /* 0x007a */
- { CODEPAGE_ISNONE, 0x007b, 0x007b }, /* 0x007b */
- { CODEPAGE_ISNONE, 0x007c, 0x007c }, /* 0x007c */
- { CODEPAGE_ISNONE, 0x007d, 0x007d }, /* 0x007d */
- { CODEPAGE_ISNONE, 0x007e, 0x007e }, /* 0x007e */
- { CODEPAGE_ISNONE, 0x007f, 0x007f }, /* 0x007f */
- { CODEPAGE_ISNONE, 0x0080, 0x0080 }, /* 0x0080 */
- { CODEPAGE_ISNONE, 0x0081, 0x0081 }, /* 0x0081 */
- { CODEPAGE_ISNONE, 0x0082, 0x0082 }, /* 0x0082 */
- { CODEPAGE_ISNONE, 0x0083, 0x0083 }, /* 0x0083 */
- { CODEPAGE_ISNONE, 0x0084, 0x0084 }, /* 0x0084 */
- { CODEPAGE_ISNONE, 0x0085, 0x0085 }, /* 0x0085 */
- { CODEPAGE_ISNONE, 0x0086, 0x0086 }, /* 0x0086 */
- { CODEPAGE_ISNONE, 0x0087, 0x0087 }, /* 0x0087 */
- { CODEPAGE_ISNONE, 0x0088, 0x0088 }, /* 0x0088 */
- { CODEPAGE_ISNONE, 0x0089, 0x0089 }, /* 0x0089 */
- { CODEPAGE_ISNONE, 0x008a, 0x008a }, /* 0x008a */
- { CODEPAGE_ISNONE, 0x008b, 0x008b }, /* 0x008b */
- { CODEPAGE_ISNONE, 0x008c, 0x008c }, /* 0x008c */
- { CODEPAGE_ISNONE, 0x008d, 0x008d }, /* 0x008d */
- { CODEPAGE_ISNONE, 0x008e, 0x008e }, /* 0x008e */
- { CODEPAGE_ISNONE, 0x008f, 0x008f }, /* 0x008f */
- { CODEPAGE_ISNONE, 0x0090, 0x0090 }, /* 0x0090 */
- { CODEPAGE_ISNONE, 0x0091, 0x0091 }, /* 0x0091 */
- { CODEPAGE_ISNONE, 0x0092, 0x0092 }, /* 0x0092 */
- { CODEPAGE_ISNONE, 0x0093, 0x0093 }, /* 0x0093 */
- { CODEPAGE_ISNONE, 0x0094, 0x0094 }, /* 0x0094 */
- { CODEPAGE_ISNONE, 0x0095, 0x0095 }, /* 0x0095 */
- { CODEPAGE_ISNONE, 0x0096, 0x0096 }, /* 0x0096 */
- { CODEPAGE_ISNONE, 0x0097, 0x0097 }, /* 0x0097 */
- { CODEPAGE_ISNONE, 0x0098, 0x0098 }, /* 0x0098 */
- { CODEPAGE_ISNONE, 0x0099, 0x0099 }, /* 0x0099 */
- { CODEPAGE_ISNONE, 0x009a, 0x009a }, /* 0x009a */
- { CODEPAGE_ISNONE, 0x009b, 0x009b }, /* 0x009b */
- { CODEPAGE_ISNONE, 0x009c, 0x009c }, /* 0x009c */
- { CODEPAGE_ISNONE, 0x009d, 0x009d }, /* 0x009d */
- { CODEPAGE_ISNONE, 0x009e, 0x009e }, /* 0x009e */
- { CODEPAGE_ISNONE, 0x009f, 0x009f }, /* 0x009f */
- { CODEPAGE_ISNONE, 0x00a0, 0x00a0 }, /* 0x00a0 */
- { CODEPAGE_ISUPPER, 0x00a1, 0x00b1 }, /* 0x00a1 */
- { CODEPAGE_ISNONE, 0x00a2, 0x00a2 }, /* 0x00a2 */
- { CODEPAGE_ISUPPER, 0x00a3, 0x00b3 }, /* 0x00a3 */
- { CODEPAGE_ISNONE, 0x00a4, 0x00a4 }, /* 0x00a4 */
- { CODEPAGE_ISUPPER, 0x00a5, 0x00b5 }, /* 0x00a5 */
- { CODEPAGE_ISUPPER, 0x00a6, 0x00b6 }, /* 0x00a6 */
- { CODEPAGE_ISNONE, 0x00a7, 0x00a7 }, /* 0x00a7 */
- { CODEPAGE_ISNONE, 0x00a8, 0x00a8 }, /* 0x00a8 */
- { CODEPAGE_ISUPPER, 0x00a9, 0x00b9 }, /* 0x00a9 */
- { CODEPAGE_ISUPPER, 0x00aa, 0x00ba }, /* 0x00aa */
- { CODEPAGE_ISUPPER, 0x00ab, 0x00bb }, /* 0x00ab */
- { CODEPAGE_ISUPPER, 0x00ac, 0x00bc }, /* 0x00ac */
- { CODEPAGE_ISNONE, 0x00ad, 0x00ad }, /* 0x00ad */
- { CODEPAGE_ISUPPER, 0x00ae, 0x00be }, /* 0x00ae */
- { CODEPAGE_ISNONE, 0x00af, 0x00af }, /* 0x00af */
- { CODEPAGE_ISNONE, 0x00b0, 0x00b0 }, /* 0x00b0 */
- { CODEPAGE_ISLOWER, 0x00a1, 0x00b1 }, /* 0x00b1 */
- { CODEPAGE_ISNONE, 0x00b2, 0x00b2 }, /* 0x00b2 */
- { CODEPAGE_ISLOWER, 0x00a3, 0x00b3 }, /* 0x00b3 */
- { CODEPAGE_ISNONE, 0x00b4, 0x00b4 }, /* 0x00b4 */
- { CODEPAGE_ISLOWER, 0x00a5, 0x00b5 }, /* 0x00b5 */
- { CODEPAGE_ISLOWER, 0x00a6, 0x00b6 }, /* 0x00b6 */
- { CODEPAGE_ISNONE, 0x00b7, 0x00b7 }, /* 0x00b7 */
- { CODEPAGE_ISNONE, 0x00b8, 0x00b8 }, /* 0x00b8 */
- { CODEPAGE_ISLOWER, 0x00a9, 0x00b9 }, /* 0x00b9 */
- { CODEPAGE_ISLOWER, 0x00aa, 0x00ba }, /* 0x00ba */
- { CODEPAGE_ISLOWER, 0x00ab, 0x00bb }, /* 0x00bb */
- { CODEPAGE_ISLOWER, 0x00ac, 0x00bc }, /* 0x00bc */
- { CODEPAGE_ISNONE, 0x00bd, 0x00bd }, /* 0x00bd */
- { CODEPAGE_ISLOWER, 0x00ae, 0x00be }, /* 0x00be */
- { CODEPAGE_ISNONE, 0x00bf, 0x00bf }, /* 0x00bf */
- { CODEPAGE_ISUPPER, 0x00c0, 0x00e0 }, /* 0x00c0 */
- { CODEPAGE_ISUPPER, 0x00c1, 0x00e1 }, /* 0x00c1 */
- { CODEPAGE_ISUPPER, 0x00c2, 0x00e2 }, /* 0x00c2 */
- { CODEPAGE_ISUPPER, 0x00c3, 0x00e3 }, /* 0x00c3 */
- { CODEPAGE_ISUPPER, 0x00c4, 0x00e4 }, /* 0x00c4 */
- { CODEPAGE_ISUPPER, 0x00c5, 0x00e5 }, /* 0x00c5 */
- { CODEPAGE_ISUPPER, 0x00c6, 0x00e6 }, /* 0x00c6 */
- { CODEPAGE_ISUPPER, 0x00c7, 0x00e7 }, /* 0x00c7 */
- { CODEPAGE_ISUPPER, 0x00c8, 0x00e8 }, /* 0x00c8 */
- { CODEPAGE_ISUPPER, 0x00c9, 0x00e9 }, /* 0x00c9 */
- { CODEPAGE_ISUPPER, 0x00ca, 0x00ea }, /* 0x00ca */
- { CODEPAGE_ISUPPER, 0x00cb, 0x00eb }, /* 0x00cb */
- { CODEPAGE_ISUPPER, 0x00cc, 0x00ec }, /* 0x00cc */
- { CODEPAGE_ISUPPER, 0x00cd, 0x00ed }, /* 0x00cd */
- { CODEPAGE_ISUPPER, 0x00ce, 0x00ee }, /* 0x00ce */
- { CODEPAGE_ISUPPER, 0x00cf, 0x00ef }, /* 0x00cf */
- { CODEPAGE_ISUPPER, 0x00d0, 0x00f0 }, /* 0x00d0 */
- { CODEPAGE_ISUPPER, 0x00d1, 0x00f1 }, /* 0x00d1 */
- { CODEPAGE_ISUPPER, 0x00d2, 0x00f2 }, /* 0x00d2 */
- { CODEPAGE_ISUPPER, 0x00d3, 0x00f3 }, /* 0x00d3 */
- { CODEPAGE_ISUPPER, 0x00d4, 0x00f4 }, /* 0x00d4 */
- { CODEPAGE_ISUPPER, 0x00d5, 0x00f5 }, /* 0x00d5 */
- { CODEPAGE_ISUPPER, 0x00d6, 0x00f6 }, /* 0x00d6 */
- { CODEPAGE_ISNONE, 0x00d7, 0x00d7 }, /* 0x00d7 */
- { CODEPAGE_ISUPPER, 0x00d8, 0x00f8 }, /* 0x00d8 */
- { CODEPAGE_ISUPPER, 0x00d9, 0x00f9 }, /* 0x00d9 */
- { CODEPAGE_ISUPPER, 0x00da, 0x00fa }, /* 0x00da */
- { CODEPAGE_ISUPPER, 0x00db, 0x00fb }, /* 0x00db */
- { CODEPAGE_ISUPPER, 0x00dc, 0x00fc }, /* 0x00dc */
- { CODEPAGE_ISUPPER, 0x00dd, 0x00fd }, /* 0x00dd */
- { CODEPAGE_ISUPPER, 0x00de, 0x00fe }, /* 0x00de */
- { CODEPAGE_ISNONE, 0x00df, 0x00df }, /* 0x00df */
- { CODEPAGE_ISLOWER, 0x00c0, 0x00e0 }, /* 0x00e0 */
- { CODEPAGE_ISLOWER, 0x00c1, 0x00e1 }, /* 0x00e1 */
- { CODEPAGE_ISLOWER, 0x00c2, 0x00e2 }, /* 0x00e2 */
- { CODEPAGE_ISLOWER, 0x00c3, 0x00e3 }, /* 0x00e3 */
- { CODEPAGE_ISLOWER, 0x00c4, 0x00e4 }, /* 0x00e4 */
- { CODEPAGE_ISLOWER, 0x00c5, 0x00e5 }, /* 0x00e5 */
- { CODEPAGE_ISLOWER, 0x00c6, 0x00e6 }, /* 0x00e6 */
- { CODEPAGE_ISLOWER, 0x00c7, 0x00e7 }, /* 0x00e7 */
- { CODEPAGE_ISLOWER, 0x00c8, 0x00e8 }, /* 0x00e8 */
- { CODEPAGE_ISLOWER, 0x00c9, 0x00e9 }, /* 0x00e9 */
- { CODEPAGE_ISLOWER, 0x00ca, 0x00ea }, /* 0x00ea */
- { CODEPAGE_ISLOWER, 0x00cb, 0x00eb }, /* 0x00eb */
- { CODEPAGE_ISLOWER, 0x00cc, 0x00ec }, /* 0x00ec */
- { CODEPAGE_ISLOWER, 0x00cd, 0x00ed }, /* 0x00ed */
- { CODEPAGE_ISLOWER, 0x00ce, 0x00ee }, /* 0x00ee */
- { CODEPAGE_ISLOWER, 0x00cf, 0x00ef }, /* 0x00ef */
- { CODEPAGE_ISLOWER, 0x00d0, 0x00f0 }, /* 0x00f0 */
- { CODEPAGE_ISLOWER, 0x00d1, 0x00f1 }, /* 0x00f1 */
- { CODEPAGE_ISLOWER, 0x00d2, 0x00f2 }, /* 0x00f2 */
- { CODEPAGE_ISLOWER, 0x00d3, 0x00f3 }, /* 0x00f3 */
- { CODEPAGE_ISLOWER, 0x00d4, 0x00f4 }, /* 0x00f4 */
- { CODEPAGE_ISLOWER, 0x00d5, 0x00f5 }, /* 0x00f5 */
- { CODEPAGE_ISLOWER, 0x00d6, 0x00f6 }, /* 0x00f6 */
- { CODEPAGE_ISNONE, 0x00f7, 0x00f7 }, /* 0x00f7 */
- { CODEPAGE_ISLOWER, 0x00d8, 0x00f8 }, /* 0x00f8 */
- { CODEPAGE_ISLOWER, 0x00d9, 0x00f9 }, /* 0x00f9 */
- { CODEPAGE_ISLOWER, 0x00da, 0x00fa }, /* 0x00fa */
- { CODEPAGE_ISLOWER, 0x00db, 0x00fb }, /* 0x00fb */
- { CODEPAGE_ISLOWER, 0x00dc, 0x00fc }, /* 0x00fc */
- { CODEPAGE_ISLOWER, 0x00dd, 0x00fd }, /* 0x00fd */
- { CODEPAGE_ISLOWER, 0x00de, 0x00fe }, /* 0x00fe */
- { CODEPAGE_ISNONE, 0x00ff, 0x00ff } /* 0x00ff */
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_CP_LATIN4_H */
diff --git a/usr/src/uts/common/smbsrv/cp_latin5.h b/usr/src/uts/common/smbsrv/cp_latin5.h
deleted file mode 100644
index 87ad426348..0000000000
--- a/usr/src/uts/common/smbsrv/cp_latin5.h
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SMBSRV_CP_LATIN5_H
-#define _SMBSRV_CP_LATIN5_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
- * This file specifies a codepage mapping for a given character set as
- * specified below:
- *
- * This is the codepage for the Latin-5 Character Set
- * This codepage defines values for the special characters
- * needed for the written alphabet of the following
- * language: Turkish * The Latin-5 character set is also known as iso-8859-9.
- *
- */
-
-#include <smbsrv/codepage.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-codepage_t Latin5_codepage[256] = {
- { CODEPAGE_ISNONE, 0x0000, 0x0000 }, /* 0x0000 */
- { CODEPAGE_ISNONE, 0x0001, 0x0001 }, /* 0x0001 */
- { CODEPAGE_ISNONE, 0x0002, 0x0002 }, /* 0x0002 */
- { CODEPAGE_ISNONE, 0x0003, 0x0003 }, /* 0x0003 */
- { CODEPAGE_ISNONE, 0x0004, 0x0004 }, /* 0x0004 */
- { CODEPAGE_ISNONE, 0x0005, 0x0005 }, /* 0x0005 */
- { CODEPAGE_ISNONE, 0x0006, 0x0006 }, /* 0x0006 */
- { CODEPAGE_ISNONE, 0x0007, 0x0007 }, /* 0x0007 */
- { CODEPAGE_ISNONE, 0x0008, 0x0008 }, /* 0x0008 */
- { CODEPAGE_ISNONE, 0x0009, 0x0009 }, /* 0x0009 */
- { CODEPAGE_ISNONE, 0x000a, 0x000a }, /* 0x000a */
- { CODEPAGE_ISNONE, 0x000b, 0x000b }, /* 0x000b */
- { CODEPAGE_ISNONE, 0x000c, 0x000c }, /* 0x000c */
- { CODEPAGE_ISNONE, 0x000d, 0x000d }, /* 0x000d */
- { CODEPAGE_ISNONE, 0x000e, 0x000e }, /* 0x000e */
- { CODEPAGE_ISNONE, 0x000f, 0x000f }, /* 0x000f */
- { CODEPAGE_ISNONE, 0x0010, 0x0010 }, /* 0x0010 */
- { CODEPAGE_ISNONE, 0x0011, 0x0011 }, /* 0x0011 */
- { CODEPAGE_ISNONE, 0x0012, 0x0012 }, /* 0x0012 */
- { CODEPAGE_ISNONE, 0x0013, 0x0013 }, /* 0x0013 */
- { CODEPAGE_ISNONE, 0x0014, 0x0014 }, /* 0x0014 */
- { CODEPAGE_ISNONE, 0x0015, 0x0015 }, /* 0x0015 */
- { CODEPAGE_ISNONE, 0x0016, 0x0016 }, /* 0x0016 */
- { CODEPAGE_ISNONE, 0x0017, 0x0017 }, /* 0x0017 */
- { CODEPAGE_ISNONE, 0x0018, 0x0018 }, /* 0x0018 */
- { CODEPAGE_ISNONE, 0x0019, 0x0019 }, /* 0x0019 */
- { CODEPAGE_ISNONE, 0x001a, 0x001a }, /* 0x001a */
- { CODEPAGE_ISNONE, 0x001b, 0x001b }, /* 0x001b */
- { CODEPAGE_ISNONE, 0x001c, 0x001c }, /* 0x001c */
- { CODEPAGE_ISNONE, 0x001d, 0x001d }, /* 0x001d */
- { CODEPAGE_ISNONE, 0x001e, 0x001e }, /* 0x001e */
- { CODEPAGE_ISNONE, 0x001f, 0x001f }, /* 0x001f */
- { CODEPAGE_ISNONE, 0x0020, 0x0020 }, /* 0x0020 */
- { CODEPAGE_ISNONE, 0x0021, 0x0021 }, /* 0x0021 */
- { CODEPAGE_ISNONE, 0x0022, 0x0022 }, /* 0x0022 */
- { CODEPAGE_ISNONE, 0x0023, 0x0023 }, /* 0x0023 */
- { CODEPAGE_ISNONE, 0x0024, 0x0024 }, /* 0x0024 */
- { CODEPAGE_ISNONE, 0x0025, 0x0025 }, /* 0x0025 */
- { CODEPAGE_ISNONE, 0x0026, 0x0026 }, /* 0x0026 */
- { CODEPAGE_ISNONE, 0x0027, 0x0027 }, /* 0x0027 */
- { CODEPAGE_ISNONE, 0x0028, 0x0028 }, /* 0x0028 */
- { CODEPAGE_ISNONE, 0x0029, 0x0029 }, /* 0x0029 */
- { CODEPAGE_ISNONE, 0x002a, 0x002a }, /* 0x002a */
- { CODEPAGE_ISNONE, 0x002b, 0x002b }, /* 0x002b */
- { CODEPAGE_ISNONE, 0x002c, 0x002c }, /* 0x002c */
- { CODEPAGE_ISNONE, 0x002d, 0x002d }, /* 0x002d */
- { CODEPAGE_ISNONE, 0x002e, 0x002e }, /* 0x002e */
- { CODEPAGE_ISNONE, 0x002f, 0x002f }, /* 0x002f */
- { CODEPAGE_ISNONE, 0x0030, 0x0030 }, /* 0x0030 */
- { CODEPAGE_ISNONE, 0x0031, 0x0031 }, /* 0x0031 */
- { CODEPAGE_ISNONE, 0x0032, 0x0032 }, /* 0x0032 */
- { CODEPAGE_ISNONE, 0x0033, 0x0033 }, /* 0x0033 */
- { CODEPAGE_ISNONE, 0x0034, 0x0034 }, /* 0x0034 */
- { CODEPAGE_ISNONE, 0x0035, 0x0035 }, /* 0x0035 */
- { CODEPAGE_ISNONE, 0x0036, 0x0036 }, /* 0x0036 */
- { CODEPAGE_ISNONE, 0x0037, 0x0037 }, /* 0x0037 */
- { CODEPAGE_ISNONE, 0x0038, 0x0038 }, /* 0x0038 */
- { CODEPAGE_ISNONE, 0x0039, 0x0039 }, /* 0x0039 */
- { CODEPAGE_ISNONE, 0x003a, 0x003a }, /* 0x003a */
- { CODEPAGE_ISNONE, 0x003b, 0x003b }, /* 0x003b */
- { CODEPAGE_ISNONE, 0x003c, 0x003c }, /* 0x003c */
- { CODEPAGE_ISNONE, 0x003d, 0x003d }, /* 0x003d */
- { CODEPAGE_ISNONE, 0x003e, 0x003e }, /* 0x003e */
- { CODEPAGE_ISNONE, 0x003f, 0x003f }, /* 0x003f */
- { CODEPAGE_ISNONE, 0x0040, 0x0040 }, /* 0x0040 */
- { CODEPAGE_ISUPPER, 0x0041, 0x0061 }, /* 0x0041 */
- { CODEPAGE_ISUPPER, 0x0042, 0x0062 }, /* 0x0042 */
- { CODEPAGE_ISUPPER, 0x0043, 0x0063 }, /* 0x0043 */
- { CODEPAGE_ISUPPER, 0x0044, 0x0064 }, /* 0x0044 */
- { CODEPAGE_ISUPPER, 0x0045, 0x0065 }, /* 0x0045 */
- { CODEPAGE_ISUPPER, 0x0046, 0x0066 }, /* 0x0046 */
- { CODEPAGE_ISUPPER, 0x0047, 0x0067 }, /* 0x0047 */
- { CODEPAGE_ISUPPER, 0x0048, 0x0068 }, /* 0x0048 */
- { CODEPAGE_ISUPPER, 0x0049, 0x0069 }, /* 0x0049 */
- { CODEPAGE_ISUPPER, 0x004a, 0x006a }, /* 0x004a */
- { CODEPAGE_ISUPPER, 0x004b, 0x006b }, /* 0x004b */
- { CODEPAGE_ISUPPER, 0x004c, 0x006c }, /* 0x004c */
- { CODEPAGE_ISUPPER, 0x004d, 0x006d }, /* 0x004d */
- { CODEPAGE_ISUPPER, 0x004e, 0x006e }, /* 0x004e */
- { CODEPAGE_ISUPPER, 0x004f, 0x006f }, /* 0x004f */
- { CODEPAGE_ISUPPER, 0x0050, 0x0070 }, /* 0x0050 */
- { CODEPAGE_ISUPPER, 0x0051, 0x0071 }, /* 0x0051 */
- { CODEPAGE_ISUPPER, 0x0052, 0x0072 }, /* 0x0052 */
- { CODEPAGE_ISUPPER, 0x0053, 0x0073 }, /* 0x0053 */
- { CODEPAGE_ISUPPER, 0x0054, 0x0074 }, /* 0x0054 */
- { CODEPAGE_ISUPPER, 0x0055, 0x0075 }, /* 0x0055 */
- { CODEPAGE_ISUPPER, 0x0056, 0x0076 }, /* 0x0056 */
- { CODEPAGE_ISUPPER, 0x0057, 0x0077 }, /* 0x0057 */
- { CODEPAGE_ISUPPER, 0x0058, 0x0078 }, /* 0x0058 */
- { CODEPAGE_ISUPPER, 0x0059, 0x0079 }, /* 0x0059 */
- { CODEPAGE_ISUPPER, 0x005a, 0x007a }, /* 0x005a */
- { CODEPAGE_ISNONE, 0x005b, 0x005b }, /* 0x005b */
- { CODEPAGE_ISNONE, 0x005c, 0x005c }, /* 0x005c */
- { CODEPAGE_ISNONE, 0x005d, 0x005d }, /* 0x005d */
- { CODEPAGE_ISNONE, 0x005e, 0x005e }, /* 0x005e */
- { CODEPAGE_ISNONE, 0x005f, 0x005f }, /* 0x005f */
- { CODEPAGE_ISNONE, 0x0060, 0x0060 }, /* 0x0060 */
- { CODEPAGE_ISLOWER, 0x0041, 0x0061 }, /* 0x0061 */
- { CODEPAGE_ISLOWER, 0x0042, 0x0062 }, /* 0x0062 */
- { CODEPAGE_ISLOWER, 0x0043, 0x0063 }, /* 0x0063 */
- { CODEPAGE_ISLOWER, 0x0044, 0x0064 }, /* 0x0064 */
- { CODEPAGE_ISLOWER, 0x0045, 0x0065 }, /* 0x0065 */
- { CODEPAGE_ISLOWER, 0x0046, 0x0066 }, /* 0x0066 */
- { CODEPAGE_ISLOWER, 0x0047, 0x0067 }, /* 0x0067 */
- { CODEPAGE_ISLOWER, 0x0048, 0x0068 }, /* 0x0068 */
- { CODEPAGE_ISLOWER, 0x0049, 0x0069 }, /* 0x0069 */
- { CODEPAGE_ISLOWER, 0x004a, 0x006a }, /* 0x006a */
- { CODEPAGE_ISLOWER, 0x004b, 0x006b }, /* 0x006b */
- { CODEPAGE_ISLOWER, 0x004c, 0x006c }, /* 0x006c */
- { CODEPAGE_ISLOWER, 0x004d, 0x006d }, /* 0x006d */
- { CODEPAGE_ISLOWER, 0x004e, 0x006e }, /* 0x006e */
- { CODEPAGE_ISLOWER, 0x004f, 0x006f }, /* 0x006f */
- { CODEPAGE_ISLOWER, 0x0050, 0x0070 }, /* 0x0070 */
- { CODEPAGE_ISLOWER, 0x0051, 0x0071 }, /* 0x0071 */
- { CODEPAGE_ISLOWER, 0x0052, 0x0072 }, /* 0x0072 */
- { CODEPAGE_ISLOWER, 0x0053, 0x0073 }, /* 0x0073 */
- { CODEPAGE_ISLOWER, 0x0054, 0x0074 }, /* 0x0074 */
- { CODEPAGE_ISLOWER, 0x0055, 0x0075 }, /* 0x0075 */
- { CODEPAGE_ISLOWER, 0x0056, 0x0076 }, /* 0x0076 */
- { CODEPAGE_ISLOWER, 0x0057, 0x0077 }, /* 0x0077 */
- { CODEPAGE_ISLOWER, 0x0058, 0x0078 }, /* 0x0078 */
- { CODEPAGE_ISLOWER, 0x0059, 0x0079 }, /* 0x0079 */
- { CODEPAGE_ISLOWER, 0x005a, 0x007a }, /* 0x007a */
- { CODEPAGE_ISNONE, 0x007b, 0x007b }, /* 0x007b */
- { CODEPAGE_ISNONE, 0x007c, 0x007c }, /* 0x007c */
- { CODEPAGE_ISNONE, 0x007d, 0x007d }, /* 0x007d */
- { CODEPAGE_ISNONE, 0x007e, 0x007e }, /* 0x007e */
- { CODEPAGE_ISNONE, 0x007f, 0x007f }, /* 0x007f */
- { CODEPAGE_ISNONE, 0x0080, 0x0080 }, /* 0x0080 */
- { CODEPAGE_ISNONE, 0x0081, 0x0081 }, /* 0x0081 */
- { CODEPAGE_ISNONE, 0x0082, 0x0082 }, /* 0x0082 */
- { CODEPAGE_ISNONE, 0x0083, 0x0083 }, /* 0x0083 */
- { CODEPAGE_ISNONE, 0x0084, 0x0084 }, /* 0x0084 */
- { CODEPAGE_ISNONE, 0x0085, 0x0085 }, /* 0x0085 */
- { CODEPAGE_ISNONE, 0x0086, 0x0086 }, /* 0x0086 */
- { CODEPAGE_ISNONE, 0x0087, 0x0087 }, /* 0x0087 */
- { CODEPAGE_ISNONE, 0x0088, 0x0088 }, /* 0x0088 */
- { CODEPAGE_ISNONE, 0x0089, 0x0089 }, /* 0x0089 */
- { CODEPAGE_ISNONE, 0x008a, 0x008a }, /* 0x008a */
- { CODEPAGE_ISNONE, 0x008b, 0x008b }, /* 0x008b */
- { CODEPAGE_ISNONE, 0x008c, 0x008c }, /* 0x008c */
- { CODEPAGE_ISNONE, 0x008d, 0x008d }, /* 0x008d */
- { CODEPAGE_ISNONE, 0x008e, 0x008e }, /* 0x008e */
- { CODEPAGE_ISNONE, 0x008f, 0x008f }, /* 0x008f */
- { CODEPAGE_ISNONE, 0x0090, 0x0090 }, /* 0x0090 */
- { CODEPAGE_ISNONE, 0x0091, 0x0091 }, /* 0x0091 */
- { CODEPAGE_ISNONE, 0x0092, 0x0092 }, /* 0x0092 */
- { CODEPAGE_ISNONE, 0x0093, 0x0093 }, /* 0x0093 */
- { CODEPAGE_ISNONE, 0x0094, 0x0094 }, /* 0x0094 */
- { CODEPAGE_ISNONE, 0x0095, 0x0095 }, /* 0x0095 */
- { CODEPAGE_ISNONE, 0x0096, 0x0096 }, /* 0x0096 */
- { CODEPAGE_ISNONE, 0x0097, 0x0097 }, /* 0x0097 */
- { CODEPAGE_ISNONE, 0x0098, 0x0098 }, /* 0x0098 */
- { CODEPAGE_ISNONE, 0x0099, 0x0099 }, /* 0x0099 */
- { CODEPAGE_ISNONE, 0x009a, 0x009a }, /* 0x009a */
- { CODEPAGE_ISNONE, 0x009b, 0x009b }, /* 0x009b */
- { CODEPAGE_ISNONE, 0x009c, 0x009c }, /* 0x009c */
- { CODEPAGE_ISNONE, 0x009d, 0x009d }, /* 0x009d */
- { CODEPAGE_ISNONE, 0x009e, 0x009e }, /* 0x009e */
- { CODEPAGE_ISNONE, 0x009f, 0x009f }, /* 0x009f */
- { CODEPAGE_ISNONE, 0x00a0, 0x00a0 }, /* 0x00a0 */
- { CODEPAGE_ISNONE, 0x00a1, 0x00a1 }, /* 0x00a1 */
- { CODEPAGE_ISNONE, 0x00a2, 0x00a2 }, /* 0x00a2 */
- { CODEPAGE_ISNONE, 0x00a3, 0x00a3 }, /* 0x00a3 */
- { CODEPAGE_ISNONE, 0x00a4, 0x00a4 }, /* 0x00a4 */
- { CODEPAGE_ISNONE, 0x00a5, 0x00a5 }, /* 0x00a5 */
- { CODEPAGE_ISNONE, 0x00a6, 0x00a6 }, /* 0x00a6 */
- { CODEPAGE_ISNONE, 0x00a7, 0x00a7 }, /* 0x00a7 */
- { CODEPAGE_ISNONE, 0x00a8, 0x00a8 }, /* 0x00a8 */
- { CODEPAGE_ISNONE, 0x00a9, 0x00a9 }, /* 0x00a9 */
- { CODEPAGE_ISNONE, 0x00aa, 0x00aa }, /* 0x00aa */
- { CODEPAGE_ISNONE, 0x00ab, 0x00ab }, /* 0x00ab */
- { CODEPAGE_ISNONE, 0x00ac, 0x00ac }, /* 0x00ac */
- { CODEPAGE_ISNONE, 0x00ad, 0x00ad }, /* 0x00ad */
- { CODEPAGE_ISNONE, 0x00ae, 0x00ae }, /* 0x00ae */
- { CODEPAGE_ISNONE, 0x00af, 0x00af }, /* 0x00af */
- { CODEPAGE_ISNONE, 0x00b0, 0x00b0 }, /* 0x00b0 */
- { CODEPAGE_ISNONE, 0x00b1, 0x00b1 }, /* 0x00b1 */
- { CODEPAGE_ISNONE, 0x00b2, 0x00b2 }, /* 0x00b2 */
- { CODEPAGE_ISNONE, 0x00b3, 0x00b3 }, /* 0x00b3 */
- { CODEPAGE_ISNONE, 0x00b4, 0x00b4 }, /* 0x00b4 */
- { CODEPAGE_ISNONE, 0x00b5, 0x00b5 }, /* 0x00b5 */
- { CODEPAGE_ISNONE, 0x00b6, 0x00b6 }, /* 0x00b6 */
- { CODEPAGE_ISNONE, 0x00b7, 0x00b7 }, /* 0x00b7 */
- { CODEPAGE_ISNONE, 0x00b8, 0x00b8 }, /* 0x00b8 */
- { CODEPAGE_ISNONE, 0x00b9, 0x00b9 }, /* 0x00b9 */
- { CODEPAGE_ISNONE, 0x00ba, 0x00ba }, /* 0x00ba */
- { CODEPAGE_ISNONE, 0x00bb, 0x00bb }, /* 0x00bb */
- { CODEPAGE_ISNONE, 0x00bc, 0x00bc }, /* 0x00bc */
- { CODEPAGE_ISNONE, 0x00bd, 0x00bd }, /* 0x00bd */
- { CODEPAGE_ISNONE, 0x00be, 0x00be }, /* 0x00be */
- { CODEPAGE_ISNONE, 0x00bf, 0x00bf }, /* 0x00bf */
- { CODEPAGE_ISUPPER, 0x00c0, 0x00e0 }, /* 0x00c0 */
- { CODEPAGE_ISUPPER, 0x00c1, 0x00e1 }, /* 0x00c1 */
- { CODEPAGE_ISUPPER, 0x00c2, 0x00e2 }, /* 0x00c2 */
- { CODEPAGE_ISUPPER, 0x00c3, 0x00e3 }, /* 0x00c3 */
- { CODEPAGE_ISUPPER, 0x00c4, 0x00e4 }, /* 0x00c4 */
- { CODEPAGE_ISUPPER, 0x00c5, 0x00e5 }, /* 0x00c5 */
- { CODEPAGE_ISUPPER, 0x00c6, 0x00e6 }, /* 0x00c6 */
- { CODEPAGE_ISUPPER, 0x00c7, 0x00e7 }, /* 0x00c7 */
- { CODEPAGE_ISUPPER, 0x00c8, 0x00e8 }, /* 0x00c8 */
- { CODEPAGE_ISUPPER, 0x00c9, 0x00e9 }, /* 0x00c9 */
- { CODEPAGE_ISUPPER, 0x00ca, 0x00ea }, /* 0x00ca */
- { CODEPAGE_ISUPPER, 0x00cb, 0x00eb }, /* 0x00cb */
- { CODEPAGE_ISUPPER, 0x00cc, 0x00ec }, /* 0x00cc */
- { CODEPAGE_ISUPPER, 0x00cd, 0x00ed }, /* 0x00cd */
- { CODEPAGE_ISUPPER, 0x00ce, 0x00ee }, /* 0x00ce */
- { CODEPAGE_ISUPPER, 0x00cf, 0x00ef }, /* 0x00cf */
- { CODEPAGE_ISUPPER, 0x00d0, 0x00f0 }, /* 0x00d0 */
- { CODEPAGE_ISUPPER, 0x00d1, 0x00f1 }, /* 0x00d1 */
- { CODEPAGE_ISUPPER, 0x00d2, 0x00f2 }, /* 0x00d2 */
- { CODEPAGE_ISUPPER, 0x00d3, 0x00f3 }, /* 0x00d3 */
- { CODEPAGE_ISUPPER, 0x00d4, 0x00f4 }, /* 0x00d4 */
- { CODEPAGE_ISUPPER, 0x00d5, 0x00f5 }, /* 0x00d5 */
- { CODEPAGE_ISUPPER, 0x00d6, 0x00f6 }, /* 0x00d6 */
- { CODEPAGE_ISNONE, 0x00d7, 0x00d7 }, /* 0x00d7 */
- { CODEPAGE_ISUPPER, 0x00d8, 0x00f8 }, /* 0x00d8 */
- { CODEPAGE_ISUPPER, 0x00d9, 0x00f9 }, /* 0x00d9 */
- { CODEPAGE_ISUPPER, 0x00da, 0x00fa }, /* 0x00da */
- { CODEPAGE_ISUPPER, 0x00db, 0x00fb }, /* 0x00db */
- { CODEPAGE_ISUPPER, 0x00dc, 0x00fc }, /* 0x00dc */
- { CODEPAGE_ISUPPER, 0x00dd, 0x00fd }, /* 0x00dd */
- { CODEPAGE_ISUPPER, 0x00de, 0x00fe }, /* 0x00de */
- { CODEPAGE_ISNONE, 0x00df, 0x00df }, /* 0x00df */
- { CODEPAGE_ISLOWER, 0x00c0, 0x00e0 }, /* 0x00e0 */
- { CODEPAGE_ISLOWER, 0x00c1, 0x00e1 }, /* 0x00e1 */
- { CODEPAGE_ISLOWER, 0x00c2, 0x00e2 }, /* 0x00e2 */
- { CODEPAGE_ISLOWER, 0x00c3, 0x00e3 }, /* 0x00e3 */
- { CODEPAGE_ISLOWER, 0x00c4, 0x00e4 }, /* 0x00e4 */
- { CODEPAGE_ISLOWER, 0x00c5, 0x00e5 }, /* 0x00e5 */
- { CODEPAGE_ISLOWER, 0x00c6, 0x00e6 }, /* 0x00e6 */
- { CODEPAGE_ISLOWER, 0x00c7, 0x00e7 }, /* 0x00e7 */
- { CODEPAGE_ISLOWER, 0x00c8, 0x00e8 }, /* 0x00e8 */
- { CODEPAGE_ISLOWER, 0x00c9, 0x00e9 }, /* 0x00e9 */
- { CODEPAGE_ISLOWER, 0x00ca, 0x00ea }, /* 0x00ea */
- { CODEPAGE_ISLOWER, 0x00cb, 0x00eb }, /* 0x00eb */
- { CODEPAGE_ISLOWER, 0x00cc, 0x00ec }, /* 0x00ec */
- { CODEPAGE_ISLOWER, 0x00cd, 0x00ed }, /* 0x00ed */
- { CODEPAGE_ISLOWER, 0x00ce, 0x00ee }, /* 0x00ee */
- { CODEPAGE_ISLOWER, 0x00cf, 0x00ef }, /* 0x00ef */
- { CODEPAGE_ISLOWER, 0x00d0, 0x00f0 }, /* 0x00f0 */
- { CODEPAGE_ISLOWER, 0x00d1, 0x00f1 }, /* 0x00f1 */
- { CODEPAGE_ISLOWER, 0x00d2, 0x00f2 }, /* 0x00f2 */
- { CODEPAGE_ISLOWER, 0x00d3, 0x00f3 }, /* 0x00f3 */
- { CODEPAGE_ISLOWER, 0x00d4, 0x00f4 }, /* 0x00f4 */
- { CODEPAGE_ISLOWER, 0x00d5, 0x00f5 }, /* 0x00f5 */
- { CODEPAGE_ISLOWER, 0x00d6, 0x00f6 }, /* 0x00f6 */
- { CODEPAGE_ISNONE, 0x00f7, 0x00f7 }, /* 0x00f7 */
- { CODEPAGE_ISLOWER, 0x00d8, 0x00f8 }, /* 0x00f8 */
- { CODEPAGE_ISLOWER, 0x00d9, 0x00f9 }, /* 0x00f9 */
- { CODEPAGE_ISLOWER, 0x00da, 0x00fa }, /* 0x00fa */
- { CODEPAGE_ISLOWER, 0x00db, 0x00fb }, /* 0x00fb */
- { CODEPAGE_ISLOWER, 0x00dc, 0x00fc }, /* 0x00fc */
- { CODEPAGE_ISLOWER, 0x00dd, 0x00fd }, /* 0x00fd */
- { CODEPAGE_ISLOWER, 0x00de, 0x00fe }, /* 0x00fe */
- { CODEPAGE_ISNONE, 0x00ff, 0x00ff } /* 0x00ff */
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_CP_LATIN5_H */
diff --git a/usr/src/uts/common/smbsrv/cp_latin6.h b/usr/src/uts/common/smbsrv/cp_latin6.h
deleted file mode 100644
index fd86d276c4..0000000000
--- a/usr/src/uts/common/smbsrv/cp_latin6.h
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SMBSRV_CP_LATIN6_H
-#define _SMBSRV_CP_LATIN6_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
- * This is the codepage for the Latin-6 Character Set.
- * This codepage defines values for the special characters
- * needed for the written alphabets of the following
- * Nordic Languages: Greenlandic, Eskimo, Lappish,
- * and Icelandic
- * The Latin-6 character set is also known as iso-8859-10
- */
-
-#include <smbsrv/codepage.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-codepage_t Latin6_codepage[256] = {
- { CODEPAGE_ISNONE, 0x0000, 0x0000 }, /* 0x0000 */
- { CODEPAGE_ISNONE, 0x0001, 0x0001 }, /* 0x0001 */
- { CODEPAGE_ISNONE, 0x0002, 0x0002 }, /* 0x0002 */
- { CODEPAGE_ISNONE, 0x0003, 0x0003 }, /* 0x0003 */
- { CODEPAGE_ISNONE, 0x0004, 0x0004 }, /* 0x0004 */
- { CODEPAGE_ISNONE, 0x0005, 0x0005 }, /* 0x0005 */
- { CODEPAGE_ISNONE, 0x0006, 0x0006 }, /* 0x0006 */
- { CODEPAGE_ISNONE, 0x0007, 0x0007 }, /* 0x0007 */
- { CODEPAGE_ISNONE, 0x0008, 0x0008 }, /* 0x0008 */
- { CODEPAGE_ISNONE, 0x0009, 0x0009 }, /* 0x0009 */
- { CODEPAGE_ISNONE, 0x000a, 0x000a }, /* 0x000a */
- { CODEPAGE_ISNONE, 0x000b, 0x000b }, /* 0x000b */
- { CODEPAGE_ISNONE, 0x000c, 0x000c }, /* 0x000c */
- { CODEPAGE_ISNONE, 0x000d, 0x000d }, /* 0x000d */
- { CODEPAGE_ISNONE, 0x000e, 0x000e }, /* 0x000e */
- { CODEPAGE_ISNONE, 0x000f, 0x000f }, /* 0x000f */
- { CODEPAGE_ISNONE, 0x0010, 0x0010 }, /* 0x0010 */
- { CODEPAGE_ISNONE, 0x0011, 0x0011 }, /* 0x0011 */
- { CODEPAGE_ISNONE, 0x0012, 0x0012 }, /* 0x0012 */
- { CODEPAGE_ISNONE, 0x0013, 0x0013 }, /* 0x0013 */
- { CODEPAGE_ISNONE, 0x0014, 0x0014 }, /* 0x0014 */
- { CODEPAGE_ISNONE, 0x0015, 0x0015 }, /* 0x0015 */
- { CODEPAGE_ISNONE, 0x0016, 0x0016 }, /* 0x0016 */
- { CODEPAGE_ISNONE, 0x0017, 0x0017 }, /* 0x0017 */
- { CODEPAGE_ISNONE, 0x0018, 0x0018 }, /* 0x0018 */
- { CODEPAGE_ISNONE, 0x0019, 0x0019 }, /* 0x0019 */
- { CODEPAGE_ISNONE, 0x001a, 0x001a }, /* 0x001a */
- { CODEPAGE_ISNONE, 0x001b, 0x001b }, /* 0x001b */
- { CODEPAGE_ISNONE, 0x001c, 0x001c }, /* 0x001c */
- { CODEPAGE_ISNONE, 0x001d, 0x001d }, /* 0x001d */
- { CODEPAGE_ISNONE, 0x001e, 0x001e }, /* 0x001e */
- { CODEPAGE_ISNONE, 0x001f, 0x001f }, /* 0x001f */
- { CODEPAGE_ISNONE, 0x0020, 0x0020 }, /* 0x0020 */
- { CODEPAGE_ISNONE, 0x0021, 0x0021 }, /* 0x0021 */
- { CODEPAGE_ISNONE, 0x0022, 0x0022 }, /* 0x0022 */
- { CODEPAGE_ISNONE, 0x0023, 0x0023 }, /* 0x0023 */
- { CODEPAGE_ISNONE, 0x0024, 0x0024 }, /* 0x0024 */
- { CODEPAGE_ISNONE, 0x0025, 0x0025 }, /* 0x0025 */
- { CODEPAGE_ISNONE, 0x0026, 0x0026 }, /* 0x0026 */
- { CODEPAGE_ISNONE, 0x0027, 0x0027 }, /* 0x0027 */
- { CODEPAGE_ISNONE, 0x0028, 0x0028 }, /* 0x0028 */
- { CODEPAGE_ISNONE, 0x0029, 0x0029 }, /* 0x0029 */
- { CODEPAGE_ISNONE, 0x002a, 0x002a }, /* 0x002a */
- { CODEPAGE_ISNONE, 0x002b, 0x002b }, /* 0x002b */
- { CODEPAGE_ISNONE, 0x002c, 0x002c }, /* 0x002c */
- { CODEPAGE_ISNONE, 0x002d, 0x002d }, /* 0x002d */
- { CODEPAGE_ISNONE, 0x002e, 0x002e }, /* 0x002e */
- { CODEPAGE_ISNONE, 0x002f, 0x002f }, /* 0x002f */
- { CODEPAGE_ISNONE, 0x0030, 0x0030 }, /* 0x0030 */
- { CODEPAGE_ISNONE, 0x0031, 0x0031 }, /* 0x0031 */
- { CODEPAGE_ISNONE, 0x0032, 0x0032 }, /* 0x0032 */
- { CODEPAGE_ISNONE, 0x0033, 0x0033 }, /* 0x0033 */
- { CODEPAGE_ISNONE, 0x0034, 0x0034 }, /* 0x0034 */
- { CODEPAGE_ISNONE, 0x0035, 0x0035 }, /* 0x0035 */
- { CODEPAGE_ISNONE, 0x0036, 0x0036 }, /* 0x0036 */
- { CODEPAGE_ISNONE, 0x0037, 0x0037 }, /* 0x0037 */
- { CODEPAGE_ISNONE, 0x0038, 0x0038 }, /* 0x0038 */
- { CODEPAGE_ISNONE, 0x0039, 0x0039 }, /* 0x0039 */
- { CODEPAGE_ISNONE, 0x003a, 0x003a }, /* 0x003a */
- { CODEPAGE_ISNONE, 0x003b, 0x003b }, /* 0x003b */
- { CODEPAGE_ISNONE, 0x003c, 0x003c }, /* 0x003c */
- { CODEPAGE_ISNONE, 0x003d, 0x003d }, /* 0x003d */
- { CODEPAGE_ISNONE, 0x003e, 0x003e }, /* 0x003e */
- { CODEPAGE_ISNONE, 0x003f, 0x003f }, /* 0x003f */
- { CODEPAGE_ISNONE, 0x0040, 0x0040 }, /* 0x0040 */
- { CODEPAGE_ISUPPER, 0x0041, 0x0061 }, /* 0x0041 */
- { CODEPAGE_ISUPPER, 0x0042, 0x0062 }, /* 0x0042 */
- { CODEPAGE_ISUPPER, 0x0043, 0x0063 }, /* 0x0043 */
- { CODEPAGE_ISUPPER, 0x0044, 0x0064 }, /* 0x0044 */
- { CODEPAGE_ISUPPER, 0x0045, 0x0065 }, /* 0x0045 */
- { CODEPAGE_ISUPPER, 0x0046, 0x0066 }, /* 0x0046 */
- { CODEPAGE_ISUPPER, 0x0047, 0x0067 }, /* 0x0047 */
- { CODEPAGE_ISUPPER, 0x0048, 0x0068 }, /* 0x0048 */
- { CODEPAGE_ISUPPER, 0x0049, 0x0069 }, /* 0x0049 */
- { CODEPAGE_ISUPPER, 0x004a, 0x006a }, /* 0x004a */
- { CODEPAGE_ISUPPER, 0x004b, 0x006b }, /* 0x004b */
- { CODEPAGE_ISUPPER, 0x004c, 0x006c }, /* 0x004c */
- { CODEPAGE_ISUPPER, 0x004d, 0x006d }, /* 0x004d */
- { CODEPAGE_ISUPPER, 0x004e, 0x006e }, /* 0x004e */
- { CODEPAGE_ISUPPER, 0x004f, 0x006f }, /* 0x004f */
- { CODEPAGE_ISUPPER, 0x0050, 0x0070 }, /* 0x0050 */
- { CODEPAGE_ISUPPER, 0x0051, 0x0071 }, /* 0x0051 */
- { CODEPAGE_ISUPPER, 0x0052, 0x0072 }, /* 0x0052 */
- { CODEPAGE_ISUPPER, 0x0053, 0x0073 }, /* 0x0053 */
- { CODEPAGE_ISUPPER, 0x0054, 0x0074 }, /* 0x0054 */
- { CODEPAGE_ISUPPER, 0x0055, 0x0075 }, /* 0x0055 */
- { CODEPAGE_ISUPPER, 0x0056, 0x0076 }, /* 0x0056 */
- { CODEPAGE_ISUPPER, 0x0057, 0x0077 }, /* 0x0057 */
- { CODEPAGE_ISUPPER, 0x0058, 0x0078 }, /* 0x0058 */
- { CODEPAGE_ISUPPER, 0x0059, 0x0079 }, /* 0x0059 */
- { CODEPAGE_ISUPPER, 0x005a, 0x007a }, /* 0x005a */
- { CODEPAGE_ISNONE, 0x005b, 0x005b }, /* 0x005b */
- { CODEPAGE_ISNONE, 0x005c, 0x005c }, /* 0x005c */
- { CODEPAGE_ISNONE, 0x005d, 0x005d }, /* 0x005d */
- { CODEPAGE_ISNONE, 0x005e, 0x005e }, /* 0x005e */
- { CODEPAGE_ISNONE, 0x005f, 0x005f }, /* 0x005f */
- { CODEPAGE_ISNONE, 0x0060, 0x0060 }, /* 0x0060 */
- { CODEPAGE_ISLOWER, 0x0041, 0x0061 }, /* 0x0061 */
- { CODEPAGE_ISLOWER, 0x0042, 0x0062 }, /* 0x0062 */
- { CODEPAGE_ISLOWER, 0x0043, 0x0063 }, /* 0x0063 */
- { CODEPAGE_ISLOWER, 0x0044, 0x0064 }, /* 0x0064 */
- { CODEPAGE_ISLOWER, 0x0045, 0x0065 }, /* 0x0065 */
- { CODEPAGE_ISLOWER, 0x0046, 0x0066 }, /* 0x0066 */
- { CODEPAGE_ISLOWER, 0x0047, 0x0067 }, /* 0x0067 */
- { CODEPAGE_ISLOWER, 0x0048, 0x0068 }, /* 0x0068 */
- { CODEPAGE_ISLOWER, 0x0049, 0x0069 }, /* 0x0069 */
- { CODEPAGE_ISLOWER, 0x004a, 0x006a }, /* 0x006a */
- { CODEPAGE_ISLOWER, 0x004b, 0x006b }, /* 0x006b */
- { CODEPAGE_ISLOWER, 0x004c, 0x006c }, /* 0x006c */
- { CODEPAGE_ISLOWER, 0x004d, 0x006d }, /* 0x006d */
- { CODEPAGE_ISLOWER, 0x004e, 0x006e }, /* 0x006e */
- { CODEPAGE_ISLOWER, 0x004f, 0x006f }, /* 0x006f */
- { CODEPAGE_ISLOWER, 0x0050, 0x0070 }, /* 0x0070 */
- { CODEPAGE_ISLOWER, 0x0051, 0x0071 }, /* 0x0071 */
- { CODEPAGE_ISLOWER, 0x0052, 0x0072 }, /* 0x0072 */
- { CODEPAGE_ISLOWER, 0x0053, 0x0073 }, /* 0x0073 */
- { CODEPAGE_ISLOWER, 0x0054, 0x0074 }, /* 0x0074 */
- { CODEPAGE_ISLOWER, 0x0055, 0x0075 }, /* 0x0075 */
- { CODEPAGE_ISLOWER, 0x0056, 0x0076 }, /* 0x0076 */
- { CODEPAGE_ISLOWER, 0x0057, 0x0077 }, /* 0x0077 */
- { CODEPAGE_ISLOWER, 0x0058, 0x0078 }, /* 0x0078 */
- { CODEPAGE_ISLOWER, 0x0059, 0x0079 }, /* 0x0079 */
- { CODEPAGE_ISLOWER, 0x005a, 0x007a }, /* 0x007a */
- { CODEPAGE_ISNONE, 0x007b, 0x007b }, /* 0x007b */
- { CODEPAGE_ISNONE, 0x007c, 0x007c }, /* 0x007c */
- { CODEPAGE_ISNONE, 0x007d, 0x007d }, /* 0x007d */
- { CODEPAGE_ISNONE, 0x007e, 0x007e }, /* 0x007e */
- { CODEPAGE_ISNONE, 0x007f, 0x007f }, /* 0x007f */
- { CODEPAGE_ISNONE, 0x0080, 0x0080 }, /* 0x0080 */
- { CODEPAGE_ISNONE, 0x0081, 0x0081 }, /* 0x0081 */
- { CODEPAGE_ISNONE, 0x0082, 0x0082 }, /* 0x0082 */
- { CODEPAGE_ISNONE, 0x0083, 0x0083 }, /* 0x0083 */
- { CODEPAGE_ISNONE, 0x0084, 0x0084 }, /* 0x0084 */
- { CODEPAGE_ISNONE, 0x0085, 0x0085 }, /* 0x0085 */
- { CODEPAGE_ISNONE, 0x0086, 0x0086 }, /* 0x0086 */
- { CODEPAGE_ISNONE, 0x0087, 0x0087 }, /* 0x0087 */
- { CODEPAGE_ISNONE, 0x0088, 0x0088 }, /* 0x0088 */
- { CODEPAGE_ISNONE, 0x0089, 0x0089 }, /* 0x0089 */
- { CODEPAGE_ISNONE, 0x008a, 0x008a }, /* 0x008a */
- { CODEPAGE_ISNONE, 0x008b, 0x008b }, /* 0x008b */
- { CODEPAGE_ISNONE, 0x008c, 0x008c }, /* 0x008c */
- { CODEPAGE_ISNONE, 0x008d, 0x008d }, /* 0x008d */
- { CODEPAGE_ISNONE, 0x008e, 0x008e }, /* 0x008e */
- { CODEPAGE_ISNONE, 0x008f, 0x008f }, /* 0x008f */
- { CODEPAGE_ISNONE, 0x0090, 0x0090 }, /* 0x0090 */
- { CODEPAGE_ISNONE, 0x0091, 0x0091 }, /* 0x0091 */
- { CODEPAGE_ISNONE, 0x0092, 0x0092 }, /* 0x0092 */
- { CODEPAGE_ISNONE, 0x0093, 0x0093 }, /* 0x0093 */
- { CODEPAGE_ISNONE, 0x0094, 0x0094 }, /* 0x0094 */
- { CODEPAGE_ISNONE, 0x0095, 0x0095 }, /* 0x0095 */
- { CODEPAGE_ISNONE, 0x0096, 0x0096 }, /* 0x0096 */
- { CODEPAGE_ISNONE, 0x0097, 0x0097 }, /* 0x0097 */
- { CODEPAGE_ISNONE, 0x0098, 0x0098 }, /* 0x0098 */
- { CODEPAGE_ISNONE, 0x0099, 0x0099 }, /* 0x0099 */
- { CODEPAGE_ISNONE, 0x009a, 0x009a }, /* 0x009a */
- { CODEPAGE_ISNONE, 0x009b, 0x009b }, /* 0x009b */
- { CODEPAGE_ISNONE, 0x009c, 0x009c }, /* 0x009c */
- { CODEPAGE_ISNONE, 0x009d, 0x009d }, /* 0x009d */
- { CODEPAGE_ISNONE, 0x009e, 0x009e }, /* 0x009e */
- { CODEPAGE_ISNONE, 0x009f, 0x009f }, /* 0x009f */
- { CODEPAGE_ISNONE, 0x00a0, 0x00a0 }, /* 0x00a0 */
- { CODEPAGE_ISUPPER, 0x00a1, 0x00b1 }, /* 0x00a1 */
- { CODEPAGE_ISUPPER, 0x00a2, 0x00b2 }, /* 0x00a2 */
- { CODEPAGE_ISUPPER, 0x00a3, 0x00b3 }, /* 0x00a3 */
- { CODEPAGE_ISUPPER, 0x00a4, 0x00b4 }, /* 0x00a4 */
- { CODEPAGE_ISUPPER, 0x00a5, 0x00b5 }, /* 0x00a5 */
- { CODEPAGE_ISUPPER, 0x00a6, 0x00b6 }, /* 0x00a6 */
- { CODEPAGE_ISNONE, 0x00a7, 0x00a7 }, /* 0x00a7 */
- { CODEPAGE_ISUPPER, 0x00a8, 0x00b8 }, /* 0x00a8 */
- { CODEPAGE_ISUPPER, 0x00a9, 0x00b9 }, /* 0x00a9 */
- { CODEPAGE_ISUPPER, 0x00aa, 0x00ba }, /* 0x00aa */
- { CODEPAGE_ISUPPER, 0x00ab, 0x00bb }, /* 0x00ab */
- { CODEPAGE_ISUPPER, 0x00ac, 0x00bc }, /* 0x00ac */
- { CODEPAGE_ISNONE, 0x00ad, 0x00ad }, /* 0x00ad */
- { CODEPAGE_ISUPPER, 0x00ae, 0x00be }, /* 0x00ae */
- { CODEPAGE_ISUPPER, 0x00af, 0x00bf }, /* 0x00af */
- { CODEPAGE_ISNONE, 0x00b0, 0x00b0 }, /* 0x00b0 */
- { CODEPAGE_ISLOWER, 0x00a1, 0x00b1 }, /* 0x00b1 */
- { CODEPAGE_ISLOWER, 0x00a2, 0x00b2 }, /* 0x00b2 */
- { CODEPAGE_ISLOWER, 0x00a3, 0x00b3 }, /* 0x00b3 */
- { CODEPAGE_ISLOWER, 0x00a4, 0x00b4 }, /* 0x00b4 */
- { CODEPAGE_ISLOWER, 0x00a5, 0x00b5 }, /* 0x00b5 */
- { CODEPAGE_ISLOWER, 0x00a6, 0x00b6 }, /* 0x00b6 */
- { CODEPAGE_ISNONE, 0x00b7, 0x00b7 }, /* 0x00b7 */
- { CODEPAGE_ISLOWER, 0x00a8, 0x00b8 }, /* 0x00b8 */
- { CODEPAGE_ISLOWER, 0x00a9, 0x00b9 }, /* 0x00b9 */
- { CODEPAGE_ISLOWER, 0x00aa, 0x00ba }, /* 0x00ba */
- { CODEPAGE_ISLOWER, 0x00ab, 0x00bb }, /* 0x00bb */
- { CODEPAGE_ISLOWER, 0x00ac, 0x00bc }, /* 0x00bc */
- { CODEPAGE_ISNONE, 0x00bd, 0x00bd }, /* 0x00bd */
- { CODEPAGE_ISLOWER, 0x00ae, 0x00be }, /* 0x00be */
- { CODEPAGE_ISLOWER, 0x00af, 0x00bf }, /* 0x00bf */
- { CODEPAGE_ISUPPER, 0x00c0, 0x00e0 }, /* 0x00c0 */
- { CODEPAGE_ISUPPER, 0x00c1, 0x00e1 }, /* 0x00c1 */
- { CODEPAGE_ISUPPER, 0x00c2, 0x00e2 }, /* 0x00c2 */
- { CODEPAGE_ISUPPER, 0x00c3, 0x00e3 }, /* 0x00c3 */
- { CODEPAGE_ISUPPER, 0x00c4, 0x00e4 }, /* 0x00c4 */
- { CODEPAGE_ISUPPER, 0x00c5, 0x00e5 }, /* 0x00c5 */
- { CODEPAGE_ISUPPER, 0x00c6, 0x00e6 }, /* 0x00c6 */
- { CODEPAGE_ISUPPER, 0x00c7, 0x00e7 }, /* 0x00c7 */
- { CODEPAGE_ISUPPER, 0x00c8, 0x00e8 }, /* 0x00c8 */
- { CODEPAGE_ISUPPER, 0x00c9, 0x00e9 }, /* 0x00c9 */
- { CODEPAGE_ISUPPER, 0x00ca, 0x00ea }, /* 0x00ca */
- { CODEPAGE_ISUPPER, 0x00cb, 0x00eb }, /* 0x00cb */
- { CODEPAGE_ISUPPER, 0x00cc, 0x00ec }, /* 0x00cc */
- { CODEPAGE_ISUPPER, 0x00cd, 0x00ed }, /* 0x00cd */
- { CODEPAGE_ISUPPER, 0x00ce, 0x00ee }, /* 0x00ce */
- { CODEPAGE_ISUPPER, 0x00cf, 0x00ef }, /* 0x00cf */
- { CODEPAGE_ISNONE, 0x00d0, 0x00d0 }, /* 0x00d0 */
- { CODEPAGE_ISUPPER, 0x00d1, 0x00f1 }, /* 0x00d1 */
- { CODEPAGE_ISUPPER, 0x00d2, 0x00f2 }, /* 0x00d2 */
- { CODEPAGE_ISUPPER, 0x00d3, 0x00f3 }, /* 0x00d3 */
- { CODEPAGE_ISUPPER, 0x00d4, 0x00f4 }, /* 0x00d4 */
- { CODEPAGE_ISUPPER, 0x00d5, 0x00f5 }, /* 0x00d5 */
- { CODEPAGE_ISUPPER, 0x00d6, 0x00f6 }, /* 0x00d6 */
- { CODEPAGE_ISUPPER, 0x00d7, 0x00f7 }, /* 0x00d7 */
- { CODEPAGE_ISUPPER, 0x00d8, 0x00f8 }, /* 0x00d8 */
- { CODEPAGE_ISUPPER, 0x00d9, 0x00f9 }, /* 0x00d9 */
- { CODEPAGE_ISUPPER, 0x00da, 0x00fa }, /* 0x00da */
- { CODEPAGE_ISUPPER, 0x00db, 0x00fb }, /* 0x00db */
- { CODEPAGE_ISUPPER, 0x00dc, 0x00fc }, /* 0x00dc */
- { CODEPAGE_ISUPPER, 0x00dd, 0x00fd }, /* 0x00dd */
- { CODEPAGE_ISUPPER, 0x00de, 0x00fe }, /* 0x00de */
- { CODEPAGE_ISNONE, 0x00df, 0x00df }, /* 0x00df */
- { CODEPAGE_ISLOWER, 0x00c0, 0x00e0 }, /* 0x00e0 */
- { CODEPAGE_ISLOWER, 0x00c1, 0x00e1 }, /* 0x00e1 */
- { CODEPAGE_ISLOWER, 0x00c2, 0x00e2 }, /* 0x00e2 */
- { CODEPAGE_ISLOWER, 0x00c3, 0x00e3 }, /* 0x00e3 */
- { CODEPAGE_ISLOWER, 0x00c4, 0x00e4 }, /* 0x00e4 */
- { CODEPAGE_ISLOWER, 0x00c5, 0x00e5 }, /* 0x00e5 */
- { CODEPAGE_ISLOWER, 0x00c6, 0x00e6 }, /* 0x00e6 */
- { CODEPAGE_ISLOWER, 0x00c7, 0x00e7 }, /* 0x00e7 */
- { CODEPAGE_ISLOWER, 0x00c8, 0x00e8 }, /* 0x00e8 */
- { CODEPAGE_ISLOWER, 0x00c9, 0x00e9 }, /* 0x00e9 */
- { CODEPAGE_ISLOWER, 0x00ca, 0x00ea }, /* 0x00ea */
- { CODEPAGE_ISLOWER, 0x00cb, 0x00eb }, /* 0x00eb */
- { CODEPAGE_ISLOWER, 0x00cc, 0x00ec }, /* 0x00ec */
- { CODEPAGE_ISLOWER, 0x00cd, 0x00ed }, /* 0x00ed */
- { CODEPAGE_ISLOWER, 0x00ce, 0x00ee }, /* 0x00ee */
- { CODEPAGE_ISLOWER, 0x00cf, 0x00ef }, /* 0x00ef */
- { CODEPAGE_ISNONE, 0x00f0, 0x00f0 }, /* 0x00f0 */
- { CODEPAGE_ISLOWER, 0x00d1, 0x00f1 }, /* 0x00f1 */
- { CODEPAGE_ISLOWER, 0x00d2, 0x00f2 }, /* 0x00f2 */
- { CODEPAGE_ISLOWER, 0x00d3, 0x00f3 }, /* 0x00f3 */
- { CODEPAGE_ISLOWER, 0x00d4, 0x00f4 }, /* 0x00f4 */
- { CODEPAGE_ISLOWER, 0x00d5, 0x00f5 }, /* 0x00f5 */
- { CODEPAGE_ISLOWER, 0x00d6, 0x00f6 }, /* 0x00f6 */
- { CODEPAGE_ISLOWER, 0x00d7, 0x00f7 }, /* 0x00f7 */
- { CODEPAGE_ISLOWER, 0x00d8, 0x00f8 }, /* 0x00f8 */
- { CODEPAGE_ISLOWER, 0x00d9, 0x00f9 }, /* 0x00f9 */
- { CODEPAGE_ISLOWER, 0x00da, 0x00fa }, /* 0x00fa */
- { CODEPAGE_ISLOWER, 0x00db, 0x00fb }, /* 0x00fb */
- { CODEPAGE_ISLOWER, 0x00dc, 0x00fc }, /* 0x00fc */
- { CODEPAGE_ISLOWER, 0x00dd, 0x00fd }, /* 0x00fd */
- { CODEPAGE_ISLOWER, 0x00de, 0x00fe }, /* 0x00fe */
- { CODEPAGE_ISNONE, 0x00ff, 0x00ff } /* 0x00ff */
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_CP_LATIN6_H */
diff --git a/usr/src/uts/common/smbsrv/cp_unicode.h b/usr/src/uts/common/smbsrv/cp_unicode.h
index e2f1eb83f9..187aadd34e 100644
--- a/usr/src/uts/common/smbsrv/cp_unicode.h
+++ b/usr/src/uts/common/smbsrv/cp_unicode.h
@@ -19,26 +19,24 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SMBSRV_CP_UNICODE_H
#define _SMBSRV_CP_UNICODE_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <smbsrv/smb_i18n.h>
+#include <smbsrv/string.h>
#ifdef __cplusplus
extern "C" {
#endif
struct unicode_cp {
- mts_wchar_t val;
- mts_wchar_t ctype;
- mts_wchar_t lower;
- mts_wchar_t upper;
+ smb_wchar_t val;
+ smb_wchar_t ctype;
+ smb_wchar_t lower;
+ smb_wchar_t upper;
};
struct unicode_cp a_unicode[] = {
diff --git a/usr/src/uts/common/smbsrv/cp_usascii.h b/usr/src/uts/common/smbsrv/cp_usascii.h
index d72c28bb88..63e830ca03 100644
--- a/usr/src/uts/common/smbsrv/cp_usascii.h
+++ b/usr/src/uts/common/smbsrv/cp_usascii.h
@@ -19,33 +19,25 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SMBSRV_CP_USASCII_H
#define _SMBSRV_CP_USASCII_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
- * This file specifies a codepage mapping for a given character set as
- * specified below:
- *
- * This is the codepage for the US-ASCII Character Set
- * This codepage defines values for the characters of the
- * written alphabet of the English language. The US-ASCII
- * character set is used in the USA. It is a proper
- * subset of the Latin-1 character set.
+ * This file specifies the codepage mapping the US-ASCII Character Set,
+ * which is a subset of the Latin-1 character set.
*/
-#include <smbsrv/codepage.h>
+#include <smbsrv/string.h>
#ifdef __cplusplus
extern "C" {
#endif
-codepage_t usascii_codepage[256] = {
+smb_codepage_t usascii_codepage[256] = {
{ CODEPAGE_ISNONE, 0x0000, 0x0000 }, /* 0x0000 */
{ CODEPAGE_ISNONE, 0x0001, 0x0001 }, /* 0x0001 */
{ CODEPAGE_ISNONE, 0x0002, 0x0002 }, /* 0x0002 */
diff --git a/usr/src/uts/common/smbsrv/ctype.h b/usr/src/uts/common/smbsrv/ctype.h
deleted file mode 100644
index 284db64419..0000000000
--- a/usr/src/uts/common/smbsrv/ctype.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SMBSRV_CTYPE_H
-#define _SMBSRV_CTYPE_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <smbsrv/codepage.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define _mts_between(l, c, u) ((l) <= (c) && (c) <= (u))
-
-/*
- * These macros take non-ascii characters into account.
- * Their behavior depends on the codepage that is used.
- */
-#define mts_islower(c) codepage_islower((c))
-#define mts_isupper(c) codepage_isupper((c))
-#define mts_tolower(c) codepage_tolower((c))
-#define mts_toupper(c) codepage_toupper((c))
-
-#define mts_isalpha(c) (mts_islower(c) || mts_isupper(c))
-#define mts_isdigit(c) _mts_between('0', (c), '9')
-#define mts_isalnum(c) (mts_isalpha(c) || mts_isdigit(c))
-#define mts_isxdigit(c) (mts_isdigit(c) || \
- _mts_between('a', (c), 'f') || \
- _mts_between('A', (c), 'F'))
-#define mts_isblank(c) ((c) == ' ' || (c) == '\t')
-#define mts_isspace(c) ((c) == ' ' || \
- (c) == '\t' || \
- (c) == '\n' || \
- (c) == '\r' || \
- (c) == '\f')
-#define mts_isascii(c) (!((c) &~ 0x7F))
-
-/* These macros only apply to ASCII */
-#define mts_isalpha_ascii(c) \
- (_mts_between('a', (c), 'z') || _mts_between('A', (c), 'Z'))
-#define mts_isalnum_ascii(c) (mts_isalpha_ascii(c) || mts_isdigit(c))
-
-/* should it include non-ascii characters ? */
-#define mts_isprint(c) _mts_between('!', (c), '~')
-#define mts_iscntrl(c) (((c) >= 0) && ((c) <= 0x1f)) || ((c) == 0x7f))
-#define mts_ispunct(c) (mts_isprint(c) && !mts_isxdigit(c) && !mts_isspace(c))
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_CTYPE_H */
diff --git a/usr/src/uts/common/smbsrv/lm.h b/usr/src/uts/common/smbsrv/lm.h
deleted file mode 100644
index e1cc28c220..0000000000
--- a/usr/src/uts/common/smbsrv/lm.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-
-#ifndef _SMBSRV_LM_H
-#define _SMBSRV_LM_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
- * This file provides global Lan Manager definitions.
- */
-
-#include <smbsrv/wintypes.h>
-#include <syslog.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_LM_H */
diff --git a/usr/src/uts/common/smbsrv/mac_cifs.h b/usr/src/uts/common/smbsrv/mac_cifs.h
index 26f0451958..767cf50cd8 100644
--- a/usr/src/uts/common/smbsrv/mac_cifs.h
+++ b/usr/src/uts/common/smbsrv/mac_cifs.h
@@ -19,15 +19,13 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SMBSRV_MAC_CIFS_H
#define _SMBSRV_MAC_CIFS_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* This file provides definitions for the Macintosh Extensions for CIFS
* interface (see http://www.thursby.com/cifs).
@@ -42,7 +40,7 @@ extern "C" {
* Macintosh information level extensions. The entire list is presented
* here for convenience but for consistency with the existing CIFS
* information levels don't use these values directly. Use the SMB_MAC_
- * definitions in cifs.h.
+ * definitions in smb.h.
*
* SmbTrans2QueryFsInformation: MAC_QUERY_FS_INFO
* SmbTrans2Find{First|Next}2: MAC_FIND_BOTH_HFS_INFO
diff --git a/usr/src/uts/common/smbsrv/mbuf.h b/usr/src/uts/common/smbsrv/mbuf.h
index 562ef5168f..8f16d6f4ef 100644
--- a/usr/src/uts/common/smbsrv/mbuf.h
+++ b/usr/src/uts/common/smbsrv/mbuf.h
@@ -67,7 +67,7 @@
#include <sys/types.h>
#include <sys/param.h>
#include <sys/list.h>
-#include <smbsrv/smb_i18n.h>
+#include <smbsrv/string.h>
#include <smbsrv/alloc.h>
#ifdef __cplusplus
diff --git a/usr/src/uts/common/smbsrv/msgbuf.h b/usr/src/uts/common/smbsrv/msgbuf.h
index 465ba476de..66d03680f1 100644
--- a/usr/src/uts/common/smbsrv/msgbuf.h
+++ b/usr/src/uts/common/smbsrv/msgbuf.h
@@ -19,15 +19,13 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SMBSRV_MSGBUF_H
#define _SMBSRV_MSGBUF_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Definition and interface for smb_msgbuf buffer management. The
* smb_msgbuf interface is typically used to encode or decode SMB
@@ -36,7 +34,7 @@
*/
#include <sys/types.h>
-#include <smbsrv/smb_i18n.h>
+#include <smbsrv/string.h>
#ifdef __cplusplus
extern "C" {
diff --git a/usr/src/uts/common/smbsrv/ndl/srvsvc.ndl b/usr/src/uts/common/smbsrv/ndl/srvsvc.ndl
index 5ce47c7609..f0fa0740c5 100644
--- a/usr/src/uts/common/smbsrv/ndl/srvsvc.ndl
+++ b/usr/src/uts/common/smbsrv/ndl/srvsvc.ndl
@@ -1299,7 +1299,7 @@ struct mslm_NetNameValidate {
*/
/*
- * Share types for shiX_type fields - duplicated from cifs.h
+ * Share types for shiX_type fields - duplicated from smb.h
*/
#ifndef _SHARE_TYPES_DEFINED_
#define _SHARE_TYPES_DEFINED_
diff --git a/usr/src/uts/common/smbsrv/ndr.h b/usr/src/uts/common/smbsrv/ndr.h
index 22d33f763f..034d877b19 100644
--- a/usr/src/uts/common/smbsrv/ndr.h
+++ b/usr/src/uts/common/smbsrv/ndr.h
@@ -46,7 +46,7 @@
#include <string.h>
#include <smbsrv/wintypes.h>
#include <smbsrv/ndl/rpcpdu.ndl>
-#include <smbsrv/smb_i18n.h>
+#include <smbsrv/string.h>
#endif
#ifdef __cplusplus
@@ -465,8 +465,8 @@ int ndr_inner_pointer(ndr_ref_t *);
int ndr_inner_reference(ndr_ref_t *);
int ndr_inner_array(ndr_ref_t *);
-size_t ndr_mbstowcs(struct ndr_stream *, mts_wchar_t *, const char *, size_t);
-int ndr_mbtowc(struct ndr_stream *, mts_wchar_t *, const char *, size_t);
+size_t ndr_mbstowcs(struct ndr_stream *, smb_wchar_t *, const char *, size_t);
+int ndr_mbtowc(struct ndr_stream *, smb_wchar_t *, const char *, size_t);
void nds_bswap(void *src, void *dst, size_t len);
diff --git a/usr/src/uts/common/smbsrv/nmpipes.h b/usr/src/uts/common/smbsrv/nmpipes.h
index f0cd81cc3a..6a75fdd0f8 100644
--- a/usr/src/uts/common/smbsrv/nmpipes.h
+++ b/usr/src/uts/common/smbsrv/nmpipes.h
@@ -19,15 +19,13 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SMBSRV_NMPIPES_H
#define _SMBSRV_NMPIPES_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* This file defines pre-defined and system common named pipes.
*
@@ -111,7 +109,7 @@ extern "C" {
#define PIPE_REPL "\\PIPE\\repl"
/*
- * Named pipe function codes (NTDDK cifs.h).
+ * Named pipe function codes (NTDDK).
*/
#define TRANS_SET_NMPIPE_STATE 0x01
#define TRANS_RAW_READ_NMPIPE 0x11
diff --git a/usr/src/uts/common/smbsrv/oem.h b/usr/src/uts/common/smbsrv/oem.h
deleted file mode 100644
index af30711dac..0000000000
--- a/usr/src/uts/common/smbsrv/oem.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-/*
- * Support for oem <-> unicode translations.
- */
-
-#ifndef _SMBSRV_OEM_H
-#define _SMBSRV_OEM_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#include <smbsrv/smb_i18n.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define oem_default_smb_cpid OEM_CP_IND_850
-#define oem_default_telnet_cpid OEM_CP_IND_1252
-#define oem_default_language "english"
-
-/*
- * The id should corresponds to oemcp_table in os/library/oem.c.
- */
-typedef enum codepage_id {
- OEM_CP_IND_850 = 0,
- OEM_CP_IND_950,
- OEM_CP_IND_1252,
- OEM_CP_IND_949,
- OEM_CP_IND_936,
- OEM_CP_IND_932,
- OEM_CP_IND_852,
- OEM_CP_IND_1250,
- OEM_CP_IND_1253,
- OEM_CP_IND_737,
- OEM_CP_IND_1254,
- OEM_CP_IND_857,
- OEM_CP_IND_1251,
- OEM_CP_IND_866,
- OEM_CP_IND_1255,
- OEM_CP_IND_862,
- OEM_CP_IND_1256,
- OEM_CP_IND_720,
- NO_OF_OEM_CP_INDS
-} codepage_id_t;
-
-
-typedef struct language {
- char *language;
- unsigned int smbIndex;
- unsigned int telnetIndex;
-} language;
-
-
-/*
- * cpid = the cpid of the oemcp_table that oempage_t belong to.
- * value = the conversion values
- */
-typedef struct oempage_t {
- unsigned int cpid;
- mts_wchar_t *value;
-} oempage_t;
-
-/*
- * Private functions for opmlang.c
- */
-extern int oem_codepage_init(unsigned int);
-extern void oem_codepage_free(unsigned int);
-extern language *oem_get_lang_table(void);
-extern int oem_no_of_languages(void);
-#define NO_OF_LANGUAGES oem_no_of_languages()
-
-/*
- * Public functions
- */
-extern size_t unicodestooems(char *, const mts_wchar_t *, size_t, unsigned int);
-extern size_t oemstounicodes(mts_wchar_t *, const char *, size_t, unsigned int);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_OEM_H */
diff --git a/usr/src/uts/common/smbsrv/smb.h b/usr/src/uts/common/smbsrv/smb.h
index 1214f041d7..af502643e6 100644
--- a/usr/src/uts/common/smbsrv/smb.h
+++ b/usr/src/uts/common/smbsrv/smb.h
@@ -19,43 +19,41 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SMBSRV_SMB_H
#define _SMBSRV_SMB_H
-/*
- * SMB definitions and interfaces, mostly defined in the CIFS spec.
- */
-
-#pragma ident "%Z%%M% %I% %E% SMI"
/*
- * SMB definitions and interfaces, mostly defined in the CIFS spec.
+ * SMB definitions and interfaces, mostly defined in the SMB and CIFS specs.
*/
-
#ifdef _KERNEL
#include <sys/types.h>
#endif
-#include <smbsrv/smb_i18n.h>
+#include <smbsrv/string.h>
#include <smbsrv/msgbuf.h>
+#include <smbsrv/ntstatus.h>
+#include <smbsrv/nterror.h>
+#include <smbsrv/doserror.h>
+#include <smbsrv/ntaccess.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
+/*
+ * Macintosh Extensions for CIFS
+ */
+#include <smbsrv/mac_cifs.h>
/*
- * Typedefs from CIFS section 3.2
+ * NT Installable File System (IFS) interface.
*/
-typedef unsigned char UCHAR;
-typedef unsigned short USHORT;
-typedef uint32_t ULONG;
-typedef int32_t LONG;
+#include <smbsrv/ntifs.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
/*
* The msgbuf format and length of an SMB header.
@@ -65,6 +63,18 @@ typedef int32_t LONG;
#define SMB_HEADER_LEN 32
#define SMB_SIG_SIZE 8 /* SMB signature size */
+#define SMB_HEADER_ED_FMT "Mbbbwbww8c2.wwww"
+#define SMB_HEADER_ED_LEN (4+1+1+1+2+1+2+12+2+2+2+2)
+#define SMB_TRANSHDR_ED_FMT "wwwwb.wl2.wwwwb."
+#define SMB_TRANSHDR_ED_LEN (2+2+2+2+1+1+2+4+2+2+2+2+2+1+1)
+#define SMB_TRANSSHDR_ED_FMT "wwwwwwwww"
+#define SMB_TRANSSHDR_ED_LEN (2+2+2+2+2+2+2+2)
+#define SMB_TRANS2SHDR_ED_FMT "wwwwwwwww"
+#define SMB_TRANS2SHDR_ED_LEN (2+2+2+2+2+2+2+2+2)
+/* There is something wrong with this. Should be 38 bytes. It is 37 bytes */
+#define SMB_NT_TRANSHDR_ED_FMT "b2.llllllllbw"
+#define SMB_NT_TRANSHDR_ED_LEN (1+2+4+4+4+4+4+4+4+4+1+2)
+
/*
* CIFS definition for the SMB header (CIFS Section 3.2). Note that the
* pid_high field is not documented in the 1997 CIFS specificaction. This
@@ -73,75 +83,43 @@ typedef int32_t LONG;
* ready structure.
*/
typedef struct smb_hdr {
- UCHAR protocol[4];
- UCHAR command;
+ uint8_t protocol[4];
+ uint8_t command;
union {
struct {
- UCHAR error_class;
- UCHAR reserved;
- USHORT error;
+ uint8_t error_class;
+ uint8_t reserved;
+ uint16_t error;
} dos_error;
- ULONG ntstatus;
- }status;
+ uint32_t ntstatus;
+ } status;
- UCHAR flags;
- USHORT flags2;
- USHORT pid_high;
+ uint8_t flags;
+ uint16_t flags2;
+ uint16_t pid_high;
union {
- USHORT pad[5];
+ uint16_t pad[5];
struct {
- USHORT reserved;
- UCHAR security_sig[SMB_SIG_SIZE];
+ uint16_t reserved;
+ uint8_t security_sig[SMB_SIG_SIZE];
} extra;
} extra;
- USHORT tid;
- USHORT pid;
- USHORT uid;
- USHORT mid;
+ uint16_t tid;
+ uint16_t pid;
+ uint16_t uid;
+ uint16_t mid;
} smb_hdr_t;
-
/*
* Encoded or packed SMB header in network ready format.
*/
typedef struct smb_hdrbuf {
- unsigned char hdr[SMB_HEADER_LEN];
+ uint8_t hdr[SMB_HEADER_LEN];
} smb_hdrbuf_t;
-typedef struct smb_nethdr {
- uint8_t sh_protocol[4];
- uint8_t sh_command;
-
- union {
- struct {
- uint8_t sh_error_class;
- uint8_t sh_reserved;
- uint8_t sh_error[2];
- } dos_error;
- uint8_t sh_ntstatus[4];
- } status;
-
- uint8_t sh_flags;
- uint8_t sh_flags2[2];
- uint8_t sh_pid_high[2];
-
- union {
- uint8_t sh_pad[10];
- struct {
- uint8_t sh_reserved[2];
- uint8_t sh_security_sig[SMB_SIG_SIZE];
- } extra;
- } extra;
-
- uint8_t sh_tid[2];
- uint8_t sh_pid[2];
- uint8_t sh_uid[2];
- uint8_t sh_mid[2];
-} smb_nethdr_t;
-
/*
* Protocol magic value as a 32-bit. This will be 0xff 0x53 0x4d 0x42 on
* the wire.
@@ -155,118 +133,1210 @@ typedef struct smb_nethdr {
* month range is 1-12, and the day range is 1-31.
*/
typedef struct smb_date {
- USHORT day : 5;
- USHORT month : 4;
- USHORT year : 7;
+ uint16_t day : 5;
+ uint16_t month : 4;
+ uint16_t year : 7;
} smb_date_t;
-
/*
* The hours range is 0-23, the minutes range is 0-59 and the two_sec
* range is 0-29.
*/
typedef struct smb_time {
- USHORT two_sec : 5;
- USHORT minutes : 6;
- USHORT hours : 5;
+ uint16_t two_sec : 5;
+ uint16_t minutes : 6;
+ uint16_t hours : 5;
} smb_time_t;
-
/*
* This is a 64-bit signed absolute time representing 100ns increments.
* A positive value represents the absolute time since 1601AD. A
* negative value represents a context specific relative time.
*/
typedef struct smb_time2 {
- ULONG low_time;
- LONG high_time;
+ uint32_t low_time;
+ int32_t high_time;
} smb_time2_t;
-
/*
* The number of seconds since Jan 1, 1970, 00:00:00.0.
*/
typedef uint32_t smb_utime_t;
-
#define SMB_LM_NEGOTIATE_WORDCNT 13
#define SMB_NT_NEGOTIATE_WORDCNT 17
+#define SMB_NAME83_EXTLEN 3
+#define SMB_NAME83_BASELEN 8
+#define SMB_NAME83_LEN 12
-typedef struct smb_nt_negotiate_rsp {
- UCHAR word_count;
- USHORT dialect_index;
- UCHAR security_mode;
- USHORT max_mpx;
- USHORT max_vc;
- ULONG max_buffer_size;
- ULONG max_raw_size;
- ULONG session_key;
- ULONG capabilities;
- ULONG time_low;
- ULONG time_high;
- USHORT server_tz;
- UCHAR security_len;
- USHORT byte_count;
- UCHAR *guid;
- UCHAR *challenge;
- UCHAR *oem_domain;
-} smb_nt_negotiate_rsp_t;
-
-/*
- * SMB_COM_TRANSACTION
- */
-typedef struct smb_transact_rsp {
- UCHAR WordCount; /* Count of data bytes */
- /* value = 10 + SetupCount */
- USHORT TotalParamCount; /* Total parameter bytes being sent */
- USHORT TotalDataCount; /* Total data bytes being sent */
- USHORT Reserved;
- USHORT ParamCount; /* Parameter bytes sent this buffer */
- USHORT ParamOffset; /* Offset (from hdr start) to params */
- USHORT ParamDisplacement; /* Displacement of these param bytes */
- USHORT DataCount; /* Data bytes sent this buffer */
- USHORT DataOffset; /* Offset (from hdr start) to data */
- USHORT DataDisplacement; /* Displacement of these data bytes */
- UCHAR SetupCount; /* Count of setup words */
- USHORT BCC;
-#if 0
- UCHAR Reserved2; /* Reserved (pad above to word) */
- UCHAR Buffer[1]; /* Buffer containing: */
- USHORT Setup[]; /* Setup words (# = SetupWordCount) */
- USHORT ByteCount; /* Count of data bytes */
- UCHAR Pad[]; /* Pad to SHORT or LONG */
- UCHAR Params[]; /* Param. bytes (# = ParamCount) */
- UCHAR Pad1[]; /* Pad to SHORT or LONG */
- UCHAR Data[]; /* Data bytes (# = DataCount) */
-#endif
-} smb_transact_rsp_t;
-
-/*
- * SMBreadX
- */
-typedef struct smb_read_andx_rsp {
- UCHAR WordCount;
- UCHAR AndXCmd;
- UCHAR AndXReserved;
- USHORT AndXOffset;
- USHORT Remaining;
- USHORT DataCompactionMode;
- USHORT Reserved;
- USHORT DataLength;
- USHORT DataOffset;
- ULONG DataLengthHigh;
- USHORT Reserved2[3];
- USHORT ByteCount;
-#if 0
- UCHAR Pad[];
- UCHAR Data[];
-#endif
-} smb_read_andx_rsp_t;
+/* Share types */
+#ifndef _SHARE_TYPES_DEFINED_
+#define _SHARE_TYPES_DEFINED_
+#define STYPE_DISKTREE 0x00000000
+#define STYPE_PRINTQ 0x00000001
+#define STYPE_DEVICE 0x00000002
+#define STYPE_IPC 0x00000003
+#define STYPE_MASK 0x0000000F
+#define STYPE_DFS 0x00000064
+#define STYPE_HIDDEN 0x80000000
+#define STYPE_SPECIAL 0x80000000
+#endif /* _SHARE_TYPES_DEFINED_ */
+
+#define STYPE_ISDSK(S) (((S) & STYPE_MASK) == STYPE_DISKTREE)
+#define STYPE_ISPRN(S) (((S) & STYPE_MASK) == STYPE_PRINTQ)
+#define STYPE_ISDEV(S) (((S) & STYPE_MASK) == STYPE_DEVICE)
+#define STYPE_ISIPC(S) (((S) & STYPE_MASK) == STYPE_IPC)
+
+/*
+ * NtCreateAndX and NtTransactCreate creation flags: defined in CIFS
+ * section 4.2.2
+ *
+ * Creation Flag Name Value Description
+ * ========================== ====== ==================================
+ * NT_CREATE_REQUEST_OPLOCK 0x02 Level I oplock requested
+ * NT_CREATE_REQUEST_OPBATCH 0x04 Batch oplock requested
+ * NT_CREATE_OPEN_TARGET_DIR 0x08 Target for open is a directory
+ */
+#define NT_CREATE_FLAG_REQUEST_OPLOCK 0x02
+#define NT_CREATE_FLAG_REQUEST_OPBATCH 0x04
+#define NT_CREATE_FLAG_OPEN_TARGET_DIR 0x08
+
+
+/*
+ * Define the filter flags for NtNotifyChangeDirectoryFile
+ */
+#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
+#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
+#define FILE_NOTIFY_CHANGE_NAME 0x00000003
+#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
+#define FILE_NOTIFY_CHANGE_SIZE 0x00000008
+#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
+#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
+#define FILE_NOTIFY_CHANGE_CREATION 0x00000040
+#define FILE_NOTIFY_CHANGE_EA 0x00000080
+#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
+#define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
+#define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
+#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
+#define FILE_NOTIFY_VALID_MASK 0x00000fff
+
+
+/*
+ * Define the file action type codes for NtNotifyChangeDirectoryFile
+ */
+#define FILE_ACTION_ADDED 0x00000001
+#define FILE_ACTION_REMOVED 0x00000002
+#define FILE_ACTION_MODIFIED 0x00000003
+#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
+#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
+#define FILE_ACTION_ADDED_STREAM 0x00000006
+#define FILE_ACTION_REMOVED_STREAM 0x00000007
+#define FILE_ACTION_MODIFIED_STREAM 0x00000008
+
+
+/* Lock type flags */
+#define LOCKING_ANDX_NORMAL_LOCK 0x00
+#define LOCKING_ANDX_SHARED_LOCK 0x01
+#define LOCKING_ANDX_OPLOCK_RELEASE 0x02
+#define LOCKING_ANDX_CHANGE_LOCK_TYPE 0x04
+#define LOCKING_ANDX_CANCEL_LOCK 0x08
+#define LOCKING_ANDX_LARGE_FILES 0x10
+
+#define SMB_COM_CREATE_DIRECTORY 0x00
+#define SMB_COM_DELETE_DIRECTORY 0x01
+#define SMB_COM_OPEN 0x02
+#define SMB_COM_CREATE 0x03
+#define SMB_COM_CLOSE 0x04
+#define SMB_COM_FLUSH 0x05
+#define SMB_COM_DELETE 0x06
+#define SMB_COM_RENAME 0x07
+#define SMB_COM_QUERY_INFORMATION 0x08
+#define SMB_COM_SET_INFORMATION 0x09
+#define SMB_COM_READ 0x0A
+#define SMB_COM_WRITE 0x0B
+#define SMB_COM_LOCK_BYTE_RANGE 0x0C
+#define SMB_COM_UNLOCK_BYTE_RANGE 0x0D
+#define SMB_COM_CREATE_TEMPORARY 0x0E
+#define SMB_COM_CREATE_NEW 0x0F
+#define SMB_COM_CHECK_DIRECTORY 0x10
+#define SMB_COM_PROCESS_EXIT 0x11
+#define SMB_COM_SEEK 0x12
+#define SMB_COM_LOCK_AND_READ 0x13
+#define SMB_COM_WRITE_AND_UNLOCK 0x14
+
+#define SMB_COM_READ_RAW 0x1A
+#define SMB_COM_READ_MPX 0x1B
+#define SMB_COM_READ_MPX_SECONDARY 0x1C
+#define SMB_COM_WRITE_RAW 0x1D
+#define SMB_COM_WRITE_MPX 0x1E
+#define SMB_COM_WRITE_MPX_SECONDARY 0x1F
+#define SMB_COM_WRITE_COMPLETE 0x20
+
+#define SMB_COM_SET_INFORMATION2 0x22
+#define SMB_COM_QUERY_INFORMATION2 0x23
+#define SMB_COM_LOCKING_ANDX 0x24
+#define SMB_COM_TRANSACTION 0x25
+#define SMB_COM_TRANSACTION_SECONDARY 0x26
+#define SMB_COM_IOCTL 0x27
+#define SMB_COM_IOCTL_SECONDARY 0x28
+#define SMB_COM_COPY 0x29
+#define SMB_COM_MOVE 0x2A
+#define SMB_COM_ECHO 0x2B
+#define SMB_COM_WRITE_AND_CLOSE 0x2C
+#define SMB_COM_OPEN_ANDX 0x2D
+#define SMB_COM_READ_ANDX 0x2E
+#define SMB_COM_WRITE_ANDX 0x2F
+
+#define SMB_COM_CLOSE_AND_TREE_DISC 0x31
+#define SMB_COM_TRANSACTION2 0x32
+#define SMB_COM_TRANSACTION2_SECONDARY 0x33
+#define SMB_COM_FIND_CLOSE2 0x34
+#define SMB_COM_FIND_NOTIFY_CLOSE 0x35
+
+#define SMB_COM_TREE_CONNECT 0x70
+#define SMB_COM_TREE_DISCONNECT 0x71
+#define SMB_COM_NEGOTIATE 0x72
+#define SMB_COM_SESSION_SETUP_ANDX 0x73
+#define SMB_COM_LOGOFF_ANDX 0x74
+#define SMB_COM_TREE_CONNECT_ANDX 0x75
+
+#define SMB_COM_QUERY_INFORMATION_DISK 0x80
+#define SMB_COM_SEARCH 0x81
+#define SMB_COM_FIND 0x82
+#define SMB_COM_FIND_UNIQUE 0x83
+#define SMB_COM_FIND_CLOSE 0x84
+
+#define SMB_COM_NT_TRANSACT 0xA0
+#define SMB_COM_NT_TRANSACT_SECONDARY 0xA1
+#define SMB_COM_NT_CREATE_ANDX 0xA2
+#define SMB_COM_NT_CANCEL 0xA4
+
+#define SMB_COM_OPEN_PRINT_FILE 0xC0
+#define SMB_COM_WRITE_PRINT_FILE 0xC1
+#define SMB_COM_CLOSE_PRINT_FILE 0xC2
+#define SMB_COM_GET_PRINT_QUEUE 0xC3
+
+
+/*
+ * Flags field of the SMB header. The names in parenthesis represent
+ * alternative names for the flags.
+ *
+ * SMB_FLAGS_LOCK_AND_READ_OK If the server supports LockAndRead and
+ * (SMB_FLAGS_LOCKS_SUBDIALECT) WriteAndUnlock, it sets this bit in the
+ * Negotiate response.
+ *
+ * SMB_FLAGS_SEND_NO_ACK When on, the client guarantees that there
+ * (SMB_FLAGS_RCV_BUF_POSTED) is a receive buffer posted such that a
+ * "Send-No-Ack" can be used by the server
+ * to respond to the client's request.
+ *
+ * SMB_FLAGS_CASE_INSENSITIVE This is part of the Flags field of every
+ * SMB header. If this bit is set, then all
+ * pathnames in the SMB should be treated as
+ * case-insensitive. Otherwise pathnames are
+ * case-sensitive.
+ *
+ * SMB_FLAGS_CANONICALIZED_PATHS When on in SessionSetupX, this indicates
+ * that all paths sent to the server are
+ * already in OS/2 canonicalized format.
+ *
+ * OS/2 canonical format means that file/directory names are in upper case,
+ * are valid characters, . and .. have been removed and single backslashes
+ * are used as separators.
+ *
+ * SMB_FLAGS_OPLOCK When set in an open file request SMBs
+ * (Open, Create, OpenX, etc.) this bit
+ * indicates a request for an oplock on the
+ * file. When set in the response, this bit
+ * indicates that the oplock was granted.
+ *
+ * SMB_FLAGS_OPLOCK_NOTIFY_ANY When on, this bit indicates that the server
+ * should notify the client on any request
+ * that could cause the file to be changed.
+ * If not set, the server only notifies the
+ * client on other open requests on the file.
+ * This bit is only relevant when
+ * SMB_FLAGS_OPLOCK is set.
+ *
+ * SMB_FLAGS_SERVER_TO_REDIR This bit indicates that the SMB is being
+ * (SMB_FLAGS_REPLY) sent from server to (client) redirector.
+ */
+#define SMB_FLAGS_LOCK_AND_READ_OK 0x01
+#define SMB_FLAGS_SEND_NO_ACK 0x02
+#define SMB_FLAGS_RESERVED 0x04
+#define SMB_FLAGS_CASE_INSENSITIVE 0x08
+#define SMB_FLAGS_CANONICALIZED_PATHS 0x10
+#define SMB_FLAGS_OPLOCK 0x20
+#define SMB_FLAGS_OPLOCK_NOTIFY_ANY 0x40
+#define SMB_FLAGS_REPLY 0x80
+
+
+/*
+ * Flags2 field of the SMB header.
+ */
+#define SMB_FLAGS2_KNOWS_LONG_NAMES 0x0001
+#define SMB_FLAGS2_KNOWS_EAS 0x0002
+#define SMB_FLAGS2_SMB_SECURITY_SIGNATURE 0x0004
+#define SMB_FLAGS2_IS_LONG_NAME 0x0040
+#define SMB_FLAGS2_REPARSE_PATH 0x0400
+#define SMB_FLAGS2_EXT_SEC 0x0800
+#define SMB_FLAGS2_DFS 0x1000
+#define SMB_FLAGS2_PAGING_IO 0x2000
+#define SMB_FLAGS2_NT_STATUS 0x4000
+#define SMB_FLAGS2_UNICODE 0x8000
+
+#define DIALECT_UNKNOWN 0
+#define PC_NETWORK_PROGRAM_1_0 1 /* The original MSNET SMB protocol */
+#define PCLAN1_0 2 /* Some versions of the original MSNET */
+#define MICROSOFT_NETWORKS_1_03 3 /* This is used for the MS-NET 1.03 */
+#define MICROSOFT_NETWORKS_3_0 4 /* This is the DOS LANMAN 1.0 specific */
+#define LANMAN1_0 5 /* This is the first version of the full */
+#define LM1_2X002 6 /* This is the first version of the full */
+#define DOS_LM1_2X002 7 /* This is the dos equivalent of the */
+#define DOS_LANMAN2_1 8 /* DOS LANMAN2.1 */
+#define LANMAN2_1 9 /* OS/2 LANMAN2.1 */
+#define Windows_for_Workgroups_3_1a 10 /* Windows for Workgroups Version 1.0 */
+#define NT_LM_0_12 11 /* The SMB protocol designed for NT */
+
+/*
+ * SMB_TREE_CONNECT_ANDX OptionalSupport flags
+ *
+ * SMB_SUPPORT_SEARCH_BITS The server supports SearchAttributes.
+ * SMB_SHARE_IS_IN_DFS The share is managed by DFS.
+ * SMB_CSC_MASK Offline-caching mask - see CSC values.
+ * SMB_UNIQUE_FILE_NAME The server uses long names and does not support
+ * short names. This indicates to clients that
+ * they may perform directory name-space caching.
+ * SMB_EXTENDED_SIGNATURES The server will use signing key protection.
+ *
+ * SMB_CSC_CACHE_MANUAL_REINT Clients are allowed to cache files for offline
+ * use as requested by users but automatic
+ * file-by-file reintegration is not allowed.
+ * SMB_CSC_CACHE_AUTO_REINT Clients are allowed to automatically cache
+ * files for offline use and file-by-file
+ * reintegration is allowed.
+ * SMB_CSC_CACHE_VDO Clients are allowed to automatically cache files
+ * for offline use, file-by-file reintegration is
+ * allowed and clients are permitted to work from
+ * their local cache even while offline.
+ * SMB_CSC_CACHE_NONE Client-side caching is disabled for this share.
+ *
+ * SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM
+ * The server will filter directory entries based
+ * on the access permissions of the client.
+ */
+#define SMB_SUPPORT_SEARCH_BITS 0x0001
+#define SMB_SHARE_IS_IN_DFS 0x0002
+#define SMB_CSC_MASK 0x000C
+#define SMB_UNIQUE_FILE_NAME 0x0010
+#define SMB_EXTENDED_SIGNATURES 0x0020
+
+#define SMB_CSC_CACHE_MANUAL_REINT 0x0000
+#define SMB_CSC_CACHE_AUTO_REINT 0x0004
+#define SMB_CSC_CACHE_VDO 0x0008
+#define SMB_CSC_CACHE_NONE 0x000C
+
+#define SHI1005_FLAGS_ACCESS_BASED_DIRECTORY_ENUM 0x0800
+
+/*
+ * The subcommand codes, placed in SETUP[0], for named pipe operations are:
+ * SubCommand Code Value Description
+ * =================== ===== =========================================
+ */
+
+#define CallNamedPipe 0x54 /* open/write/read/close pipe */
+#define WaitNamedPipe 0x53 /* wait for pipe to be nonbusy */
+#define PeekNmPipe 0x23 /* read but don't remove data */
+#define QNmPHandState 0x21 /* query pipe handle modes */
+#define SetNmPHandState 0x01 /* set pipe handle modes */
+#define QNmPipeInfo 0x22 /* query pipe attributes */
+#define TransactNmPipe 0x26 /* write/read operation on pipe */
+#define RawReadNmPipe 0x11 /* read pipe in "raw" (non message mode) */
+#define RawWriteNmPipe 0x31 /* write pipe "raw" (non message mode) */
+
+
+
+/*
+ * Setup[0] Transaction2 Value Description
+ * Subcommand Code
+ * ========================== ===== =============================
+ */
+
+#define TRANS2_OPEN2 0x00 /* Create file, extended attributes */
+#define TRANS2_FIND_FIRST2 0x01 /* Begin search for files */
+#define TRANS2_FIND_NEXT2 0x02 /* Resume search for files */
+#define TRANS2_QUERY_FS_INFORMATION 0x03 /* Get file system information */
+#define _TRANS2_RESV_0x04 0x04 /* Reserved */
+#define TRANS2_QUERY_PATH_INFORMATION 0x05 /* Get info, named file or dir */
+#define TRANS2_SET_PATH_INFORMATION 0x06 /* Set info, named file or dir */
+#define TRANS2_QUERY_FILE_INFORMATION 0x07 /* Get info, handle */
+#define TRANS2_SET_FILE_INFORMATION 0x08 /* Set info, handle */
+#define TRANS2_FSCTL 0x09 /* Not implemented by NT server */
+#define TRANS2_IOCTL2 0x0A /* Not implemented by NT server */
+#define TRANS2_FIND_NOTIFY_FIRST 0x0B /* Not implemented by NT server */
+#define TRANS2_FIND_NOTIFY_NEXT 0x0C /* Not implemented by NT server */
+#define TRANS2_CREATE_DIRECTORY 0x0D /* Create dir, extended attributes */
+#define TRANS2_SESSION_SETUP 0x0E /* Session setup, extended security */
+#define TRANS2_GET_DFS_REFERRAL 0x10 /* Get a Dfs referral */
+#define TRANS2_REPORT_DFS_INCONSISTENCY 0x11 /* Report a Dfs inconsistency */
+
+/*
+ * Access Mode Encoding (CIFS/1.0 1996 Section 3.8).
+ *
+ * The desired access mode passed in SmbOpen and SmbOpenAndX has the following
+ * mapping:
+ *
+ * 1111 11
+ * 5432 1098 7654 3210
+ * rWrC rLLL rSSS rAAA
+ *
+ * where:
+ *
+ * W - Write through mode. No read ahead or write behind allowed on
+ * this file or device. When protocol is returned, data is expected
+ * to be on the disk or device.
+ *
+ * S - Sharing mode:
+ * 0 - Compatibility mode (as in core open)
+ * 1 - Deny read/write/execute (exclusive)
+ * 2 - Deny write
+ * 3 - Deny read/execute
+ * 4 - Deny none
+ *
+ * A - Access mode
+ * 0 - Open for reading
+ * 1 - Open for writing
+ * 2 - Open for reading and writing
+ * 3 - Open for execute
+ *
+ * rSSSrAAA = 11111111 (hex FF) indicates FCB open (as in core protocol)
+ *
+ * C - Cache mode
+ * 0 - Normal file
+ * 1 - Do not cache this file
+ *
+ * L - Locality of reference
+ * 0 - Locality of reference is unknown
+ * 1 - Mainly sequential access
+ * 2 - Mainly random access
+ * 3 - Random access with some locality
+ * 4 to 7 - Currently undefined
+ */
+
+
+#define SMB_DA_SHARE_MASK 0x70
+#define SMB_DA_ACCESS_MASK 0x07
+#define SMB_DA_FCB_MASK (UCHAR)0xFF
+
+#define SMB_DA_ACCESS_READ 0x00
+#define SMB_DA_ACCESS_WRITE 0x01
+#define SMB_DA_ACCESS_READ_WRITE 0x02
+#define SMB_DA_ACCESS_EXECUTE 0x03
+
+#define SMB_DA_SHARE_COMPATIBILITY 0x00
+#define SMB_DA_SHARE_EXCLUSIVE 0x10
+#define SMB_DA_SHARE_DENY_WRITE 0x20
+#define SMB_DA_SHARE_DENY_READ 0x30
+#define SMB_DA_SHARE_DENY_NONE 0x40
+
+#define SMB_DA_FCB (UCHAR)0xFF
+
+#define SMB_CACHE_NORMAL 0x0000
+#define SMB_DO_NOT_CACHE 0x1000
+
+#define SMB_LR_UNKNOWN 0x0000
+#define SMB_LR_SEQUENTIAL 0x0100
+#define SMB_LR_RANDOM 0x0200
+#define SMB_LR_RANDOM_WITH_LOCALITY 0x0300
+#define SMB_LR_MASK 0x0F00
+
+#define SMB_DA_WRITE_THROUGH 0x4000
+
+/*
+ * Macros used for share reservation rule checking
+ */
+
+#define SMB_DENY_READ(share_access) ((share_access & FILE_SHARE_READ) == 0)
+
+#define SMB_DENY_WRITE(share_access) ((share_access & FILE_SHARE_WRITE) == 0)
+
+#define SMB_DENY_DELETE(share_access) ((share_access & FILE_SHARE_DELETE) == 0)
+
+#define SMB_DENY_RW(share_access) \
+ ((share_access & (FILE_SHARE_READ | FILE_SHARE_WRITE)) == 0)
+
+#define SMB_DENY_ALL(share_access) (share_access == 0)
+
+#define SMB_DENY_NONE(share_access) (share_access == FILE_SHARE_ALL)
+
+/*
+ * The SMB open function determines what action should be taken depending
+ * on the existence or lack thereof of files used in the operation. It
+ * has the following mapping:
+ *
+ * 1111 1
+ * 5432 1098 7654 3210
+ * rrrr rrrr rrrC rrOO
+ *
+ * where:
+ *
+ * O - Open (action to be taken if the target file exists)
+ * 0 - Fail
+ * 1 - Open or Append file
+ * 2 - Truncate file
+ *
+ * C - Create (action to be taken if the target file does not exist)
+ * 0 - Fail
+ * 1 - Create file
+ */
+
+#define SMB_OFUN_OPEN_MASK 0x3
+#define SMB_OFUN_CREATE_MASK 0x10
+
+#define SMB_OFUN_OPEN_FAIL 0
+#define SMB_OFUN_OPEN_APPEND 1
+#define SMB_OFUN_OPEN_OPEN 1
+#define SMB_OFUN_OPEN_TRUNCATE 2
+
+#define SMB_OFUN_CREATE_FAIL 0x00
+#define SMB_OFUN_CREATE_CREATE 0x10
+
+/*
+ * The Action field of OpenAndX has the following format:
+ *
+ * 1111 11
+ * 5432 1098 7654 3210
+ * Lrrr rrrr rrrr rrOO
+ *
+ * where:
+ *
+ * L - Opportunistic lock. 1 if lock granted, else 0.
+ *
+ * O - Open action:
+ * 1 - The file existed and was opened
+ * 2 - The file did not exist but was created
+ * 3 - The file existed and was truncated
+ */
+
+#define SMB_OACT_LOCK 0x8000
+#define SMB_OACT_OPENED 0x01
+#define SMB_OACT_CREATED 0x02
+#define SMB_OACT_TRUNCATED 0x03
+
+#define SMB_OACT_OPLOCK 0x8000
+
+#define SMB_FTYPE_DISK 0
+#define SMB_FTYPE_BYTE_PIPE 1
+#define SMB_FTYPE_MESG_PIPE 2
+#define SMB_FTYPE_PRINTER 3
+#define SMB_FTYPE_UNKNOWN 0xFFFF
+
+#define SMB_DEVST_BLOCKING 0x8000
+#define SMB_DEVST_ENDPOINT 0x4000
+#define SMB_DEVST_TYPE_MASK 0x0C00
+#define SMB_DEVST_TYPE_BYTE_PIPE 0x0000
+#define SMB_DEVST_TYPE_MESG_PIPE 0x0400
+#define SMB_DEVST_RMODE_MASK 0x0300
+#define SMB_DEVST_RMODE_BYTES 0x0000
+#define SMB_DEVST_RMODE_MESGS 0x0100
+#define SMB_DEVST_ICOUNT_MASK 0x00FF /* not used */
+
+#define SMB_FTYPE_IS_DISK(F) ((F) == SMB_FTYPE_DISK)
+#define SMB_FTYPE_IS_PIPE(F) \
+ (((F) == SMB_FTYPE_BYTE_PIPE) || ((F) == SMB_FTYPE_MESG_PIPE))
+#define SMB_FTYPE_IS_PRINTER(F) ((F) == SMB_FTYPE_PRINTER)
+
+/*
+ * TRANS2_FIND
+ */
+#define SMB_FIND_FILE_DIRECTORY_INFO 0x101
+#define SMB_FIND_FILE_FULL_DIRECTORY_INFO 0x102
+#define SMB_FIND_FILE_NAMES_INFO 0x103
+#define SMB_FIND_FILE_BOTH_DIRECTORY_INFO 0x104
+#define SMB_FIND_FILE_ID_FULL_DIRECTORY_INFO 0x105
+#define SMB_FIND_FILE_ID_BOTH_DIRECTORY_INFO 0x106
+#define SMB_MAC_FIND_BOTH_HFS_INFO MAC_FIND_BOTH_HFS_INFO
+
+
+/*
+ * Flags for TRANS2_FIND_FIRST2 and TRANS2_FIND_NEXT2 (NTDDK).
+ *
+ * If SMB_FIND_RETURN_RESUME_KEYS was set in the request parameters,
+ * each entry is preceded by a four-byte resume key.
+ */
+#define SMB_FIND_CLOSE_AFTER_REQUEST 0x01
+#define SMB_FIND_CLOSE_AT_EOS 0x02
+#define SMB_FIND_RETURN_RESUME_KEYS 0x04
+#define SMB_FIND_CONTINUE_FROM_LAST 0x08
+#define SMB_FIND_WITH_BACKUP_INTENT 0x10
+
+
+/*
+ * TRANS2_QUERY_FS_INFORMATION
+ */
+#define SMB_INFO_ALLOCATION 1
+#define SMB_INFO_VOLUME 2
+#define SMB_QUERY_FS_LABEL_INFO 0x101
+#define SMB_QUERY_FS_VOLUME_INFO 0x102
+#define SMB_QUERY_FS_SIZE_INFO 0x103
+#define SMB_QUERY_FS_DEVICE_INFO 0x104
+#define SMB_QUERY_FS_ATTRIBUTE_INFO 0x105
+#define SMB_QUERY_FS_QUOTA_INFO 0x106 /* unused? */
+#define SMB_QUERY_FS_CONTROL_INFO 0x107
+#define SMB_MAC_QUERY_FS_INFO MAC_QUERY_FS_INFO
+
+
+/*
+ * Internal use only.
+ * Define information levels to represent the following requests:
+ * smb_query_information
+ * smb_query_information2
+ * smb_set_information
+ * smb_set_information2
+ */
+#define SMB_QUERY_INFORMATION 0x3001
+#define SMB_QUERY_INFORMATION2 0x3002
+#define SMB_SET_INFORMATION 0x3001
+#define SMB_SET_INFORMATION2 0x3002
+
+/* TRANS2_QUERY_{PATH,FILE}_INFORMATION */
+#define SMB_INFO_STANDARD 1 /* query, set */
+#define SMB_INFO_QUERY_EA_SIZE 2 /* query */
+#define SMB_INFO_SET_EAS 2 /* set */
+#define SMB_INFO_QUERY_EAS_FROM_LIST 3 /* query */
+#define SMB_INFO_QUERY_ALL_EAS 4 /* query */
+#define SMB_INFO_QUERY_FULL_NAME 5 /* unused */
+#define SMB_INFO_IS_NAME_VALID 6 /* query */
+
+#define SMB_QUERY_FILE_BASIC_INFO 0x101
+#define SMB_QUERY_FILE_STANDARD_INFO 0x102
+#define SMB_QUERY_FILE_EA_INFO 0x103
+#define SMB_QUERY_FILE_NAME_INFO 0x104
+#define SMB_QUERY_FILE_ALLOCATION_INFO 0x105 /* unused */
+#define SMB_QUERY_FILE_END_OF_FILE_INFO 0x106 /* unused */
+#define SMB_QUERY_FILE_ALL_INFO 0x107
+#define SMB_QUERY_FILE_ALT_NAME_INFO 0x108
+#define SMB_QUERY_FILE_STREAM_INFO 0x109
+#define SMB_QUERY_FILE_COMPRESSION_INFO 0x10B
+
+#define SMB_MAC_SET_FINDER_INFO MAC_SET_FINDER_INFO
+#define SMB_MAC_DT_ADD_APPL MAC_DT_ADD_APPL
+#define SMB_MAC_DT_REMOVE_APPL MAC_DT_REMOVE_APPL
+#define SMB_MAC_DT_GET_APPL MAC_DT_GET_APPL
+#define SMB_MAC_DT_GET_ICON MAC_DT_GET_ICON
+#define SMB_MAC_DT_GET_ICON_INFO MAC_DT_GET_ICON_INFO
+#define SMB_MAC_DT_ADD_ICON MAC_DT_ADD_ICON
+
+#define SMB_SET_FILE_BASIC_INFO 0x101
+#define SMB_SET_FILE_DISPOSITION_INFO 0x102
+#define SMB_SET_FILE_ALLOCATION_INFO 0x103
+#define SMB_SET_FILE_END_OF_FILE_INFO 0x104
+
+
+/* NT passthrough levels - see ntifs.h FILE_INFORMATION_CLASS */
+#define SMB_FILE_BASIC_INFORMATION 1004
+#define SMB_FILE_STANDARD_INFORMATION 1005
+#define SMB_FILE_INTERNAL_INFORMATION 1006
+#define SMB_FILE_EA_INFORMATION 1007
+#define SMB_FILE_ACCESS_INFORMATION 1008
+#define SMB_FILE_NAME_INFORMATION 1009
+#define SMB_FILE_RENAME_INFORMATION 1010
+#define SMB_FILE_LINK_INFORMATION 1011
+#define SMB_FILE_DISPOSITION_INFORMATION 1013
+#define SMB_FILE_ALL_INFORMATION 1018
+#define SMB_FILE_ALLOCATION_INFORMATION 1019
+#define SMB_FILE_END_OF_FILE_INFORMATION 1020
+#define SMB_FILE_ALT_NAME_INFORMATION 1021
+#define SMB_FILE_STREAM_INFORMATION 1022
+#define SMB_FILE_COMPRESSION_INFORMATION 1028
+#define SMB_FILE_ATTR_TAG_INFORMATION 1035
+
+/*
+ * The following bits may be set in the SecurityMode field of the
+ * SMB_COM_NEGOTIATE response.
+ *
+ * Notes:
+ * NEGOTIATE_SECURITY_SHARE_LEVEL is a montana2 invention.
+ *
+ * The NTDDK definitions are:
+ * #define NEGOTIATE_USER_SECURITY 0x01
+ * #define NEGOTIATE_ENCRYPT_PASSWORDS 0x02
+ * #define NEGOTIATE_SECURITY_SIGNATURES_ENABLED 0x04
+ * #define NEGOTIATE_SECURITY_SIGNATURES_REQUIRED 0x08
+ */
+#define NEGOTIATE_SECURITY_SHARE_LEVEL 0x00
+#define NEGOTIATE_SECURITY_USER_LEVEL 0x01
+#define NEGOTIATE_SECURITY_CHALLENGE_RESPONSE 0x02
+#define NEGOTIATE_SECURITY_SIGNATURES_ENABLED 0x04
+#define NEGOTIATE_SECURITY_SIGNATURES_REQUIRED 0x08
+
+
+/*
+ * Negotiated Capabilities (CIFS/1.0 section 4.1.1)
+ *
+ * Capabilities allow the server to tell the client what it supports.
+ * Undefined bits MUST be set to zero by servers, and MUST be ignored
+ * by clients. The bit definitions are:
+ *
+ * Capability Name Encoding Meaning
+ * ==================== ======== ==================================
+ * CAP_RAW_MODE 0x0001 The server supports SMB_COM_READ_RAW and
+ * SMB_COM_WRITE_RAW (obsolescent)
+ * CAP_MPX_MODE 0x0002 The server supports SMB_COM_READ_MPX and
+ * SMB_COM_WRITE_MPX (obsolescent)
+ * CAP_UNICODE 0x0004 The server supports Unicode strings
+ * CAP_LARGE_FILES 0x0008 The server supports large files with 64
+ * bit offsets
+ * CAP_NT_SMBS 0x0010 The server supports the SMBs particular
+ * to the NT LM 0.12 dialect.
+ * Implies CAP_NT_FIND.
+ * CAP_RPC_REMOTE_APIS 0x0020 The server supports remote admin API
+ * requests via DCE RPC
+ * CAP_STATUS32 0x0040 The server can respond with 32 bit
+ * status codes in Status.Status
+ * CAP_LEVEL_II_OPLOCKS 0x0080 The server supports level 2 oplocks
+ * CAP_LOCK_AND_READ 0x0100 The server supports the
+ * SMB_COM_LOCK_AND_READ SMB
+ * CAP_NT_FIND 0x0200
+ * CAP_BULK_TRANSFER 0x0400
+ * CAP_COMPRESSED_BULK 0x0800
+ * CAP_DFS 0x1000 The server is DFS aware
+ * CAP_LARGE_READX 0x4000 The server supports large
+ * SMB_COM_READ_ANDX
+ * CAP_LARGE_WRITEX 0x8000 The server supports large
+ * SMB_COM_WRITE_ANDX
+ * CAP_RESERVED 0x02000000 Reserved for future use.
+ * CAP_EXTENDED_SECURITY 0x80000000 The server supports extended security
+ * exchanges.
+ *
+ * Extended security exchanges provides a means of supporting arbitrary
+ * authentication protocols within CIFS. Security blobs are opaque to the
+ * CIFS protocol; they are messages in some authentication protocol that
+ * has been agreed upon by client and server by some out of band mechanism,
+ * for which CIFS merely functions as a transport. When
+ * CAP_EXTENDED_SECURITY is negotiated, the server includes a first
+ * security blob in its response; subsequent security blobs are exchanged
+ * in SMB_COM_SESSION_SETUP_ANDX requests and responses until the
+ * authentication protocol terminates.
+ */
+#define CAP_RAW_MODE 0x0001
+#define CAP_MPX_MODE 0x0002
+#define CAP_UNICODE 0x0004
+#define CAP_LARGE_FILES 0x0008
+#define CAP_NT_SMBS 0x0010
+#define CAP_RPC_REMOTE_APIS 0x0020
+#define CAP_STATUS32 0x0040
+#define CAP_LEVEL_II_OPLOCKS 0x0080
+#define CAP_LOCK_AND_READ 0x0100
+#define CAP_NT_FIND 0x0200
+#define CAP_BULK_TRANSFER 0x0400
+#define CAP_COMPRESSED_BULK 0x0800
+#define CAP_DFS 0x1000
+#define CAP_LARGE_READX 0x4000
+#define CAP_LARGE_WRITEX 0x8000
+#define CAP_RESERVED 0x02000000
+#define CAP_EXTENDED_SECURITY 0x80000000
+
+
+/*
+ * Different device types according to NT
+ */
+#define FILE_DEVICE_BEEP 0x00000001
+#define FILE_DEVICE_CD_ROM 0x00000002
+#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
+#define FILE_DEVICE_CONTROLLER 0x00000004
+#define FILE_DEVICE_DATALINK 0x00000005
+#define FILE_DEVICE_DFS 0x00000006
+#define FILE_DEVICE_DISK 0x00000007
+#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
+#define FILE_DEVICE_FILE_SYSTEM 0x00000009
+#define FILE_DEVICE_INPORT_PORT 0x0000000a
+#define FILE_DEVICE_KEYBOARD 0x0000000b
+#define FILE_DEVICE_MAILSLOT 0x0000000c
+#define FILE_DEVICE_MIDI_IN 0x0000000d
+#define FILE_DEVICE_MIDI_OUT 0x0000000e
+#define FILE_DEVICE_MOUSE 0x0000000f
+#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
+#define FILE_DEVICE_NAMED_PIPE 0x00000011
+#define FILE_DEVICE_NETWORK 0x00000012
+#define FILE_DEVICE_NETWORK_BROWSER 0x00000013
+#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
+#define FILE_DEVICE_NULL 0x00000015
+#define FILE_DEVICE_PARALLEL_PORT 0x00000016
+#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
+#define FILE_DEVICE_PRINTER 0x00000018
+#define FILE_DEVICE_SCANNER 0x00000019
+#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
+#define FILE_DEVICE_SERIAL_PORT 0x0000001b
+#define FILE_DEVICE_SCREEN 0x0000001c
+#define FILE_DEVICE_SOUND 0x0000001d
+#define FILE_DEVICE_STREAMS 0x0000001e
+#define FILE_DEVICE_TAPE 0x0000001f
+#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
+#define FILE_DEVICE_TRANSPORT 0x00000021
+#define FILE_DEVICE_UNKNOWN 0x00000022
+#define FILE_DEVICE_VIDEO 0x00000023
+#define FILE_DEVICE_VIRTUAL_DISK 0x00000024
+#define FILE_DEVICE_WAVE_IN 0x00000025
+#define FILE_DEVICE_WAVE_OUT 0x00000026
+#define FILE_DEVICE_8042_PORT 0x00000027
+#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
+#define FILE_DEVICE_BATTERY 0x00000029
+#define FILE_DEVICE_BUS_EXTENDER 0x0000002a
+#define FILE_DEVICE_MODEM 0x0000002b
+#define FILE_DEVICE_VDM 0x0000002c
+
+/*
+ * Some of these device types are not currently accessible over the network
+ * and may never be accessible over the network. Some may change to be
+ *
+ * accessible over the network. The values for device types that may never
+ * be accessible over the network may be redefined to be just reserved at
+ * some date in the future.
+ *
+ * Characteristics is the sum of any of the following:
+ */
+
+#define FILE_REMOVABLE_MEDIA 0x00000001
+#define FILE_READ_ONLY_DEVICE 0x00000002
+#define FILE_FLOPPY_DISKETTE 0x00000004
+#define FILE_WRITE_ONE_MEDIA 0x00000008
+#define FILE_REMOTE_DEVICE 0x00000010
+#define FILE_DEVICE_IS_MOUNTED 0x00000020
+#define FILE_VIRTUAL_VOLUME 0x00000040
+
+/*
+ * CREATE_ANDX ShareAccess Flags
+ */
+
+#define FILE_SHARE_NONE 0x00000000
+#define FILE_SHARE_READ 0x00000001
+#define FILE_SHARE_WRITE 0x00000002
+#define FILE_SHARE_DELETE 0x00000004
+#define FILE_SHARE_ALL 0x00000007
+#define FILE_SHARE_VALID_FLAGS 0x00000007
+
+
+/*
+ * CREATE_ANDX CreateDisposition flags
+ *
+ * FILE_SUPERSEDE If the file already exists it should be superseded
+ * by the specified file. If the file does not already
+ * exist then it should be created.
+ *
+ * FILE_CREATE If the file already exists the operation should fail.
+ * If the file does not already exist then it should be
+ * created. (aka CREATE_NEW)
+ *
+ * FILE_OPEN If the file already exists then it should be opened.
+ * If the file does not already exist then the operation
+ * should fail. (aka OPEN_EXISTING)
+ *
+ * FILE_OPEN_IF If the file already exists then it should be opened.
+ * If the file does not already exist then it should be
+ * created. (aka OPEN_ALWAYS)
+ *
+ * FILE_OVERWRITE If the file already exists, it should be opened and
+ * overwritten. If the file does not already exist then
+ * the operation should fail. (aka TRUNCATE_EXISTING)
+ *
+ * FILE_OVERWRITE_IF If the file already exists, it should be opened and
+ * overwritten. If the file does not already exist then
+ * it should be created. (aka CREATE_ALWAYS)
+ */
+#define FILE_SUPERSEDE 0x00000000
+#define FILE_OPEN 0x00000001
+#define FILE_CREATE 0x00000002
+#define FILE_OPEN_IF 0x00000003
+#define FILE_OVERWRITE 0x00000004
+#define FILE_OVERWRITE_IF 0x00000005
+#define FILE_MAXIMUM_DISPOSITION 0x00000005
+
+/*
+ * CREATE_ANDX Impersonation levels
+ */
+
+#define SECURITY_ANONYMOUS 0x00000001
+#define SECURITY_IDENTIFICATION 0x00000002
+#define SECURITY_IMPERSONATION 0x00000003
+#define SECURITY_DELEGATION 0x00000004
+
+/*
+ * CREATE_ANDX SecurityFlags
+ */
+
+#define SECURITY_CONTEXT_TRACKING 0x00000001
+#define SECURITY_EFFECTIVE_ONLY 0x00000002
+
+/*
+ * Server types
+ */
+#define SV_WORKSTATION 0x00000001 /* All workstations */
+#define SV_SERVER 0x00000002 /* All servers */
+#define SV_SQLSERVER 0x00000004 /* running with SQL server */
+#define SV_DOMAIN_CTRL 0x00000008 /* Primary domain controller */
+#define SV_DOMAIN_BAKCTRL 0x00000010 /* Backup domain controller */
+#define SV_TIME_SOURCE 0x00000020 /* running timesource service */
+#define SV_AFP 0x00000040 /* Apple File Protocol */
+#define SV_NOVELL 0x00000080 /* Novell servers */
+#define SV_DOMAIN_MEMBER 0x00000100 /* Domain Member */
+#define SV_PRINTQ_SERVER 0x00000200 /* Server sharing print queue */
+#define SV_DIALIN_SERVER 0x00000400 /* Server running dialin */
+#define SV_XENIX_SERVER 0x00000800 /* Xenix server */
+#define SV_NT 0x00001000 /* NT server */
+#define SV_WFW 0x00002000 /* Server running Windows for */
+#define SV_SERVER_NT 0x00008000 /* Windows NT non DC server */
+#define SV_POTENTIAL_BROWSER 0x00010000 /* can run browser service */
+#define SV_BACKUP_BROWSER 0x00020000 /* Backup browser server */
+#define SV_MASTER_BROWSER 0x00040000 /* Master browser server */
+#define SV_DOMAIN_MASTER 0x00080000 /* Domain Master Browser */
+#define SV_OSF 0x00100000 /* OSF operating system */
+#define SV_VMS 0x00200000 /* VMS operating system */
+#define SV_WINDOWS_95_PLUS 0x00400000 /* Windows 95 or better */
+
+#define SV_LOCAL_LIST_ONLY 0x40000000 /* Enumerate only "local" */
+#define SV_TYPE_DOMAIN_ENUM 0x80000000 /* Enumerate Domains */
+
+#define MY_SERVER_TYPE (SV_SERVER | SV_NT | SV_SERVER_NT)
+
+
+#define PRQ_ACTIVE 0 /* Active */
+#define PRQ_PAUSE 1 /* Paused */
+#define PRQ_ERROR 2 /* Error Occurred */
+#define PRQ_PENDING 3 /* Deletion pending */
+
+#define PRJ_QS_QUEUED 0 /* Active */
+#define PRJ_QS_PAUSED 1 /* Paused */
+#define PRJ_QS_SPOOLING 2 /* Paused */
+#define PRJ_QS_PRINTING 3 /* Paused */
+
+
+#define SHARE_ACCESS_READ 0x01 /* read & execute from resource */
+#define SHARE_ACCESS_WRITE 0x02 /* write data to resource */
+#define SHARE_ACCESS_CREATE 0x04 /* create an instance of */
+#define SHARE_ACCESS_EXEC 0x08 /* execute from resource */
+#define SHARE_ACCESS_DELETE 0x10 /* Permission to delete the resource */
+#define SHARE_ACCESS_ATTRIB 0x20 /* Permission to modify the resource */
+#define SHARE_ACCESS_PERM 0x40 /* Permission to change permissions */
+#define SHARE_ACCESS_ALL 0x7F /* All of the above permissions */
+
+
+/*
+ * SMB_COM_NT_TRANSACTION sub-command codes (CIFS/1.0 section 5.3)
+ *
+ * SubCommand Code Value Description
+ * =============================== ===== =================================
+ * NT_TRANSACT_CREATE 1 File open/create
+ * NT_TRANSACT_IOCTL 2 Device IOCTL
+ * NT_TRANSACT_SET_SECURITY_DESC 3 Set security descriptor
+ * NT_TRANSACT_NOTIFY_CHANGE 4 Start directory watch
+ * NT_TRANSACT_RENAME 5 Reserved (handle-based rename)
+ * NT_TRANSACT_QUERY_SECURITY_DESC 6 Retrieve security descriptor
+ * NT_TRANSACT_QUERY_QUOTA 7 Retrieve quota information
+ * NT_TRANSACT_SET_QUOTA 8 Set quota information
+ */
+#define NT_TRANSACT_MIN_FUNCTION 1
+
+#define NT_TRANSACT_CREATE 1
+#define NT_TRANSACT_IOCTL 2
+#define NT_TRANSACT_SET_SECURITY_DESC 3
+#define NT_TRANSACT_NOTIFY_CHANGE 4
+#define NT_TRANSACT_RENAME 5
+#define NT_TRANSACT_QUERY_SECURITY_DESC 6
+#define NT_TRANSACT_QUERY_QUOTA 7
+#define NT_TRANSACT_SET_QUOTA 8
+
+#define NT_TRANSACT_MAX_FUNCTION 8
+
+
+/*
+ * Pipe states
+ */
+#define SMB_PIPE_READMODE_BYTE 0x0000
+#define SMB_PIPE_READMODE_MESSAGE 0x0100
+#define SMB_PIPE_TYPE_BYTE 0x0000
+#define SMB_PIPE_TYPE_MESSAGE 0x0400
+#define SMB_PIPE_END_CLIENT 0x0000
+#define SMB_PIPE_END_SERVER 0x4000
+#define SMB_PIPE_WAIT 0x0000
+#define SMB_PIPE_NOWAIT 0x8000
+#define SMB_PIPE_UNLIMITED_INSTANCES 0x00FF
+
+/*
+ * smb_com_seek request
+ */
+#define SMB_SEEK_SET 0 /* set file offset to specified offset */
+#define SMB_SEEK_CUR 1 /* set file offset to current plus specified offset */
+#define SMB_SEEK_END 2 /* set file offset to EOF plus specified offset */
+
+/*
+ * API Numbers for Transact based RAP (Remote Administration Protocol) calls
+ */
+#define API_WshareEnum 0
+#define API_WshareGetInfo 1
+#define API_WshareSetInfo 2
+#define API_WshareAdd 3
+#define API_WshareDel 4
+#define API_NetShareCheck 5
+#define API_WsessionEnum 6
+#define API_WsessionGetInfo 7
+#define API_WsessionDel 8
+#define API_WconnectionEnum 9
+#define API_WfileEnum 10
+#define API_WfileGetInfo 11
+#define API_WfileClose 12
+#define API_WserverGetInfo 13
+#define API_WserverSetInfo 14
+#define API_WserverDiskEnum 15
+#define API_WserverAdminCommand 16
+#define API_NetAuditOpen 17
+#define API_WauditClear 18
+#define API_NetErrorLogOpen 19
+#define API_WerrorLogClear 20
+#define API_NetCharDevEnum 21
+#define API_NetCharDevGetInfo 22
+#define API_WCharDevControl 23
+#define API_NetCharDevQEnum 24
+#define API_NetCharDevQGetInfo 25
+#define API_WCharDevQSetInfo 26
+#define API_WCharDevQPurge 27
+#define API_WCharDevQPurgeSelf 28
+#define API_WMessageNameEnum 29
+#define API_WMessageNameGetInfo 30
+#define API_WMessageNameAdd 31
+#define API_WMessageNameDel 32
+#define API_WMessageNameFwd 33
+#define API_WMessageNameUnFwd 34
+#define API_WMessageBufferSend 35
+#define API_WMessageFileSend 36
+#define API_WMessageLogFileSet 37
+#define API_WMessageLogFileGet 38
+#define API_WServiceEnum 39
+#define API_WServiceInstall 40
+#define API_WServiceControl 41
+#define API_WAccessEnum 42
+#define API_WAccessGetInfo 43
+#define API_WAccessSetInfo 44
+#define API_WAccessAdd 45
+#define API_WAccessDel 46
+#define API_WGroupEnum 47
+#define API_WGroupAdd 48
+#define API_WGroupDel 49
+#define API_WGroupAddUser 50
+#define API_WGroupDelUser 51
+#define API_WGroupGetUsers 52
+#define API_WUserEnum 53
+#define API_WUserAdd 54
+#define API_WUserDel 55
+#define API_WUserGetInfo 56
+#define API_WUserSetInfo 57
+#define API_WUserPasswordSet 58
+#define API_WUserGetGroups 59
+#define API_DeadTableEntry 60
+#define API_WWkstaSetUID 62
+#define API_WWkstaGetInfo 63
+#define API_WWkstaSetInfo 64
+#define API_WUseEnum 65
+#define API_WUseAdd 66
+#define API_WUseDel 67
+#define API_WUseGetInfo 68
+#define API_WPrintQEnum 69
+#define API_WPrintQGetInfo 70
+#define API_WPrintQSetInfo 71
+#define API_WPrintQAdd 72
+#define API_WPrintQDel 73
+#define API_WPrintQPause 74
+#define API_WPrintQContinue 75
+#define API_WPrintJobEnum 76
+#define API_WPrintJobGetInfo 77
+#define API_WPrintJobSetInfo_OLD 78
+#define API_WPrintJobDel 81
+#define API_WPrintJobPause 82
+#define API_WPrintJobContinue 83
+#define API_WPrintDestEnum 84
+#define API_WPrintDestGetInfo 85
+#define API_WPrintDestControl 86
+#define API_WProfileSave 87
+#define API_WProfileLoad 88
+#define API_WStatisticsGet 89
+#define API_WStatisticsClear 90
+#define API_NetRemoteTOD 91
+#define API_WNetBiosEnum 92
+#define API_WNetBiosGetInfo 93
+#define API_NetServerEnum 94
+#define API_I_NetServerEnum 95
+#define API_WServiceGetInfo 96
+#define API_WPrintQPurge 103
+#define API_NetServerEnum2 104
+#define API_WAccessGetUserPerms 105
+#define API_WGroupGetInfo 106
+#define API_WGroupSetInfo 107
+#define API_WGroupSetUsers 108
+#define API_WUserSetGroups 109
+#define API_WUserModalsGet 110
+#define API_WUserModalsSet 111
+#define API_WFileEnum2 112
+#define API_WUserAdd2 113
+#define API_WUserSetInfo2 114
+#define API_WUserPasswordSet2 115
+#define API_I_NetServerEnum2 116
+#define API_WConfigGet2 117
+#define API_WConfigGetAll2 118
+#define API_WGetDCName 119
+#define API_NetHandleGetInfo 120
+#define API_NetHandleSetInfo 121
+#define API_WStatisticsGet2 122
+#define API_WBuildGetInfo 123
+#define API_WFileGetInfo2 124
+#define API_WFileClose2 125
+#define API_WNetServerReqChallenge 126
+#define API_WNetServerAuthenticate 127
+#define API_WNetServerPasswordSet 128
+#define API_WNetAccountDeltas 129
+#define API_WNetAccountSync 130
+#define API_WUserEnum2 131
+#define API_WWkstaUserLogon 132
+#define API_WWkstaUserLogoff 133
+#define API_WLogonEnum 134
+#define API_WErrorLogRead 135
+#define API_WI_NetPathType 136
+#define API_WI_NetPathCanonicalize 137
+#define API_WI_NetPathCompare 138
+#define API_WI_NetNameValidate 139
+#define API_WI_NetNameCanonicalize 140
+#define API_WI_NetNameCompare 141
+#define API_WAuditRead 142
+#define API_WPrintDestAdd 143
+#define API_WPrintDestSetInfo 144
+#define API_WPrintDestDel 145
+#define API_WUserValidate2 146
+#define API_WPrintJobSetInfo 147
+#define API_TI_NetServerDiskEnum 148
+#define API_TI_NetServerDiskGetInfo 149
+#define API_TI_FTVerifyMirror 150
+#define API_TI_FTAbortVerify 151
+#define API_TI_FTGetInfo 152
+#define API_TI_FTSetInfo 153
+#define API_TI_FTLockDisk 154
+#define API_TI_FTFixError 155
+#define API_TI_FTAbortFix 156
+#define API_TI_FTDiagnoseError 157
+#define API_TI_FTGetDriveStats 158
+#define API_TI_FTErrorGetInfo 160
+#define API_NetAccessCheck 163
+#define API_NetAlertRaise 164
+#define API_NetAlertStart 165
+#define API_NetAlertStop 166
+#define API_NetAuditWrite 167
+#define API_NetIRemoteAPI 168
+#define API_NetServiceStatus 169
+#define API_I_NetServerRegister 170
+#define API_I_NetServerDeregister 171
+#define API_I_NetSessionEntryMake 172
+#define API_I_NetSessionEntryClear 173
+#define API_I_NetSessionEntryGetInfo 174
+#define API_I_NetSessionEntrySetInfo 175
+#define API_I_NetConnectionEntryMake 176
+#define API_I_NetConnectionEntryClear 177
+#define API_I_NetConnectionEntrySetInfo 178
+#define API_I_NetConnectionEntryGetInfo 179
+#define API_I_NetFileEntryMake 180
+#define API_I_NetFileEntryClear 181
+#define API_I_NetFileEntrySetInfo 182
+#define API_I_NetFileEntryGetInfo 183
+#define API_AltSrvMessageBufferSend 184
+#define API_AltSrvMessageFileSend 185
+#define API_wI_NetRplWkstaEnum 186
+#define API_wI_NetRplWkstaGetInfo 187
+#define API_wI_NetRplWkstaSetInfo 188
+#define API_wI_NetRplWkstaAdd 189
+#define API_wI_NetRplWkstaDel 190
+#define API_wI_NetRplProfileEnum 191
+#define API_wI_NetRplProfileGetInfo 192
+#define API_wI_NetRplProfileSetInfo 193
+#define API_wI_NetRplProfileAdd 194
+#define API_wI_NetRplProfileDel 195
+#define API_wI_NetRplProfileClone 196
+#define API_wI_NetRplBaseProfileEnum 197
+#define API_WIServerSetInfo 201
+#define API_WPrintDriverEnum 205
+#define API_WPrintQProcessorEnum 206
+#define API_WPrintPortEnum 207
+#define API_WNetWriteUpdateLog 208
+#define API_WNetAccountUpdate 209
+#define API_WNetAccountConfirmUpdate 210
+#define API_WConfigSet 211
+#define API_WAccountsReplicate 212
+#define API_SamOEMChgPasswordUser2_P 214
+#define API_NetServerEnum3 215
+#define API_WprintDriverGetInfo 250
+#define API_WprintDriverSetInfo 251
+#define API_WaliasAdd 252
+#define API_WaliasDel 253
+#define API_WaliasGetInfo 254
+#define API_WaliasSetInfo 255
+#define API_WaliasEnum 256
+#define API_WuserGetLogonAsn 257
+#define API_WuserSetLogonAsn 258
+#define API_WuserGetAppSel 259
+#define API_WuserSetAppSel 260
+#define API_WappAdd 261
+#define API_WappDel 262
+#define API_WappGetInfo 263
+#define API_WappSetInfo 264
+#define API_WappEnum 265
+#define API_WUserDCDBInit 266
+#define API_WDASDAdd 267
+#define API_WDASDDel 268
+#define API_WDASDGetInfo 269
+#define API_WDASDSetInfo 270
+#define API_WDASDEnum 271
+#define API_WDASDCheck 272
+#define API_WDASDCtl 273
+#define API_WuserRemoteLogonCheck 274
+#define API_WUserPasswordSet3 275
+#define API_WCreateRIPLMachine 276
+#define API_WDeleteRIPLMachine 277
+#define API_WGetRIPLMachineInfo 278
+#define API_WSetRIPLMachineInfo 279
+#define API_WEnumRIPLMachine 280
+#define API_WI_ShareAdd 281
+#define API_WI_AliasEnum 282
+#define API_WaccessApply 283
+#define API_WPrt16Query 284
+#define API_WPrt16Set 285
+#define API_WUserDel100 286
+#define API_WUserRemoteLogonCheck2 287
+#define API_WRemoteTODSet 294
+#define API_WprintJobMoveAll 295
+#define API_W16AppParmAdd 296
+#define API_W16AppParmDel 297
+#define API_W16AppParmGet 298
+#define API_W16AppParmSet 299
+#define API_W16RIPLMachineCreate 300
+#define API_W16RIPLMachineGetInfo 301
+#define API_W16RIPLMachineSetInfo 302
+#define API_W16RIPLMachineEnum 303
+#define API_W16RIPLMachineListParmEnum 304
+#define API_W16RIPLMachClassGetInfo 305
+#define API_W16RIPLMachClassEnum 306
+#define API_W16RIPLMachClassCreate 307
+#define API_W16RIPLMachClassSetInfo 308
+#define API_W16RIPLMachClassDelete 309
+#define API_W16RIPLMachClassLPEnum 310
+#define API_W16RIPLMachineDelete 311
+#define API_W16WSLevelGetInfo 312
+#define API_WserverNameAdd 313
+#define API_WserverNameDel 314
+#define API_WserverNameEnum 315
+#define API_I_WDASDEnum 316
+#define API_I_WDASDEnumTerminate 317
+#define API_I_WDASDSetInfo2 318
+#define MAX_RAP_API 318
#ifdef __cplusplus
}
#endif
-
#endif /* _SMBSRV_SMB_H */
diff --git a/usr/src/uts/common/smbsrv/smb_fsops.h b/usr/src/uts/common/smbsrv/smb_fsops.h
index 4f1e573a5c..5722c4e24a 100644
--- a/usr/src/uts/common/smbsrv/smb_fsops.h
+++ b/usr/src/uts/common/smbsrv/smb_fsops.h
@@ -30,7 +30,7 @@
* This header file contains all the functions for the interface between
* the smb layer and the fs layer.
*/
-#include <smbsrv/smb_i18n.h>
+#include <smbsrv/string.h>
#include <smbsrv/smbinfo.h>
#include <smbsrv/smb_ktypes.h>
#include <smbsrv/smb_vops.h>
@@ -69,7 +69,7 @@ int smb_fsop_link(smb_request_t *, cred_t *, smb_node_t *, smb_node_t *,
int smb_fsop_rename(smb_request_t *, cred_t *,
smb_node_t *, char *, smb_node_t *,
- char *);
+ char *);
int smb_fsop_setattr(smb_request_t *, cred_t *, smb_node_t *, smb_attr_t *);
@@ -112,12 +112,14 @@ int smb_fsop_frlock(smb_node_t *, smb_lock_t *, boolean_t, cred_t *);
* SMB_IGNORE_CASE Perform case-insensitive lookup.
* SMB_CATIA Perform CATIA character substitution.
* SMB_ABE Perform Access based enumeration/lookup.
+ * SMB_CASE_SENSITIVE Don't set SMB_IGNORE_CASE based on tree.
*/
#define SMB_FOLLOW_LINKS 0x00000001
#define SMB_IGNORE_CASE 0x00000002
#define SMB_CATIA 0x00000004
#define SMB_ABE 0x00000008
+#define SMB_CASE_SENSITIVE 0x00000010
#ifdef __cplusplus
}
diff --git a/usr/src/uts/common/smbsrv/smb_i18n.h b/usr/src/uts/common/smbsrv/smb_i18n.h
deleted file mode 100644
index 74804d0056..0000000000
--- a/usr/src/uts/common/smbsrv/smb_i18n.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SMB_I18N_H
-#define _SMB_I18N_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef unsigned short mts_wchar_t;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMB_I18N_H */
diff --git a/usr/src/uts/common/smbsrv/smb_incl.h b/usr/src/uts/common/smbsrv/smb_incl.h
deleted file mode 100644
index 2d1e61b087..0000000000
--- a/usr/src/uts/common/smbsrv/smb_incl.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SMBSRV_SMB_INCL_H
-#define _SMBSRV_SMB_INCL_H
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/cmn_err.h>
-#include <sys/cpuvar.h>
-#include <sys/list.h>
-#include <sys/sunddi.h>
-#include <netinet/in_systm.h>
-#include <netinet/in.h>
-#include <netinet/ip.h>
-#include <netinet/ip_icmp.h>
-#include <netinet/ip_var.h>
-#include <netinet/tcp.h>
-#include <net/if.h>
-#include <netinet/if_ether.h>
-
-#include <sys/errno.h>
-#include <sys/ioctl.h>
-
-#include <smbsrv/alloc.h>
-#include <smbsrv/ctype.h>
-#include <smbsrv/string.h>
-
-#include <smbsrv/ntstatus.h>
-#include <smbsrv/nterror.h>
-#include <smbsrv/doserror.h>
-#include <smbsrv/cifs.h>
-#include <smbsrv/ntaccess.h>
-#include <smbsrv/smbinfo.h>
-#include <smbsrv/smb.h>
-
-#include <smbsrv/smbfmt.h>
-#include <smbsrv/smb_kproto.h>
-
-#define QUEUE_INSERT_HEAD(q, e) \
- { \
- ((e)->forw) = (void *)((q)->forw); \
- ((e)->back) = (void *)(q); \
- ((q)->forw->back) = (void *)(e); \
- ((q)->forw) = (void *)(e); \
- }
-
-
-#define QUEUE_INSERT_TAIL(q, e) \
- { \
- ((e)->back) = (void *)((q)->back); \
- ((e)->forw) = (void *)(q); \
- ((q)->back->forw) = (void *)(e); \
- ((q)->back) = (void *)(e); \
- }
-
-#define QUEUE_INSERT_SORT(q, e, k, t) \
- { \
- (void *)(t) = (void *)((q)->forw); \
- while (((t)->k) < ((e)->k)) { \
- (void *)(t) = (void *)((t)->forw); \
- } \
- QUEUE_INSERT_TAIL(t, e); \
- }
-
-#define QUEUE_CLIP(e) \
- { \
- (e)->forw->back = (e)->back; \
- (e)->back->forw = (e)->forw; \
- (e)->forw = 0; \
- (e)->back = 0; \
- }
-
-/* These should be defined in system header files */
-
-extern int atoi(const char *);
-extern int getchar(void);
-
-/*
- * PBSHORTCUT - remove this when we replace BYTE/WORD/DWORD to
- * uint8_t/uint16_t/uint32_t and <inet/ip.h> gets included by
- * files that invoke the following functions.
- */
-extern char *inet_ntop(int, const void *, char *, int);
-extern int inet_pton(int, char *, void *);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_SMB_INCL_H */
diff --git a/usr/src/uts/common/smbsrv/smb_kproto.h b/usr/src/uts/common/smbsrv/smb_kproto.h
index e924f189cb..95688dd32f 100644
--- a/usr/src/uts/common/smbsrv/smb_kproto.h
+++ b/usr/src/uts/common/smbsrv/smb_kproto.h
@@ -34,12 +34,17 @@
extern "C" {
#endif
+#include <sys/types.h>
+#include <sys/param.h>
#include <sys/systm.h>
#include <sys/socket.h>
#include <sys/strsubr.h>
#include <sys/socketvar.h>
#include <sys/ksocket.h>
#include <sys/cred.h>
+#include <sys/sunddi.h>
+#include <smbsrv/smb.h>
+#include <smbsrv/string.h>
#include <smbsrv/smb_vops.h>
#include <smbsrv/smb_xdr.h>
#include <smbsrv/smb_token.h>
@@ -149,6 +154,7 @@ smb_sdrc_t smb_nt_transact_notify_change(smb_request_t *, smb_xa_t *);
smb_sdrc_t smb_nt_transact_query_security_info(smb_request_t *, smb_xa_t *);
smb_sdrc_t smb_nt_transact_set_security_info(smb_request_t *, smb_xa_t *);
smb_sdrc_t smb_nt_transact_ioctl(smb_request_t *, smb_xa_t *);
+smb_sdrc_t smb_nt_transact_rename(smb_request_t *, smb_xa_t *);
smb_sdrc_t smb_com_trans2_open2(smb_request_t *, smb_xa_t *);
smb_sdrc_t smb_com_trans2_create_directory(smb_request_t *, smb_xa_t *);
@@ -159,6 +165,7 @@ smb_sdrc_t smb_com_trans2_query_path_information(smb_request_t *, smb_xa_t *);
smb_sdrc_t smb_com_trans2_query_file_information(smb_request_t *, smb_xa_t *);
smb_sdrc_t smb_com_trans2_set_path_information(smb_request_t *, smb_xa_t *);
smb_sdrc_t smb_com_trans2_set_file_information(smb_request_t *, smb_xa_t *);
+int smb_trans2_rename(smb_request_t *, smb_node_t *, char *, int);
/*
* Logging functions
@@ -399,12 +406,6 @@ void smb_vfs_rele_all(smb_server_t *);
boolean_t smb_vfs_cmp(vfs_t *, vfs_t *);
boolean_t smb_vfs_is_readonly(vfs_t *);
-
-/*
- * String manipulation function
- */
-char *smb_kstrdup(const char *s, size_t n);
-
/* NOTIFY CHANGE */
void smb_process_session_notify_change_queue(smb_session_t *, smb_tree_t *);
void smb_process_node_notify_change_queue(smb_node_t *);
@@ -420,11 +421,10 @@ void smb_fem_fini(void);
int smb_try_grow(smb_request_t *sr, int64_t new_size);
-/* functions from smb_memory_manager.c */
-
-void *smbsr_malloc(smb_malloc_list *, size_t);
-void *smbsr_realloc(void *, size_t);
-void smbsr_free_malloc_list(smb_malloc_list *);
+void smb_srm_init(smb_request_t *sr);
+void smb_srm_fini(smb_request_t *sr);
+void *smb_srm_alloc(smb_request_t *, size_t);
+void *smb_srm_realloc(smb_request_t *, void *, size_t);
unsigned short smb_worker_getnum();
@@ -612,13 +612,6 @@ uint64_t smb_time_unix_to_nt(timestruc_t *);
int netbios_name_isvalid(char *in, char *out);
-size_t
-unicodestooems(char *oemstring, const mts_wchar_t *unicodestring,
- size_t nbytes, unsigned int cpid);
-
-size_t oemstounicodes(mts_wchar_t *unicodestring, const char *oemstring,
- size_t nwchars, unsigned int cpid);
-
int uioxfer(struct uio *src_uio, struct uio *dst_uio, int n);
int smb_match_name(ino64_t, char *, char *, boolean_t);
diff --git a/usr/src/uts/common/smbsrv/smb_ktypes.h b/usr/src/uts/common/smbsrv/smb_ktypes.h
index 9e4824cdd3..fd0feee85b 100644
--- a/usr/src/uts/common/smbsrv/smb_ktypes.h
+++ b/usr/src/uts/common/smbsrv/smb_ktypes.h
@@ -58,7 +58,6 @@ extern "C" {
#include <smbsrv/smb_xdr.h>
#include <smbsrv/netbios.h>
#include <smbsrv/smb_vops.h>
-#include <smbsrv/ntifs.h>
struct smb_disp_entry;
struct smb_request;
@@ -306,11 +305,6 @@ typedef struct {
typedef uint32_t UTIME; /* seconds since Jan 1 1970 */
-typedef struct smb_malloc_list {
- struct smb_malloc_list *forw;
- struct smb_malloc_list *back;
-} smb_malloc_list;
-
typedef struct smb_llist {
krwlock_t ll_lock;
list_t ll_list;
@@ -939,7 +933,7 @@ typedef struct smb_opipe {
/*
* The of_ftype of an open file should contain the SMB_FTYPE value
- * (cifs.h) returned when the file/pipe was opened. The following
+ * returned when the file/pipe was opened. The following
* assumptions are currently made:
*
* File Type Node PipeInfo
@@ -1215,6 +1209,7 @@ typedef struct open_param {
uint32_t action_taken;
uint64_t fileid;
uint32_t rootdirfid;
+ smb_ofile_t *dir;
/* This is only set by NTTransactCreate */
struct smb_sd *sd;
uint8_t op_oplock_level;
@@ -1388,7 +1383,7 @@ typedef struct smb_request {
struct mbuf_chain command;
struct mbuf_chain reply;
struct mbuf_chain raw_data;
- smb_malloc_list request_storage;
+ list_t sr_storage;
struct smb_xa *r_xa;
int andx_prev_wct;
int cur_reply_offset;
@@ -1442,6 +1437,7 @@ typedef struct smb_request {
smb_fqi_t fqi;
smb_fqi_t dst_fqi;
uint16_t info_level;
+ uint16_t flags;
} dirop;
open_param_t open;
@@ -1453,14 +1449,23 @@ typedef struct smb_request {
kthread_t *sr_worker;
} smb_request_t;
-#define SMB_READ_PROTOCOL(smb_nh_ptr) \
- LE_IN32(((smb_nethdr_t *)(smb_nh_ptr))->sh_protocol)
+/*
+ * SMB request-specific memory node.
+ */
+typedef struct smb_srm {
+ list_node_t srm_lnd;
+ size_t srm_size;
+ smb_request_t *srm_sr;
+} smb_srm_t;
+
+#define SMB_READ_PROTOCOL(hdr) \
+ LE_IN32(((smb_hdr_t *)(hdr))->protocol)
#define SMB_PROTOCOL_MAGIC_INVALID(rd_sr) \
(SMB_READ_PROTOCOL((rd_sr)->sr_request_buf) != SMB_PROTOCOL_MAGIC)
-#define SMB_READ_COMMAND(smb_nh_ptr) \
- (((smb_nethdr_t *)(smb_nh_ptr))->sh_command)
+#define SMB_READ_COMMAND(hdr) \
+ (((smb_hdr_t *)(hdr))->command)
#define SMB_IS_WRITERAW(rd_sr) \
(SMB_READ_COMMAND((rd_sr)->sr_request_buf) == SMB_COM_WRITE_RAW)
@@ -1512,8 +1517,7 @@ typedef struct smb_xa {
int32_t smb_timeout; /* number of milliseconds to await completion */
uint32_t smb_suwcnt; /* set up word count */
-
- char *xa_smb_trans_name;
+ char *xa_pipe_name;
int req_disp_param;
int req_disp_data;
diff --git a/usr/src/uts/common/smbsrv/smb_vops.h b/usr/src/uts/common/smbsrv/smb_vops.h
index 4952eea170..b9aee05ac3 100644
--- a/usr/src/uts/common/smbsrv/smb_vops.h
+++ b/usr/src/uts/common/smbsrv/smb_vops.h
@@ -41,7 +41,7 @@
#include <sys/refstr.h>
#include <sys/acl.h>
#include <sys/fcntl.h>
-#include <smbsrv/smb_i18n.h>
+#include <smbsrv/string.h>
#ifdef __cplusplus
extern "C" {
diff --git a/usr/src/uts/common/smbsrv/smbfmt.h b/usr/src/uts/common/smbsrv/smbfmt.h
deleted file mode 100644
index 937faf520f..0000000000
--- a/usr/src/uts/common/smbsrv/smbfmt.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SMBSRV_SMBFMT_H
-#define _SMBSRV_SMBFMT_H
-
-#pragma ident "@(#)smbfmt.h 1.2 08/07/30 SMI"
-
-/*
- * SMB message header formats.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define SMB_HEADER_ED_FMT "Mbbbwbww8c2.wwww"
-#define SMB_HEADER_ED_LEN (4+1+1+1+2+1+2+12+2+2+2+2)
-#define SMB_TRANSHDR_ED_FMT "wwwwb.wl2.wwwwb."
-#define SMB_TRANSHDR_ED_LEN (2+2+2+2+1+1+2+4+2+2+2+2+2+1+1)
-#define SMB_TRANSSHDR_ED_FMT "wwwwwwwww"
-#define SMB_TRANSSHDR_ED_LEN (2+2+2+2+2+2+2+2)
-#define SMB_TRANS2SHDR_ED_FMT "wwwwwwwww"
-#define SMB_TRANS2SHDR_ED_LEN (2+2+2+2+2+2+2+2+2)
-/* There is something wrong with this. Should be 38 bytes. It is 37 bytes */
-#define SMB_NT_TRANSHDR_ED_FMT "b2.llllllllbw"
-#define SMB_NT_TRANSHDR_ED_LEN (1+2+4+4+4+4+4+4+4+4+1+2)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SMBSRV_SMBFMT_H */
diff --git a/usr/src/uts/common/smbsrv/string.h b/usr/src/uts/common/smbsrv/string.h
index 6696cbc33d..21b32e328f 100644
--- a/usr/src/uts/common/smbsrv/string.h
+++ b/usr/src/uts/common/smbsrv/string.h
@@ -19,37 +19,67 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SMBSRV_STRING_H
#define _SMBSRV_STRING_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <sys/types.h>
-#include <smbsrv/smb_i18n.h>
#ifdef __cplusplus
extern "C" {
#endif
-extern char *strsubst(char *, char, char);
-extern char *strsep(char **, const char *);
-extern char *strcanon(char *, const char *);
+#define _smb_between(l, c, u) ((l) <= (c) && (c) <= (u))
+
+#define smb_isalpha(c) (smb_islower(c) || smb_isupper(c))
+#define smb_isdigit(c) _smb_between('0', (c), '9')
+#define smb_isalnum(c) (smb_isalpha(c) || smb_isdigit(c))
+#define smb_isxdigit(c) (smb_isdigit(c) || \
+ _smb_between('a', (c), 'f') || \
+ _smb_between('A', (c), 'F'))
+#define smb_isblank(c) ((c) == ' ' || (c) == '\t')
+#define smb_isspace(c) ((c) == ' ' || \
+ (c) == '\t' || \
+ (c) == '\n' || \
+ (c) == '\r' || \
+ (c) == '\f')
+#define smb_isascii(c) (!((c) &~ 0x7F))
+
+/* These macros only apply to ASCII */
+#define smb_isalpha_ascii(c) \
+ (_smb_between('a', (c), 'z') || _smb_between('A', (c), 'Z'))
+#define smb_isalnum_ascii(c) (smb_isalpha_ascii(c) || smb_isdigit(c))
-extern char *utf8_strupr(char *);
-extern char *utf8_strlwr(char *);
-extern int utf8_isstrupr(const char *);
-extern int utf8_isstrlwr(const char *);
-extern int utf8_strcasecmp(const char *, const char *);
-extern int utf8_strncasecmp(const char *, const char *, int);
-extern int utf8_isstrascii(const char *);
+#define smb_isprint(c) _smb_between('!', (c), '~')
+#define smb_iscntrl(c) ((((c) >= 0) && ((c) <= 0x1f)) || ((c) == 0x7f))
+#define smb_ispunct(c) (smb_isprint(c) && !smb_isxdigit(c) && !smb_isspace(c))
-extern int smb_match(char *patn, char *str);
-extern int smb_match_ci(char *patn, char *str);
-extern int smb_match83(char *patn, char *str83);
+/*
+ * These id's should correspond to oemcpg_table smb_oem.c.
+ */
+typedef enum codepage_id {
+ OEM_CPG_850 = 0,
+ OEM_CPG_950,
+ OEM_CPG_1252,
+ OEM_CPG_949,
+ OEM_CPG_936,
+ OEM_CPG_932,
+ OEM_CPG_852,
+ OEM_CPG_1250,
+ OEM_CPG_1253,
+ OEM_CPG_737,
+ OEM_CPG_1254,
+ OEM_CPG_857,
+ OEM_CPG_1251,
+ OEM_CPG_866,
+ OEM_CPG_1255,
+ OEM_CPG_862,
+ OEM_CPG_1256,
+ OEM_CPG_720
+} codepage_id_t;
/*
* Maximum number of bytes per multi-byte character.
@@ -57,16 +87,64 @@ extern int smb_match83(char *patn, char *str83);
#define MTS_MB_CUR_MAX 3
#define MTS_MB_CHAR_MAX MTS_MB_CUR_MAX
-size_t mts_mbstowcs(mts_wchar_t *, const char *, size_t);
-size_t mts_wcstombs(char *, const mts_wchar_t *, size_t);
-int mts_mbtowc(mts_wchar_t *, const char *, size_t);
-int mts_wctomb(char *, mts_wchar_t);
+typedef uint16_t smb_wchar_t;
+
+/*
+ * Labels to define whether a code page table entry is an uppercase
+ * character, a lowercase character or neither. One of these values
+ * should appear in the ctype field of the code page tables.
+ */
+#define CODEPAGE_ISNONE 0x00
+#define CODEPAGE_ISUPPER 0x01
+#define CODEPAGE_ISLOWER 0x02
+
+/*
+ * The structure of a code page entry. Each code page table will
+ * consist of an array of 256 codepage entries.
+ *
+ * ctype indicates case of the value.
+ * upper indicates the uppercase equivalent value.
+ * lower indicates the lowercase equivalent value.
+ */
+typedef struct smb_codepage {
+ unsigned char ctype;
+ smb_wchar_t upper;
+ smb_wchar_t lower;
+} smb_codepage_t;
+
+void smb_codepage_init(void);
+
+int smb_isupper(int);
+int smb_islower(int);
+int smb_toupper(int);
+int smb_tolower(int);
+char *smb_strupr(char *);
+char *smb_strlwr(char *);
+int smb_isstrupr(const char *);
+int smb_isstrlwr(const char *);
+int smb_strcasecmp(const char *, const char *, size_t);
+
+int smb_match(char *patn, char *str);
+int smb_match_ci(char *patn, char *str);
+int smb_match83(char *patn, char *str83);
+
+size_t smb_mbstowcs(smb_wchar_t *, const char *, size_t);
+size_t smb_wcstombs(char *, const smb_wchar_t *, size_t);
+int smb_mbtowc(smb_wchar_t *, const char *, size_t);
+int smb_wctomb(char *, smb_wchar_t);
+
+size_t smb_wcequiv_strlen(const char *);
+size_t smb_sbequiv_strlen(const char *);
+
+int smb_stombs(char *, char *, int);
+int smb_mbstos(char *, const char *);
-size_t mts_wcequiv_strlen(const char *);
-size_t mts_sbequiv_strlen(const char *);
+size_t ucstooem(char *, const smb_wchar_t *, size_t, uint32_t);
+size_t oemtoucs(smb_wchar_t *, const char *, size_t, uint32_t);
-int mts_stombs(char *, char *, int);
-int mts_mbstos(char *, const char *);
+char *strsubst(char *, char, char);
+char *strsep(char **, const char *);
+char *strcanon(char *, const char *);
#ifdef __cplusplus
}