summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/include/smb.h1
-rw-r--r--source3/lib/charcnv.c2
-rw-r--r--source3/smbd/trans2.c10
3 files changed, 7 insertions, 6 deletions
diff --git a/source3/include/smb.h b/source3/include/smb.h
index 4dacf79a13..27c966914f 100644
--- a/source3/include/smb.h
+++ b/source3/include/smb.h
@@ -66,6 +66,7 @@ typedef int BOOL;
#define STR_ASCII 4
#define STR_UNICODE 8
#define STR_NOALIGN 16
+#define STR_TERMINATE_ASCII 128
/* how long to wait for secondary SMB packets (milli-seconds) */
#define SMB_SECONDARY_WAIT (60*1000)
diff --git a/source3/lib/charcnv.c b/source3/lib/charcnv.c
index eb427cc0fc..1a74318439 100644
--- a/source3/lib/charcnv.c
+++ b/source3/lib/charcnv.c
@@ -367,7 +367,7 @@ size_t push_ascii(void *dest, const char *src, size_t dest_len, int flags)
src = tmpbuf;
}
- if (flags & STR_TERMINATE)
+ if (flags & (STR_TERMINATE | STR_TERMINATE_ASCII))
src_len++;
return convert_string(CH_UNIX, CH_DOS, src, src_len, dest, dest_len);
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index fa64883620..b20ec84eea 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -681,14 +681,14 @@ static BOOL get_lanman2_dir_entry(connection_struct *conn,
pstrcpy(mangled_name, fname);
mangle_map(mangled_name,True,True,SNUM(conn));
mangled_name[12] = 0;
- len = srvstr_push(outbuf, p+2, mangled_name, 24, STR_UPPER);
+ len = srvstr_push(outbuf, p+2, mangled_name, 24, STR_UPPER|STR_UNICODE);
SSVAL(p, 0, len);
} else {
SSVAL(p,0,0);
*(p+2) = 0;
}
p += 2 + 24;
- len = srvstr_push(outbuf, p, fname, -1, 0);
+ len = srvstr_push(outbuf, p, fname, -1, STR_TERMINATE_ASCII);
SIVAL(q,0,len);
p += len;
len = PTR_DIFF(p, pdata);
@@ -709,7 +709,7 @@ static BOOL get_lanman2_dir_entry(connection_struct *conn,
p += 16;
SIVAL(p,0,nt_extmode); p += 4;
p += 4;
- len = srvstr_push(outbuf, p, fname, -1, 0);
+ len = srvstr_push(outbuf, p, fname, -1, STR_TERMINATE_ASCII);
SIVAL(p, -4, len);
p += len;
len = PTR_DIFF(p, pdata);
@@ -732,7 +732,7 @@ static BOOL get_lanman2_dir_entry(connection_struct *conn,
p += 4;
SIVAL(p,4,0); /* ea size */
- len = srvstr_push(outbuf, p+8, fname, -1, 0);
+ len = srvstr_push(outbuf, p+8, fname, -1, STR_TERMINATE_ASCII);
SIVAL(p, 0, len);
p += 8 + len;
@@ -748,7 +748,7 @@ static BOOL get_lanman2_dir_entry(connection_struct *conn,
p += 4;
/* this must *not* be null terminated or w2k gets in a loop trying to set an
acl on a dir (tridge) */
- len = srvstr_push(outbuf, p, fname, -1, 0);
+ len = srvstr_push(outbuf, p, fname, -1, STR_TERMINATE_ASCII);
SIVAL(p, -4, len);
p += len;
len = PTR_DIFF(p, pdata);