]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - .inspircd.inc
Added extra docs for new config system
[user/henk/code/inspircd.git] / .inspircd.inc
1 #!/usr/bin/perl
2 #       +------------------------------------+
3 #       | Inspire Internet Relay Chat Daemon |
4 #       +------------------------------------+
5 #
6 #  Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
7 #                       E-mail:
8 #                <brain@chatspike.net>
9 #                <Craig@chatspike.net>
10 #
11 # Written by Craig Edwards, Craig McLure, and others.
12 # This program is free but copyrighted software; see
13 #            the file COPYING for details.
14 #
15 #               I HATE PERL.. kthxbye
16 # ---------------------------------------------------
17
18 my $confpath = "@CONFIG_DIR@/";
19 my $binpath = "@BINARY_DIR@";
20 my $libpath = "@LIBRARY_DIR@";
21 my $executable = "@EXECUTABLE@";
22 my @filesparsed;
23
24 $ENV{"LD_LIBRARY_PATH"} = $ENV{"LD_LIBRARY_PATH"} . ":/usr/local/lib/mysql:/usr/lib/mysql:$libpath";
25
26 # Lets see what they want to do.. Set the variable (Cause i'm a lazy coder)
27 my $arg = $ARGV[0];
28 getpidfile($confpath."inspircd.conf");
29
30 if ($arg eq "start") { start(); exit(); }
31 if ($arg eq "debug") { debug(); exit(); }
32 if ($arg eq "stop") { stop(); exit(); }
33 if ($arg eq "status") {
34         if (getstatus() == 1) { 
35                 my $pid = getprocessid();
36                 print "InspIRCd is running (PID: $pid)\n";
37                 exit();
38         } else {
39                 print "InspIRCd is not running. (Or PID File not found)\n";
40                 exit();
41         }
42 }
43 if ($arg eq "rehash") {
44         if (getstatus() == 1) {
45                 my $pid = getprocessid();
46                 system("kill -HUP $pid >/dev/null 2>&1");
47                 print "InspIRCd rehashed.\n";
48                 exit();
49         } else {
50                 print "InspIRCd is not running. (Or PID File not found)\n";
51                 exit();
52         }
53 }
54
55 if ($arg eq "cron") {
56         if (getstatus() == 0) { start(); }
57         exit();
58 }
59
60 if ($arg eq "restart") {
61         stop();
62         start();
63         # kthxbye();
64         exit();
65 }
66
67 if ($arg eq "Cheese-Sandwich") {
68         print "Creating Cheese Sandwich..\n";
69         print "Done.\n";
70         exit();
71 }
72
73 ###
74 # If we get here.. bad / no parameters.
75 ###
76 print "Invalid Argument: $arg\n";
77 print "Usage: inspircd (start|stop|restart|rehash|status|cron)\n";
78 exit();
79
80 ###
81 # Generic Helper Functions.
82 ###
83
84 sub start {
85         # Check to see its not 'running' already.
86         if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; }
87         # If we are still alive here.. Try starting the IRCd..
88         system("$binpath/$executable");
89         sleep 2;
90         return 1;
91 }
92
93 sub debug {
94         # Check to see its not 'running' already.
95         if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; }
96         # If we are still alive here.. Try starting the IRCd..
97         system("gdb --args $binpath/$executable -nofork -debug");
98 }
99
100
101 sub stop {
102         if (getstatus() == 0) { print "InspIRCd is not running. (Or PID File not found)\n"; return 0; }
103         # Get to here, we have something to kill.
104         my $pid = getprocessid();
105         print "Stopping InspIRCd...\n";
106         system("kill -TERM $pid >/dev/null 2>&1");
107         sleep 2;
108         if (getstatus() == 1)
109         {
110                 print "InspIRCd not dying Quietly -- Forcing Kill\n";
111                 system("kill -9 $pid >/dev/null 2>&1");
112         }
113         print "InspIRCd Stopped.\n";
114 }
115
116 # GetPidfile Version 2 - Now With Include Support..
117 # I beg for months for include support in insp, then.. 
118 # when it is added, it comes around and BITES ME IN THE ASS,
119 # because i then have to code support into this script.. Evil.
120
121 sub getpidfile {
122   my ($file) = @_;
123   # Before we start, do we have a PID already? (Should never occur)
124   if ($pid ne "") {
125     return;
126   }
127   # Are We using a relative path?
128   if ($file !~ /^\//) {
129     # Convert it to a full path..
130     $file = $confpath . $file;
131   }
132
133   # Have we checked this file before?
134   for (my $i = 0; $i < $filesparsed; $i++) {
135     if ($filesparsed[$i] eq $file) {
136       # Already Parsed, Possible recursive loop..
137       return;
138     }
139   }
140   
141   # If we get here, Mark as 'Read'
142   $filesparsed[$filesparsed] = $file;
143
144   # Open the File..
145   open INFILE, "< $file" or die "Unable to Open file $file\n";
146   # Grab entire file contents..
147   my(@lines) = <INFILE>;
148   # Close the file
149   close INFILE;
150
151   # Clean up the file, no newlines etc..
152   chomp(@lines);
153   foreach $i (@lines) {
154     $i =~ s/[^=]+=\s(.*)/\1/;
155   }
156   my $tmp = join("",@lines);
157
158   # Does this file have a pid?
159   if ($tmp =~ /<pid file=\"(\S+)\">/i) {
160     # Set the PID file and return.
161     $pidfile = $1;
162     return;
163   }
164
165   # If we get here, NO PID FILE! -- Check for includes (Seeing as we will eventually return,
166   # The while (1) is safe.)
167   while (1) {
168     if ($tmp =~ s/\<include file=\"(.+?)\"\>//i)
169     {
170       # Decend into that file, and check for PIDs.. (that sounds like an STD ;/)
171       getpidfile($1);
172       # Was a PID found?
173       if ($pidfile ne "") {
174         # Yes, Return.
175         return;
176       }
177     } else {
178       # End of includes / No includes found.
179       return;
180     }
181   }
182 }
183
184 sub getstatus {
185         my $pid = getprocessid();
186         if ($pid == 0) { return 0; }
187         $status = system("kill -0 $pid >/dev/null 2>&1") / 256;
188         if ($status == 0) { return 1; }
189         else { return 0; }
190 }
191
192
193 sub getprocessid {
194         my $pid;
195         open PIDFILE, "< $pidfile" or return 0;
196         while($i = <PIDFILE>)
197         {
198                 $pid = $i;
199         }
200         close PIDFILE;
201         return $pid;
202 }
203