PolicyKit: Branch 'master'

David Zeuthen david at kemper.freedesktop.org
Fri Jun 5 13:14:15 PDT 2009


 docs/man/Makefile.am                               |    2 
 docs/man/PolicyKit-1.xml                           |  386 +++++++++
 docs/polkit-1-diagrams.svg                         |  834 +++++++++++++++++++++
 docs/polkit-architecture.png                       |binary
 docs/polkit-authentication-agent-example-wheel.png |binary
 docs/polkit-authentication-agent-example.png       |binary
 docs/polkit/Makefile.am                            |    5 
 7 files changed, 1217 insertions(+), 10 deletions(-)

New commits:
commit a0c849ea555ccb36cc8d90c8bf081fb021465032
Author: David Zeuthen <davidz at redhat.com>
Date:   Fri Jun 5 16:11:27 2009 -0400

    First cut at some high-level docs

diff --git a/docs/man/Makefile.am b/docs/man/Makefile.am
index 4d8b7f0..0754c06 100644
--- a/docs/man/Makefile.am
+++ b/docs/man/Makefile.am
@@ -12,7 +12,7 @@ man_MANS = 				\
 	$(NULL)
 
 %.8 %.1 : %.xml
-	$(XSLTPROC) -nonet --xinclude http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
+	$(XSLTPROC) -nonet --stringparam man.base.url.for.relative.links $(datadir)/gtk-doc/html/polkit-1/ --xinclude http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<
 
 endif # MAN_PAGES_ENABLED
 
diff --git a/docs/man/PolicyKit-1.xml b/docs/man/PolicyKit-1.xml
index ac37b66..e3a802f 100644
--- a/docs/man/PolicyKit-1.xml
+++ b/docs/man/PolicyKit-1.xml
@@ -1,4 +1,9 @@
-<refentry id="PolicyKit-1.8">
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+               "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY version SYSTEM "../version.xml">
+]>
+<refentry id="PolicyKit-1.8" xmlns:xi="http://www.w3.org/2003/XInclude">
   <refentryinfo>
     <title>PolicyKit-1</title>
     <date>January 2009</date>
@@ -16,20 +21,385 @@
     <refpurpose>Authorization API</refpurpose>
   </refnamediv>
 
-  <refsect1><title>DESCRIPTION</title>
+  <refsect1><title>OVERVIEW</title>
     <para>
-      For more information about the big picture refer to the
-      PolicyKit specification which can be normally be found
-      under <filename>/usr/share/doc</filename>.
+      PolicyKit provides an authorization API intended to be used by
+      privileged programs (<quote>MECHANISMS</quote>) offering service
+      to unprivileged programs (<quote>CLIENTS</quote>) through some
+      form of IPC mechanism such as D-Bus or Unix pipes. In this
+      scenario, the mechanism typically treats the client as
+      untrusted. For every request from a client, the mechanism needs
+      to determine if the request is authorized or if it should refuse
+      to service the client. Using the PolicyKit API, a mechanism can
+      offload this decision to a trusted party: The PolicyKit
+      Authority.
     </para>
 
     <para>
-      <emphasis>TODO:</emphasis> This manual page should contain a
-      simple introduction to PolicyKit for a system administrator
-      audience. Remains to be written.
+      In addition to acting as an authority, PolicyKit allows users to
+      obtain temporary authorization through authenticating either an
+      administrative user or the owner of the session the client
+      belongs to. This is useful for scenarios where a mechanism needs
+      to verify that the operator of the system really is the user or
+      really is an administrative user.
     </para>
+
   </refsect1>
 
