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