summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2003-03-20 00:52:37 +0000
committerJeremy Allison <jra@samba.org>2003-03-20 00:52:37 +0000
commit3be18a1fba5b008e55a4497470165de62aa15054 (patch)
tree4adf72ee173185d4a392154b8a01b3d97c161786
parent4377376832b9ce40c7a7b99e04c23c25d96915ca (diff)
downloadsamba-3be18a1fba5b008e55a4497470165de62aa15054.tar.gz
samba-3be18a1fba5b008e55a4497470165de62aa15054.tar.bz2
samba-3be18a1fba5b008e55a4497470165de62aa15054.zip
lib/messages.c: Check return from chainlock before modifying message queue.
Apply the job returned limit across all requests for job queues. Jeremy. (This used to be commit bf795b684e608f82db822e0759e7b69afd451b65)
-rw-r--r--source3/lib/messages.c4
-rw-r--r--source3/printing/printing.c5
-rw-r--r--source3/rpc_server/srv_spoolss_nt.c6
3 files changed, 8 insertions, 7 deletions
diff --git a/source3/lib/messages.c b/source3/lib/messages.c
index 5ff0e45c61..c078472880 100644
--- a/source3/lib/messages.c
+++ b/source3/lib/messages.c
@@ -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
diff --git a/source3/printing/printing.c b/source3/printing/printing.c
index 26ea52e35a..99578975ca 100644
--- a/source3/printing/printing.c
+++ b/source3/printing/printing.c
@@ -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;
}
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index 5d63f27d23..a7b73b5ac9 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -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);