s3: Lift the server_messaging_context from print_job_set_name
[abartlet/samba.git/.git] / source3 / rpc_server / srv_spoolss_nt.c
index 06c1e55f0d2cd844dfcbef76ecfd3b2dc8ced523..dd283caf46e6346f637896b97a0bf75e69fd673c 100644 (file)
@@ -341,7 +341,7 @@ static WERROR delete_printer_hook(TALLOC_CTX *ctx, NT_USER_TOKEN *token,
 
        /* go ahead and re-read the services immediately */
        become_root();
-       reload_services(false);
+       reload_services(msg_ctx, false);
        unbecome_root();
 
        if ( lp_servicenumber( sharename )  > 0 )
@@ -455,6 +455,7 @@ static bool set_printer_hnd_printertype(Printer_entry *Printer, const char *hand
 
 static bool set_printer_hnd_name(TALLOC_CTX *mem_ctx,
                                 struct auth_serversupplied_info *server_info,
+                                struct messaging_context *msg_ctx,
                                 Printer_entry *Printer,
                                 const char *handlename)
 {
@@ -539,7 +540,7 @@ static bool set_printer_hnd_name(TALLOC_CTX *mem_ctx,
 
                result = winreg_get_printer(mem_ctx,
                                            server_info,
-                                           smbd_messaging_context(),
+                                           msg_ctx,
                                            servername,
                                            sname,
                                            &info2);
@@ -610,7 +611,8 @@ static bool open_printer_hnd(struct pipes_struct *p, struct policy_handle *hnd,
                return false;
        }
 
-       if (!set_printer_hnd_name(p->mem_ctx, p->server_info, new_printer, name)) {
+       if (!set_printer_hnd_name(p->mem_ctx, p->server_info, p->msg_ctx,
+                                 new_printer, name)) {
                close_printer_handle(p, hnd);
                return false;
        }
@@ -1368,6 +1370,7 @@ void do_drv_upgrade_printer(struct messaging_context *msg,
                /* all we care about currently is the change_id */
                result = winreg_printer_update_changeid(tmp_ctx,
                                                        server_info,
+                                                       msg,
                                                        pinfo2->printername);
 
                if (!W_ERROR_IS_OK(result)) {
@@ -1400,7 +1403,8 @@ void update_monitored_printq_cache( void )
                        && printer->notify.client_connected )
                {
                        snum = print_queue_snum(printer->sharename);
-                       print_queue_status( snum, NULL, NULL );
+                       print_queue_status(server_messaging_context(),  snum,
+                                          NULL, NULL );
                }
 
                printer = printer->next;
@@ -1647,7 +1651,7 @@ WERROR _spoolss_OpenPrinterEx(struct pipes_struct *p,
 
                if (!user_ok_token(uidtoname(p->server_info->utok.uid), NULL,
                                   p->server_info->ptok, snum) ||
-                   !print_access_check(p->server_info, snum,
+                   !print_access_check(p->server_info, p->msg_ctx, snum,
                                        r->in.access_mask)) {
                        DEBUG(3, ("access DENIED for printer open\n"));
                        close_printer_handle(p, r->out.handle);
@@ -1838,7 +1842,7 @@ WERROR _spoolss_DeletePrinterDriver(struct pipes_struct *p,
        if ((version = get_version_id(r->in.architecture)) == -1)
                return WERR_INVALID_ENVIRONMENT;
 
-       status = winreg_get_driver(p->mem_ctx, p->server_info,
+       status = winreg_get_driver(p->mem_ctx, p->server_info, p->msg_ctx,
                                   r->in.architecture, r->in.driver,
                                   version, &info);
        if (!W_ERROR_IS_OK(status)) {
@@ -1848,6 +1852,7 @@ WERROR _spoolss_DeletePrinterDriver(struct pipes_struct *p,
                        version = 3;
 
                        status = winreg_get_driver(p->mem_ctx, p->server_info,
+                                                  p->msg_ctx,
                                                   r->in.architecture,
                                                   r->in.driver,
                                                   version, &info);
@@ -1864,13 +1869,15 @@ WERROR _spoolss_DeletePrinterDriver(struct pipes_struct *p,
 
        }
 
-       if (printer_driver_in_use(p->mem_ctx, p->server_info, info)) {
+       if (printer_driver_in_use(p->mem_ctx, p->server_info, p->msg_ctx,
+                                 info)) {
                status = WERR_PRINTER_DRIVER_IN_USE;
                goto done;
        }
 
        if (version == 2) {
                status = winreg_get_driver(p->mem_ctx, p->server_info,
+                                          p->msg_ctx,
                                           r->in.architecture,
                                           r->in.driver, 3, &info_win2k);
                if (W_ERROR_IS_OK(status)) {
@@ -1879,6 +1886,7 @@ WERROR _spoolss_DeletePrinterDriver(struct pipes_struct *p,
 
                        status = winreg_del_driver(p->mem_ctx,
                                                   p->server_info,
+                                                  p->msg_ctx,
                                                   info_win2k, 3);
                        talloc_free(info_win2k);
 
@@ -1889,7 +1897,8 @@ WERROR _spoolss_DeletePrinterDriver(struct pipes_struct *p,
                }
        }
 
-       status = winreg_del_driver(p->mem_ctx, p->server_info, info, version);
+       status = winreg_del_driver(p->mem_ctx, p->server_info, p->msg_ctx,
+                                  info, version);
 
 done:
        talloc_free(info);
@@ -1935,8 +1944,8 @@ WERROR _spoolss_DeletePrinterDriverEx(struct pipes_struct *p,
                version = r->in.version;
 
        status = winreg_get_driver(p->mem_ctx, p->server_info,
-                                  r->in.architecture, r->in.driver,
-                                  version, &info);
+                                  p->msg_ctx, r->in.architecture,
+                                  r->in.driver, version, &info);
        if (!W_ERROR_IS_OK(status)) {
                status = WERR_UNKNOWN_PRINTER_DRIVER;
 
@@ -1952,7 +1961,7 @@ WERROR _spoolss_DeletePrinterDriverEx(struct pipes_struct *p,
                /* try for Win2k driver if "Windows NT x86" */
 
                version = 3;
-               status = winreg_get_driver(info, p->server_info,
+               status = winreg_get_driver(info, p->server_info, p->msg_ctx,
                                           r->in.architecture,
                                           r->in.driver,
                                           version, &info);
@@ -1962,7 +1971,7 @@ WERROR _spoolss_DeletePrinterDriverEx(struct pipes_struct *p,
                }
        }
 
-       if (printer_driver_in_use(info, p->server_info, info)) {
+       if (printer_driver_in_use(info, p->server_info, p->msg_ctx, info)) {
                status = WERR_PRINTER_DRIVER_IN_USE;
                goto done;
        }
@@ -1985,7 +1994,8 @@ WERROR _spoolss_DeletePrinterDriverEx(struct pipes_struct *p,
 
        if (delete_files &&
            (r->in.delete_flags & DPD_DELETE_ALL_FILES) &&
-           printer_driver_files_in_use(info, p->server_info, info)) {
+           printer_driver_files_in_use(info, p->server_info, p->msg_ctx,
+                                       info)) {
                /* no idea of the correct error here */
                status = WERR_ACCESS_DENIED;
                goto done;
@@ -1995,7 +2005,7 @@ WERROR _spoolss_DeletePrinterDriverEx(struct pipes_struct *p,
        /* also check for W32X86/3 if necessary; maybe we already have? */
 
        if ( (version == 2) && ((r->in.delete_flags & DPD_DELETE_SPECIFIC_VERSION) != DPD_DELETE_SPECIFIC_VERSION)  ) {
-               status = winreg_get_driver(info, p->server_info,
+               status = winreg_get_driver(info, p->server_info, p->msg_ctx,
                                           r->in.architecture,
                                           r->in.driver, 3, &info_win2k);
                if (W_ERROR_IS_OK(status)) {
@@ -2003,6 +2013,7 @@ WERROR _spoolss_DeletePrinterDriverEx(struct pipes_struct *p,
                        if (delete_files &&
                            (r->in.delete_flags & DPD_DELETE_ALL_FILES) &&
                            printer_driver_files_in_use(info, p->server_info,
+                                                       p->msg_ctx,
                                                        info_win2k)) {
                                /* no idea of the correct error here */
                                talloc_free(info_win2k);
@@ -2014,7 +2025,7 @@ WERROR _spoolss_DeletePrinterDriverEx(struct pipes_struct *p,
                        /* remove the Win2k driver first*/
 
                        status = winreg_del_driver(info, p->server_info,
-                                                  info_win2k, 3);
+                                                  p->msg_ctx, info_win2k, 3);
 
                        /* this should not have failed---if it did, report to client */
 
@@ -2034,7 +2045,8 @@ WERROR _spoolss_DeletePrinterDriverEx(struct pipes_struct *p,
                }
        }
 
-       status = winreg_del_driver(info, p->server_info, info, version);
+       status = winreg_del_driver(info, p->server_info, p->msg_ctx, info,
+                                  version);
        if (!W_ERROR_IS_OK(status)) {
                goto done;
        }
@@ -2730,7 +2742,7 @@ static void spoolss_notify_status(int snum,
 {
        print_status_struct status;
 
-       print_queue_length(snum, &status);
+       print_queue_length(server_messaging_context(), snum, &status);
        SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, status.status);
 }
 
@@ -2744,7 +2756,9 @@ static void spoolss_notify_cjobs(int snum,
                                 struct spoolss_PrinterInfo2 *pinfo2,
                                 TALLOC_CTX *mem_ctx)
 {
-       SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(data, print_queue_length(snum, NULL));
+       SETUP_SPOOLSS_NOTIFY_DATA_INTEGER(
+               data, print_queue_length(server_messaging_context(), snum,
+                                        NULL));
 }
 
 /*******************************************************************
@@ -3341,7 +3355,8 @@ static WERROR printer_notify_info(struct pipes_struct *p,
 
                case JOB_NOTIFY_TYPE:
 
-                       count = print_queue_status(snum, &queue, &status);
+                       count = print_queue_status(p->msg_ctx, snum, &queue,
+                                                  &status);
 
                        for (j=0; j<count; j++) {
                                construct_notify_jobs_info(&queue[j], info,
@@ -3451,6 +3466,7 @@ done:
 
 static WERROR construct_printer_info0(TALLOC_CTX *mem_ctx,
                                      struct auth_serversupplied_info *server_info,
+                                     struct messaging_context *msg_ctx,
                                      struct spoolss_PrinterInfo2 *info2,
                                      struct spoolss_PrinterInfo0 *r,
                                      int snum)
@@ -3466,7 +3482,7 @@ static WERROR construct_printer_info0(TALLOC_CTX *mem_ctx,
        r->servername           = talloc_strdup(mem_ctx, info2->servername);
        W_ERROR_HAVE_NO_MEMORY(r->servername);
 
-       count = print_queue_length(snum, &status);
+       count = print_queue_length(msg_ctx, snum, &status);
 
        /* check if we already have a counter for this printer */
        for (session_counter = counter_list; session_counter; session_counter = session_counter->next) {
@@ -3513,7 +3529,11 @@ static WERROR construct_printer_info0(TALLOC_CTX *mem_ctx,
        r->number_of_processors         = 0x1;
        r->processor_type               = PROCESSOR_INTEL_PENTIUM; /* 586 Pentium ? */
        r->high_part_total_bytes        = 0x0;
-       winreg_printer_get_changeid(mem_ctx, server_info, info2->sharename, &r->change_id); /* ChangeID in milliseconds*/
+
+       /* ChangeID in milliseconds*/
+       winreg_printer_get_changeid(mem_ctx, server_info, msg_ctx,
+                                   info2->sharename, &r->change_id);
+
        r->last_error                   = WERR_OK;
        r->status                       = nt_printq_status(status.status);
        r->enumerate_network_printers   = 0x0;
@@ -3573,7 +3593,7 @@ static WERROR construct_printer_info2(TALLOC_CTX *mem_ctx,
        int count;
        print_status_struct status;
 
-       count = print_queue_length(snum, &status);
+       count = print_queue_length(server_messaging_context(), snum, &status);
 
        r->servername           = talloc_strdup(mem_ctx, info2->servername);
        W_ERROR_HAVE_NO_MEMORY(r->servername);
@@ -3711,7 +3731,7 @@ static WERROR construct_printer_info6(TALLOC_CTX *mem_ctx,
        int count;
        print_status_struct status;
 
-       count = print_queue_length(snum, &status);
+       count = print_queue_length(server_messaging_context(), snum, &status);
 
        r->status = nt_printq_status(status.status);
 
@@ -3724,6 +3744,7 @@ static WERROR construct_printer_info6(TALLOC_CTX *mem_ctx,
  ********************************************************************/
 
 static WERROR construct_printer_info7(TALLOC_CTX *mem_ctx,
+                                     struct messaging_context *msg_ctx,
                                      Printer_entry *print_hnd,
                                      struct spoolss_PrinterInfo7 *r,
                                      int snum)
@@ -3739,7 +3760,8 @@ static WERROR construct_printer_info7(TALLOC_CTX *mem_ctx,
                return WERR_NOMEM;
        }
 
-       if (is_printer_published(mem_ctx, server_info, print_hnd->servername,
+       if (is_printer_published(mem_ctx, server_info, msg_ctx,
+                                print_hnd->servername,
                                 lp_servicename(snum), &guid, NULL)) {
                r->guid = talloc_strdup_upper(mem_ctx, GUID_string2(mem_ctx, &guid));
                r->action = DSPRINT_PUBLISH;
@@ -3786,6 +3808,7 @@ static bool snum_is_shared_printer(int snum)
 
 static WERROR enum_all_printers_info_level(TALLOC_CTX *mem_ctx,
                                           struct auth_serversupplied_info *server_info,
+                                          struct messaging_context *msg_ctx,
                                           uint32_t level,
                                           uint32_t flags,
                                           union spoolss_PrinterInfo **info_p,
@@ -3816,7 +3839,7 @@ static WERROR enum_all_printers_info_level(TALLOC_CTX *mem_ctx,
 
                result = winreg_create_printer(mem_ctx,
                                               server_info,
-                                              smbd_messaging_context(),
+                                              msg_ctx,
                                               NULL,
                                               printer);
                if (!W_ERROR_IS_OK(result)) {
@@ -3831,8 +3854,7 @@ static WERROR enum_all_printers_info_level(TALLOC_CTX *mem_ctx,
                        goto out;
                }
 
-               result = winreg_get_printer(mem_ctx, server_info,
-                                           smbd_messaging_context(),
+               result = winreg_get_printer(mem_ctx, server_info, msg_ctx,
                                            NULL, printer, &info2);
                if (!W_ERROR_IS_OK(result)) {
                        goto out;
@@ -3840,7 +3862,8 @@ static WERROR enum_all_printers_info_level(TALLOC_CTX *mem_ctx,
 
                switch (level) {
                case 0:
-                       result = construct_printer_info0(info, server_info, info2,
+                       result = construct_printer_info0(info, server_info,
+                                                        msg_ctx, info2,
                                                         &info[count].info0, snum);
                        break;
                case 1:
@@ -3892,6 +3915,7 @@ static WERROR enum_all_printers_info_level(TALLOC_CTX *mem_ctx,
 
 static WERROR enumprinters_level0(TALLOC_CTX *mem_ctx,
                                  struct auth_serversupplied_info *server_info,
+                                 struct messaging_context *msg_ctx,
                                  uint32_t flags,
                                  const char *servername,
                                  union spoolss_PrinterInfo **info,
@@ -3899,7 +3923,8 @@ static WERROR enumprinters_level0(TALLOC_CTX *mem_ctx,
 {
        DEBUG(4,("enum_all_printers_info_0\n"));
 
-       return enum_all_printers_info_level(mem_ctx, server_info, 0, flags, info, count);
+       return enum_all_printers_info_level(mem_ctx, server_info, msg_ctx,
+                                           0, flags, info, count);
 }
 
 
@@ -3908,13 +3933,15 @@ static WERROR enumprinters_level0(TALLOC_CTX *mem_ctx,
 
 static WERROR enum_all_printers_info_1(TALLOC_CTX *mem_ctx,
                                       struct auth_serversupplied_info *server_info,
+                                      struct messaging_context *msg_ctx,
                                       uint32_t flags,
                                       union spoolss_PrinterInfo **info,
                                       uint32_t *count)
 {
        DEBUG(4,("enum_all_printers_info_1\n"));
 
-       return enum_all_printers_info_level(mem_ctx, server_info, 1, flags, info, count);
+       return enum_all_printers_info_level(mem_ctx, server_info, msg_ctx,
+                                           1, flags, info, count);
 }
 
 /********************************************************************
@@ -3923,12 +3950,14 @@ static WERROR enum_all_printers_info_1(TALLOC_CTX *mem_ctx,
 
 static WERROR enum_all_printers_info_1_local(TALLOC_CTX *mem_ctx,
                                             struct auth_serversupplied_info *server_info,
+                                            struct messaging_context *msg_ctx,
                                             union spoolss_PrinterInfo **info,
                                             uint32_t *count)
 {
        DEBUG(4,("enum_all_printers_info_1_local\n"));
 
-       return enum_all_printers_info_1(mem_ctx, server_info, PRINTER_ENUM_ICON8, info, count);
+       return enum_all_printers_info_1(mem_ctx, server_info, msg_ctx,
+                                       PRINTER_ENUM_ICON8, info, count);
 }
 
 /********************************************************************
@@ -3937,6 +3966,7 @@ static WERROR enum_all_printers_info_1_local(TALLOC_CTX *mem_ctx,
 
 static WERROR enum_all_printers_info_1_name(TALLOC_CTX *mem_ctx,
                                            struct auth_serversupplied_info *server_info,
+                                           struct messaging_context *msg_ctx,
                                            const char *name,
                                            union spoolss_PrinterInfo **info,
                                            uint32_t *count)
@@ -3953,7 +3983,8 @@ static WERROR enum_all_printers_info_1_name(TALLOC_CTX *mem_ctx,
                return WERR_INVALID_NAME;
        }
 
-       return enum_all_printers_info_1(mem_ctx, server_info, PRINTER_ENUM_ICON8, info, count);
+       return enum_all_printers_info_1(mem_ctx, server_info, msg_ctx,
+                                       PRINTER_ENUM_ICON8, info, count);
 }
 
 /********************************************************************
@@ -3962,6 +3993,7 @@ static WERROR enum_all_printers_info_1_name(TALLOC_CTX *mem_ctx,
 
 static WERROR enum_all_printers_info_1_network(TALLOC_CTX *mem_ctx,
                                               struct auth_serversupplied_info *server_info,
+                                              struct messaging_context *msg_ctx,
                                               const char *name,
                                               union spoolss_PrinterInfo **info,
                                               uint32_t *count)
@@ -3986,7 +4018,8 @@ static WERROR enum_all_printers_info_1_network(TALLOC_CTX *mem_ctx,
                 return WERR_CAN_NOT_COMPLETE;
        }
 
-       return enum_all_printers_info_1(mem_ctx, server_info, PRINTER_ENUM_NAME, info, count);
+       return enum_all_printers_info_1(mem_ctx, server_info, msg_ctx,
+                                       PRINTER_ENUM_NAME, info, count);
 }
 
 /********************************************************************
@@ -3997,12 +4030,14 @@ static WERROR enum_all_printers_info_1_network(TALLOC_CTX *mem_ctx,
 
 static WERROR enum_all_printers_info_2(TALLOC_CTX *mem_ctx,
                                       struct auth_serversupplied_info *server_info,
+                                      struct messaging_context *msg_ctx,
                                       union spoolss_PrinterInfo **info,
                                       uint32_t *count)
 {
        DEBUG(4,("enum_all_printers_info_2\n"));
 
-       return enum_all_printers_info_level(mem_ctx, server_info, 2, 0, info, count);
+       return enum_all_printers_info_level(mem_ctx, server_info, msg_ctx,
+                                           2, 0, info, count);
 }
 
 /********************************************************************
@@ -4011,6 +4046,7 @@ static WERROR enum_all_printers_info_2(TALLOC_CTX *mem_ctx,
 
 static WERROR enumprinters_level1(TALLOC_CTX *mem_ctx,
                                  struct auth_serversupplied_info *server_info,
+                                 struct messaging_context *msg_ctx,
                                  uint32_t flags,
                                  const char *name,
                                  union spoolss_PrinterInfo **info,
@@ -4019,15 +4055,20 @@ static WERROR enumprinters_level1(TALLOC_CTX *mem_ctx,
        /* Not all the flags are equals */
 
        if (flags & PRINTER_ENUM_LOCAL) {
-               return enum_all_printers_info_1_local(mem_ctx, server_info, info, count);
+               return enum_all_printers_info_1_local(mem_ctx, server_info,
+                                                     msg_ctx, info, count);
        }
 
        if (flags & PRINTER_ENUM_NAME) {
-               return enum_all_printers_info_1_name(mem_ctx, server_info, name, info, count);
+               return enum_all_printers_info_1_name(mem_ctx, server_info,
+                                                    msg_ctx, name, info,
+                                                    count);
        }
 
        if (flags & PRINTER_ENUM_NETWORK) {
-               return enum_all_printers_info_1_network(mem_ctx, server_info, name, info, count);
+               return enum_all_printers_info_1_network(mem_ctx, server_info,
+                                                       msg_ctx, name, info,
+                                                       count);
        }
 
        return WERR_OK; /* NT4sp5 does that */
@@ -4039,13 +4080,15 @@ static WERROR enumprinters_level1(TALLOC_CTX *mem_ctx,
 
 static WERROR enumprinters_level2(TALLOC_CTX *mem_ctx,
                                  struct auth_serversupplied_info *server_info,
+                                 struct messaging_context *msg_ctx,
                                  uint32_t flags,
                                  const char *servername,
                                  union spoolss_PrinterInfo **info,
                                  uint32_t *count)
 {
        if (flags & PRINTER_ENUM_LOCAL) {
-               return enum_all_printers_info_2(mem_ctx, server_info, info, count);
+               return enum_all_printers_info_2(mem_ctx, server_info, msg_ctx,
+                                               info, count);
        }
 
        if (flags & PRINTER_ENUM_NAME) {
@@ -4053,7 +4096,8 @@ static WERROR enumprinters_level2(TALLOC_CTX *mem_ctx,
                        return WERR_INVALID_NAME;
                }
 
-               return enum_all_printers_info_2(mem_ctx, server_info, info, count);
+               return enum_all_printers_info_2(mem_ctx, server_info, msg_ctx,
+                                               info, count);
        }
 
        if (flags & PRINTER_ENUM_REMOTE) {
@@ -4069,6 +4113,7 @@ static WERROR enumprinters_level2(TALLOC_CTX *mem_ctx,
 
 static WERROR enumprinters_level4(TALLOC_CTX *mem_ctx,
                                  struct auth_serversupplied_info *server_info,
+                                 struct messaging_context *msg_ctx,
                                  uint32_t flags,
                                  const char *servername,
                                  union spoolss_PrinterInfo **info,
@@ -4076,7 +4121,8 @@ static WERROR enumprinters_level4(TALLOC_CTX *mem_ctx,
 {
        DEBUG(4,("enum_all_printers_info_4\n"));
 
-       return enum_all_printers_info_level(mem_ctx, server_info, 4, flags, info, count);
+       return enum_all_printers_info_level(mem_ctx, server_info, msg_ctx,
+                                           4, flags, info, count);
 }
 
 
@@ -4086,6 +4132,7 @@ static WERROR enumprinters_level4(TALLOC_CTX *mem_ctx,
 
 static WERROR enumprinters_level5(TALLOC_CTX *mem_ctx,
                                  struct auth_serversupplied_info *server_info,
+                                 struct messaging_context *msg_ctx,
                                  uint32_t flags,
                                  const char *servername,
                                  union spoolss_PrinterInfo **info,
@@ -4093,7 +4140,8 @@ static WERROR enumprinters_level5(TALLOC_CTX *mem_ctx,
 {
        DEBUG(4,("enum_all_printers_info_5\n"));
 
-       return enum_all_printers_info_level(mem_ctx, server_info, 5, flags, info, count);
+       return enum_all_printers_info_level(mem_ctx, server_info, msg_ctx,
+                                           5, flags, info, count);
 }
 
 /****************************************************************
@@ -4139,27 +4187,27 @@ WERROR _spoolss_EnumPrinters(struct pipes_struct *p,
        switch (r->in.level) {
        case 0:
                result = enumprinters_level0(p->mem_ctx, p->server_info,
-                                            r->in.flags, name,
+                                            p->msg_ctx, r->in.flags, name,
                                             r->out.info, r->out.count);
                break;
        case 1:
                result = enumprinters_level1(p->mem_ctx, p->server_info,
-                                            r->in.flags, name,
+                                            p->msg_ctx, r->in.flags, name,
                                             r->out.info, r->out.count);
                break;
        case 2:
                result = enumprinters_level2(p->mem_ctx, p->server_info,
-                                            r->in.flags, name,
+                                            p->msg_ctx, r->in.flags, name,
                                             r->out.info, r->out.count);
                break;
        case 4:
                result = enumprinters_level4(p->mem_ctx, p->server_info,
-                                            r->in.flags, name,
+                                            p->msg_ctx, r->in.flags, name,
                                             r->out.info, r->out.count);
                break;
        case 5:
                result = enumprinters_level5(p->mem_ctx, p->server_info,
-                                            r->in.flags, name,
+                                            p->msg_ctx, r->in.flags, name,
                                             r->out.info, r->out.count);
                break;
        default:
@@ -4222,7 +4270,7 @@ WERROR _spoolss_GetPrinter(struct pipes_struct *p,
        switch (r->in.level) {
        case 0:
                result = construct_printer_info0(p->mem_ctx, p->server_info,
-                                                info2,
+                                                p->msg_ctx, info2,
                                                 &r->out.info->info0, snum);
                break;
        case 1:
@@ -4251,7 +4299,8 @@ WERROR _spoolss_GetPrinter(struct pipes_struct *p,
                                                 &r->out.info->info6, snum);
                break;
        case 7:
-               result = construct_printer_info7(p->mem_ctx, Printer,
+               result = construct_printer_info7(p->mem_ctx, p->msg_ctx,
+                                                Printer,
                                                 &r->out.info->info7, snum);
                break;
        case 8:
@@ -4959,6 +5008,7 @@ static WERROR fill_printer_driver_info101(TALLOC_CTX *mem_ctx,
 
 static WERROR construct_printer_driver_info_level(TALLOC_CTX *mem_ctx,
                                                  struct auth_serversupplied_info *server_info,
+                                                 struct messaging_context *msg_ctx,
                                                  uint32_t level,
                                                  union spoolss_DriverInfo *r,
                                                  int snum,
@@ -4972,7 +5022,7 @@ static WERROR construct_printer_driver_info_level(TALLOC_CTX *mem_ctx,
 
        result = winreg_get_printer(mem_ctx,
                                    server_info,
-                                   smbd_messaging_context(),
+                                   msg_ctx,
                                    servername,
                                    lp_const_servicename(snum),
                                    &pinfo2);
@@ -4984,7 +5034,8 @@ static WERROR construct_printer_driver_info_level(TALLOC_CTX *mem_ctx,
                return WERR_INVALID_PRINTER_NAME;
        }
 
-       result = winreg_get_driver(mem_ctx, server_info, architecture,
+       result = winreg_get_driver(mem_ctx, server_info, msg_ctx,
+                                  architecture,
                                   pinfo2->drivername, version, &driver);
 
        DEBUG(8,("construct_printer_driver_info_level: status: %s\n",
@@ -5002,7 +5053,8 @@ static WERROR construct_printer_driver_info_level(TALLOC_CTX *mem_ctx,
 
                /* Yes - try again with a WinNT driver. */
                version = 2;
-               result = winreg_get_driver(mem_ctx, server_info, architecture,
+               result = winreg_get_driver(mem_ctx, server_info, msg_ctx,
+                                          architecture,
                                           pinfo2->drivername,
                                           version, &driver);
                DEBUG(8,("construct_printer_driver_level: status: %s\n",
@@ -5084,7 +5136,9 @@ WERROR _spoolss_GetPrinterDriver2(struct pipes_struct *p,
                return WERR_BADFID;
        }
 
-       result = construct_printer_driver_info_level(p->mem_ctx, p->server_info,
+       result = construct_printer_driver_info_level(p->mem_ctx,
+                                                    p->server_info,
+                                                    p->msg_ctx,
                                                     r->in.level, r->out.info,
                                                     snum, printer->servername,
                                                     r->in.architecture,
@@ -5199,7 +5253,7 @@ WERROR _spoolss_StartDocPrinter(struct pipes_struct *p,
                return WERR_BADFID;
        }
 
-       werr = print_job_start(p->server_info, snum,
+       werr = print_job_start(p->server_info, p->msg_ctx, snum,
                                info_1->document_name, info_1->output_file,
                                Printer->devmode, &Printer->jobid);
 
@@ -5238,7 +5292,7 @@ WERROR _spoolss_EndDocPrinter(struct pipes_struct *p,
        }
 
        Printer->document_started = false;
-       status = print_job_end(snum, Printer->jobid, NORMAL_CLOSE);
+       status = print_job_end(p->msg_ctx, snum, Printer->jobid, NORMAL_CLOSE);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(2, ("_spoolss_EndDocPrinter: "
                          "print_job_end failed [%s]\n",
@@ -5312,14 +5366,14 @@ static WERROR control_printer(struct policy_handle *handle, uint32_t command,
 
        switch (command) {
        case SPOOLSS_PRINTER_CONTROL_PAUSE:
-               errcode = print_queue_pause(p->server_info, snum);
+               errcode = print_queue_pause(p->server_info, p->msg_ctx, snum);
                break;
        case SPOOLSS_PRINTER_CONTROL_RESUME:
        case SPOOLSS_PRINTER_CONTROL_UNPAUSE:
-               errcode = print_queue_resume(p->server_info, snum);
+               errcode = print_queue_resume(p->server_info, p->msg_ctx, snum);
                break;
        case SPOOLSS_PRINTER_CONTROL_PURGE:
-               errcode = print_queue_purge(p->server_info, snum);
+               errcode = print_queue_purge(p->server_info, p->msg_ctx, snum);
                break;
        default:
                return WERR_UNKNOWN_LEVEL;
@@ -5355,7 +5409,8 @@ WERROR _spoolss_AbortPrinter(struct pipes_struct *p,
                return WERR_SPL_NO_STARTDOC;
        }
 
-       errcode = print_job_delete(p->server_info, snum, Printer->jobid);
+       errcode = print_job_delete(p->server_info, p->msg_ctx, snum,
+                                  Printer->jobid);
 
        return errcode;
 }
@@ -5631,7 +5686,7 @@ static bool add_printer_hook(TALLOC_CTX *ctx, NT_USER_TOKEN *token,
 
        /* reload our services immediately */
        become_root();
-       reload_services(false);
+       reload_services(msg_ctx, false);
        unbecome_root();
 
        numlines = 0;
@@ -5655,6 +5710,7 @@ static bool add_printer_hook(TALLOC_CTX *ctx, NT_USER_TOKEN *token,
 
 static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                               struct auth_serversupplied_info *server_info,
+                              struct messaging_context *msg_ctx,
                               int snum,
                               struct spoolss_SetPrinterInfo2 *printer,
                               struct spoolss_PrinterInfo2 *old_printer)
@@ -5671,7 +5727,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                push_reg_sz(mem_ctx, &buffer, printer->drivername);
                winreg_set_printer_dataex(mem_ctx,
                                          server_info,
-                                         smbd_messaging_context(),
+                                         msg_ctx,
                                          printer->sharename,
                                          SPOOL_DSSPOOLER_KEY,
                                          SPOOL_REG_DRIVERNAME,
@@ -5683,7 +5739,8 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                        DEBUG(10,("update_printer: changing driver [%s]!  Sending event!\n",
                                printer->drivername));
 
-                       notify_printer_driver(snum, printer->drivername);
+                       notify_printer_driver(server_event_context(), msg_ctx,
+                                             snum, printer->drivername);
                }
        }
 
@@ -5691,7 +5748,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                push_reg_sz(mem_ctx, &buffer, printer->comment);
                winreg_set_printer_dataex(mem_ctx,
                                          server_info,
-                                         smbd_messaging_context(),
+                                         msg_ctx,
                                          printer->sharename,
                                          SPOOL_DSSPOOLER_KEY,
                                          SPOOL_REG_DESCRIPTION,
@@ -5700,7 +5757,8 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                                          buffer.length);
 
                if (!force_update) {
-                       notify_printer_comment(snum, printer->comment);
+                       notify_printer_comment(server_event_context(), msg_ctx,
+                                              snum, printer->comment);
                }
        }
 
@@ -5708,7 +5766,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                push_reg_sz(mem_ctx, &buffer, printer->sharename);
                winreg_set_printer_dataex(mem_ctx,
                                          server_info,
-                                         smbd_messaging_context(),
+                                         msg_ctx,
                                          printer->sharename,
                                          SPOOL_DSSPOOLER_KEY,
                                          SPOOL_REG_PRINTSHARENAME,
@@ -5717,7 +5775,9 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                                          buffer.length);
 
                if (!force_update) {
-                       notify_printer_sharename(snum, printer->sharename);
+                       notify_printer_sharename(server_event_context(),
+                                                msg_ctx,
+                                                snum, printer->sharename);
                }
        }
 
@@ -5734,7 +5794,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                push_reg_sz(mem_ctx, &buffer, p);
                winreg_set_printer_dataex(mem_ctx,
                                          server_info,
-                                         smbd_messaging_context(),
+                                         msg_ctx,
                                          printer->sharename,
                                          SPOOL_DSSPOOLER_KEY,
                                          SPOOL_REG_PRINTERNAME,
@@ -5743,7 +5803,8 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                                          buffer.length);
 
                if (!force_update) {
-                       notify_printer_printername(snum, p);
+                       notify_printer_printername(server_event_context(),
+                                                  msg_ctx, snum, p);
                }
        }
 
@@ -5751,7 +5812,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                push_reg_sz(mem_ctx, &buffer, printer->portname);
                winreg_set_printer_dataex(mem_ctx,
                                          server_info,
-                                         smbd_messaging_context(),
+                                         msg_ctx,
                                          printer->sharename,
                                          SPOOL_DSSPOOLER_KEY,
                                          SPOOL_REG_PORTNAME,
@@ -5760,7 +5821,8 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                                          buffer.length);
 
                if (!force_update) {
-                       notify_printer_port(snum, printer->portname);
+                       notify_printer_port(server_event_context(),
+                                           msg_ctx, snum, printer->portname);
                }
        }
 
@@ -5768,7 +5830,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                push_reg_sz(mem_ctx, &buffer, printer->location);
                winreg_set_printer_dataex(mem_ctx,
                                          server_info,
-                                         smbd_messaging_context(),
+                                         msg_ctx,
                                          printer->sharename,
                                          SPOOL_DSSPOOLER_KEY,
                                          SPOOL_REG_LOCATION,
@@ -5777,7 +5839,9 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                                          buffer.length);
 
                if (!force_update) {
-                       notify_printer_location(snum, printer->location);
+                       notify_printer_location(server_event_context(),
+                                               msg_ctx, snum,
+                                               printer->location);
                }
        }
 
@@ -5785,7 +5849,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                push_reg_sz(mem_ctx, &buffer, printer->sepfile);
                winreg_set_printer_dataex(mem_ctx,
                                          server_info,
-                                         smbd_messaging_context(),
+                                         msg_ctx,
                                          printer->sharename,
                                          SPOOL_DSSPOOLER_KEY,
                                          SPOOL_REG_PRINTSEPARATORFILE,
@@ -5794,7 +5858,9 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                                          buffer.length);
 
                if (!force_update) {
-                       notify_printer_location(snum, printer->location);
+                       notify_printer_location(server_event_context(),
+                                               msg_ctx, snum,
+                                               printer->location);
                }
        }
 
@@ -5803,7 +5869,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                SIVAL(buffer.data, 0, printer->starttime);
                winreg_set_printer_dataex(mem_ctx,
                                          server_info,
-                                         smbd_messaging_context(),
+                                         msg_ctx,
                                          printer->sharename,
                                          SPOOL_DSSPOOLER_KEY,
                                          SPOOL_REG_PRINTSTARTTIME,
@@ -5817,7 +5883,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                SIVAL(buffer.data, 0, printer->untiltime);
                winreg_set_printer_dataex(mem_ctx,
                                          server_info,
-                                         smbd_messaging_context(),
+                                         msg_ctx,
                                          printer->sharename,
                                          SPOOL_DSSPOOLER_KEY,
                                          SPOOL_REG_PRINTENDTIME,
@@ -5831,7 +5897,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                SIVAL(buffer.data, 0, printer->priority);
                winreg_set_printer_dataex(mem_ctx,
                                          server_info,
-                                         smbd_messaging_context(),
+                                         msg_ctx,
                                          printer->sharename,
                                          SPOOL_DSSPOOLER_KEY,
                                          SPOOL_REG_PRIORITY,
@@ -5846,7 +5912,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                                       PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS));
                winreg_set_printer_dataex(mem_ctx,
                                          server_info,
-                                         smbd_messaging_context(),
+                                         msg_ctx,
                                          printer->sharename,
                                          SPOOL_DSSPOOLER_KEY,
                                          SPOOL_REG_PRINTKEEPPRINTEDJOBS,
@@ -5870,7 +5936,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
                push_reg_sz(mem_ctx, &buffer, spooling);
                winreg_set_printer_dataex(mem_ctx,
                                          server_info,
-                                         smbd_messaging_context(),
+                                         msg_ctx,
                                          printer->sharename,
                                          SPOOL_DSSPOOLER_KEY,
                                          SPOOL_REG_PRINTSPOOLING,
@@ -5882,7 +5948,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
        push_reg_sz(mem_ctx, &buffer, global_myname());
        winreg_set_printer_dataex(mem_ctx,
                                  server_info,
-                                 smbd_messaging_context(),
+                                 msg_ctx,
                                  printer->sharename,
                                  SPOOL_DSSPOOLER_KEY,
                                  SPOOL_REG_SHORTSERVERNAME,
@@ -5904,7 +5970,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
        push_reg_sz(mem_ctx, &buffer, longname);
        winreg_set_printer_dataex(mem_ctx,
                                  server_info,
-                                 smbd_messaging_context(),
+                                 msg_ctx,
                                  printer->sharename,
                                  SPOOL_DSSPOOLER_KEY,
                                  SPOOL_REG_SERVERNAME,
@@ -5917,7 +5983,7 @@ static WERROR update_dsspooler(TALLOC_CTX *mem_ctx,
        push_reg_sz(mem_ctx, &buffer, uncname);
        winreg_set_printer_dataex(mem_ctx,
                                  server_info,
-                                 smbd_messaging_context(),
+                                 msg_ctx,
                                  printer->sharename,
                                  SPOOL_DSSPOOLER_KEY,
                                  SPOOL_REG_UNCNAME,
@@ -6016,6 +6082,7 @@ static WERROR update_printer(struct pipes_struct *p,
 
        update_dsspooler(tmp_ctx,
                         p->server_info,
+                        p->msg_ctx,
                         snum,
                         printer,
                         old_printer);
@@ -6073,7 +6140,8 @@ static WERROR publish_or_unpublish_printer(struct pipes_struct *p,
                return WERR_BADFID;
        }
 
-       nt_printer_publish(pinfo2, p->server_info, pinfo2, info7->action);
+       nt_printer_publish(pinfo2, p->server_info, p->msg_ctx, pinfo2,
+                          info7->action);
 
        TALLOC_FREE(pinfo2);
        return WERR_OK;
@@ -6530,7 +6598,7 @@ WERROR _spoolss_EnumJobs(struct pipes_struct *p,
                return result;
        }
 
-       count = print_queue_status(snum, &queue, &prt_status);
+       count = print_queue_status(p->msg_ctx, snum, &queue, &prt_status);
        DEBUGADD(4,("count:[%d], status:[%d], [%s]\n",
                count, prt_status.status, prt_status.message));
 
@@ -6603,7 +6671,9 @@ static WERROR spoolss_setjob_1(TALLOC_CTX *mem_ctx,
                return WERR_OK;
        }
 
-       if (!print_job_set_name(printer_name, job_id, r->document_name)) {
+       if (!print_job_set_name(server_event_context(),
+                               server_messaging_context(),
+                               printer_name, job_id, r->document_name)) {
                return WERR_BADFID;
        }
 
@@ -6631,20 +6701,22 @@ WERROR _spoolss_SetJob(struct pipes_struct *p,
        switch (r->in.command) {
        case SPOOLSS_JOB_CONTROL_CANCEL:
        case SPOOLSS_JOB_CONTROL_DELETE:
-               errcode = print_job_delete(p->server_info,
+               errcode = print_job_delete(p->server_info, p->msg_ctx,
                                           snum, r->in.job_id);
                if (W_ERROR_EQUAL(errcode, WERR_PRINTER_HAS_JOBS_QUEUED)) {
                        errcode = WERR_OK;
                }
                break;
        case SPOOLSS_JOB_CONTROL_PAUSE:
-               if (print_job_pause(p->server_info, snum, r->in.job_id, &errcode)) {
+               if (print_job_pause(p->server_info, p->msg_ctx,
+                                   snum, r->in.job_id, &errcode)) {
                        errcode = WERR_OK;
                }
                break;
        case SPOOLSS_JOB_CONTROL_RESTART:
        case SPOOLSS_JOB_CONTROL_RESUME:
-               if (print_job_resume(p->server_info, snum, r->in.job_id, &errcode)) {
+               if (print_job_resume(p->server_info, p->msg_ctx,
+                                    snum, r->in.job_id, &errcode)) {
                        errcode = WERR_OK;
                }
                break;
@@ -6685,6 +6757,7 @@ WERROR _spoolss_SetJob(struct pipes_struct *p,
 
 static WERROR enumprinterdrivers_level_by_architecture(TALLOC_CTX *mem_ctx,
                                                       struct auth_serversupplied_info *server_info,
+                                                      struct messaging_context *msg_ctx,
                                                       const char *servername,
                                                       const char *architecture,
                                                       uint32_t level,
@@ -6704,7 +6777,7 @@ static WERROR enumprinterdrivers_level_by_architecture(TALLOC_CTX *mem_ctx,
        *info_p = NULL;
 
        for (version=0; version<DRIVER_MAX_VERSION; version++) {
-               result = winreg_get_driver_list(mem_ctx, server_info,
+               result = winreg_get_driver_list(mem_ctx, server_info, msg_ctx,
                                                architecture, version,
                                                &num_drivers, &drivers);
                if (!W_ERROR_IS_OK(result)) {
@@ -6730,6 +6803,7 @@ static WERROR enumprinterdrivers_level_by_architecture(TALLOC_CTX *mem_ctx,
                        DEBUG(5, ("\tdriver: [%s]\n", drivers[i]));
 
                        result = winreg_get_driver(mem_ctx, server_info,
+                                                  msg_ctx,
                                                   architecture, drivers[i],
                                                   version, &driver);
                        if (!W_ERROR_IS_OK(result)) {
@@ -6801,6 +6875,7 @@ static WERROR enumprinterdrivers_level_by_architecture(TALLOC_CTX *mem_ctx,
 
 static WERROR enumprinterdrivers_level(TALLOC_CTX *mem_ctx,
                                       struct auth_serversupplied_info *server_info,
+                                      struct messaging_context *msg_ctx,
                                       const char *servername,
                                       const char *architecture,
                                       uint32_t level,
@@ -6819,6 +6894,7 @@ static WERROR enumprinterdrivers_level(TALLOC_CTX *mem_ctx,
 
                        result = enumprinterdrivers_level_by_architecture(mem_ctx,
                                                                          server_info,
+                                                                         msg_ctx,
                                                                          servername,
                                                                          archi_table[a].long_archi,
                                                                          level,
@@ -6839,6 +6915,7 @@ static WERROR enumprinterdrivers_level(TALLOC_CTX *mem_ctx,
 
        return enumprinterdrivers_level_by_architecture(mem_ctx,
                                                        server_info,
+                                                       msg_ctx,
                                                        servername,
                                                        architecture,
                                                        level,
@@ -6876,6 +6953,7 @@ WERROR _spoolss_EnumPrinterDrivers(struct pipes_struct *p,
 
        result = enumprinterdrivers_level(p->mem_ctx,
                                          p->server_info,
+                                         p->msg_ctx,
                                          cservername,
                                          r->in.environment,
                                          r->in.level,
@@ -6922,6 +7000,7 @@ WERROR _spoolss_EnumForms(struct pipes_struct *p,
        case 1:
                result = winreg_printer_enumforms1(p->mem_ctx,
                                                   p->server_info,
+                                                  p->msg_ctx,
                                                   r->out.count,
                                                   r->out.info);
                break;
@@ -6971,6 +7050,7 @@ WERROR _spoolss_GetForm(struct pipes_struct *p,
        case 1:
                result = winreg_printer_getform1(p->mem_ctx,
                                                 p->server_info,
+                                                p->msg_ctx,
                                                 r->in.form_name,
                                                 &r->out.info->info1);
                break;
@@ -7317,7 +7397,8 @@ static WERROR spoolss_addprinterex_level_2(struct pipes_struct *p,
        }
 
        /* you must be a printer admin to add a new printer */
-       if (!print_access_check(p->server_info, snum, PRINTER_ACCESS_ADMINISTER)) {
+       if (!print_access_check(p->server_info, p->msg_ctx, snum,
+                               PRINTER_ACCESS_ADMINISTER)) {
                return WERR_ACCESS_DENIED;
        }
 
@@ -7335,6 +7416,7 @@ static WERROR spoolss_addprinterex_level_2(struct pipes_struct *p,
 
        update_dsspooler(p->mem_ctx,
                         p->server_info,
+                        p->msg_ctx,
                         0,
                         info2,
                         NULL);
@@ -7465,7 +7547,7 @@ WERROR _spoolss_AddPrinterDriverEx(struct pipes_struct *p,
                goto done;
        }
 
-       err = winreg_add_driver(p->mem_ctx, p->server_info,
+       err = winreg_add_driver(p->mem_ctx, p->server_info, p->msg_ctx,
                                 r->in.info_ctr, &driver_name, &version);
        if (!W_ERROR_IS_OK(err)) {
                goto done;
@@ -7903,7 +7985,8 @@ WERROR _spoolss_AddForm(struct pipes_struct *p,
                return WERR_INVALID_PARAM;
        }
 
-       status = winreg_printer_addform1(p->mem_ctx, p->server_info, form);
+       status = winreg_printer_addform1(p->mem_ctx, p->server_info,
+                                        p->msg_ctx, form);
        if (!W_ERROR_IS_OK(status)) {
                return status;
        }
@@ -7918,6 +8001,7 @@ WERROR _spoolss_AddForm(struct pipes_struct *p,
 
                status = winreg_printer_update_changeid(p->mem_ctx,
                                                        p->server_info,
+                                                       p->msg_ctx,
                                                        lp_const_servicename(snum));
                if (!W_ERROR_IS_OK(status)) {
                        return status;
@@ -7961,6 +8045,7 @@ WERROR _spoolss_DeleteForm(struct pipes_struct *p,
 
        status = winreg_printer_deleteform1(p->mem_ctx,
                                            p->server_info,
+                                           p->msg_ctx,
                                            form_name);
        if (!W_ERROR_IS_OK(status)) {
                return status;
@@ -7976,6 +8061,7 @@ WERROR _spoolss_DeleteForm(struct pipes_struct *p,
 
                status = winreg_printer_update_changeid(p->mem_ctx,
                                                        p->server_info,
+                                                       p->msg_ctx,
                                                        lp_const_servicename(snum));
                if (!W_ERROR_IS_OK(status)) {
                        return status;
@@ -8024,6 +8110,7 @@ WERROR _spoolss_SetForm(struct pipes_struct *p,
 
        status = winreg_printer_setform1(p->mem_ctx,
                                         p->server_info,
+                                        p->msg_ctx,
                                         form_name,
                                         form);
        if (!W_ERROR_IS_OK(status)) {
@@ -8040,6 +8127,7 @@ WERROR _spoolss_SetForm(struct pipes_struct *p,
 
                status = winreg_printer_update_changeid(p->mem_ctx,
                                                        p->server_info,
+                                                       p->msg_ctx,
                                                        lp_const_servicename(snum));
                if (!W_ERROR_IS_OK(status)) {
                        return status;
@@ -8528,7 +8616,7 @@ WERROR _spoolss_GetJob(struct pipes_struct *p,
                return result;
        }
 
-       count = print_queue_status(snum, &queue, &prt_status);
+       count = print_queue_status(p->msg_ctx, snum, &queue, &prt_status);
 
        DEBUGADD(4,("count:[%d], prt_status:[%d], [%s]\n",
                     count, prt_status.status, prt_status.message));
@@ -8648,6 +8736,7 @@ WERROR _spoolss_GetPrinterDataEx(struct pipes_struct *p,
 
                        result = winreg_printer_get_changeid(p->mem_ctx,
                                                             p->server_info,
+                                                            p->msg_ctx,
                                                             printer,
                                                             &changeid);
                        if (!W_ERROR_IS_OK(result)) {
@@ -8792,6 +8881,7 @@ WERROR _spoolss_SetPrinterDataEx(struct pipes_struct *p,
 
                result = winreg_printer_update_changeid(p->mem_ctx,
                                                        p->server_info,
+                                                       p->msg_ctx,
                                                        lp_const_servicename(snum));
 
        }
@@ -8846,6 +8936,7 @@ WERROR _spoolss_DeletePrinterDataEx(struct pipes_struct *p,
        if (W_ERROR_IS_OK(status)) {
                status = winreg_printer_update_changeid(p->mem_ctx,
                                                        p->server_info,
+                                                       p->msg_ctx,
                                                        printer);
        }
 
@@ -8960,6 +9051,7 @@ WERROR _spoolss_DeletePrinterKey(struct pipes_struct *p,
        if (W_ERROR_IS_OK(status)) {
                status = winreg_printer_update_changeid(p->mem_ctx,
                                                        p->server_info,
+                                                       p->msg_ctx,
                                                        printer);
        }