mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-18 05:12:45 +01:00
plugin: Wrap custom notifications in a dict with additional origin
This should allow us to differentiate the origin of the notification, and further prevent plugins from spoofing native notifications.
This commit is contained in:
parent
cfb1107244
commit
62e3358a5b
@ -453,19 +453,10 @@ static const char *plugin_notification_handle(struct plugin *plugin,
|
||||
methname = json_strdup(tmpctx, plugin->buffer, methtok);
|
||||
|
||||
if (notifications_have_topic(plugin->plugins, methname)) {
|
||||
n = tal(NULL, struct jsonrpc_notification);
|
||||
n->method = tal_steal(n, methname);
|
||||
n->stream = new_json_stream(n, NULL, NULL);
|
||||
json_object_start(n->stream, NULL);
|
||||
json_add_string(n->stream, "jsonrpc", "2.0");
|
||||
json_add_string(n->stream, "method", methname);
|
||||
|
||||
json_add_tok(n->stream, "params", paramstok, plugin->buffer);
|
||||
|
||||
json_object_end(n->stream); /* closes '.' */
|
||||
|
||||
/* We guarantee to have \n\n at end of each response. */
|
||||
json_stream_append(n->stream, "\n\n", strlen("\n\n"));
|
||||
n = jsonrpc_notification_start(NULL, methname);
|
||||
json_add_string(n->stream, "origin", plugin->shortname);
|
||||
json_add_tok(n->stream, "payload", paramstok, plugin->buffer);
|
||||
jsonrpc_notification_end(n);
|
||||
|
||||
plugins_notify(plugin->plugins, take(n));
|
||||
return NULL;
|
||||
|
@ -6,8 +6,8 @@ plugin = Plugin()
|
||||
|
||||
|
||||
@plugin.subscribe("custom")
|
||||
def on_custom_notification(val, plugin, **kwargs):
|
||||
plugin.log("Got a custom notification {}".format(val))
|
||||
def on_custom_notification(origin, payload, **kwargs):
|
||||
plugin.log("Got a custom notification {} from plugin {}".format(payload, origin))
|
||||
|
||||
|
||||
@plugin.method("emit")
|
||||
|
@ -2404,7 +2404,6 @@ def test_self_disable(node_factory):
|
||||
l1.rpc.plugin_start(p2, selfdisable=True)
|
||||
|
||||
|
||||
@pytest.mark.xfail(strict=True)
|
||||
def test_custom_notification_topics(node_factory):
|
||||
plugin = os.path.join(
|
||||
os.path.dirname(__file__), "plugins", "custom_notifications.py"
|
||||
|
Loading…
Reference in New Issue
Block a user