summaryrefslogtreecommitdiff
path: root/usr/src/lib/smbsrv/libsmbrdr/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/lib/smbsrv/libsmbrdr/common
parentd95ac3ffcdcc13296bb4c53f621f72c0535f32c3 (diff)
downloadillumos-joyent-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/lib/smbsrv/libsmbrdr/common')
-rw-r--r--usr/src/lib/smbsrv/libsmbrdr/common/smbrdr.h74
-rw-r--r--usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_logon.c6
-rw-r--r--usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_netbios.c2
-rw-r--r--usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_netuse.c6
-rw-r--r--usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_rpcpipe.c4
-rw-r--r--usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_session.c15
6 files changed, 86 insertions, 21 deletions
diff --git a/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr.h b/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr.h
index aa21a4a41f..385c20455f 100644
--- a/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr.h
+++ b/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr.h
@@ -34,8 +34,7 @@
#include <smbsrv/libsmb.h>
#include <smbsrv/libsmbrdr.h>
-
-#include <smbsrv/cifs.h>
+#include <smbsrv/smb.h>
#include <smbsrv/smbinfo.h>
#include <smbsrv/smb.h>
#include <smbsrv/wintypes.h>
@@ -186,6 +185,77 @@ typedef struct smbrdr_handle {
struct sdb_netuse *srh_tree;
} smbrdr_handle_t;
+typedef struct smb_nt_negotiate_rsp {
+ uint8_t word_count;
+ uint16_t dialect_index;
+ uint8_t security_mode;
+ uint16_t max_mpx;
+ uint16_t max_vc;
+ uint32_t max_buffer_size;
+ uint32_t max_raw_size;
+ uint32_t session_key;
+ uint32_t capabilities;
+ uint32_t time_low;
+ uint32_t time_high;
+ uint16_t server_tz;
+ uint8_t security_len;
+ uint16_t byte_count;
+ uint8_t *guid;
+ uint8_t *challenge;
+ uint8_t *oem_domain;
+} smb_nt_negotiate_rsp_t;
+
+/*
+ * SMB_COM_TRANSACTION
+ */
+typedef struct smb_transact_rsp {
+ uint8_t WordCount; /* Count of data bytes */
+ /* value = 10 + SetupCount */
+ uint16_t TotalParamCount; /* Total parameter bytes being sent */
+ uint16_t TotalDataCount; /* Total data bytes being sent */
+ uint16_t Reserved;
+ uint16_t ParamCount; /* Parameter bytes sent this buffer */
+ uint16_t ParamOffset; /* Offset (from hdr start) to params */
+ uint16_t ParamDisplacement; /* Displacement of these param bytes */
+ uint16_t DataCount; /* Data bytes sent this buffer */
+ uint16_t DataOffset; /* Offset (from hdr start) to data */
+ uint16_t DataDisplacement; /* Displacement of these data bytes */
+ uint8_t SetupCount; /* Count of setup words */
+ uint16_t BCC;
+#if 0
+ uint8_t Reserved2; /* Reserved (pad above to word) */
+ uint8_t Buffer[1]; /* Buffer containing: */
+ uint16_t Setup[]; /* Setup words (# = SetupWordCount) */
+ uint16_t ByteCount; /* Count of data bytes */
+ uint8_t Pad[]; /* Pad to SHORT or LONG */
+ uint8_t Params[]; /* Param. bytes (# = ParamCount) */
+ uint8_t Pad1[]; /* Pad to SHORT or LONG */
+ uint8_t Data[]; /* Data bytes (# = DataCount) */
+#endif
+} smb_transact_rsp_t;
+
+/*
+ * SMBreadX
+ */
+typedef struct smb_read_andx_rsp {
+ uint8_t WordCount;
+ uint8_t AndXCmd;
+ uint8_t AndXReserved;
+ uint16_t AndXOffset;
+ uint16_t Remaining;
+ uint16_t DataCompactionMode;
+ uint16_t Reserved;
+ uint16_t DataLength;
+ uint16_t DataOffset;
+ uint32_t DataLengthHigh;
+ uint16_t Reserved2[3];
+ uint16_t ByteCount;
+#if 0
+ uint8_t Pad[];
+ uint8_t Data[];
+#endif
+} smb_read_andx_rsp_t;
+
/*
* smbrdr_netbios.c
*/
diff --git a/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_logon.c b/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_logon.c
index 8689ba446c..3594508279 100644
--- a/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_logon.c
+++ b/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_logon.c
@@ -189,7 +189,7 @@ smbrdr_authenticate(char *domain_controller, char *primary_domain,
/*
* Ensure that the domain name is uppercase.
*/
- (void) utf8_strupr(primary_domain);
+ (void) smb_strupr(primary_domain);
return (smbrdr_logon_user(domain_controller, account_name, pwd));
}
@@ -302,8 +302,8 @@ smbrdr_session_setupx(struct sdb_logon *logon)
return (-1);
if (session->remote_caps & CAP_UNICODE) {
- strlen_fn = mts_wcequiv_strlen;
- null_size = sizeof (mts_wchar_t);
+ strlen_fn = smb_wcequiv_strlen;
+ null_size = sizeof (smb_wchar_t);
session->smb_flags2 |= SMB_FLAGS2_UNICODE;
} else {
strlen_fn = strlen;
diff --git a/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_netbios.c b/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_netbios.c
index 675f00e5ae..5f327205e4 100644
--- a/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_netbios.c
+++ b/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_netbios.c
@@ -47,7 +47,7 @@
#include <stdio.h>
#include <pthread.h>
-#include <smbsrv/cifs.h>
+#include <smbsrv/smb.h>
#define MAX_NETBIOS_NAME_SIZE 16
diff --git a/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_netuse.c b/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_netuse.c
index 00c3d6b0ea..d93d1ef798 100644
--- a/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_netuse.c
+++ b/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_netuse.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 "@(#)smbrdr_netuse.c 1.4 08/07/16 SMI"
-
/*
* Tree connect and disconnect functions to support SMB shares.
* These functions are described in the CIFS draft 1.0 Protocol
@@ -124,7 +122,7 @@ smbrdr_tree_connect(char *hostname, char *username, char *sharename,
bzero(path, path_len);
(void) snprintf(path, path_len, "\\\\%s\\%s", hostname, sharename);
if (session->remote_caps & CAP_UNICODE)
- path_len = mts_wcequiv_strlen(path);
+ path_len = smb_wcequiv_strlen(path);
else
path_len = strlen(path);
diff --git a/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_rpcpipe.c b/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_rpcpipe.c
index 123dde8fe7..74c88ffd6d 100644
--- a/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_rpcpipe.c
+++ b/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_rpcpipe.c
@@ -454,8 +454,8 @@ smbrdr_ntcreatex(struct sdb_ofile *ofile)
(void) strcpy(path, ofile->path);
if (sess->remote_caps & CAP_UNICODE) {
- path_len = mts_wcequiv_strlen(path);
- null_size = sizeof (mts_wchar_t);
+ path_len = smb_wcequiv_strlen(path);
+ null_size = sizeof (smb_wchar_t);
} else {
path_len = strlen(path);
null_size = sizeof (char);
diff --git a/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_session.c b/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_session.c
index 1796230614..bd35017635 100644
--- a/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_session.c
+++ b/usr/src/lib/smbsrv/libsmbrdr/common/smbrdr_session.c
@@ -44,8 +44,6 @@
#include <smbsrv/libsmbrdr.h>
#include <smbsrv/netbios.h>
-#include <smbsrv/cifs.h>
-#include <smbsrv/ntstatus.h>
#include <smbrdr.h>
#define SMBRDR_DOMAIN_MAX 32
@@ -219,9 +217,8 @@ smbrdr_trnsprt_connect(struct sdb_session *sess, uint16_t port)
struct sockaddr_in sin;
struct sockaddr_in6 sin6;
int sock, rc;
- mts_wchar_t unicode_server_name[SMB_PI_MAX_DOMAIN];
+ smb_wchar_t unicode_server_name[SMB_PI_MAX_DOMAIN];
char server_name[SMB_PI_MAX_DOMAIN];
- unsigned int cpid = oem_get_smb_cpid();
char ipstr[INET6_ADDRSTRLEN];
if ((sock = socket(sess->srv_ipaddr.a_family, SOCK_STREAM, 0)) <= 0) {
@@ -253,10 +250,10 @@ smbrdr_trnsprt_connect(struct sdb_session *sess, uint16_t port)
return (-1);
}
- (void) mts_mbstowcs(unicode_server_name, sess->srv_name,
+ (void) smb_mbstowcs(unicode_server_name, sess->srv_name,
SMB_PI_MAX_DOMAIN);
- rc = unicodestooems(server_name, unicode_server_name,
- SMB_PI_MAX_DOMAIN, cpid);
+ rc = ucstooem(server_name, unicode_server_name, SMB_PI_MAX_DOMAIN,
+ OEM_CPG_850);
if (rc == 0) {
syslog(LOG_DEBUG, "smbrdr: unicode conversion failed");
if (sock != 0)
@@ -417,11 +414,11 @@ smbrdr_session_init(char *domain_controller, char *domain)
smbrdr_session_clear(session);
(void) strlcpy(session->srv_name, domain_controller,
MAXHOSTNAMELEN);
- (void) utf8_strupr(session->srv_name);
+ (void) smb_strupr(session->srv_name);
session->srv_ipaddr = ipaddr;
(void) strlcpy(session->domain, domain, MAXHOSTNAMELEN);
- (void) utf8_strupr(session->domain);
+ (void) smb_strupr(session->domain);
(void) smb_config_getstr(SMB_CI_NBSCOPE, session->scope,
sizeof (session->scope));