- open INFILE, "< $conffile" or die "Couldn't open $conffile\n";
- my(@lines) = <INFILE>;
- close INFILE;
- chomp(@lines);
-
- foreach $i (@lines) {
- $i =~ s/[^=]+=\s(.*)/\1/;
- }
-
- my $tmp = join("",@lines);
- $tmp =~ /<pid file=\"(\S+)\">/i;
-
- $pidfile = $1;
+ my ($file) = @_;
+ # Before we start, do we have a PID already? (Should never occur)
+ if ($pid ne "") {
+ return;
+ }
+ # Are We using a relative path?
+ if ($file !~ /^\//) {
+ # Convert it to a full path..
+ $file = $confpath . $file;
+ }
+
+ # Have we checked this file before?
+ for (my $i = 0; $i < $filesparsed; $i++) {
+ if ($filesparsed[$i] eq $file) {
+ # Already Parsed, Possible recursive loop..
+ return;
+ }
+ }
+
+ # If we get here, Mark as 'Read'
+ $filesparsed[$filesparsed] = $file;
+
+ # Open the File..
+ open INFILE, "< $file" or die "Unable to Open file $file\n";
+ # Grab entire file contents..
+ my(@lines) = <INFILE>;
+ # Close the file
+ close INFILE;
+
+ # Clean up the file, no newlines etc..
+ chomp(@lines);
+ foreach $i (@lines) {
+ $i =~ s/[^=]+=\s(.*)/\1/;
+ }
+ my $tmp = join("",@lines);
+
+ # Does this file have a pid?
+ if ($tmp =~ /<pid file=\"(\S+)\">/i) {
+ # Set the PID file and return.
+ $pidfile = $1;
+ return;
+ }
+
+ # If we get here, NO PID FILE! -- Check for includes (Seeing as we will eventually return,
+ # The while (1) is safe.)
+ while (1) {
+ if ($tmp =~ s/\<include file=\"(.+?)\"\>//i)
+ {
+ # Decend into that file, and check for PIDs.. (that sounds like an STD ;/)
+ getpidfile($1);
+ # Was a PID found?
+ if ($pidfile ne "") {
+ # Yes, Return.
+ return;
+ }
+ } else {
+ # End of includes / No includes found.
+ return;
+ }
+ }