コード例 #1
0
ファイル: config.py プロジェクト: skymysky/onefuzz
def build_task_config(
    job_id: UUID, task_id: UUID, task_config: TaskConfig
) -> TaskUnitConfig:

    if task_config.task.type not in TASK_DEFINITIONS:
        raise TaskConfigError("unsupported task type: %s" % task_config.task.type.name)

    definition = TASK_DEFINITIONS[task_config.task.type]

    config = TaskUnitConfig(
        job_id=job_id,
        task_id=task_id,
        task_type=task_config.task.type,
        instrumentation_key=os.environ.get("APPINSIGHTS_INSTRUMENTATIONKEY"),
        telemetry_key=os.environ.get("ONEFUZZ_TELEMETRY"),
        heartbeat_queue=get_queue_sas(
            "heartbeat",
            account_id=os.environ["ONEFUZZ_FUNC_STORAGE"],
            add=True,
        ),
        back_channel_address="https://%s/api/back_channel" % (get_instance_url()),
    )

    if definition.monitor_queue:
        config.input_queue = get_queue_sas(
            task_id,
            add=True,
            read=True,
            update=True,
            process=True,
            account_id=get_fuzz_storage(),
        )

    for container_def in definition.containers:
        if container_def.type == ContainerType.setup:
            continue

        containers = []
        for (i, container) in enumerate(task_config.containers):
            if container.type != container_def.type:
                continue

            containers.append(
                {
                    "path": "_".join(["task", container_def.type.name, str(i)]),
                    "url": get_container_sas_url(
                        container.name,
                        read=ContainerPermission.Read in container_def.permissions,
                        write=ContainerPermission.Write in container_def.permissions,
                        add=ContainerPermission.Add in container_def.permissions,
                        delete=ContainerPermission.Delete in container_def.permissions,
                        create=ContainerPermission.Create in container_def.permissions,
                        list=ContainerPermission.List in container_def.permissions,
                    ),
                }
            )

        if not containers:
            continue

        if (
            container_def.compare in [Compare.Equal, Compare.AtMost]
            and container_def.value == 1
        ):
            setattr(config, container_def.type.name, containers[0])
        else:
            setattr(config, container_def.type.name, containers)

    EMPTY_DICT: Dict[str, str] = {}
    EMPTY_LIST: List[str] = []

    if TaskFeature.supervisor_exe in definition.features:
        config.supervisor_exe = task_config.task.supervisor_exe

    if TaskFeature.supervisor_env in definition.features:
        config.supervisor_env = task_config.task.supervisor_env or EMPTY_DICT

    if TaskFeature.supervisor_options in definition.features:
        config.supervisor_options = task_config.task.supervisor_options or EMPTY_LIST

    if TaskFeature.supervisor_input_marker in definition.features:
        config.supervisor_input_marker = task_config.task.supervisor_input_marker

    if TaskFeature.target_exe in definition.features:
        config.target_exe = "setup/%s" % task_config.task.target_exe

    if TaskFeature.target_env in definition.features:
        config.target_env = task_config.task.target_env or EMPTY_DICT

    if TaskFeature.target_options in definition.features:
        config.target_options = task_config.task.target_options or EMPTY_LIST

    if TaskFeature.target_options_merge in definition.features:
        config.target_options_merge = task_config.task.target_options_merge or False

    if TaskFeature.rename_output in definition.features:
        config.rename_output = task_config.task.rename_output or False

    if TaskFeature.generator_exe in definition.features:
        config.generator_exe = task_config.task.generator_exe

    if TaskFeature.generator_env in definition.features:
        config.generator_env = task_config.task.generator_env or EMPTY_DICT

    if TaskFeature.generator_options in definition.features:
        config.generator_options = task_config.task.generator_options or EMPTY_LIST

    if (
        TaskFeature.wait_for_files in definition.features
        and task_config.task.wait_for_files
    ):
        config.wait_for_files = task_config.task.wait_for_files.name

    if TaskFeature.analyzer_exe in definition.features:
        config.analyzer_exe = task_config.task.analyzer_exe

    if TaskFeature.analyzer_options in definition.features:
        config.analyzer_options = task_config.task.analyzer_options or EMPTY_LIST

    if TaskFeature.analyzer_env in definition.features:
        config.analyzer_env = task_config.task.analyzer_env or EMPTY_DICT

    if TaskFeature.stats_file in definition.features:
        config.stats_file = task_config.task.stats_file
        config.stats_format = task_config.task.stats_format

    if TaskFeature.target_timeout in definition.features:
        config.target_timeout = task_config.task.target_timeout

    if TaskFeature.check_asan_log in definition.features:
        config.check_asan_log = task_config.task.check_asan_log

    if TaskFeature.check_debugger in definition.features:
        config.check_debugger = task_config.task.check_debugger

    if TaskFeature.check_retry_count in definition.features:
        config.check_retry_count = task_config.task.check_retry_count or 0

    return config
