rpms/kdebase/F-8 kdebase-3.5.9-userdiskmount.patch, NONE, 1.1 kdebase.spec, 1.291, 1.292

Kevin Kofler (kkofler) fedora-extras-commits at redhat.com
Thu Mar 27 02:30:12 UTC 2008


Author: kkofler

Update of /cvs/pkgs/rpms/kdebase/F-8
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv29153/F-8

Modified Files:
	kdebase.spec 
Added Files:
	kdebase-3.5.9-userdiskmount.patch 
Log Message:
Sync from devel:

* Thu Mar 27 2008 Kevin Kofler <Kevin at tigcc.ticalc.org> - 3.5.9-6
- apply modified Kubuntu patch to fix mounting NTFS partitions (#378041)
- also prompts for the root password on PermissionDeniedByPolicy (#428212)

* Fri Mar 07 2008 Kevin Kofler <Kevin at tigcc.ticalc.org> - 3.5.9-5
- f9+: omit all of khelpcenter again, we only need the khelpcenter.desktop
       service description, so move that to kdebase-runtime which actually
       provides khelpcenter

kdebase-3.5.9-userdiskmount.patch:

--- NEW FILE kdebase-3.5.9-userdiskmount.patch ---
diff -ur kdebase-3.5.9/kioslave/media/mediamanager/halbackend.cpp kdebase-3.5.9-userdiskmount/kioslave/media/mediamanager/halbackend.cpp
--- kdebase-3.5.9/kioslave/media/mediamanager/halbackend.cpp	2008-02-13 10:40:36.000000000 +0100
+++ kdebase-3.5.9-userdiskmount/kioslave/media/mediamanager/halbackend.cpp	2008-03-27 02:59:34.000000000 +0100
@@ -20,6 +20,7 @@
 #include "linuxcdpolling.h"
 
 #include <stdlib.h>
+#include <locale.h>
 
 #include <kapplication.h>
 #include <qeventloop.h>
@@ -33,6 +34,8 @@
 #include <kmountpoint.h>
 #include <kmessagebox.h>
 #include <kio/job.h>
+#include <kstandarddirs.h>
+#include <kprocess.h>
 
 #define MOUNT_SUFFIX	(libhal_volume_is_mounted(halVolume) ? QString("_mounted") : QString("_unmounted"))
 #define MOUNT_ICON_SUFFIX	(libhal_volume_is_mounted(halVolume) ? QString("_mount") : QString("_unmount"))
@@ -945,6 +948,92 @@
     return true;
 }
 
+static QString startKdeSuProcess(const QString& kdesuPath, const QString& command)
+{
+    KProcess kdesuProcess;
+
+    kdesuProcess << kdesuPath
+		<< "-d"
+		<< "--noignorebutton"
+		<< "-c" << command;
+
+    // @todo handle kdesu output
+    kdesuProcess.start(KProcess::Block);
+
+    return QString();
+}
+
+static QString startPrivilegedProcess(const QString& command)
+{
+    QString error;
+
+    QString kdesuPath = KStandardDirs::findExe("kdesu");
+
+    if (kdesuPath.isEmpty())
+        error = QString::fromLatin1("kdesu not found");
+    else
+        error = startKdeSuProcess(kdesuPath, command);
+
+    return error;
+}
+
+static QString privilegedMount(const char* udi, const char* mountPoint, const char** options, int numberOfOptions)
+{
+    QString error;
+ 
+    kdDebug() << "run privileged mount for " << udi << endl;
+
+    QString dbusSendPath = KStandardDirs::findExe("dbus-send");
+
+    // @todo return error message
+    if (dbusSendPath.isEmpty())
+        return QString::fromLatin1("dbus-send not found");
+
+    QString mountOptions;
+    QTextOStream optionsStream(&mountOptions);
+    for (int optionIndex = 0; optionIndex < numberOfOptions; optionIndex++) {
+        optionsStream << options[optionIndex];
+        if (optionIndex < numberOfOptions - 1)
+            optionsStream << ",";
+    }
+
+    QString command;
+    QTextOStream(&command) << dbusSendPath
+            << " --system --print-reply --dest=org.freedesktop.Hal " << udi
+            << " org.freedesktop.Hal.Device.Volume.Mount string:" << mountPoint
+            << " string: array:string:" << mountOptions;
+
+    kdDebug() << "command: " << command << endl;
+
+    error = startPrivilegedProcess(command);
+
+    return error;
+}
+
+static QString privilegedUnmount(const char* udi)
+{
+    QString error;
+ 
+    kdDebug() << "run privileged unmount for " << udi << endl;
+
+    QString dbusSendPath = KStandardDirs::findExe("dbus-send");
+
+    // @todo return error message
+    if (dbusSendPath.isEmpty())
+        return QString();
+
+    QString command;
+    QTextOStream(&command) << dbusSendPath
+            << " --system --print-reply --dest=org.freedesktop.Hal " << udi
+            << " org.freedesktop.Hal.Device.Volume.Unmount array:string:force";
+
+    kdDebug() << "command: " << command << endl;
+
+    error = startPrivilegedProcess(command);
+
+    return error;
+}
+
 static QString mount_priv(const char *udi, const char *mount_point, const char **poptions, int noptions,
 			  DBusConnection *dbus_connection)
 {
@@ -979,6 +1068,8 @@
             qerror = i18n("Invalid filesystem type");
         else if ( !strcmp(error.name, "org.freedesktop.Hal.Device.Volume.PermissionDenied"))
             qerror = i18n("Permissions denied");
+        else if ( !strcmp(error.name, "org.freedesktop.Hal.Device.PermissionDeniedByPolicy"))
+            qerror = privilegedMount(udi, mount_point, poptions, noptions);
         else if ( !strcmp(error.name, "org.freedesktop.Hal.Device.Volume.AlreadyMounted"))
             qerror = i18n("Device is already mounted.");
         else if ( !strcmp(error.name, "org.freedesktop.Hal.Device.Volume.InvalidMountpoint") && strlen(mount_point)) {
@@ -1135,7 +1226,7 @@
     if (valids["flush"] == "true")
         soptions << "flush";
 
-    if (valids["uid"] == "true")
+    if ((valids["uid"] == "true") && (medium->fsType() == "vfat" || medium->fsType() == "iso9660" || medium->fsType() == "hfs" || medium->fsType() == "udf"))
     {
         soptions << QString("uid=%1").arg(getuid());
     }
@@ -1155,6 +1246,13 @@
     if (valids["sync"] == "true")
         soptions << "sync";
 
+    if (medium->fsType() == "ntfs") {
+        QString fsLocale("locale=");
+        fsLocale += setlocale(LC_ALL, "");
+
+        soptions << fsLocale;
+    }
+
     QString mount_point = valids["mountpoint"];
     if (mount_point.startsWith("/media/"))
         mount_point = mount_point.mid(7);
@@ -1283,6 +1381,18 @@
     {
         QString qerror, reason;
 
+        if (!strcmp(error.name, "org.freedesktop.Hal.Device.PermissionDeniedByPolicy")) {
+            qerror = privilegedUnmount(udi.latin1());
+
+            if (qerror.isEmpty()) {
+                dbus_message_unref(dmesg);
+                dbus_error_free(&error);
+                return QString();
+            }
+
+            // @todo handle unmount error message
+        }
+        
         kdDebug() << "unmount failed for " << udi << ": " << error.name << " " << error.message << endl;
         qerror = "<qt>";
         qerror += "<p>" + i18n("Unfortunately, the device <b>%1</b> (%2) named <b>'%3'</b> and "


Index: kdebase.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kdebase/F-8/kdebase.spec,v
retrieving revision 1.291
retrieving revision 1.292
diff -u -r1.291 -r1.292
--- kdebase.spec	3 Mar 2008 16:35:24 -0000	1.291
+++ kdebase.spec	27 Mar 2008 02:29:36 -0000	1.292
@@ -12,7 +12,7 @@
 %define _with_samba --with-samba
 
 Version: 3.5.9
-Release: 4%{?dist}
+Release: 6%{?dist}
 
 %if 0%{?fedora} > 8
 Name: kdebase3
@@ -80,6 +80,9 @@
 Patch31: kdebase-3.5.7-konsolesu.patch
 # fix check for struct ucred to work with current glibc 2.7.90
 Patch35: kdebase-3.5.8-glibc28-struct-ucred.patch
+# modified version of kubuntu_9915_userdiskmount.diff
+# fixes NTFS (#378041) and adds PolicyKit support (#428212)
+Patch36: kdebase-3.5.9-userdiskmount.patch
 
 # upstream patches
 # alternative to patch29, requires qt-copy 0078-argb-visual-hack.patch
@@ -327,7 +330,7 @@
 %if "%{name}" != "kdebase"
 export DO_NOT_COMPILE="kappfinder kdesktop klipper kdm kmenuedit kpager kpersonalizer ktip nsplugins"
 export DO_NOT_COMPILE="$DO_NOT_COMPILE konqueror kscreensaver ksysguard knetattach kwin"
-export DO_NOT_COMPILE="$DO_NOT_COMPILE kdialog kicker ksplashml kxkb"
+export DO_NOT_COMPILE="$DO_NOT_COMPILE kdialog kicker ksplashml khelpcenter kxkb"
 export DO_NOT_COMPILE="$DO_NOT_COMPILE khotkeys kdepasswd kcheckpass drkonqi"
 # Keep these (kcontrol for kcms, konsole for KonsolePart, kioslave for ioslaves,
 # kate for kscope, kdesu until we figure out what to do about it)
@@ -795,6 +798,15 @@
 
 
 %changelog
+* Thu Mar 27 2008 Kevin Kofler <Kevin at tigcc.ticalc.org> - 3.5.9-6
+- apply modified Kubuntu patch to fix mounting NTFS partitions (#378041)
+- also prompts for the root password on PermissionDeniedByPolicy (#428212)
+
+* Fri Mar 07 2008 Kevin Kofler <Kevin at tigcc.ticalc.org> - 3.5.9-5
+- f9+: omit all of khelpcenter again, we only need the khelpcenter.desktop
+       service description, so move that to kdebase-runtime which actually
+       provides khelpcenter
+
 * Mon Mar 03 2008 Than Ngo <than at redhat.com> 3.5.9-4
 - apply upstream patch to fix crash in khotkey
 




More information about the fedora-extras-commits mailing list