diff options
author | rburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864> | 2009-02-15 15:23:03 +0000 |
---|---|---|
committer | rburchell <rburchell@5417fbe8-f217-4b02-8779-1006273d7864> | 2009-02-15 15:23:03 +0000 |
commit | d121c4bd37bdcc1a4d863d6452a33176d1f4bcc6 (patch) | |
tree | 6c60dea832f71a5d949b0b0ebde311415734aecc | |
parent | 02452a03756197fbdb976bd8bc41ffd69eeb61fe (diff) |
Add CFLAG_ALLOW_UNREGISTERED, commands without this flag will now not run for unregistered users.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@2065 5417fbe8-f217-4b02-8779-1006273d7864
-rw-r--r-- | include/account.h | 4 | ||||
-rw-r--r-- | include/modules.h | 22 | ||||
-rw-r--r-- | src/command.cpp | 28 | ||||
-rw-r--r-- | src/commands.c | 25 | ||||
-rw-r--r-- | src/core/cs_getpass.c | 1 |
5 files changed, 70 insertions, 10 deletions
diff --git a/include/account.h b/include/account.h index f88a5b644..40b7146c2 100644 --- a/include/account.h +++ b/include/account.h @@ -81,12 +81,12 @@ class NickCore : public Extensible * @param cmdstr The string to check, e.g. botserv/set/private. * @return True if this opertype may run the specified command, false otherwise. */ - bool HasCommand(const std::string &cmdstr); + bool HasCommand(const std::string &cmdstr) const; /** Check whether this opertype has access to the given special permission. * @param privstr The priv to check for, e.g. users/auspex. * @return True if this opertype has the specified priv, false otherwise. */ - bool HasPriv(const std::string &privstr); + bool HasPriv(const std::string &privstr) const; }; diff --git a/include/modules.h b/include/modules.h index 56d6aece1..ba0a2bc8f 100644 --- a/include/modules.h +++ b/include/modules.h @@ -146,10 +146,16 @@ struct ModuleLang_ { char **argv; }; +enum CommandFlags +{ + CFLAG_ALLOW_UNREGISTERED +}; + /** Every services command is a class, inheriting from Command. */ class Command { + int flags; public: size_t MaxParams; size_t MinParams; @@ -181,7 +187,21 @@ class Command */ virtual void OnSyntaxError(User *u); - int (*has_priv)(User *u); /* Returns 1 if user may use command, else 0 */ + /** Set a certain flag on this command. + * @param flag The CommandFlag to set on this command. + */ + void SetFlag(CommandFlags flag); + + /** Remove a certain flag from this command. + * @param flag The CommandFlag to unset. + */ + void UnsetFlag(CommandFlags flag); + + /** Check whether a certain flag is set on this command. + * @param flag The CommandFlag to check. + * @return bool True if the flag is set, false else. + */ + bool HasFlag(CommandFlags flag) const; char *help_param1; char *help_param2; diff --git a/src/command.cpp b/src/command.cpp index bf05d79d5..11a945136 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -3,7 +3,7 @@ Command::Command(const std::string &sname, size_t min_params, size_t max_params) : MaxParams(max_params), MinParams(min_params), name(sname) { - this->has_priv = NULL; + this->flags = 0; this->help_param1 = NULL; this->help_param2 = NULL; this->help_param3 = NULL; @@ -21,7 +21,6 @@ Command::Command(const std::string &sname, size_t min_params, size_t max_params) Command::~Command() { - this->has_priv = NULL; if (this->mod_name) { delete [] this->mod_name; } @@ -47,3 +46,28 @@ bool Command::OnHelp(User *u, const std::string &subcommand) { return false; } * @param u The user executing the command. */ void Command::OnSyntaxError(User *u) { } + +/** Set a certain flag on this command. + * @param flag The CommandFlag to set on this command. + */ +void Command::SetFlag(CommandFlags flag) +{ + this->flags |= flag; +} + +/** Remove a certain flag from this command. + * @param flag The CommandFlag to unset. + */ +void Command::UnsetFlag(CommandFlags flag) +{ + this->flags &= ~flag; +} + +/** Check whether a certain flag is set on this command. + * @param flag The CommandFlag to check. + * @return bool True if the flag is set, false else. + */ +bool Command::HasFlag(CommandFlags flag) const +{ + return this->flags & flag; +}
\ No newline at end of file diff --git a/src/commands.c b/src/commands.c index 5dd24bb1d..d2c33d34c 100644 --- a/src/commands.c +++ b/src/commands.c @@ -72,13 +72,28 @@ void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[], const char * } } + if (!c->HasFlag(CFLAG_ALLOW_UNREGISTERED)) + { + // Command requires registered users only + if (!u->na || !u->na->nc) + { + // XXX: we should have a new string for this + notice_lang(service, u, ACCESS_DENIED); + alog("Access denied for unregistered user %s with service %s and command %s", u->nick, service, cmd); + return; + } + } + +/* +XXX: priv checking if (c->has_priv != NULL && !c->has_priv(u)) { notice_lang(service, u, ACCESS_DENIED); alog("Access denied for %s with service %s and command %s", u->nick, service, cmd); return; } - + */ + std::vector<std::string> params; std::string curparam; char *s = NULL; @@ -131,7 +146,7 @@ void mod_run_cmd(char *service, User * u, CommandHash * cmdTable[], const char * * @param u User Struct * @param c Command Struct * @return void - */ + * void do_help_limited(char *service, User * u, Command * c) { if (c->has_priv == is_services_oper) @@ -147,6 +162,7 @@ void do_help_limited(char *service, User * u, Command * c) else if (c->has_priv == is_host_remover) notice_lang(service, u, HELP_LIMIT_HOST_REMOVER); } +*/ /*************************************************************************/ @@ -177,9 +193,10 @@ void mod_help_cmd(char *service, User * u, CommandHash * cmdTable[], } if (has_had_help == false) { notice_lang(service, u, NO_HELP_AVAILABLE, cmd); - } else { - do_help_limited(service, u, c); } + //else { + // do_help_limited(service, u, c); + //} } /*************************************************************************/ diff --git a/src/core/cs_getpass.c b/src/core/cs_getpass.c index c4f75fda2..24469a6e4 100644 --- a/src/core/cs_getpass.c +++ b/src/core/cs_getpass.c @@ -31,7 +31,6 @@ class CommandCSGetPass : public Command public: CommandCSGetPass() : Command("GETPASS", 1, 1) { - this->has_priv = is_services_admin; } CommandReturn Execute(User *u, std::vector<std::string> ¶ms) |