コード例 #1
0
ファイル: inject.c プロジェクト: multirom-htc/multirom
static int copy_rd_files(UNUSED const char *path, UNUSED const char *busybox_path)
{
    char buf[256];

    if (access(TMP_RD_UNPACKED_DIR"/main_init", F_OK) < 0 &&
        rename(TMP_RD_UNPACKED_DIR"/init", TMP_RD_UNPACKED_DIR"/main_init") < 0)
    {
        ERROR("Failed to move /init to /main_init!\n");
        return -1;
    }

    snprintf(buf, sizeof(buf), "%s/trampoline", mrom_dir());
    if(copy_file(buf, TMP_RD_UNPACKED_DIR"/init") < 0)
    {
        ERROR("Failed to copy trampoline to /init!\n");
        return -1;
    }
    chmod(TMP_RD_UNPACKED_DIR"/init", 0750);

    remove(TMP_RD_UNPACKED_DIR"/sbin/ueventd");
    remove(TMP_RD_UNPACKED_DIR"/sbin/watchdogd");
    symlink("../main_init", TMP_RD_UNPACKED_DIR"/sbin/ueventd");
    symlink("../main_init", TMP_RD_UNPACKED_DIR"/sbin/watchdogd");

#ifdef MR_USE_MROM_FSTAB
    snprintf(buf, sizeof(buf), "%s/mrom.fstab", mrom_dir());
    copy_file(buf, TMP_RD_UNPACKED_DIR"/mrom.fstab");
#else
    remove(TMP_RD_UNPACKED_DIR"/mrom.fstab");
#endif

#ifdef MR_ENCRYPTION
    remove_dir(TMP_RD_UNPACKED_DIR"/mrom_enc");

    if(mr_system("busybox cp -a \"%s/enc\" \"%s/mrom_enc\"", mrom_dir(), TMP_RD_UNPACKED_DIR) != 0)
    {
        ERROR("Failed to copy encryption files!\n");
        return -1;
    }
#endif
    return 0;
}
コード例 #2
0
ファイル: inject.c プロジェクト: Diewi/multirom
static int copy_rd_files(UNUSED const char *path, UNUSED const char *busybox_path)
{
    char buf[256];
    char init_file[64];
    const int *secRD = access(TMP_RD2, F_OK);

    if (secRD != -1) {
        snprintf(init_file, sizeof(init_file), TMP_RD2_UNPACKED_DIR "/init");
    } else if (access(TMP_RD_INIT_REAL, F_OK) != -1) {
        snprintf(init_file, sizeof(init_file), TMP_RD_INIT_REAL);
    } else {
        snprintf(init_file, sizeof(init_file), TMP_RD_UNPACKED_DIR "/init");
    }

    if ((secRD != -1 && access(TMP_RD2_UNPACKED_DIR "/main_init", F_OK) < 0 &&
            rename(init_file, TMP_RD2_UNPACKED_DIR "/main_init")) ||
            (secRD == -1 && access(TMP_RD_UNPACKED_DIR "/main_init", F_OK) < 0 &&
            rename(init_file, TMP_RD_UNPACKED_DIR "/main_init") < 0))
    {
        ERROR("Failed to move /init to /main_init!\n");
        return -1;
    }

    snprintf(buf, sizeof(buf), "%s/trampoline", mrom_dir());
    if (copy_file(buf, init_file) < 0)
    {
        ERROR("Failed to copy trampoline to /init!\n");
        return -1;
    }

    if (secRD != -1)
    {
        chmod(init_file, 0750);

        remove(TMP_RD2_UNPACKED_DIR "/sbin/ueventd");
        remove(TMP_RD2_UNPACKED_DIR "/sbin/watchdogd");
        symlink("../main_init", TMP_RD2_UNPACKED_DIR "/sbin/ueventd");
        symlink("../main_init", TMP_RD2_UNPACKED_DIR "/sbin/watchdogd");

#ifdef MR_USE_MROM_FSTAB
        snprintf(buf, sizeof(buf), "%s/mrom.fstab", mrom_dir());
        copy_file(buf, TMP_RD2_UNPACKED_DIR "/mrom.fstab");
#else
        remove(TMP_RD2_UNPACKED_DIR "/mrom.fstab");
#endif
    } else {
        chmod(init_file, 0750);

        remove(TMP_RD_UNPACKED_DIR "/sbin/ueventd");
        remove(TMP_RD_UNPACKED_DIR "/sbin/watchdogd");
        symlink("../main_init", TMP_RD_UNPACKED_DIR "/sbin/ueventd");
        symlink("../main_init", TMP_RD_UNPACKED_DIR "/sbin/watchdogd");

#ifdef MR_USE_MROM_FSTAB
        snprintf(buf, sizeof(buf), "%s/mrom.fstab", mrom_dir());
        copy_file(buf, TMP_RD_UNPACKED_DIR "/mrom.fstab");
#else
        remove(TMP_RD_UNPACKED_DIR "/mrom.fstab");
#endif
    }

#ifdef MR_ENCRYPTION
    if (secRD != -1)
        remove_dir(TMP_RD2_UNPACKED_DIR "/mrom_enc");
    else
        remove_dir(TMP_RD_UNPACKED_DIR "/mrom_enc");

    if ((secRD != -1 && mr_system("busybox cp -a \"%s/enc\" \"%s/mrom_enc\"", mrom_dir(), TMP_RD2_UNPACKED_DIR) != 0) ||
            (secRD == -1 && mr_system("busybox cp -a \"%s/enc\" \"%s/mrom_enc\"", mrom_dir(), TMP_RD_UNPACKED_DIR) != 0))
    {
        ERROR("Failed to copy encryption files!\n");
        return -1;
    }
#endif
    return 0;
}