diff options
author | Andrzej J. R. Hunt <andrzej@hunt.org> | 2012-03-27 10:32:52 +0200 |
---|---|---|
committer | Bjoern Michaelsen <bjoern.michaelsen@canonical.com> | 2012-03-27 13:26:03 +0200 |
commit | dd2fe95cce75f1157bd1c75d286a0047b2e4175e (patch) | |
tree | 2af7c378eb438999fe5a1e378b1aa62a692dfb7e /sfx2/source | |
parent | fd065e692a7355ffc46bf42a9ec1f3743ba8310c (diff) |
fdo#43895 lp#905355: Never let users save in /tmp by default
Diffstat (limited to 'sfx2/source')
-rw-r--r-- | sfx2/source/dialog/filedlghelper.cxx | 23 | ||||
-rw-r--r-- | sfx2/source/dialog/filedlgimpl.hxx | 2 |
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 ); |