return 0;
}
-int clone_persona_data(uid_t src_persona, uid_t target_persona, int copy)
-{
- char src_data_dir[PKG_PATH_MAX];
- char pkg_path[PKG_PATH_MAX];
- DIR *d;
- struct dirent *de;
- struct stat s;
- uid_t uid;
-
- if (create_persona_path(src_data_dir, src_persona)) {
- return -1;
- }
-
- d = opendir(src_data_dir);
- if (d != NULL) {
- while ((de = readdir(d))) {
- const char *name = de->d_name;
-
- if (de->d_type == DT_DIR) {
- int subfd;
- /* always skip "." and ".." */
- if (name[0] == '.') {
- if (name[1] == 0) continue;
- if ((name[1] == '.') && (name[2] == 0)) continue;
- }
- /* Create the full path to the package's data dir */
- create_pkg_path(pkg_path, name, PKG_DIR_POSTFIX, src_persona);
- /* Get the file stat */
- if (stat(pkg_path, &s) < 0) continue;
- /* Get the uid of the package */
- ALOGI("Adding datadir for uid = %lu\n", s.st_uid);
- uid = (uid_t) s.st_uid % PER_USER_RANGE;
- /* Create the directory for the target */
- make_user_data(name, uid + target_persona * PER_USER_RANGE,
- target_persona);
- }
- }
- closedir(d);
- }
-
- if (ensure_media_user_dirs((userid_t) target_persona) == -1) {
- return -1;
- }
-
- return 0;
-}
-
int delete_cache(const char *pkgname, uid_t persona)
{
char cachedir[PKG_PATH_MAX];
return delete_persona(atoi(arg[0])); /* userid */
}
-static int do_clone_user_data(char **arg, char reply[REPLY_MAX])
-{
- return clone_persona_data(atoi(arg[0]), atoi(arg[1]), atoi(arg[2]));
-}
-
static int do_movefiles(char **arg, char reply[REPLY_MAX])
{
return movefiles();
{ "linklib", 3, do_linklib },
{ "mkuserdata", 3, do_mk_user_data },
{ "rmuser", 1, do_rm_user },
- { "cloneuserdata", 3, do_clone_user_data },
};
static int readx(int s, void *_buf, int count)
int delete_user_data(const char *pkgname, uid_t persona);
int make_user_data(const char *pkgname, uid_t uid, uid_t persona);
int delete_persona(uid_t persona);
-int clone_persona_data(uid_t src_persona, uid_t target_persona, int copy);
int delete_cache(const char *pkgname, uid_t persona);
int move_dex(const char *src, const char *dst);
int rm_dex(const char *path);