[PATCH] ubus: allow passing sid with url
Wojciech Jowsa
wojciech.jowsa at gmail.com
Tue Nov 10 03:02:09 EST 2020
In order to use EventSource web content's interface
to server-sent events when ubus authentication is enabled,
a session id has to be passed. Evensource interface
does not allow to use bearer authentication header field.
One of the possible solutions is to pass sid in url.
Signed-off-by: Wojciech Jowsa <wojciech.jowsa at gmail.com>
---
ubus.c | 8 +++++++-
uhttpd.h | 1 +
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/ubus.c b/ubus.c
index cc7447e..06f5128 100644
--- a/ubus.c
+++ b/ubus.c
@@ -369,6 +369,10 @@ static void uh_ubus_handle_get_subscribe(struct client *cl, const char *path)
sid = uh_ubus_get_auth(cl->hdr.head);
+ if(!strcmp(sid, UH_UBUS_DEFAULT_SID) && du->sid != NULL) {
+ sid = du->sid;
+ }
+
if (!conf.ubus_noauth && !uh_ubus_allowed(sid, path, ":subscribe")) {
uh_ubus_send_header(cl, 200, "OK", "application/json");
uh_ubus_posix_error(cl, EACCES);
@@ -940,8 +944,10 @@ static void uh_ubus_handle_request(struct client *cl, char *url, struct path_inf
return;
}
chr = strchr(du->url_path, '?');
- if (chr)
+ if (chr) {
+ du->sid = chr + 1;
chr[0] = '\0';
+ }
du->legacy = false;
diff --git a/uhttpd.h b/uhttpd.h
index e61e176..99372be 100644
--- a/uhttpd.h
+++ b/uhttpd.h
@@ -211,6 +211,7 @@ struct dispatch_ubus {
struct json_object *jsobj;
struct json_object *jsobj_cur;
char *url_path;
+ char *sid;
int post_len;
uint32_t obj;
--
2.25.1
More information about the openwrt-devel
mailing list