X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fusers.h;h=1283d9fb34f906c9b85ce94f7143dcda485c30f9;hb=b4a174ee9c32d62ea6bf010e837e8c5b1c3d36a3;hp=6b7e18953b3824e415ea9c87952c353bb15b0172;hpb=a4305d8f3c3e613be839bdcd61a1d14c87fed5aa;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/users.h b/include/users.h index 6b7e18953..1283d9fb3 100644 --- a/include/users.h +++ b/include/users.h @@ -1,12 +1,22 @@ /* * InspIRCd -- Internet Relay Chat Daemon * - * Copyright (C) 2009 Daniel De Graaf - * Copyright (C) 2007-2008 Robin Burchell + * Copyright (C) 2019-2020 Matt Schatz + * Copyright (C) 2019 linuxdaemon + * Copyright (C) 2013 Daniel Vassdal + * Copyright (C) 2012-2016, 2018 Attila Molnar + * Copyright (C) 2012-2013, 2016-2020 Sadie Powell + * Copyright (C) 2012, 2019 Robby + * Copyright (C) 2012 DjSlash + * Copyright (C) 2012 ChrisTX + * Copyright (C) 2011 jackmcbarn + * Copyright (C) 2009-2010 Daniel De Graaf + * Copyright (C) 2009 Uli Schlachter * Copyright (C) 2008 Thomas Stagner - * Copyright (C) 2003-2007 Craig Edwards - * Copyright (C) 2007 Burlex - * Copyright (C) 2007 Dennis Friis + * Copyright (C) 2008 John Brooks + * Copyright (C) 2007, 2009 Dennis Friis + * Copyright (C) 2006-2009 Robin Burchell + * Copyright (C) 2003-2008 Craig Edwards * * This file is part of InspIRCd. InspIRCd is free software: you can * redistribute it and/or modify it under the terms of the GNU General Public @@ -51,8 +61,8 @@ enum RegistrationState { REG_USER = 1, /* Has sent USER */ REG_NICK = 2, /* Has sent NICK */ - REG_NICKUSER = 3, /* Bitwise combination of REG_NICK and REG_USER */ - REG_ALL = 7 /* REG_NICKUSER plus next bit along */ + REG_NICKUSER = 3, /* Bitwise combination of REG_NICK and REG_USER */ + REG_ALL = 7 /* REG_NICKUSER plus next bit along */ }; enum UserType { @@ -61,7 +71,7 @@ enum UserType { USERTYPE_SERVER = 3 }; -/** Holds information relevent to <connect allow> and <connect deny> tags in the config file. +/** Holds information relevant to <connect allow> and <connect deny> tags in the config file. */ struct CoreExport ConnectClass : public refcountbase { @@ -81,10 +91,12 @@ struct CoreExport ConnectClass : public refcountbase */ unsigned int registration_timeout; - /** Host mask for this line - */ + /** Hosts that this user can connect from as a string. */ std::string host; + /** Hosts that this user can connect from as a vector. */ + std::vector hosts; + /** Number of seconds between pings for this line */ unsigned int pingtime; @@ -140,6 +152,12 @@ struct CoreExport ConnectClass : public refcountbase */ insp::flat_set ports; + /** If non-empty then the password a user must specify in PASS to be assigned to this class. */ + std::string password; + + /** If non-empty then the hash algorithm that the password field is hashed with. */ + std::string passwordhash; + /** Create a new connect class with no settings. */ ConnectClass(ConfigTag* tag, char type, const std::string& mask); @@ -150,8 +168,9 @@ struct CoreExport ConnectClass : public refcountbase /** Update the settings in this block to match the given block */ void Update(const ConnectClass* newSettings); - const std::string& GetName() { return name; } - const std::string& GetHost() { return host; } + const std::string& GetName() const { return name; } + const std::string& GetHost() const { return host; } + const std::vector& GetHosts() const { return hosts; } /** Returns the registration timeout */ @@ -224,19 +243,19 @@ struct CoreExport ConnectClass : public refcountbase class CoreExport User : public Extensible { private: - /** Cached nick!ident@dhost value using the displayed hostname + /** Cached nick!ident\@dhost value using the displayed hostname */ std::string cached_fullhost; - /** Cached ident@ip value using the real IP address + /** Cached ident\@ip value using the real IP address */ std::string cached_hostip; - /** Cached ident@realhost value using the real hostname + /** Cached ident\@realhost value using the real hostname */ std::string cached_makehost; - /** Cached nick!ident@realhost value using the real hostname + /** Cached nick!ident\@realhost value using the real hostname */ std::string cached_fullrealhost; @@ -346,13 +365,13 @@ class CoreExport User : public Extensible /** 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. + * This value is set by QuitUser, and is not needed separately from that call. * Please note that setting this value alone will NOT cause the user to quit. */ unsigned int quitting:1; /** What type of user is this? */ - const UserType usertype:2; + const unsigned int usertype:2; /** Get client IP string from sockaddr, using static internal buffer * @return The IP string @@ -475,6 +494,12 @@ class CoreExport User : public Extensible */ virtual bool HasModePermission(const ModeHandler* mh) const; + /** Determines whether this user can set the specified snomask. + * @param chr The server notice mask character to look up. + * @return True if the user can set the specified snomask; otherwise, false. + */ + virtual bool HasSnomaskPermission(char chr) const; + /** Creates a usermask with real host. * Takes a buffer to use and fills the given buffer with the hostmask in the format user\@host * @return the usermask in the format user\@host @@ -676,12 +701,18 @@ class CoreExport User : public Extensible */ virtual ~User(); CullResult cull() CXX11_OVERRIDE; + + /** @copydoc Serializable::Deserialize */ + bool Deserialize(Data& data) CXX11_OVERRIDE; + + /** @copydoc Serializable::Deserialize */ + bool Serialize(Serializable::Data& data) CXX11_OVERRIDE; }; class CoreExport UserIOHandler : public StreamSocket { private: - size_t checked_until; + size_t checked_until; public: LocalUser* const user; UserIOHandler(LocalUser* me) @@ -729,6 +760,8 @@ class CoreExport LocalUser : public User, public insp::intrusive_list_node tags from the configuration file. - * @return A reference to this user's current connect class. */ void SetClass(const std::string &explicit_name = ""); @@ -856,6 +888,9 @@ class CoreExport LocalUser : public User, public insp::intrusive_list_nodeusertype == USERTYPE_LOCAL ? static_cast(u) : NULL; + return (u != NULL && u->usertype == USERTYPE_LOCAL) ? static_cast(u) : NULL; } /** Is a remote user */ inline RemoteUser* IS_REMOTE(User* u) { - return u->usertype == USERTYPE_REMOTE ? static_cast(u) : NULL; + return (u != NULL && u->usertype == USERTYPE_REMOTE) ? static_cast(u) : NULL; } /** Is a server fakeuser */ inline FakeUser* IS_SERVER(User* u) { - return u->usertype == USERTYPE_SERVER ? static_cast(u) : NULL; + return (u != NULL && u->usertype == USERTYPE_SERVER) ? static_cast(u) : NULL; } inline bool User::IsModeSet(const ModeHandler* mh) const