X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fjournal-remote%2Fjournal-upload.c;h=62853b636782c432c55bfac6f8db299534938fcd;hb=d920e59c7df63300e5b5191d2a4be7b3baac6ea8;hp=37c12f0e07ca50c7e8405ba644e057271883cdab;hpb=d71839afd88589247d8dd42b2b09d024f521749d;p=elogind.git diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c index 37c12f0e0..62853b636 100644 --- a/src/journal-remote/journal-upload.c +++ b/src/journal-remote/journal-upload.c @@ -63,7 +63,7 @@ static const char *arg_save_state = NULL; #define STATE_FILE "/var/lib/systemd/journal-upload/state" #define easy_setopt(curl, opt, value, level, cmd) \ - { \ + do { \ code = curl_easy_setopt(curl, opt, value); \ if (code) { \ log_full(level, \ @@ -71,7 +71,7 @@ static const char *arg_save_state = NULL; curl_easy_strerror(code)); \ cmd; \ } \ - } + } while(0) static size_t output_callback(char *buf, size_t size, @@ -87,8 +87,8 @@ static size_t output_callback(char *buf, if (nmemb && !u->answer) { u->answer = strndup(buf, size*nmemb); if (!u->answer) - log_warning("Failed to store server answer (%zu bytes): %s", - size*nmemb, strerror(ENOMEM)); + log_warning_errno(ENOMEM, "Failed to store server answer (%zu bytes): %m", + size*nmemb); } return size * nmemb; @@ -103,18 +103,14 @@ static int check_cursor_updating(Uploader *u) { return 0; r = mkdir_parents(u->state_file, 0755); - if (r < 0) { - log_error("Cannot create parent directory of state file %s: %s", - u->state_file, strerror(-r)); - return r; - } + if (r < 0) + return log_error_errno(r, "Cannot create parent directory of state file %s: %m", + u->state_file); r = fopen_temporary(u->state_file, &f, &temp_path); - if (r < 0) { - log_error("Cannot save state to %s: %s", - u->state_file, strerror(-r)); - return r; - } + if (r < 0) + return log_error_errno(r, "Cannot save state to %s: %m", + u->state_file); unlink(temp_path); return 0; @@ -147,7 +143,7 @@ static int update_cursor_state(Uploader *u) { finish: if (r < 0) - log_error("Failed to save state %s: %s", u->state_file, strerror(-r)); + log_error_errno(r, "Failed to save state %s: %m", u->state_file); return r; } @@ -162,11 +158,13 @@ static int load_cursor_state(Uploader *u) { "LAST_CURSOR", &u->last_cursor, NULL); - if (r < 0 && r != -ENOENT) { - log_error("Failed to read state file %s: %s", - u->state_file, strerror(-r)); - return r; - } + if (r == -ENOENT) + log_debug("State file %s is not present.", u->state_file); + else if (r < 0) + return log_error_errno(r, "Failed to read state file %s: %m", + u->state_file); + else + log_debug("Last cursor was %s", u->last_cursor); return 0; } @@ -254,7 +252,10 @@ int start_upload(Uploader *u, LOG_ERR, return -EXFULL); } - if (arg_trust || startswith(u->url, "https://")) + if (streq_ptr(arg_trust, "all")) + easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0, + LOG_ERR, return -EUCLEAN); + else if (arg_trust || startswith(u->url, "https://")) easy_setopt(curl, CURLOPT_CAINFO, arg_trust ?: TRUST_FILE, LOG_ERR, return -EXFULL); @@ -307,7 +308,7 @@ static size_t fd_input_callback(void *buf, size_t size, size_t nmemb, void *user close_fd_input(u); return 0; } else { - log_error("Aborting transfer after read error on input: %m."); + log_error_errno(errno, "Aborting transfer after read error on input: %m."); return CURL_READFUNC_ABORT; } } @@ -356,10 +357,8 @@ static int open_file_for_upload(Uploader *u, const char *filename) { fd = STDIN_FILENO; else { fd = open(filename, O_RDONLY|O_CLOEXEC|O_NOCTTY); - if (fd < 0) { - log_error("Failed to open %s: %m", filename); - return -errno; - } + if (fd < 0) + return log_error_errno(errno, "Failed to open %s: %m", filename); } u->input = fd; @@ -368,10 +367,8 @@ static int open_file_for_upload(Uploader *u, const char *filename) { r = sd_event_add_io(u->events, &u->input_event, fd, EPOLLIN, dispatch_fd_input, u); if (r < 0) { - if (r != -EPERM || arg_follow > 0) { - log_error("Failed to register input event: %s", strerror(-r)); - return r; - } + if (r != -EPERM || arg_follow > 0) + return log_error_errno(r, "Failed to register input event: %m"); /* Normal files should just be consumed without polling. */ r = start_upload(u, fd_input_callback, u); @@ -452,16 +449,12 @@ static int setup_uploader(Uploader *u, const char *url, const char *state_file) u->state_file = state_file; r = sd_event_default(&u->events); - if (r < 0) { - log_error("sd_event_default failed: %s", strerror(-r)); - return r; - } + if (r < 0) + return log_error_errno(r, "sd_event_default failed: %m"); r = setup_signals(u); - if (r < 0) { - log_error("Failed to set up signals: %s", strerror(-r)); - return r; - } + if (r < 0) + return log_error_errno(r, "Failed to set up signals: %m"); return load_cursor_state(u); } @@ -496,10 +489,12 @@ static int perform_upload(Uploader *u) { code = curl_easy_perform(u->easy); if (code) { - log_error("Upload to %s failed: %.*s", - u->url, - u->error[0] ? (int) sizeof(u->error) : INT_MAX, - u->error[0] ? u->error : curl_easy_strerror(code)); + if (u->error[0]) + log_error("Upload to %s failed: %.*s", + u->url, (int) sizeof(u->error), u->error); + else + log_error("Upload to %s failed: %s", + u->url, curl_easy_strerror(code)); return -EIO; } @@ -537,10 +532,10 @@ static int parse_config(void) { { "Upload", "TrustedCertificateFile", config_parse_path, 0, &arg_trust }, {}}; - return config_parse(NULL, PKGSYSCONFDIR "/journal-upload.conf", NULL, - "Upload\0", - config_item_table_lookup, items, - false, false, true, NULL); + return config_parse_many(PKGSYSCONFDIR "/journal-upload.conf", + CONF_DIRS_NULSTR("systemd/journal-upload.conf"), + "Upload\0", config_item_table_lookup, items, + false, NULL); } static void help(void) { @@ -693,10 +688,8 @@ static int parse_argv(int argc, char *argv[]) { case ARG_FILE: r = glob_extend(&arg_file, optarg); - if (r < 0) { - log_error("Failed to add paths: %s", strerror(-r)); - return r; - }; + if (r < 0) + return log_error_errno(r, "Failed to add paths: %m"); break; case ARG_CURSOR: @@ -778,9 +771,8 @@ static int open_journal(sd_journal **j) { else r = sd_journal_open(j, !arg_merge*SD_JOURNAL_LOCAL_ONLY + arg_journal_type); if (r < 0) - log_error("Failed to open %s: %s", - arg_directory ? arg_directory : arg_file ? "files" : "journal", - strerror(-r)); + log_error_errno(r, "Failed to open %s: %m", + arg_directory ? arg_directory : arg_file ? "files" : "journal"); return r; } @@ -832,6 +824,12 @@ int main(int argc, char **argv) { "STATUS=Processing input..."); while (true) { + r = sd_event_get_state(u.events); + if (r < 0) + break; + if (r == SD_EVENT_FINISHED) + break; + if (use_journal) { if (!u.journal) break; @@ -847,12 +845,6 @@ int main(int argc, char **argv) { if (r < 0) goto cleanup; - r = sd_event_get_state(u.events); - if (r < 0) - break; - if (r == SD_EVENT_FINISHED) - break; - if (u.uploading) { r = perform_upload(&u); if (r < 0) @@ -861,7 +853,7 @@ int main(int argc, char **argv) { r = sd_event_run(u.events, u.timeout); if (r < 0) { - log_error("Failed to run event loop: %s", strerror(-r)); + log_error_errno(r, "Failed to run event loop: %m"); break; } } @@ -874,5 +866,5 @@ cleanup: destroy_uploader(&u); finish: - return r == 0 ? EXIT_SUCCESS : EXIT_FAILURE; + return r >= 0 ? EXIT_SUCCESS : EXIT_FAILURE; }