X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fusers.h;h=9d1072f57beebacee87c982b15c645c2887a887b;hb=f6f8605b150492924afbb27249dde8fbc55bb3d7;hp=7492d31e03d1f21b5bf41f0582b30f279ec0cfa5;hpb=ca42e175351b6209a8e9cbd5eb92bba4f38a38ce;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/users.h b/include/users.h index 7492d31e0..9d1072f57 100644 --- a/include/users.h +++ b/include/users.h @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -80,21 +80,23 @@ class CoreExport ConnectClass : public classbase /** Type of line, either CC_ALLOW or CC_DENY */ char type; + /** Connect class name */ std::string name; + /** Max time to register the connection in seconds */ unsigned int registration_timeout; - /** Number of lines in buffer before excess flood is triggered - */ - unsigned int flood; + /** Host mask for this line */ std::string host; + /** Number of seconds between pings for this line */ unsigned int pingtime; + /** (Optional) Password for this line */ std::string pass; @@ -103,10 +105,6 @@ class CoreExport ConnectClass : public classbase */ std::string hash; - /** Threshold value for flood disconnect - */ - unsigned int threshold; - /** Maximum size of sendq for users in this class (bytes) */ unsigned long sendqmax; @@ -136,46 +134,44 @@ public: /** Create a new connect class based on an existing connect class. This is required for std::vector (at least under windows). */ ConnectClass(const ConnectClass* source) : classbase(), type(source->type), name(source->name), - registration_timeout(source->registration_timeout), flood(source->flood), host(source->host), - pingtime(source->pingtime), pass(source->pass), hash(source->hash), threshold(source->threshold), sendqmax(source->sendqmax), + registration_timeout(source->registration_timeout), host(source->host), + pingtime(source->pingtime), pass(source->pass), hash(source->hash), sendqmax(source->sendqmax), recvqmax(source->recvqmax), maxlocal(source->maxlocal), maxglobal(source->maxglobal), maxchans(source->maxchans), - port(source->port), RefCount(0), limit(source->limit) + port(source->port), RefCount(0), disabled(false), limit(source->limit) { } /** Create a new connect class with no settings. */ - ConnectClass() : type(CC_DENY), name("unnamed"), registration_timeout(0), flood(0), host(""), pingtime(0), pass(""), hash(""), - threshold(0), sendqmax(0), recvqmax(0), maxlocal(0), maxglobal(0), RefCount(0), limit(0) + ConnectClass() : type(CC_DENY), name("unnamed"), registration_timeout(0), host(""), pingtime(0), pass(""), hash(""), + sendqmax(0), recvqmax(0), maxlocal(0), maxglobal(0), RefCount(0), disabled(false), limit(0) { } /** Create a new connect class to ALLOW connections. * @param thename Name of the connect class * @param timeout The registration timeout - * @param fld The flood value * @param hst The IP mask to allow * @param ping The ping frequency * @param pas The password to be used * @param hsh The hash to be used - * @param thres The flooding threshold * @param sendq The maximum sendq value * @param recvq The maximum recvq value * @param maxl The maximum local sessions * @param maxg The maximum global sessions */ - ConnectClass(const std::string &thename, unsigned int timeout, unsigned int fld, const std::string &hst, unsigned int ping, - const std::string &pas, const std::string &hsh, unsigned int thres, unsigned long sendq, unsigned long recvq, + ConnectClass(const std::string &thename, unsigned int timeout,const std::string &hst, unsigned int ping, + const std::string &pas, const std::string &hsh, unsigned long sendq, unsigned long recvq, unsigned long maxl, unsigned long maxg, unsigned int maxc, int p = 0) : - type(CC_ALLOW), name(thename), registration_timeout(timeout), flood(fld), host(hst), pingtime(ping), pass(pas), hash(hsh), - threshold(thres), sendqmax(sendq), recvqmax(recvq), maxlocal(maxl), maxglobal(maxg), maxchans(maxc), port(p), RefCount(0), limit(0) { } + type(CC_ALLOW), name(thename), registration_timeout(timeout), host(hst), pingtime(ping), pass(pas), hash(hsh), + sendqmax(sendq), recvqmax(recvq), maxlocal(maxl), maxglobal(maxg), maxchans(maxc), port(p), RefCount(0), disabled(false), limit(0) { } /** Create a new connect class to DENY connections * @param thename Name of the connect class * @param hst The IP mask to deny */ ConnectClass(const std::string &thename, const std::string &hst) : type(CC_DENY), name(thename), registration_timeout(0), - flood(0), host(hst), pingtime(0), pass(""), hash(""), threshold(0), sendqmax(0), recvqmax(0), maxlocal(0), maxglobal(0), maxchans(0), port(0), RefCount(0), limit(0) + host(hst), pingtime(0), pass(""), hash(""), sendqmax(0), recvqmax(0), maxlocal(0), maxglobal(0), maxchans(0), port(0), RefCount(0), disabled(false), limit(0) { } @@ -184,31 +180,37 @@ public: * @param source Another connect class to inherit all but the name from */ ConnectClass(const std::string &thename, const ConnectClass* source) : type(source->type), name(thename), - registration_timeout(source->registration_timeout), flood(source->flood), host(source->host), - pingtime(source->pingtime), pass(source->pass), hash(source->hash), threshold(source->threshold), sendqmax(source->sendqmax), + registration_timeout(source->registration_timeout), host(source->host), + pingtime(source->pingtime), pass(source->pass), hash(source->hash), sendqmax(source->sendqmax), recvqmax(source->recvqmax), maxlocal(source->maxlocal), maxglobal(source->maxglobal), maxchans(source->maxchans), - port(source->port), RefCount(0), limit(source->limit) + port(source->port), RefCount(0), disabled(false), limit(source->limit) + { + } + + void SetDisabled(bool t) + { + this->disabled = t; + } + + bool GetDisabled() { + return this->disabled; } /* Update an existing entry with new values */ - void Update(unsigned int timeout, unsigned int fld, const std::string &hst, unsigned int ping, - const std::string &pas, unsigned int thres, unsigned long sendq, unsigned long recvq, + void Update(unsigned int timeout, const std::string &hst, unsigned int ping, + const std::string &pas, unsigned long sendq, unsigned long recvq, unsigned long maxl, unsigned long maxg, unsigned int maxc, int p, unsigned long llimit) { if (timeout) registration_timeout = timeout; - if (fld) - flood = fld; if (!hst.empty()) host = hst; if (ping) pingtime = ping; if (!pas.empty()) pass = pas; - if (thres) - threshold = thres; if (sendq) sendqmax = sendq; if (recvq) @@ -237,6 +239,10 @@ public: */ unsigned long RefCount; + /** If this is true, any attempt to set a user to this class will fail. Default false. This is really private, it's only in the public section thanks to the way this class is written + */ + bool disabled; + /** How many users may be in this connect class before they are refused? (0 = disabled = default) */ unsigned long limit; @@ -265,13 +271,6 @@ public: return (registration_timeout ? registration_timeout : 90); } - /** Returns the flood limit - */ - unsigned int GetFlood() - { - return (threshold ? flood : 999); - } - /** Returns the allowed or denied IP mask */ const std::string& GetHost() @@ -314,13 +313,6 @@ public: return hash; } - /** Returns the flood threshold value - */ - unsigned int GetThreshold() - { - return (threshold ? threshold : 1); - } - /** Returns the maximum sendq value */ unsigned long GetSendqMax() @@ -394,19 +386,11 @@ class CoreExport VisData /** Holds all information about a user * This class stores all information about a user connected to the irc server. Everything about a * connection is stored here primarily, from the user's socket ID (file descriptor) through to the - * user's nickname and hostname. Use the FindNick method of the InspIRCd class to locate a specific user - * by nickname, or the FindDescriptor method of the InspIRCd class to find a specific user by their - * file descriptor value. + * user's nickname and hostname. */ class CoreExport User : public EventHandler { private: - /** Pointer to creator. - * This is required to make use of core functions - * from within the User class. - */ - InspIRCd* ServerInstance; - /** A list of channels the user has a pending invite to. * Upon INVITE channels are added, and upon JOIN, the * channels are removed from this list. @@ -439,7 +423,8 @@ class CoreExport User : public EventHandler */ void DecrementModes(); - std::map* AllowedOperCommands; + std::set *AllowedOperCommands; + std::set *AllowedPrivs; /** Allowed user modes from oper classes. */ std::bitset<64> AllowedUserModes; @@ -448,6 +433,12 @@ class CoreExport User : public EventHandler std::bitset<64> AllowedChanModes; public: + /** Pointer to creator. + * This is required to make use of core functions + * from within the User class. + */ + InspIRCd* ServerInstance; + /** Contains a pointer to the connect class a user is on from - this will be NULL for remote connections. * The pointer is guarenteed to *always* be valid. :) */ @@ -521,26 +512,26 @@ class CoreExport User : public EventHandler * Use InspIRCd::IsNick() to validate nicknames. */ std::string nick; - + /** The user's unique identifier. * This is the unique identifier which the user has across the network. */ std::string uuid; - + /** The users ident reply. * Two characters are added to the user-defined limit to compensate for the tilde etc. */ std::string ident; - + /** The host displayed to non-opers (used for cloaking etc). * This usually matches the value of User::host. */ std::string dhost; - + /** The users full name (GECOS). */ std::string fullname; - + /** The user's mode list. * NOT a null terminated string. * Also NOT an array. @@ -570,7 +561,7 @@ class CoreExport User : public EventHandler * If this string is empty, the user is not marked as away. */ std::string awaymsg; - + /** Time the user last went away. * This is ONLY RELIABLE if user IS_AWAY()! */ @@ -582,7 +573,7 @@ class CoreExport User : public EventHandler * The value of this is the value of a valid 'type name=' tag. */ std::string oper; - + /** True when DNS lookups are completed. * The UserResolver classes res_forward and res_reverse will * set this value once they complete. @@ -594,7 +585,7 @@ class CoreExport User : public EventHandler * modules may check it. */ std::string password; - + /** User's receive queue. * Lines from the IRCd awaiting processing are stored here. * Upgraded april 2005, old system a bit hairy. @@ -618,14 +609,6 @@ class CoreExport User : public EventHandler */ bool quietquit; - /** Flood counters - lines received - */ - unsigned int lines_in; - - /** Flood counters - time lines_in is due to be reset - */ - time_t reset_due; - /** If this is set to true, then all socket operations for the user * are dropped into the bit-bucket. * This value is set by QuitUser, and is not needed seperately from that call. @@ -658,7 +641,7 @@ class CoreExport User : public EventHandler /** Get IP string from sockaddr, using static internal buffer * @return The IP string */ - const char* GetIPString(bool translate4in6 = true); + const char* GetIPString(); /** Get a CIDR mask from the IP of this user, using a static internal buffer. * e.g., GetCIDRMask(16) for 223.254.214.52 returns 223.254.0.0/16 @@ -678,14 +661,6 @@ class CoreExport User : public EventHandler */ int Penalty; - /** True if we are flushing penalty lines - */ - bool OverPenalty; - - /** If this bool is set then penalty rules do not apply to this user - */ - bool ExemptFromPenalty; - /** Default constructor * @throw CoreException if the UID allocated to the user already exists * @param Instance Creator instance @@ -704,7 +679,7 @@ class CoreExport User : public EventHandler * on the server, in nick!ident&at;host form. * @return The full masked host of the user */ - virtual const std::string& GetFullHost(); + virtual const std::string GetFullHost(); /** Returns the full real host of the user * This member function returns the hostname of the user as seen by other users @@ -712,7 +687,7 @@ class CoreExport User : public EventHandler * e.g. through a module, then this method will ignore it and return the true hostname. * @return The full real host of the user */ - virtual const std::string& GetFullRealHost(); + virtual const std::string GetFullRealHost(); /** This clears any cached results that are used for GetFullRealHost() etc. * The results of these calls are cached as generating them can be generally expensive. @@ -793,8 +768,10 @@ class CoreExport User : public EventHandler * all operators, yet are not commands. An example might be oper override, mass messaging (/notice $*), etc. * * @param privstr The priv to chec, e.g. "users/override/topic". These are loaded free-form from the config file. + * @param noisy If set to true, the user is notified that they do not have the specified permission where applicable. If false, no notification is sent. * @return True if this user has the permission in question. - */ bool HasPrivPermission(const std::string &privstr); + */ + bool HasPrivPermission(const std::string &privstr, bool noisy = false); /** Returns true or false if a user can set a privileged user or channel mode. * This is done by looking up their oper type from User::oper, then referencing @@ -1162,9 +1139,8 @@ class CoreExport UserResolver : public Resolver * @param result Result string * @param ttl Time to live for result * @param cached True if the result was found in the cache - * @param resultnum Result number, we are only interested in result 0 */ - void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached, int resultnum = 0); + void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached); /** Called on failed lookup * @param e Error code @@ -1177,4 +1153,3 @@ class CoreExport UserResolver : public Resolver //class ServerConfig; #endif -