printers: Resolve symlink when passing a PPD to CUPS

root is not able to resolve symlinks in /tmp/ created by ordinary users
because of a new policy and PPDs got from CUPS are symlinks to /etc/cups/ppd/*
placed to /tmp/.
Since we need to pass PPD file of original printer to CUPS when renaming
a printer we resolve given symlink and pass original filename to the CUPS.
This commit is contained in:
Marek Kasik 2012-10-18 11:35:14 +02:00
parent 8afea39c60
commit a153f43b4e

View file

@ -359,7 +359,6 @@ printer_rename (const gchar *old_name,
cups_job_t *jobs = NULL;
GDBusConnection *bus;
const char *printer_location = NULL;
const char *ppd_filename = NULL;
const char *printer_info = NULL;
const char *printer_uri = NULL;
const char *device_uri = NULL;
@ -371,6 +370,8 @@ printer_rename (const gchar *old_name,
gboolean printer_shared = FALSE;
GError *error = NULL;
http_t *http;
gchar *ppd_link;
gchar *ppd_filename = NULL;
gchar **sheets = NULL;
gchar **users_allowed = NULL;
gchar **users_denied = NULL;
@ -526,7 +527,15 @@ printer_rename (const gchar *old_name,
}
}
ppd_filename = cupsGetPPD (old_name);
ppd_link = g_strdup (cupsGetPPD (old_name));
if (ppd_link)
{
ppd_filename = g_file_read_link (ppd_link, NULL);
if (!ppd_filename)
ppd_filename = g_strdup (ppd_link);
}
bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
if (!bus)
@ -582,8 +591,12 @@ printer_rename (const gchar *old_name,
}
}
if (ppd_filename)
g_unlink (ppd_filename);
if (ppd_link)
{
g_unlink (ppd_link);
g_free (ppd_link);
g_free (ppd_filename);
}
num_dests = cupsGetDests (&dests);
dest = cupsGetDest (new_name, NULL, num_dests, dests);