コード例 #2
0
ファイル: config.py プロジェクト: ranweiler/onefuzz
def build_task_config(job: Job, task: Task) -> TaskUnitConfig:
    job_id = job.job_id
    task_id = task.task_id
    task_config = task.config

    if task_config.task.type not in TASK_DEFINITIONS:
        raise TaskConfigError("unsupported task type: %s" %
                              task_config.task.type.name)

    definition = TASK_DEFINITIONS[task_config.task.type]

    config = TaskUnitConfig(
        job_id=job_id,
        task_id=task_id,
        task_type=task_config.task.type,
        instance_telemetry_key=os.environ.get(
            "APPINSIGHTS_INSTRUMENTATIONKEY"),
        microsoft_telemetry_key=os.environ.get("ONEFUZZ_TELEMETRY"),
        heartbeat_queue=get_queue_sas(
            "task-heartbeat",
            StorageType.config,
            add=True,
        ),
        instance_id=get_instance_id(),
    )

    if job.config.logs:
        config.logs = add_container_sas_url(job.config.logs)
    else:
        LOGGER.warning("Missing log container:  job_id %s, task_id %s", job_id,
                       task_id)

    if definition.monitor_queue:
        config.input_queue = get_queue_sas(
            task_id,
            StorageType.corpus,
            add=True,
            read=True,
            update=True,
            process=True,
        )

    for container_def in definition.containers:
        if container_def.type == ContainerType.setup:
            continue

        containers = []
        for (i, container) in enumerate(task_config.containers):
            if container.type != container_def.type:
                continue

            containers.append({
                "path":
                "_".join(["task", container_def.type.name,
                          str(i)]),
                "url":
                get_container_sas_url(
                    container.name,
                    StorageType.corpus,
                    read=ContainerPermission.Read in container_def.permissions,
                    write=ContainerPermission.Write
                    in container_def.permissions,
                    delete=ContainerPermission.Delete
                    in container_def.permissions,
                    list_=ContainerPermission.List
                    in container_def.permissions,
                ),
            })

        if not containers:
            continue

        if (container_def.compare in [Compare.Equal, Compare.AtMost]
                and container_def.value == 1):
            setattr(config, container_def.type.name, containers[0])
        else:
            setattr(config, container_def.type.name, containers)

    EMPTY_DICT: Dict[str, str] = {}
    EMPTY_LIST: List[str] = []

    if TaskFeature.supervisor_exe in definition.features:
        config.supervisor_exe = task_config.task.supervisor_exe

    if TaskFeature.supervisor_env in definition.features:
        config.supervisor_env = task_config.task.supervisor_env or EMPTY_DICT

    if TaskFeature.supervisor_options in definition.features:
        config.supervisor_options = task_config.task.supervisor_options or EMPTY_LIST

    if TaskFeature.supervisor_input_marker in definition.features:
        config.supervisor_input_marker = task_config.task.supervisor_input_marker

    if TaskFeature.target_exe in definition.features:
        config.target_exe = "setup/%s" % task_config.task.target_exe

    if (TaskFeature.target_exe_optional in definition.features
            and task_config.task.target_exe):
        config.target_exe = "setup/%s" % task_config.task.target_exe

    if TaskFeature.target_env in definition.features:
        config.target_env = task_config.task.target_env or EMPTY_DICT

    if TaskFeature.target_options in definition.features:
        config.target_options = task_config.task.target_options or EMPTY_LIST

    if TaskFeature.target_options_merge in definition.features:
        config.target_options_merge = task_config.task.target_options_merge or False

    if TaskFeature.target_workers in definition.features:
        config.target_workers = task_config.task.target_workers

    if TaskFeature.rename_output in definition.features:
        config.rename_output = task_config.task.rename_output or False

    if TaskFeature.generator_exe in definition.features:
        config.generator_exe = task_config.task.generator_exe

    if TaskFeature.generator_env in definition.features:
        config.generator_env = task_config.task.generator_env or EMPTY_DICT

    if TaskFeature.generator_options in definition.features:
        config.generator_options = task_config.task.generator_options or EMPTY_LIST

    if (TaskFeature.wait_for_files in definition.features
            and task_config.task.wait_for_files):
        config.wait_for_files = task_config.task.wait_for_files.name

    if TaskFeature.analyzer_exe in definition.features:
        config.analyzer_exe = task_config.task.analyzer_exe

    if TaskFeature.analyzer_options in definition.features:
        config.analyzer_options = task_config.task.analyzer_options or EMPTY_LIST

    if TaskFeature.analyzer_env in definition.features:
        config.analyzer_env = task_config.task.analyzer_env or EMPTY_DICT

    if TaskFeature.stats_file in definition.features:
        config.stats_file = task_config.task.stats_file
        config.stats_format = task_config.task.stats_format

    if TaskFeature.target_timeout in definition.features:
        config.target_timeout = task_config.task.target_timeout

    if TaskFeature.check_asan_log in definition.features:
        config.check_asan_log = task_config.task.check_asan_log

    if TaskFeature.check_debugger in definition.features:
        config.check_debugger = task_config.task.check_debugger

    if TaskFeature.check_retry_count in definition.features:
        config.check_retry_count = task_config.task.check_retry_count or 0

    if TaskFeature.ensemble_sync_delay in definition.features:
        config.ensemble_sync_delay = task_config.task.ensemble_sync_delay

    if TaskFeature.check_fuzzer_help in definition.features:
        config.check_fuzzer_help = (task_config.task.check_fuzzer_help
                                    if task_config.task.check_fuzzer_help
                                    is not None else True)

    if TaskFeature.report_list in definition.features:
        config.report_list = task_config.task.report_list

    if TaskFeature.minimized_stack_depth in definition.features:
        config.minimized_stack_depth = task_config.task.minimized_stack_depth

    if TaskFeature.expect_crash_on_failure in definition.features:
        config.expect_crash_on_failure = (
            task_config.task.expect_crash_on_failure
            if task_config.task.expect_crash_on_failure is not None else True)

    if TaskFeature.coverage_filter in definition.features:
        coverage_filter = task_config.task.coverage_filter

        if coverage_filter is not None:
            config.coverage_filter = "setup/%s" % coverage_filter

    return config