summaryrefslogtreecommitdiffstats
path: root/redhat/kdelibs/kdelibs-3.5.13-add_readonly_to_tde_application.patch
diff options
context:
space:
mode:
Diffstat (limited to 'redhat/kdelibs/kdelibs-3.5.13-add_readonly_to_tde_application.patch')
-rw-r--r--redhat/kdelibs/kdelibs-3.5.13-add_readonly_to_tde_application.patch248
1 files changed, 248 insertions, 0 deletions
diff --git a/redhat/kdelibs/kdelibs-3.5.13-add_readonly_to_tde_application.patch b/redhat/kdelibs/kdelibs-3.5.13-add_readonly_to_tde_application.patch
new file mode 100644
index 000000000..dcdbd4e99
--- /dev/null
+++ b/redhat/kdelibs/kdelibs-3.5.13-add_readonly_to_tde_application.patch
@@ -0,0 +1,248 @@
+commit d3a9d56143cf668c7d29b26a324a424d02036371
+Author: Timothy Pearson <kb9vqf@pearsoncomputing.net>
+Date: 1337109016 -0500
+
+ Add the ability to force read-only configuration file access in a TDE application
+ Force kde-config to use read-only access
+ This closes Bug 293
+
+diff --git a/kdecore/kconfigbackend.cpp b/kdecore/kconfigbackend.cpp
+index 9ee9dd6..4ad0e5f 100644
+--- a/kdecore/kconfigbackend.cpp
++++ b/kdecore/kconfigbackend.cpp
+@@ -247,17 +247,22 @@ void KConfigBackEnd::changeFileName(const TQString &_fileName,
+ mfileName = _fileName;
+ resType = _resType;
+ useKDEGlobals = _useKDEGlobals;
+- if (mfileName.isEmpty())
++ if (mfileName.isEmpty()) {
+ mLocalFileName = TQString::null;
+- else if (!TQDir::isRelativePath(mfileName))
++ }
++ else if (!TQDir::isRelativePath(mfileName)) {
+ mLocalFileName = mfileName;
+- else
+- mLocalFileName = KGlobal::dirs()->saveLocation(resType) + mfileName;
++ }
++ else {
++ mLocalFileName = KGlobal::dirs()->saveLocation(resType, TQString(), false) + mfileName;
++ }
+
+- if (useKDEGlobals)
++ if (useKDEGlobals) {
+ mGlobalFileName = KGlobal::dirs()->saveLocation("config", TQString(), false) + TQString::fromLatin1("kdeglobals");
+- else
++ }
++ else {
+ mGlobalFileName = TQString::null;
++ }
+
+ d->localLastModified = TQDateTime();
+ d->localLastSize = 0;
+diff --git a/kdecore/kconfigbase.cpp b/kdecore/kconfigbase.cpp
+index 9ad6600..c5c0a4e 100644
+--- a/kdecore/kconfigbase.cpp
++++ b/kdecore/kconfigbase.cpp
+@@ -1139,16 +1139,18 @@ static TQString translatePath( TQString path )
+
+ // return original path, if it refers to another type of URL (e.g. http:/), or
+ // if the path is already relative to another directory
+- if (!startsWithFile && path[0] != '/' ||
+- startsWithFile && path[5] != '/')
++ if (((!startsWithFile) && (path[0] != '/')) || (startsWithFile && (path[5] != '/'))) {
+ return path;
++ }
+
+- if (startsWithFile)
++ if (startsWithFile) {
+ path.remove(0,5); // strip leading "file:/" off the string
++ }
+
+ // keep only one single '/' at the beginning - needed for cleanHomeDirPath()
+- while (path[0] == '/' && path[1] == '/')
++ while (path[0] == '/' && path[1] == '/') {
+ path.remove(0,1);
++ }
+
+ // we can not use KGlobal::dirs()->relativeLocation("home", path) here,
+ // since it would not recognize paths without a trailing '/'.
+diff --git a/kdecore/kinstance.cpp b/kdecore/kinstance.cpp
+index fe0a515..5b3aa86 100644
+--- ./kdecore/kinstance.cpp.orig 2011-08-11 04:30:15.000000000 +0200
++++ ./kdecore/kinstance.cpp 2012-06-19 21:14:21.569741870 +0200
+@@ -70,7 +70,7 @@
+ : _dirs (0L),
+ _config (0L),
+ _iconLoader (0L),
+- _name( name ), _aboutData( new KAboutData( name, "", 0 ) )
++ _name( name ), _aboutData( new KAboutData( name, "", 0 ) ), m_configReadOnly(false)
+ {
+ DEBUG_ADD
+ Q_ASSERT(!name.isEmpty());
+@@ -88,7 +88,7 @@
+ : _dirs (0L),
+ _config (0L),
+ _iconLoader (0L),
+- _name( aboutData->appName() ), _aboutData( aboutData )
++ _name( aboutData->appName() ), _aboutData( aboutData ), m_configReadOnly(false)
+ {
+ DEBUG_ADD
+ Q_ASSERT(!_name.isEmpty());
+@@ -107,7 +107,7 @@
+ : _dirs ( src->_dirs ),
+ _config ( src->_config ),
+ _iconLoader ( src->_iconLoader ),
+- _name( src->_name ), _aboutData( src->_aboutData )
++ _name( src->_name ), _aboutData( src->_aboutData ), m_configReadOnly(false)
+ {
+ DEBUG_ADD
+ Q_ASSERT(!_name.isEmpty());
+@@ -174,6 +174,11 @@
+ extern bool kde_kiosk_exception;
+ extern bool kde_kiosk_admin;
+
++void KInstance::setConfigReadOnly(bool ro)
++{
++ m_configReadOnly = ro;
++}
++
+ KConfig *KInstance::config() const
+ {
+ DEBUG_CHECK_ALIVE
+@@ -198,10 +203,12 @@
+
+ if ( d->sharedConfig == 0 )
+ {
+- if ( !_name.isEmpty() )
+- d->sharedConfig = KSharedConfig::openConfig( _name + "rc");
+- else
++ if ( !_name.isEmpty() ) {
++ d->sharedConfig = KSharedConfig::openConfig( _name + "rc", m_configReadOnly );
++ }
++ else {
+ d->sharedConfig = KSharedConfig::openConfig( TQString::null );
++ }
+ }
+
+ // Check if we are excempt from kiosk restrictions
+@@ -211,7 +218,7 @@
+ d->sharedConfig = 0;
+ return config(); // Reread...
+ }
+-
++
+ _config = d->sharedConfig;
+ if (_dirs)
+ if (_dirs->addCustomized(_config))
+diff --git a/kdecore/kinstance.h b/kdecore/kinstance.h
+index 75cc4b4..444a2d8 100644
+--- a/kdecore/kinstance.h
++++ b/kdecore/kinstance.h
+@@ -69,7 +69,7 @@ class kdecore_EXPORT KInstance
+ * Only for K(Unique)Application
+ * Initialize from src and delete it.
+ */
+-
++
+ KInstance( KInstance* src );
+
+ /**
+@@ -96,6 +96,14 @@ class kdecore_EXPORT KInstance
+ KSharedConfig *sharedConfig() const;
+
+ /**
++ * Set a read-only flag on the configuration files
++ * This must be called before config() or dirs() to have any effect
++ * Defaults to FALSE
++ * @param ro read only if TRUE
++ */
++ void setConfigReadOnly(bool ro);
++
++ /**
+ * Returns an iconloader object.
+ * @return the iconloader object.
+ */
+@@ -162,6 +170,7 @@ protected:
+ virtual void virtual_hook( int id, void* data );
+ private:
+ KInstancePrivate *d;
++ bool m_configReadOnly;
+ };
+
+ #endif
+diff --git a/kdecore/kstandarddirs.cpp b/kdecore/kstandarddirs.cpp
+index bce4bf4..bb8ae97 100644
+--- a/kdecore/kstandarddirs.cpp.orig 2011-08-21 06:15:32.000000000 +0200
++++ b/kdecore/kstandarddirs.cpp 2012-06-19 21:17:34.550007910 +0200
+@@ -451,13 +450,17 @@
+ bool KStandardDirs::exists(const TQString &fullPath)
+ {
+ KDE_struct_stat buff;
+- if (access(TQFile::encodeName(fullPath), R_OK) == 0 && KDE_stat( TQFile::encodeName(fullPath), &buff ) == 0)
++ if ((access(TQFile::encodeName(fullPath), R_OK) == 0) && (KDE_stat( TQFile::encodeName(fullPath), &buff ) == 0)) {
+ if (fullPath.tqat(fullPath.length() - 1) != QChar('/')) {
+ if (S_ISREG( buff.st_mode ))
+ return true;
+- } else
+- if (S_ISDIR( buff.st_mode ))
++ }
++ else {
++ if (S_ISDIR( buff.st_mode )) {
+ return true;
++ }
++ }
++ }
+ return false;
+ }
+
+@@ -767,17 +770,23 @@
+ srv = findExe(TQString::tqfromLatin1("lnusertemp"));
+ if (!srv.isEmpty())
+ {
+- system(TQFile::encodeName(srv)+" "+type);
+- result = readlink(TQFile::encodeName(dir).data(), link, 1023);
++ if (system(TQFile::encodeName(srv)+" "+type) < 0 ) {
++ result = readlink(TQFile::encodeName(dir).data(), link, 1023);
++ }
++ else {
++ result = -1;
++ }
+ }
+ }
+ if (result > 0)
+ {
+ link[result] = 0;
+- if (link[0] == TQChar('/').latin1())
++ if (link[0] == TQChar('/').latin1()) {
+ dir = TQFile::decodeName(link);
+- else
++ }
++ else {
+ dir = TQDir::cleanDirPath(dir+TQFile::decodeName(link));
++ }
+ }
+ #endif
+ addResourceDir(type, dir+QChar('/'));
+@@ -1139,8 +1148,9 @@
+ }
+ dircache.remove(type);
+ }
+- if (!fullPath.endsWith("/"))
++ if (!fullPath.endsWith("/")) {
+ fullPath += "/";
++ }
+ return fullPath;
+ }
+
+diff --git a/kdecore/kde-config.cpp.in b/kdecore/kde-config.cpp.in
+index 90c5dae..c988b00 100644
+--- a/kdecore/kde-config.cpp.in
++++ b/kdecore/kde-config.cpp.in
+@@ -120,6 +120,7 @@ int main(int argc, char **argv)
+ KCmdLineArgs::addCmdLineOptions( options ); // Add my own options.
+
+ KInstance a("kde-config");
++ a.setConfigReadOnly(TRUE);
+ (void)KGlobal::dirs(); // trigger the creation
+ (void)KGlobal::config();
+