spoolss: cache_key handle allocation failures early
authorDavid Disseldorp <ddiss@samba.org>
Wed, 15 Apr 2015 13:48:06 +0000 (15:48 +0200)
committerGünther Deschner <gd@samba.org>
Wed, 15 Apr 2015 16:55:50 +0000 (18:55 +0200)
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

source3/rpc_server/spoolss/srv_spoolss_nt.c

index 65a805a9dff03945c14feaedc4e97264669edb66..482f711f757b7d78d955119698cf6478197fa5c2 100644 (file)
@@ -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));