summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2009-04-13 15:42:32 +0200
committerGünther Deschner <gd@samba.org>2009-04-13 16:12:56 +0200
commit97ffd709f85ca0ecd101aac614fea19151394677 (patch)
tree0a351b9749d7668f849f252cf6214414fd7bb184
parent9b3d3e8aebac25c55b2bcfb3daf3ba3d7df9d280 (diff)
downloadsamba-97ffd709f85ca0ecd101aac614fea19151394677.tar.gz
samba-97ffd709f85ca0ecd101aac614fea19151394677.tar.bz2
samba-97ffd709f85ca0ecd101aac614fea19151394677.zip
s3-spoolss: use enumprinterdrivers_level() for level 3 enum.
Guenther
-rw-r--r--source3/rpc_server/srv_spoolss_nt.c73
1 files changed, 6 insertions, 67 deletions
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index 6457cc0c18..faa155dc0f 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -6673,6 +6673,10 @@ static WERROR enumprinterdrivers_level(TALLOC_CTX *mem_ctx,
result = fill_printer_driver_info2(info, &info[count+i].info2,
&driver, servername);
break;
+ case 3:
+ result = fill_printer_driver_info3(info, &info[count+i].info3,
+ &driver, servername);
+ break;
default:
result = WERR_UNKNOWN_LEVEL;
break;
@@ -6741,73 +6745,8 @@ static WERROR enumprinterdrivers_level3(TALLOC_CTX *mem_ctx,
union spoolss_DriverInfo **info_p,
uint32_t *count)
{
- int i;
- int ndrivers;
- uint32_t version;
- fstring *list = NULL;
- union spoolss_DriverInfo *info = NULL;
- NT_PRINTER_DRIVER_INFO_LEVEL driver;
- WERROR result = WERR_OK;
-
- *count = 0;
-
- for (version=0; version<DRIVER_MAX_VERSION; version++) {
- list = NULL;
- ndrivers = get_ntdrivers(&list, architecture, version);
- DEBUGADD(4,("we have:[%d] drivers in environment [%s] and version [%d]\n",
- ndrivers, architecture, version));
-
- if (ndrivers == -1) {
- result = WERR_NOMEM;
- goto out;
- }
-
- if (ndrivers != 0) {
- info = TALLOC_REALLOC_ARRAY(mem_ctx, info,
- union spoolss_DriverInfo,
- *count + ndrivers);
- if (!info) {
- DEBUG(0,("enumprinterdrivers_level3: "
- "failed to enlarge driver info buffer!\n"));
- result = WERR_NOMEM;
- goto out;
- }
- }
-
- for (i=0; i<ndrivers; i++) {
- DEBUGADD(5,("\tdriver: [%s]\n", list[i]));
- ZERO_STRUCT(driver);
- result = get_a_printer_driver(&driver, 3, list[i],
- architecture, version);
- if (!W_ERROR_IS_OK(result)) {
- goto out;
- }
- result = fill_printer_driver_info3(info, &info[*count+i].info3,
- &driver, servername);
- if (!W_ERROR_IS_OK(result)) {
- free_a_printer_driver(driver, 3);
- goto out;
- }
-
- free_a_printer_driver(driver, 3);
- }
-
- *count += ndrivers;
- SAFE_FREE(list);
- }
-
- out:
- SAFE_FREE(list);
-
- if (!W_ERROR_IS_OK(result)) {
- TALLOC_FREE(info);
- *count = 0;
- return result;
- }
-
- *info_p = info;
-
- return WERR_OK;
+ return enumprinterdrivers_level(mem_ctx, servername, architecture, 3,
+ info_p, count);
}
/****************************************************************