Add new variables 'drive.removable.bus' and 'drive.removable.media'.
It allows restricting or granting access to removable media based on
its type by polkit authorization rules. It makes possible to grant
access to USB devices, while restrict access to Optical drives.
---
 doc/udisks2-docs.xml   |  8 ++++++++
 src/udisksdaemonutil.c | 26 +++++++++++++++++++++++++-
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/doc/udisks2-docs.xml b/doc/udisks2-docs.xml
index acacfe3..8533709 100644
--- a/doc/udisks2-docs.xml
+++ b/doc/udisks2-docs.xml
@@ -248,6 +248,14 @@
                 <entry><parameter>drive.removable</parameter></entry>
                 <entry>If the object is a drive (or a block device that is 
part of a drive), this is set to the string <quote>true</quote> only if the 
value of the <link 
linkend="gdbus-property-org-freedesktop-UDisks2-Drive.Removable">Drive:Removable</link>
 property is <constant>TRUE</constant>.</entry>
               </row>
+              <row>
+                <entry><parameter>drive.removable.bus</parameter></entry>
+                <entry>If the object is a drive (or a block device that is 
part of a drive), this is set to the value of the <link 
linkend="gdbus-property-org-freedesktop-UDisks2-Drive.ConnectionBus">Drive:ConnectionBus</link>
 property. This variable is set only if the value of the <link 
linkend="gdbus-property-org-freedesktop-UDisks2-Drive.Removable">Drive:Removable</link>
 property is <constant>TRUE</constant>.</entry>
+              </row>
+              <row>
+                <entry><parameter>drive.removable.media</parameter></entry>
+                <entry>If the object is a drive (or a block device that is 
part of a drive), this is set to the value of the <link 
linkend="gdbus-property-org-freedesktop-UDisks2-Drive.MediaCompatibility">Drive:MediaCompatibility</link>
 property. This variable is set only if the value of the <link 
linkend="gdbus-property-org-freedesktop-UDisks2-Drive.Removable">Drive:Removable</link>
 property is <constant>TRUE</constant>.</entry>
+              </row>
 
               <row>
                 <entry><parameter>id.type</parameter></entry>
diff --git a/src/udisksdaemonutil.c b/src/udisksdaemonutil.c
index fb50a0f..574bf2c 100644
--- a/src/udisksdaemonutil.c
+++ b/src/udisksdaemonutil.c
@@ -637,7 +637,31 @@ udisks_daemon_util_check_authorization_sync (UDisksDaemon  
        *daemon,
       _safe_polkit_details_insert (details, "drive.model", 
udisks_drive_get_model (drive));
       _safe_polkit_details_insert (details, "drive.revision", 
udisks_drive_get_revision (drive));
       if (udisks_drive_get_removable (drive))
-        polkit_details_insert (details, "drive.removable", "true");
+        {
+          const gchar *const *media_compat;
+          GString *media_compat_str;
+          const gchar *sep = ",";
+
+          polkit_details_insert (details, "drive.removable", "true");
+          _safe_polkit_details_insert (details, "drive.removable.bus", 
udisks_drive_get_connection_bus (drive));
+
+          media_compat_str = g_string_new (NULL);
+          media_compat = udisks_drive_get_media_compatibility (drive);
+          if (media_compat)
+            {
+              guint i;
+
+              for (i = 0; media_compat[i] && strlen(media_compat[i]); i++)
+                {
+                  if (i)
+                    g_string_append (media_compat_str, sep);
+                  g_string_append (media_compat_str, media_compat[i]);
+                }
+            }
+
+          _safe_polkit_details_insert (details, "drive.removable.media", 
media_compat_str->str);
+          g_string_free (media_compat_str, TRUE);
+        }
     }
 
   if (block != NULL)
-- 
1.8.1.4

_______________________________________________
devkit-devel mailing list
devkit-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/devkit-devel

Reply via email to