diff options
| author | grunfink <grunfink@comam.es> | 2026-06-24 11:22:11 +0200 |
|---|---|---|
| committer | grunfink <grunfink@comam.es> | 2026-06-24 11:22:11 +0200 |
| commit | fbc30d15524a84467570308a6eac2fcebf548659 (patch) | |
| tree | ae4c12597caffe46a2b4b8216186606f8eb91d09 | |
| parent | 2135bdfd3aa62cb319fb73f87c071b36a160ef73 (diff) | |
Added more checks for 'Delete' and 'Update'.
| -rw-r--r-- | activitypub.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/activitypub.c b/activitypub.c index 7d9eb7b..0d2a54b 100644 --- a/activitypub.c +++ b/activitypub.c @@ -3086,6 +3086,16 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req) snac_log(snac, xs_fmt("malformed message: no 'id' field")); else if (object_here(id)) { + const char *atto = get_atto(object); + + if (atto == NULL) + snac_log(snac, xs_fmt("ignored post 'Update' with no attributedTo %s", id)); + else + if (strcmp(atto, key_id) != 0) { + snac_log(snac, xs_fmt("Update: mismatched attributedTo '%s' and key '%s'", atto, key_id)); + srv_archive_error("update_post_key_mismatch", "bad keyId", atto, key_id); + } + else if (xs_startswith(id, srv_baseurl) && !xs_startswith(id, actor)) snac_log(snac, xs_fmt("ignored incorrect 'Update' %s %s", actor, id)); else { @@ -3126,10 +3136,22 @@ int process_input_message(snac *snac, const xs_dict *msg, const xs_dict *req) if (xs_type(object) == XSTYPE_DICT) object = xs_dict_get(object, "id"); + xs *obj_data = NULL; + if (xs_is_null(object)) snac_log(snac, xs_fmt("malformed message: no 'id' field")); else - if (object_here(object)) { + if (valid_status(object_get(object, &obj_data))) { + const char *atto = get_atto(obj_data); + + if (atto == NULL) + snac_log(snac, xs_fmt("ignored 'Delete' for object with attributedTo %s", object)); + else + if (strcmp(atto, key_id) != 0) { + snac_log(snac, xs_fmt("Delete: mismatched attributedTo '%s' and key '%s'", atto, key_id)); + srv_archive_error("delete_post_key_mismatch", "bad keyId", atto, key_id); + } + else if (xs_startswith(object, srv_baseurl) && !is_msg_mine(snac, object)) snac_log(snac, xs_fmt("ignored incorrect 'Delete' %s %s", actor, object)); else { |