From 41c56564e18a303a75584f1f65626d37d7ee5c54 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Mon, 19 Oct 2015 14:46:16 +0200 Subject: [PATCH] uploader: save remote name in reported_to All other plugins do so. We also need this commit to be able to attach URLs to uploaded dump directories to uReport on FAF servers. Signed-off-by: Jakub Filak --- src/plugins/reporter-upload.c | 55 ++++++++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/src/plugins/reporter-upload.c b/src/plugins/reporter-upload.c index b148d95..971c5c1 100644 --- a/src/plugins/reporter-upload.c +++ b/src/plugins/reporter-upload.c @@ -32,7 +32,7 @@ static char *ask_url(const char *message) return url; } -static int interactive_upload_file(const char *url, const char *file_name) +static int interactive_upload_file(const char *url, const char *file_name, char **remote_name) { post_state_t *state = new_post_state(POST_WANT_ERROR_MSG); state->username = getenv("Upload_Username"); @@ -53,19 +53,24 @@ static int interactive_upload_file(const char *url, const char *file_name) } } - char *remote_name = upload_file_ext(state, url, file_name, UPLOAD_FILE_HANDLE_ACCESS_DENIALS); - int result = (remote_name == NULL); /* error if NULL */ + char *tmp = upload_file_ext(state, url, file_name, UPLOAD_FILE_HANDLE_ACCESS_DENIALS); + + if (remote_name) + *remote_name = tmp; + else + free(tmp); - free(remote_name); free(password_inp); free_post_state(state); - return result; + /* return 0 on success */ + return tmp == NULL; } static int create_and_upload_archive( const char *dump_dir_name, - map_string_t *settings) + const char *url, + char **remote_name) { int result = 1; /* error */ @@ -78,11 +83,6 @@ static int create_and_upload_archive( tempfile = concat_path_basename(LARGE_DATA_TMP_DIR, dump_dir_name); tempfile = append_to_malloced_string(tempfile, ".tar.gz"); - const char* opt = getenv("Upload_URL"); - if (!opt) - opt = get_map_string_item_or_empty(settings, "URL"); - char *url = opt[0] != '\0' ? xstrdup(opt) : ask_url(_("Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:")); - string_vector_ptr_t exclude_from_report = get_global_always_excluded_elements(); struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); if (!dd) @@ -102,17 +102,16 @@ static int create_and_upload_archive( /* Upload the archive */ /* Upload from /tmp to /tmp + deletion -> BAD, exclude this possibility */ if (url && url[0] && strcmp(url, "file://"LARGE_DATA_TMP_DIR"/") != 0) - result = interactive_upload_file(url, tempfile); + result = interactive_upload_file(url, tempfile, remote_name); else { result = 0; /* success */ log(_("Archive is created: '%s'"), tempfile); - free(tempfile); + *remote_name = tempfile; tempfile = NULL; } ret: - free(url); dd_close(dd); if (tempfile) @@ -192,13 +191,35 @@ int main(int argc, char **argv) //ExcludeFiles = foo,bar*,b*z map_string_t *settings = new_map_string(); - if (url) - replace_map_string_item(settings, xstrdup("URL"), xstrdup(url)); if (conf_file) load_conf_file(conf_file, settings, /*skip key w/o values:*/ false); - int result = create_and_upload_archive(dump_dir_name, settings); + char *input_url = NULL; + const char *conf_url = getenv("Upload_URL"); + if (!conf_url || conf_url[0] == '\0') + conf_url = url; + if (!conf_url || conf_url[0] == '\0') + conf_url = get_map_string_item_or_empty(settings, "URL"); + if (!conf_url || conf_url[0] == '\0') + conf_url = input_url = ask_url(_("Please enter a URL (scp, ftp, etc.) where the problem data is to be exported:")); + + char *remote_name = NULL; + const int result = create_and_upload_archive(dump_dir_name, conf_url, &remote_name); + if (result != 0) + goto finito; + + struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0); + if (dd) + { + report_result_t rr = { .label = (char *)"upload" }; + rr.url = remote_name, + add_reported_to_entry(dd, &rr); + dd_close(dd); + } + free(remote_name); +finito: + free(input_url); free_map_string(settings); return result; } -- 1.8.3.1