diff options
author | Gabriel Pérez-Cerezo <gabriel@gpcf.eu> | 2020-03-06 23:24:34 +0100 |
---|---|---|
committer | Gabriel Pérez-Cerezo <gabriel@gpcf.eu> | 2020-03-06 23:24:34 +0100 |
commit | 83060e9e85be790f64fcf51def1f024699a46d2d (patch) | |
tree | 2f91f7ab71e330ce784630daf0bcee29efa9b750 | |
parent | e98a3debe01248b290a65c083f0f83cae323f9bc (diff) | |
download | smartshop-83060e9e85be790f64fcf51def1f024699a46d2d.tar.gz smartshop-83060e9e85be790f64fcf51def1f024699a46d2d.tar.bz2 smartshop-83060e9e85be790f64fcf51def1f024699a46d2d.zip |
[Security] Only allow unlimited shop creation if player is allowed
The previous code assumed that the limit toggle button cannot be
pressed by non-creative players. However, this is easily possible with
a specially crafted client, that submits this field. The fix checks if
the player really has creative before switching a shop to unlimited
mode.
-rw-r--r-- | init.lua | 11 |
1 files changed, 10 insertions, 1 deletions
@@ -106,6 +106,9 @@ smartshop.send_mail=function(owner, pos, item) mail.send("DO NOT REPLY", owner, "Out of "..smartshop.get_human_name(item).." at "..spos, "Your smartshop at "..spos.." is out of "..smartshop.get_human_name(item)..". Please restock") end +local function is_creative(pname) + return minetest.check_player_privs(pname, {creative=true}) or minetest.check_player_privs(pname, {give=true}) +end smartshop.receive_fields=function(player,pressed) local pname = player:get_player_name() @@ -117,6 +120,12 @@ smartshop.receive_fields=function(player,pressed) return smartshop.showform(pos, player, true) elseif pressed.tooglelime then local meta=minetest.get_meta(pos) + if not is_creative(pname) then + meta:set_int("type", 1) + meta:set_int("creative", 0) + minetest.chat_send_player(pname, "You are not allowed to make a creative shop!") + return + end if meta:get_int("type")==0 then meta:set_int("type",1) minetest.chat_send_player(pname, "Your stock is limited") @@ -414,7 +423,7 @@ after_place_node = function(pos, placer) meta:set_string("owner",placer:get_player_name()) meta:set_string("infotext", "Shop by: " .. placer:get_player_name()) meta:set_int("type",1) - if minetest.check_player_privs(placer:get_player_name(), {creative=true}) or minetest.check_player_privs(placer:get_player_name(), {give=true}) then + if is_creative(placer:get_player_name()) then meta:set_int("creative",1) meta:set_int("type",0) end |