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 #include @@ -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 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 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 */