Loading core/java/android/os/storage/IMountService.java +34 −0 Original line number Diff line number Diff line Loading @@ -1192,6 +1192,22 @@ public interface IMountService extends IInterface { _data.recycle(); } } @Override public void createNewUserDir(int userHandle, String path) throws RemoteException { Parcel _data = Parcel.obtain(); Parcel _reply = Parcel.obtain(); try { _data.writeInterfaceToken(DESCRIPTOR); _data.writeInt(userHandle); _data.writeString(path); mRemote.transact(Stub.TRANSACTION_createNewUserDir, _data, _reply, 0); _reply.readException(); } finally { _reply.recycle(); _data.recycle(); } } } private static final String DESCRIPTOR = "IMountService"; Loading Loading @@ -1309,6 +1325,8 @@ public interface IMountService extends IInterface { static final int TRANSACTION_remountUid = IBinder.FIRST_CALL_TRANSACTION + 61; static final int TRANSACTION_createNewUserDir = IBinder.FIRST_CALL_TRANSACTION + 62; /** * Cast an IBinder object into an IMountService interface, generating a * proxy if needed. Loading Loading @@ -1869,6 +1887,14 @@ public interface IMountService extends IInterface { reply.writeNoException(); return true; } case TRANSACTION_createNewUserDir: { data.enforceInterface(DESCRIPTOR); int userHandle = data.readInt(); String path = data.readString(); createNewUserDir(userHandle, path); reply.writeNoException(); return true; } } return super.onTransact(code, data, reply, flags); } Loading Loading @@ -2180,4 +2206,12 @@ public interface IMountService extends IInterface { throws RemoteException; public void remountUid(int uid) throws RemoteException; /** * Creates the user data directory, possibly encrypted * @param userHandle Handle of the user whose directory we are creating * @param path Path at which to create the directory. */ public void createNewUserDir(int userHandle, String path) throws RemoteException; } core/java/android/os/storage/StorageManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -945,6 +945,15 @@ public class StorageManager { DEFAULT_FULL_THRESHOLD_BYTES); } /** {@hide} */ public void createNewUserDir(int userHandle, File path) { try { mMountService.createNewUserDir(userHandle, path.getAbsolutePath()); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } /** {@hide} */ public static File maybeTranslateEmulatedPathToInternal(File path) { final IMountService mountService = IMountService.Stub.asInterface( Loading services/core/java/com/android/server/MountService.java +28 −0 Original line number Diff line number Diff line Loading @@ -2558,6 +2558,34 @@ class MountService extends IMountService.Stub } } @Override public void createNewUserDir(int userHandle, String path) { if (Binder.getCallingUid() != Process.SYSTEM_UID) { throw new SecurityException("Only SYSTEM_UID can create user directories"); } waitForReady(); if (DEBUG_EVENTS) { Slog.i(TAG, "Creating new user dir"); } try { NativeDaemonEvent event = mCryptConnector.execute( "cryptfs", "createnewuserdir", userHandle, path); if (!"0".equals(event.getMessage())) { String error = "createnewuserdir sent unexpected message: " + event.getMessage(); Slog.e(TAG, error); // ext4enc:TODO is this the right exception? throw new RuntimeException(error); } } catch (NativeDaemonConnectorException e) { Slog.e(TAG, "createnewuserdir threw exception", e); throw new RuntimeException("createnewuserdir threw exception", e); } } @Override public int mkdirs(String callingPkg, String appPath) { final int userId = UserHandle.getUserId(Binder.getCallingUid()); Loading services/core/java/com/android/server/pm/PackageManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -15531,7 +15531,7 @@ public class PackageManagerService extends IPackageManager.Stub { if (userDir.exists()) continue; try { UserManagerService.prepareUserDirectory(userDir); UserManagerService.prepareUserDirectory(mContext, volumeUuid, user.id); UserManagerService.enforceSerialNumber(userDir, user.serialNumber); } catch (IOException e) { Log.wtf(TAG, "Failed to create user directory on " + volumeUuid, e); services/core/java/com/android/server/pm/Settings.java +4 −0 Original line number Diff line number Diff line Loading @@ -38,13 +38,17 @@ import android.os.Binder; import android.os.Build; import android.os.Environment; import android.os.FileUtils; import android.os.IBinder; import android.os.Handler; import android.os.Message; import android.os.PatternMatcher; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManager; import android.os.storage.VolumeInfo; import android.util.AtomicFile; import android.text.TextUtils; Loading Loading
core/java/android/os/storage/IMountService.java +34 −0 Original line number Diff line number Diff line Loading @@ -1192,6 +1192,22 @@ public interface IMountService extends IInterface { _data.recycle(); } } @Override public void createNewUserDir(int userHandle, String path) throws RemoteException { Parcel _data = Parcel.obtain(); Parcel _reply = Parcel.obtain(); try { _data.writeInterfaceToken(DESCRIPTOR); _data.writeInt(userHandle); _data.writeString(path); mRemote.transact(Stub.TRANSACTION_createNewUserDir, _data, _reply, 0); _reply.readException(); } finally { _reply.recycle(); _data.recycle(); } } } private static final String DESCRIPTOR = "IMountService"; Loading Loading @@ -1309,6 +1325,8 @@ public interface IMountService extends IInterface { static final int TRANSACTION_remountUid = IBinder.FIRST_CALL_TRANSACTION + 61; static final int TRANSACTION_createNewUserDir = IBinder.FIRST_CALL_TRANSACTION + 62; /** * Cast an IBinder object into an IMountService interface, generating a * proxy if needed. Loading Loading @@ -1869,6 +1887,14 @@ public interface IMountService extends IInterface { reply.writeNoException(); return true; } case TRANSACTION_createNewUserDir: { data.enforceInterface(DESCRIPTOR); int userHandle = data.readInt(); String path = data.readString(); createNewUserDir(userHandle, path); reply.writeNoException(); return true; } } return super.onTransact(code, data, reply, flags); } Loading Loading @@ -2180,4 +2206,12 @@ public interface IMountService extends IInterface { throws RemoteException; public void remountUid(int uid) throws RemoteException; /** * Creates the user data directory, possibly encrypted * @param userHandle Handle of the user whose directory we are creating * @param path Path at which to create the directory. */ public void createNewUserDir(int userHandle, String path) throws RemoteException; }
core/java/android/os/storage/StorageManager.java +9 −0 Original line number Diff line number Diff line Loading @@ -945,6 +945,15 @@ public class StorageManager { DEFAULT_FULL_THRESHOLD_BYTES); } /** {@hide} */ public void createNewUserDir(int userHandle, File path) { try { mMountService.createNewUserDir(userHandle, path.getAbsolutePath()); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } /** {@hide} */ public static File maybeTranslateEmulatedPathToInternal(File path) { final IMountService mountService = IMountService.Stub.asInterface( Loading
services/core/java/com/android/server/MountService.java +28 −0 Original line number Diff line number Diff line Loading @@ -2558,6 +2558,34 @@ class MountService extends IMountService.Stub } } @Override public void createNewUserDir(int userHandle, String path) { if (Binder.getCallingUid() != Process.SYSTEM_UID) { throw new SecurityException("Only SYSTEM_UID can create user directories"); } waitForReady(); if (DEBUG_EVENTS) { Slog.i(TAG, "Creating new user dir"); } try { NativeDaemonEvent event = mCryptConnector.execute( "cryptfs", "createnewuserdir", userHandle, path); if (!"0".equals(event.getMessage())) { String error = "createnewuserdir sent unexpected message: " + event.getMessage(); Slog.e(TAG, error); // ext4enc:TODO is this the right exception? throw new RuntimeException(error); } } catch (NativeDaemonConnectorException e) { Slog.e(TAG, "createnewuserdir threw exception", e); throw new RuntimeException("createnewuserdir threw exception", e); } } @Override public int mkdirs(String callingPkg, String appPath) { final int userId = UserHandle.getUserId(Binder.getCallingUid()); Loading
services/core/java/com/android/server/pm/PackageManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -15531,7 +15531,7 @@ public class PackageManagerService extends IPackageManager.Stub { if (userDir.exists()) continue; try { UserManagerService.prepareUserDirectory(userDir); UserManagerService.prepareUserDirectory(mContext, volumeUuid, user.id); UserManagerService.enforceSerialNumber(userDir, user.serialNumber); } catch (IOException e) { Log.wtf(TAG, "Failed to create user directory on " + volumeUuid, e);
services/core/java/com/android/server/pm/Settings.java +4 −0 Original line number Diff line number Diff line Loading @@ -38,13 +38,17 @@ import android.os.Binder; import android.os.Build; import android.os.Environment; import android.os.FileUtils; import android.os.IBinder; import android.os.Handler; import android.os.Message; import android.os.PatternMatcher; import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserManager; import android.os.storage.StorageManager; import android.os.storage.VolumeInfo; import android.util.AtomicFile; import android.text.TextUtils; Loading