diff options
author | Jordan Brown <Jordan.Brown@Sun.COM> | 2009-11-05 14:34:36 -0800 |
---|---|---|
committer | Jordan Brown <Jordan.Brown@Sun.COM> | 2009-11-05 14:34:36 -0800 |
commit | bbf6f00c25b6a2bed23c35eac6d62998ecdb338c (patch) | |
tree | 8cf72fd47362b5b0da2ffe9be7fe7726a3d24426 /usr/src/lib/smbsrv/libsmbrdr/common | |
parent | d95ac3ffcdcc13296bb4c53f621f72c0535f32c3 (diff) | |
download | illumos-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')
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)); |