[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Wed May 5 09:34:24 MDT 2010


The branch, master has been updated
       via  3f0562f... s3-spoolss: Fixed memory error in winreg_get_driver.
       via  c95a79a... s3-spoolss: Added a sharename arg to winreg_update_printer.
       via  053ed7d... s3-spoolss: Added missing servername option to winreg_{create,get}_printer.
       via  a5fb411... s3-spoolss: Added missing Printer Driver in winreg_{update,get}_printer.
      from  6659a0f... s3-net: fix crash in rap_share_add().

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 3f0562f4b4cfe770baf2e529a445404a7b8f1141
Author: Andreas Schneider <asn at samba.org>
Date:   Wed Apr 28 11:26:08 2010 +0200

    s3-spoolss: Fixed memory error in winreg_get_driver.
    
    The strings in the structure need to be initialized with an empty
    string.
    
    Signed-off-by: Günther Deschner <gd at samba.org>

commit c95a79aae9f67dd476b7f6d1d12ad574b54c15ba
Author: Andreas Schneider <asn at samba.org>
Date:   Tue May 4 11:37:42 2010 +0200

    s3-spoolss: Added a sharename arg to winreg_update_printer.
    
    Signed-off-by: Günther Deschner <gd at samba.org>

commit 053ed7d554fe8822ceabda48968da5a87030104a
Author: Andreas Schneider <asn at samba.org>
Date:   Mon Apr 26 13:36:19 2010 +0200

    s3-spoolss: Added missing servername option to winreg_{create,get}_printer.
    
    This is needed to be able to pass the correct servername from
    Printer_entry.
    
    Signed-off-by: Günther Deschner <gd at samba.org>

commit a5fb4117e18cfa334a455ff0ab37ab71ef23dfd2
Author: Andreas Schneider <asn at samba.org>
Date:   Fri Apr 23 21:37:13 2010 +0200

    s3-spoolss: Added missing Printer Driver in winreg_{update,get}_printer.
    
    Signed-off-by: Günther Deschner <gd at samba.org>

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

Summary of changes:
 source3/rpc_server/srv_spoolss_util.c |   82 +++++++++++++++++++++++++++++---
 source3/rpc_server/srv_spoolss_util.h |    7 +++
 2 files changed, 81 insertions(+), 8 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/rpc_server/srv_spoolss_util.c b/source3/rpc_server/srv_spoolss_util.c
index 0044279..995cb7b 100644
--- a/source3/rpc_server/srv_spoolss_util.c
+++ b/source3/rpc_server/srv_spoolss_util.c
@@ -30,6 +30,8 @@
 #define TOP_LEVEL_CONTROL_FORMS_KEY TOP_LEVEL_CONTROL_KEY "\\Forms"
 
 #define EMPTY_STRING ""
+static const char *empty_string_array[1] = { NULL };
+#define EMPTY_STRING_ARRAY empty_string_array
 
 #define CHECK_ERROR(result) \
 	if (W_ERROR_IS_OK(result)) continue; \
@@ -1362,6 +1364,7 @@ static WERROR winreg_printer_ver_to_dword(const char *str, uint64_t *data)
 
 WERROR winreg_create_printer(TALLOC_CTX *mem_ctx,
 			     struct auth_serversupplied_info *server_info,
+			     const char *servername,
 			     const char *sharename)
 {
 	uint32_t access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
@@ -1535,6 +1538,7 @@ WERROR winreg_create_printer(TALLOC_CTX *mem_ctx,
 
 	result = winreg_update_printer(tmp_ctx,
 				       server_info,
+				       sharename,
 				       info2_mask,
 				       info2,
 				       devmode,
@@ -1556,6 +1560,7 @@ done:
 
 WERROR winreg_update_printer(TALLOC_CTX *mem_ctx,
 			     struct auth_serversupplied_info *server_info,
+			     const char *sharename,
 			     uint32_t info2_mask,
 			     struct spoolss_SetPrinterInfo2 *info2,
 			     struct spoolss_DeviceMode *devmode,
@@ -1575,7 +1580,7 @@ WERROR winreg_update_printer(TALLOC_CTX *mem_ctx,
 		return WERR_NOMEM;
 	}
 
-	path = winreg_printer_data_keyname(tmp_ctx, info2->sharename);
+	path = winreg_printer_data_keyname(tmp_ctx, sharename);
 	if (path == NULL) {
 		TALLOC_FREE(tmp_ctx);
 		return WERR_NOMEM;
@@ -1675,6 +1680,17 @@ WERROR winreg_update_printer(TALLOC_CTX *mem_ctx,
 		}
 	}
 
+	if (info2_mask & SPOOLSS_PRINTER_INFO_DRIVERNAME) {
+		result = winreg_printer_write_sz(tmp_ctx,
+						 winreg_pipe,
+						 &key_hnd,
+						 "Printer Driver",
+						 info2->drivername);
+		if (!W_ERROR_IS_OK(result)) {
+			goto done;
+		}
+	}
+
 	if (info2_mask & SPOOLSS_PRINTER_INFO_LOCATION) {
 		result = winreg_printer_write_sz(tmp_ctx,
 						 winreg_pipe,
@@ -1865,6 +1881,7 @@ done:
 
 WERROR winreg_get_printer(TALLOC_CTX *mem_ctx,
 			  struct auth_serversupplied_info *server_info,
+			  const char *servername,
 			  const char *printer,
 			  struct spoolss_PrinterInfo2 **pinfo2)
 {
@@ -1925,12 +1942,7 @@ WERROR winreg_get_printer(TALLOC_CTX *mem_ctx,
 		goto done;
 	}
 
-	info2->servername = talloc_asprintf(info2, "\\\\%s", global_myname());
-	if (info2->servername == NULL) {
-		result = WERR_NOMEM;
-		goto done;
-	}
-
+	info2->servername     = EMPTY_STRING;
 	info2->printername    = EMPTY_STRING;
 	info2->sharename      = EMPTY_STRING;
 	info2->portname       = EMPTY_STRING;
@@ -1942,6 +1954,14 @@ WERROR winreg_get_printer(TALLOC_CTX *mem_ctx,
 	info2->datatype       = EMPTY_STRING;
 	info2->parameters     = EMPTY_STRING;
 
+	if (servername != NULL && servername[0] != '\0') {
+		info2->servername = talloc_asprintf(info2, "\\\\%s", servername);
+		if (info2->servername == NULL) {
+			result = WERR_NOMEM;
+			goto done;
+		}
+	}
+
 	for (i = 0; i < num_values; i++) {
 		v = &enum_values[i];
 
@@ -1949,6 +1969,15 @@ WERROR winreg_get_printer(TALLOC_CTX *mem_ctx,
 					      v,
 					      "Name",
 					      &info2->printername);
+		if (W_ERROR_IS_OK(result) && info2->servername[0] != '\0') {
+			char *p = talloc_asprintf(info2, "%s\\%s",
+						  info2->servername,
+						  info2->printername);
+			if (p == NULL) {
+				result = WERR_NOMEM;
+			}
+			info2->printername = p;
+		}
 		CHECK_ERROR(result);
 
 		result = winreg_enumval_to_sz(info2,
@@ -1999,6 +2028,12 @@ WERROR winreg_get_printer(TALLOC_CTX *mem_ctx,
 					      &info2->parameters);
 		CHECK_ERROR(result);
 
+		result = winreg_enumval_to_sz(info2,
+					      v,
+					      "Printer Driver",
+					      &info2->drivername);
+		CHECK_ERROR(result);
+
 		result = winreg_enumval_to_dword(info2,
 						 v,
 						 "Attributes",
@@ -3621,11 +3656,42 @@ WERROR winreg_get_driver(TALLOC_CTX *mem_ctx,
 	}
 
 	info8 = talloc_zero(tmp_ctx, struct spoolss_DriverInfo8);
-	if (!info8) {
+	if (info8 == NULL) {
 		result = WERR_NOMEM;
 		goto done;
 	}
 
+	info8->driver_name = talloc_strdup(info8, driver_name);
+	if (info8->driver_name == NULL) {
+		result = WERR_NOMEM;
+		goto done;
+	}
+
+	info8->architecture = talloc_strdup(info8, architecture);
+	if (info8->architecture == NULL) {
+		result = WERR_NOMEM;
+		goto done;
+	}
+
+	info8->config_file = EMPTY_STRING;
+	info8->data_file = EMPTY_STRING;
+	info8->default_datatype = EMPTY_STRING;
+	info8->driver_path = EMPTY_STRING;
+	info8->hardware_id = EMPTY_STRING;
+	info8->help_file = EMPTY_STRING;
+	info8->inf_path = EMPTY_STRING;
+	info8->manufacturer_name = EMPTY_STRING;
+	info8->manufacturer_url = EMPTY_STRING;
+	info8->monitor_name = EMPTY_STRING;
+	info8->print_processor = EMPTY_STRING;
+	info8->provider = EMPTY_STRING;
+	info8->vendor_setup = EMPTY_STRING;
+
+	info8->color_profiles = empty_string_array;
+	info8->core_driver_dependencies = EMPTY_STRING_ARRAY;
+	info8->dependent_files = EMPTY_STRING_ARRAY;
+	info8->previous_names = EMPTY_STRING_ARRAY;
+
 	result = WERR_OK;
 
 	for (i = 0; i < num_values; i++) {
diff --git a/source3/rpc_server/srv_spoolss_util.h b/source3/rpc_server/srv_spoolss_util.h
index 4b5117e..fbb34bb 100644
--- a/source3/rpc_server/srv_spoolss_util.h
+++ b/source3/rpc_server/srv_spoolss_util.h
@@ -73,6 +73,7 @@ enum spoolss_PrinterInfo2Mask {
 
 WERROR winreg_create_printer(TALLOC_CTX *mem_ctx,
 			     struct auth_serversupplied_info *server_info,
+			     const char *servername,
 			     const char *sharename);
 
 /**
@@ -84,6 +85,8 @@ WERROR winreg_create_printer(TALLOC_CTX *mem_ctx,
  *
  * @param[in]  server_info The server supplied session info.
  *
+ * @param[in]  sharename  The share name.
+ *
  * @param[in]  info2_mask A bitmask which defines which values should be set.
  *
  * @param[in]  info2    A SetPrinterInfo2 structure with the data to set.
@@ -97,6 +100,7 @@ WERROR winreg_create_printer(TALLOC_CTX *mem_ctx,
  */
 WERROR winreg_update_printer(TALLOC_CTX *mem_ctx,
 			     struct auth_serversupplied_info *server_info,
+			     const char *sharename,
 			     uint32_t info2_mask,
 			     struct spoolss_SetPrinterInfo2 *info2,
 			     struct spoolss_DeviceMode *devmode,
@@ -110,6 +114,8 @@ WERROR winreg_update_printer(TALLOC_CTX *mem_ctx,
  *
  * @param[in]  server_info The server supplied session info.
  *
+ * @param[in]  printer  The servername to use.
+ *
  * @param[in]  printer  The name of the printer to get.
  *
  * @param[out] pinfo2   A pointer to store a PRINTER_INFO_2 structure.
@@ -119,6 +125,7 @@ WERROR winreg_update_printer(TALLOC_CTX *mem_ctx,
  */
 WERROR winreg_get_printer(TALLOC_CTX *mem_ctx,
 			  struct auth_serversupplied_info *server_info,
+			  const char *servername,
 			  const char *printer,
 			  struct spoolss_PrinterInfo2 **pinfo2);
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list