From c6d16eea4394ff1c4d12cb435eebb0686b5ee736 Mon Sep 17 00:00:00 2001 From: Luke Leighton Date: Thu, 11 Feb 1999 18:50:13 +0000 Subject: the UNICODE issue... (This used to be commit 73db80f34183324845407b00f58462ff2d7b47ea) --- source3/include/proto.h | 9 ++++++++- source3/lib/util_unistr.c | 28 +++++++++++++++++++++++++++- source3/libsmb/clientgen.c | 2 +- source3/libsmb/smbencrypt.c | 2 +- source3/rpc_parse/parse_misc.c | 6 +++--- source3/rpc_parse/parse_reg.c | 2 +- source3/rpc_parse/parse_rpc.c | 6 +++--- 7 files changed, 44 insertions(+), 11 deletions(-) (limited to 'source3') diff --git a/source3/include/proto.h b/source3/include/proto.h index f649b40332..e564163421 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -572,7 +572,8 @@ char *unistr2_to_str(UNISTR2 *str); uint32 buffer2_to_uint32(BUFFER2 *str); char *buffer2_to_str(BUFFER2 *str); char *buffer2_to_multistr(BUFFER2 *str); -int struni2(char *dst, const char *src); +int str_to_unistr16(uint16 *dst, const char *src); +int str_to_unistr8(char *dst, const char *src); char *unistr(char *buf); int unistrcpy(char *dst, char *src); @@ -580,6 +581,12 @@ int unistrcpy(char *dst, char *src); int cli_set_port(struct cli_state *cli, int port); char *cli_errstr(struct cli_state *cli); +BOOL cli_send_trans(struct cli_state *cli, int trans, + char *name, int pipe_name_len, + int fid, int flags, + uint16 *setup, int lsetup, int msetup, + char *param, int lparam, int mparam, + char *data, int ldata, int mdata); BOOL cli_api_pipe(struct cli_state *cli, char *pipe_name, int pipe_name_len, uint16 *setup, uint32 setup_count, uint32 max_setup_count, char *params, uint32 param_count, uint32 max_param_count, diff --git a/source3/lib/util_unistr.c b/source3/lib/util_unistr.c index 5e73fe6ada..641f891f83 100644 --- a/source3/lib/util_unistr.c +++ b/source3/lib/util_unistr.c @@ -193,6 +193,32 @@ char *buffer2_to_multistr(BUFFER2 *str) return lbuf; } +/******************************************************************* +create a null-terminated unicode string from a null-terminated ascii string. +return number of unicode chars copied, excluding the null character. +only handles ascii strings +Unicode strings created are in little-endian format. +********************************************************************/ +int str_to_unistr16(uint16 *dst, const char *src) +{ + size_t len = 0; + + if (dst == NULL) + return 0; + + if (src != NULL) + { + for (; *src && len < MAXUNI-2; len++, dst++, src++) + { + *dst = *src; + } + } + + *dst = 0; + + return len; +} + /******************************************************************* create a null-terminated unicode string from a null-terminated ascii string. return number of unicode chars copied, excluding the null character. @@ -200,7 +226,7 @@ only handles ascii strings Unicode strings created are in little-endian format. ********************************************************************/ -int struni2(char *dst, const char *src) +int str_to_unistr8(char *dst, const char *src) { size_t len = 0; diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index d40c95b9c1..60498c8fb2 100644 --- a/source3/libsmb/clientgen.c +++ b/source3/libsmb/clientgen.c @@ -226,7 +226,7 @@ static char *fix_char_ptr(unsigned int datap, unsigned int converter, /**************************************************************************** send a SMB trans or trans2 request ****************************************************************************/ -static BOOL cli_send_trans(struct cli_state *cli, int trans, +BOOL cli_send_trans(struct cli_state *cli, int trans, char *name, int pipe_name_len, int fid, int flags, uint16 *setup, int lsetup, int msetup, diff --git a/source3/libsmb/smbencrypt.c b/source3/libsmb/smbencrypt.c index dd801e5982..ead34aaa3d 100644 --- a/source3/libsmb/smbencrypt.c +++ b/source3/libsmb/smbencrypt.c @@ -209,7 +209,7 @@ BOOL make_oem_passwd_hash(char data[516], const char *passwd, uchar old_pw_hash[ generate_random_buffer((unsigned char *)data, 516, False); if (unicode) { - struni2( &data[512 - new_pw_len], passwd); + str_to_unistr8( &data[512 - new_pw_len], passwd); } else { diff --git a/source3/rpc_parse/parse_misc.c b/source3/rpc_parse/parse_misc.c index bf3bba1249..7c3f446908 100644 --- a/source3/rpc_parse/parse_misc.c +++ b/source3/rpc_parse/parse_misc.c @@ -329,7 +329,7 @@ creates a UNISTR structure. void make_unistr(UNISTR *str, char *buf) { /* store the string (null-terminated copy) */ - struni2((char *)(str->buffer), buf); + str_to_unistr16(str->buffer, buf); } /******************************************************************* @@ -372,7 +372,7 @@ void make_buffer3_str(BUFFER3 *str, char *buf, int len) str->buf_len = len * 2; /* store the string (null-terminated 8 bit chars into 16 bit chars) */ - struni2(str->buffer, buf); + str_to_unistr8(str->buffer, buf); } /******************************************************************* @@ -573,7 +573,7 @@ void make_unistr2(UNISTR2 *str, const char *buf, int len) str->uni_str_len = len; /* store the string (null-terminated 8 bit chars into 16 bit chars) */ - struni2((char*)(str->buffer), buf); + str_to_unistr16((str->buffer), buf); } /******************************************************************* diff --git a/source3/rpc_parse/parse_reg.c b/source3/rpc_parse/parse_reg.c index a3d8ebb64a..84d9650105 100644 --- a/source3/rpc_parse/parse_reg.c +++ b/source3/rpc_parse/parse_reg.c @@ -769,7 +769,7 @@ void make_reg_r_info(REG_R_INFO *r_r, uint32 status) { char buf[512]; - int len = struni2(buf, os_type); + int len = str_to_unistr8(buf, os_type); r_r->ptr1 = 1; r_r->level = level; diff --git a/source3/rpc_parse/parse_rpc.c b/source3/rpc_parse/parse_rpc.c index 12e94ace77..63f738466b 100644 --- a/source3/rpc_parse/parse_rpc.c +++ b/source3/rpc_parse/parse_rpc.c @@ -707,9 +707,9 @@ void make_rpc_auth_ntlmssp_resp(RPC_AUTH_NTLMSSP_RESP *rsp, if (IS_BITS_SET_ALL(neg_flags, NTLMSSP_NEGOTIATE_UNICODE)) { - struni2(rsp->domain, domain); - struni2(rsp->user , user ); - struni2(rsp->wks , wks ); + str_to_unistr8(rsp->domain, domain); + str_to_unistr8(rsp->user , user ); + str_to_unistr8(rsp->wks , wks ); } else { -- cgit