/*
- * "$Id: quotas.c 6947 2007-09-12 21:09:49Z mike $"
+ * Quota routines for the CUPS scheduler.
*
- * Quota routines for the Common UNIX Printing System (CUPS).
+ * Copyright 2007-2011 by Apple Inc.
+ * Copyright 1997-2007 by Easy Software Products.
*
- * Copyright 2007 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
- * law. Distribution and use rights are outlined in the file "LICENSE.txt"
- * which should have been included with this file. If this file is
- * file is missing or damaged, see the license at "http://www.cups.org/".
- *
- * Contents:
- *
- * cupsdFindQuota() - Find a quota record.
- * cupsdFreeQuotas() - Free quotas for a printer.
- * cupsdUpdateQuota() - Update quota data for the specified printer and user.
- * add_quota() - Add a quota record for this printer and user.
- * compare_quotas() - Compare two quota records...
+ * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
*/
/*
"cupsdUpdateQuota: p=%s username=%s pages=%d k=%d",
p->name, username, pages, k);
-#if defined(__APPLE__) && defined(HAVE_DLFCN_H)
- /*
- * Use Apple PrintService quota enforcement if installed (X Server only)
- */
-
- if (AppleQuotas && PSQUpdateQuotaProc)
- {
- q->page_count = (*PSQUpdateQuotaProc)(p->name, p->info, username, pages, 0);
-
- return (q);
- }
-#endif /* __APPLE__ && HAVE_DLFCN_H */
-
curtime = time(NULL);
if (curtime < q->next_update)
job;
job = (cupsd_job_t *)cupsArrayNext(Jobs))
{
- if (strcasecmp(job->dest, p->name) != 0 ||
- strcasecmp(job->username, q->username) != 0)
+ /*
+ * We only care about the current printer/class and user...
+ */
+
+ if (_cups_strcasecmp(job->dest, p->name) != 0 ||
+ _cups_strcasecmp(job->username, q->username) != 0)
+ continue;
+
+ /*
+ * Make sure attributes are loaded; we always call cupsdLoadJob() to ensure
+ * the access_time member is updated so the job isn't unloaded right away...
+ */
+
+ if (!cupsdLoadJob(job))
continue;
if ((attr = ippFindAttribute(job->attrs, "time-at-completion",
attr = ippFindAttribute(job->attrs, "time-at-creation",
IPP_TAG_INTEGER);
- if (attr == NULL)
- break;
-
if (attr->values[0].integer < curtime)
{
- if (JobAutoPurge)
- cupsdCancelJob(job, 1, IPP_JOB_CANCELED);
+ /*
+ * This job is too old to count towards the quota, ignore it...
+ */
+
+ if (JobAutoPurge && !job->printer && job->state_value > IPP_JOB_STOPPED)
+ cupsdDeleteJob(job, CUPSD_JOB_PURGE);
continue;
}
compare_quotas(const cupsd_quota_t *q1, /* I - First quota record */
const cupsd_quota_t *q2) /* I - Second quota record */
{
- return (strcasecmp(q1->username, q2->username));
+ return (_cups_strcasecmp(q1->username, q2->username));
}
-
-
-/*
- * End of "$Id: quotas.c 6947 2007-09-12 21:09:49Z mike $".
- */