diff --git a/allow_authentication.patch b/allow_authentication.patch index 17be7e9..47e4473 100644 --- a/allow_authentication.patch +++ b/allow_authentication.patch @@ -1,8 +1,8 @@ ---- cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in 2009-12-02 16:43:41.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in 2009-12-03 14:13:47.000000000 +0100 -@@ -15,7 +15,8 @@ - Set a printer as default printer - Privileges are required to set a printer, or a class, as default printer. +--- cups-pk-helper-0.1.3/src/org.opensuse.cupspkhelper.mechanism.policy.in 2011-07-05 14:07:05.000000000 +0200 ++++ cups-pk-helper-0.1.3/src/org.opensuse.cupspkhelper.mechanism.policy.in 2011-09-02 11:34:12.000000000 +0200 +@@ -12,7 +12,8 @@ + <_description>Get/Set server settings + <_message>Privileges are required to get/set server settings. - no + auth_admin @@ -10,9 +10,9 @@ auth_admin_keep -@@ -27,7 +28,8 @@ - Enable/Disable a printer - Privileges are required to enable/disable a printer, or a class. +@@ -21,7 +22,8 @@ + <_description>Get list of available devices + <_message>Privileges are required to get list of available devices. - no + auth_admin @@ -20,9 +20,9 @@ auth_admin_keep -@@ -36,7 +38,8 @@ - Add/Remove/Edit a local printer - Privileges are required to add/remove/edit a local printer. +@@ -33,7 +35,8 @@ + <_description>Set a printer as default printer + <_message>Privileges are required to set a printer, or a class, as default printer. - no + auth_admin @@ -31,8 +31,8 @@ @@ -45,7 +48,8 @@ - Add/Remove/Edit a remote printer - Privileges are required to add/remove/edit a remote printer. + <_description>Enable/Disable a printer + <_message>Privileges are required to enable/disable a printer, or a class. - no + auth_admin @@ -41,8 +41,8 @@ @@ -54,7 +58,8 @@ - Add/Remove/Edit a class - Privileges are required to add/remove/edit a class. + <_description>Add/Remove/Edit a local printer + <_message>Privileges are required to add/remove/edit a local printer. - no + auth_admin @@ -51,8 +51,8 @@ @@ -63,7 +68,8 @@ - Get/Set server settings - Privileges are required to get/set server settings. + <_description>Add/Remove/Edit a remote printer + <_message>Privileges are required to add/remove/edit a remote printer. - no + auth_admin @@ -61,28 +61,38 @@ @@ -72,7 +78,8 @@ - Restart/Cancel/Edit a job - Privileges are required to restart/cancel/edit a job. + <_description>Add/Remove/Edit a class + <_message>Privileges are required to add/remove/edit a class. - no + auth_admin + auth_admin - yes + auth_admin_keep @@ -81,7 +88,8 @@ - Restart/Cancel/Edit a job owned by another user - Privileges are required to restart/cancel/edit a job owned by another user. + <_description>Restart/Cancel/Edit a job + <_message>Privileges are required to restart/cancel/edit a job. - no + auth_admin + auth_admin - auth_admin_keep + yes @@ -90,7 +98,8 @@ - Get devices - Privileges are required to get devices. + <_description>Restart/Cancel/Edit a job owned by another user + <_message>Privileges are required to restart/cancel/edit a job owned by another user. + +- no ++ auth_admin ++ auth_admin + auth_admin_keep + + +@@ -99,7 +108,8 @@ + <_description>Change printer settings + <_message>Privileges are required to change printer settings. This should only be needed from the Printers system settings panel. - no + auth_admin @@ -90,9 +100,9 @@ auth_admin_keep -@@ -100,7 +109,8 @@ - Add/Remove/Edit a printer - Privileges are required to add/remove/edit a printer. +@@ -109,7 +119,8 @@ + <_description>Add/Remove/Edit a printer + <_message>Privileges are required to add/remove/edit a printer. - no + auth_admin diff --git a/cups-pk-helper-invalid-job.patch b/cups-pk-helper-invalid-job.patch deleted file mode 100644 index c1904c3..0000000 --- a/cups-pk-helper-invalid-job.patch +++ /dev/null @@ -1,115 +0,0 @@ ---- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c.invalid-job 2010-02-23 13:21:27.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2010-02-23 13:33:08.000000000 +0100 -@@ -439,8 +439,11 @@ _cph_mechanism_return_error (CphMechanis - { - const char *error; - -- if (failed) -+ if (failed) { - error = cph_cups_last_status_to_string (mechanism->priv->cups); -+ if (!error || error[0] == '\0') -+ error = "Unknown error"; -+ } - else - error = ""; - -@@ -455,8 +458,11 @@ _cph_mechanism_return_error_and_value (C - { - const char *error; - -- if (failed) -+ if (failed) { - error = cph_cups_last_status_to_string (mechanism->priv->cups); -+ if (!error || error[0] == '\0') -+ error = "Unknown error"; -+ } - else - error = ""; - -@@ -996,18 +1002,25 @@ cph_mechanism_job_cancel (CphMechanism - case CPH_JOB_STATUS_OWNED_BY_USER: { - if (!_check_polkit_for_action_v (mechanism, context, - "job-edit", -- NULL)) -+ NULL)) { -+ g_free (user_name); - return FALSE; -+ } - break; - } - case CPH_JOB_STATUS_NOT_OWNED_BY_USER: { - if (!_check_polkit_for_action (mechanism, context, -- "job-not-owned-edit")) -+ "job-not-owned-edit")) { -+ g_free (user_name); - return FALSE; -+ } - break; - } -- case CPH_JOB_STATUS_INVALID: -+ case CPH_JOB_STATUS_INVALID: { -+ _cph_mechanism_return_error (mechanism, context, TRUE); -+ g_free (user_name); - return FALSE; -+ } - } - - ret = cph_cups_job_cancel (mechanism->priv->cups, id, user_name); -@@ -1037,18 +1050,25 @@ cph_mechanism_job_restart (CphMechanism - case CPH_JOB_STATUS_OWNED_BY_USER: { - if (!_check_polkit_for_action_v (mechanism, context, - "job-edit", -- NULL)) -+ NULL)) { -+ g_free (user_name); - return FALSE; -+ } - break; - } - case CPH_JOB_STATUS_NOT_OWNED_BY_USER: { - if (!_check_polkit_for_action (mechanism, context, -- "job-not-owned-edit")) -+ "job-not-owned-edit")) { -+ g_free (user_name); - return FALSE; -+ } - break; - } -- case CPH_JOB_STATUS_INVALID: -+ case CPH_JOB_STATUS_INVALID: { -+ _cph_mechanism_return_error (mechanism, context, TRUE); -+ g_free (user_name); - return FALSE; -+ } - } - - ret = cph_cups_job_restart (mechanism->priv->cups, id, user_name); -@@ -1079,18 +1099,25 @@ cph_mechanism_job_set_hold_until (CphMec - case CPH_JOB_STATUS_OWNED_BY_USER: { - if (!_check_polkit_for_action_v (mechanism, context, - "job-edit", -- NULL)) -+ NULL)) { -+ g_free (user_name); - return FALSE; -+ } - break; - } - case CPH_JOB_STATUS_NOT_OWNED_BY_USER: { - if (!_check_polkit_for_action (mechanism, context, -- "job-not-owned-edit")) -+ "job-not-owned-edit")) { -+ g_free (user_name); - return FALSE; -+ } - break; - } -- case CPH_JOB_STATUS_INVALID: -+ case CPH_JOB_STATUS_INVALID: { -+ _cph_mechanism_return_error (mechanism, context, TRUE); -+ g_free (user_name); - return FALSE; -+ } - } - - ret = cph_cups_job_set_hold_until (mechanism->priv->cups, id, job_hold_until, user_name); diff --git a/cups-pk-helper-job-status.patch b/cups-pk-helper-job-status.patch deleted file mode 100644 index 5158d20..0000000 --- a/cups-pk-helper-job-status.patch +++ /dev/null @@ -1,55 +0,0 @@ ---- 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-jobcancelpurge.patch b/cups-pk-helper-jobcancelpurge.patch deleted file mode 100644 index 40b38ce..0000000 --- a/cups-pk-helper-jobcancelpurge.patch +++ /dev/null @@ -1,113 +0,0 @@ ---- cups-pk-helper-0.0.4/src/cups.c 2010-03-22 15:41:36.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups.c 2010-03-22 15:41:36.000000000 +0100 -@@ -1726,8 +1726,11 @@ cph_cups_server_set_settings (CphCups - gboolean - cph_cups_job_cancel (CphCups *cups, - int job_id, -+ gboolean purge_job, - const char *user_name) - { -+ ipp_t *request; -+ - g_return_val_if_fail (CPH_IS_CUPS (cups), FALSE); - - if (!_cph_cups_is_job_id_valid (cups, job_id)) -@@ -1735,10 +1738,19 @@ cph_cups_job_cancel (CphCups *cups, - /* we don't check if the user name is valid or not because it comes - * from getpwuid(), and not dbus */ - -- return _cph_cups_send_new_simple_job_request (cups, IPP_CANCEL_JOB, -- job_id, -- user_name, -- CPH_RESOURCE_JOBS); -+ request = ippNewRequest (IPP_CANCEL_JOB); -+ _cph_cups_add_job_uri (request, job_id); -+ -+ if (user_name != NULL) -+ ippAddString (request, IPP_TAG_OPERATION, IPP_TAG_NAME, -+ "requesting-user-name", NULL, user_name); -+ -+#if (CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR >= 4) || CUPS_VERSION_MAJOR > 1 -+ if (purge_job) -+ ippAddBoolean (request, IPP_TAG_OPERATION, "purge-job", 1); -+#endif -+ -+ return _cph_cups_send_request (cups, request, CPH_RESOURCE_JOBS); - } - - gboolean ---- cups-pk-helper-0.0.4/src/cups.h 2010-03-22 15:41:36.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups.h 2010-03-22 15:41:36.000000000 +0100 -@@ -169,6 +169,7 @@ gboolean cph_cups_is_printer_uri_local ( - - gboolean cph_cups_job_cancel (CphCups *cups, - int job_id, -+ gboolean purge_job, - const char *user_name); - - gboolean cph_cups_job_restart (CphCups *cups, ---- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2010-03-22 15:41:36.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2010-03-22 15:43:33.000000000 +0100 -@@ -988,6 +988,15 @@ cph_mechanism_job_cancel (CphMechanism - int id, - DBusGMethodInvocation *context) - { -+ return cph_mechanism_job_cancel_purge (mechanism, id, FALSE, context); -+} -+ -+gboolean -+cph_mechanism_job_cancel_purge (CphMechanism *mechanism, -+ int id, -+ gboolean purge, -+ DBusGMethodInvocation *context) -+{ - CphJobStatus job_status; - gboolean ret; - char *user_name; -@@ -1023,7 +1032,7 @@ cph_mechanism_job_cancel (CphMechanism - } - } - -- ret = cph_cups_job_cancel (mechanism->priv->cups, id, user_name); -+ ret = cph_cups_job_cancel (mechanism->priv->cups, id, purge, user_name); - _cph_mechanism_return_error (mechanism, context, !ret); - - g_free (user_name); ---- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.h 2010-03-22 15:41:36.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.h 2010-03-22 15:41:36.000000000 +0100 -@@ -226,6 +226,12 @@ cph_mechanism_job_cancel (CphMechanism - DBusGMethodInvocation *context); - - gboolean -+cph_mechanism_job_cancel_purge (CphMechanism *mechanism, -+ int id, -+ gboolean purge, -+ DBusGMethodInvocation *context); -+ -+gboolean - cph_mechanism_job_restart (CphMechanism *mechanism, - int id, - DBusGMethodInvocation *context); ---- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.xml 2010-03-22 15:41:36.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.xml 2010-03-22 15:44:36.000000000 +0100 -@@ -174,12 +174,20 @@ - - - -+ - - - - - - -+ -+ -+ -+ -+ -+ -+ - - - diff --git a/cups-pk-helper-ppd-name.patch b/cups-pk-helper-ppd-name.patch deleted file mode 100644 index ff58778..0000000 --- a/cups-pk-helper-ppd-name.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- cups-pk-helper-0.0.4/src/cups.c 2009-09-30 10:38:21.895761263 +0100 -+++ cups-pk-helper-0.0.4/src/cups.c 2009-09-30 10:44:07.794636125 +0100 -@@ -2,8 +2,9 @@ - * vim: set et ts=8 sw=8: - * - * Copyright (C) 2008 Novell, Inc. -+ * Copyright (C) 2009 Red Hat, Inc. - * -- * Authors: Vincent Untz -+ * Authors: Vincent Untz, Tim Waugh - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by -@@ -997,11 +998,13 @@ cph_cups_printer_add (CphCups *cups, - - ippAddString (request, IPP_TAG_PRINTER, IPP_TAG_NAME, - "printer-name", NULL, printer_name); -- ippAddString (request, IPP_TAG_PRINTER, IPP_TAG_URI, -- "device-uri", NULL, printer_uri); - ippAddString (request, IPP_TAG_PRINTER, IPP_TAG_NAME, - "ppd-name", NULL, ppd_file); - -+ if (printer_uri && printer_uri[0] != '\0') { -+ ippAddString (request, IPP_TAG_PRINTER, IPP_TAG_URI, -+ "device-uri", NULL, printer_uri); -+ } - if (info && info[0] != '\0') { - ippAddString (request, IPP_TAG_PRINTER, IPP_TAG_TEXT, - "printer-info", NULL, info); diff --git a/cups-pk-helper.spec b/cups-pk-helper.spec index 6e44ede..f2bd2f0 100644 --- a/cups-pk-helper.spec +++ b/cups-pk-helper.spec @@ -1,6 +1,6 @@ Name: cups-pk-helper Version: 0.1.3 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A helper that makes system-config-printer use PolicyKit Group: System Environment/Base @@ -9,6 +9,9 @@ URL: http://www.vuntz.net/download/cups-pk-helper/ Source0: http://cgit.freedesktop.org/cups-pk-helper/snapshot/cups-pk-helper-%{version}.tar.bz2 Patch0: cups-pk-helper-check-mechanism.patch +Patch1: cups-pk-helper-add-printer-ppd-optional.patch +Patch2: polkit_result.patch +Patch3: allow_authentication.patch BuildRequires: libtool >= 1.4.3 BuildRequires: cups-devel >= 1.2 @@ -38,6 +41,10 @@ interfaces available under control of PolicyKit. %setup -q %patch0 -p1 -b .check-mechanism +%patch1 -p1 -b .ppd +%patch2 -p1 -b .polkit-result +%patch3 -p1 -b .allow_auth + %build # grr, tarball without configure @@ -64,6 +71,12 @@ make install DESTDIR=$RPM_BUILD_ROOT %changelog +* Fri Sep 2 2011 Marek Kasik - 0.1.3-2 +- Make ppd-name parameter optional +- Readd patch for allowing authentication for any and inactive users +- Readd patch for check of result of polkit authorization check +- Resolves: #724959 + * Fri Aug 5 2011 Marek Kasik - 0.1.3-1 - Update to 0.1.3 - Fix #724959 diff --git a/edit_job.patch b/edit_job.patch deleted file mode 100644 index 14fc5ce..0000000 --- a/edit_job.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2009-08-18 18:50:55.000000000 +0200 -+++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2009-08-18 18:51:28.000000000 +0200 -@@ -995,7 +995,6 @@ cph_mechanism_job_cancel (CphMechanism - switch (job_status) { - case CPH_JOB_STATUS_OWNED_BY_USER: { - if (!_check_polkit_for_action_v (mechanism, context, -- "job-not-owned-edit", - "job-edit", - NULL)) - return FALSE; -@@ -1037,7 +1036,6 @@ cph_mechanism_job_restart (CphMechanism - switch (job_status) { - case CPH_JOB_STATUS_OWNED_BY_USER: { - if (!_check_polkit_for_action_v (mechanism, context, -- "job-not-owned-edit", - "job-edit", - NULL)) - return FALSE; -@@ -1080,7 +1078,6 @@ cph_mechanism_job_set_hold_until (CphMec - switch (job_status) { - case CPH_JOB_STATUS_OWNED_BY_USER: { - if (!_check_polkit_for_action_v (mechanism, context, -- "job-not-owned-edit", - "job-edit", - NULL)) - return FALSE; diff --git a/get_devices.patch b/get_devices.patch deleted file mode 100644 index 3b14707..0000000 --- a/get_devices.patch +++ /dev/null @@ -1,299 +0,0 @@ ---- cups-pk-helper-0.0.4/src/cups.c 2009-03-04 13:41:53.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups.c 2009-08-13 12:15:47.000000000 +0200 -@@ -58,7 +58,7 @@ - getPPDs - getServerPPD - getDocument -- getDevices -+~!+* getDevices - getJobs - getJobAttributes - ~!+* cancelJob -@@ -1807,6 +1807,192 @@ cph_cups_job_get_status (CphCups *cup - return status; - } - -+struct _CphCupsGetDevices { -+ int iter; -+ GHashTable *hash; -+}; -+ -+static void -+_cph_cups_get_devices_cb (const char *device_class, -+ const char *device_id, -+ const char *device_info, -+ const char *device_make_and_model, -+ const char *device_uri, -+ const char *device_location, -+ void *user_data) -+{ -+ struct _CphCupsGetDevices *data = user_data; -+ -+ g_return_if_fail (data != NULL); -+ -+ if (device_class && device_class[0] != '\0') -+ g_hash_table_replace (data->hash, -+ g_strdup_printf ("device-class:%d", -+ data->iter), -+ g_strdup (device_class)); -+ if (device_id && device_id[0] != '\0') -+ g_hash_table_replace (data->hash, -+ g_strdup_printf ("device-id:%d", -+ data->iter), -+ g_strdup (device_id)); -+ if (device_info && device_info[0] != '\0') -+ g_hash_table_replace (data->hash, -+ g_strdup_printf ("device-info:%d", -+ data->iter), -+ g_strdup (device_info)); -+ if (device_make_and_model && device_make_and_model[0] != '\0') -+ g_hash_table_replace (data->hash, -+ g_strdup_printf ("device-make-and-model:%d", -+ data->iter), -+ g_strdup (device_make_and_model)); -+ if (device_uri && device_uri[0] != '\0') -+ g_hash_table_replace (data->hash, -+ g_strdup_printf ("device-uri:%d", -+ data->iter), -+ g_strdup (device_uri)); -+ if (device_location && device_location[0] != '\0') -+ g_hash_table_replace (data->hash, -+ g_strdup_printf ("device-location:%d ", -+ data->iter), -+ g_strdup (device_location)); -+ -+ data->iter++; -+} -+ -+GHashTable * -+cph_cups_devices_get (CphCups *cups, -+ int timeout, -+ const char *include_schemes, -+ const char *exclude_schemes) -+{ -+ struct _CphCupsGetDevices data; -+ char *error_str; -+ -+ g_return_val_if_fail (CPH_IS_CUPS (cups), NULL); -+ -+ data.iter = 0; -+ data.hash = g_hash_table_new_full (g_str_hash, g_str_equal, -+ g_free, g_free); -+ -+#if (CUPS_VERSION_MAJOR == 1 && CUPS_VERSION_MINOR >= 4) || CUPS_VERSION_MAJOR > 1 -+ ipp_status_t retval; -+ int timeout_param = CUPS_TIMEOUT_DEFAULT; -+ char *include_schemes_param = (char *) CUPS_INCLUDE_ALL; -+ char *exclude_schemes_param = (char *) CUPS_EXCLUDE_NONE; -+ -+ if (timeout > 0) -+ timeout_param = timeout; -+ -+ if (include_schemes && strlen (include_schemes) > 0) -+ include_schemes_param = g_strdup (include_schemes); -+ -+ if (exclude_schemes && strlen (exclude_schemes) > 0) -+ exclude_schemes_param = g_strdup (exclude_schemes); -+ -+ retval = cupsGetDevices (cups->priv->connection, -+ timeout_param, -+ include_schemes_param, -+ exclude_schemes_param, -+ _cph_cups_get_devices_cb, -+ &data); -+ -+ g_free (include_schemes_param); -+ g_free (exclude_schemes_param); -+ -+ if (retval != IPP_OK) -+ goto error; -+#else -+ ipp_t *request; -+ const char *resource_char; -+ ipp_t *reply; -+ ipp_attribute_t *attr; -+ const char *device_class; -+ const char *device_id; -+ const char *device_info; -+ const char *device_location; -+ const char *device_make_and_model; -+ const char *device_uri; -+ -+ request = ippNewRequest (CUPS_GET_DEVICES); -+ resource_char = _cph_cups_get_resource (CPH_RESOURCE_ROOT); -+ reply = cupsDoRequest (cups->priv->connection, -+ request, resource_char); -+ -+ if (!reply) -+ goto error; -+ -+ for (attr = reply->attrs; attr; attr = attr->next) { -+ while (attr && attr->group_tag != IPP_TAG_PRINTER) -+ attr = attr->next; -+ -+ if (attr == NULL) -+ break; -+ -+ device_class = NULL; -+ device_id = NULL; -+ device_info = NULL; -+ device_location = ""; -+ device_make_and_model = NULL; -+ device_uri = NULL; -+ -+ while (attr && attr->group_tag == IPP_TAG_PRINTER) { -+ g_message ("name: %s", attr->name); -+ if (attr->name && -+ strcmp (attr->name, "device-class") == 0 && -+ attr->value_tag == IPP_TAG_KEYWORD) -+ device_class = g_strdup (attr->values[0].string.text); -+ else if (attr->name && -+ strcmp (attr->name, "device-id") == 0 && -+ attr->value_tag == IPP_TAG_TEXT) -+ device_id = g_strdup (attr->values[0].string.text); -+ else if (attr->name && -+ strcmp (attr->name, "device-info") == 0 && -+ attr->value_tag == IPP_TAG_TEXT) -+ device_info = g_strdup (attr->values[0].string.text); -+ else if (attr->name && -+ strcmp (attr->name, "device-location") == 0 && -+ attr->value_tag == IPP_TAG_TEXT) -+ device_location = g_strdup (attr->values[0].string.text); -+ else if (attr->name && -+ strcmp (attr->name, "device-make-and-model") == 0 && -+ attr->value_tag == IPP_TAG_TEXT) -+ device_make_and_model = g_strdup (attr->values[0].string.text); -+ else if (attr->name && -+ strcmp (attr->name, "device-uri") == 0 && -+ attr->value_tag == IPP_TAG_URI) -+ device_uri = g_strdup (attr->values[0].string.text); -+ -+ attr = attr->next; -+ } -+ -+ if (device_class && device_id && device_info && device_make_and_model && -+ device_uri) -+ _cph_cups_get_devices_cb (device_class, -+ device_id, -+ device_info, -+ device_make_and_model, -+ device_uri, -+ device_location, -+ &data); -+ -+ if (attr == NULL) -+ break; -+ } -+ -+ ippDelete (reply); -+#endif -+ -+ return data.hash; -+ -+error: -+ error_str = g_strdup ("Can not get devices."); -+ _cph_cups_set_internal_status (cups, error_str); -+ g_hash_table_destroy (data.hash); -+ g_free (error_str); -+ -+ return NULL; -+} -+ - /****************************************************** - * Non-object functions - ******************************************************/ ---- cups-pk-helper-0.0.4/src/cups.h 2009-02-28 03:38:13.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups.h 2009-08-13 12:16:08.000000000 +0200 -@@ -184,6 +184,11 @@ CphJobStatus cph_cups_job_get_status (Cp - int job_id, - const char *user); - -+GHashTable *cph_cups_devices_get (CphCups *cups, -+ int timeout, -+ const char *include_schemes, -+ const char *exclude_schemes); -+ - G_END_DECLS - - #endif /* CPH_CUPS_H */ ---- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2009-08-13 12:14:09.000000000 +0200 -+++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2009-08-13 12:16:48.000000000 +0200 -@@ -1103,3 +1103,27 @@ cph_mechanism_job_set_hold_until (CphMec - - return TRUE; - } -+ -+gboolean -+cph_mechanism_devices_get (CphMechanism *mechanism, -+ int timeout, -+ const char *include_schemes, -+ const char *exclude_schemes, -+ DBusGMethodInvocation *context) -+{ -+ GHashTable *devices; -+ -+ reset_killtimer (mechanism); -+ -+ if (!_check_polkit_for_action (mechanism, context, "devices-get")) -+ return FALSE; -+ -+ devices = cph_cups_devices_get (mechanism->priv->cups, -+ timeout, -+ include_schemes, -+ exclude_schemes); -+ _cph_mechanism_return_error_and_value (mechanism, context, -+ devices == NULL, devices); -+ -+ return TRUE; -+} ---- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.h 2009-02-28 03:38:13.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.h 2009-08-13 12:17:10.000000000 +0200 -@@ -236,6 +236,13 @@ cph_mechanism_job_set_hold_until (CphMec - const char *job_hold_until, - DBusGMethodInvocation *context); - -+gboolean -+cph_mechanism_devices_get (CphMechanism *mechanism, -+ int timeout, -+ const char *include_schemes, -+ const char *exclude_schemes, -+ DBusGMethodInvocation *context); -+ - G_END_DECLS - - #endif /* CPH_MECHANISM_H */ ---- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.xml 2009-02-28 03:38:13.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.xml 2009-08-13 12:17:36.000000000 +0200 -@@ -192,5 +192,14 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ - - ---- cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in 2009-08-13 12:14:09.000000000 +0200 -+++ cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in 2009-08-13 12:18:24.000000000 +0200 -@@ -86,6 +86,15 @@ - - - -+ -+ <_description>Get devices -+ <_message>Privileges are required to get devices. -+ -+ no -+ auth_admin_keep -+ -+ -+ - - - <_description>Add/Remove/Edit a printer diff --git a/polkit-1.patch b/polkit-1.patch deleted file mode 100644 index b222824..0000000 --- a/polkit-1.patch +++ /dev/null @@ -1,260 +0,0 @@ ---- cups-pk-helper-0.0.4/configure.ac 2009-03-04 13:43:52.000000000 +0100 -+++ cups-pk-helper-0.0.4/configure.ac 2009-06-18 13:37:25.000000000 +0200 -@@ -42,8 +42,8 @@ fi - GLIB_REQUIRED=2.14.0 - DBUS_REQUIRED=1.1.2 - DBUS_GLIB_REQUIRED=0.74 --POLKIT_DBUS_REQUIRED=0.8 - GTK_REQUIRED=2.12.0 -+POLKIT_REQUIRED=0.92 - - # pkg-config dependency checks - PKG_CHECK_MODULES(CUPS_PK, glib-2.0 >= $GLIB_REQUIRED \ -@@ -52,7 +52,7 @@ PKG_CHECK_MODULES(CUPS_PK, glib-2.0 >= $ - gthread-2.0 \ - dbus-1 >= $DBUS_REQUIRED \ - dbus-glib-1 >= $DBUS_GLIB_REQUIRED \ -- polkit-dbus >= $POLKIT_DBUS_REQUIRED) -+ polkit-gobject-1 >= $POLKIT_REQUIRED) - AC_SUBST(CUPS_PK_CFLAGS) - AC_SUBST(CUPS_PK_LIBS) - ---- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2009-02-28 03:38:13.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2009-06-18 14:24:13.000000000 +0200 -@@ -45,7 +45,7 @@ - #include - #include - --#include -+#include - - #include - -@@ -124,7 +124,7 @@ G_DEFINE_TYPE (CphMechanism, cph_mechani - struct CphMechanismPrivate - { - DBusGConnection *system_bus_connection; -- PolKitContext *pol_ctx; -+ PolkitAuthority *pol_auth; - CphCups *cups; - }; - -@@ -201,59 +201,11 @@ cph_mechanism_finalize (GObject *object) - } - - static gboolean --pk_io_watch_have_data (GIOChannel *channel, -- GIOCondition condition, -- gpointer user_data) --{ -- int fd; -- PolKitContext *pk_context; -- -- pk_context = user_data; -- fd = g_io_channel_unix_get_fd (channel); -- polkit_context_io_func (pk_context, fd); -- -- return TRUE; --} -- --static int --pk_io_add_watch (PolKitContext *pk_context, -- int fd) --{ -- guint id; -- GIOChannel *channel; -- -- channel = g_io_channel_unix_new (fd); -- if (channel == NULL) -- return 0; -- -- id = g_io_add_watch (channel, G_IO_IN, -- pk_io_watch_have_data, pk_context); -- -- return id; --} -- --static void --pk_io_remove_watch (PolKitContext *pk_context, -- int watch_id) --{ -- g_source_remove (watch_id); --} -- --static gboolean - register_mechanism (CphMechanism *mechanism) - { - GError *error; - -- mechanism->priv->pol_ctx = polkit_context_new (); -- -- polkit_context_set_io_watch_functions (mechanism->priv->pol_ctx, -- pk_io_add_watch, -- pk_io_remove_watch); -- -- if (!polkit_context_init (mechanism->priv->pol_ctx, NULL)) { -- g_critical ("cannot initialize libpolkit"); -- return FALSE; -- } -+ mechanism->priv->pol_auth = polkit_authority_get (); - - error = NULL; - mechanism->priv->system_bus_connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, -@@ -299,11 +251,10 @@ _check_polkit_for_action_internal (CphMe - const char *action_method, - GError **error) - { -- const char *sender; -+ char *sender; - DBusError dbus_error; -- PolKitCaller *pk_caller; -- PolKitAction *pk_action; -- PolKitResult pk_result; -+ PolkitSubject *pk_caller; -+ PolkitAuthorizationResult *pk_result; - char *action; - - g_return_val_if_fail (error == NULL || *error == NULL, FALSE); -@@ -315,44 +266,30 @@ _check_polkit_for_action_internal (CphMe - sender = dbus_g_method_get_sender (context); - dbus_error_init (&dbus_error); - -- pk_caller = polkit_caller_new_from_dbus_name ( -- dbus_g_connection_get_connection (mechanism->priv->system_bus_connection), -- sender, -- &dbus_error); -- -- if (pk_caller == NULL) { -- g_set_error (error, -- CPH_MECHANISM_ERROR, CPH_MECHANISM_ERROR_GENERAL, -- "Error getting information about caller: %s: %s", -- dbus_error.name, dbus_error.message); -- dbus_error_free (&dbus_error); -- g_free (action); -- -- return FALSE; -- } -+ pk_caller = polkit_system_bus_name_new (sender); -+ g_free (sender); - -- pk_action = polkit_action_new (); -- polkit_action_set_action_id (pk_action, action); -- pk_result = polkit_context_is_caller_authorized (mechanism->priv->pol_ctx, -- pk_action, pk_caller, -- FALSE, NULL); -- polkit_caller_unref (pk_caller); -- polkit_action_unref (pk_action); -+ pk_result = polkit_authority_check_authorization_sync (mechanism->priv->pol_auth, -+ pk_caller, -+ action, -+ NULL, -+ POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION, -+ NULL, -+ NULL); -+ g_object_unref (pk_caller); - -- if (pk_result != POLKIT_RESULT_YES) { -+ if (!polkit_authorization_result_get_is_authorized (pk_result)) { - g_set_error (error, - CPH_MECHANISM_ERROR, - CPH_MECHANISM_ERROR_NOT_PRIVILEGED, -- "%s %s <-- (action, result)", -- action, -- polkit_result_to_string_representation (pk_result)); -- dbus_error_free (&dbus_error); -+ "Not Authorized: %s", action); - g_free (action); - - return FALSE; - } - - g_free (action); -+ g_object_unref (pk_result); - - return TRUE; - } ---- cups-pk-helper-0.0.4/src/Makefile.am 2008-09-19 18:25:12.000000000 +0200 -+++ cups-pk-helper-0.0.4/src/Makefile.am 2009-06-18 13:37:25.000000000 +0200 -@@ -46,7 +46,7 @@ BUILT_SOURCES = cups-pk-helper-mechanism - - dbus_servicesdir = $(datadir)/dbus-1/system-services - dbus_confdir = $(sysconfdir)/dbus-1/system.d --polkitdir = $(datadir)/PolicyKit/policy -+polkitdir = $(datadir)/polkit-1/actions - - dbus_services_in_files = org.opensuse.CupsPkHelper.Mechanism.service.in - polkit_in_files = org.opensuse.cupspkhelper.mechanism.policy.in ---- cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in 2009-02-28 03:38:13.000000000 +0100 -+++ cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in 2009-06-18 13:37:25.000000000 +0200 -@@ -16,7 +16,7 @@ - <_message>Privileges are required to set a printer, or a class, as default printer. - - no -- auth_admin -+ auth_admin_keep - - - -@@ -28,7 +28,7 @@ - <_message>Privileges are required to enable/disable a printer, or a class. - - no -- auth_admin -+ auth_admin_keep - - - -@@ -37,7 +37,7 @@ - <_message>Privileges are required to add/remove/edit a local printer. - - no -- auth_admin -+ auth_admin_keep - - - -@@ -46,7 +46,7 @@ - <_message>Privileges are required to add/remove/edit a remote printer. - - no -- auth_admin -+ auth_admin_keep - - - -@@ -55,7 +55,7 @@ - <_message>Privileges are required to add/remove/edit a class. - - no -- auth_admin -+ auth_admin_keep - - - -@@ -64,7 +64,7 @@ - <_message>Privileges are required to get/set server settings. - - no -- auth_admin -+ auth_admin_keep - - - -@@ -82,7 +82,7 @@ - <_message>Privileges are required to restart/cancel/edit a job owned by another user. - - no -- auth_admin -+ auth_admin_keep - - - -@@ -92,7 +92,7 @@ - <_message>Privileges are required to add/remove/edit a printer. - - no -- auth_admin -+ auth_admin_keep - - - diff --git a/polkit_result.patch b/polkit_result.patch index 901b22c..b2a0ac2 100644 --- a/polkit_result.patch +++ b/polkit_result.patch @@ -1,123 +1,11 @@ ---- cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c.polkit-result 2009-08-17 14:55:52.000000000 +0200 -+++ cups-pk-helper-0.0.4/src/cups-pk-helper-mechanism.c 2009-08-17 14:55:52.000000000 +0200 -@@ -278,7 +278,7 @@ _check_polkit_for_action_internal (CphMe - NULL); - g_object_unref (pk_caller); +--- cups-pk-helper-0.1.3/src/cups-pk-helper-mechanism.c 2011-09-02 11:30:26.000000000 +0200 ++++ cups-pk-helper-0.1.3/src/cups-pk-helper-mechanism.c 2011-09-02 11:31:34.000000000 +0200 +@@ -291,7 +291,7 @@ _check_polkit_for_action_internal (CphMe + return FALSE; + } - if (!polkit_authorization_result_get_is_authorized (pk_result)) { + if (pk_result == NULL || !polkit_authorization_result_get_is_authorized (pk_result)) { g_set_error (error, CPH_MECHANISM_ERROR, CPH_MECHANISM_ERROR_NOT_PRIVILEGED, ---- cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in.polkit-result 2009-08-17 14:55:52.000000000 +0200 -+++ cups-pk-helper-0.0.4/src/org.opensuse.cupspkhelper.mechanism.policy.in 2009-08-17 14:55:52.000000000 +0200 -@@ -12,8 +12,8 @@ - operation: if some authorization is required, then the PolicyKit helper - will fallback on printer-X-edit. --> - -- <_description>Set a printer as default printer -- <_message>Privileges are required to set a printer, or a class, as default printer. -+ Set a printer as default printer -+ Privileges are required to set a printer, or a class, as default printer. - - no - auth_admin_keep -@@ -24,8 +24,8 @@ - operation: if some authorization is required, then the PolicyKit helper - will fallback on printer-X-edit. --> - -- <_description>Enable/Disable a printer -- <_message>Privileges are required to enable/disable a printer, or a class. -+ Enable/Disable a printer -+ Privileges are required to enable/disable a printer, or a class. - - no - auth_admin_keep -@@ -33,8 +33,8 @@ - - - -- <_description>Add/Remove/Edit a local printer -- <_message>Privileges are required to add/remove/edit a local printer. -+ Add/Remove/Edit a local printer -+ Privileges are required to add/remove/edit a local printer. - - no - auth_admin_keep -@@ -42,8 +42,8 @@ - - - -- <_description>Add/Remove/Edit a remote printer -- <_message>Privileges are required to add/remove/edit a remote printer. -+ Add/Remove/Edit a remote printer -+ Privileges are required to add/remove/edit a remote printer. - - no - auth_admin_keep -@@ -51,8 +51,8 @@ - - - -- <_description>Add/Remove/Edit a class -- <_message>Privileges are required to add/remove/edit a class. -+ Add/Remove/Edit a class -+ Privileges are required to add/remove/edit a class. - - no - auth_admin_keep -@@ -60,8 +60,8 @@ - - - -- <_description>Get/Set server settings -- <_message>Privileges are required to get/set server settings. -+ Get/Set server settings -+ Privileges are required to get/set server settings. - - no - auth_admin_keep -@@ -69,8 +69,8 @@ - - - -- <_description>Restart/Cancel/Edit a job -- <_message>Privileges are required to restart/cancel/edit a job. -+ Restart/Cancel/Edit a job -+ Privileges are required to restart/cancel/edit a job. - - no - yes -@@ -78,8 +78,8 @@ - - - -- <_description>Restart/Cancel/Edit a job owned by another user -- <_message>Privileges are required to restart/cancel/edit a job owned by another user. -+ Restart/Cancel/Edit a job owned by another user -+ Privileges are required to restart/cancel/edit a job owned by another user. - - no - auth_admin_keep -@@ -87,8 +87,8 @@ - - - -- <_description>Get devices -- <_message>Privileges are required to get devices. -+ Get devices -+ Privileges are required to get devices. - - no - auth_admin_keep -@@ -97,8 +97,8 @@ - - - -- <_description>Add/Remove/Edit a printer -- <_message>Privileges are required to add/remove/edit a printer. -+ Add/Remove/Edit a printer -+ Privileges are required to add/remove/edit a printer. - - no - auth_admin_keep