Commit graph

13220 commits

Author SHA1 Message Date
Stephen Gallagher
fb9e6a81bb ITS#10171 - Explicitly cast private values
Fixes issues with -Werror=incompatible-pointer-types

Signed-off-by: Stephen Gallagher <sgallagh@redhat.com>
2024-02-07 12:29:37 -05:00
Howard Chu
af877238e9 ITS#10170 accesslog: skip response if not fully initialized yet 2024-02-07 17:02:52 +00:00
Howard Chu
b3bbbb39cd ITS#10167 slapo-memberof: add addcheck option
Check memberships of newly added entries.
2024-02-06 01:22:58 +00:00
Ondřej Kuzník
7ade966cf3 ITS#9823 Move to a place that is better associated with accesslog 2024-02-05 22:57:17 +00:00
Nadezhda Ivanova
6cb3063bad ITS#10165 back-meta fails to bind to target when proxying an internal operation 2024-01-31 16:50:45 +00:00
Howard Chu
c7a4bd27f5 ITS#10166 slapi: fix plugin.c plugin_pblock_new() usage
Broken in 9142da8eaf
2024-01-31 16:00:30 +00:00
Ondřej Kuzník
f5fcbb428c ITS#10139 back-config: Honour disclose in matchedDN handling 2024-01-29 18:43:56 +00:00
Howard Chu
d56dcccb6f ITS#7420 clarify prev commit 2024-01-28 04:43:44 +00:00
Howard Chu
03338946b3 ITS#7420 more for prev commit
On naming error, don't free modvals
2024-01-28 04:00:34 +00:00
Howard Chu
7debe76f6c ITS#7420 re-fix slapcommon.c
bconfig requires RDN to pass schema check
2024-01-15 16:43:56 +00:00
Ondřej Kuzník
9cdd2c4af7 ITS#10110 Do not skip backover for result entries 2024-01-11 17:32:21 +00:00
Ondřej Kuzník
b8999d165c ITS#10151 Make sure we release scratch objects on "error" 2024-01-11 16:22:49 +00:00
Hiroyuki Homma
5cbb29cfcf ITS#10080 Fix refreshAndPersist synchronization problem with glue + rwm 2024-01-11 04:45:08 +00:00
Howard Chu
b3eab2ce94 ITS#10135 dynlist: fix search2resp callback context 2024-01-10 19:33:38 +00:00
Stacey Marshall
8139458b39 ITS#10130 Several callers of getpassphrase() ignore NULL returns 2024-01-10 18:47:36 +00:00
Howard Chu
f5c96f4469 ITS#7420 move entry_naming_check earlier in Add
Make sure RDN is present in e_attrs before passing entry to overlays
2024-01-10 17:05:13 +00:00
Howard Chu
314800db23 ITS#10143 only slapd should use the logfile 2023-12-19 15:49:03 +00:00
Ondřej Kuzník
f141416f32 ITS#10142 Link tiers in on cn=config startup 2023-12-19 14:47:34 +00:00
Howard Chu
a692941092 ITS#10092 fix prev commit for non-Windows 2023-12-08 03:41:40 +00:00
Howard Chu
595d177473 ITS#10092 logging: fix EOL when logfile-format is explicitly set 2023-12-08 03:25:22 +00:00
Ondřej Kuzník
860b61f41d ITS#10013 Make freeing controls the job of whoever added it 2023-11-21 17:21:52 +00:00
Ondřej Kuzník
c1f00a8af6 ITS#10013 Introduce slap_add_ctrl, changing slap_add_ctrls signature 2023-11-21 17:21:52 +00:00
Howard Chu
2494ade786 ITS#10025 slapo-dynlist: add option to disable filter support 2023-11-21 16:41:02 +00:00
Howard Chu
0b10f4a5b8 ITS#10092 logging: fix strftime for Windows
Although %T is standard and documented in M$ docs, it actually doesn't work in MSVCRT.
2023-11-16 18:47:34 +00:00
Howard Chu
247e5bcdfb ITS#10092 fix local logger for Windows
Don't use writev, just copy the message to insert prefix
2023-11-16 18:47:34 +00:00
Ondřej Kuzník
9b9469e251 ITS#10080 Fix slapcat when gluing is on 2023-11-16 16:45:26 +00:00
Ondřej Kuzník
8986f99d33 ITS#8852 Optimise attr_cmp for sortval attributes 2023-11-14 18:09:10 +00:00
Howard Chu
66edd34594 ITS#8677 back-sock: return error for CONTINUE
instead of asserting
2023-11-14 17:02:18 +00:00
Howard Chu
64789dd2c7 ITS#8180 back-sock: return error when str2entry fails 2023-11-14 17:02:18 +00:00
Howard Chu
f0c7427ba3 ITS#9660 back-mdb: make startup fail msg less specific 2023-11-09 17:10:31 +00:00
Howard Chu
2939df1a1d ITS#8498 slapadd: silence warning for NULL entry 2023-11-02 16:53:26 +00:00
Ondřej Kuzník
543230c9e7 ITS#10089 Fix acl logging 2023-11-02 14:02:15 +00:00
Ondřej Kuzník
92cca70426 ITS#10123 Add a missing include 2023-11-02 13:42:07 +00:00
Howard Chu
11b3e5946b ITS#10117 build: fix slap-config.h decls for Windows DLLs 2023-10-19 18:46:54 +01:00
Ondřej Kuzník
3cf5db1610 ITS#10080 Preserve original choice of backend for entry_release 2023-10-09 20:22:42 +00:00
Ondřej Kuzník
b13132f2ce ITS#9959 Expose connection endpoints in cn=monitor 2023-09-27 14:44:52 +00:00
Ondřej Kuzník
923483ccea ITS#9959 Track actual connection local/peername 2023-09-27 14:44:52 +00:00
hyc
a7bd0416c8 More windows cleanup for slapi
Fix link dependencies.
Fix file locking in printmsg.c.
2023-09-07 21:13:35 +01:00
Howard Chu
3489931553 Cleanup Windows build
Fix make depend errors in slapi
2023-09-07 20:03:07 +01:00
Ondřej Kuzník
de89b06b03 ITS#10074 Fix type mismatches in lloadd 2023-08-23 01:21:15 +00:00
Ondřej Kuzník
242d1e6d62 ITS#7226 Make olcAuditlogFile SINGLE-VALUE 2023-08-21 12:19:16 +01:00
Ondřej Kuzník
02975a3dc7 ITS#10091 Do not allow dynlist being configured as global 2023-08-15 13:07:46 +01:00
François Kooman
61e4832110 ITS#9827 update Argon2 defaults
- switch to argon2id by default (from argon2i)
- use OWASP recommended parameters as defaults