+  <refsect1><title>SYSTEM ARCHITECTURE</title>
+    <para>
+      The system architecture of PolicyKit is comprised of
+      the <emphasis>Authority</emphasis> (implemented as a service on
+      the system message bus) and a
+      <emphasis>Authentication Agent</emphasis> per user session
+      (provided and started by the user session e.g. GNOME or KDE).
+      Additionally, PolicyKit supports a number of extension points –
+      specifically, vendors and/or sites can write extensions to
+      completely control authorization policy. In a block diagram, the
+      architecture looks like this:
+    </para>
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="polkit-architecture.png" format="PNG"/>
+      </imageobject>
+      <textobject>
+        <programlisting><![CDATA[
+ +-------------------+
+ |   Authentication  |
+ |       Agent       |
+ +-------------------+
+ | libpolkit-agent-1 |
+ +-------------------+
+        ^                                  +--------+
+        |                                  | Client |
+        +--------------+                   +--------+
+                       |                        ^
+                       |                        |
+User Session           |                        |
+=======================|========================|=============
+System Context         |                        |
+                       |                        |
+                       |                    +---+
+                       V                    |
+                     /------------\         |
+                     | System Bus |         |
+                     \------------/         |
+                       ^        ^           V
+                       |        |      +---------------------+
+        +--------------+        |      |      Mechanism      |
+        |                       |      +---------------------+
+        V                       +----> | libpolkit-gobject-1 |
++------------------+                   +---------------------+
+| org.freedesktop. |
+|    PolicyKit1    |
++------------------+
+|   Backends and   |
+|    Extensions    |
++------------------+
+]]></programlisting>
+      </textobject>
+    </mediaobject>
+    <para>
+      For convenience, the <literal>libpolkit-gobject-1</literal>
+      library wraps the PolicyKit D-Bus API using GObject. However, a
+      mechanism can also use the D-Bus API or the
+      <citerefentry><refentrytitle>pkcheck</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+      command to check authorizations.
+    </para>
+
+    <para>
+      The <literal>libpolkit-agent-1</literal> library provides an
+      abstraction of the native authentication system, e.g.
+      <citerefentry><refentrytitle>pam</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+      and also facilities registration and communication with the
+      PolicyKit D-Bus service.
+    </para>
+
+    <para>
+      PolicyKit extensions and authority backends are implemented
+      using the
+      <literal>libpolkit-backend-1</literal> library.
+    </para>
+
+    <para>
+      See the
+      <ulink url="file:///usr/share/gtk-doc/html/polkit-1/index.html">developer
+      documentation</ulink> for more information about using and
+      extending PolicyKit.
+    </para>
+  </refsect1>
+
+  <refsect1><title>AUTHENTICATION AGENTS</title>
+    <para>
+      An authentication agent is used to make the user of a session
+      prove that the user of the session really is the user (by
+      authenticating as the user) or an administrative user (by
+      authenticating as a administrator). In order to integrate well
+      with the rest of the user session (e.g. match the look and
+      feel), authentication agents are meant to provided by the user
+      session that the user uses. For example, an authentication agent
+      may look like this:
+    </para>
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="polkit-authentication-agent-example.png" format="PNG"/>
+      </imageobject>
+      <textobject>
+        <programlisting><![CDATA[
++----------------------------------------------------------+
+|                     Authenticate                     [X] |
++----------------------------------------------------------+
+|                                                          |
+|  [Icon]  Authentication is required to run ATA SMART     |
+|          self tests                                      |
+|                                                          |
+|          An application is attempting to perform an      |
+|          action that requires privileges. Authentication |
+|          as the super user is required to perform this   |
+|          action.                                         |
+|                                                          |
+|          Password for root: [_________________________]  |
+|                                                          |
+| [V] Details:                                             |
+|  Drive:  ATA INTEL SSDSA2MH08 (045C)                     |
+|  Device: /dev/sda                                        |
+|  Action: org.fd.devicekit.disks.drive-ata-smart-selftest |
+|  Vendor: The DeviceKit Project                           |
+|                                                          |
+|                                  [Cancel] [Authenticate] |
++----------------------------------------------------------+
+]]></programlisting>
+      </textobject>
+    </mediaobject>
+    <para>
+      If the system is configured without a <emphasis>root</emphasis>
+      account it may allow you to select the administrative user who
+      is authenticating:
+    </para>
+    <mediaobject>
+      <imageobject>
+        <imagedata fileref="polkit-authentication-agent-example-wheel.png" format="PNG"/>
+      </imageobject>
+      <textobject>
+        <programlisting><![CDATA[
++----------------------------------------------------------+
+|                     Authenticate                     [X] |
++----------------------------------------------------------+
+|                                                          |
+|  [Icon]  Authentication is required to run ATA SMART     |
+|          self tests                                      |
+|                                                          |
+|          An application is attempting to perform an      |
+|          action that requires privileges. Authentication |
+|          as one of the users below is required to        |
+|          perform this action.                            |
+|                                                          |
+|          [[Face] Patrick Bateman (bateman)         [V]]  |
+|                                                          |
+|          Password for bateman: [______________________]  |
+|                                                          |
+| [V] Details:                                             |
+|  Drive:  ATA INTEL SSDSA2MH08 (045C)                     |
+|  Device: /dev/sda                                        |
+|  Action: org.fd.devicekit.disks.drive-ata-smart-selftest |
+|  Vendor: The DeviceKit Project                           |
+|                                                          |
+|                                  [Cancel] [Authenticate] |
++----------------------------------------------------------+
+]]></programlisting>
+      </textobject>
+    </mediaobject>
+    <para>
+      See <xref linkend="pkla"/> for how to set up the local authority
+      implemention for systems without a <literal>root</literal>
+      account.
+    </para>
+  </refsect1>
+
+  <refsect1><title>DECLARING ACTIONS</title>
+    <para>
+      A mechanism need to declare a set of <quote>ACTIONS</quote> in
+      order to use PolicyKit. Actions correspond to operations that
+      clients can request the mechanism to carry out and are defined
+      in XML files that the mechanism installs into
+      the <filename>/usr/share/polkit-1/actions</filename> directory.
+    </para>
+
+    <para>
+      PolicyKit actions are namespaced and can only contain the
+      characters <literal>[a-z][0-9].-</literal> e.g. lower-case
+      ASCII, digits, period and hyphen. Each XML file can contain more
+      than one action but all actions need to be in the same namespace
+      and the file needs to be named after the namespace and have the
+      extension <literal>.policy</literal>.
+    </para>
+
+    <para>
+      The XML file must have the following doctype declaration
+    </para>
+    <programlisting><![CDATA[
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
+"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
+]]></programlisting>
+    <para>
+      The <emphasis>policyconfig</emphasis> element must be present
+      exactly once. Elements that can be used
+      inside <emphasis>policyconfig</emphasis> includes:
+    </para>
+    <variablelist>
+      <varlistentry>
+        <term><emphasis>vendor</emphasis></term>
+        <listitem><para>The name of the project or vendor that is
+            supplying the actions in the XML
+            document. Optional.</para></listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><emphasis>vendor_url</emphasis></term>
+        <listitem><para>A URL to the project or vendor that is
+        supplying the actions in the XML document.
+        Optional.</para></listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><emphasis>icon_name</emphasis></term>
+        <listitem><para>An icon representing the project or vendor
+        that is supplying the actions in the XML document. The icon
+        name must adhere to
+        the <ulink url="http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html">Freedesktop.org
+        Icon Naming Specification</ulink>. Optional.</para></listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><emphasis>action</emphasis></term>
+        <listitem><para>Declares an action. The action name is
+        specified using the <literal>id</literal> attribute and can
+        only contain the characters <literal>[a-z][0-9].-</literal>
+        e.g. lower-case ASCII, digits, period and
+        hyphen.</para></listitem>
+      </varlistentry>
+    </variablelist>
+    <para>
+      Elements that can be used inside <emphasis>action</emphasis> includes:
+    </para>
+    <variablelist>
+      <varlistentry>
+        <term><emphasis>description</emphasis></term>
+        <listitem><para>A human readable description of the action, e.g. <quote>Install unsigned software</quote>.</para></listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><emphasis>message</emphasis></term>
+        <listitem><para>A human readable message displayed to the user when asking for credentials when authentication is needed, e.g. <quote>Installing unsigned software requires authentication</quote>.</para></listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><emphasis>defaults</emphasis></term>
+        <listitem><para>This element is used to specify implicit authorizations for clients.</para>
+          <para>
+            Elements that can be used inside <emphasis>defaults</emphasis> includes:
+          </para>
+          <variablelist>
+            <varlistentry>
+              <term><emphasis>allow_any</emphasis></term>
+              <listitem><para>Implicit authorizations that apply to
+              any client. Optional.</para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><emphasis>allow_inactive</emphasis></term>
+              <listitem><para>Implicit authorizations that apply to
+              clients in inactive sessions on local
+              consoles. Optional.</para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><emphasis>allow_active</emphasis></term>
+              <listitem><para>Implicit authorizations that apply to
+              clients in active sessions on local
+              consoles. Optional.</para></listitem>
+            </varlistentry>
+          </variablelist>
+          <para>
+            Each of
+            the <emphasis>allow_any</emphasis>, <emphasis>allow_inactive</emphasis>
+            and <emphasis>allow_active</emphasis> elements can contain
+            the following values:
+          </para>
+          <variablelist>
+            <varlistentry>
+              <term><literal>no</literal></term>
+              <listitem><para>Not authorized.</para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><literal>yes</literal></term>
+              <listitem><para>Authorized.</para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><literal>auth_self</literal></term>
+              <listitem><para>Authentication by the owner of the
+              session that the client originates from is
+              required.</para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><literal>auth_admin</literal></term>
+              <listitem><para>Authentication by an administrative user
+              is required.</para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><literal>auth_self_keep</literal></term>
+              <listitem><para>Like <literal>auth_self</literal> but
+              the authorization is kept for a brief
+              period.</para></listitem>
+            </varlistentry>
+            <varlistentry>
+              <term><literal>auth_admin_keep</literal></term>
+              <listitem><para>Like <literal>auth_admin</literal> but the authorization is kept for a brief period.</para></listitem>
+            </varlistentry>
+          </variablelist>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><emphasis>annotate</emphasis></term>
+        <listitem><para>Used for annotating an action with a key/value
+        pair. The key is specified using the
+        the <literal>key</literal> attribute and the value is
+        specified using the <literal>value</literal> attribute. This
+        element may appear zero or more times. See
+            <citerefentry><refentrytitle>pkexec</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+            for an example of how this can be used. </para></listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><emphasis>vendor</emphasis></term>
+        <listitem><para>Used for overriding the vendor on a per-action
+        basis. Optional.</para></listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><emphasis>vendor_url</emphasis></term>
+        <listitem><para>Used for overriding the vendor URL on a
+        per-action basis. Optional.</para></listitem>
+      </varlistentry>
+      <varlistentry>
+        <term><emphasis>icon_name</emphasis></term>
+        <listitem><para>Used for overriding the icon name on a
+        per-action basis. Optional.</para></listitem>
+      </varlistentry>
+    </variablelist>
+    <para>
+      For localization, <emphasis>description</emphasis>
+      and <emphasis>message</emphasis> elements may occur multiple
+      times with different <literal>xml:lang</literal> attributes.
+    </para>
+    <para>
+      To list installed PolicyKit actions, use the
+      <citerefentry><refentrytitle>pkaction</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+      command.
+    </para>
+  </refsect1>
+
+  <refsect1 id="pkla"><title>LOCAL AUTHORITY IMPLEMENTATION</title>
+    <para>
+      The default authority implementation in PolicyKit is using the
+      local filesystem to store authorizations. TODO: write some more
+      here including a link to a
+      <citerefentry><refentrytitle>pklamanage</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+      command.
+    </para>
+  </refsect1>
 
   <refsect1><title>AUTHOR</title>
     <para>
