From 1d72983b526c5bd7adf10c7af9b45b82f80382e0 Mon Sep 17 00:00:00 2001 From: mkasik Date: Tue, 23 Feb 2010 13:24:32 +0000 Subject: [PATCH] - Make cph_cups_job_get_status() efficient - Resolves: #548771 --- cups-pk-helper-job-status.patch | 55 +++++++++++++++++++++++++++++++++ cups-pk-helper.spec | 8 ++++- 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 cups-pk-helper-job-status.patch diff --git a/cups-pk-helper-job-status.patch b/cups-pk-helper-job-status.patch new file mode 100644 index 0000000..5158d20 --- /dev/null +++ b/cups-pk-helper-job-status.patch @@ -0,0 +1,55 @@ +--- cups-pk-helper-0.0.4/src/cups.c.job-status 2010-02-23 13:21:27.000000000 +0100 ++++ cups-pk-helper-0.0.4/src/cups.c 2010-02-23 13:21:27.000000000 +0100 +@@ -1787,19 +1787,34 @@ cph_cups_job_get_status (CphCups *cup + int job_id, + const char *user) + { +- CphJobStatus status = CPH_JOB_STATUS_INVALID; +- cups_job_t *jobs; +- int num_jobs; +- int i; ++ const char * const attrs[1] = { "job-originating-user-name" }; ++ ipp_t *request; ++ const char *resource_char; ++ ipp_t *reply; ++ ipp_attribute_t *attr; ++ CphJobStatus status = CPH_JOB_STATUS_INVALID; + + g_return_val_if_fail (CPH_IS_CUPS (cups), CPH_JOB_STATUS_INVALID); + +- num_jobs = cupsGetJobs2 (cups->priv->connection, &jobs, NULL, 0, 0); ++ if (!_cph_cups_is_job_id_valid (cups, job_id)) ++ return CPH_JOB_STATUS_INVALID; ++ ++ request = ippNewRequest (IPP_GET_JOB_ATTRIBUTES); ++ _cph_cups_add_job_uri (request, job_id); ++ ippAddStrings (request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, ++ "requested-attributes", 1, NULL, attrs); ++ ++ resource_char = _cph_cups_get_resource (CPH_RESOURCE_ROOT); ++ reply = cupsDoRequest (cups->priv->connection, ++ request, resource_char); + +- for (i = 0; i < num_jobs; i++) { +- if (jobs[i].id == job_id) { +- if (user != NULL && +- g_strcmp0 (jobs[i].user, user) == 0) ++ if (!reply || reply->request.status.status_code > IPP_OK_CONFLICT) ++ return CPH_JOB_STATUS_INVALID; ++ ++ for (attr = reply->attrs; attr; attr = attr->next) { ++ if (attr->name && ++ strcmp (attr->name, "job-originating-user-name") == 0) { ++ if (g_strcmp0 (attr->values[0].string.text, user) == 0) + status = CPH_JOB_STATUS_OWNED_BY_USER; + else + status = CPH_JOB_STATUS_NOT_OWNED_BY_USER; +@@ -1807,7 +1822,7 @@ cph_cups_job_get_status (CphCups *cup + } + } + +- cupsFreeJobs (num_jobs, jobs); ++ ippDelete (reply); + + return status; + } diff --git a/cups-pk-helper.spec b/cups-pk-helper.spec index adcc737..58a5063 100644 --- a/cups-pk-helper.spec +++ b/cups-pk-helper.spec @@ -1,6 +1,6 @@ Name: cups-pk-helper Version: 0.0.4 -Release: 10%{?dist} +Release: 11%{?dist} Summary: A helper that makes system-config-printer use PolicyKit Group: System Environment/Base @@ -15,6 +15,7 @@ Patch3: edit_job.patch Patch4: cups-pk-helper-ppd-name.patch Patch5: allow_authentication.patch Patch6: cups-pk-helper-add-printer-ppd-optional.patch +Patch7: cups-pk-helper-job-status.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -51,6 +52,7 @@ interfaces available under control of PolicyKit. %patch4 -p1 -b .ppd-name %patch5 -p1 -b .allow_auth %patch6 -p1 -b .ppd +%patch7 -p1 -b .job-status %build # Patch0 modifies configure.ac @@ -80,6 +82,10 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Tue Feb 23 2010 Marek Kasik - 0.0.4-11 +- Make cph_cups_job_get_status() efficient +- Resolves: #548771 + * Tue Feb 23 2010 Marek Kasik - 0.0.4-10 - Fix adding of printers without specification of ppd-name. - Patch by Tim Waugh.