Administrative Aufgaben mittels dbus und policykit

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
liberavia
User
Beiträge: 19
Registriert: Donnerstag 28. August 2008, 12:27

Hallo allerseits,

bevor ich in meiner pygtk Anwendung hier in billig-Lösungen a la

Code: Alles auswählen

ps.popen("pkexec xyz")
abtauche, frag ich lieber noch mal nach, da ich das Ding mit DBUS und PolicyKit noch nicht ganz geblickt habe.

Mein Ansatz war das angebotene Script der offiziellen Doku:
http://hal.freedesktop.org/docs/polkit/polkit-apps.html

Das Beispiel funktioniert ja soweit nur konnte ich einfach nicht herausbekommen, was ich denn mit dem Result anfangen soll. Ich brauche in meinem Programm die legimitation um eine Datei in /etc/anzulegen und um diese mit diversen Kommandos, die root-Rechte erfordern, einzulesen bzw. zu entladen.

Hier das Script vom Link oben:

Code: Alles auswählen

#!/usr/bin/env python

# Copyright (C) 2009 Red Hat, Inc.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General
# Public License along with this library; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place, Suite 330,
# Boston, MA 02111-1307, USA.
#
# Author: David Zeuthen <davidz@redhat.com>

# Simple example showing how to access the Authority via D-Bus calls
#

import dbus

bus = dbus.SystemBus()
proxy = bus.get_object('org.freedesktop.PolicyKit1', '/org/freedesktop/PolicyKit1/Authority')
authority = dbus.Interface(proxy, dbus_interface='org.freedesktop.PolicyKit1.Authority')

system_bus_name = bus.get_unique_name()

subject = ('system-bus-name', {'name' : system_bus_name})
action_id = 'org.freedesktop.policykit.exec'
details = {}
flags = 1            # AllowUserInteraction flag
cancellation_id = '' # No cancellation id

result = authority.CheckAuthorization(subject, action_id, details, flags, cancellation_id)

print result
Ich bin naiverweise davon ausgegangen, dass mein Script nach der Authentifizierung mit root-Rechen läuft, aber mittlerweile ist mir schon klar, dass das anders läuft.

Was ich gestern einfach nicht finden konnte, waren die entsprechenden methoden mit denen ich die oben beschrieben Aktionen durchführen kann.

Wie gesagt, mit der billig Variante dürfte ich das auch hinbekommen nur will ich natürlich vermeiden, dass das Passwort ständig abgefragt wird.

Ich hoffe ihr könnt mir ein bisschen auf die Sprünge helfen, so dass hier vielleicht auch eine deutschsprachige todo herauskommt, wie man die dbus-policykit in eigenen Python-Anwendungen richtig angeht.

Vielen Dank und viele Grüße

André
Zuletzt geändert von Anonymous am Mittwoch 4. Juli 2012, 10:22, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Die Entscheidung zwischen OpenSource- und proprietärer Software ist die Entscheidung zwischen Evolution und Marketing.
Welches dieser Prinzipien ist Deiner Meinung nach bewährter und nachhaltiger?
Antworten