Add support for more expressive SD card permissions
We now run an sdcard fuse daemon on top of a physical SD card.
Add support for that.
Bug: 10330128
Change-Id: I6a291f861ccb0f2911c07cc8f659e2cec4e6d76c
diff --git a/DirectVolume.cpp b/DirectVolume.cpp
index 2a24376..4e0d621 100644
--- a/DirectVolume.cpp
+++ b/DirectVolume.cpp
@@ -33,11 +33,8 @@
// #define PARTITION_DEBUG
-DirectVolume::DirectVolume(VolumeManager *vm, const char *label,
- const char *mount_point, int partIdx) :
- Volume(vm, label, mount_point) {
- mPartIdx = partIdx;
-
+DirectVolume::DirectVolume(VolumeManager *vm, const fstab_rec* rec, int flags) :
+ Volume(vm, rec, flags) {
mPaths = new PathCollection();
for (int i = 0; i < MAX_PARTITIONS; i++)
mPartMinors[i] = -1;
@@ -46,6 +43,18 @@
mDiskMinor = -1;
mDiskNumParts = 0;
+ if (strcmp(rec->mount_point, "auto") != 0) {
+ ALOGE("Vold managed volumes must have auto mount point; ignoring %s",
+ rec->mount_point);
+ }
+
+ char mount[PATH_MAX];
+
+ snprintf(mount, PATH_MAX, "%s/%s", Volume::MEDIA_DIR, rec->label);
+ mMountpoint = strdup(mount);
+ snprintf(mount, PATH_MAX, "%s/%s", Volume::FUSE_DIR, rec->label);
+ mFuseMountpoint = strdup(mount);
+
setState(Volume::State_NoMedia);
}
@@ -62,10 +71,6 @@
return 0;
}
-void DirectVolume::setFlags(int flags) {
- mFlags = flags;
-}
-
dev_t DirectVolume::getDiskDevice() {
return MKDEV(mDiskMajor, mDiskMinor);
}
@@ -119,7 +124,7 @@
snprintf(msg, sizeof(msg),
"Volume %s %s disk inserted (%d:%d)", getLabel(),
- getMountpoint(), mDiskMajor, mDiskMinor);
+ getFuseMountpoint(), mDiskMajor, mDiskMinor);
mVm->getBroadcaster()->sendBroadcast(ResponseCode::VolumeDiskInserted,
msg, false);
}
@@ -286,7 +291,7 @@
SLOGD("Volume %s %s disk %d:%d removed\n", getLabel(), getMountpoint(), major, minor);
snprintf(msg, sizeof(msg), "Volume %s %s disk removed (%d:%d)",
- getLabel(), getMountpoint(), major, minor);
+ getLabel(), getFuseMountpoint(), major, minor);
mVm->getBroadcaster()->sendBroadcast(ResponseCode::VolumeDiskRemoved,
msg, false);
setState(Volume::State_NoMedia);
@@ -317,7 +322,7 @@
*/
snprintf(msg, sizeof(msg), "Volume %s %s bad removal (%d:%d)",
- getLabel(), getMountpoint(), major, minor);
+ getLabel(), getFuseMountpoint(), major, minor);
mVm->getBroadcaster()->sendBroadcast(ResponseCode::VolumeBadRemoval,
msg, false);
@@ -452,7 +457,7 @@
{
strcpy(v->label, mLabel);
strcpy(v->mnt_point, mMountpoint);
- v->flags=mFlags;
+ v->flags = getFlags();
/* Other fields of struct volume_info are filled in by the caller or cryptfs.c */
return 0;