From fe472a63a0d9d57ed9a17e5473ab7e9cc4accb6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chmielowski?= Date: Thu, 4 Jul 2024 13:49:29 +0200 Subject: [PATCH] Improve cross version handling of muc retractions --- mix.exs | 2 +- rebar.config | 2 +- rebar.lock | 85 ++++++++++++++++++++++---------------------- src/mod_muc_room.erl | 43 +++++++++------------- 4 files changed, 62 insertions(+), 70 deletions(-) diff --git a/mix.exs b/mix.exs index 002f8628c..52fd90f93 100644 --- a/mix.exs +++ b/mix.exs @@ -145,7 +145,7 @@ defmodule Ejabberd.MixProject do {:p1_utils, "~> 1.0"}, {:pkix, "~> 1.0"}, {:stringprep, ">= 1.0.26"}, - {:xmpp, ">= 1.8.2"}, + {:xmpp, git: "https://github.com/processone/xmpp.git", ref: "ce76eda23d8c7654a815f50de6c7cfcaa6c46850", override: true}, {:yconf, "~> 1.0"}] ++ cond_deps() end diff --git a/rebar.config b/rebar.config index bbb02af56..9999574e7 100644 --- a/rebar.config +++ b/rebar.config @@ -69,7 +69,7 @@ {stringprep, "~> 1.0.29", {git, "https://github.com/processone/stringprep", {tag, "1.0.30"}}}, {if_var_true, stun, {stun, "~> 1.2.12", {git, "https://github.com/processone/stun", {tag, "1.2.13"}}}}, - {xmpp, "~> 1.8.2", {git, "https://github.com/processone/xmpp", {tag, "1.8.2"}}}, + {xmpp, "~> 1.8.2", {git, "https://github.com/processone/xmpp", "ce76eda23d8c7654a815f50de6c7cfcaa6c46850"}}, {yconf, "~> 1.0.15", {git, "https://github.com/processone/yconf", {tag, "1.0.16"}}} ]}. diff --git a/rebar.lock b/rebar.lock index 3ea42655d..750fb5f49 100644 --- a/rebar.lock +++ b/rebar.lock @@ -1,86 +1,87 @@ {"1.2.0", [{<<"base64url">>,{pkg,<<"base64url">>,<<"1.0.1">>},1}, - {<<"cache_tab">>,{pkg,<<"cache_tab">>,<<"1.0.30">>},0}, - {<<"eimp">>,{pkg,<<"eimp">>,<<"1.0.22">>},0}, + {<<"cache_tab">>,{pkg,<<"cache_tab">>,<<"1.0.31">>},0}, + {<<"eimp">>,{pkg,<<"eimp">>,<<"1.0.23">>},0}, {<<"epam">>,{pkg,<<"epam">>,<<"1.0.14">>},0}, {<<"eredis">>,{pkg,<<"eredis">>,<<"1.2.0">>},0}, - {<<"esip">>,{pkg,<<"esip">>,<<"1.0.52">>},0}, - {<<"ezlib">>,{pkg,<<"ezlib">>,<<"1.0.12">>},0}, - {<<"fast_tls">>,{pkg,<<"fast_tls">>,<<"1.1.19">>},0}, - {<<"fast_xml">>,{pkg,<<"fast_xml">>,<<"1.1.51">>},0}, - {<<"fast_yaml">>,{pkg,<<"fast_yaml">>,<<"1.0.36">>},0}, + {<<"esip">>,{pkg,<<"esip">>,<<"1.0.53">>},0}, + {<<"ezlib">>,{pkg,<<"ezlib">>,<<"1.0.13">>},0}, + {<<"fast_tls">>,{pkg,<<"fast_tls">>,<<"1.1.20">>},0}, + {<<"fast_xml">>,{pkg,<<"fast_xml">>,<<"1.1.52">>},0}, + {<<"fast_yaml">>,{pkg,<<"fast_yaml">>,<<"1.0.37">>},0}, {<<"idna">>,{pkg,<<"idna">>,<<"6.1.1">>},0}, {<<"jiffy">>,{pkg,<<"jiffy">>,<<"1.1.1">>},0}, {<<"jose">>,{pkg,<<"jose">>,<<"1.11.10">>},0}, {<<"luerl">>,{pkg,<<"luerl">>,<<"1.2.0">>},0}, - {<<"mqtree">>,{pkg,<<"mqtree">>,<<"1.0.16">>},0}, + {<<"mqtree">>,{pkg,<<"mqtree">>,<<"1.0.17">>},0}, {<<"p1_acme">>,{pkg,<<"p1_acme">>,<<"1.0.23">>},0}, {<<"p1_mysql">>,{pkg,<<"p1_mysql">>,<<"1.0.24">>},0}, {<<"p1_oauth2">>,{pkg,<<"p1_oauth2">>,<<"0.6.14">>},0}, {<<"p1_pgsql">>,{pkg,<<"p1_pgsql">>,<<"1.1.26">>},0}, - {<<"p1_utils">>,{pkg,<<"p1_utils">>,<<"1.0.25">>},0}, + {<<"p1_utils">>,{pkg,<<"p1_utils">>,<<"1.0.26">>},0}, {<<"pkix">>,{pkg,<<"pkix">>,<<"1.0.10">>},0}, - {<<"sqlite3">>,{pkg,<<"sqlite3">>,<<"1.1.14">>},0}, - {<<"stringprep">>,{pkg,<<"stringprep">>,<<"1.0.29">>},0}, - {<<"stun">>,{pkg,<<"stun">>,<<"1.2.12">>},0}, + {<<"sqlite3">>,{pkg,<<"sqlite3">>,<<"1.1.15">>},0}, + {<<"stringprep">>,{pkg,<<"stringprep">>,<<"1.0.30">>},0}, + {<<"stun">>,{pkg,<<"stun">>,<<"1.2.13">>},0}, {<<"unicode_util_compat">>,{pkg,<<"unicode_util_compat">>,<<"0.7.0">>},1}, - {<<"xmpp">>,{pkg,<<"xmpp">>,<<"1.8.2">>},0}, - {<<"yconf">>,{pkg,<<"yconf">>,<<"1.0.15">>},0}]}. + {<<"xmpp">>, + {git,"https://github.com/processone/xmpp", + {ref,"ce76eda23d8c7654a815f50de6c7cfcaa6c46850"}}, + 0}, + {<<"yconf">>,{pkg,<<"yconf">>,<<"1.0.16">>},0}]}. [ {pkg_hash,[ {<<"base64url">>, <<"F8C7F2DA04CA9A5D0F5F50258F055E1D699F0E8BF4CFDB30B750865368403CF6">>}, - {<<"cache_tab">>, <<"6D35EECFB65FBE5FC85988503A27338D32DE01243F3FC8EA3EE7161AF08725A4">>}, - {<<"eimp">>, <<"FA9B376EF0B50E8455DB15C7C11DEA4522C6902E04412288AAB436D26335F6EB">>}, + {<<"cache_tab">>, <<"E4097B50A6F373AB1E0A5F01BAB0BEF6626771A4CD6C93404ED6D54810E11FBC">>}, + {<<"eimp">>, <<"AAF32EFAB061143403DADBAA63E699EF8E81702FBFA96FD436D5E9BE4D6A8D3A">>}, {<<"epam">>, <<"AA0B85D27F4EF3A756AE995179DF952A0721237E83C6B79D644347B75016681A">>}, {<<"eredis">>, <<"0B8E9CFC2C00FA1374CD107EA63B49BE08D933DF2CF175E6A89B73DD9C380DE4">>}, - {<<"esip">>, <<"A2840287C493A4280E6FBA57A257706843B025C315875E38B03FD07190E22DBA">>}, - {<<"ezlib">>, <<"FFE906BA10D03AAEE7977E1E0E81D9FFC3BB8B47FB9CD8E2E453507A2E56221F">>}, - {<<"fast_tls">>, <<"F52731A4B35259FA06CF23E2A0732920AD9EFCE7C3D68377F129A474998747BB">>}, - {<<"fast_xml">>, <<"A7F8C6942591632309099386D5C339C89997AC2BBDD1216F6C196DEE6D7828A9">>}, - {<<"fast_yaml">>, <<"65413A34A570FD4E205A460BA602E4EE7A682F35C22D2E1C839025DBF515105C">>}, + {<<"esip">>, <<"482786A79D8F5B0AEFC60CA68B8C6C7F074F6EDE2653705E4206C6779EDC5A56">>}, + {<<"ezlib">>, <<"3C7F62862850A241159C10B218ECF580BCE54D0890601B65144DACC2633BE2B0">>}, + {<<"fast_tls">>, <<"D6F12D9AE4FE57E880B144B912E735AF89343A8463D39B7EB4BE3F6CA6163879">>}, + {<<"fast_xml">>, <<"0289DAAFBF1190B0E53B444D4885CCCF41E4B05768D4B3ACC76DD8D143668E10">>}, + {<<"fast_yaml">>, <<"F71D472FBF787CCD161B914D1EB486116A0F4F2E835337A378FBD31B59D2E74B">>}, {<<"idna">>, <<"8A63070E9F7D0C62EB9D9FCB360A7DE382448200FBBD1B106CC96D3D8099DF8D">>}, {<<"jiffy">>, <<"ACA10F47AA91697BF24AB9582C74E00E8E95474C7EF9F76D4F1A338D0F5DE21B">>}, {<<"jose">>, <<"A903F5227417BD2A08C8A00A0CBCC458118BE84480955E8D251297A425723F83">>}, {<<"luerl">>, <<"60F05F4240F0E7C148DDB79B67B8FF972734AAD237AA74C83D0748B8214C8EF0">>}, - {<<"mqtree">>, <<"F8F8B4971E4CA94313BA9BCAAA1AA1077DAABA5E3FD3468FFB491420A4CC3593">>}, + {<<"mqtree">>, <<"82F54B8F2D22B4445DB1D6CCCB7FE9EAD049D61410C29E32475F3CEB3EE62A89">>}, {<<"p1_acme">>, <<"791AEF0F79DC7F768B228808250C349FA9CE585CD8779DA50CA93106EB3394D0">>}, {<<"p1_mysql">>, <<"0ED1E098C5A4525032448C65A2715F30980AAE725615A4D255FD25F26BB22507">>}, {<<"p1_oauth2">>, <<"1C5F82535574DE87E2059695AC4B91F8F9AEBACBC1C80287DAE6F02552D47AEA">>}, {<<"p1_pgsql">>, <<"D3C3748C3638A1D7DB5644E4FC63A6DA7614B3009E172EF92A01D0217C3BEC65">>}, - {<<"p1_utils">>, <<"2D39B5015A567BBD2CC7033EEB93A7C60D8C84EFE1EF69A3473FAA07FA268187">>}, + {<<"p1_utils">>, <<"67B0C4AC9FA3BA3EF563B31AA111B0A004439A37FAC85E027F1C3617E1C7EC6C">>}, {<<"pkix">>, <<"D3BFADF7B7CFE2A3636F1B256C9CCE5F646A07CE31E57EE527668502850765A0">>}, - {<<"sqlite3">>, <<"F9EA0CFF8540865FDFDB7E24EEF34DC46677364B1C070896E99B5BF08C8A7FD7">>}, - {<<"stringprep">>, <<"02F23E8C3A219A3DFE40A22E908BECE3A2F68AF0FF599EA8A7B714ECB21E62EE">>}, - {<<"stun">>, <<"A65DF67A8AAAECB6A94D687977B2E9F161820819910CB97BBE26A3525356525B">>}, + {<<"sqlite3">>, <<"E819DEFD280145C328457D7AF897D2E45E8E5270E18812EE30B607C99CDD21AF">>}, + {<<"stringprep">>, <<"46CF0FF631B3E7328F61F20B454D59428D87738F25D709798B5DCBB9B83C23F1">>}, + {<<"stun">>, <<"C3E855F10F6B0C3AC150BCE3D6C96C04A85207A3A5C7A7207876D8B36DB2B0A4">>}, {<<"unicode_util_compat">>, <<"BC84380C9AB48177092F43AC89E4DFA2C6D62B40B8BD132B1059ECC7232F9A78">>}, - {<<"xmpp">>, <<"7C26FAE7CA83B307BAB99624595DCE706D427A17EED9C6305980550F8120A3A3">>}, - {<<"yconf">>, <<"E22998B3D7728270BDD06162A9515BD142B14FAE8927CBDBD3EF639C32AA6F7A">>}]}, + {<<"yconf">>, <<"D59521D66FF89F219411B6E9277CD6FEEC7CC6FCE11554E67DE02A8D0A470479">>}]}, {pkg_hash_ext,[ {<<"base64url">>, <<"F9B3ADD4731A02A9B0410398B475B33E7566A695365237A6BDEE1BB447719F5C">>}, - {<<"cache_tab">>, <<"6D8A5E00D8F84C42627706A6DBEDB02E34D58495F3ED61935C8475CA0531CDA0">>}, - {<<"eimp">>, <<"B3B9FFB1D9A5F4A2BA88AC418A819164932D9A9D3A2FC3D32CA338CE855C4392">>}, + {<<"cache_tab">>, <<"8582B60A4A09B247EF86355BA9E07FCE9E11EDC0345A775C9171F971C72B6351">>}, + {<<"eimp">>, <<"907C780023CB2893E4FC4BDBE6A4F02C355913862AC67F0ECC26605E816B628A">>}, {<<"epam">>, <<"2F3449E72885A72A6C2A843F561ADD0FC2F70D7A21F61456930A547473D4D989">>}, {<<"eredis">>, <<"D9B5ABEF2C2C8ABA8F32AA018203E0B3DC8B1157773B254AB1D4C2002317F1E1">>}, - {<<"esip">>, <<"6F00165395900500AA262CE0297162D93931C78C1464D89FD0EDC6E3D6BC011F">>}, - {<<"ezlib">>, <<"30E94355FB42260AAB6E12582CB0C56BF233515E655C8AEAF48760E7561E4EBB">>}, - {<<"fast_tls">>, <<"DB34322C8782D4C5139CCB80709D8EC8C38089B44262EDD0C2F660AC495BD389">>}, - {<<"fast_xml">>, <<"7FCE41B7D1A4BA438A2D7A088DABE74A3CA0739F1AF2ABCB77E62DAF43E0409A">>}, - {<<"fast_yaml">>, <<"1ABE8F758FC2A86B08EDFF80BBC687CFD41EBC1412CFEC0EF4A0ACFCD032052F">>}, + {<<"esip">>, <<"A9A1BD5EA52B0E2D1B1D1FEC5FB7F0301E90610DB1ECFEB205A18CC4E1CB3FC7">>}, + {<<"ezlib">>, <<"9EE62AB3F8ED55A0FD11A9569FCB8E458683F95575417272192B069F092ABFBB">>}, + {<<"fast_tls">>, <<"D09A12472A56A34C5EECAAED33EA283F00FCDF9DC2E8282ECBAAE827F13FC21B">>}, + {<<"fast_xml">>, <<"795192390E06D2B65016A6990BBFA5727F4A26D2914808B1C3C9A32EEDCD1BFD">>}, + {<<"fast_yaml">>, <<"8DE868721BF7E2172414F7D3148EDE0F3C922B496455CD625DD5C4429515A769">>}, {<<"idna">>, <<"92376EB7894412ED19AC475E4A86F7B413C1B9FBB5BD16DCCD57934157944CEA">>}, {<<"jiffy">>, <<"62E1F0581C3C19C33A725C781DFA88410D8BFF1BBAFC3885A2552286B4785C4C">>}, {<<"jose">>, <<"0D6CD36FF8BA174DB29148FC112B5842186B68A90CE9FC2B3EC3AFE76593E614">>}, {<<"luerl">>, <<"9CAFD4F6094FF0F5A9D278FD81D60D3E026C820BDFB6CACD4B1BD909F21B525D">>}, - {<<"mqtree">>, <<"C87D1C95575DB65AF29B795C9DAA3BED43F5C1BF84072A74469659BCF53594EB">>}, + {<<"mqtree">>, <<"5FE8B7CF8FBC4783D0FCEB94654AC2BBF3242A58CD0397D249DED8AE021BE2A3">>}, {<<"p1_acme">>, <<"8CE196F26E3D22EA10B7809122950465878C127F80767E325207AED7E8D0DD59">>}, {<<"p1_mysql">>, <<"F058865F64257F507A2C6A5AFF369B1375DBCB30B3D4258DAD4F1B3EAFFB655F">>}, {<<"p1_oauth2">>, <<"1FD3AC474E43722D9D5A87C6DF8D36F698ED87AF7BB81CBBB66361451D99AE8F">>}, {<<"p1_pgsql">>, <<"85F230DB530333106B8A1F9E5D5AF032E6C3DD23B432E03D68E9D29013A6DCFC">>}, - {<<"p1_utils">>, <<"9219214428F2C6E5D3187FF8EB9A8783695C2427420BE9A259840E07ADA32847">>}, + {<<"p1_utils">>, <<"D0379E8C1156B98BD64F8129C1DE022FCCA4F2FDB7486CE73BF0ED2C3376B04C">>}, {<<"pkix">>, <<"E02164F83094CB124C41B1AB28988A615D54B9ADC38575F00F19A597A3AC5D0E">>}, - {<<"sqlite3">>, <<"85054B6CA297343C159ED6794A473FF2C8EEABD854B6FE02F711C0BFD373CE86">>}, - {<<"stringprep">>, <<"928EBA304C3006EB1512110EBD7B87DB163B00859A09375A1E4466152C6C462A">>}, - {<<"stun">>, <<"A2055032B6D338D0454142004BCB12FAFB0C64AB1F273F1D0C6923EBBC8EDE40">>}, + {<<"sqlite3">>, <<"3C0BA4E13322C2AD49DE4E2DDD28311366ADDE54BEAE8DBA9D9E3888F69D2857">>}, + {<<"stringprep">>, <<"F6FC9B3384A03877830F89B2F38580CAF3F4A27448A4A333D6A8C3975C220B9A">>}, + {<<"stun">>, <<"9CF4191491A60573ED6197E636530AF1D25C9B064845AABED0C02F780D33EA3F">>}, {<<"unicode_util_compat">>, <<"25EEE6D67DF61960CF6A794239566599B09E17E668D3700247BC498638152521">>}, - {<<"xmpp">>, <<"53A9F85AD44103A358DC173225BC96D08076D4E78506F87D838337B2FA3B381F">>}, - {<<"yconf">>, <<"7FF2AB24D3C9833842716B9AAAA01A8F96641A7695CBB701B03445C4DEF01117">>}]} + {<<"yconf">>, <<"E947813273F38711C7B2E5A8E4ACC9A51C7BBE854F744A345F60300B38586C89">>}]} ]. diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl index e97d73f81..c96114e6f 100644 --- a/src/mod_muc_room.erl +++ b/src/mod_muc_room.erl @@ -505,12 +505,12 @@ normal_state({route, <<"">>, process_iq_adhoc(From, IQ, StateData); #register{} -> mod_muc:process_iq_register(IQ); - #message_moderate{} = Moderate -> % moderate:1 - process_iq_moderate(From, IQ, Moderate, StateData); + #message_moderate{id = Id, reason = Reason} -> % moderate:1 + process_iq_moderate(From, IQ, Id, Reason, StateData); #fasten_apply_to{id = ModerateId} = ApplyTo -> - case xmpp:get_subtag(ApplyTo, #message_moderate{}) of - #message_moderate{} = Moderate -> % moderate:0 - process_iq_moderate(From, IQ, Moderate#message_moderate{id = ModerateId}, StateData); + case xmpp:get_subtag(ApplyTo, #message_moderate_21{}) of + #message_moderate_21{reason = Reason} -> % moderate:0 + process_iq_moderate(From, IQ, ModerateId, Reason, StateData); _ -> Txt = ?T("The feature requested is not " "supported by the conference"), @@ -5162,13 +5162,12 @@ add_presence_hats(JID, Pres, StateData) -> Pres end. --spec process_iq_moderate(jid(), iq(), message_moderate(), state()) -> +-spec process_iq_moderate(jid(), iq(), binary(), binary() | undefined, state()) -> {result, undefined, state()} | {error, stanza_error()}. -process_iq_moderate(_From, #iq{type = get}, _Moderate, _StateData) -> +process_iq_moderate(_From, #iq{type = get}, _Id, _Reason, _StateData) -> {error, xmpp:err_bad_request()}; -process_iq_moderate(From, #iq{type = set, lang = Lang}, - #message_moderate{id = Id, reason = Reason, xmlns = Xmlns}, +process_iq_moderate(From, #iq{type = set, lang = Lang}, Id, Reason, #state{config = Config, room = Room, host = Host, jid = JID, server_host = Server} = StateData) -> FAffiliation = get_affiliation(From, StateData), @@ -5189,25 +5188,17 @@ process_iq_moderate(From, #iq{type = set, lang = Lang}, ok end, By = jid:replace_resource(JID, find_nick_by_jid(From, StateData)), - SubEl = case Xmlns of - ?NS_MESSAGE_MODERATE_0 -> - SubEls = [#xmlel{name = <<"reason">>, - attrs = [], - children = [{xmlcdata, Reason}]}, - #message_retract{id = Id}], - ModeratedEl = #message_moderated{by = By, - sub_els = SubEls}, - #fasten_apply_to{id = Id, - sub_els = [ModeratedEl]}; - ?NS_MESSAGE_MODERATE_1 -> - ModeratedEl = #message_moderated{by = By}, - #message_retract{id = Id, - reason = Reason, - moderated = ModeratedEl} - end, + Mod21 = #message_moderated_21{by = By, + reason = Reason, + sub_els = [#message_retract_30{}]}, + SubEl = [#fasten_apply_to{id = Id, + sub_els = [Mod21]}, + #message_retract{id = Id, + reason = Reason, + moderated = #message_moderated{by = By}}], Packet0 = #message{type = groupchat, from = From, - sub_els = [SubEl]}, + sub_els = SubEl}, {FromNick, _Role} = get_participant_data(From, StateData), Packet = ejabberd_hooks:run_fold(muc_filter_message, StateData#state.server_host,