#!/usr/local/bin/perl #ssullivan@liquidweb.com use LWP::UserAgent; use XML::Simple; my $rootCheck = `id`; if ( $rootCheck =~/uid=0/) { my $versionCheck = `/usr/local/cpanel/cpanel -v | awk 'BEGIN {FS =\"[\"}; {print \$2}' | awk 'BEGIN {FS = \"]\"}; {print \$1}' | cut -d "-" -f 1`; $versionCheck =~ s/^\s+//; #remove leading spaces $versionCheck =~ s/\s+$//; #remove trailing spaces my $compare = "11.25.0"; if ( $versionCheck ge $compare) { print "Good...cPanel 11.25.0 or greater detected\n"; #Check for access hash $accessHash = '/root/.accesshash'; if (-e $accessHash) { my $hash = `cat /root/.accesshash`; $hash =~ s/\n//g; my $auth = "WHM root:" . $hash; my $ua = LWP::UserAgent->new; my $request = HTTP::Request->new( GET => "https://localhost:2087/xml-api/servicestatus" ); $request->header( Authorization => $auth ); my $response = $ua->request($request); my $list = $response->content; #Get user list open(outfile, ">srvstatus.xml"); print outfile $list; close (outfile); # create object $xml = new XML::Simple (KeyAttr=>[]); $data = $xml->XMLin("srvstatus.xml"); sub is_integer { defined $_[0] && $_[0] =~ /^[+-]?\d+$/; } sub valid_rangeErr { print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", "\n"; print "Error: please enter a valid number! ", "\n"; print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", "\n"; } sub is_integerErr { print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", "\n"; print "Error: please enter a numeric value!", "\n"; print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", "\n"; } my $srvCnt = `cat srvstatus.xml | grep -c ""`; sub serviceList { $count = 0; while ($count < $srvCnt) { my $srvce = $data->{service}->[$count]->{name}; print $count, ".) ", $srvce, "\n"; $count++; } print "-----------------------------------------", "\n"; print "Enter a service number to modify: ", "\n"; print "-----------------------------------------", "\n"; $serviceNum = ; &checkNumeric; } sub checkNumeric { if(is_integer($serviceNum)) { &checkNumRange; } else { &is_integerErr; &serviceList; } } sub checkNumRange { if (($serviceNum >= $srvCnt) || ($serviceNum < "0")) { &valid_rangeErr; &serviceList; } else { sub enableDisableService { print "--------------------------------------", "\n"; print "Enable (1) or disable (0) the service? ", "\n"; print "--------------------------------------", "\n"; $serviceOnOff = ; if(is_integer($serviceOnOff)) { if (($serviceOnOff > "1") || ($serviceOnOff < "0")) { &valid_rangeErr; &enableDisableService; } else { &enableDisableMon; } } else { &is_integerErr; &enableDisableService; } } sub enableDisableMon { print "--------------------------------------", "\n"; print "Enable (1) or disable (0) monitoring? ", "\n"; print "--------------------------------------", "\n"; $serviceMon = ; if(is_integer($serviceMon)) { if (($serviceMon > "1") || ($serviceMon < "0")) { &valid_rangeErr; &enableDisableMon; } else { #code to disable modify selected service my $srvce2 = $data->{service}->[$serviceNum]->{name}; my $request2 = HTTP::Request->new( GET => "https://localhost:2087/xml-api/configureservice?service=$srvce2&enabled=$serviceMon&monitored=$serviceMon" ); $request2->header( Authorization => $auth ); my $response2 = $ua->request($request2); print $response2->content; } } else { &is_integerErr; &enableDisableMon; } } &enableDisableService; } } &serviceList; } else { print "I cannot find /root/.accesshash. Please log into WHM and click Setup Remote Access Key and then re-run this script. Exiting...\n"; exit; } } else { print "You need cPanel 11.25.0 or greater to run this script.\n"; exit; } system("rm -rf results.xml"); system("rm -rf srvstatus.xml"); } else { print "You must be root to run this, exiting...", "\n"; exit; }