From 7265d4638805a0eb391237c5cba0f39f4d0feb11 Mon Sep 17 00:00:00 2001
From: Andrew Bartlett <abartlet@samba.org>
Date: Wed, 11 Jul 2001 04:27:03 +0000
Subject: This backs out my last change, which broke some of the finer points
 of RPC coding :-).  I'll be more carfull in this area in future.

This does not back out the cli_login change, so domain logons still work, but
only for english.

Andrew Bartlett
(This used to be commit bd3c2a0cddc71daa4165e1a0916208d0c650d55a)
---
 source3/rpc_parse/parse_misc.c | 54 ------------------------------------------
 source3/rpc_parse/parse_net.c  | 15 ++++++++----
 2 files changed, 11 insertions(+), 58 deletions(-)

diff --git a/source3/rpc_parse/parse_misc.c b/source3/rpc_parse/parse_misc.c
index d4754f5e9a..857f964e31 100644
--- a/source3/rpc_parse/parse_misc.c
+++ b/source3/rpc_parse/parse_misc.c
@@ -5,7 +5,6 @@
  *  Copyright (C) Andrew Tridgell              1992-1997,
  *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
  *  Copyright (C) Paul Ashton                       1997.
- *  Copyright (C) Andrew Bartlett                   2001.
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -921,59 +920,6 @@ void init_unistr2(UNISTR2 *str, const char *buf, size_t len)
 	rpcstr_push((char *)str->buffer, buf, len, STR_TERMINATE);
 }
 
-/*******************************************************************
- Inits a UNIHDR and UNISTR2 structure at one time.
-********************************************************************/
-
-void init_unistr2_and_hdr(UNISTR2 *str, UNIHDR *hdr, const char *buf )
-{
-	size_t convbuf_len_bytes, len_bytes;
-	int len;
-
-	uint16 *conversion_buffer;
-
-	if (buf == NULL) {
-		str->buffer = NULL;
-		hdr->uni_str_len = 0;
-		hdr->uni_max_len = 0;
-		hdr->buffer = 0;
-		return;
-	}
-
-	convbuf_len_bytes = (sizeof(uint16)*(strlen(buf) + 1));
-	/* Our strings cannot expand from internal to unicode by more 
-	   than a factor of 2 */
-	
-	conversion_buffer = malloc(convbuf_len_bytes);
-	if (conversion_buffer == NULL)
-		smb_panic("init_unistr: malloc fail\n");
-
-	/* Check this */
-
-	len_bytes = rpcstr_push(conversion_buffer, buf, convbuf_len_bytes, STR_TERMINATE);
-
-	len = len_bytes/sizeof(uint16);
-
-	if (len > MAX_UNISTRLEN) { 
-		len = MAX_UNISTRLEN;
-	}
-
-	str->buffer = (uint16 *)talloc_zero(get_talloc_ctx(), len*sizeof(uint16));
-	if (str->buffer == NULL)
-		smb_panic("init_unistr: talloc fail\n");
-
-	hdr->uni_str_len = len;
-	hdr->uni_max_len = len;
-
-	hdr->buffer      = 1;
-
-	str->uni_str_len = len;
-	str->uni_max_len = len;
-	memcpy(str->buffer, conversion_buffer, len*sizeof(uint16));
-
-	free(conversion_buffer);
-}
-
 /*******************************************************************
  Inits a UNISTR2 structure from a UNISTR
 ********************************************************************/
diff --git a/source3/rpc_parse/parse_net.c b/source3/rpc_parse/parse_net.c
index 35890c2f27..d7253a53fd 100644
--- a/source3/rpc_parse/parse_net.c
+++ b/source3/rpc_parse/parse_net.c
@@ -5,7 +5,6 @@
  *  Copyright (C) Andrew Tridgell              1992-1997,
  *  Copyright (C) Luke Kenneth Casson Leighton 1996-1997,
  *  Copyright (C) Paul Ashton                       1997.
- *  Copyright (C) Andrew Bartlett                   2001.
  *  
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -984,6 +983,9 @@ void init_id_info2(NET_ID_INFO_2 *id, char *domain_name,
 				unsigned char *lm_chal_resp,
 				unsigned char *nt_chal_resp)
 {
+	int len_domain_name = strlen(domain_name);
+	int len_user_name   = strlen(user_name  );
+	int len_wksta_name  = strlen(wksta_name );
 	int nt_chal_resp_len = ((nt_chal_resp != NULL) ? 24 : 0);
 	int lm_chal_resp_len = ((lm_chal_resp != NULL) ? 24 : 0);
 	unsigned char lm_owf[24];
@@ -993,9 +995,14 @@ void init_id_info2(NET_ID_INFO_2 *id, char *domain_name,
 
 	id->ptr_id_info2 = 1;
 
+	init_uni_hdr(&id->hdr_domain_name, len_domain_name);
+
 	id->param_ctrl = param_ctrl;
 	init_logon_id(&id->logon_id, log_id_low, log_id_high);
 
+	init_uni_hdr(&id->hdr_user_name, len_user_name);
+	init_uni_hdr(&id->hdr_wksta_name, len_wksta_name);
+
 	if (nt_chal_resp) {
 		/* oops.  can only send what-ever-it-is direct */
 		memcpy(nt_owf, nt_chal_resp, 24);
@@ -1011,9 +1018,9 @@ void init_id_info2(NET_ID_INFO_2 *id, char *domain_name,
 	init_str_hdr(&id->hdr_nt_chal_resp, 24, nt_chal_resp_len, (nt_chal_resp != NULL) ? 1 : 0);
 	init_str_hdr(&id->hdr_lm_chal_resp, 24, lm_chal_resp_len, (lm_chal_resp != NULL) ? 1 : 0);
 
-	init_unistr2_and_hdr(&id->uni_domain_name, &id->hdr_domain_name, domain_name);
-	init_unistr2_and_hdr(&id->uni_user_name, &id->hdr_user_name, user_name);
-	init_unistr2_and_hdr(&id->uni_wksta_name, &id->hdr_wksta_name, wksta_name);
+	init_unistr2(&id->uni_domain_name, domain_name, len_domain_name);
+	init_unistr2(&id->uni_user_name, user_name, len_user_name);
+	init_unistr2(&id->uni_wksta_name, wksta_name, len_wksta_name);
 
 	init_string2(&id->nt_chal_resp, (char *)nt_chal_resp, nt_chal_resp_len);
 	init_string2(&id->lm_chal_resp, (char *)lm_chal_resp, lm_chal_resp_len);
-- 
cgit