From 41e09aaa29f75189b89f77ac7700b059f39ef1d2 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Thu, 3 Jan 2002 18:51:10 +0000 Subject: [PATCH] Fix clistr_pull error with unicode and -1 src_len. Stopped smbclient -L from working. Jeremy. --- source/include/doserr.h | 1 + source/libsmb/cliconnect.c | 3 --- source/libsmb/clistr.c | 3 ++- source/smbd/trans2.c | 6 +++--- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/source/include/doserr.h b/source/include/doserr.h index d55f21be346..bd1658cdb7a 100644 --- a/source/include/doserr.h +++ b/source/include/doserr.h @@ -168,6 +168,7 @@ #define WERR_BUF_TOO_SMALL W_ERROR(2123) #define WERR_JOB_NOT_FOUND W_ERROR(2151) #define WERR_DEST_NOT_FOUND W_ERROR(2152) +#define WERR_NOTL_LOCAL_DOMAIN W_ERROR(2320) #define WERR_PRINTER_DRIVER_IN_USE W_ERROR(3001) #define WERR_STATUS_MORE_ENTRIES W_ERROR(0x0105) diff --git a/source/libsmb/cliconnect.c b/source/libsmb/cliconnect.c index 18598257dbc..b6e90a869de 100644 --- a/source/libsmb/cliconnect.c +++ b/source/libsmb/cliconnect.c @@ -176,9 +176,6 @@ static BOOL cli_session_setup_guest(struct cli_state *cli) p += clistr_pull(cli, cli->server_os, p, sizeof(fstring), -1, STR_TERMINATE); p += clistr_pull(cli, cli->server_type, p, sizeof(fstring), -1, STR_TERMINATE); p += clistr_pull(cli, cli->server_domain, p, sizeof(fstring), -1, STR_TERMINATE); - p += clistr_pull(cli, cli->server_domain, p, sizeof(fstring), - smb_buflen(cli->inbuf) - PTR_DIFF(p, smb_buf(cli->inbuf)), - 0); fstrcpy(cli->user_name, ""); diff --git a/source/libsmb/clistr.c b/source/libsmb/clistr.c index edc29ee828b..8a76855c7f4 100644 --- a/source/libsmb/clistr.c +++ b/source/libsmb/clistr.c @@ -129,6 +129,7 @@ int clistr_pull(struct cli_state *cli, char *dest, const void *src, int dest_len if (flags & STR_TERMINATE) { int i; + src_len = strlen_w(src)*2+2; for (i=0; i < src_len; i += 2) { const smb_ucs2_t c = (smb_ucs2_t)SVAL(src, i); if (c == (smb_ucs2_t)0 || (dest_len - i < 3)) @@ -136,7 +137,7 @@ int clistr_pull(struct cli_state *cli, char *dest, const void *src, int dest_len dest += unicode_to_unix_char(dest, c); } *dest++ = 0; - len = strlen_w(src) + 2; + len = src_len; } else { int i; if (dest_len*2 < src_len) diff --git a/source/smbd/trans2.c b/source/smbd/trans2.c index 8d3d32d6376..b12a8a81b81 100644 --- a/source/smbd/trans2.c +++ b/source/smbd/trans2.c @@ -1747,7 +1747,7 @@ NTSTATUS set_delete_on_close_internal(files_struct *fsp, BOOL delete_on_close) if (delete_on_close && !CAN_WRITE(fsp->conn)) { DEBUG(10,("set_delete_on_close_internal: file %s delete on close flag set but write access denied on share.\n", fsp->fsp_name )); - return NT_STATUS_ACCESS_DENIED; + return NT_STATUS_ACCESS_DENIED; } /* * Only allow delete on close for files/directories opened with delete intent. @@ -1756,7 +1756,7 @@ NTSTATUS set_delete_on_close_internal(files_struct *fsp, BOOL delete_on_close) if (delete_on_close && !GET_DELETE_ACCESS_REQUESTED(fsp->share_mode)) { DEBUG(10,("set_delete_on_close_internal: file %s delete on close flag set but delete access denied.\n", fsp->fsp_name )); - return NT_STATUS_ACCESS_DENIED; + return NT_STATUS_ACCESS_DENIED; } if(fsp->is_directory) { @@ -1784,7 +1784,7 @@ NTSTATUS set_delete_on_close_internal(files_struct *fsp, BOOL delete_on_close) delete_on_close ? "Adding" : "Removing", fsp->fnum, fsp->fsp_name )); if (lock_share_entry_fsp(fsp) == False) - return NT_STATUS_ACCESS_DENIED; + return NT_STATUS_ACCESS_DENIED; if (!modify_delete_flag(fsp->dev, fsp->inode, delete_on_close)) { DEBUG(0,("set_delete_on_close_internal: failed to change delete on close flag for file %s\n", -- 2.11.4.GIT