summaryrefslogtreecommitdiff
path: root/source/rpc_parse/parse_prs.c
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2006-02-20 23:22:56 +0000
committerGünther Deschner <gd@samba.org>2006-02-20 23:22:56 +0000
commitf8e69f9103a59e3cde4d0a689ba9af1db331db28 (patch)
tree8ee9792f0e604566b7750170416a7f691cf68e48 /source/rpc_parse/parse_prs.c
parent42772a7ef87ae2d75d9028036ad988162a4af59d (diff)
downloadsamba-f8e69f9103a59e3cde4d0a689ba9af1db331db28.tar.gz
r13581: Correctly parse a non-null terminated, little-endian UCS2 string in the
PAC_LOGON_NAME structure. This was broken on big-endian machines (Solaris SPARC and ppc). Fixes Bug #3330. Jerry, this should be in 3.0.21c. Guenther
Diffstat (limited to 'source/rpc_parse/parse_prs.c')
-rw-r--r--source/rpc_parse/parse_prs.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/source/rpc_parse/parse_prs.c b/source/rpc_parse/parse_prs.c
index c4f9f512ab7..857a24cf0e0 100644
--- a/source/rpc_parse/parse_prs.c
+++ b/source/rpc_parse/parse_prs.c
@@ -1333,6 +1333,49 @@ BOOL prs_string_alloc(const char *name, prs_struct *ps, int depth, const char **
}
/*******************************************************************
+ Stream a null-terminated string of fixed len.
+ ********************************************************************/
+
+BOOL prs_string_len(const char *name, prs_struct *ps, int depth, char *str, int len)
+{
+ char *q;
+ int i;
+ BOOL charmode = True;
+
+ q = prs_mem_get(ps, len+1);
+ if (q == NULL)
+ return False;
+
+ for(i = 0; i < len; i++) {
+ if (UNMARSHALLING(ps))
+ str[i] = q[i];
+ else
+ q[i] = str[i];
+ }
+
+ /* The terminating null. */
+ str[i] = '\0';
+
+ if (MARSHALLING(ps)) {
+ q[i] = '\0';
+ }
+
+ ps->data_offset += len+1;
+
+ DEBUG(5,("%s%04x %s: ", tab_depth(depth), ps->data_offset, name));
+ if (charmode) {
+ print_asc(5, (unsigned char*)str, len);
+ } else {
+ for (i = 0; i < len; i++)
+ DEBUG(5,("%04x ", str[i]));
+ }
+ DEBUG(5,("\n"));
+
+ return True;
+}
+
+
+/*******************************************************************
prs_uint16 wrapper. Call this and it sets up a pointer to where the
uint16 should be stored, or gets the size if reading.
********************************************************************/