summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrzej J. R. Hunt <andrzej@hunt.org>2012-03-27 10:32:52 +0200
committerBjoern Michaelsen <bjoern.michaelsen@canonical.com>2012-03-27 13:26:03 +0200
commitdd2fe95cce75f1157bd1c75d286a0047b2e4175e (patch)
tree2af7c378eb438999fe5a1e378b1aa62a692dfb7e
parentfd065e692a7355ffc46bf42a9ec1f3743ba8310c (diff)
fdo#43895 lp#905355: Never let users save in /tmp by default
-rw-r--r--sfx2/source/dialog/filedlghelper.cxx23
-rw-r--r--sfx2/source/dialog/filedlgimpl.hxx2
2 files changed, 25 insertions, 0 deletions
diff --git a/sfx2/source/dialog/filedlghelper.cxx b/sfx2/source/dialog/filedlghelper.cxx
index 3bf4fb5963a9..0018912180fa 100644
--- a/sfx2/source/dialog/filedlghelper.cxx
+++ b/sfx2/source/dialog/filedlghelper.cxx
@@ -101,6 +101,9 @@
#include <sfxlocal.hrc>
#include <rtl/oustringostreaminserter.hxx>
#include <rtl/strbuf.hxx>
+#ifdef UNX
+#include <sys/stat.h>
+#endif
//-----------------------------------------------------------------------------
@@ -1635,6 +1638,24 @@ void FileDialogHelper_Impl::getRealFilter( String& _rFilter ) const
}
}
+void FileDialogHelper_Impl::verifyPath()
+{
+#ifdef UNX
+ struct stat aFileStat;
+ const OString sFullPath = OUStringToOString( maPath.copy(RTL_CONSTASCII_LENGTH("file://")) + maFileName, osl_getThreadTextEncoding() );
+ stat( sFullPath.getStr(), &aFileStat );
+ // lp#905355, fdo#43895
+ // Check that the file has read only permission and is in /tmp -- this is
+ // the case if we have opened the file from the web with firefox only.
+ if ( maPath.reverseCompareToAsciiL("file:///tmp",11) == 0 &&
+ ( aFileStat.st_mode & (S_IRWXO + S_IRWXG + S_IRWXU) ) == S_IRUSR )
+ {
+ maPath = SvtPathOptions().GetWorkPath();
+ mxFileDlg->setDisplayDirectory( maPath );
+ }
+#endif
+}
+
// ------------------------------------------------------------------------
void FileDialogHelper_Impl::displayFolder( const ::rtl::OUString& _rPath )
{
@@ -1648,6 +1669,7 @@ void FileDialogHelper_Impl::displayFolder( const ::rtl::OUString& _rPath )
try
{
mxFileDlg->setDisplayDirectory( maPath );
+ verifyPath();
}
catch( const IllegalArgumentException& )
{
@@ -1665,6 +1687,7 @@ void FileDialogHelper_Impl::setFileName( const ::rtl::OUString& _rFile )
try
{
mxFileDlg->setDefaultName( maFileName );
+ verifyPath();
}
catch( const IllegalArgumentException& )
{
diff --git a/sfx2/source/dialog/filedlgimpl.hxx b/sfx2/source/dialog/filedlgimpl.hxx
index 4f4e86d7089d..4c3c68bb7344 100644
--- a/sfx2/source/dialog/filedlgimpl.hxx
+++ b/sfx2/source/dialog/filedlgimpl.hxx
@@ -152,6 +152,8 @@ namespace sfx2
void implInitializeFileName( );
+ void verifyPath( );
+
void implGetAndCacheFiles( const ::com::sun::star::uno::Reference< XInterface >& xPicker ,
std::vector<rtl::OUString>& rpURLList,
const SfxFilter* pFilter );