summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2004-10-20 02:02:00 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:01:55 -0500
commit31e96d8def1dd2fea76d31a032d64e5917462dc8 (patch)
tree808f7c944e3aa873b4d6af6ddebfa8fa2e659986
parent72093ce62f1e09db86452720fe8280ad66824cde (diff)
downloadsamba-31e96d8def1dd2fea76d31a032d64e5917462dc8.tar.gz
samba-31e96d8def1dd2fea76d31a032d64e5917462dc8.tar.bz2
samba-31e96d8def1dd2fea76d31a032d64e5917462dc8.zip
r3073: Fix bug in the handling of null-terminated ASCII strings in RPC.
Because we didn't count the null terminator, we would not move past it in the packet. Andrew Bartlett (This used to be commit 8b38bffc7098610c469ab61b7e0e6884f046f286)
-rw-r--r--source4/lib/util_str.c18
-rw-r--r--source4/librpc/ndr/ndr_basic.c2
2 files changed, 19 insertions, 1 deletions
diff --git a/source4/lib/util_str.c b/source4/lib/util_str.c
index 03ba1399ef..07a2c1dbd1 100644
--- a/source4/lib/util_str.c
+++ b/source4/lib/util_str.c
@@ -1120,6 +1120,24 @@ int strcmp_safe(const char *s1, const char *s2)
/*******************************************************************
+return the number of bytes occupied by a buffer in ASCII format
+the result includes the null termination
+limited by 'n' bytes
+********************************************************************/
+size_t ascii_len_n(const char *src, size_t n)
+{
+ size_t len;
+
+ len = strnlen(src, n);
+ if (len+1 <= n) {
+ len += 1;
+ }
+
+ return len;
+}
+
+
+/*******************************************************************
Return a string representing a CIFS attribute for a file.
********************************************************************/
char *attrib_string(TALLOC_CTX *mem_ctx, uint32_t attrib)
diff --git a/source4/librpc/ndr/ndr_basic.c b/source4/librpc/ndr/ndr_basic.c
index 5808ae7452..239b28e3e7 100644
--- a/source4/librpc/ndr/ndr_basic.c
+++ b/source4/librpc/ndr/ndr_basic.c
@@ -657,7 +657,7 @@ NTSTATUS ndr_pull_string(struct ndr_pull *ndr, int ndr_flags, const char **s)
case LIBNDR_FLAG_STR_NULLTERM:
if (byte_mul == 1) {
- len1 = strnlen(ndr->data+ndr->offset, ndr->data_size - ndr->offset);
+ len1 = ascii_len_n(ndr->data+ndr->offset, ndr->data_size - ndr->offset);
} else {
len1 = utf16_len_n(ndr->data+ndr->offset, ndr->data_size - ndr->offset);
}