Restored the auto-admin powers of the local user (via name= in the config)

--HG--
extra : rebase_source : a35aa0d978990c28fa4fc158ce47d1f4aa967c04
master
Ciaran Gultnieks 2011-05-16 18:26:37 +01:00
parent bc59c18503
commit 8bba9cde5c
3 changed files with 23 additions and 11 deletions

View File

@ -2870,12 +2870,18 @@ void Server::ProcessData(u8 *data, u32 datasize, u16 peer_id)
message = message.substr(commandprefix.size()); message = message.substr(commandprefix.size());
// 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;
ServerCommandContext *ctx = new ServerCommandContext( ServerCommandContext *ctx = new ServerCommandContext(
str_split(message, L' '), str_split(message, L' '),
this, this,
&m_env, &m_env,
player player,
); privs);
line += processServerCommand(ctx); line += processServerCommand(ctx);
send_to_sender = ctx->flags & 1; send_to_sender = ctx->flags & 1;

View File

@ -33,11 +33,13 @@ void cmd_privs(std::wostringstream &os,
{ {
if(ctx->parms.size() == 1) if(ctx->parms.size() == 1)
{ {
// Show our own real privs, without any adjustments
// made for admin status
os<<L"-!- " + privsToString(ctx->player->privs); os<<L"-!- " + privsToString(ctx->player->privs);
return; return;
} }
if((ctx->player->privs & PRIV_PRIVS) == 0) if((ctx->privs & PRIV_PRIVS) == 0)
{ {
os<<L"-!- You don't have permission to do that"; os<<L"-!- You don't have permission to do that";
return; return;
@ -62,7 +64,7 @@ void cmd_grantrevoke(std::wostringstream &os,
return; return;
} }
if((ctx->player->privs & PRIV_PRIVS) == 0) if((ctx->privs & PRIV_PRIVS) == 0)
{ {
os<<L"-!- You don't have permission to do that"; os<<L"-!- You don't have permission to do that";
return; return;
@ -100,7 +102,7 @@ void cmd_time(std::wostringstream &os,
return; return;
} }
if((ctx->player->privs & PRIV_SETTIME) ==0) if((ctx->privs & PRIV_SETTIME) ==0)
{ {
os<<L"-!- You don't have permission to do that"; os<<L"-!- You don't have permission to do that";
return; return;
@ -114,7 +116,7 @@ void cmd_time(std::wostringstream &os,
void cmd_shutdown(std::wostringstream &os, void cmd_shutdown(std::wostringstream &os,
ServerCommandContext *ctx) ServerCommandContext *ctx)
{ {
if((ctx->player->privs & PRIV_SERVER) ==0) if((ctx->privs & PRIV_SERVER) ==0)
{ {
os<<L"-!- You don't have permission to do that"; os<<L"-!- You don't have permission to do that";
return; return;
@ -131,7 +133,7 @@ void cmd_shutdown(std::wostringstream &os,
void cmd_setting(std::wostringstream &os, void cmd_setting(std::wostringstream &os,
ServerCommandContext *ctx) ServerCommandContext *ctx)
{ {
if((ctx->player->privs & PRIV_SERVER) ==0) if((ctx->privs & PRIV_SERVER) ==0)
{ {
os<<L"-!- You don't have permission to do that"; os<<L"-!- You don't have permission to do that";
return; return;
@ -145,7 +147,7 @@ void cmd_setting(std::wostringstream &os,
void cmd_teleport(std::wostringstream &os, void cmd_teleport(std::wostringstream &os,
ServerCommandContext *ctx) ServerCommandContext *ctx)
{ {
if((ctx->player->privs & PRIV_TELEPORT) ==0) if((ctx->privs & PRIV_TELEPORT) ==0)
{ {
os<<L"-!- You don't have permission to do that"; os<<L"-!- You don't have permission to do that";
return; return;
@ -178,7 +180,7 @@ std::wstring processServerCommand(ServerCommandContext *ctx)
std::wostringstream os(std::ios_base::binary); std::wostringstream os(std::ios_base::binary);
ctx->flags = 1; // Default, unless we change it. ctx->flags = 1; // Default, unless we change it.
u64 privs = ctx->player->privs; u64 privs = ctx->privs;
if(ctx->parms.size() == 0 || ctx->parms[0] == L"help") if(ctx->parms.size() == 0 || ctx->parms[0] == L"help")
{ {

View File

@ -34,14 +34,18 @@ struct ServerCommandContext
Server* server; Server* server;
ServerEnvironment *env; ServerEnvironment *env;
Player* player; Player* player;
// Effective privs for the player, which may be different to their
// stored ones - e.g. if they are named in the config as an admin.
u64 privs;
u32 flags; u32 flags;
ServerCommandContext( ServerCommandContext(
std::vector<std::wstring> parms, std::vector<std::wstring> parms,
Server* server, Server* server,
ServerEnvironment *env, ServerEnvironment *env,
Player* player) Player* player,
: parms(parms), server(server), env(env), player(player) u64 privs)
: parms(parms), server(server), env(env), player(player), privs(privs)
{ {
} }