svn commit: samba r26418 - in branches/SAMBA_4_0/source/auth/ntlmssp: .

kai at samba.org kai at samba.org
Wed Dec 12 19:38:23 GMT 2007


Author: kai
Date: 2007-12-12 19:38:22 +0000 (Wed, 12 Dec 2007)
New Revision: 26418

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=26418

Log:
Janitorial: Kill pstring in ntlmssp_parse.c

Modified:
   branches/SAMBA_4_0/source/auth/ntlmssp/ntlmssp_parse.c


Changeset:
Modified: branches/SAMBA_4_0/source/auth/ntlmssp/ntlmssp_parse.c
===================================================================
--- branches/SAMBA_4_0/source/auth/ntlmssp/ntlmssp_parse.c	2007-12-12 14:09:15 UTC (rev 26417)
+++ branches/SAMBA_4_0/source/auth/ntlmssp/ntlmssp_parse.c	2007-12-12 19:38:22 UTC (rev 26418)
@@ -209,7 +209,9 @@
 	uint16_t len1, len2;
 	uint32_t ptr;
 	uint32_t *v;
-	pstring p;
+	size_t p_len = 1024;
+	char *p = talloc_array(mem_ctx, char, p_len);
+	bool ret = true;
 
 	va_start(ap, format);
 	for (i=0; format[i]; i++) {
@@ -226,21 +228,27 @@
 			} else {
 				/* make sure its in the right format - be strict */
 				if ((len1 != len2) || (ptr + len1 < ptr) || (ptr + len1 < len1) || (ptr + len1 > blob->length)) {
-					return false;
+					ret = false;
+					goto cleanup;
 				}
 				if (len1 & 1) {
 					/* if odd length and unicode */
-					return false;
+					ret = false;
+					goto cleanup;
 				}
-				if (blob->data + ptr < (uint8_t *)ptr || blob->data + ptr < blob->data)
-					return false;
+				if (blob->data + ptr < (uint8_t *)ptr ||
+						blob->data + ptr < blob->data) {
+					ret = false;
+					goto cleanup;
+				}
 
 				if (0 < len1) {
-					pull_string(global_smb_iconv_convenience, p, blob->data + ptr, sizeof(p), 
+					pull_string(global_smb_iconv_convenience, p, blob->data + ptr, p_len, 
 						    len1, STR_UNICODE|STR_NOALIGN);
 					(*ps) = talloc_strdup(mem_ctx, p);
 					if (!(*ps)) {
-						return false;
+						ret = false;
+						goto cleanup;
 					}
 				} else {
 					(*ps) = "";
@@ -259,18 +267,23 @@
 				*ps = "";
 			} else {
 				if ((len1 != len2) || (ptr + len1 < ptr) || (ptr + len1 < len1) || (ptr + len1 > blob->length)) {
-					return false;
+					ret = false;
+					goto cleanup;
 				}
 
-				if (blob->data + ptr < (uint8_t *)ptr || blob->data + ptr < blob->data)
-					return false;	
+				if (blob->data + ptr < (uint8_t *)ptr ||
+						blob->data + ptr < blob->data) {
+					ret = false;
+					goto cleanup;
+				}
 
 				if (0 < len1) {
-					pull_string(global_smb_iconv_convenience, p, blob->data + ptr, sizeof(p), 
+					pull_string(global_smb_iconv_convenience, p, blob->data + ptr, p_len, 
 						    len1, STR_ASCII|STR_NOALIGN);
 					(*ps) = talloc_strdup(mem_ctx, p);
 					if (!(*ps)) {
-						return false;
+						ret = false;
+						goto cleanup;
 					}
 				} else {
 					(*ps) = "";
@@ -289,12 +302,16 @@
 			} else {
 				/* make sure its in the right format - be strict */
 				if ((len1 != len2) || (ptr + len1 < ptr) || (ptr + len1 < len1) || (ptr + len1 > blob->length)) {
-					return false;
+					ret = false;
+					goto cleanup;
 				}
 
-				if (blob->data + ptr < (uint8_t *)ptr || blob->data + ptr < blob->data)
-					return false;	
-			
+				if (blob->data + ptr < (uint8_t *)ptr ||
+						blob->data + ptr < blob->data) {
+					ret = false;
+					goto cleanup;
+				}
+
 				*b = data_blob_talloc(mem_ctx, blob->data + ptr, len1);
 			}
 			break;
@@ -303,9 +320,12 @@
 			len1 = va_arg(ap, uint_t);
 			/* make sure its in the right format - be strict */
 			NEED_DATA(len1);
-			if (blob->data + head_ofs < (uint8_t *)head_ofs || blob->data + head_ofs < blob->data)
-				return false;	
-			
+			if (blob->data + head_ofs < (uint8_t *)head_ofs ||
+					blob->data + head_ofs < blob->data) {
+				ret = false;
+				goto cleanup;
+			}
+
 			*b = data_blob_talloc(mem_ctx, blob->data + head_ofs, len1);
 			head_ofs += len1;
 			break;
@@ -317,19 +337,26 @@
 		case 'C':
 			s = va_arg(ap, char *);
 
-			if (blob->data + head_ofs < (uint8_t *)head_ofs || blob->data + head_ofs < blob->data)
-				return false;	
-	
-			head_ofs += pull_string(global_smb_iconv_convenience, p, blob->data+head_ofs, sizeof(p), 
-						blob->length - head_ofs, 
-						STR_ASCII|STR_TERMINATE);
+			if (blob->data + head_ofs < (uint8_t *)head_ofs ||
+					blob->data + head_ofs < blob->data) {
+				ret = false;
+				goto cleanup;
+			}
+
+			head_ofs += pull_string(global_smb_iconv_convenience, p,
+					blob->data+head_ofs, p_len,
+					blob->length - head_ofs,
+					STR_ASCII|STR_TERMINATE);
 			if (strcmp(s, p) != 0) {
-				return false;
+				ret = false;
+				goto cleanup;
 			}
 			break;
 		}
 	}
+
+cleanup:
 	va_end(ap);
-
-	return true;
+	talloc_free(p);
+	return ret;
 }



More information about the samba-cvs mailing list