]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/cmd_restart.cpp
Whoops, make /stats s work
[user/henk/code/inspircd.git] / src / cmd_restart.cpp
1 /*       +------------------------------------+
2  *       | Inspire Internet Relay Chat Daemon |
3  *       +------------------------------------+
4  *
5  *  InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev.
6  *                       E-mail:
7  *                <brain@chatspike.net>
8  *                <Craig@chatspike.net>
9  *
10  * Written by Craig Edwards, Craig McLure, and others.
11  * This program is free but copyrighted software; see
12  *            the file COPYING for details.
13  *
14  * ---------------------------------------------------
15  */
16
17 #include "configreader.h"
18 #include "users.h"
19 #include "commands/cmd_restart.h"
20
21
22
23 extern "C" command_t* init_command(InspIRCd* Instance)
24 {
25         return new cmd_restart(Instance);
26 }
27
28 CmdResult cmd_restart::Handle (const char** parameters, int pcnt, userrec *user)
29 {
30         char *argv[32];
31         ServerInstance->Log(DEFAULT,"Restart: %s",user->nick);
32         if (!strcmp(parameters[0],ServerInstance->Config->restartpass))
33         {
34                 ServerInstance->WriteOpers("*** RESTART command from %s!%s@%s, restarting server.",user->nick,user->ident,user->host);
35
36                 argv[0] = ServerInstance->Config->MyExecutable;
37                 argv[1] = "-wait";
38                 if (ServerInstance->Config->nofork)
39                 {
40                         argv[2] = "-nofork";
41                 }
42                 else
43                 {
44                         argv[2] = NULL;
45                 }
46                 argv[3] = NULL;
47                 
48                 // close ALL file descriptors
49                 ServerInstance->SendError("Server restarting.");
50                 sleep(1);
51                 for (int i = 0; i < MAX_DESCRIPTORS; i++)
52                 {
53                         shutdown(i,2);
54                         close(i);
55                 }
56                 sleep(2);
57                 
58                 execv(ServerInstance->Config->MyExecutable,argv);
59
60                 exit(0);
61         }
62         else
63         {
64                 ServerInstance->WriteOpers("*** Failed RESTART Command from %s!%s@%s.",user->nick,user->ident,user->host);
65                 return CMD_FAILURE;
66         }
67
68         return CMD_SUCCESS;
69 }
70