Server IP : 195.201.23.43 / Your IP : 3.137.214.24 Web Server : Apache System : Linux webserver2.vercom.be 5.4.0-192-generic #212-Ubuntu SMP Fri Jul 5 09:47:39 UTC 2024 x86_64 User : kdecoratie ( 1041) PHP Version : 7.1.33-63+ubuntu20.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/share/webmin/xinetd/ |
Upload File : |
# xinetd-lib.pl # Functions for parsing xinetd config files BEGIN { push(@INC, ".."); }; use WebminCore; &init_config(); # get_xinetd_config() sub get_xinetd_config { return &parse_xinetd($config{'xinetd_conf'}); } # parse_xinetd(file, [offset]) # Parses the xinetd config file into directives sub parse_xinetd { local @rv; open(INET, "<".$_[0]); local @lines = <INET>; close(INET); local $lnum = 0; local $section; foreach (@lines) { s/\r|\n//g; s/#.*$//g; s/\s+$//; # remove newlines, comments and spaces if (/^\s*\{/) { # put subsequent directives into a section $section = $rv[$#rv]; $section->{'members'} = [ ]; } elsif (/^\s*\}/) { # finished the section $section->{'eline'} = $lnum; $section = undef; } elsif (/^\s*include\s+(\S+)/) { # include directives from a file push(@rv, &parse_xinetd($1, scalar(@rv))); } elsif (/^\s*includedir\s+(\S+)/) { # include directives from every file in a directory local $d = $1; opendir(DIR, $d); foreach $f (readdir(DIR)) { next if ($f =~ /^\./); push(@rv, &parse_xinetd("$d/$f", scalar(@rv))); } closedir(DIR); } elsif (/^\s*(\S+)\s*(.*)/) { # a directive or start of a section local $dir = { 'name' => $1, 'file' => $_[0], 'index' => scalar(@rv) + $_[1], 'line' => $lnum, 'eline' => $lnum }; local $v = $2; if ($v =~ /^(=|\+=|-=)\s+(.*)/) { $dir->{'op'} = $1; $dir->{'value'} = $2; } else { $dir->{'op'} = '=' if ($service); $dir->{'value'} = $v; } local @v = split(/\s+/, $dir->{'value'}); $dir->{'values'} = \@v; if ($section) { push(@{$section->{'members'}}, $dir); local @q = @{$section->{'quick'}->{$dir->{'name'}}}; if ($dir->{'op'} eq '=') { @q = @v; } elsif ($dir->{'op'} eq '+=') { @q = ( @q, @v ); } elsif ($dir->{'op'} eq '-=') { @q = grep { &indexof($_, @v) < 0 } @q; } $section->{'quick'}->{$dir->{'name'}} = \@q; } else { push(@rv, $dir); } } $lnum++; } return @rv; } # set_member_value(&xinet, name, [value]*) # Removes all members with the given name and replaces them with one # like name = value sub set_member_value { local @m = @{$_[0]->{'members'}}; @m = grep { $_->{'name'} ne $_[1] } @m; if (defined($_[2])) { push(@m, { 'name' => $_[1], 'op' => '=', 'values' => [ @_[2..@_-1] ] } ); $_[0]->{'quick'}->{$_[1]} = [ @_[2..@_-1] ]; } else { delete($_[0]->{'quick'}->{$_[1]}); } $_[0]->{'members'} = \@m; } # create_xinet(&xinet, [file]) # Add a new xinet record to the end of the config file sub create_xinet { local $lref = &read_file_lines($_[1] || $config{'xinetd_conf'}); push(@$lref, &xinet_lines($_[0])); &flush_file_lines(); } # modify_xinet(&xinet) # Update an existing xinet record sub modify_xinet { local $lref = &read_file_lines($_[0]->{'file'}); splice(@$lref, $_[0]->{'line'}, $_[0]->{'eline'} - $_[0]->{'line'} + 1, &xinet_lines($_[0])); &flush_file_lines(); } # delete_xinet(&xinet) # Delete an existing xinet record sub delete_xinet { local $lref = &read_file_lines($_[0]->{'file'}); splice(@$lref, $_[0]->{'line'}, $_[0]->{'eline'} - $_[0]->{'line'} + 1); &flush_file_lines(); } # xinet_lines(&xinet, tabs) sub xinet_lines { local @rv; $rv[0] = "$_[1]$_[0]->{'name'}"; $rv[0] .= " $_[0]->{'op'}" if ($_[0]->{'op'}); foreach $v (@{$_[0]->{'values'}}) { $rv[0] .= " $v"; } if ($_[0]->{'members'}) { push(@rv, $_[1].'{'); foreach $m (@{$_[0]->{'members'}}) { push(@rv, &xinet_lines($m, "$_[1]\t")); } push(@rv, $_[1].'}'); } return @rv; } # list_protocols() # Returns a list of supported protocols on this system sub list_protocols { local(@rv); open(PROT, "<".$config{'protocols_file'}); while(<PROT>) { chop; s/#.*$//g; if (!/\S/) { next; } /^(\S+)\s+/; push(@rv, $1); } close(PROT); return &unique(@rv); } sub is_xinetd_running { if ($config{'pid_file'}) { return &check_pid_file($config{'pid_file'}); } else { local ($pid) = &find_byname("xinetd"); return $pid; } } sub get_start_binary { my ($cmd) = split(/\s+/, $config{'start_cmd'}); return &has_command($cmd); } 1;Private