Exemplo n.º 1
0
def _make_corpus_backup_public(target, corpus_fuzzer_name_override,
                               corpus_backup_bucket_name):
    """Identifies old corpus backups and makes them public."""
    corpus_backup_date = utils.utcnow().date() - datetime.timedelta(
        days=data_types.CORPUS_BACKUP_PUBLIC_LOOKBACK_DAYS)

    corpus_backup_url = corpus_manager.gcs_url_for_backup_file(
        corpus_backup_bucket_name, corpus_fuzzer_name_override
        or target.engine, target.project_qualified_name(), corpus_backup_date)

    if not storage.get(corpus_backup_url):
        logs.log_warn('Failed to find corpus backup %s.' % corpus_backup_url)
        return

    if not _set_public_acl_if_needed(corpus_backup_url):
        return

    filename = (corpus_manager.PUBLIC_BACKUP_TIMESTAMP + os.extsep +
                corpus_manager.BACKUP_ARCHIVE_FORMAT)
    public_url = os.path.join(os.path.dirname(corpus_backup_url), filename)

    if not storage.copy_blob(corpus_backup_url, public_url):
        logs.log_error(
            'Failed to overwrite %s with the latest public corpus backup.' %
            public_url)
        return

    if not _set_public_acl_if_needed(public_url):
        return

    logs.log('Corpus backup %s is now marked public.' % corpus_backup_url)
Exemplo n.º 2
0
    def get(self):
        """Handle a get request."""
        gcs_path = request.args.get('path', '')
        if not gcs_path:
            raise helpers.EarlyExitException('No path provided.', 400)

        if storage.get(gcs_path):
            host_url = storage.OBJECT_URL
        else:
            host_url = storage.DIRECTORY_URL

        bucket_name, object_path = storage.get_bucket_name_and_path(gcs_path)
        return self.redirect(host_url + '/' + bucket_name + '/' + object_path)
Exemplo n.º 3
0
def _make_corpus_backup_public(target, corpus_fuzzer_name_override,
                               corpus_backup_bucket_name):
    """Identifies old corpus backups and makes them public."""
    corpus_backup_date = utils.utcnow().date() - datetime.timedelta(
        days=data_types.CORPUS_BACKUP_PUBLIC_LOOKBACK_DAYS)

    corpus_backup_url = corpus_manager.gcs_url_for_backup_file(
        corpus_backup_bucket_name,
        corpus_fuzzer_name_override or target.engine,
        target.project_qualified_name(),
        corpus_backup_date,
    )

    try:
        result = storage.get(corpus_backup_url)
    except:
        result = None

    if not result:
        logs.log_warn("Failed to find corpus backup %s." % corpus_backup_url)
        return

    try:
        result = storage.get_acl(corpus_backup_url, "allUsers")
    except:
        result = None

    if result:
        # Backup is already marked public. Skip.
        logs.log("Corpus backup %s is already marked public, skipping." %
                 corpus_backup_url)
        return

    try:
        result = storage.set_acl(corpus_backup_url, "allUsers")
    except:
        result = None

    if not result:
        logs.log_error("Failed to mark corpus backup %s public." %
                       corpus_backup_url)
        return

    logs.log("Corpus backup %s is now marked public." % corpus_backup_url)