MegaMOO 0.10.0-beta5
Pre-releaseMegaMOO 0.10.0-beta5
A security fix and a small usability one. Upgrading is a good idea if you
run a world with staff verbs on it.
pip install --upgrade megamoo
No world changes are needed. The fix is entirely engine-side, so an
existing world gets it by upgrading the engine — nothing to migrate, no
database edit, no verb to reload.
The gm level a verb declares is now enforced
A verb carries the gm level it requires, and help uses that level to
decide whether to list a command for you. That value gated nothing else.
Whether a command actually refused you depended entirely on the
auth_level(pobj) < 3 guard written at the top of the verb — so a staff
verb whose guard was missing was open to anybody who typed its name.
Two places in the engine described this check as though it already
existed: the verb loader logged that it was "gating dispatch" at a level,
and shutdown() explained that its own guard was necessary because "the
command parser's auth check does not cover a call that arrives through
call_verb". Neither was true. Both are now.
The rule is auth_level(player) >= verb.auth — the level the verb asks
for, not a fixed number — checked where a typed command is resolved. A
refused verb answers "Do what?", the same as one that does not exist, so
the staff command list is not discoverable by watching which names deny
you.
Was your world exposed? Almost certainly not. This required a staff
verb with no guard in its body, and neither the starter world nor
Shadowfall had one — all 155 staff verbs across both declare exactly what
their guards enforce. Nothing loses reachability in this release. If you
wrote your own staff verbs, the thing to check is that each one still
opens with its auth_level(pobj) < N guard; the loader now derives the
verb's level from that guard, so having it makes both mechanisms agree.
call_verb remains deliberately unguarded. An internal call must not be
subject to the caller's level, which is exactly why staff verbs keep
their own guard — this does not replace it, it stops a forgotten one from
meaning the command is simply open.
@make answers to @create
@create is what LambdaMOO calls it and the first thing most people
type; the starter world had only @make, so the obvious spelling
answered "Do what?". It is one verb with two names rather than a second
verb, so there is one body and one set of behaviour.
Also
- The verb watcher no longer prints one warning per file for verb
directories whose object does not exist. A world under development
accumulates these — averbs/900/you sketched before building #900 —
and eleven warnings said one thing. Now one line naming the objects. evaland/resolve names from your inventory even when your
character has no location. Previously the inventory was reachable only
as a side effect of standing in a room, so a character in chargen or an
isolation container could not name a thing in their own hands and got a
bare NameError.- The splash shows
$versionwhen a world sets one, falling back to the
engine's version. A world under development has a version of its own,
and a player arriving at your game cares which game it is rather than
which server it runs on.
Verifying this release
All three are built from the same commit, and the wheel and sdist here
are byte-identical to the ones on PyPI.
megamoo-0.10.0b5-py3-none-any.whl
8b4dc50c80458aed7925d0cc6fbdeac33498ffb7d149147369d96c4fa5e5008e
megamoo-0.10.0b5.tar.gz
3f004eac3ccd3cd9c4386988bf6af5bc31069c903777a4e5400bcad919ddeac0
megamoo-0.10.0b5-beta.zip
162225accc45b10be883828badeb3c6940052ed8c55684eed4af83478bbf3a61
Guide: https://malifaxlax.github.io/megamoo/
Discussions: https://github.com/MalifaxLax/megamoo/discussions
Discord: https://discord.gg/E74YsbbpCA