]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/modules/m_chgident.cpp
VF_VENDOR
[user/henk/code/inspircd.git] / src / modules / m_chgident.cpp
1 #include <string>
2 #include "users.h"
3 #include "modules.h"
4 #include "helperfuncs.h"
5
6 /* $ModDesc: Provides support for the CHGIDENT command */
7
8 Server *Srv;
9
10
11 class cmd_chgident : public command_t
12 {
13  public:
14         cmd_chgident() : command_t("CHGIDENT", 'o', 2)
15         {
16                 this->source = "m_chgident.so";
17         }
18         
19         void Handle(char **parameters, int pcnt, userrec *user)
20         {
21                 userrec* dest = Srv->FindNick(std::string(parameters[0]));
22                 
23                 if(dest)
24                 {
25                         for(unsigned int x = 0; x < strlen(parameters[1]); x++)
26                         {
27                                 if(((parameters[1][x] >= 'A') && (parameters[1][x] <= '}')) || strchr(".-0123456789", parameters[1][x]))
28                                         continue;
29                         
30                                 WriteServ(user->fd, "NOTICE %s :*** Invalid characters in ident", user->nick);
31                                 return;
32                         }
33                 
34                         WriteOpers("%s used CHGIDENT to change %s's host from '%s' to '%s'", user->nick, dest->nick, dest->ident, parameters[1]);
35                         strlcpy(dest->ident, parameters[1], IDENTMAX+2);
36                 }
37                 else
38                 {
39                         WriteServ(user->fd, "401 %s %s :No such nick/channel", user->nick, parameters[0]);
40                 }
41         }
42 };
43
44
45 class ModuleChgIdent : public Module
46 {
47         cmd_chgident* mycommand;
48         
49 public:
50         ModuleChgIdent(Server* Me) : Module::Module(Me)
51         {
52                 Srv = Me;
53                 mycommand = new cmd_chgident();
54                 Srv->AddCommand(mycommand);
55         }
56         
57         virtual ~ModuleChgIdent()
58         {
59         }
60         
61         virtual Version GetVersion()
62         {
63                 return Version(1,0,0,0,VF_VENDOR);
64         }
65         
66 };
67
68 // stuff down here is the module-factory stuff. For basic modules you can ignore this.
69
70 class ModuleChgIdentFactory : public ModuleFactory
71 {
72  public:
73         ModuleChgIdentFactory()
74         {
75         }
76         
77         ~ModuleChgIdentFactory()
78         {
79         }
80         
81         virtual Module * CreateModule(Server* Me)
82         {
83                 return new ModuleChgIdent(Me);
84         }
85         
86 };
87
88
89 extern "C" void * init_module( void )
90 {
91         return new ModuleChgIdentFactory;
92 }
93