This only affects builds that use libargon2, e.g. Debian, and
not builds that use libsodium as argon2id is already the
default there, and better parameters are used

References: https://bugs.openldap.org/show_bug.cgi?id=9827
Signed-off-by: François Kooman <fkooman@tuxed.net>
2023-08-11 20:58:56 +00:00
Ondřej Kuzník
39403c9db2 ITS#10073 back-ldap: Make sure we have a suffix configured 2023-08-11 20:00:50 +00:00
Greg Burd
ba90df4dc3
convert Debug to use config args 2023-08-10 15:29:47 -04:00
Howard Chu
2086008a79
Use ConfigArgs in ACL parsing
For better error propagation back to config clients, also
remove unconditional use of stderr.

parse_acl() was only partially converted, the rest remains to be done.
2023-08-08 14:18:33 -04:00
Howard Chu
9142da8eaf
Use ConfigArgs in slapi config parsing 2023-08-08 14:18:21 -04:00
Greg Burd
7a4812d2fa
Allow caller to determine if the process should exit or not when the regex is found to be problematic. 2023-08-08 11:08:22 -04:00
Ondřej Kuzník
2738a32de3 ITS#10045 Make sure we only unpause when paused 2023-07-31 16:46:12 +00:00
Ondřej Kuzník
5677a410e6 ITS#10083 Do not mess with a connection that's dying already 2023-07-20 16:21:54 +00:00
Nadezhda Ivanova
6cbcfa0af3 ITS#10076 suffixmassage in back-asyncmeta does not handle empty remote suffix correctly 2023-07-19 16:41:29 +00:00
Ondřej Kuzník
208d68cdd9 ITS#10070 Allow running without a valid resolv.conf file 2023-07-19 14:53:20 +00:00
Ondřej Kuzník
67d3fd3d14 ITS#10068 keep our own copy of the DN 2023-06-21 13:20:18 +01:00
Ondřej Kuzník
5ae48d085f ITS#10067 Account for mods being optional 2023-06-20 01:03:12 +00:00
Ondřej Kuzník
7aaee92f0a ITS#9343 More policy selection criteria 2023-06-06 11:46:17 +01:00
Ondřej Kuzník
34470dd86b ITS#9343 Check for objectclasss when retrieving policy 2023-06-06 11:46:17 +01:00
Ondřej Kuzník
bdbba0748e ITS#10013 Fix slapo-ppolicy control handling 2023-06-06 11:46:17 +01:00
Ondřej Kuzník
f635f9e6d8 ITS#10064 Allow renaming of Cft_Misc entries 2023-06-06 11:46:17 +01:00
Howard Chu
ec3fafd1a6 ITS#10047 back-mdb: fix indexer resume on slapd restart
when overlays are in use on the database
2023-05-15 17:55:46 +00:00
Howard Chu
3271bfa1ea ITS#10047 back-mdb: delete idxckp table after slapindex
Could do it when beginning too, either way an interrupted slapindex
must be rerun completely.
2023-05-15 17:55:46 +00:00
Ondřej Kuzník
992815ced5 ITS#10041 Restrict group searching 2023-05-05 16:55:01 +00:00
Ondřej Kuzník
efe0de0be6 ITS#10042 Call monitor_cache_release exactly once 2023-04-27 21:19:48 +00:00
Ondřej Kuzník
525b631e37 ITS#10045 Also check for abandon when things have settled 2023-04-27 19:37:02 +00:00
Howard Chu
950aa08c31 ITS#10036 slapd: fix parsing of session tracking control
Was erroneously treating IPv6 addrs beginning with ':' as unprintable.
2023-04-24 18:50:38 +00:00
Ondřej Kuzník
95232bc323 ITS#10037 Update argon2 README 2023-04-13 16:12:47 +01:00
johan pascal
f7e6c71e13 ITS#10014: Add TLS handle using MbedTLS 2023-03-31 05:19:30 +00:00
Ondřej Kuzník
6c2164970a ITS#10032 Use the correct ocs field 2023-03-31 04:48:17 +00:00
Ondřej Kuzník
53906655ef ITS#10031 Adjust *err if we free it 2023-03-30 23:12:55 +00:00
HAMANO Tsukasa
0e409f49ec ITS#10028 - crash with pwdMinDelay 2023-03-30 18:19:53 +00:00
Howard Chu
5f934c8c45 ITS#10016: slapo-syncprov: fix Abandon with active qtask 2023-02-27 15:01:23 +00:00
Ondřej Kuzník
2a5eff41b0 ITS#9953 Check for push replication 2023-02-17 21:07:16 +00:00
Howard Chu
4a9e449b24 ITS#9997 syncrepl: plug potential leak in changelog search
Note this is only used with changelog, which is nonstandard and obsolete.
2023-02-17 15:52:35 +00:00
Sam James
b260205fd5 ITS#10011 servers: fix -Wstrict-prototypes
For more information, see LWN.net [0] or LLVM's Discourse [1], the Gentoo wiki [2],
or the (new) c-std-porting mailing list [3].

