mirror of
https://github.com/samba-team/samba.git
synced 2025-01-26 10:04:02 +03:00
spoolss: cache_key handle allocation failures early
On cache_key allocation failure, set_printer_hnd_name() currently stumbles through the rest of the function, and includes extra logic to handle a NULL key later on. Handling the allocation failure early makes sense, and also allows for the NULL key checks to be removed. Signed-off-by: David Disseldorp <ddiss@samba.org> Reviewed-by: Guenther Deschner <gd@samba.org> Autobuild-User(master): Günther Deschner <gd@samba.org> Autobuild-Date(master): Wed Apr 15 18:55:50 CEST 2015 on sn-devel-104
This commit is contained in:
parent
e8951eb9b8
commit
a65e22c6bd
@ -622,18 +622,18 @@ static WERROR set_printer_hnd_name(TALLOC_CTX *mem_ctx,
|
||||
found = true;
|
||||
}
|
||||
|
||||
cache_key = talloc_asprintf(talloc_tos(), "PRINTERNAME/%s", aprinter);
|
||||
if (cache_key == NULL) {
|
||||
return WERR_NOMEM;
|
||||
}
|
||||
|
||||
/*
|
||||
* With hundreds of printers, the "for" loop iterating all
|
||||
* shares can be quite expensive, as it is done on every
|
||||
* OpenPrinter. The loop maps "aprinter" to "sname", the
|
||||
* result of which we cache in gencache.
|
||||
*/
|
||||
|
||||
cache_key = talloc_asprintf(talloc_tos(), "PRINTERNAME/%s",
|
||||
aprinter);
|
||||
if ((cache_key != NULL) &&
|
||||
gencache_get(cache_key, talloc_tos(), &tmp, NULL)) {
|
||||
|
||||
if (gencache_get(cache_key, talloc_tos(), &tmp, NULL)) {
|
||||
found = (strcmp(tmp, printer_not_found) != 0);
|
||||
if (!found) {
|
||||
DEBUG(4, ("Printer %s not found\n", aprinter));
|
||||
@ -702,20 +702,16 @@ static WERROR set_printer_hnd_name(TALLOC_CTX *mem_ctx,
|
||||
TALLOC_FREE(info2);
|
||||
}
|
||||
|
||||
if ( !found ) {
|
||||
if (cache_key != NULL) {
|
||||
gencache_set(cache_key, printer_not_found,
|
||||
time(NULL)+300);
|
||||
TALLOC_FREE(cache_key);
|
||||
}
|
||||
if (!found) {
|
||||
gencache_set(cache_key, printer_not_found,
|
||||
time_mono(NULL) + 300);
|
||||
TALLOC_FREE(cache_key);
|
||||
DEBUGADD(4,("Printer not found\n"));
|
||||
return WERR_INVALID_PRINTER_NAME;
|
||||
}
|
||||
|
||||
if (cache_key != NULL) {
|
||||
gencache_set(cache_key, sname, time(NULL)+300);
|
||||
TALLOC_FREE(cache_key);
|
||||
}
|
||||
gencache_set(cache_key, sname, time_mono(NULL) + 300);
|
||||
TALLOC_FREE(cache_key);
|
||||
|
||||
DEBUGADD(4,("set_printer_hnd_name: Printer found: %s -> %s\n", aprinter, sname));
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user