mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 18:17:39 -04:00
Work around sudo not changing $HOME thus the configuration file ending up in the invoking user $HOME with root permissions, leading to an unwriteable configuration file if running as user.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20103 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
884dc711b8
commit
c96452ac92
1 changed files with 38 additions and 15 deletions
|
@ -16,11 +16,15 @@
|
||||||
* KIND, either express or implied.
|
* KIND, either express or implied.
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "rbsettings.h"
|
#include "rbsettings.h"
|
||||||
|
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
|
|
||||||
|
#if defined(Q_OS_LINUX)
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
void RbSettings::open()
|
void RbSettings::open()
|
||||||
{
|
{
|
||||||
// only use built-in rbutil.ini
|
// only use built-in rbutil.ini
|
||||||
|
@ -28,11 +32,12 @@ void RbSettings::open()
|
||||||
// portable installation:
|
// portable installation:
|
||||||
// check for a configuration file in the program folder.
|
// check for a configuration file in the program folder.
|
||||||
QFileInfo config;
|
QFileInfo config;
|
||||||
config.setFile(QCoreApplication::instance()->applicationDirPath() + "/RockboxUtility.ini");
|
config.setFile(QCoreApplication::instance()->applicationDirPath()
|
||||||
if(config.isFile())
|
+ "/RockboxUtility.ini");
|
||||||
|
if(config.isFile())
|
||||||
{
|
{
|
||||||
userSettings = new QSettings(QCoreApplication::instance()->applicationDirPath() + "/RockboxUtility.ini",
|
userSettings = new QSettings(QCoreApplication::instance()->applicationDirPath()
|
||||||
QSettings::IniFormat, this);
|
+ "/RockboxUtility.ini", QSettings::IniFormat, this);
|
||||||
qDebug() << "config: portable";
|
qDebug() << "config: portable";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -46,7 +51,25 @@ void RbSettings::open()
|
||||||
void RbSettings::sync()
|
void RbSettings::sync()
|
||||||
{
|
{
|
||||||
userSettings->sync();
|
userSettings->sync();
|
||||||
}
|
#if defined(Q_OS_LINUX)
|
||||||
|
// when using sudo it runs rbutil with uid 0 but unfortunately without a
|
||||||
|
// proper login shell, thus the configuration file gets placed in the
|
||||||
|
// calling users $HOME. This in turn will cause issues if trying to
|
||||||
|
// run rbutil later as user. Try to detect this case via the environment
|
||||||
|
// variable SUDO_UID and SUDO_GID and if set chown the user config file.
|
||||||
|
if(getuid() == 0)
|
||||||
|
{
|
||||||
|
char* realuser = getenv("SUDO_UID");
|
||||||
|
char* realgroup = getenv("SUDO_GID");
|
||||||
|
if(realuser != NULL && realgroup != NULL)
|
||||||
|
{
|
||||||
|
int realuid = atoi(realuser);
|
||||||
|
int realgid = atoi(realgroup);
|
||||||
|
chown(qPrintable(userSettings->fileName()), realuid, realgid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
QVariant RbSettings::deviceSettingCurGet(QString entry,QString def)
|
QVariant RbSettings::deviceSettingCurGet(QString entry,QString def)
|
||||||
{
|
{
|
||||||
|
@ -260,12 +283,12 @@ QString RbSettings::lastTalkedFolder()
|
||||||
{
|
{
|
||||||
return userSettings->value("last_talked_folder").toString();
|
return userSettings->value("last_talked_folder").toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString RbSettings::voiceLanguage()
|
QString RbSettings::voiceLanguage()
|
||||||
{
|
{
|
||||||
return userSettings->value("voicelanguage").toString();
|
return userSettings->value("voicelanguage").toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
int RbSettings::wavtrimTh()
|
int RbSettings::wavtrimTh()
|
||||||
{
|
{
|
||||||
return userSettings->value("wavtrimthreshold",500).toInt();
|
return userSettings->value("wavtrimthreshold",500).toInt();
|
||||||
|
@ -328,7 +351,7 @@ QStringList RbSettings::allPlatforms()
|
||||||
QStringList result;
|
QStringList result;
|
||||||
devices->beginGroup("platforms");
|
devices->beginGroup("platforms");
|
||||||
QStringList a = devices->childKeys();
|
QStringList a = devices->childKeys();
|
||||||
for(int i = 0; i < a.size(); i++)
|
for(int i = 0; i < a.size(); i++)
|
||||||
{
|
{
|
||||||
result.append(devices->value(a.at(i), "null").toString());
|
result.append(devices->value(a.at(i), "null").toString());
|
||||||
}
|
}
|
||||||
|
@ -341,7 +364,7 @@ QStringList RbSettings::allLanguages()
|
||||||
QStringList result;
|
QStringList result;
|
||||||
devices->beginGroup("languages");
|
devices->beginGroup("languages");
|
||||||
QStringList a = devices->childKeys();
|
QStringList a = devices->childKeys();
|
||||||
for(int i = 0; i < a.size(); i++)
|
for(int i = 0; i < a.size(); i++)
|
||||||
{
|
{
|
||||||
result.append(devices->value(a.at(i), "null").toString());
|
result.append(devices->value(a.at(i), "null").toString());
|
||||||
}
|
}
|
||||||
|
@ -385,7 +408,7 @@ QString RbSettings::nameOfTargetId(int id)
|
||||||
}
|
}
|
||||||
devices->endGroup();
|
devices->endGroup();
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,7 +420,7 @@ QMap<int, QString> RbSettings::usbIdMap()
|
||||||
devices->beginGroup("platforms");
|
devices->beginGroup("platforms");
|
||||||
platforms = devices->childKeys();
|
platforms = devices->childKeys();
|
||||||
devices->endGroup();
|
devices->endGroup();
|
||||||
|
|
||||||
for(int i = 0; i < platforms.size(); i++)
|
for(int i = 0; i < platforms.size(); i++)
|
||||||
{
|
{
|
||||||
devices->beginGroup("platforms");
|
devices->beginGroup("platforms");
|
||||||
|
@ -423,7 +446,7 @@ QMap<int, QString> RbSettings::usbIdErrorMap()
|
||||||
devices->beginGroup("platforms");
|
devices->beginGroup("platforms");
|
||||||
platforms = devices->childKeys();
|
platforms = devices->childKeys();
|
||||||
devices->endGroup();
|
devices->endGroup();
|
||||||
|
|
||||||
for(int i = 0; i < platforms.size(); i++)
|
for(int i = 0; i < platforms.size(); i++)
|
||||||
{
|
{
|
||||||
devices->beginGroup("platforms");
|
devices->beginGroup("platforms");
|
||||||
|
@ -449,7 +472,7 @@ QMap<int, QString> RbSettings::usbIdIncompatMap()
|
||||||
devices->beginGroup("platforms");
|
devices->beginGroup("platforms");
|
||||||
platforms = devices->childKeys();
|
platforms = devices->childKeys();
|
||||||
devices->endGroup();
|
devices->endGroup();
|
||||||
|
|
||||||
for(int i = 0; i < platforms.size(); i++)
|
for(int i = 0; i < platforms.size(); i++)
|
||||||
{
|
{
|
||||||
devices->beginGroup("platforms");
|
devices->beginGroup("platforms");
|
||||||
|
@ -580,7 +603,7 @@ void RbSettings::setTTSLang(QString tts, QString lang)
|
||||||
void RbSettings::setTTSUseSapi4(bool value)
|
void RbSettings::setTTSUseSapi4(bool value)
|
||||||
{
|
{
|
||||||
userSettingsGroupSet("sapi","useSapi4",value);
|
userSettingsGroupSet("sapi","useSapi4",value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RbSettings::setEncoderPath(QString enc, QString path)
|
void RbSettings::setEncoderPath(QString enc, QString path)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue