1
0
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 24b8a757ae)
This commit is contained in:
Andrew Tridgell 1998-09-23 01:25:33 +00:00
parent 242d068297
commit 3b7cee95ac
2 changed files with 25 additions and 18 deletions

View File

@ -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);

View File

@ -1069,7 +1069,8 @@ 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));
if(dos_stat(".",&st)!=0) {
@ -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:
{