1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

Stop using hardcoded key/value strings, be more forgiving of dsspooler/dsdriver info existence.

(This used to be commit ca8735532c)
This commit is contained in:
Jim McDonough 2002-12-03 19:41:43 +00:00
parent fc67cd8bf3
commit 2e6c2a1456

View File

@ -178,57 +178,57 @@ static void map_regval_to_ads(TALLOC_CTX *ctx, ADS_MODLIST *mods,
REGISTRY_VALUE *value)
{
struct valmap_to_ads map[] = {
{"assetNumber", map_sz},
{"bytesPerMinute", map_dword},
{"defaultPriority", map_dword},
{"driverName", map_sz},
{"driverVersion", map_dword},
{"flags", map_dword},
{"location", map_sz},
{"operatingSystem", map_sz},
{"operatingSystemHotfix", map_sz},
{"operatingSystemServicePack", map_sz},
{"operatingSystemVersion", map_sz},
{"portName", map_multi_sz},
{"printAttributes", map_dword},
{"printBinNames", map_multi_sz},
{"printCollate", map_bool},
{"printColor", map_bool},
{"printDuplexSupported", map_bool},
{"printEndTime", map_dword},
{"printFormName", map_sz},
{"printKeepPrintedJobs", map_bool},
{"printLanguage", map_multi_sz},
{"printMACAddress", map_sz},
{"printMaxCopies", map_sz},
{"printMaxResolutionSupported", map_dword},
{"printMaxXExtent", map_dword},
{"printMaxYExtent", map_dword},
{"printMediaReady", map_multi_sz},
{"printMediaSupported", map_multi_sz},
{"printMemory", map_dword},
{"printMinXExtent", map_dword},
{"printMinYExtent", map_dword},
{"printNetworkAddress", map_sz},
{"printNotify", map_sz},
{"printNumberUp", map_dword},
{"printOrientationsSupported", map_multi_sz},
{"printOwner", map_sz},
{"printPagesPerMinute", map_dword},
{"printRate", map_dword},
{"printRateUnit", map_sz},
{"printSeparatorFile", map_sz},
{"printShareName", map_sz},
{"printSpooling", map_sz},
{"printStaplingSupported", map_bool},
{"printStartTime", map_dword},
{"printStatus", map_sz},
{"priority", map_dword},
{"serverName", map_sz},
{"shortServerName", map_sz},
{"uNCName", map_sz},
{"url", map_sz},
{"versionNumber", map_dword},
{SPOOL_REG_ASSETNUMBER, map_sz},
{SPOOL_REG_BYTESPERMINUTE, map_dword},
{SPOOL_REG_DEFAULTPRIORITY, map_dword},
{SPOOL_REG_DRIVERNAME, map_sz},
{SPOOL_REG_DRIVERVERSION, map_dword},
{SPOOL_REG_FLAGS, map_dword},
{SPOOL_REG_LOCATION, map_sz},
{SPOOL_REG_OPERATINGSYSTEM, map_sz},
{SPOOL_REG_OPERATINGSYSTEMHOTFIX, map_sz},
{SPOOL_REG_OPERATINGSYSTEMSERVICEPACK, map_sz},
{SPOOL_REG_OPERATINGSYSTEMVERSION, map_sz},
{SPOOL_REG_PORTNAME, map_multi_sz},
{SPOOL_REG_PRINTATTRIBUTES, map_dword},
{SPOOL_REG_PRINTBINNAMES, map_multi_sz},
{SPOOL_REG_PRINTCOLLATE, map_bool},
{SPOOL_REG_PRINTCOLOR, map_bool},
{SPOOL_REG_PRINTDUPLEXSUPPORTED, map_bool},
{SPOOL_REG_PRINTENDTIME, map_dword},
{SPOOL_REG_PRINTFORMNAME, map_sz},
{SPOOL_REG_PRINTKEEPPRINTEDJOBS, map_bool},
{SPOOL_REG_PRINTLANGUAGE, map_multi_sz},
{SPOOL_REG_PRINTMACADDRESS, map_sz},
{SPOOL_REG_PRINTMAXCOPIES, map_sz},
{SPOOL_REG_PRINTMAXRESOLUTIONSUPPORTED, map_dword},
{SPOOL_REG_PRINTMAXXEXTENT, map_dword},
{SPOOL_REG_PRINTMAXYEXTENT, map_dword},
{SPOOL_REG_PRINTMEDIAREADY, map_multi_sz},
{SPOOL_REG_PRINTMEDIASUPPORTED, map_multi_sz},
{SPOOL_REG_PRINTMEMORY, map_dword},
{SPOOL_REG_PRINTMINXEXTENT, map_dword},
{SPOOL_REG_PRINTMINYEXTENT, map_dword},
{SPOOL_REG_PRINTNETWORKADDRESS, map_sz},
{SPOOL_REG_PRINTNOTIFY, map_sz},
{SPOOL_REG_PRINTNUMBERUP, map_dword},
{SPOOL_REG_PRINTORIENTATIONSSUPPORTED, map_multi_sz},
{SPOOL_REG_PRINTOWNER, map_sz},
{SPOOL_REG_PRINTPAGESPERMINUTE, map_dword},
{SPOOL_REG_PRINTRATE, map_dword},
{SPOOL_REG_PRINTRATEUNIT, map_sz},
{SPOOL_REG_PRINTSEPARATORFILE, map_sz},
{SPOOL_REG_PRINTSHARENAME, map_sz},
{SPOOL_REG_PRINTSPOOLING, map_sz},
{SPOOL_REG_PRINTSTAPLINGSUPPORTED, map_bool},
{SPOOL_REG_PRINTSTARTTIME, map_dword},
{SPOOL_REG_PRINTSTATUS, map_sz},
{SPOOL_REG_PRIORITY, map_dword},
{SPOOL_REG_SERVERNAME, map_sz},
{SPOOL_REG_SHORTSERVERNAME, map_sz},
{SPOOL_REG_UNCNAME, map_sz},
{SPOOL_REG_URL, map_sz},
{SPOOL_REG_VERSIONNUMBER, map_dword},
{NULL, NULL}
};
int i;
@ -254,6 +254,7 @@ WERROR get_remote_printer_publishing_data(struct cli_state *cli,
WERROR result;
char *printername, *servername;
REGVAL_CTR dsdriver_ctr, dsspooler_ctr;
BOOL got_dsdriver = False, got_dsspooler = False;
uint32 needed, i;
POLICY_HND pol;
@ -274,47 +275,50 @@ WERROR get_remote_printer_publishing_data(struct cli_state *cli,
}
result = cli_spoolss_enumprinterdataex(cli, mem_ctx, 0, &needed,
&pol, "DsDriver", NULL);
&pol, SPOOL_DSDRIVER_KEY, NULL);
if (W_ERROR_V(result) == ERRmoredata)
result = cli_spoolss_enumprinterdataex(cli, mem_ctx, needed,
NULL, &pol, "DsDriver",
NULL, &pol,
SPOOL_DSDRIVER_KEY,
&dsdriver_ctr);
if (!W_ERROR_IS_OK(result)) {
DEBUG(3, ("Unable to do enumdataex on %s, error is %s.\n",
printername, dos_errstr(result)));
cli_spoolss_close_printer(cli, mem_ctx, &pol);
return result;
} else {
/* Have the data we need now, so start building */
got_dsdriver = True;
for (i=0; i < dsdriver_ctr.num_values; i++)
map_regval_to_ads(mem_ctx, mods,
dsdriver_ctr.values[i]);
}
/* Have the data we need now, so start building */
for (i=0; i < dsdriver_ctr.num_values; i++)
map_regval_to_ads(mem_ctx, mods, dsdriver_ctr.values[i]);
result = cli_spoolss_enumprinterdataex(cli, mem_ctx, 0, &needed,
&pol, "DsSpooler", NULL);
&pol, SPOOL_DSSPOOLER_KEY,
NULL);
if (W_ERROR_V(result) == ERRmoredata)
result = cli_spoolss_enumprinterdataex(cli, mem_ctx, needed,
NULL, &pol, "DsSpooler",
NULL, &pol,
SPOOL_DSSPOOLER_KEY,
&dsspooler_ctr);
if (!W_ERROR_IS_OK(result)) {
DEBUG(3, ("Unable to do enumdataex on %s, error is %s.\n",
printername, dos_errstr(result)));
regval_ctr_destroy(&dsdriver_ctr);
cli_spoolss_close_printer(cli, mem_ctx, &pol);
return result;
} else {
got_dsspooler = True;
for (i=0; i < dsspooler_ctr.num_values; i++)
map_regval_to_ads(mem_ctx, mods,
dsspooler_ctr.values[i]);
}
for (i=0; i < dsspooler_ctr.num_values; i++)
map_regval_to_ads(mem_ctx, mods, dsspooler_ctr.values[i]);
ads_mod_str(mem_ctx, mods, "printerName", printername);
ads_mod_str(mem_ctx, mods, SPOOL_REG_PRINTERNAME, printer);
regval_ctr_destroy(&dsdriver_ctr);
regval_ctr_destroy(&dsspooler_ctr);
if (got_dsdriver) regval_ctr_destroy(&dsdriver_ctr);
if (got_dsspooler) regval_ctr_destroy(&dsspooler_ctr);
cli_spoolss_close_printer(cli, mem_ctx, &pol);
return result;