Группа :: Графические оболочки/KDE
Пакет: kde5-kio-extras
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: alt-fix-permissions.patch
Скачать
Скачать
--- a/smb/kio_smb.h
+++ b/smb/kio_smb.h
@@ -204,6 +204,7 @@ public:
Q_REQUIRED_RESULT WorkerResult copy(const QUrl &src, const QUrl &dst, int permissions, KIO::JobFlags flags) override;
Q_REQUIRED_RESULT WorkerResult del(const QUrl &kurl, bool isfile) override;
Q_REQUIRED_RESULT WorkerResult mkdir(const QUrl &kurl, int permissions) override;
+ Q_REQUIRED_RESULT WorkerResult chmod(const QUrl &kurl, int permissions) override;
Q_REQUIRED_RESULT WorkerResult rename(const QUrl &src, const QUrl &dest, KIO::JobFlags flags) override;
// Functions overwritten in kio_smb_file.cpp
diff --git a/smb/kio_smb_dir.cpp b/smb/kio_smb_dir.cpp
index c35d1da..f3f3467
--- a/smb/kio_smb_dir.cpp
+++ b/smb/kio_smb_dir.cpp
@@ -494,6 +494,51 @@ void SMBWorker::mkdir(const QUrl &kurl, i
return equal;
}
+WorkerResult SMBWorker::chmod( const QUrl &kurl, int permissions )
+{
+ int errNum = 0;
+ int retVal = 0;
+ m_current_url = kurl;
+
+ retVal = smbc_chmod(m_current_url.toSmbcUrl(), permissions);
+
+ if( retVal < 0 ){
+ errNum = errno;
+ } else {
+ errNum = 0;
+ }
+
+ if( retVal < 0 )
+ {
+ switch(errNum)
+ {
+ case ENOENT:
+ errNum = cache_stat(kurl, &st);
+ if( errNum != 0 )
+ {
+ if(errNum == EACCES)
+ {
+ return WorkerResult::fail(KIO::ERR_ACCESS_DENIED, kurl.toDisplayString());
+ }
+ else
+ {
+ return WorkerResult::fail(KIO::ERR_DOES_NOT_EXIST, kurl.toDisplayString());
+ }
+ }
+ break;
+
+ case EACCES:
+ case EPERM:
+ return WorkerResult::fail( KIO::ERR_ACCESS_DENIED, kurl.toDisplayString() );
+
+ }
+
+ return WorkerResult::fail( KIO::ERR_CANNOT_CHMOD, kurl.toDisplayString() );
+ }
+
+ return WorkerResult::pass();
+}
+
WorkerResult SMBWorker::rename(const QUrl &ksrc, const QUrl &kdest, KIO::JobFlags flags)
{
SMBUrl src;