summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2003-03-01 02:39:12 +0000
committerJeremy Allison <jra@samba.org>2003-03-01 02:39:12 +0000
commitba3ccc2928f0178034b48e27383e57a8cf1a4f21 (patch)
tree82f9e137b3195e6fce6f43f0f65d8b53b49f71e8
parent0bf15545dd1ee7d0fd8b16a5523e85343765a123 (diff)
downloadsamba-ba3ccc2928f0178034b48e27383e57a8cf1a4f21.tar.gz
samba-ba3ccc2928f0178034b48e27383e57a8cf1a4f21.tar.bz2
samba-ba3ccc2928f0178034b48e27383e57a8cf1a4f21.zip
Added limit to number of jobs enumerated. Set to 0 (means no limit).
Yes I will add the docs.... Jeremy. (This used to be commit e1b0001c8df9e9823b42a372ca675188570b252a)
-rw-r--r--source3/param/loadparm.c4
-rw-r--r--source3/rpc_server/srv_spoolss_nt.c6
2 files changed, 10 insertions, 0 deletions
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index b82c1e2ec8..27e02c1685 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -328,6 +328,7 @@ typedef struct
char *szMSDfsProxy;
int iMinPrintSpace;
int iMaxPrintJobs;
+ int iMaxReportedPrintJobs;
int iWriteCacheSize;
int iCreate_mask;
int iCreate_force_mode;
@@ -447,6 +448,7 @@ static service sDefault = {
NULL, /* szMSDfsProxy */
0, /* iMinPrintSpace */
1000, /* iMaxPrintJobs */
+ 0, /* iMaxReportedPrintJobs */
0, /* iWriteCacheSize */
0744, /* iCreate_mask */
0000, /* iCreate_force_mode */
@@ -889,6 +891,7 @@ static struct parm_struct parm_table[] = {
{"Printing Options", P_SEP, P_SEPARATOR},
{"total print jobs", P_INTEGER, P_GLOBAL, &Globals.iTotalPrintJobs, NULL, NULL, FLAG_PRINT},
+ {"max reported print jobs", P_INTEGER, P_LOCAL, &sDefault.iMaxReportedPrintJobs, NULL, NULL, FLAG_PRINT},
{"max print jobs", P_INTEGER, P_LOCAL, &sDefault.iMaxPrintJobs, NULL, NULL, FLAG_PRINT},
{"load printers", P_BOOL, P_GLOBAL, &Globals.bLoadPrinters, NULL, NULL, FLAG_PRINT},
{"printcap name", P_STRING, P_GLOBAL, &Globals.szPrintcapname, NULL, NULL, FLAG_PRINT | FLAG_DEVELOPER},
@@ -1815,6 +1818,7 @@ FN_LOCAL_INTEGER(lp_max_connections, iMaxConnections)
FN_LOCAL_INTEGER(lp_defaultcase, iDefaultCase)
FN_LOCAL_INTEGER(lp_minprintspace, iMinPrintSpace)
FN_LOCAL_INTEGER(lp_printing, iPrinting)
+FN_LOCAL_INTEGER(lp_max_reported_jobs, iMaxReportedPrintJobs)
FN_LOCAL_INTEGER(lp_oplock_contention_limit, iOplockContentionLimit)
FN_LOCAL_INTEGER(lp_csc_policy, iCSCPolicy)
FN_LOCAL_INTEGER(lp_write_cache_size, iWriteCacheSize)
diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c
index 4006d0c08e..b321832930 100644
--- a/source3/rpc_server/srv_spoolss_nt.c
+++ b/source3/rpc_server/srv_spoolss_nt.c
@@ -6323,6 +6323,7 @@ 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);
@@ -6336,6 +6337,8 @@ 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));
@@ -6344,6 +6347,9 @@ 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);