[0] https://lwn.net/Articles/913505/
[1] https://discourse.llvm.org/t/configure-script-breakage-with-the-new-werror-implicit-function-declaration/65213
[2] https://wiki.gentoo.org/wiki/Modern_C_porting
[3] hosted at lists.linux.dev.

Signed-off-by: Sam James <sam@gentoo.org>
2023-02-10 23:22:54 +00:00
Howard Chu
69f52354d2 ITS#9993 fix online_indexer termination/cleanup 2023-02-01 20:30:22 +00:00
Ondřej Kuzník
fa64703e6c ITS#9990 Preserve callbacks added already 2023-02-01 16:56:37 +00:00
Howard Chu
801297cb77 ITS#9991 send_ldap_ber: make sure we're only closing our own connection 2023-01-30 14:44:27 +00:00
Ondřej Kuzník
868309c90d ITS#8102 Do not continue if deconfigured during pause 2023-01-30 12:06:24 +00:00
Ondřej Kuzník
fa030ef8dc ITS#9930 Do not reschedule consumers that are shutting down 2023-01-30 10:26:23 +00:00
Ondřej Kuzník
12bf5a95ba ITS#9045 rlock only if there may be other threads
We can't rlock if we've registered ourselves as a writer. We can only
figure that out by checking if we're the thread that initiated the
pause: is the server paused already?
2023-01-23 11:53:36 +00:00
Ondřej Kuzník
5ccbe63246 ITS#9930 Just wait until si_mutex is ready
We're in a much better place now and there is only a single task active
for a given syncinfo_t plus the task that's just scheduled it and is
wrapping up. Any remaining times this wouldn't be true are probably bugs
to be fixed.
2023-01-19 15:21:05 +00:00
Ondřej Kuzník
e6e42642ca ITS#9983 Also fix c_refcnt sequencing 2023-01-19 03:17:59 +00:00
Ondřej Kuzník
0df9d9156a ITS#9983 Rework op->o_refcnt decref sequencing
epoch_append should be called at the point the object is not reachable
anymore, otherwise a thread from a "future" might still access it post
reclamation.
2023-01-19 03:17:59 +00:00
Ondřej Kuzník
bd3b6b679f ITS#9984 Keep listener base around even if not active 2023-01-18 12:57:02 +00:00
Дилян Палаузов
08e1e2c66c typo unsuccesSful, presense/presence, accessSlog 2023-01-09 17:46:36 +00:00
Howard Chu
3ebe6625c1 ITS#9966 slapo-pcache: fix crash in consistency_check 2022-12-25 11:21:32 +00:00
Howard Chu
0acf148af2 ITS#9960 slapo-dynlist: mark internal searches as internal 2022-12-15 10:07:06 +00:00
Howard Chu
1f251fa4e6 ITS#9880 slapo-accesslog: fix reqStart ordering filter
Same as ITS#9358 but for ordering matching rule, not just equality
2022-12-07 14:58:35 +00:00
Howard Chu
c8e039aa15 ITS#9929 plug memleaks 2022-12-01 15:39:03 +00:00
Howard Chu
00610ee886 ITS#9121 dynlist: cleanup unused code 2022-12-01 15:39:03 +00:00
Howard Chu
9d53f7ccbc ITS#9929 preserve e_name for memberOf values 2022-12-01 15:39:03 +00:00
Howard Chu
cc79020b42 ITS#9929: more performance tweaks
For simple (non-nested) member compares, avoid unnecessary fetches
of dyngroups that can't match the filter.
cache filter/entry instance info across multiple dyn entries to
avoid refetching each filter entry for each dyngruop test.
2022-12-01 15:39:03 +00:00
Howard Chu
d337ae751f ITS#9929 slapo-dynlist: more performance tweaks
Minimize cost of dynamic lists while still making them filterable:
require their attrs to be explicitly mapped if filtering is to be supported.

