chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
systemctl: Fix wrong assertion test
[elogind.git]
/
src
/
journal
/
journal-gatewayd.c
diff --git
a/src/journal/journal-gatewayd.c
b/src/journal/journal-gatewayd.c
index 6922ebcf9c1c154f83cee9b24ca448e79e8a1bbb..dfec8352bb91e3092bba134f22dc8c01251a89f9 100644
(file)
--- a/
src/journal/journal-gatewayd.c
+++ b/
src/journal/journal-gatewayd.c
@@
-32,6
+32,7
@@
#include "sd-journal.h"
#include "sd-daemon.h"
#include "logs-show.h"
#include "sd-journal.h"
#include "sd-daemon.h"
#include "logs-show.h"
+#include "microhttpd-util.h"
#include "virt.h"
#include "build.h"
#include "virt.h"
#include "build.h"
@@
-109,7
+110,7
@@
static int open_journal(RequestMeta *m) {
}
}
-static int respond_oom(struct MHD_Connection *connection) {
+static int respond_oom
_internal
(struct MHD_Connection *connection) {
struct MHD_Response *response;
const char m[] = "Out of memory.\n";
int ret;
struct MHD_Response *response;
const char m[] = "Out of memory.\n";
int ret;
@@
-127,6
+128,8
@@
static int respond_oom(struct MHD_Connection *connection) {
return ret;
}
return ret;
}
+#define respond_oom(connection) log_oom(), respond_oom_internal(connection)
+
static int respond_error(
struct MHD_Connection *connection,
unsigned code,
static int respond_error(
struct MHD_Connection *connection,
unsigned code,
@@
-479,18
+482,14
@@
static int request_parse_arguments(
static int request_handler_entries(
struct MHD_Connection *connection,
static int request_handler_entries(
struct MHD_Connection *connection,
- void *
*
connection_cls) {
+ void *connection_cls) {
struct MHD_Response *response;
struct MHD_Response *response;
- RequestMeta *m;
+ RequestMeta *m
= connection_cls
;
int r;
assert(connection);
int r;
assert(connection);
- assert(connection_cls);
-
- m = request_meta(connection_cls);
- if (!m)
- return respond_oom(connection);
+ assert(m);
r = open_journal(m);
if (r < 0)
r = open_journal(m);
if (r < 0)
@@
-648,15
+647,11
@@
static int request_handler_fields(
void *connection_cls) {
struct MHD_Response *response;
void *connection_cls) {
struct MHD_Response *response;
- RequestMeta *m;
+ RequestMeta *m
= connection_cls
;
int r;
assert(connection);
int r;
assert(connection);
- assert(connection_cls);
-
- m = request_meta(connection_cls);
- if (!m)
- return respond_oom(connection);
+ assert(m);
r = open_journal(m);
if (r < 0)
r = open_journal(m);
if (r < 0)
@@
-747,10
+742,10
@@
static int request_handler_file(
static int request_handler_machine(
struct MHD_Connection *connection,
static int request_handler_machine(
struct MHD_Connection *connection,
- void *
*
connection_cls) {
+ void *connection_cls) {
struct MHD_Response *response;
struct MHD_Response *response;
- RequestMeta *m;
+ RequestMeta *m
= connection_cls
;
int r;
_cleanup_free_ char* hostname = NULL, *os_name = NULL;
uint64_t cutoff_from, cutoff_to, usage;
int r;
_cleanup_free_ char* hostname = NULL, *os_name = NULL;
uint64_t cutoff_from, cutoff_to, usage;
@@
-759,10
+754,7
@@
static int request_handler_machine(
const char *v = "bare";
assert(connection);
const char *v = "bare";
assert(connection);
-
- m = request_meta(connection_cls);
- if (!m)
- return respond_oom(connection);
+ assert(m);
r = open_journal(m);
if (r < 0)
r = open_journal(m);
if (r < 0)
@@
-837,30
+829,52
@@
static int request_handler(
void **connection_cls) {
assert(connection);
void **connection_cls) {
assert(connection);
+ assert(connection_cls);
assert(url);
assert(method);
if (!streq(method, "GET"))
assert(url);
assert(method);
if (!streq(method, "GET"))
- return MHD_NO;
+ return respond_error(connection, MHD_HTTP_METHOD_NOT_ACCEPTABLE,
+ "Unsupported method.\n");
+
+
+ if (!*connection_cls) {
+ if (!request_meta(connection_cls))
+ return respond_oom(connection);
+ return MHD_YES;
+ }
if (streq(url, "/"))
return request_handler_redirect(connection, "/browse");
if (streq(url, "/entries"))
if (streq(url, "/"))
return request_handler_redirect(connection, "/browse");
if (streq(url, "/entries"))
- return request_handler_entries(connection, connection_cls);
+ return request_handler_entries(connection,
*
connection_cls);
if (startswith(url, "/fields/"))
if (startswith(url, "/fields/"))
- return request_handler_fields(connection, url + 8, connection_cls);
+ return request_handler_fields(connection, url + 8,
*
connection_cls);
if (streq(url, "/browse"))
return request_handler_file(connection, DOCUMENT_ROOT "/browse.html", "text/html");
if (streq(url, "/machine"))
if (streq(url, "/browse"))
return request_handler_file(connection, DOCUMENT_ROOT "/browse.html", "text/html");
if (streq(url, "/machine"))
- return request_handler_machine(connection, connection_cls);
+ return request_handler_machine(connection,
*
connection_cls);
return respond_error(connection, MHD_HTTP_NOT_FOUND, "Not found.\n");
}
return respond_error(connection, MHD_HTTP_NOT_FOUND, "Not found.\n");
}
+static int help(void) {
+
+ printf("%s [OPTIONS...] ...\n\n"
+ "HTTP server for journal events.\n\n"
+ " -h --help Show this help\n"
+ " --version Show package version\n"
+ " --cert=CERT.PEM Specify server certificate in PEM format\n"
+ " --key=KEY.PEM Specify server key in PEM format\n",
+ program_invocation_short_name);
+
+ return 0;
+}
+
static char *key_pem = NULL;
static char *cert_pem = NULL;
static char *key_pem = NULL;
static char *cert_pem = NULL;
@@
-874,6
+888,7
@@
static int parse_argv(int argc, char *argv[]) {
int r, c;
static const struct option options[] = {
int r, c;
static const struct option options[] = {
+ { "help", no_argument, NULL, 'h' },
{ "version", no_argument, NULL, ARG_VERSION },
{ "key", required_argument, NULL, ARG_KEY },
{ "cert", required_argument, NULL, ARG_CERT },
{ "version", no_argument, NULL, ARG_VERSION },
{ "key", required_argument, NULL, ARG_KEY },
{ "cert", required_argument, NULL, ARG_CERT },
@@
-883,13
+898,16
@@
static int parse_argv(int argc, char *argv[]) {
assert(argc >= 0);
assert(argv);
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "", options, NULL)) >= 0)
+ while ((c = getopt_long(argc, argv, "
h
", options, NULL)) >= 0)
switch(c) {
case ARG_VERSION:
puts(PACKAGE_STRING);
puts(SYSTEMD_FEATURES);
return 0;
switch(c) {
case ARG_VERSION:
puts(PACKAGE_STRING);
puts(SYSTEMD_FEATURES);
return 0;
+ case 'h':
+ return help();
+
case ARG_KEY:
if (key_pem) {
log_error("Key file specified twice");
case ARG_KEY:
if (key_pem) {
log_error("Key file specified twice");
@@
-962,11
+980,13
@@
int main(int argc, char *argv[]) {
struct MHD_OptionItem opts[] = {
{ MHD_OPTION_NOTIFY_COMPLETED,
(intptr_t) request_meta_free, NULL },
struct MHD_OptionItem opts[] = {
{ MHD_OPTION_NOTIFY_COMPLETED,
(intptr_t) request_meta_free, NULL },
+ { MHD_OPTION_EXTERNAL_LOGGER,
+ (intptr_t) microhttpd_logger, NULL },
{ MHD_OPTION_END, 0, NULL },
{ MHD_OPTION_END, 0, NULL },
{ MHD_OPTION_END, 0, NULL },
{ MHD_OPTION_END, 0, NULL }};
{ MHD_OPTION_END, 0, NULL },
{ MHD_OPTION_END, 0, NULL },
{ MHD_OPTION_END, 0, NULL },
{ MHD_OPTION_END, 0, NULL }};
- int opts_pos =
1
;
+ int opts_pos =
2
;
int flags = MHD_USE_THREAD_PER_CONNECTION|MHD_USE_POLL|MHD_USE_DEBUG;
if (n > 0)
int flags = MHD_USE_THREAD_PER_CONNECTION|MHD_USE_POLL|MHD_USE_DEBUG;
if (n > 0)