diff --git a/docs/polkit-1-diagrams.svg b/docs/polkit-1-diagrams.svg
new file mode 100644
index 0000000..a213bbe
--- /dev/null
+++ b/docs/polkit-1-diagrams.svg
@@ -0,0 +1,834 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="744.09448819"
+   height="1052.3622047"
+   id="svg270"
+   sodipodi:version="0.32"
+   inkscape:version="0.46+devel"
+   sodipodi:docname="polkit-1-diagrams.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs272">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lend"
+       style="overflow:visible;">
+      <path
+         id="path1745"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) rotate(180) translate(1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Lstart"
+       style="overflow:visible">
+      <path
+         id="path1742"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(1.1) translate(1,0)" />
+    </marker>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective278" />
+    <inkscape:perspective
+       id="perspective288"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path17827"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.8,0,0,0.8,10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path17830"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker296"
+       style="overflow:visible">
+      <path
+         id="path298"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.8,0,0,0.8,10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker300"
+       style="overflow:visible">
+      <path
+         id="path302"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker304"
+       style="overflow:visible">
+      <path
+         id="path306"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.8,0,0,0.8,10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker308"
+       style="overflow:visible">
+      <path
+         id="path310"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker312"
+       style="overflow:visible">
+      <path
+         id="path314"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.8,0,0,0.8,10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker316"
+       style="overflow:visible">
+      <path
+         id="path318"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker320"
+       style="overflow:visible">
+      <path
+         id="path322"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.8,0,0,0.8,10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker324"
+       style="overflow:visible">
+      <path
+         id="path326"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient22901"
+       id="radialGradient22907"
+       cx="214.15234"
+       cy="161.40764"
+       fx="214.15234"
+       fy="161.40764"
+       r="34.795189"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient22901">
+      <stop
+         style="stop-color:#9da7d7;stop-opacity:1;"
+         offset="0"
+         id="stop22903" />
+      <stop
+         style="stop-color:#9da7d7;stop-opacity:0;"
+         offset="1"
+         id="stop22905" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14609">
+      <stop
+         id="stop14611"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop14613"
+         offset="1"
+         style="stop-color:#ff9d9d;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14609"
+       id="linearGradient13600"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7347995,0,0,0.5175383,193.46355,269.41609)"
+       x1="52.07793"
+       y1="89.181732"
+       x2="196.4196"
+       y2="89.181732" />
+    <linearGradient
+       id="linearGradient337">
+      <stop
+         id="stop339"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop341"
+         offset="1"
+         style="stop-color:#ff9d9d;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3144">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3146" />
+      <stop
+         style="stop-color:#898585;stop-opacity:0;"
+         offset="1"
+         id="stop3148" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient348">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop350" />
+      <stop
+         style="stop-color:#898585;stop-opacity:0;"
+         offset="1"
+         id="stop352" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144"
+       id="linearGradient7620"
+       x1="52.07793"
+       y1="89.181732"
+       x2="196.4196"
+       y2="89.181732"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7347995,0,0,0.5175383,388.73873,41.060701)" />
+    <linearGradient
+       id="linearGradient355">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop357" />
+      <stop
+         style="stop-color:#898585;stop-opacity:0;"
+         offset="1"
+         id="stop359" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective575"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient28966"
+       id="linearGradient28996"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7361648,0,0,0.2163389,18.431136,546.16953)"
+       x1="52.07793"
+       y1="89.181732"
+       x2="196.4196"
+       y2="89.181732" />
+    <linearGradient
+       id="linearGradient28966">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop28968" />
+      <stop
+         style="stop-color:#9dff9d;stop-opacity:0;"
+         offset="1"
+         id="stop28970" />
+    </linearGradient>
+    <linearGradient
+       y2="89.181732"
+       x2="196.4196"
+       y1="89.181732"
+       x1="52.07793"
+       gradientTransform="matrix(0.7361648,0,0,0.2163389,143.29393,335.75523)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient584"
+       xlink:href="#linearGradient28966"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       id="perspective613"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient28966-4"
+       id="linearGradient28996-9"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7361648,0,0,0.2163389,18.431136,546.16953)"
+       x1="52.07793"
+       y1="89.181732"
+       x2="196.4196"
+       y2="89.181732" />
+    <linearGradient
+       id="linearGradient28966-4">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop28968-5" />
+      <stop
+         style="stop-color:#9dff9d;stop-opacity:0;"
+         offset="1"
+         id="stop28970-9" />
+    </linearGradient>
+    <linearGradient
+       y2="89.181732"
+       x2="196.4196"
+       y1="89.181732"
+       x1="52.07793"
+       gradientTransform="matrix(0.73549098,0,0,0.34876094,193.37764,330.54439)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient624"
+       xlink:href="#linearGradient28966-4"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       id="perspective697"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       y2="89.181732"
+       x2="196.4196"
+       y1="89.181732"
+       x1="52.07793"
+       gradientTransform="matrix(0.7361648,0,0,0.2163389,143.29392,335.28296)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient624-1"
+       xlink:href="#linearGradient28966-4-1"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient28966-4-1">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop28968-5-1" />
+      <stop
+         style="stop-color:#9dff9d;stop-opacity:0;"
+         offset="1"
+         id="stop28970-9-7" />
+    </linearGradient>
+    <linearGradient
+       y2="89.181732"
+       x2="196.4196"
+       y1="89.181732"
+       x1="52.07793"
+       gradientTransform="matrix(1.0175579,0,0,0.21611733,362.35506,301.6259)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient709"
+       xlink:href="#linearGradient28966-4-1"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       id="perspective773"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3144-1"
+       id="linearGradient7684-0"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7347995,0,0,0.5175383,330.27678,57.284057)"
+       x1="52.07793"
+       y1="89.181732"
+       x2="196.4196"
+       y2="89.181732" />
+    <linearGradient
+       id="linearGradient3144-1">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3146-3" />
+      <stop
+         style="stop-color:#898585;stop-opacity:0;"
+         offset="1"
+         id="stop3148-7" />
+    </linearGradient>
+    <linearGradient
+       y2="89.181732"
+       x2="196.4196"
+       y1="89.181732"
+       x1="52.07793"
+       gradientTransform="matrix(1.0156707,0,0,0.51700825,362.58942,235.61128)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient782"
+       xlink:href="#linearGradient3144-1"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       id="perspective811"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14609-7"
+       id="linearGradient13600-3"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7347995,0,0,0.5175383,143.46355,269.41609)"
+       x1="52.07793"
+       y1="89.181732"
+       x2="196.4196"
+       y2="89.181732" />
+    <linearGradient
+       id="linearGradient14609-7">
+      <stop
+         id="stop14611-6"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop14613-8"
+         offset="1"
+         style="stop-color:#ff9d9d;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       y2="89.181732"
+       x2="196.4196"
+       y1="89.181732"
+       x1="52.07793"
+       gradientTransform="matrix(0.7347995,0,0,0.5175383,153.82601,33.197083)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient820"
+       xlink:href="#linearGradient14609-7"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       id="perspective849"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       y2="89.181732"
+       x2="196.4196"
+       y1="89.181732"
+       x1="52.07793"
+       gradientTransform="matrix(0.7361648,0,0,0.2163389,267.98278,335.0304)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient709-3"
+       xlink:href="#linearGradient28966-4-1-6"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient28966-4-1-6">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop28968-5-1-4" />
+      <stop
+         style="stop-color:#9dff9d;stop-opacity:0;"
+         offset="1"
+         id="stop28970-9-7-0" />
+    </linearGradient>
+    <linearGradient
+       y2="89.181732"
+       x2="196.4196"
+       y1="89.181732"
+       x1="52.07793"
+       gradientTransform="matrix(0.7361648,0,0,0.2163389,153.65639,99.058497)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient860"
+       xlink:href="#linearGradient28966-4-1-6"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="342.5823"
+     inkscape:cy="812.67628"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1024"
+     inkscape:window-height="724"
+     inkscape:window-x="0"
+     inkscape:window-y="0" />
+  <metadata
+     id="metadata275">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <rect
+       style="fill:url(#linearGradient820);fill-opacity:1;stroke:#030000;stroke-width:0.55500662;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:19"
+       id="rect13584-1"
+       width="105.40086"
+       height="54.89323"
+       x="192.42352"
+       y="51.90543"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001" />
+    <rect
+       style="fill:url(#linearGradient782);fill-opacity:1;stroke:#030000;stroke-width:0.65218031;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:19"
+       id="rect7676-4"
+       width="145.6895"
+       height="54.837009"
+       x="415.94064"
+       y="254.30046"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001" />
+    <rect
+       style="fill:#aaaaaa;fill-opacity:1;stroke:#c9c9c9;stroke-width:0.62696218;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:19"
+       id="rect15862"
+       width="552.82642"
+       height="3.3034956"
+       x="42.631001"
+       y="165.95226"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001" />
+    <rect
+       style="fill:url(#linearGradient7620);fill-opacity:1;stroke:#030000;stroke-width:0.55500662;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:19"
+       id="rect2160"
+       width="105.40086"
+       height="54.89323"
+       x="427.33624"
+       y="59.769047"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="481.04681"
+       y="90.185196"
+       id="text7646"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001"><tspan
+         sodipodi:role="line"
+         x="481.04681"
+         y="90.185196"
+         id="tspan7654"
+         style="text-align:center;text-anchor:middle">Client</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="243.28027"
+       y="77.398422"
+       id="text7678"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001"><tspan
+         sodipodi:role="line"
+         x="243.28027"
+         y="77.398422"
+         style="text-align:center;text-anchor:middle"
+         id="tspan7688">Authentication</tspan><tspan
+         sodipodi:role="line"
+         x="243.28027"
+         y="92.398422"
+         style="text-align:center;text-anchor:middle"
+         id="tspan887">Agent</tspan></text>
+    <rect
+       style="fill:url(#linearGradient13600);fill-opacity:1;stroke:#030000;stroke-width:0.55500662;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:19"
+       id="rect13584"
+       width="105.40086"
+       height="54.89323"
+       x="232.06105"
+       y="288.12442"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="286.21173"
+       y="312.54059"
+       id="text13586"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001"><tspan
+         sodipodi:role="line"
+         x="286.21173"
+         y="312.54059"
+         style="text-align:center;text-anchor:middle"
+         id="tspan13590">org.freedesktop.</tspan><tspan
+         sodipodi:role="line"
+         x="286.21173"
+         y="327.54059"
+         style="text-align:center;text-anchor:middle"
+         id="tspan13606">PolicyKit1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="489.5925"
+       y="283.14468"
+       id="text13594"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001"><tspan
+         sodipodi:role="line"
+         x="489.5925"
+         y="283.14468"
+         style="text-align:center;text-anchor:middle"
+         id="tspan740">Mechanism</tspan></text>
+    <path
+       sodipodi:type="arc"
+       style="fill:url(#radialGradient22907);fill-opacity:1;stroke:#000000;stroke-width:0.89999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:19"
+       id="path13612"
+       sodipodi:cx="214.15234"
+       sodipodi:cy="161.40764"
+       sodipodi:rx="34.345188"
+       sodipodi:ry="34.345188"
+       d="m 248.49753,161.40764 a 34.345188,34.345188 0 1 1 -68.69037,0 34.345188,34.345188 0 1 1 68.69037,0 z"
+       transform="translate(134.97058,58.198921)"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="349.52975"
+       y="210.38663"
+       id="text16841"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001"><tspan
+         sodipodi:role="line"
+         x="349.52975"
+         y="210.38663"
+         style="text-align:center;text-anchor:middle"
+         id="tspan16845">System</tspan><tspan
+         sodipodi:role="line"
+         x="349.52975"
+         y="225.38663"
+         style="text-align:center;text-anchor:middle"
+         id="tspan16849">Message</tspan><tspan
+         sodipodi:role="line"
+         x="349.52975"
+         y="240.38663"
+         style="text-align:center;text-anchor:middle"
+         id="tspan16851">Bus</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="93.62104"
+       y="143.63353"
+       id="text22909"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001"><tspan
+         sodipodi:role="line"
+         x="93.62104"
+         y="143.63353"
+         style="font-size:18px;text-align:center;text-anchor:middle"
+         id="tspan22917">User Session</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="108.55364"
+       y="202.5914"
+       id="text22919"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"><tspan
+         sodipodi:role="line"
+         x="108.55364"
+         y="202.5914"
+         style="font-size:18px;text-align:center;text-anchor:middle"
+         id="tspan22927">System Context</tspan></text>
+    <rect
+       style="fill:url(#linearGradient624);fill-opacity:1;stroke:#030000;stroke-width:0.45582184;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:19"
+       id="rect28982"
+       width="105.50005"
+       height="36.991695"
+       x="232.01146"
+       y="343.1517"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="284.86676"
+       y="358.26434"
+       id="text28990"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001"><tspan
+         sodipodi:role="line"
+         x="284.86676"
+         y="358.26434"
+         style="font-style:italic;text-align:center;text-anchor:middle"
+         id="tspan28992">Backends +</tspan><tspan
+         sodipodi:role="line"
+         x="284.86676"
+         y="373.26434"
+         style="font-style:italic;text-align:center;text-anchor:middle"
+         id="tspan649">Extensions</tspan></text>
+    <rect
+       style="fill:url(#linearGradient709);fill-opacity:1;stroke:#030000;stroke-width:0.42205292;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:19"
+       id="rect28982-0"
+       width="145.96021"
+       height="22.922712"
+       x="415.80527"
+       y="309.43832"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="487.01651"
+       y="325.36105"
+       id="text28990-4"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001"><tspan
+         sodipodi:role="line"
+         x="487.01651"
+         y="325.36105"
+         style="text-align:center;text-anchor:middle"
+         id="tspan649-8">libpolkit-gobject-1</tspan></text>
+    <rect
+       style="fill:url(#linearGradient860);fill-opacity:1;stroke:#030000;stroke-width:0.35916778;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:19"
+       id="rect28982-0-3"
+       width="105.5967"
+       height="22.946213"
+       x="192.32559"
+       y="106.87891"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001" />
+    <text
+       xml:space="preserve"
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="244.12958"
+       y="122.78507"
+       id="text28990-4-5"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001"><tspan
+         sodipodi:role="line"
+         x="244.12958"
+         y="122.78507"
+         style="text-align:center;text-anchor:middle"
+         id="tspan649-8-8">libpolkit-agent-1</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-mid:none;marker-end:url(#Arrow2Lend)"
+       d="m 411.63462,322.0219 c -73.68449,-1.49124 -6.00174,-74.90542 -67.16623,-76.02779 -24.77688,-7.92418 -44.02981,-7.38813 -43.95096,34.61152"
+       id="path2409"
+       sodipodi:nodetypes="ccc"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend)"
+       d="m 268.19295,136.15382 c 3.55124,52.7952 56.8059,41.36616 51.73617,77.56075 -5.15994,33.07396 -56.01669,4.80866 -57.79705,67.90122"
+       id="path4701"
+       sodipodi:nodetypes="ccc"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend)"
+       d="m 463.15239,122.01168 c 0.65982,39.40007 27.62042,24.1776 26.81502,70.68828 1.07889,31.05898 22.63119,1.38255 22.68258,56.59095"
+       id="path5124"
+       sodipodi:nodetypes="ccc"
+       inkscape:export-filename="/home/davidz/Hacking/PolicyKit/docs/polkit-architecture.png"
+       inkscape:export-xdpi="96.720001"
+       inkscape:export-ydpi="96.720001" />
+  </g>
+</svg>
diff --git a/docs/polkit-architecture.png b/docs/polkit-architecture.png
new file mode 100644
index 0000000..11342e5
Binary files /dev/null and b/docs/polkit-architecture.png differ
diff --git a/docs/polkit-authentication-agent-example-wheel.png b/docs/polkit-authentication-agent-example-wheel.png
new file mode 100644
index 0000000..bafe5a8
Binary files /dev/null and b/docs/polkit-authentication-agent-example-wheel.png differ
diff --git a/docs/polkit-authentication-agent-example.png b/docs/polkit-authentication-agent-example.png
new file mode 100644
index 0000000..b2f6559
Binary files /dev/null and b/docs/polkit-authentication-agent-example.png differ
diff --git a/docs/polkit/Makefile.am b/docs/polkit/Makefile.am
index d5c9182..4ab6366 100644
--- a/docs/polkit/Makefile.am
+++ b/docs/polkit/Makefile.am
@@ -59,7 +59,10 @@ content_files =  			    								\
 	$(NULL)
 
 # Images to copy into HTML directory
-HTML_IMAGES = 				\
+HTML_IMAGES = 						\
+	../polkit-architecture.png			\
+	../polkit-authentication-agent-example.png	\
+	../polkit-authentication-agent-example-wheel.png \
 	$(NULL)
 
 # Extra options to supply to gtkdoc-fixref


More information about the hal-commit mailing list