lib/util: Remove obsolete sys_getpid() and sys_fork().
[ab/samba.git/.git] / source3 / printing / printing.c
index 1dd053f69ed39cadf416fbddd5f74afff271f026..0d943a38dfe3774f91f46cf45002fc14e7811c5c 100644 (file)
 #include "system/syslog.h"
 #include "system/filesys.h"
 #include "printing.h"
-#include "librpc/gen_ndr/messaging.h"
 #include "../librpc/gen_ndr/ndr_spoolss.h"
 #include "nt_printing.h"
 #include "../librpc/gen_ndr/netlogon.h"
 #include "printing/notify.h"
 #include "printing/pcap.h"
+#include "printing/printer_list.h"
+#include "printing/queue_process.h"
 #include "serverid.h"
 #include "smbd/smbd.h"
 #include "auth.h"
+#include "messages.h"
+#include "util_tdb.h"
+#include "lib/param/loadparm.h"
 
 extern struct current_user current_user;
 extern userdom_struct current_user_info;
@@ -87,7 +91,7 @@ uint16 pjobid_to_rap(const char* sharename, uint32 jobid)
        key.dptr = (uint8 *)&jinfo;
        key.dsize = sizeof(jinfo);
 
-       data = tdb_fetch(rap_tdb, key);
+       data = tdb_fetch_compat(rap_tdb, key);
        if (data.dptr && data.dsize == sizeof(uint16)) {
                rap_jobid = SVAL(data.dptr, 0);
                SAFE_FREE(data.dptr);
@@ -124,7 +128,7 @@ bool rap_to_pjobid(uint16 rap_jobid, fstring sharename, uint32 *pjobid)
        SSVAL(buf,0,rap_jobid);
        key.dptr = buf;
        key.dsize = sizeof(rap_jobid);
-       data = tdb_fetch(rap_tdb, key);
+       data = tdb_fetch_compat(rap_tdb, key);
        if ( data.dptr && data.dsize == sizeof(struct rap_jobid_key) )
        {
                struct rap_jobid_key *jinfo = (struct rap_jobid_key*)data.dptr;
@@ -162,7 +166,7 @@ void rap_jobid_delete(const char* sharename, uint32 jobid)
        key.dptr = (uint8 *)&jinfo;
        key.dsize = sizeof(jinfo);
 
-       data = tdb_fetch(rap_tdb, key);
+       data = tdb_fetch_compat(rap_tdb, key);
        if (!data.dptr || (data.dsize != sizeof(uint16))) {
                DEBUG(10,("rap_jobid_delete: cannot find jobid %u\n",
                        (unsigned int)jobid ));
@@ -194,6 +198,10 @@ bool print_backend_init(struct messaging_context *msg_ctx)
        int services = lp_numservices();
        int snum;
 
+       if (!printer_list_parent_init()) {
+               return false;
+       }
+
        unlink(cache_path("printing.tdb"));
        mkdir(cache_path("printing"),0755);
 
@@ -207,7 +215,7 @@ bool print_backend_init(struct messaging_context *msg_ctx)
                pdb = get_print_db_byname(lp_const_servicename(snum));
                if (!pdb)
                        continue;
-               if (tdb_lock_bystring(pdb->tdb, sversion) == -1) {
+               if (tdb_lock_bystring(pdb->tdb, sversion) != 0) {
                        DEBUG(0,("print_backend_init: Failed to open printer %s database\n", lp_const_servicename(snum) ));
                        release_print_db(pdb);
                        return False;
@@ -440,7 +448,7 @@ static struct printjob *print_job_find(const char *sharename, uint32 jobid)
                return NULL;
        }
 
-       ret = tdb_fetch(pdb->tdb, print_key(jobid, &tmp));
+       ret = tdb_fetch_compat(pdb->tdb, print_key(jobid, &tmp));
        release_print_db(pdb);
 
        if (!ret.dptr) {
@@ -604,12 +612,12 @@ static bool remove_from_jobs_changed(const char* sharename, uint32_t jobid)
 
        key = string_tdb_data("INFO/jobs_changed");
 
-       if (tdb_chainlock_with_timeout(pdb->tdb, key, 5) == -1)
+       if (tdb_chainlock_with_timeout(pdb->tdb, key, 5) != 0)
                goto out;
 
        gotlock = True;
 
-       data = tdb_fetch(pdb->tdb, key);
+       data = tdb_fetch_compat(pdb->tdb, key);
 
        if (data.dptr == NULL || data.dsize == 0 || (data.dsize % 4 != 0))
                goto out;
@@ -623,7 +631,7 @@ static bool remove_from_jobs_changed(const char* sharename, uint32_t jobid)
                        if (i < job_count -1 )
                                memmove(data.dptr + (i*4), data.dptr + (i*4) + 4, (job_count - i - 1)*4 );
                        data.dsize -= 4;
-                       if (tdb_store(pdb->tdb, key, data, TDB_REPLACE) == -1)
+                       if (tdb_store(pdb->tdb, key, data, TDB_REPLACE) != 0)
                                goto out;
                        break;
                }
@@ -727,7 +735,7 @@ static bool pjob_store(struct tevent_context *ev,
 
        /* Get old data */
 
-       old_data = tdb_fetch(pdb->tdb, print_key(jobid, &tmp));
+       old_data = tdb_fetch_compat(pdb->tdb, print_key(jobid, &tmp));
 
        /* Doh!  Now we have to pack/unpack data since the NT_DEVICEMODE was added */
 
@@ -1077,7 +1085,7 @@ static pid_t get_updating_pid(const char *sharename)
        slprintf(keystr, sizeof(keystr)-1, "UPDATING/%s", sharename);
        key = string_tdb_data(keystr);
 
-       data = tdb_fetch(pdb->tdb, key);
+       data = tdb_fetch_compat(pdb->tdb, key);
        release_print_db(pdb);
        if (!data.dptr || data.dsize != sizeof(pid_t)) {
                SAFE_FREE(data.dptr);
@@ -1103,7 +1111,7 @@ static void set_updating_pid(const fstring sharename, bool updating)
        fstring keystr;
        TDB_DATA key;
        TDB_DATA data;
-       pid_t updating_pid = sys_getpid();
+       pid_t updating_pid = getpid();
        uint8 buffer[4];
 
        struct tdb_print_db *pdb = get_print_db_byname(sharename);
@@ -1224,7 +1232,7 @@ static TDB_DATA get_jobs_added_data(struct tdb_print_db *pdb)
 
        ZERO_STRUCT(data);
 
-       data = tdb_fetch(pdb->tdb, string_tdb_data("INFO/jobs_added"));
+       data = tdb_fetch_compat(pdb->tdb, string_tdb_data("INFO/jobs_added"));
        if (data.dptr == NULL || data.dsize == 0 || (data.dsize % 4 != 0)) {
                SAFE_FREE(data.dptr);
                ZERO_STRUCT(data);
@@ -1515,7 +1523,7 @@ static void print_queue_update_with_lock( struct tevent_context *ev,
 
        slprintf(keystr, sizeof(keystr) - 1, "LOCK/%s", sharename);
        /* Only wait 10 seconds for this. */
-       if (tdb_lock_bystring_with_timeout(pdb->tdb, keystr, 10) == -1) {
+       if (tdb_lock_bystring_with_timeout(pdb->tdb, keystr, 10) != 0) {
                DEBUG(0,("print_queue_update_with_lock: Failed to lock printer %s database\n", sharename));
                release_print_db(pdb);
                return;
@@ -1597,123 +1605,12 @@ void print_queue_receive(struct messaging_context *msg,
        return;
 }
 
-static void printing_pause_fd_handler(struct tevent_context *ev,
-                                     struct tevent_fd *fde,
-                                     uint16_t flags,
-                                     void *private_data)
-{
-       /*
-        * If pause_pipe[1] is closed it means the parent smbd
-        * and children exited or aborted.
-        */
-       exit_server_cleanly(NULL);
-}
-
-extern struct child_pid *children;
-extern int num_children;
-
-static void add_child_pid(pid_t pid)
-{
-       struct child_pid *child;
-
-        child = SMB_MALLOC_P(struct child_pid);
-        if (child == NULL) {
-                DEBUG(0, ("Could not add child struct -- malloc failed\n"));
-                return;
-        }
-        child->pid = pid;
-        DLIST_ADD(children, child);
-        num_children += 1;
-}
-
-static pid_t background_lpq_updater_pid = -1;
-
-/****************************************************************************
-main thread of the background lpq updater
-****************************************************************************/
-void start_background_queue(struct tevent_context *ev,
-                           struct messaging_context *msg_ctx)
-{
-       /* Use local variables for this as we don't
-        * need to save the parent side of this, just
-        * ensure it closes when the process exits.
-        */
-       int pause_pipe[2];
-
-       DEBUG(3,("start_background_queue: Starting background LPQ thread\n"));
-
-       if (pipe(pause_pipe) == -1) {
-               DEBUG(5,("start_background_queue: cannot create pipe. %s\n", strerror(errno) ));
-               exit(1);
-       }
-
-       background_lpq_updater_pid = sys_fork();
-
-       if (background_lpq_updater_pid == -1) {
-               DEBUG(5,("start_background_queue: background LPQ thread failed to start. %s\n", strerror(errno) ));
-               exit(1);
-       }
-
-       /* Track the printing pid along with other smbd children */
-       add_child_pid(background_lpq_updater_pid);
-
-       if(background_lpq_updater_pid == 0) {
-               struct tevent_fd *fde;
-               int ret;
-               NTSTATUS status;
-
-               /* Child. */
-               DEBUG(5,("start_background_queue: background LPQ thread started\n"));
-
-               close(pause_pipe[0]);
-               pause_pipe[0] = -1;
-
-               status = reinit_after_fork(msg_ctx, ev, procid_self(), true);
-
-               if (!NT_STATUS_IS_OK(status)) {
-                       DEBUG(0,("reinit_after_fork() failed\n"));
-                       smb_panic("reinit_after_fork() failed");
-               }
-
-               smbd_setup_sig_term_handler();
-               smbd_setup_sig_hup_handler(ev, msg_ctx);
-
-               if (!serverid_register(procid_self(),
-                                      FLAG_MSG_GENERAL|FLAG_MSG_SMBD
-                                      |FLAG_MSG_PRINT_GENERAL)) {
-                       exit(1);
-               }
-
-               if (!locking_init()) {
-                       exit(1);
-               }
-
-               messaging_register(msg_ctx, NULL, MSG_PRINTER_UPDATE,
-                                  print_queue_receive);
-
-               fde = tevent_add_fd(ev, ev, pause_pipe[1], TEVENT_FD_READ,
-                                   printing_pause_fd_handler,
-                                   NULL);
-               if (!fde) {
-                       DEBUG(0,("tevent_add_fd() failed for pause_pipe\n"));
-                       smb_panic("tevent_add_fd() failed for pause_pipe");
-               }
-
-               DEBUG(5,("start_background_queue: background LPQ thread waiting for messages\n"));
-               ret = tevent_loop_wait(ev);
-               /* should not be reached */
-               DEBUG(0,("background_queue: tevent_loop_wait() exited with %d - %s\n",
-                        ret, (ret == 0) ? "out of events" : strerror(errno)));
-               exit(1);
-       }
-
-       close(pause_pipe[1]);
-}
-
 /****************************************************************************
 update the internal database from the system print queue for a queue
 ****************************************************************************/
 
+extern pid_t background_lpq_updater_pid;
+
 static void print_queue_update(struct messaging_context *msg_ctx,
                               int snum, bool force)
 {
@@ -1855,7 +1752,7 @@ bool print_notify_register_pid(int snum)
        struct tdb_print_db *pdb = NULL;
        TDB_CONTEXT *tdb = NULL;
        const char *printername;
-       uint32 mypid = (uint32)sys_getpid();
+       uint32_t mypid = (uint32_t)getpid();
        bool ret = False;
        size_t i;
 
@@ -1884,7 +1781,7 @@ bool print_notify_register_pid(int snum)
                tdb = pdb->tdb;
        }
 
-       if (tdb_lock_bystring_with_timeout(tdb, NOTIFY_PID_LIST_KEY, 10) == -1) {
+       if (tdb_lock_bystring_with_timeout(tdb, NOTIFY_PID_LIST_KEY, 10) != 0) {
                DEBUG(0,("print_notify_register_pid: Failed to lock printer %s\n",
                                        printername));
                if (pdb)
@@ -1918,7 +1815,7 @@ bool print_notify_register_pid(int snum)
        }
 
        /* Store back the record. */
-       if (tdb_store_bystring(tdb, NOTIFY_PID_LIST_KEY, data, TDB_REPLACE) == -1) {
+       if (tdb_store_bystring(tdb, NOTIFY_PID_LIST_KEY, data, TDB_REPLACE) != 0) {
                DEBUG(0,("print_notify_register_pid: Failed to update pid \
 list for printer %s\n", printername));
                goto done;
@@ -1946,7 +1843,7 @@ bool print_notify_deregister_pid(int snum)
        struct tdb_print_db *pdb = NULL;
        TDB_CONTEXT *tdb = NULL;
        const char *printername;
-       uint32 mypid = (uint32)sys_getpid();
+       uint32_t mypid = (uint32_t)getpid();
        size_t i;
        bool ret = False;
 
@@ -1974,7 +1871,7 @@ bool print_notify_deregister_pid(int snum)
                tdb = pdb->tdb;
        }
 
-       if (tdb_lock_bystring_with_timeout(tdb, NOTIFY_PID_LIST_KEY, 10) == -1) {
+       if (tdb_lock_bystring_with_timeout(tdb, NOTIFY_PID_LIST_KEY, 10) != 0) {
                DEBUG(0,("print_notify_register_pid: Failed to lock \
 printer %s database\n", printername));
                if (pdb)
@@ -2008,7 +1905,7 @@ printer %s database\n", printername));
                SAFE_FREE(data.dptr);
 
        /* Store back the record. */
-       if (tdb_store_bystring(tdb, NOTIFY_PID_LIST_KEY, data, TDB_REPLACE) == -1) {
+       if (tdb_store_bystring(tdb, NOTIFY_PID_LIST_KEY, data, TDB_REPLACE) != 0) {
                DEBUG(0,("print_notify_register_pid: Failed to update pid \
 list for printer %s\n", printername));
                goto done;
@@ -2051,7 +1948,7 @@ bool print_job_exists(const char* sharename, uint32 jobid)
 char *print_job_fname(const char* sharename, uint32 jobid)
 {
        struct printjob *pjob = print_job_find(sharename, jobid);
-       if (!pjob || pjob->spooled || pjob->pid != sys_getpid())
+       if (!pjob || pjob->spooled || pjob->pid != getpid())
                return NULL;
        return pjob->filename;
 }
@@ -2084,7 +1981,7 @@ bool print_job_set_name(struct tevent_context *ev,
        struct printjob *pjob;
 
        pjob = print_job_find(sharename, jobid);
-       if (!pjob || pjob->pid != sys_getpid())
+       if (!pjob || pjob->pid != getpid())
                return False;
 
        fstrcpy(pjob->jobname, name);
@@ -2100,7 +1997,7 @@ bool print_job_get_name(TALLOC_CTX *mem_ctx, const char *sharename, uint32_t job
        struct printjob *pjob;
 
        pjob = print_job_find(sharename, jobid);
-       if (!pjob || pjob->pid != sys_getpid()) {
+       if (!pjob || pjob->pid != getpid()) {
                return false;
        }
 
@@ -2133,12 +2030,12 @@ static bool remove_from_jobs_added(const char* sharename, uint32 jobid)
 
        key = string_tdb_data("INFO/jobs_added");
 
-       if (tdb_chainlock_with_timeout(pdb->tdb, key, 5) == -1)
+       if (tdb_chainlock_with_timeout(pdb->tdb, key, 5) != 0)
                goto out;
 
        gotlock = True;
 
-       data = tdb_fetch(pdb->tdb, key);
+       data = tdb_fetch_compat(pdb->tdb, key);
 
        if (data.dptr == NULL || data.dsize == 0 || (data.dsize % 4 != 0))
                goto out;
@@ -2152,7 +2049,7 @@ static bool remove_from_jobs_added(const char* sharename, uint32 jobid)
                        if (i < job_count -1 )
                                memmove(data.dptr + (i*4), data.dptr + (i*4) + 4, (job_count - i - 1)*4 );
                        data.dsize -= 4;
-                       if (tdb_store(pdb->tdb, key, data, TDB_REPLACE) == -1)
+                       if (tdb_store(pdb->tdb, key, data, TDB_REPLACE) != 0)
                                goto out;
                        break;
                }
@@ -2241,7 +2138,7 @@ static bool print_job_delete1(struct tevent_context *ev,
  Return true if the current user owns the print job.
 ****************************************************************************/
 
-static bool is_owner(const struct auth_serversupplied_info *server_info,
+static bool is_owner(const struct auth_session_info *server_info,
                     const char *servicename,
                     uint32 jobid)
 {
@@ -2250,14 +2147,14 @@ static bool is_owner(const struct auth_serversupplied_info *server_info,
        if (!pjob || !server_info)
                return False;
 
-       return strequal(pjob->user, server_info->sanitized_username);
+       return strequal(pjob->user, server_info->unix_info->sanitized_username);
 }
 
 /****************************************************************************
  Delete a print job.
 ****************************************************************************/
 
-WERROR print_job_delete(const struct auth_serversupplied_info *server_info,
+WERROR print_job_delete(const struct auth_session_info *server_info,
                        struct messaging_context *msg_ctx,
                        int snum, uint32_t jobid)
 {
@@ -2280,7 +2177,7 @@ WERROR print_job_delete(const struct auth_serversupplied_info *server_info,
                sys_adminlog( LOG_ERR,
                              "Permission denied-- user not allowed to delete, \
 pause, or resume print job. User name: %s. Printer name: %s.",
-                             uidtoname(server_info->utok.uid),
+                             uidtoname(server_info->unix_token->uid),
                              lp_printername(snum) );
                /* END_ADMIN_LOG */
 
@@ -2325,7 +2222,7 @@ pause, or resume print job. User name: %s. Printer name: %s.",
  Pause a job.
 ****************************************************************************/
 
-bool print_job_pause(const struct auth_serversupplied_info *server_info,
+bool print_job_pause(const struct auth_session_info *server_info,
                     struct messaging_context *msg_ctx,
                     int snum, uint32 jobid, WERROR *errcode)
 {
@@ -2357,7 +2254,7 @@ bool print_job_pause(const struct auth_serversupplied_info *server_info,
                sys_adminlog( LOG_ERR,
                        "Permission denied-- user not allowed to delete, \
 pause, or resume print job. User name: %s. Printer name: %s.",
-                             uidtoname(server_info->utok.uid),
+                             uidtoname(server_info->unix_token->uid),
                              lp_printername(snum) );
                /* END_ADMIN_LOG */
 
@@ -2390,7 +2287,7 @@ pause, or resume print job. User name: %s. Printer name: %s.",
  Resume a job.
 ****************************************************************************/
 
-bool print_job_resume(const struct auth_serversupplied_info *server_info,
+bool print_job_resume(const struct auth_session_info *server_info,
                      struct messaging_context *msg_ctx,
                      int snum, uint32 jobid, WERROR *errcode)
 {
@@ -2423,7 +2320,7 @@ bool print_job_resume(const struct auth_serversupplied_info *server_info,
                sys_adminlog( LOG_ERR,
                         "Permission denied-- user not allowed to delete, \
 pause, or resume print job. User name: %s. Printer name: %s.",
-                             uidtoname(server_info->utok.uid),
+                             uidtoname(server_info->unix_token->uid),
                              lp_printername(snum) );
                /* END_ADMIN_LOG */
                return False;
@@ -2464,7 +2361,7 @@ ssize_t print_job_write(struct tevent_context *ev,
        if (!pjob)
                return -1;
        /* don't allow another process to get this info - it is meaningless */
-       if (pjob->pid != sys_getpid())
+       if (pjob->pid != getpid())
                return -1;
 
        /* if SMBD is spooling this can't be allowed */
@@ -2501,7 +2398,7 @@ static int get_queue_status(const char* sharename, print_status_struct *status)
 
        if (status) {
                fstr_sprintf(keystr, "STATUS/%s", sharename);
-               data = tdb_fetch(pdb->tdb, string_tdb_data(keystr));
+               data = tdb_fetch_compat(pdb->tdb, string_tdb_data(keystr));
                if (data.dptr) {
                        if (data.dsize == sizeof(print_status_struct))
                                /* this memcpy is ok since the status struct was
@@ -2560,7 +2457,7 @@ static WERROR allocate_print_jobid(struct tdb_print_db *pdb, int snum,
                /* Lock the database - only wait 20 seconds. */
                ret = tdb_lock_bystring_with_timeout(pdb->tdb,
                                                     "INFO/nextjob", 20);
-               if (ret == -1) {
+               if (ret != 0) {
                        DEBUG(0, ("allocate_print_jobid: "
                                  "Failed to lock printing database %s\n",
                                  sharename));
@@ -2588,7 +2485,7 @@ static WERROR allocate_print_jobid(struct tdb_print_db *pdb, int snum,
                jobid = NEXT_JOBID(jobid);
 
                ret = tdb_store_int32(pdb->tdb, "INFO/nextjob", jobid);
-               if (ret == -1) {
+               if (ret != 0) {
                        terr = tdb_error(pdb->tdb);
                        DEBUG(3, ("allocate_print_jobid: "
                                  "Failed to store INFO/nextjob.\n"));
@@ -2621,7 +2518,7 @@ static WERROR allocate_print_jobid(struct tdb_print_db *pdb, int snum,
                dum.dptr = NULL;
                dum.dsize = 0;
                if (tdb_store(pdb->tdb, print_key(jobid, &tmp), dum,
-                             TDB_INSERT) == -1) {
+                             TDB_INSERT) != 0) {
                        DEBUG(3, ("allocate_print_jobid: "
                                  "jobid (%d) failed to store placeholder.\n",
                                  jobid ));
@@ -2658,7 +2555,7 @@ static bool add_to_jobs_added(struct tdb_print_db *pdb, uint32 jobid)
  Do all checks needed to determine if we can start a job.
 ***************************************************************************/
 
-static WERROR print_job_checks(const struct auth_serversupplied_info *server_info,
+static WERROR print_job_checks(const struct auth_session_info *server_info,
                               struct messaging_context *msg_ctx,
                               int snum, int *njobs)
 {
@@ -2784,7 +2681,7 @@ static WERROR print_job_spool_file(int snum, uint32_t jobid,
  Start spooling a job - return the jobid.
 ***************************************************************************/
 
-WERROR print_job_start(const struct auth_serversupplied_info *server_info,
+WERROR print_job_start(const struct auth_session_info *server_info,
                       struct messaging_context *msg_ctx,
                       const char *clientmachine,
                       int snum, const char *docname, const char *filename,
@@ -2823,7 +2720,7 @@ WERROR print_job_start(const struct auth_serversupplied_info *server_info,
 
        ZERO_STRUCT(pjob);
 
-       pjob.pid = sys_getpid();
+       pjob.pid = getpid();
        pjob.sysjob = -1;
        pjob.fd = -1;
        pjob.starttime = time(NULL);
@@ -2838,13 +2735,11 @@ WERROR print_job_start(const struct auth_serversupplied_info *server_info,
        fstrcpy(pjob.clientmachine, clientmachine);
 
        fstrcpy(pjob.user, lp_printjob_username(snum));
-       standard_sub_advanced(sharename, server_info->sanitized_username,
-                             path, server_info->utok.gid,
-                             server_info->sanitized_username,
-                             server_info->info3->base.domain.string,
-                             pjob.user, sizeof(pjob.user)-1);
-       /* ensure NULL termination */
-       pjob.user[sizeof(pjob.user)-1] = '\0';
+       standard_sub_advanced(sharename, server_info->unix_info->sanitized_username,
+                             path, server_info->unix_token->gid,
+                             server_info->unix_info->sanitized_username,
+                             server_info->info->domain_name,
+                             pjob.user, sizeof(pjob.user));
 
        fstrcpy(pjob.queuename, lp_const_servicename(snum));
 
@@ -2893,7 +2788,7 @@ void print_job_endpage(struct messaging_context *msg_ctx,
        if (!pjob)
                return;
        /* don't allow another process to get this info - it is meaningless */
-       if (pjob->pid != sys_getpid())
+       if (pjob->pid != getpid())
                return;
 
        pjob->page_count++;
@@ -2922,7 +2817,7 @@ NTSTATUS print_job_end(struct messaging_context *msg_ctx, int snum,
                return NT_STATUS_PRINT_CANCELLED;
        }
 
-       if (pjob->spooled || pjob->pid != sys_getpid()) {
+       if (pjob->spooled || pjob->pid != getpid()) {
                return NT_STATUS_ACCESS_DENIED;
        }
 
@@ -3037,18 +2932,18 @@ static bool get_stored_queue_info(struct messaging_context *msg_ctx,
        ZERO_STRUCT(cgdata);
 
        /* Get the stored queue data. */
-       data = tdb_fetch(pdb->tdb, string_tdb_data("INFO/linear_queue_array"));
+       data = tdb_fetch_compat(pdb->tdb, string_tdb_data("INFO/linear_queue_array"));
 
        if (data.dptr && data.dsize >= sizeof(qcount))
                len += tdb_unpack(data.dptr + len, data.dsize - len, "d", &qcount);
 
        /* Get the added jobs list. */
-       cgdata = tdb_fetch(pdb->tdb, string_tdb_data("INFO/jobs_added"));
+       cgdata = tdb_fetch_compat(pdb->tdb, string_tdb_data("INFO/jobs_added"));
        if (cgdata.dptr != NULL && (cgdata.dsize % 4 == 0))
                extra_count = cgdata.dsize/4;
 
        /* Get the changed jobs list. */
-       jcdata = tdb_fetch(pdb->tdb, string_tdb_data("INFO/jobs_changed"));
+       jcdata = tdb_fetch_compat(pdb->tdb, string_tdb_data("INFO/jobs_changed"));
        if (jcdata.dptr != NULL && (jcdata.dsize % 4 == 0))
                changed_count = jcdata.dsize / 4;
 
@@ -3215,7 +3110,7 @@ int print_queue_status(struct messaging_context *msg_ctx, int snum,
        slprintf(keystr, sizeof(keystr)-1, "STATUS/%s", sharename);
        key = string_tdb_data(keystr);
 
-       data = tdb_fetch(pdb->tdb, key);
+       data = tdb_fetch_compat(pdb->tdb, key);
        if (data.dptr) {
                if (data.dsize == sizeof(*status)) {
                        /* this memcpy is ok since the status struct was
@@ -3243,7 +3138,7 @@ int print_queue_status(struct messaging_context *msg_ctx, int snum,
  Pause a queue.
 ****************************************************************************/
 
-WERROR print_queue_pause(const struct auth_serversupplied_info *server_info,
+WERROR print_queue_pause(const struct auth_session_info *server_info,
                         struct messaging_context *msg_ctx, int snum)
 {
        int ret;
@@ -3280,7 +3175,7 @@ WERROR print_queue_pause(const struct auth_serversupplied_info *server_info,
  Resume a queue.
 ****************************************************************************/
 
-WERROR print_queue_resume(const struct auth_serversupplied_info *server_info,
+WERROR print_queue_resume(const struct auth_session_info *server_info,
                          struct messaging_context *msg_ctx, int snum)
 {
        int ret;
@@ -3317,7 +3212,7 @@ WERROR print_queue_resume(const struct auth_serversupplied_info *server_info,
  Purge a queue - implemented by deleting all jobs that we can delete.
 ****************************************************************************/
 
-WERROR print_queue_purge(const struct auth_serversupplied_info *server_info,
+WERROR print_queue_purge(const struct auth_session_info *server_info,
                         struct messaging_context *msg_ctx, int snum)
 {
        print_queue_struct *queue;