From a8ab9840786b8376283743de8eef861d382b3171 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 21 Feb 2001 03:40:20 +0000 Subject: the unicode conversion of our client code is complete enough to be enabled by default you can disable it by setting the environment variable CLI_FORCE_ASCII (This used to be commit 4d59c08c5e6f54c0d6ced7650750cb987e77b6c9) --- source3/libsmb/cliconnect.c | 12 ++++++----- source3/libsmb/clientgen.c | 13 +---------- source3/libsmb/clifile.c | 50 ------------------------------------------- source3/libsmb/clilist.c | 25 ++++++++++------------ source3/libsmb/clistr.c | 13 +++++------ source3/libsmb/libsmbclient.c | 6 ------ 6 files changed, 24 insertions(+), 95 deletions(-) (limited to 'source3/libsmb') diff --git a/source3/libsmb/cliconnect.c b/source3/libsmb/cliconnect.c index 4a957a9ccd..d572c0f7d7 100644 --- a/source3/libsmb/cliconnect.c +++ b/source3/libsmb/cliconnect.c @@ -144,10 +144,10 @@ BOOL cli_session_setup(struct cli_state *cli, uint32 capabilities; capabilities = CAP_NT_SMBS; - if (cli->use_level_II_oplocks) + if (cli->use_level_II_oplocks) { capabilities |= CAP_LEVEL_II_OPLOCKS; - if (getenv("USE_UNICODE") && - (cli->capabilities & CAP_UNICODE)) { + } + if (cli->capabilities & CAP_UNICODE) { capabilities |= CAP_UNICODE; } set_message(cli->outbuf,13,0,True); @@ -453,8 +453,10 @@ BOOL cli_negprot(struct cli_state *cli) cli->max_xmit = MIN(cli->max_xmit, CLI_BUFFER_SIZE); - /* this ensures cli_use_unicode is setup - delete this call later (tridge) */ - cli_setup_packet(cli); + /* a way to force ascii SMB */ + if (getenv("CLI_FORCE_ASCII")) { + cli->capabilities &= ~CAP_UNICODE; + } return True; } diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index c25e71ff3d..8d4a025fcc 100644 --- a/source3/libsmb/clientgen.c +++ b/source3/libsmb/clientgen.c @@ -95,22 +95,11 @@ BOOL cli_send_smb(struct cli_state *cli) return True; } -int cli_use_unicode = 0; - /**************************************************************************** setup basics in a outgoing packet ****************************************************************************/ void cli_setup_packet(struct cli_state *cli) { - static int initialised; - - /* the USE_UNICODE check will be deleted once our client side unicode - support is complete (tridge) */ - if (!initialised) { - initialised = 1; - if (getenv("USE_UNICODE")) cli_use_unicode = 1; - } - cli->rap_error = 0; cli->nt_error = 0; SSVAL(cli->outbuf,smb_pid,cli->pid); @@ -120,7 +109,7 @@ void cli_setup_packet(struct cli_state *cli) uint16 flags2; SCVAL(cli->outbuf,smb_flg,0x8); flags2 = FLAGS2_LONG_PATH_COMPONENTS; - if (cli_use_unicode && cli->capabilities & CAP_UNICODE) { + if (cli->capabilities & CAP_UNICODE) { flags2 |= FLAGS2_UNICODE_STRINGS; } SSVAL(cli->outbuf,smb_flg2, flags2); diff --git a/source3/libsmb/clifile.c b/source3/libsmb/clifile.c index c5da049cf4..6264baf00e 100644 --- a/source3/libsmb/clifile.c +++ b/source3/libsmb/clifile.c @@ -219,56 +219,6 @@ int cli_nt_create(struct cli_state *cli, char *fname, uint32 DesiredAccess) return SVAL(cli->inbuf,smb_vwv2 + 1); } -/**************************************************************************** -open a file -****************************************************************************/ -int cli_nt_create_uni(struct cli_state *cli, char *fname, uint32 DesiredAccess) -{ - pstring uni; - char *p; - - memset(cli->outbuf,'\0',smb_size); - memset(cli->inbuf,'\0',smb_size); - - set_message(cli->outbuf,24,0,True); - - CVAL(cli->outbuf,smb_com) = SMBntcreateX; - SSVAL(cli->outbuf,smb_tid,cli->cnum); - cli_setup_packet(cli); - - SSVAL(cli->outbuf,smb_vwv0,0xFF); - if (cli->use_oplocks) - SIVAL(cli->outbuf,smb_ntcreate_Flags, REQUEST_OPLOCK|REQUEST_BATCH_OPLOCK); - else - SIVAL(cli->outbuf,smb_ntcreate_Flags, 0); - SIVAL(cli->outbuf,smb_ntcreate_RootDirectoryFid, 0x0); - SIVAL(cli->outbuf,smb_ntcreate_DesiredAccess, DesiredAccess); - SIVAL(cli->outbuf,smb_ntcreate_FileAttributes, 0x0); - SIVAL(cli->outbuf,smb_ntcreate_ShareAccess, 0x03); - SIVAL(cli->outbuf,smb_ntcreate_CreateDisposition, 0x01); - SIVAL(cli->outbuf,smb_ntcreate_CreateOptions, 0x0); - SIVAL(cli->outbuf,smb_ntcreate_ImpersonationLevel, 0x02); - SSVAL(cli->outbuf,smb_ntcreate_NameLength, strlen(fname) * 2); - - p = smb_buf(cli->outbuf); - p++; /* Alignment */ - pstrcpy(uni, fname); - unix_to_dos(uni, True); - p += dos_struni2(p, uni, (strlen(fname) + 1) * 2) * 2; - cli_setup_bcc(cli, p); - cli_send_smb(cli); - if (!cli_receive_smb(cli)) { - return -1; - } - - if (CVAL(cli->inbuf,smb_rcls) != 0) { - return -1; - } - - return SVAL(cli->inbuf,smb_vwv2 + 1); -} - - /**************************************************************************** open a file WARNING: if you open with O_WRONLY then getattrE won't work! diff --git a/source3/libsmb/clilist.c b/source3/libsmb/clilist.c index 9348b65bad..d4cc00d9f3 100644 --- a/source3/libsmb/clilist.c +++ b/source3/libsmb/clilist.c @@ -353,7 +353,7 @@ static int interpret_short_filename(char *p,file_info *finfo) but should otherwise not be used ****************************************************************************/ int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute, - void (*fn)(file_info *, const char *)) + void (*fn)(file_info *, const char *, void *), void *state) { char *p; int received = 0; @@ -373,12 +373,9 @@ int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute, memset(cli->outbuf,'\0',smb_size); memset(cli->inbuf,'\0',smb_size); - if (first) - set_message(cli->outbuf,2,5 + strlen(mask),True); - else - set_message(cli->outbuf,2,5 + 21,True); + set_message(cli->outbuf,2,0,True); - CVAL(cli->outbuf,smb_com) = SMBffirst; + CVAL(cli->outbuf,smb_com) = SMBsearch; SSVAL(cli->outbuf,smb_tid,cli->cnum); cli_setup_packet(cli); @@ -389,21 +386,19 @@ int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute, p = smb_buf(cli->outbuf); *p++ = 4; - if (first) - pstrcpy(p,mask); - else - pstrcpy(p,""); - p += strlen(p) + 1; - + p += clistr_push(cli, p, first?mask:"", -1, CLISTR_TERMINATE|CLISTR_CONVERT); *p++ = 5; if (first) { SSVAL(p,0,0); + p += 2; } else { SSVAL(p,0,21); p += 2; memcpy(p,status,21); + p += 21; } + cli_setup_bcc(cli, p); cli_send_smb(cli); if (!cli_receive_smb(cli)) break; @@ -433,7 +428,7 @@ int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute, memset(cli->outbuf,'\0',smb_size); memset(cli->inbuf,'\0',smb_size); - set_message(cli->outbuf,2,5 + 21,True); + set_message(cli->outbuf,2,0,True); CVAL(cli->outbuf,smb_com) = SMBfclose; SSVAL(cli->outbuf,smb_tid,cli->cnum); cli_setup_packet(cli); @@ -449,7 +444,9 @@ int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute, SSVAL(p, 0, 21); p += 2; memcpy(p,status,21); + p += 21; + cli_setup_bcc(cli, p); cli_send_smb(cli); if (!cli_receive_smb(cli)) { DEBUG(0,("Error closing search: %s\n",smb_errstr(cli->inbuf))); @@ -459,7 +456,7 @@ int cli_list_old(struct cli_state *cli,const char *Mask,uint16 attribute, for (p=dirlist,i=0;icapabilities & CAP_UNICODE)) { + if ((flags & CLISTR_ASCII) || !(cli->capabilities & CAP_UNICODE)) { /* the server doesn't want unicode */ safe_strcpy(dest, src, dest_len); len = strlen(dest); @@ -91,7 +88,7 @@ int clistr_push_size(struct cli_state *cli, void *dest, char *src, int dest_len, { int len = strlen(src); if (flags & CLISTR_TERMINATE) len++; - if (!(flags & CLISTR_ASCII) && cli_use_unicode && (cli->capabilities & CAP_UNICODE)) len *= 2; + if (!(flags & CLISTR_ASCII) && (cli->capabilities & CAP_UNICODE)) len *= 2; if (!(flags & CLISTR_ASCII) && dest && clistr_align(cli, PTR_DIFF(cli->outbuf, dest))) { len++; @@ -123,7 +120,7 @@ int clistr_pull(struct cli_state *cli, char *dest, void *src, int dest_len, int if (src_len > 0) src_len--; } - if (!cli_use_unicode || !(cli->capabilities & CAP_UNICODE)) { + if (!(cli->capabilities & CAP_UNICODE)) { /* the server doesn't want unicode */ if (flags & CLISTR_TERMINATE) { safe_strcpy(dest, src, dest_len); @@ -167,7 +164,7 @@ int clistr_pull_size(struct cli_state *cli, void *src, int src_len) if (src_len > 0) src_len--; } - if (!cli_use_unicode || !(cli->capabilities & CAP_UNICODE)) { + if (!(cli->capabilities & CAP_UNICODE)) { return strlen(src); } return strlen_w(src); @@ -180,6 +177,6 @@ otherwise return 1 if offset is off ****************************************************************************/ int clistr_align(struct cli_state *cli, int offset) { - if (!cli_use_unicode || !(cli->capabilities & CAP_UNICODE)) return 0; + if (!(cli->capabilities & CAP_UNICODE)) return 0; return offset & 1; } diff --git a/source3/libsmb/libsmbclient.c b/source3/libsmb/libsmbclient.c index 1444e5883a..bc400d5b8d 100644 --- a/source3/libsmb/libsmbclient.c +++ b/source3/libsmb/libsmbclient.c @@ -1575,11 +1575,8 @@ int smbc_opendir(const char *fname) /* find the name of the server ... */ if (!name_status_find(0, rem_ip, server)) { - - fprintf(stderr, "Could not get the name of local master browser ...\n"); errno = EINVAL; return -1; - } /* @@ -1637,11 +1634,8 @@ int smbc_opendir(const char *fname) /*cli_get_backup_server(my_netbios_name, server, buserver, sizeof(buserver)); */ if (!name_status_find(0, rem_ip, buserver)) { - - fprintf(stderr, "Could not get name of local master browser ...\n"); errno = EPERM; /* FIXME, is this correct */ return -1; - } /* -- cgit