You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/kde-base/kdepasswd/files/kdepasswd-4.13.3-use-accoun...

104 lines
3.4 KiB

Use accountsservice instead of calling chfn directly.
This avoids a potential error or crash when changing user account information.
Backported 77275f50241eb2f4e38051152074c379fa96fe84 and
23bbe79912ec21ded8fdfc595935f48a6d2298ea from Plasma 5.
Gentoo bug #380899
KDE bug #156396
--- a/kdepasswd/kcm/CMakeLists.txt
+++ b/kdepasswd/kcm/CMakeLists.txt
@@ -1,7 +1,6 @@
add_subdirectory(pics)
set(kcm_useraccount_PART_SRCS
- chfnprocess.cpp
main.cpp
chfacedlg.cpp)
--- a/kdepasswd/kcm/main.cpp
+++ b/kdepasswd/kcm/main.cpp
@@ -49,7 +49,6 @@
#include "settings.h"
#include "pass.h"
-#include "chfnprocess.h"
#include <KPluginFactory>
#include <KPluginLoader>
@@ -181,36 +180,27 @@ void KCMUserAccount::save()
/* Save realname to /etc/passwd */
if ( _mw->leRealname->isModified() )
{
- KPasswordDialog dlg( _mw );
- dlg.setPrompt(i18n("Please enter your password in order to save your settings:"));
- if ( !dlg.exec() )
- {
- KMessageBox::sorry( this, i18n("You must enter "
- "your password in order to change your information."));
- return;
- }
-
- ChfnProcess *proc = new ChfnProcess();
- int ret = proc->exec(dlg.password().toLocal8Bit() , _mw->leRealname->text().toLocal8Bit() );
- if ( ret )
- {
- if ( ret == ChfnProcess::PasswordError )
- KMessageBox::sorry( this, i18n("You must enter a correct password."));
-
- else
- {
- KMessageBox::sorry( this, i18n("An error occurred and your name has "
- "probably not been changed. The error "
- "message was:\n%1", QString::fromLocal8Bit(proc->error())));
- kDebug() << "ChfnProcess->exec() failed. Error code: " << ret
- << "\nOutput:" << proc->error() << endl;
- }
-
- delete proc;
- return;
- }
-
- delete proc;
+ // save icon file also with accountsservice
+ QDBusInterface ainterface("org.freedesktop.Accounts",
+ "/org/freedesktop/Accounts",
+ "org.freedesktop.Accounts",
+ QDBusConnection::systemBus());
+ QDBusReply<QDBusObjectPath> reply = ainterface.call("FindUserById", qlonglong(_ku->uid()));
+ if (reply.isValid() && !reply.error().isValid()) {
+ QDBusInterface uinterface("org.freedesktop.Accounts",
+ reply.value().path(),
+ "org.freedesktop.Accounts.User",
+ QDBusConnection::systemBus(),
+ this);
+
+ QString name = _mw->leRealname->text();
+ QDBusReply<void> ureply = uinterface.call("SetRealName", name);
+ if (!ureply.isValid() || ureply.error().isValid()) {
+ kDebug() << ureply.error().message();
+ KMessageBox::error( this, i18n("There was an error setting the name: %1" ,
+ name) );
+ }
+ }
}
#endif
@@ -243,10 +233,12 @@ void KCMUserAccount::save()
}
}
else { // delete existing image
- if ( !KIO::NetAccess::del(KCFGUserAccount::faceFile(), this) ) {
- KMessageBox::error( this, i18n("There was an error deleting the image: %1" ,
- KCFGUserAccount::faceFile()) );
- }
+ if (QFile::exists(KCFGUserAccount::faceFile())) {
+ if ( !KIO::NetAccess::del(KCFGUserAccount::faceFile(), this) ) {
+ KMessageBox::error( this, i18n("There was an error deleting the image: %1" ,
+ KCFGUserAccount::faceFile()) );
+ }
+ }
}
/* Save KDE's homebrewn settings */