s3-printing: Convert print_time_access_check.
authorSimo Sorce <idra@samba.org>
Mon, 26 Apr 2010 17:51:33 +0000 (13:51 -0400)
committerSimo Sorce <idra@samba.org>
Tue, 27 Jul 2010 14:27:10 +0000 (10:27 -0400)
use spoolss_PrintInfo2 and winreg calls

Signed-off-by: Jim McDonough <jmcd@samba.org>
source3/include/proto.h
source3/printing/nt_printing.c
source3/printing/printing.c

index 02bc54c5b0057b4b0efb32f2478b8fcc87653cdf..4d0536832c59ba74b99521a617ac27b1cde48308 100644 (file)
@@ -4792,7 +4792,8 @@ void map_printer_permissions(struct security_descriptor *sd);
 void map_job_permissions(struct security_descriptor *sd);
 bool print_access_check(struct auth_serversupplied_info *server_info, int snum,
                        int access_type);
-bool print_time_access_check(const char *servicename);
+bool print_time_access_check(struct auth_serversupplied_info *server_info,
+                            const char *servicename);
 char* get_server_name( Printer_entry *printer );
 
 /* The following definitions come from printing/pcap.c  */
index 52ced155f497157fbb0602bbde6fdad09d480e85..a36e40be7754fc47c2c8ac2826afe84e81edc7bc 100644 (file)
@@ -5101,30 +5101,38 @@ bool print_access_check(struct auth_serversupplied_info *server_info, int snum,
  Check the time parameters allow a print operation.
 *****************************************************************************/
 
-bool print_time_access_check(const char *servicename)
+bool print_time_access_check(struct auth_serversupplied_info *server_info,
+                            const char *servicename)
 {
-       NT_PRINTER_INFO_LEVEL *printer = NULL;
+       struct spoolss_PrinterInfo2 *pinfo2 = NULL;
+       WERROR result;
        bool ok = False;
        time_t now = time(NULL);
        struct tm *t;
        uint32 mins;
 
-       if (!W_ERROR_IS_OK(get_a_printer(NULL, &printer, 2, servicename)))
+       result = winreg_get_printer(NULL, server_info,
+                                   NULL, servicename, &pinfo2);
+       if (!W_ERROR_IS_OK(result)) {
                return False;
+       }
 
-       if (printer->info_2->starttime == 0 && printer->info_2->untiltime == 0)
+       if (pinfo2->starttime == 0 && pinfo2->untiltime == 0) {
                ok = True;
+       }
 
        t = gmtime(&now);
        mins = (uint32)t->tm_hour*60 + (uint32)t->tm_min;
 
-       if (mins >= printer->info_2->starttime && mins <= printer->info_2->untiltime)
+       if (mins >= pinfo2->starttime && mins <= pinfo2->untiltime) {
                ok = True;
+       }
 
-       free_a_printer(&printer, 2);
+       TALLOC_FREE(pinfo2);
 
-       if (!ok)
+       if (!ok) {
                errno = EACCES;
+       }
 
        return ok;
 }
index e0cca8854e486259f9b44fe0a7c56f9857fcf1c3..5def9cd0d1402d627fb45dc0b90d5a6b83c49e67 100644 (file)
@@ -2430,7 +2430,7 @@ uint32 print_job_start(struct auth_serversupplied_info *server_info, int snum,
                return (uint32)-1;
        }
 
-       if (!print_time_access_check(lp_servicename(snum))) {
+       if (!print_time_access_check(server_info, lp_servicename(snum))) {
                DEBUG(3, ("print_job_start: job start denied by time check\n"));
                release_print_db(pdb);
                return (uint32)-1;