From 63611932ebae93620386b26cfa82f7c4552b22ff Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 29 May 2011 21:11:16 +0300 Subject: player passwords and privileges in world/auth.txt --HG-- extra : rebase_source : 7260636295d9068fbeeddf4143c89f2b8a91446c --- src/servercommand.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/servercommand.cpp') diff --git a/src/servercommand.cpp b/src/servercommand.cpp index 5bb4f67f8..e14f326f4 100644 --- a/src/servercommand.cpp +++ b/src/servercommand.cpp @@ -35,7 +35,7 @@ void cmd_privs(std::wostringstream &os, { // Show our own real privs, without any adjustments // made for admin status - os<player->privs); + os<player->privs)); return; } @@ -52,7 +52,7 @@ void cmd_privs(std::wostringstream &os, return; } - os<privs); + os<privs)); } void cmd_grantrevoke(std::wostringstream &os, @@ -70,7 +70,7 @@ void cmd_grantrevoke(std::wostringstream &os, return; } - u64 newprivs = stringToPrivs(ctx->parms[2]); + u64 newprivs = stringToPrivs(wide_to_narrow(ctx->parms[2])); if(newprivs == PRIV_INVALID) { os<privs &= ~newprivs; os<privs); + os<privs)); } void cmd_time(std::wostringstream &os, -- cgit v1.2.3 From e81919c818c6040de7401a037e3fdfac88b28eea Mon Sep 17 00:00:00 2001 From: Perttu Ahola Date: Sun, 29 May 2011 22:34:04 +0300 Subject: hopefully fixed the privilege problems --HG-- extra : rebase_source : 9826d20176134a53ff232816a10407465d8c0f50 --- doc/changelog.txt | 2 +- src/player.cpp | 1 - src/player.h | 3 --- src/server.cpp | 48 ++++++++++++++++++++++++++++++++++++------------ src/server.h | 24 ++++++++++++++++++++++++ src/servercommand.cpp | 16 +++++++++++----- 6 files changed, 72 insertions(+), 22 deletions(-) (limited to 'src/servercommand.cpp') diff --git a/doc/changelog.txt b/doc/changelog.txt index 7089146a0..e02019783 100644 --- a/doc/changelog.txt +++ b/doc/changelog.txt @@ -3,7 +3,7 @@ Minetest-c55 changelog This should contain all the major changes. For minor stuff, refer to the commit log of the repository. -X: +2011-05-29: - Optimized smooth lighting - A number of small fixes - Added clouds and simple skyboxes diff --git a/src/player.cpp b/src/player.cpp index efb2f3447..198eca957 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -102,7 +102,6 @@ void Player::serialize(std::ostream &os) args.setV3F("position", m_position); args.setBool("craftresult_is_preview", craftresult_is_preview); args.setS32("hp", hp); - args.setU64("privs", privs); args.writeLines(os); diff --git a/src/player.h b/src/player.h index 157a25b5b..a7a2433ce 100644 --- a/src/player.h +++ b/src/player.h @@ -126,9 +126,6 @@ public: u16 hp; - // Player's privileges - a bitmaps of PRIV_xxxx. - u64 privs; - u16 peer_id; protected: diff --git a/src/server.cpp b/src/server.cpp index 4569d028e..56874c46c 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -2083,7 +2083,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) if(datasize < 13) return; - if((player->privs & PRIV_BUILD) == 0) + if((getPlayerPrivs(player) & PRIV_BUILD) == 0) return; /* @@ -2167,7 +2167,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) if(datasize < 7) return; - if((player->privs & PRIV_BUILD) == 0) + if((getPlayerPrivs(player) & PRIV_BUILD) == 0) return; /* @@ -2368,8 +2368,13 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) } // Make sure the player is allowed to do it - if((player->privs & PRIV_BUILD) == 0) + if((getPlayerPrivs(player) & PRIV_BUILD) == 0) + { + dstream<<"Player "<getName()<<" cannot remove node" + <<" because privileges are "<getName()<<" cannot add node" + <<" because privileges are "<privs & PRIV_BUILD) ==0) + || no_enough_privs) { // Client probably has wrong data. // Set block not sent, so that client will get @@ -2715,7 +2727,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) #endif else if(command == TOSERVER_SIGNTEXT) { - if((player->privs & PRIV_BUILD) == 0) + if((getPlayerPrivs(player) & PRIV_BUILD) == 0) return; /* u16 command @@ -2774,7 +2786,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) } else if(command == TOSERVER_SIGNNODETEXT) { - if((player->privs & PRIV_BUILD) == 0) + if((getPlayerPrivs(player) & PRIV_BUILD) == 0) return; /* u16 command @@ -2952,9 +2964,7 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id) // Local player gets all privileges regardless of // what's set on their account. - u64 privs = player->privs; - if(g_settings.get("name") == player->getName()) - privs = PRIV_ALL; + u64 privs = getPlayerPrivs(player); // Parse commands std::wstring commandprefix = L"/#"; @@ -4288,9 +4298,6 @@ Player *Server::emergePlayer(const char *name, const char *password, u16 peer_id m_authmanager.setPrivs(name, stringToPrivs(g_settings.get("default_privs"))); - if(g_settings.exists("default_privs")) - player->privs = g_settings.getU64("default_privs"); - /* Set player position */ @@ -4503,6 +4510,23 @@ void Server::handlePeerChanges() } } +u64 Server::getPlayerPrivs(Player *player) +{ + if(player==NULL) + return 0; + std::string playername = player->getName(); + // Local player gets all privileges regardless of + // what's set on their account. + if(g_settings.get("name") == playername) + { + return PRIV_ALL; + } + else + { + return getPlayerAuthPrivs(playername); + } +} + void dedicated_server_loop(Server &server, bool &kill) { DSTACK(__FUNCTION_NAME); diff --git a/src/server.h b/src/server.h index a6da801be..7b73e476c 100644 --- a/src/server.h +++ b/src/server.h @@ -424,7 +424,29 @@ public: // Envlock and conlock should be locked when calling this void SendMovePlayer(Player *player); + + u64 getPlayerAuthPrivs(const std::string &name) + { + try{ + return m_authmanager.getPrivs(name); + } + catch(AuthNotFoundException &e) + { + dstream<<"WARNING: Auth not found for "<player->privs)); + os<server->getPlayerAuthPrivs(ctx->player->getName()))); return; } @@ -52,7 +53,7 @@ void cmd_privs(std::wostringstream &os, return; } - os<privs)); + os<server->getPlayerAuthPrivs(tp->getName()))); } void cmd_grantrevoke(std::wostringstream &os, @@ -83,14 +84,19 @@ void cmd_grantrevoke(std::wostringstream &os, os<parms[1]); + u64 privs = ctx->server->getPlayerAuthPrivs(playername); if(ctx->parms[0] == L"grant") - tp->privs |= newprivs; + privs |= newprivs; else - tp->privs &= ~newprivs; + privs &= ~newprivs; + + ctx->server->setPlayerAuthPrivs(playername, privs); os<privs)); + os< Date: Tue, 31 May 2011 11:59:51 +0300 Subject: Updated licenses of CiaranG's contributions to be in line with the new contribution policy and added a TODO note to server.cpp --- src/guiPasswordChange.cpp | 28 +++++++++++++--------------- src/guiPasswordChange.h | 26 ++++++++++++-------------- src/server.cpp | 3 ++- src/servercommand.cpp | 29 +++++++++++++---------------- src/servercommand.h | 28 +++++++++++++--------------- 5 files changed, 53 insertions(+), 61 deletions(-) (limited to 'src/servercommand.cpp') diff --git a/src/guiPasswordChange.cpp b/src/guiPasswordChange.cpp index 98b11b432..ec1cd029a 100644 --- a/src/guiPasswordChange.cpp +++ b/src/guiPasswordChange.cpp @@ -1,21 +1,19 @@ /* -Minetest-c55 -Copyright (C) 2010-11 celeron55, Perttu Ahola +Part of Minetest-c55 +Copyright (C) 2011 celeron55, Perttu Ahola Copyright (C) 2011 Ciaran Gultnieks -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "guiPasswordChange.h" diff --git a/src/guiPasswordChange.h b/src/guiPasswordChange.h index defac3113..1748baade 100644 --- a/src/guiPasswordChange.h +++ b/src/guiPasswordChange.h @@ -1,21 +1,19 @@ /* -Minetest-c55 +Part of Minetest-c55 Copyright (C) 2010-11 celeron55, Perttu Ahola Copyright (C) 2011 Ciaran Gultnieks -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef GUIPASSWORDCHANGE_HEADER diff --git a/src/server.cpp b/src/server.cpp index e668db0c3..1b471fd09 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1192,7 +1192,7 @@ void Server::AsyncRunStep() if(dtime < 0.001) return; - + //dstream<<"Server steps "< +Part of Minetest-c55 +Copyright (C) 2010-11 celeron55, Perttu Ahola Copyright (C) 2011 Ciaran Gultnieks -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ - #include "servercommand.h" #include "utility.h" diff --git a/src/servercommand.h b/src/servercommand.h index 058fbe65b..9013bc2a6 100644 --- a/src/servercommand.h +++ b/src/servercommand.h @@ -1,21 +1,19 @@ /* -Minetest-c55 -Copyright (C) 2010-2011 celeron55, Perttu Ahola +Part of Minetest-c55 +Copyright (C) 2010-11 celeron55, Perttu Ahola Copyright (C) 2011 Ciaran Gultnieks -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef SERVERCOMMAND_HEADER -- cgit v1.2.3