mirror of
https://github.com/samba-team/samba.git
synced 2025-01-13 13:18:06 +03:00
look at the CAP_NT_SMBS bit in the client capabilities to determine if
we should serve up volume labels as ascii or unicode. NT wants ascii, W95 wants unicode. It's a crazy protocol! (This used to be commit 24b8a757ae2899d54dd2b2f091a3c0de6de84dbb)
This commit is contained in:
parent
242d068297
commit
3b7cee95ac
@ -41,6 +41,8 @@ extern pstring sesssetup_user;
|
||||
extern fstring global_myworkgroup;
|
||||
extern int Client;
|
||||
extern int global_oplock_break;
|
||||
uint32 global_client_caps = 0;
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
report a possible attack via the password buffer overflow bug
|
||||
@ -489,11 +491,11 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int
|
||||
} else {
|
||||
uint16 passlen1 = SVAL(inbuf,smb_vwv7);
|
||||
uint16 passlen2 = SVAL(inbuf,smb_vwv8);
|
||||
uint32 client_caps = IVAL(inbuf,smb_vwv11);
|
||||
enum remote_arch_types ra_type = get_remote_arch();
|
||||
|
||||
char *p = smb_buf(inbuf);
|
||||
|
||||
global_client_caps = IVAL(inbuf,smb_vwv11);
|
||||
|
||||
/* client_caps is used as final determination if client is NT or Win95.
|
||||
This is needed to return the correct error codes in some
|
||||
circumstances.
|
||||
@ -501,7 +503,7 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int
|
||||
|
||||
if(ra_type == RA_WINNT || ra_type == RA_WIN95)
|
||||
{
|
||||
if(client_caps & (CAP_NT_SMBS | CAP_STATUS32))
|
||||
if(global_client_caps & (CAP_NT_SMBS | CAP_STATUS32))
|
||||
set_remote_arch( RA_WINNT);
|
||||
else
|
||||
set_remote_arch( RA_WIN95);
|
||||
|
@ -1069,6 +1069,7 @@ static int call_trans2qfsinfo(connection_struct *conn,
|
||||
char *vname = volume_label(SNUM(conn));
|
||||
int snum = SNUM(conn);
|
||||
char *fstype = lp_fstype(SNUM(conn));
|
||||
extern uint32 global_client_caps;
|
||||
|
||||
DEBUG(3,("call_trans2qfsinfo: level = %d\n", info_level));
|
||||
|
||||
@ -1131,24 +1132,28 @@ static int call_trans2qfsinfo(connection_struct *conn,
|
||||
break;
|
||||
case SMB_QUERY_FS_VOLUME_INFO:
|
||||
|
||||
/* NT4 always serves this up as unicode. JRA had noted this was
|
||||
* not the case in an earlier comment. What is going on? I
|
||||
* tested with Win95 -> NT and a sniff definately showed
|
||||
* unicode. The volume label now shows up correctly under Win95
|
||||
* with unicode here (tridge, Sep98)
|
||||
*/
|
||||
|
||||
data_len = 18 + 2*strlen(vname);
|
||||
|
||||
/*
|
||||
* Add volume serial number - hash of a combination of
|
||||
* the called hostname and the service name.
|
||||
*/
|
||||
SIVAL(pdata,8,str_checksum(lp_servicename(snum)) ^ (str_checksum(local_machine)<<16) );
|
||||
SIVAL(pdata,12,strlen(vname)*2);
|
||||
PutUniCode(pdata+18,vname);
|
||||
DEBUG(5,("call_trans2qfsinfo : SMB_QUERY_FS_VOLUME_INFO namelen = %d, vol = %s\n", strlen(vname),
|
||||
vname));
|
||||
SIVAL(pdata,8,str_checksum(lp_servicename(snum)) ^
|
||||
(str_checksum(local_machine)<<16));
|
||||
|
||||
/* NT4 always serves this up as unicode but expects it to be
|
||||
* delivered as ascii! (tridge && JRA)
|
||||
*/
|
||||
if (global_client_caps & CAP_NT_SMBS) {
|
||||
data_len = 18 + strlen(vname);
|
||||
SIVAL(pdata,12,strlen(vname));
|
||||
pstrcpy(pdata+18,vname);
|
||||
} else {
|
||||
data_len = 18 + 2*strlen(vname);
|
||||
SIVAL(pdata,12,strlen(vname)*2);
|
||||
PutUniCode(pdata+18,vname);
|
||||
}
|
||||
|
||||
DEBUG(5,("call_trans2qfsinfo : SMB_QUERY_FS_VOLUME_INFO namelen = %d, vol = %s\n",
|
||||
strlen(vname),vname));
|
||||
break;
|
||||
case SMB_QUERY_FS_SIZE_INFO:
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user