lib/messages.c: Check return from chainlock before modifying message queue.
authorJeremy Allison <jra@samba.org>
Thu, 20 Mar 2003 00:51:41 +0000 (00:51 +0000)
committerJeremy Allison <jra@samba.org>
Thu, 20 Mar 2003 00:51:41 +0000 (00:51 +0000)
Apply the job returned limit across all requests for job queues.
Jeremy.

source/lib/messages.c
source/printing/printing.c
source/rpc_server/srv_spoolss_nt.c

index 5ff0e45c61fc1429ef0228cbb7858b403e779758..c078472880dec455830fc143ab2a9f94e3a28efe 100644 (file)
@@ -315,7 +315,9 @@ static BOOL retrieve_all_messages(char **msgs_buf, size_t *total_len)
 
        kbuf = message_key_pid(sys_getpid());
 
-       tdb_chainlock(tdb, kbuf);
+       if (tdb_chainlock(tdb, kbuf) == -1)
+               return False;
+
        dbuf = tdb_fetch(tdb, kbuf);
        /*
         * Replace with an empty record to keep the allocated
index 26ea52e35a390d155e1ce22b7f3c9d293960dd9d..99578975ca3c548e8f92e89cdf753345779170e3 100644 (file)
@@ -1959,6 +1959,7 @@ int print_queue_status(int snum,
        TDB_DATA data, key;
        const char *printername;
        struct tdb_print_db *pdb;
+       int max_reported_jobs = lp_max_reported_jobs(snum);
 
        /* make sure the database is up to date */
 
@@ -2033,6 +2034,10 @@ int print_queue_status(int snum,
              QSORT_CAST(printjob_comp));
 
        *queue = tstruct.queue;
+
+       if (max_reported_jobs && tstruct.qcount > max_reported_jobs)
+               tstruct.qcount = max_reported_jobs;
+
        return tstruct.qcount;
 }
 
index 8073e3cf28c2f00c47d53a9ec59154417a3a2594..36ff92e46f0c14596b4e82bec07c2385384ad220 100644 (file)
@@ -6353,7 +6353,6 @@ WERROR _spoolss_enumjobs( pipes_struct *p, SPOOL_Q_ENUMJOBS *q_u, SPOOL_R_ENUMJO
        int snum;
        print_status_struct prt_status;
        print_queue_struct *queue=NULL;
-       int max_rep_jobs;
 
        /* that's an [in out] buffer */
        spoolss_move_buffer(q_u->buffer, &r_u->buffer);
@@ -6367,8 +6366,6 @@ WERROR _spoolss_enumjobs( pipes_struct *p, SPOOL_Q_ENUMJOBS *q_u, SPOOL_R_ENUMJO
        if (!get_printer_snum(p, handle, &snum))
                return WERR_BADFID;
 
-       max_rep_jobs = lp_max_reported_jobs(snum);
-
        *returned = print_queue_status(snum, &queue, &prt_status);
        DEBUGADD(4,("count:[%d], status:[%d], [%s]\n", *returned, prt_status.status, prt_status.message));
 
@@ -6377,9 +6374,6 @@ WERROR _spoolss_enumjobs( pipes_struct *p, SPOOL_Q_ENUMJOBS *q_u, SPOOL_R_ENUMJO
                return WERR_OK;
        }
 
-       if (max_rep_jobs && (*returned > max_rep_jobs))
-               *returned = max_rep_jobs;
-
        switch (level) {
        case 1:
                return enumjobs_level1(queue, snum, buffer, offered, needed, returned);