Also check config scope in compare op
2022-12-01 15:39:03 +00:00
Ondřej Kuzník
512a99b054 ITS#9951 Postpone releasing a connection reference while in cn=monitor 2022-11-24 10:04:42 +00:00
Ondřej Kuzník
e45869dd7e ITS#9947 Fix race in epoch.c and simplify 2022-11-07 10:00:10 +00:00
Howard Chu
5e2fa8a213 ITS#9940 back-mdb: fully init empty DN in tool_entry_get 2022-11-01 17:13:23 +00:00
Ondřej Kuzník
a6f3106afc ITS#9045 Do not share cn=config entries with outside code
config_back_entry_get currently returns the entry directly without
securing the rwlock, which is unsafe. However we can't keep holding it
on return in case the caller decides to hold onto the entry
indefinitely, hence rlock+entry_dup+runlock.
2022-10-31 18:16:42 +00:00
Howard Chu
2316927dc9 ITS#9942 back-mdb: always release entries from Add ops 2022-10-31 17:30:02 +00:00
Howard Chu
cbdeb374cf ITS#9936 slapcat/slapschema: fix free of subtree cmdline option
Must dup arg since subtree may also come from parsed URL.
2022-10-20 12:27:01 +01:00
Howard Chu
3991a0d191 ITS#9935 slapd UTF8StringValidate: fix read past end of string
Harmless, length check at end of routine would have returned an
error anyway.
2022-10-20 12:20:00 +01:00
Howard Chu
04eded74fe ITS#9930 fix cn=config / write_waiter deadlock
If a writer is blocked and a config pause is pending, just
close the blocked connection. Don't wait around for a slow
client to catch up.
2022-10-14 15:22:24 +01:00
Ondřej Kuzník
13d9c925dd ITS#9907 Move TLS context cleanup into lload_global_destroy 2022-10-12 17:36:12 +00:00
Howard Chu
01cf74be02 ITS#9929 more for prev commit
Don't prevent returning dynamic lists if dynamic groups were part of search.
2022-10-09 16:41:04 +01:00
Howard Chu
a3c7e5076a ITS#9929 dynlist: more for prev commit
Was broken if only dynamic lists were configured, and not groups.
Also, optional config URIs were being ignored.
2022-10-09 15:04:31 +01:00
Howard Chu
a64320d8ab ITS#9929 dynlist: avoid unnecessary search for dynamic lists 2022-10-09 11:51:54 +01:00
Ondřej Kuzník
d8f4b1a492 ITS#9926 Drop unneeded symlinks from source 2022-10-06 14:50:55 +01:00
Howard Chu
e640ce282a ITS#9924 slapo-deref: plug memleak
memory alloc'd by bvarray_dup must be freed by bvarray_free, not regular free.
2022-09-29 21:44:25 +00:00
Ondřej Kuzník
a779f148a0 ITS#9878 Have refint use interval 0 to schedule its task
Since the task is not rescheduled until a new operation comes in, close
a race where the reschedule chooses to stop it while the new item is
being added.
2022-09-26 17:34:21 +00:00
Ondřej Kuzník
148204839f ITS#9886 Report time taken to process each syncrepl message 2022-09-26 16:37:14 +00:00
Ondřej Kuzník
9134be7ecc ITS#9886 Maintain si_lastcontact as struct timeval 2022-09-26 16:37:14 +00:00
Ondřej Kuzník
034225ff5c ITS#9907 Some tools consider abandoned global data a leak 2022-09-15 17:33:39 +01:00
Ondřej Kuzník
aa209e4647 ITS#9892 Free operation data at the end of a transaction 2022-09-15 17:33:39 +01:00
Ondřej Kuzník
3ad71958ee ITS#9878 We no longer have to trigger li->li_conn_expire_task twice 2022-09-08 08:31:22 +01:00
Ondřej Kuzník
fa8cb31eb9 ITS#9878 One-shot tasks are now possible with interval == 0 2022-09-08 08:31:22 +01:00
Ondřej Kuzník
29c3a443d8 ITS#9878 Treat tasks with interval == 0 as one-shot
Some tasks need to be run once at a given time or the earliest
opportunity, also currently, using interval == 0 on a task triggers
a busy loop inside the scheduling task, halting progress for other
tasks and any other work usually serviced by that thread.

