s3-privs Convert from user_has_privileges() -> security_token_has_privilege()
[abartlet/samba.git/.git] / source3 / printing / nt_printing.c
index ae44d5760fa4ad7b641f37d61bc8609447f050d1..52b663c2024b17d301aac8efc460a641112d16cc 100644 (file)
@@ -96,7 +96,7 @@ bool nt_printing_init(struct messaging_context *msg_ctx)
           msgs.  This is done in serverid_register() */
 
        if ( lp_security() == SEC_ADS ) {
-               win_rc = check_published_printers();
+               win_rc = check_published_printers(msg_ctx);
                if (!W_ERROR_IS_OK(win_rc))
                        DEBUG(0, ("nt_printing_init: error checking published printers: %s\n", win_errstr(win_rc)));
        }
@@ -642,6 +642,7 @@ static uint32 get_correct_cversion(struct pipes_struct *p,
 
        nt_status = vfs_file_exist(conn, smb_fname);
        if (!NT_STATUS_IS_OK(nt_status)) {
+               DEBUG(3,("get_correct_cversion: vfs_file_exist failed\n"));
                *perr = WERR_BADFILE;
                goto error_exit;
        }
@@ -1553,6 +1554,7 @@ bool driver_info_ctr_to_info8(struct spoolss_AddDriverInfoCtr *r,
 
 bool printer_driver_in_use(TALLOC_CTX *mem_ctx,
                           struct auth_serversupplied_info *server_info,
+                          struct messaging_context *msg_ctx,
                            const struct spoolss_DriverInfo8 *r)
 {
        int snum;
@@ -1574,8 +1576,9 @@ bool printer_driver_in_use(TALLOC_CTX *mem_ctx,
                        continue;
                }
 
-               result = winreg_get_printer(mem_ctx, server_info, NULL,
-                                           lp_servicename(snum), &pinfo2);
+               result = winreg_get_printer(mem_ctx, server_info, msg_ctx,
+                                           NULL, lp_servicename(snum),
+                                           &pinfo2);
                if (!W_ERROR_IS_OK(result)) {
                        continue; /* skip */
                }
@@ -1599,18 +1602,18 @@ bool printer_driver_in_use(TALLOC_CTX *mem_ctx,
                   "Windows NT x86" version 2 or 3 left */
 
                if (!strequal("Windows NT x86", r->architecture)) {
-                       werr = winreg_get_driver(mem_ctx, server_info,
+                       werr = winreg_get_driver(mem_ctx, server_info, msg_ctx,
                                                 "Windows NT x86",
                                                 r->driver_name,
                                                 DRIVER_ANY_VERSION,
                                                 &driver);
                } else if (r->version == 2) {
-                       werr = winreg_get_driver(mem_ctx, server_info,
+                       werr = winreg_get_driver(mem_ctx, server_info, msg_ctx,
                                                 "Windows NT x86",
                                                 r->driver_name,
                                                 3, &driver);
                } else if (r->version == 3) {
-                       werr = winreg_get_driver(mem_ctx, server_info,
+                       werr = winreg_get_driver(mem_ctx, server_info, msg_ctx,
                                                 "Windows NT x86",
                                                 r->driver_name,
                                                 2, &driver);
@@ -1779,6 +1782,7 @@ static bool trim_overlap_drv_files(TALLOC_CTX *mem_ctx,
 
 bool printer_driver_files_in_use(TALLOC_CTX *mem_ctx,
                                 struct auth_serversupplied_info *server_info,
+                                struct messaging_context *msg_ctx,
                                 struct spoolss_DriverInfo8 *info)
 {
        int                             i;
@@ -1800,7 +1804,7 @@ bool printer_driver_files_in_use(TALLOC_CTX *mem_ctx,
 
        /* get the list of drivers */
 
-       result = winreg_get_driver_list(mem_ctx, server_info,
+       result = winreg_get_driver_list(mem_ctx, server_info, msg_ctx,
                                        info->architecture, version,
                                        &num_drivers, &drivers);
        if (!W_ERROR_IS_OK(result)) {
@@ -1817,7 +1821,7 @@ bool printer_driver_files_in_use(TALLOC_CTX *mem_ctx,
 
                driver = NULL;
 
-               result = winreg_get_driver(mem_ctx, server_info,
+               result = winreg_get_driver(mem_ctx, server_info, msg_ctx,
                                           info->architecture, drivers[i],
                                           version, &driver);
                if (!W_ERROR_IS_OK(result)) {
@@ -2060,7 +2064,8 @@ void map_job_permissions(struct security_descriptor *sd)
     3)  "printer admins" (may result in numerous calls to winbind)
 
  ****************************************************************************/
-bool print_access_check(struct auth_serversupplied_info *server_info, int snum,
+bool print_access_check(struct auth_serversupplied_info *server_info,
+                       struct messaging_context *msg_ctx, int snum,
                        int access_type)
 {
        struct spoolss_security_descriptor *secdesc = NULL;
@@ -2070,14 +2075,13 @@ bool print_access_check(struct auth_serversupplied_info *server_info, int snum,
        WERROR result;
        const char *pname;
        TALLOC_CTX *mem_ctx = NULL;
-       SE_PRIV se_printop = SE_PRINT_OPERATOR;
 
        /* If user is NULL then use the current_user structure */
 
        /* Always allow root or SE_PRINT_OPERATROR to do anything */
 
        if (server_info->utok.uid == sec_initial_uid()
-           || user_has_privileges(server_info->ptok, &se_printop ) ) {
+           || security_token_has_privilege(server_info->ptok, SEC_PRIV_PRINT_OPERATOR)) {
                return True;
        }
 
@@ -2099,6 +2103,7 @@ bool print_access_check(struct auth_serversupplied_info *server_info, int snum,
 
        result = winreg_get_printer_secdesc(mem_ctx,
                                            server_info,
+                                           msg_ctx,
                                            pname,
                                            &secdesc);
        if (!W_ERROR_IS_OK(result)) {
@@ -2162,6 +2167,7 @@ bool print_access_check(struct auth_serversupplied_info *server_info, int snum,
 *****************************************************************************/
 
 bool print_time_access_check(struct auth_serversupplied_info *server_info,
+                            struct messaging_context *msg_ctx,
                             const char *servicename)
 {
        struct spoolss_PrinterInfo2 *pinfo2 = NULL;
@@ -2171,7 +2177,7 @@ bool print_time_access_check(struct auth_serversupplied_info *server_info,
        struct tm *t;
        uint32 mins;
 
-       result = winreg_get_printer(NULL, server_info,
+       result = winreg_get_printer(NULL, server_info, msg_ctx,
                                    NULL, servicename, &pinfo2);
        if (!W_ERROR_IS_OK(result)) {
                return False;
@@ -2199,11 +2205,13 @@ bool print_time_access_check(struct auth_serversupplied_info *server_info,
 
 void nt_printer_remove(TALLOC_CTX *mem_ctx,
                        struct auth_serversupplied_info *server_info,
+                       struct messaging_context *msg_ctx,
                        const char *printer)
 {
        WERROR result;
 
-       result = winreg_delete_printer_key(mem_ctx, server_info, printer, "");
+       result = winreg_delete_printer_key(mem_ctx, server_info, msg_ctx,
+                                          printer, "");
        if (!W_ERROR_IS_OK(result)) {
                DEBUG(0, ("nt_printer_remove: failed to remove rpinter %s",
                          printer));