From 27afe3a1cc9c07ac4884a7720087a597aea3c76f Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Fri, 19 Nov 2010 13:52:20 -0500 Subject: PTP: Fix permissions problems with files imported via PTP Change-Id: I630a89c67e5b3d6d0c29e6c257f84e1909fa4de2 Signed-off-by: Mike Lockwood --- media/mtp/MtpDevice.cpp | 8 +++++++- media/mtp/MtpDevice.h | 6 ++++-- 2 files changed, 11 insertions(+), 3 deletions(-) (limited to 'media/mtp') diff --git a/media/mtp/MtpDevice.cpp b/media/mtp/MtpDevice.cpp index 1b23a8e..416ebfe 100644 --- a/media/mtp/MtpDevice.cpp +++ b/media/mtp/MtpDevice.cpp @@ -349,7 +349,7 @@ MtpProperty* MtpDevice::getDevicePropDesc(MtpDeviceProperty code) { } // reads the object's data and writes it to the specified file path -bool MtpDevice::readObject(MtpObjectHandle handle, const char* destPath) { +bool MtpDevice::readObject(MtpObjectHandle handle, const char* destPath, int group, int perm) { LOGD("readObject: %s", destPath); int fd = ::open(destPath, O_RDWR | O_CREAT | O_TRUNC); if (fd < 0) { @@ -357,6 +357,12 @@ bool MtpDevice::readObject(MtpObjectHandle handle, const char* destPath) { return false; } + fchown(fd, getuid(), group); + // set permissions + int mask = umask(0); + fchmod(fd, perm); + umask(mask); + Mutex::Autolock autoLock(mMutex); bool result = false; diff --git a/media/mtp/MtpDevice.h b/media/mtp/MtpDevice.h index 720502c..21c85d5 100644 --- a/media/mtp/MtpDevice.h +++ b/media/mtp/MtpDevice.h @@ -75,7 +75,8 @@ public: MtpDeviceInfo* getDeviceInfo(); MtpStorageIDList* getStorageIDs(); MtpStorageInfo* getStorageInfo(MtpStorageID storageID); - MtpObjectHandleList* getObjectHandles(MtpStorageID storageID, MtpObjectFormat format, MtpObjectHandle parent); + MtpObjectHandleList* getObjectHandles(MtpStorageID storageID, MtpObjectFormat format, + MtpObjectHandle parent); MtpObjectInfo* getObjectInfo(MtpObjectHandle handle); void* getThumbnail(MtpObjectHandle handle, int& outLength); MtpObjectHandle sendObjectInfo(MtpObjectInfo* info); @@ -86,7 +87,8 @@ public: MtpProperty* getDevicePropDesc(MtpDeviceProperty code); - bool readObject(MtpObjectHandle handle, const char* destPath); + bool readObject(MtpObjectHandle handle, const char* destPath, int group, + int perm); private: bool sendRequest(MtpOperationCode operation); -- cgit v1.1