This change deals with both issues at the same time.
2022-09-08 08:31:22 +01:00
Ondřej Kuzník
294a16c10c ITS#9853 Allow inheriting lastbind precision from the frontend 2022-09-07 15:01:15 +01:00
Ondřej Kuzník
a033c1e74e ITS#9913 Protect code in clients_destroy and tier_destroy 2022-09-02 16:49:45 +01:00
Ondřej Kuzník
1942bc20a8 ITS#9339 Free remembered cookies on syncinfo free 2022-09-02 16:49:45 +01:00
Ondřej Kuzník
9014e8bb81 ITS#9907 Do not redefine variables inherited from slapd 2022-09-02 12:56:25 +01:00
Howard Chu
a6fa0450f6 ITS#9912 slapd: urls comes from optarg, not allocated
May leak on Windows if set in registry. Don't care.
2022-09-02 04:04:33 +01:00
Ondřej Kuzník
f3ed13fad2 ITS#6035 Plug olcAuthIDRewrite cn=config leak 2022-09-01 10:09:27 +01:00
Ondřej Kuzník
9c747074ff ITS#9438 slapo-remoteauth: plug config leaks 2022-09-01 10:09:27 +01:00
Ondřej Kuzník
333d61d7eb ITS#9907 Plug shutdown related leaks in lloadd 2022-09-01 10:09:23 +01:00
Ondřej Kuzník
ad79add5a0 ITS#9907 Do not redefine variables inherited from slapd 2022-09-01 10:09:19 +01:00
Ondřej Kuzník
b457cdebc1 ITS#9906 Do not leak cn=monitor related allocs in lloadd 2022-09-01 10:09:15 +01:00
Ondřej Kuzník
2362c7ccc7 ITS#9906 Do not touch subsys members after mss_destroy called 2022-09-01 10:09:10 +01:00
Howard Chu
3ef90929ee ITS#9897 fix dynlist to ignore entries with wrong objectclass 2022-08-30 14:34:06 +00:00
Howard Chu
aef1c05089 ITS#9894 don't use gmake-specific features 2022-08-15 20:53:03 +00:00
Howard Chu
161ef83927 ITS#9895 slapd-mdb: raise MDB_INDICES from 128 to 256 2022-08-06 18:47:40 +01:00
Howard Chu
4528bdb3f3 ITS#9882 bind: fix #9863 commit, use correct op/backend for mod 2022-07-11 17:55:37 +01:00
Ondřej Kuzník
207604c0b5 ITS#9823 Only request minCSN if accesslog is around 2022-07-07 21:31:03 +01:00
Quanah Gibson-Mount
fb1151573f ITS#9863 - Forward lastbind updates if configured
Mark lastbind operations as being on the frontendDB so that chaining configurations are honored.

