mirror of
https://github.com/systemd/systemd.git
synced 2025-01-12 13:18:14 +03:00
journal-remote: implement %m support in mhd_respondf
errno value is not protected (it is undefined after this function returns). Various mhd_* functions are not documented to protect errno, so this could not guaranteed anyway.
This commit is contained in:
parent
303a2ebcb6
commit
1b4cd64683
@ -451,7 +451,7 @@ static int method_set_hostname(sd_bus_message *m, void *userdata, sd_bus_error *
|
||||
r = context_update_kernel_hostname(c);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to set host name: %m");
|
||||
return sd_bus_error_set_errnof(error, r, "Failed to set hostname: %s", strerror(-r));
|
||||
return sd_bus_error_set_errnof(error, r, "Failed to set hostname: %m");
|
||||
}
|
||||
|
||||
log_info("Changed host name to '%s'", strna(c->data[PROP_HOSTNAME]));
|
||||
@ -512,13 +512,13 @@ static int method_set_static_hostname(sd_bus_message *m, void *userdata, sd_bus_
|
||||
r = context_update_kernel_hostname(c);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to set host name: %m");
|
||||
return sd_bus_error_set_errnof(error, r, "Failed to set hostname: %s", strerror(-r));
|
||||
return sd_bus_error_set_errnof(error, r, "Failed to set hostname: %m");
|
||||
}
|
||||
|
||||
r = context_write_data_static_hostname(c);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to write static host name: %m");
|
||||
return sd_bus_error_set_errnof(error, r, "Failed to set static hostname: %s", strerror(-r));
|
||||
return sd_bus_error_set_errnof(error, r, "Failed to set static hostname: %m");
|
||||
}
|
||||
|
||||
log_info("Changed static host name to '%s'", strna(c->data[PROP_STATIC_HOSTNAME]));
|
||||
@ -593,7 +593,7 @@ static int set_machine_info(Context *c, sd_bus_message *m, int prop, sd_bus_mess
|
||||
r = context_write_data_machine_info(c);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to write machine info: %m");
|
||||
return sd_bus_error_set_errnof(error, r, "Failed to write machine info: %s", strerror(-r));
|
||||
return sd_bus_error_set_errnof(error, r, "Failed to write machine info: %m");
|
||||
}
|
||||
|
||||
log_info("Changed %s to '%s'",
|
||||
|
@ -475,7 +475,7 @@ static int request_handler_entries(
|
||||
|
||||
r = open_journal(m);
|
||||
if (r < 0)
|
||||
return mhd_respondf(connection, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to open journal: %s\n", strerror(-r));
|
||||
return mhd_respondf(connection, r, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to open journal: %m\n");
|
||||
|
||||
if (request_parse_accept(m, connection) < 0)
|
||||
return mhd_respond(connection, MHD_HTTP_BAD_REQUEST, "Failed to parse Accept header.\n");
|
||||
@ -633,7 +633,7 @@ static int request_handler_fields(
|
||||
|
||||
r = open_journal(m);
|
||||
if (r < 0)
|
||||
return mhd_respondf(connection, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to open journal: %s\n", strerror(-r));
|
||||
return mhd_respondf(connection, r, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to open journal: %m\n");
|
||||
|
||||
if (request_parse_accept(m, connection) < 0)
|
||||
return mhd_respond(connection, MHD_HTTP_BAD_REQUEST, "Failed to parse Accept header.\n");
|
||||
@ -699,10 +699,10 @@ static int request_handler_file(
|
||||
|
||||
fd = open(path, O_RDONLY|O_CLOEXEC);
|
||||
if (fd < 0)
|
||||
return mhd_respondf(connection, MHD_HTTP_NOT_FOUND, "Failed to open file %s: %m\n", path);
|
||||
return mhd_respondf(connection, errno, MHD_HTTP_NOT_FOUND, "Failed to open file %s: %m\n", path);
|
||||
|
||||
if (fstat(fd, &st) < 0)
|
||||
return mhd_respondf(connection, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to stat file: %m\n");
|
||||
return mhd_respondf(connection, errno, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to stat file: %m\n");
|
||||
|
||||
response = MHD_create_response_from_fd_at_offset64(st.st_size, fd, 0);
|
||||
if (!response)
|
||||
@ -766,15 +766,15 @@ static int request_handler_machine(
|
||||
|
||||
r = open_journal(m);
|
||||
if (r < 0)
|
||||
return mhd_respondf(connection, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to open journal: %s\n", strerror(-r));
|
||||
return mhd_respondf(connection, r, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to open journal: %m\n");
|
||||
|
||||
r = sd_id128_get_machine(&mid);
|
||||
if (r < 0)
|
||||
return mhd_respondf(connection, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to determine machine ID: %s\n", strerror(-r));
|
||||
return mhd_respondf(connection, r, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to determine machine ID: %m\n");
|
||||
|
||||
r = sd_id128_get_boot(&bid);
|
||||
if (r < 0)
|
||||
return mhd_respondf(connection, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to determine boot ID: %s\n", strerror(-r));
|
||||
return mhd_respondf(connection, r, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to determine boot ID: %m\n");
|
||||
|
||||
hostname = gethostname_malloc();
|
||||
if (!hostname)
|
||||
@ -782,11 +782,11 @@ static int request_handler_machine(
|
||||
|
||||
r = sd_journal_get_usage(m->journal, &usage);
|
||||
if (r < 0)
|
||||
return mhd_respondf(connection, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to determine disk usage: %s\n", strerror(-r));
|
||||
return mhd_respondf(connection, r, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to determine disk usage: %s\n");
|
||||
|
||||
r = sd_journal_get_cutoff_realtime_usec(m->journal, &cutoff_from, &cutoff_to);
|
||||
if (r < 0)
|
||||
return mhd_respondf(connection, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to determine disk usage: %s\n", strerror(-r));
|
||||
return mhd_respondf(connection, r, MHD_HTTP_INTERNAL_SERVER_ERROR, "Failed to determine disk usage: %s\n");
|
||||
|
||||
if (parse_env_file("/etc/os-release", NEWLINE, "PRETTY_NAME", &os_name, NULL) == -ENOENT)
|
||||
(void) parse_env_file("/usr/lib/os-release", NEWLINE, "PRETTY_NAME", &os_name, NULL);
|
||||
|
@ -524,13 +524,12 @@ static int process_http_upload(
|
||||
log_warning("Failed to process data for connection %p", connection);
|
||||
if (r == -E2BIG)
|
||||
return mhd_respondf(connection,
|
||||
MHD_HTTP_REQUEST_ENTITY_TOO_LARGE,
|
||||
"Entry is too large, maximum is %u bytes.\n",
|
||||
DATA_SIZE_MAX);
|
||||
r, MHD_HTTP_REQUEST_ENTITY_TOO_LARGE,
|
||||
"Entry is too large, maximum is " STRINGIFY(DATA_SIZE_MAX) " bytes.\n");
|
||||
else
|
||||
return mhd_respondf(connection,
|
||||
MHD_HTTP_UNPROCESSABLE_ENTITY,
|
||||
"Processing failed: %s.", strerror(-r));
|
||||
r, MHD_HTTP_UNPROCESSABLE_ENTITY,
|
||||
"Processing failed: %m.");
|
||||
}
|
||||
}
|
||||
|
||||
@ -541,8 +540,9 @@ static int process_http_upload(
|
||||
|
||||
remaining = source_non_empty(source);
|
||||
if (remaining > 0) {
|
||||
log_warning("Premature EOFbyte. %zu bytes lost.", remaining);
|
||||
return mhd_respondf(connection, MHD_HTTP_EXPECTATION_FAILED,
|
||||
log_warning("Premature EOF byte. %zu bytes lost.", remaining);
|
||||
return mhd_respondf(connection,
|
||||
0, MHD_HTTP_EXPECTATION_FAILED,
|
||||
"Premature EOF. %zu bytes of trailing data not processed.",
|
||||
remaining);
|
||||
}
|
||||
@ -623,8 +623,7 @@ static int request_handler(
|
||||
if (r == -ENOMEM)
|
||||
return respond_oom(connection);
|
||||
else if (r < 0)
|
||||
return mhd_respond(connection, MHD_HTTP_INTERNAL_SERVER_ERROR,
|
||||
strerror(-r));
|
||||
return mhd_respondf(connection, r, MHD_HTTP_INTERNAL_SERVER_ERROR, "%m");
|
||||
|
||||
hostname = NULL;
|
||||
return MHD_YES;
|
||||
|
@ -82,6 +82,7 @@ int mhd_respond_oom(struct MHD_Connection *connection) {
|
||||
}
|
||||
|
||||
int mhd_respondf(struct MHD_Connection *connection,
|
||||
int error,
|
||||
enum MHD_RequestTerminationCode code,
|
||||
const char *format, ...) {
|
||||
|
||||
@ -92,6 +93,9 @@ int mhd_respondf(struct MHD_Connection *connection,
|
||||
assert(connection);
|
||||
assert(format);
|
||||
|
||||
if (error < 0)
|
||||
error = -error;
|
||||
errno = -error;
|
||||
va_start(ap, format);
|
||||
r = vasprintf(&m, format, ap);
|
||||
va_end(ap);
|
||||
|
@ -39,8 +39,9 @@ void microhttpd_logger(void *arg, const char *fmt, va_list ap) _printf_(2, 0);
|
||||
#define respond_oom(connection) log_oom(), mhd_respond_oom(connection)
|
||||
|
||||
int mhd_respondf(struct MHD_Connection *connection,
|
||||
int error,
|
||||
unsigned code,
|
||||
const char *format, ...) _printf_(3,4);
|
||||
const char *format, ...) _printf_(4,5);
|
||||
|
||||
int mhd_respond(struct MHD_Connection *connection,
|
||||
unsigned code,
|
||||
|
Loading…
Reference in New Issue
Block a user