Attempt to set the proper uid/gid/contexts on new files and dirs

Files and folders that we create during backups, copy log, or MTP
operations often do not have the proper uid/gid/contexts assigned.
We will attempt to read the proper contexts from the settings
storage path and assign those same contexts to any files or dirs
that we create.

Change-Id: I769f9479854122b49b499de2175e6e2d026f8afd
diff --git a/mtp/Android.mk b/mtp/Android.mk
index 809a29a..283a283 100755
--- a/mtp/Android.mk
+++ b/mtp/Android.mk
@@ -29,7 +29,7 @@
     twrpMtp.cpp \
     mtp_MtpDatabase.cpp \
     node.cpp
-LOCAL_SHARED_LIBRARIES += libz libc libusbhost libstdc++ libstlport libdl libcutils libutils
+LOCAL_SHARED_LIBRARIES += libz libc libusbhost libstdc++ libstlport libdl libcutils libutils libaosprecovery
 
 ifneq ($(TW_MTP_DEVICE),)
 	LOCAL_CFLAGS += -DUSB_MTP_DEVICE=$(TW_MTP_DEVICE)
@@ -66,5 +66,5 @@
     twrpMtp.cpp \
     mtp_MtpDatabase.cpp \
     node.cpp
-LOCAL_SHARED_LIBRARIES += libz libc libusbhost libstdc++ libstlport libdl libcutils libutils
+LOCAL_SHARED_LIBRARIES += libz libc libusbhost libstdc++ libstlport libdl libcutils libutils libaosprecovery
 include $(BUILD_EXECUTABLE)
diff --git a/mtp/MtpServer.cpp b/mtp/MtpServer.cpp
index 66a6414..f4af2b9 100755
--- a/mtp/MtpServer.cpp
+++ b/mtp/MtpServer.cpp
@@ -26,6 +26,7 @@
 #include <sys/stat.h>
 #include <dirent.h>
 #include "../twcommon.h"
+#include "../set_metadata.h"
 #include <cutils/properties.h>
 
 #include "MtpTypes.h"
@@ -1002,6 +1003,7 @@
 			return MTP_RESPONSE_GENERAL_ERROR;
 		}
 		chown((const char *)path, getuid(), mFileGroup);
+		tw_set_default_metadata((const char *)path);
 
 		// SendObject does not get sent for directories, so call endSendObject here instead
 		mDatabase->lockMutex();
@@ -1073,6 +1075,7 @@
 		ret = ioctl(mFD, MTP_RECEIVE_FILE, (unsigned long)&mfr);
 	}
 	close(mfr.fd);
+	tw_set_default_metadata((const char *)mSendObjectFilePath);
 
 	if (ret < 0) {
 		unlink(mSendObjectFilePath);