]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - src/cmd_restart.cpp
Stripcolor not finished yet.
[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.h"
20 #include "helperfuncs.h"
21 #include "commands/cmd_restart.h"
22
23 extern ServerConfig* Config;;
24
25 void cmd_restart::Handle (char **parameters, int pcnt, userrec *user)
26 {
27         char *argv[32];
28         log(DEFAULT,"Restart: %s",user->nick);
29         if (!strcmp(parameters[0],Config->restartpass))
30         {
31                 WriteOpers("*** RESTART command from %s!%s@%s, restarting server.",user->nick,user->ident,user->host);
32
33                 argv[0] = Config->MyExecutable;
34                 argv[1] = "-wait";
35                 if (Config->nofork)
36                 {
37                         argv[2] = "-nofork";
38                 }
39                 else
40                 {
41                         argv[2] = NULL;
42                 }
43                 argv[3] = NULL;
44                 
45                 // close ALL file descriptors
46                 send_error("Server restarting.");
47                 sleep(1);
48                 for (int i = 0; i < MAX_DESCRIPTORS; i++)
49                 {
50                         shutdown(i,2);
51                         close(i);
52                 }
53                 sleep(2);
54                 
55                 execv(Config->MyExecutable,argv);
56
57                 exit(0);
58         }
59         else
60         {
61                 WriteOpers("*** Failed RESTART Command from %s!%s@%s.",user->nick,user->ident,user->host);
62         }
63 }