[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-unstable-384-gb5a2a1e

Jeremy Allison jra at samba.org
Wed Nov 28 03:06:57 GMT 2007


The branch, v3-2-test has been updated
       via  b5a2a1e3f82a0d319fc9a1d76f5166150680f4d4 (commit)
      from  6a556fd73ac8c247c15df664f7910f8688abfdbc (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit b5a2a1e3f82a0d319fc9a1d76f5166150680f4d4
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Nov 27 19:05:08 2007 -0800

    Remove pstring from srv_spoolss_nt.c. All gone from rpc_server/*.c
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source/include/nt_printing.h       |    2 +-
 source/printing/print_cups.c       |    4 +-
 source/registry/reg_printing.c     |    2 +-
 source/rpc_server/srv_spoolss_nt.c |  538 ++++++++++++++++++++----------------
 4 files changed, 311 insertions(+), 235 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/include/nt_printing.h b/source/include/nt_printing.h
index 8e8d87b..479404d 100644
--- a/source/include/nt_printing.h
+++ b/source/include/nt_printing.h
@@ -312,7 +312,7 @@ typedef struct nt_printer_info_level_2
 	fstring sharename;
 	fstring portname;
 	fstring drivername;
-	pstring comment;
+	char comment[1024];
 	fstring location;
 	NT_DEVICEMODE *devmode;
 	fstring sepfile;
diff --git a/source/printing/print_cups.c b/source/printing/print_cups.c
index 6e62306..593c5c7 100644
--- a/source/printing/print_cups.c
+++ b/source/printing/print_cups.c
@@ -1298,7 +1298,9 @@ bool cups_pull_comment_location(NT_PRINTER_INFO_LEVEL_2 *printer)
 			{
 				DEBUG(5,("cups_pull_comment_location: Using cups comment: %s\n",
 					 attr->values[0].string.text));				
-			    	pstrcpy(printer->comment,attr->values[0].string.text);
+			    	strlcpy(printer->comment,
+						attr->values[0].string.text,
+						sizeof(printer->comment));
 			}
 
 			/* Grab the location if we don't have one */ 
diff --git a/source/registry/reg_printing.c b/source/registry/reg_printing.c
index 8c1de76..2ca74f7 100644
--- a/source/registry/reg_printing.c
+++ b/source/registry/reg_printing.c
@@ -296,7 +296,7 @@ static bool add_printers_by_registry( REGSUBKEY_CTR *subkeys )
 		if ( snum == -1 ) {
 			fstrcpy( info2.printername, printername );
 			fstrcpy( info2.sharename, printername );
-			if ( !add_printer_hook( NULL, &printer ) ) {
+			if ( !add_printer_hook(talloc_tos(), NULL, &printer ) ) {
 				DEBUG(0,("add_printers_by_registry: Failed to add printer [%s]\n",
 					printername));
 			}	
diff --git a/source/rpc_server/srv_spoolss_nt.c b/source/rpc_server/srv_spoolss_nt.c
index a6f3bfb..b01f10b 100644
--- a/source/rpc_server/srv_spoolss_nt.c
+++ b/source/rpc_server/srv_spoolss_nt.c
@@ -284,10 +284,11 @@ static bool close_printer_handle(pipes_struct *p, POLICY_HND *hnd)
 /****************************************************************************
  Delete a printer given a handle.
 ****************************************************************************/
-WERROR delete_printer_hook( NT_USER_TOKEN *token, const char *sharename )
+
+WERROR delete_printer_hook(TALLOC_CTX *ctx, NT_USER_TOKEN *token, const char *sharename )
 {
 	char *cmd = lp_deleteprinter_cmd();
-	pstring command;
+	char *command = NULL;
 	int ret;
 	SE_PRIV se_printop = SE_PRINT_OPERATOR;
 	bool is_print_op = False;
@@ -297,8 +298,12 @@ WERROR delete_printer_hook( NT_USER_TOKEN *token, const char *sharename )
 	if ( !*cmd )
 		return WERR_OK;
 
-	pstr_sprintf(command, "%s \"%s\"", cmd, sharename);
-
+	command = talloc_asprintf(ctx,
+			"%s \"%s\"",
+			cmd, sharename);
+	if (!command) {
+		return WERR_NOMEM;
+	}
 	if ( token )
 		is_print_op = user_has_privileges( token, &se_printop );
 
@@ -322,6 +327,8 @@ WERROR delete_printer_hook( NT_USER_TOKEN *token, const char *sharename )
 
 	DEBUGADD(10,("returned [%d]\n", ret));
 
+	TALLOC_FREE(command);
+
 	if (ret != 0)
 		return WERR_BADFID; /* What to return here? */
 
@@ -367,7 +374,7 @@ static WERROR delete_printer_handle(pipes_struct *p, POLICY_HND *hnd)
 		return WERR_BADFID;
 	}
 
-	return delete_printer_hook( p->pipe_user.nt_user_token, Printer->sharename );
+	return delete_printer_hook(p->mem_ctx, p->pipe_user.nt_user_token, Printer->sharename );
 }
 
 /****************************************************************************
@@ -2719,20 +2726,17 @@ void spoolss_notify_server_name(int snum,
 				       NT_PRINTER_INFO_LEVEL *printer,
 				       TALLOC_CTX *mem_ctx)
 {
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
-	len = rpcstr_push(temp, printer->info_2->servername, sizeof(temp)-2, STR_TERMINATE);
+	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->servername);
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2748,7 +2752,7 @@ void spoolss_notify_printer_name(int snum,
 					NT_PRINTER_INFO_LEVEL *printer,
 					TALLOC_CTX *mem_ctx)
 {
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
 	/* the notify name should not contain the \\server\ part */
@@ -2760,16 +2764,14 @@ void spoolss_notify_printer_name(int snum,
 		p++;
 	}
 
-	len = rpcstr_push(temp, p, sizeof(temp)-2, STR_TERMINATE);
+	len = rpcstr_push_talloc(mem_ctx, &temp, p);
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2785,19 +2787,17 @@ void spoolss_notify_share_name(int snum,
 				      NT_PRINTER_INFO_LEVEL *printer,
 				      TALLOC_CTX *mem_ctx)
 {
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
-	len = rpcstr_push(temp, lp_servicename(snum), sizeof(temp)-2, STR_TERMINATE);
+	len = rpcstr_push_talloc(mem_ctx, &temp, lp_servicename(snum));
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2814,23 +2814,19 @@ void spoolss_notify_port_name(int snum,
 				     NT_PRINTER_INFO_LEVEL *printer,
 				     TALLOC_CTX *mem_ctx)
 {
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
 	/* even if it's strange, that's consistant in all the code */
 
-	len = rpcstr_push(temp, printer->info_2->portname, sizeof(temp)-2, STR_TERMINATE);
+	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->portname);
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2847,21 +2843,17 @@ void spoolss_notify_driver_name(int snum,
 				       NT_PRINTER_INFO_LEVEL *printer,
 				       TALLOC_CTX *mem_ctx)
 {
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
-	len = rpcstr_push(temp, printer->info_2->drivername, sizeof(temp)-2, STR_TERMINATE);
+	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->drivername);
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2877,24 +2869,20 @@ void spoolss_notify_comment(int snum,
 				   NT_PRINTER_INFO_LEVEL *printer,
 				   TALLOC_CTX *mem_ctx)
 {
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
 	if (*printer->info_2->comment == '\0')
-		len = rpcstr_push(temp, lp_comment(snum), sizeof(temp)-2, STR_TERMINATE);
+		len = rpcstr_push_talloc(mem_ctx, &temp, lp_comment(snum));
 	else
-		len = rpcstr_push(temp, printer->info_2->comment, sizeof(temp)-2, STR_TERMINATE);
+		len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->comment);
 
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2911,21 +2899,17 @@ void spoolss_notify_location(int snum,
 				    NT_PRINTER_INFO_LEVEL *printer,
 				    TALLOC_CTX *mem_ctx)
 {
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
-	len = rpcstr_push(temp, printer->info_2->location,sizeof(temp)-2, STR_TERMINATE);
+	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->location);
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2957,21 +2941,17 @@ void spoolss_notify_sepfile(int snum,
 				   NT_PRINTER_INFO_LEVEL *printer,
 				   TALLOC_CTX *mem_ctx)
 {
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
-	len = rpcstr_push(temp, printer->info_2->sepfile, sizeof(temp)-2, STR_TERMINATE);
+	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->sepfile);
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -2988,21 +2968,17 @@ void spoolss_notify_print_processor(int snum,
 					   NT_PRINTER_INFO_LEVEL *printer,
 					   TALLOC_CTX *mem_ctx)
 {
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
-	len = rpcstr_push(temp,  printer->info_2->printprocessor, sizeof(temp)-2, STR_TERMINATE);
+	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->printprocessor);
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -3019,21 +2995,17 @@ void spoolss_notify_parameters(int snum,
 				      NT_PRINTER_INFO_LEVEL *printer,
 				      TALLOC_CTX *mem_ctx)
 {
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
-	len = rpcstr_push(temp,  printer->info_2->parameters, sizeof(temp)-2, STR_TERMINATE);
+	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->parameters);
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -3050,21 +3022,17 @@ void spoolss_notify_datatype(int snum,
 				    NT_PRINTER_INFO_LEVEL *printer,
 				    TALLOC_CTX *mem_ctx)
 {
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
-	len = rpcstr_push(temp, printer->info_2->datatype, sizeof(pstring)-2, STR_TERMINATE);
+	len = rpcstr_push_talloc(mem_ctx, &temp, printer->info_2->datatype);
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -3214,21 +3182,17 @@ static void spoolss_notify_username(int snum,
 				    NT_PRINTER_INFO_LEVEL *printer,
 				    TALLOC_CTX *mem_ctx)
 {
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
-	len = rpcstr_push(temp, queue->fs_user, sizeof(temp)-2, STR_TERMINATE);
+	len = rpcstr_push_talloc(mem_ctx, &temp, queue->fs_user);
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -3258,21 +3222,17 @@ static void spoolss_notify_job_name(int snum,
 				    NT_PRINTER_INFO_LEVEL *printer,
 				    TALLOC_CTX *mem_ctx)
 {
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
-	len = rpcstr_push(temp, queue->fs_file, sizeof(temp)-2, STR_TERMINATE);
+	len = rpcstr_push_talloc(mem_ctx, &temp, queue->fs_file);
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -3293,7 +3253,7 @@ static void spoolss_notify_job_status_string(int snum,
 	 */
 
 	const char *p = "";
-	pstring temp;
+	smb_ucs2_t *temp = NULL;
 	uint32 len;
 
 #if 0 /* NO LONGER NEEDED - JRA. 02/22/2001 */
@@ -3315,18 +3275,14 @@ static void spoolss_notify_job_status_string(int snum,
 	}
 #endif /* NO LONGER NEEDED. */
 
-	len = rpcstr_push(temp, p, sizeof(temp) - 2, STR_TERMINATE);
+	len = rpcstr_push_talloc(mem_ctx, &temp, p);
+	if (len == (uint32)-1) {
+		len = 0;
+	}
 
 	data->notify_data.data.length = len;
 	if (len) {
-		data->notify_data.data.string = (uint16 *)TALLOC(mem_ctx, len);
-
-		if (!data->notify_data.data.string) {
-			data->notify_data.data.length = 0;
-			return;
-		}
-
-		memcpy(data->notify_data.data.string, temp, len);
+		data->notify_data.data.string = (uint16 *)temp;
 	} else {
 		data->notify_data.data.string = NULL;
 	}
@@ -3954,7 +3910,7 @@ done:
 
 static bool construct_printer_info_0(Printer_entry *print_hnd, PRINTER_INFO_0 *printer, int snum)
 {
-	pstring chaine;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list