Make pwdLastSuccess flag SLAP_AT_MANAGEABLE
2022-07-06 20:46:49 +00:00
Howard Chu
4e3687cda3 ITS#9871 slapo-ppolicy: use explicit backend in bind_response 2022-06-24 16:49:45 +01:00
Ondřej Kuzník
5d985e0145 ITS#9870 Drop optional overlay configuration option 2022-06-23 11:53:51 +01:00
Howard Chu
fbe844f814 ITS#9868 also fixup glue_sub_del() 2022-06-22 15:27:58 +00:00
Howard Chu
0d1db3c2b1 ITS#9868 Fixup pending_csn_list for backglue
Define in a new structure and point to it for more flexible access
2022-06-22 15:27:58 +00:00
Ondřej Kuzník
c64e663518 ITS#9823 Check minCSN when setting up delta-log replay 2022-06-21 16:21:56 +00:00
Howard Chu
d64f85e161 ITS#9867 syncprov: plug onetime leak
Since 43ebfa8fb4 ITS#6467
2022-06-16 22:14:41 +01:00
Howard Chu
745a71b18d ITS#9867 syncprov: plug findbase memleak 2022-06-16 21:36:24 +01:00
Howard Chu
14972a7ae1 ITS#9866 delta-sync: fix DN leak on Adds 2022-06-16 21:32:07 +01:00
Howard Chu
95f959e215 ITS#9864 slapo-accesslog: plug onetime memleaks 2022-06-16 16:10:59 +01:00
Ondřej Kuzník
81b5ca9113 ITS#8245 Do not try to release a NULL entry 2022-06-14 21:52:18 +00:00
Ondřej Kuzník
598929a507 ITS#9856 Tag responseName correctly 2022-06-06 16:30:08 +00:00
Howard Chu
395e9b250a ITS#9858 back-mdb: fix index reconfig 2022-06-03 17:06:39 +01:00
Howard Chu
9e5701cdd7 ITS#9858 back-mdb: delay indexer task startup
until after monitor backend is set up.
2022-06-02 16:06:31 +01:00
Howard Chu
205e2f1a3e ITS#7165 back-mdb: check for stale readers on MDB_READERS_FULL
retry opening a read txn if we cleared any stale readers
2022-05-16 13:54:08 +00:00
Howard Chu
ced6652efb ITS#9847 slapd: fix kqueue for FreeBSD/MacOSX/OpenBSD 2022-05-14 17:16:02 +01:00
Howard Chu
87df6c1991 ITS#9815 slapd-sql: escape filter values 2022-05-04 14:48:29 +00:00
Ondřej Kuzník
15573c72fc ITS#9831 Advance connections[index] correctly 2022-04-26 23:23:09 +00:00
Ondřej Kuzník
47069fee55 ITS#9832 Reset e back to the entry we need to release 2022-04-25 17:00:23 +00:00
Howard Chu
6657caaad8 ITS#9820 fix writewait/idletimeout interaction
Since 88d22a1ca3 the writewait check
was moved out of connections_timeout_idle() but the connection loop
was still testing the writewait flag. That test is no longer relevant.
2022-04-22 16:22:38 +00:00