Honor application suid requests even if they are directed at KDE

pull/16/head
Timothy Pearson 12 years ago
parent 658707d49e
commit 06b65e787b

@ -323,6 +323,20 @@ bool KDesktopFile::tryExec() const
if (!kapp->authorize("user/"+user)) if (!kapp->authorize("user/"+user))
return false; return false;
} }
else {
// Respect KDE su request if present
su = readBoolEntry("X-KDE-SubstituteUID");
if (su)
{
TQString user = readEntry("X-KDE-Username");
if (user.isEmpty())
user = ::getenv("ADMIN_ACCOUNT");
if (user.isEmpty())
user = "root";
if (!kapp->authorize("user/"+user))
return false;
}
}
return true; return true;
} }

@ -98,6 +98,12 @@ Type=bool
[PropertyDef::X-TDE-Username] [PropertyDef::X-TDE-Username]
Type=TQString Type=TQString
[PropertyDef::X-KDE-SubstituteUID]
Type=bool
[PropertyDef::X-KDE-Username]
Type=TQString
[PropertyDef::StartupWMClass] [PropertyDef::StartupWMClass]
Type=TQString Type=TQString

@ -3154,7 +3154,7 @@ KDesktopPropsPlugin::KDesktopPropsPlugin( KPropertiesDialog *_props )
TQString pathStr = config.readPathEntry( "Path" ); TQString pathStr = config.readPathEntry( "Path" );
m_terminalBool = config.readBoolEntry( "Terminal" ); m_terminalBool = config.readBoolEntry( "Terminal" );
m_terminalOptionStr = config.readEntry( "TerminalOptions" ); m_terminalOptionStr = config.readEntry( "TerminalOptions" );
m_suidBool = config.readBoolEntry( "X-TDE-SubstituteUID" ); m_suidBool = config.readBoolEntry( "X-TDE-SubstituteUID" ) || config.readBoolEntry( "X-KDE-SubstituteUID" );
m_suidUserStr = config.readEntry( "X-TDE-Username" ); m_suidUserStr = config.readEntry( "X-TDE-Username" );
if( config.hasKey( "StartupNotify" )) if( config.hasKey( "StartupNotify" ))
m_startupBool = config.readBoolEntry( "StartupNotify", true ); m_startupBool = config.readBoolEntry( "StartupNotify", true );

@ -206,7 +206,7 @@ KService::init( KDesktopFile *config )
m_strExec = config->readPathEntry( "Exec" ); m_strExec = config->readPathEntry( "Exec" );
if (kde4application && !m_strExec.startsWith("/")) { if (kde4application && !m_strExec.startsWith("/")) {
m_strExec = "XDG_DATA_DIRS=" + kde4applicationprefix + "/share XDG_CONFIG_DIRS=/etc/xdg/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:$PATH "+m_strExec; m_strExec = "XDG_DATA_DIRS=" + kde4applicationprefix + "/share XDG_CONFIG_DIRS=/etc/xdg/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:$PATH "+m_strExec;
} else if (config->readBoolEntry("X-TDE-SubstituteUID")) { } else if (config->readBoolEntry("X-TDE-SubstituteUID") || config->readBoolEntry("X-KDE-SubstituteUID")) {
int space = m_strExec.find(" "); int space = m_strExec.find(" ");
if (space==-1) if (space==-1)
m_strExec = TDEStandardDirs::findExe(m_strExec); m_strExec = TDEStandardDirs::findExe(m_strExec);
@ -710,8 +710,17 @@ KService::List KService::allInitServices()
} }
bool KService::substituteUid() const { bool KService::substituteUid() const {
TQVariant v = property("X-TDE-SubstituteUID", TQVariant::Bool); bool suid = false;
return v.isValid() && v.toBool(); TQVariant v;
v = property("X-TDE-SubstituteUID", TQVariant::Bool);
if (v.isValid()) {
if (v.toBool()) suid = true;
}
v = property("X-KDE-SubstituteUID", TQVariant::Bool);
if (v.isValid()) {
if (v.toBool()) suid = true;
}
return suid;
} }
TQString KService::username() const { TQString KService::username() const {

Loading…
Cancel
Save