index
:
nextcloud-server.git
27-shared-null-storage-merged
3rdparty/justinrainbow/json-schema
3rdparty/stable28/sabre-dav-itip-broker
3rdparty/stable29/sabre-dav-itip-broker
3rdparty/stable30/sabre-dav-itip-broker
44287-fix-avatar-fed-share-receiver
44319-fix-fed-share-user-avatars
Dennis1993-patch-1
Fix/app-menu-overflow
Fix/mp3_regex
Jerome-Herbinet-better-devices-wipe-action-wording
Jerome-Herbinet-internal-shares-parameter-better-distinction
Jerome-Herbinet-patch-1
add-caldav-repair-middleware
add-command-to-cleanup-preview
add-default-request-timeout-const
add-integration-tests-for-moving-a-file-from-and-to-a-shared-folder
add-integration-tests-for-renaming-a-share-by-a-user-with-stale-shares
addAllToGroupBy
addConstrDep
admin-audit-listen-failed-login
admin_audit/enh/move-to-event-listeners
allowMkcolAndPut
appStoreDisabledOcc
artonge/backport/stable27/47770
artonge/backport/stable29/48207
artonge/chore/ldap_wizard_rewrite
artonge/chore/update_nc_cypress_beta.11
artonge/chore/update_nc_pwd_confirmation_v5.3.1
artonge/chore/update_password_confirmation_v5.3.1
artonge/chore/user_retry_trait
artonge/debt/core_main.js
artonge/feat/add_retry_support_to_query_builder
artonge/feat/allow_deleting_metadata
artonge/feat/compare_hashed_password_when_updating_global_cred_in_files_external
artonge/feat/maintenance_warn_encrypt_all
artonge/feat/pwd_confirmation_allow_set_period
artonge/feat/reset_route_when_sidebar_and_viewer_are_close
artonge/feat/skip-trash-header
artonge/feat/validate_keychecksum
artonge/fix/access_list_unaccepted_shares
artonge/fix/color_debounce
artonge/fix/copy_cache_during_copy_operations
artonge/fix/displayname_in_sidebar
artonge/fix/drop_unecessary_exit
artonge/fix/file_list_jump_on_viewer_close
artonge/fix/getting_cache_entry
artonge/fix/handle_folders_copy_live_photos
artonge/fix/hash_return_type
artonge/fix/listen_to_group_removal_for_share
artonge/fix/login_flow_v2_sessions
artonge/fix/metadata_field_search
artonge/fix/min_age_rentention_files_versions
artonge/fix/missing_dot
artonge/fix/opening_a_secondly_created_file
artonge/fix/prevent_missing_users_from_crashing_disabled_users_search
artonge/fix/remove_duplicate_propfind_call
artonge/fix/remove_unnecessary_formating
artonge/fix/restoring_encrypted_version
artonge/fix/sidebar_davpath
artonge/fix/storage_full_warning
artonge/fix/uid_type
artonge/fix/vue_app_names
artonge/local/IONOS/feat/config_unified_search_providers_allowed
artonge/local/IONOS/tl/dev/disable-mailing
artonge/local/georglauterbach/feat/skip_cname
authPropertyPromotion
automated/noid/main-fix-npm-audit
automated/noid/master-fix-npm-audit
automated/noid/master-update-ca-cert-bundle
automated/noid/master-update-code-signing-crl
automated/noid/master-update-psalm-baseline
automated/noid/stable22-update-ca-cert-bundle
automated/noid/stable22-update-code-signing-crl
automated/noid/stable23-update-ca-cert-bundle
automated/noid/stable23-update-code-signing-crl
automated/noid/stable24-update-ca-cert-bundle
automated/noid/stable24-update-code-signing-crl
automated/noid/stable25-update-ca-cert-bundle
automated/noid/stable25-update-code-signing-crl
automated/noid/stable26-update-ca-cert-bundle
automated/noid/stable26-update-code-signing-crl
automated/noid/stable27-fix-npm-audit
automated/noid/stable27-update-ca-cert-bundle
automated/noid/stable27-update-code-signing-crl
automated/noid/stable28-fix-npm-audit
automated/noid/stable28-update-ca-cert-bundle
automated/noid/stable28-update-code-signing-crl
automated/noid/stable28-update-psalm-baseline
automated/noid/stable29-fix-npm-audit
automated/noid/stable29-update-ca-cert-bundle
automated/noid/stable29-update-code-signing-crl
automated/noid/stable29-update-psalm-baseline
automated/noid/stable30-fix-npm-audit
automated/noid/stable30-update-ca-cert-bundle
automated/noid/stable30-update-code-signing-crl
automated/noid/stable30-update-psalm-baseline
automated/noid/stable31-fix-npm-audit
automated/update-workflows/default
avatar-work-29
avoidStatusSessions
background-job-list-reserved
backport/29-openfile
backport/30/fix_move_on_same_bucket
backport/38630/stable28
backport/38630/stable29
backport/38630/stable30
backport/39607/stable26
backport/40367/stable25
backport/40367/stable26
backport/40394/stable25
backport/40394/stable26
backport/40394/stable27
backport/40394/stable28
backport/40394/stable29
backport/40394/stable30
backport/41327/stable26
backport/42170/stable28
backport/42172/stable26
backport/42548/stable22
backport/42930/stable26
backport/42971/stable25
backport/43025/stable28
backport/43025/stable29
backport/43025/stable30
backport/43252/stable26
backport/43580/stable26
backport/44017/stable26
backport/44130/stable26
backport/44218/stable29
backport/44236/stable28
backport/44295/stable29
backport/44533/stable29
backport/44555/stable27
backport/44745/stable27
backport/44745/stable28
backport/44838/stable27
backport/44912/stable27
backport/44945/stable30
backport/44956/stable28
backport/45026/stable26
backport/45098/stable28
backport/45098/stable29
backport/45364/stable29
backport/45364/stable30
backport/45364/stable31
backport/45765/stable30
backport/45848/stable28
backport/46013/stable26
backport/46013/stable27
backport/46013/stable28
backport/46114/stable30
backport/46124/stable28
backport/46124/stable29
backport/46124/stable30
backport/46140/stable28
backport/46140/stable29
backport/46140/stable30
backport/46218/stable27
backport/46218/stable28
backport/46218/stable29
backport/46218/stable30
backport/46222/stable30
backport/46480/stable28
backport/46480/stable29
backport/46480/stable30
backport/46534/stable27
backport/46691/stable30
backport/46780/stable30
backport/46780/stable31
backport/46931/stable28
backport/47180/stable26
backport/47180/stable28
backport/47265/stable30
backport/47316/stable28
backport/47316/stable29
backport/47316/stable30
backport/47339/stable28
backport/47339/stable29
backport/47339/stable30
backport/47349/stable28
backport/47349/stable29
backport/47349/stable30
backport/47399/stable30
backport/47425/stable28
backport/47425/stable29
backport/47425/stable30
backport/47441/stable29
backport/47510/stable29
backport/47515/stable29
backport/47527/stable30
backport/47628/stable29
backport/47640/stable29
backport/47649/stable28
backport/47649/stable29
backport/47670/stable30
backport/47737/stable30
backport/47745/stable28
backport/47756/stable29
backport/47756/stable30
backport/47801/stable30
backport/47807/stable29
backport/47824/stable30
backport/47832/stable28
backport/47832/stable29
backport/47832/stable30
backport/47834/stable28
backport/47834/stable29
backport/47834/stable30
backport/47846/stable28
backport/47846/stable29
backport/47846/stable30
backport/47847/stable28
backport/47847/stable29
backport/47847/stable30
backport/47848/stable28
backport/47848/stable29
backport/47848/stable30
backport/47852/stable30
backport/47853/stable29
backport/47854/stable28
backport/47854/stable29
backport/47854/stable30
backport/47858/stable28
backport/47858/stable29
backport/47858/stable30
backport/47860/stable28
backport/47860/stable29
backport/47881/stable29
backport/47881/stable30
backport/47883/stable29
backport/47883/stable30
backport/47889/stable30
backport/47889/stable31
backport/47896/stable28
backport/47896/stable29
backport/47896/stable30
backport/47905/stable29
backport/47905/stable30
backport/47910/stable28
backport/47910/stable29
backport/47910/stable30
backport/47914/stable28
backport/47914/stable29
backport/47914/stable30
backport/47920/stable28
backport/47920/stable29
backport/47920/stable30
backport/47924/stable28
backport/47924/stable29
backport/47924/stable30
backport/47928/stable28
backport/47928/stable29
backport/47928/stable30
backport/47933/stable28
backport/47933/stable29
backport/47933/stable30
backport/47954/stable28
backport/47954/stable29
backport/47954/stable30
backport/47971/stable28
backport/47971/stable29
backport/47971/stable30
backport/47986/stable28
backport/47986/stable29
backport/48008/stable28
backport/48008/stable29
backport/48008/stable30
backport/48013/stable28
backport/48013/stable29
backport/48013/stable30
backport/48014/stable28
backport/48014/stable29
backport/48014/stable30
backport/48015/stable28
backport/48015/stable29
backport/48015/stable30
backport/48016/stable29
backport/48016/stable30
backport/48017/stable28
backport/48017/stable29
backport/48017/stable30
backport/48028/stable30
backport/48030/stable28
backport/48030/stable29
backport/48030/stable30
backport/48031/stable29
backport/48031/stable30
backport/48037/stable30
backport/48043/stable28
backport/48043/stable29
backport/48043/stable30
backport/48044/stable29
backport/48044/stable30
backport/48045/stable28
backport/48045/stable29
backport/48045/stable30
backport/48050/stable28
backport/48050/stable29
backport/48050/stable30
backport/48063/stable30
backport/48080/stable28
backport/48080/stable29
backport/48080/stable30
backport/48081/stable28
backport/48081/stable29
backport/48081/stable30
backport/48090/stable29
backport/48090/stable30
backport/48094/stable28
backport/48094/stable29
backport/48094/stable30
backport/48114/stable28
backport/48114/stable29
backport/48114/stable30
backport/48134/stable30
backport/48140/stable30
backport/48142/stable25
backport/48142/stable26
backport/48142/stable27
backport/48142/stable28
backport/48142/stable29
backport/48145/stable28
backport/48145/stable29
backport/48145/stable30
backport/48153/stable30
backport/48160/stable30
backport/48162/stable30
backport/48177/stable28
backport/48177/stable29
backport/48177/stable30
backport/48205/stable28
backport/48205/stable29
backport/48207/stable28
backport/48207/stable29
backport/48207/stable30
backport/48215/stable30
backport/48222/stable30
backport/48224/stable30
backport/48227/stable30
backport/48235/stable29
backport/48235/stable30
backport/48266/stable28
backport/48266/stable29
backport/48266/stable30
backport/48268/stable28
backport/48268/stable29
backport/48268/stable30
backport/48282/stable24
backport/48282/stable25
backport/48282/stable26
backport/48282/stable27
backport/48282/stable28
backport/48282/stable29
backport/48294/master
backport/48297/stable25
backport/48297/stable26
backport/48307/stable28
backport/48307/stable29
backport/48307/stable30
backport/48311/stable29
backport/48311/stable30
backport/48315/stable28
backport/48331/stable28
backport/48331/stable29
backport/48331/stable30
backport/48345/stable28
backport/48345/stable29
backport/48345/stable30
backport/48354/stable28
backport/48354/stable29
backport/48354/stable30
backport/48356/stable30
backport/48359/stable25
backport/48359/stable26
backport/48359/stable27
backport/48359/stable28
backport/48359/stable29
backport/48359/stable30
backport/48361/stable28
backport/48361/stable29
backport/48361/stable30
backport/48366/stable28
backport/48366/stable29
backport/48366/stable30
backport/48373/stable28
backport/48373/stable29
backport/48373/stable30
backport/48375/stable28
backport/48375/stable29
backport/48375/stable30
backport/48381/stable30
backport/48425/stable29
backport/48425/stable30
backport/48426/stable28
backport/48426/stable29
backport/48426/stable30
backport/48437/stable28
backport/48437/stable29
backport/48437/stable30
backport/48439/stable30
backport/48445/stable27
backport/48451/stable29
backport/48451/stable30
backport/48466/stable28
backport/48466/stable29
backport/48466/stable30
backport/48480/stable30
backport/48484/stable29
backport/48484/stable30
backport/48486/stable30
backport/48508/stable30
backport/48510/stable25
backport/48510/stable26
backport/48510/stable27
backport/48512/stable30
backport/48513/stable30
backport/48519/stable29
backport/48519/stable30
backport/48520/stable30
backport/48522/stable30
backport/48532/stable28
backport/48532/stable29
backport/48532/stable30
backport/48538/stable30
backport/48539/stable28
backport/48539/stable29
backport/48540/stable30
backport/48542/stable30
backport/48543/stable30
backport/48548/stable30
backport/48559/stable30
backport/48563/stable30
backport/48572/stable30
backport/48581/stable29
backport/48581/stable30
backport/48581/stable31
backport/48583/stable28
backport/48583/stable29
backport/48583/stable30
backport/48584/stable28
backport/48584/stable29
backport/48584/stable30
backport/48597/stable28
backport/48597/stable29
backport/48597/stable30
backport/48600/stable28
backport/48600/stable29
backport/48600/stable30
backport/48603/stable28
backport/48603/stable29
backport/48603/stable30
backport/48619/stable30
backport/48623/stable28
backport/48623/stable29
backport/48623/stable30
backport/48625/stable29
backport/48625/stable30
backport/48628/stable30
backport/48632/stable29
backport/48632/stable30
backport/48638/stable30
backport/48651/stable29
backport/48651/stable30
backport/48665/stable30
backport/48672/stable31
backport/48673/stable28
backport/48673/stable29
backport/48673/stable30
backport/48675/stable28
backport/48675/stable29
backport/48675/stable30
backport/48682/stable28
backport/48682/stable29
backport/48682/stable30
backport/48684/stable28
backport/48684/stable29
backport/48684/stable30
backport/48689/stable29
backport/48689/stable30
backport/48696/stable28
backport/48696/stable29
backport/48696/stable30
backport/48723/stable30
backport/48728/stable30
backport/48736/stable27
backport/48736/stable28
backport/48736/stable29
backport/48736/stable30
backport/48737/stable30
backport/48743/stable29
backport/48743/stable30
backport/48749/stable27
backport/48760/stable30
backport/48766/stable28
backport/48766/stable29
backport/48766/stable30
backport/48769/stable29
backport/48769/stable30
backport/48787/stable30
backport/48788/stable27
backport/48788/stable28
backport/48788/stable29
backport/48788/stable30
backport/48799/stable30
backport/48809/stable30
backport/48824/stable29
backport/48833/stable30
backport/48839/stable28
backport/48839/stable29
backport/48839/stable30
backport/48850/stable30
backport/48852/stable30
backport/48853/stable30
backport/48854/stable30
backport/48863/stable30
backport/48871/stable29
backport/48871/stable30
backport/48882/stable30
backport/48887/stable29
backport/48887/stable30
backport/48889/stable28
backport/48898/stable28
backport/48898/stable29
backport/48898/stable30
backport/48912/stable30
backport/48915/stable28
backport/48915/stable29
backport/48915/stable30
backport/48917/stable25
backport/48917/stable26
backport/48917/stable27
backport/48917/stable28
backport/48917/stable29
backport/48917/stable30
backport/48918/stable28
backport/48918/stable29
backport/48918/stable30
backport/48921/stable25
backport/48921/stable26
backport/48921/stable27
backport/48921/stable28
backport/48921/stable29
backport/48921/stable30
backport/48933/stable28
backport/48933/stable29
backport/48933/stable30
backport/48934/stable28
backport/48947/stable28
backport/48947/stable29
backport/48947/stable30
backport/48991/stable29
backport/48991/stable30
backport/48992/stable27
backport/48992/stable28
backport/48992/stable29
backport/48992/stable30
backport/49004/stable28
backport/49004/stable29
backport/49004/stable30
backport/49009/49009-stable29
backport/49009/stable25
backport/49009/stable26
backport/49009/stable27
backport/49009/stable28
backport/49009/stable30
backport/49017/stable28
backport/49017/stable29
backport/49017/stable30
backport/49023/stable28
backport/49023/stable29
backport/49023/stable30
backport/49039/stable30
backport/49053/stable28
backport/49053/stable29
backport/49053/stable30
backport/49057/master
backport/49065/stable28
backport/49065/stable29
backport/49065/stable30
backport/49075/stable30
backport/49076/stable28
backport/49076/stable29
backport/49112/stable28
backport/49112/stable29
backport/49112/stable30
backport/49115/stable28
backport/49115/stable30
backport/49130/stable29
backport/49130/stable30
backport/49134/stable30
backport/49139/stable28
backport/49139/stable29
backport/49139/stable30
backport/49141/stable30
backport/49143/stable28
backport/49143/stable29
backport/49143/stable30
backport/49146/stable28
backport/49146/stable29
backport/49146/stable30
backport/49147/stable30
backport/49149/stable29
backport/49150/stable28
backport/49150/stable29
backport/49150/stable30
backport/49153/stable28
backport/49153/stable29
backport/49176/stable30
backport/49196/stable28
backport/49196/stable29
backport/49196/stable30
backport/49199/stable28
backport/49199/stable29
backport/49199/stable30
backport/49203/stable29
backport/49203/stable30
backport/49208/stable29
backport/49208/stable30
backport/49209/stable30
backport/49218/stable28
backport/49218/stable29
backport/49218/stable30
backport/49219/stable30
backport/49225/stable28
backport/49225/stable29
backport/49225/stable30
backport/49226/stable30
backport/49232/stable28
backport/49232/stable29
backport/49232/stable30
backport/49237/stable30
backport/49259/stable30
backport/49260/stable30
backport/49261/stable30
backport/49262/stable28
backport/49262/stable29
backport/49271/stable29
backport/49271/stable30
backport/49281/stable30
backport/49288/stable29
backport/49288/stable30
backport/49293/stable30
backport/49308/stable29
backport/49308/stable30
backport/49311/stable28
backport/49311/stable29
backport/49311/stable30
backport/49315/stable28
backport/49315/stable29
backport/49315/stable30
backport/49332/stable28
backport/49332/stable29
backport/49332/stable30
backport/49346/stable30
backport/49351/stable29
backport/49351/stable30
backport/49357/stable30
backport/49361/stable28
backport/49361/stable29
backport/49361/stable30
backport/49372/stable28
backport/49372/stable29
backport/49372/stable30
backport/49373/stable29
backport/49380/stable30
backport/49384/master
backport/49398/stable29
backport/49398/stable30
backport/49432/master
backport/49432/stable30
backport/49434/stable30
backport/49440/stable29
backport/49440/stable30
backport/49440/stable31
backport/49442/stable28
backport/49442/stable29
backport/49442/stable30
backport/49451/stable29
backport/49451/stable30
backport/49454/stable28
backport/49454/stable29
backport/49454/stable30
backport/49459/stable30
backport/49464/stable28
backport/49464/stable29
backport/49464/stable30
backport/49476/stable28
backport/49476/stable29
backport/49476/stable30
backport/49477/stable30
backport/49489/stable30
backport/49493/stable28
backport/49493/stable29
backport/49494/stable29
backport/49494/stable29-squashed
backport/49494/stable30
backport/49503/stable28
backport/49503/stable29
backport/49503/stable30
backport/49528/stable28
backport/49528/stable29
backport/49528/stable30
backport/49551/stable29
backport/49551/stable30
backport/49552/stable28
generated by cgit v1.2.3 (git 2.39.1) at 2025-02-19 18:31:48 +0000 ">pos); guint flags_mask = default_flags; gboolean seen_flags = FALSE, seen_protocols = FALSE; memset (cbd, 0, sizeof (*cbd)); cbd->flags_mode = url_flags_mode_include_any; if (pos_arg_type == LUA_TBOOLEAN) { protocols_mask = default_protocols; if (lua_toboolean (L, 2)) { protocols_mask |= PROTOCOL_MAILTO; } } else if (pos_arg_type == LUA_TTABLE) { if (rspamd_lua_geti (L, 1, pos) == LUA_TNIL) { /* New method: indexed table */ lua_getfield (L, pos, "flags"); if (lua_istable (L, -1)) { gint top = lua_gettop (L); lua_getfield (L, pos, "flags_mode"); if (lua_isstring (L, -1)) { const gchar *mode_str = lua_tostring (L, -1); if (strcmp (mode_str, "explicit") == 0) { cbd->flags_mode = url_flags_mode_include_explicit; /* * Ignore default flags in this mode and include * merely flags specified by a caller */ flags_mask = 0; } } lua_pop (L, 1); for (lua_pushnil (L); lua_next (L, top); lua_pop (L, 1)) { int nmask = 0; const gchar *fname = lua_tostring (L, -1); if (rspamd_url_flag_from_string (fname, &nmask)) { flags_mask |= nmask; } else { msg_info ("bad url flag: %s", fname); return FALSE; } } seen_flags = TRUE; } else { flags_mask |= default_flags; } lua_pop (L, 1); lua_getfield (L, pos, "protocols"); if (lua_istable (L, -1)) { gint top = lua_gettop (L); for (lua_pushnil (L); lua_next (L, top); lua_pop (L, 1)) { int nmask; const gchar *pname = lua_tostring (L, -1); nmask = rspamd_url_protocol_from_string (pname); if (nmask != PROTOCOL_UNKNOWN) { protocols_mask |= nmask; } else { msg_info ("bad url protocol: %s", pname); return FALSE; } } seen_protocols = TRUE; } else { protocols_mask = default_protocols; } lua_pop (L, 1); if (!seen_protocols) { lua_getfield (L, pos, "emails"); if (lua_isboolean (L, -1)) { if (lua_toboolean (L, -1)) { protocols_mask |= PROTOCOL_MAILTO; } } lua_pop (L, 1); } if (!seen_flags) { lua_getfield (L, pos, "images"); if (lua_isboolean (L, -1)) { if (lua_toboolean (L, -1)) { flags_mask |= RSPAMD_URL_FLAG_IMAGE; } else { flags_mask &= ~RSPAMD_URL_FLAG_IMAGE; } } else { flags_mask &= ~RSPAMD_URL_FLAG_IMAGE; } lua_pop (L, 1); } if (!seen_flags) { lua_getfield (L, pos, "content"); if (lua_isboolean (L, -1)) { if (lua_toboolean (L, -1)) { flags_mask |= RSPAMD_URL_FLAG_CONTENT; } else { flags_mask &= ~RSPAMD_URL_FLAG_CONTENT; } } else { flags_mask &= ~RSPAMD_URL_FLAG_CONTENT; } lua_pop (L, 1); } lua_getfield (L, pos, "max_urls"); if (lua_isnumber (L, -1)) { max_urls = lua_tonumber (L, -1); } lua_pop (L, 1); lua_getfield (L, pos, "sort"); if (lua_isboolean (L, -1)) { cbd->sort = TRUE; } lua_pop (L, 1); } else { /* Plain table of the protocols */ for (lua_pushnil (L); lua_next (L, pos); lua_pop (L, 1)) { int nmask; const gchar *pname = lua_tostring (L, -1); nmask = rspamd_url_protocol_from_string (pname); if (nmask != PROTOCOL_UNKNOWN) { protocols_mask |= nmask; } else { msg_info ("bad url protocol: %s", pname); return FALSE; } } } lua_pop (L, 1); /* After rspamd_lua_geti */ } else if (pos_arg_type == LUA_TSTRING) { const gchar *plist = lua_tostring (L, pos); gchar **strvec; gchar * const *cvec; strvec = g_strsplit_set (plist, ",;", -1); cvec = strvec; while (*cvec) { int nmask; nmask = rspamd_url_protocol_from_string (*cvec); if (nmask != PROTOCOL_UNKNOWN) { protocols_mask |= nmask; } else { msg_info ("bad url protocol: %s", *cvec); return FALSE; } cvec ++; } g_strfreev (strvec); } else if (pos_arg_type == LUA_TNONE || pos_arg_type == LUA_TNIL) { protocols_mask = default_protocols; flags_mask = default_flags; } else { return FALSE; } if (lua_type (L, pos + 1) == LUA_TBOOLEAN) { if (lua_toboolean (L, pos + 1)) { flags_mask |= RSPAMD_URL_FLAG_IMAGE; } else { flags_mask &= ~RSPAMD_URL_FLAG_IMAGE; } } cbd->i = 1; cbd->L = L; cbd->max_urls = max_urls; cbd->protocols_mask = protocols_mask; cbd->flags_mask = flags_mask; /* This needs to be removed from the stack */ rspamd_lua_class_metatable (L, "rspamd{url}"); cbd->metatable_pos = lua_gettop (L); (void)lua_checkstack (L, cbd->metatable_pos + 4); return TRUE; } gboolean lua_url_cbdata_fill_exclude_include (lua_State *L, gint pos, struct lua_tree_cb_data *cbd, guint default_protocols, gsize max_urls) { guint protocols_mask = default_protocols; guint include_flags_mask, exclude_flags_mask; gint pos_arg_type = lua_type (L, pos); memset (cbd, 0, sizeof (*cbd)); cbd->flags_mode = url_flags_mode_exclude_include; /* Include flags */ if (pos_arg_type == LUA_TTABLE) { include_flags_mask = 0; /* Reset to no flags */ for (lua_pushnil(L); lua_next(L, pos); lua_pop (L, 1)) { int nmask = 0; const gchar *fname = lua_tostring (L, -1); if (rspamd_url_flag_from_string(fname, &nmask)) { include_flags_mask |= nmask; } else { msg_info ("bad url include flag: %s", fname); return FALSE; } } } else if (pos_arg_type == LUA_TNIL) { /* Include all flags */ include_flags_mask = ~0U; } else { msg_info ("bad arguments: wrong include mask"); return FALSE; } /* Exclude flags */ pos_arg_type = lua_type (L, pos + 1); if (pos_arg_type == LUA_TTABLE) { exclude_flags_mask = 0; /* Reset to no flags */ for (lua_pushnil(L); lua_next(L, pos); lua_pop (L, 1)) { int nmask = 0; const gchar *fname = lua_tostring (L, -1); if (rspamd_url_flag_from_string(fname, &nmask)) { exclude_flags_mask |= nmask; } else { msg_info ("bad url exclude flag: %s", fname); return FALSE; } } } else if (pos_arg_type == LUA_TNIL) { /* Empty all exclude flags */ exclude_flags_mask = 0U; } else { msg_info ("bad arguments: wrong exclude mask"); return FALSE; } if (lua_type (L, pos + 2) == LUA_TTABLE) { protocols_mask = 0U; /* Reset all protocols */ for (lua_pushnil (L); lua_next (L, pos + 2); lua_pop (L, 1)) { int nmask; const gchar *pname = lua_tostring (L, -1); nmask = rspamd_url_protocol_from_string (pname); if (nmask != PROTOCOL_UNKNOWN) { protocols_mask |= nmask; } else { msg_info ("bad url protocol: %s", pname); return FALSE; } } } else { protocols_mask = default_protocols; } cbd->i = 1; cbd->L = L; cbd->max_urls = max_urls; cbd->protocols_mask = protocols_mask; cbd->flags_mask = include_flags_mask; cbd->flags_exclude_mask = exclude_flags_mask; /* This needs to be removed from the stack */ rspamd_lua_class_metatable (L, "rspamd{url}"); cbd->metatable_pos = lua_gettop (L); (void)lua_checkstack (L, cbd->metatable_pos + 4); return TRUE; } void lua_url_cbdata_dtor (struct lua_tree_cb_data *cbd) { if (cbd->metatable_pos != -1) { lua_remove (cbd->L, cbd->metatable_pos); } } gsize lua_url_adjust_skip_prob (gdouble timestamp, guchar *digest, struct lua_tree_cb_data *cb, gsize sz) { if (cb->max_urls > 0 && sz > cb->max_urls) { cb->skip_prob = 1.0 - ((gdouble)cb->max_urls) / (gdouble)sz; /* * Use task dependent probabilistic seed to ensure that * consequent task:get_urls return the same list of urls */ memcpy (&cb->xoroshiro_state[0], ×tamp, MIN (sizeof (cb->xoroshiro_state[0]), sizeof (timestamp))); memcpy (&cb->xoroshiro_state[1], digest, sizeof (cb->xoroshiro_state[1]) * 3); sz = cb->max_urls; } return sz; } static gint lua_url_eq (lua_State *L) { LUA_TRACE_POINT; struct rspamd_lua_url *u1 = lua_check_url (L, 1), *u2 = lua_check_url (L, 2); if (u1 && u2) { lua_pushboolean (L, (rspamd_url_cmp (u1->url, u2->url) == 0)); } else { lua_pushboolean (L, false); } return 1; } static gint lua_url_lt (lua_State *L) { LUA_TRACE_POINT; struct rspamd_lua_url *u1 = lua_check_url (L, 1), *u2 = lua_check_url (L, 2); if (u1 && u2) { lua_pushinteger (L, rspamd_url_cmp (u1->url, u2->url)); } else { return luaL_error (L, "invalid arguments"); } return 1; } static gint lua_load_url (lua_State * L) { lua_newtable (L); luaL_register (L, NULL, urllib_f); return 1; } void luaopen_url (lua_State * L) { rspamd_lua_new_class (L, "rspamd{url}", urllib_m); lua_pop (L, 1); rspamd_lua_add_preload (L, "rspamd_url", lua_load_url); }