<?xml version="1.0" encoding="windows-1252"?>
<node id="632427" title="Deliberately obsfucated Perl, but why?" created="2007-08-14 05:04:13" updated="2007-08-14 01:04:13">
<type id="115">
perlquestion</type>
<author id="386673">
ghenry</author>
<data>
<field name="doctext">
&lt;p&gt;Dear All,&lt;/p&gt;
&lt;p&gt;I've just downloaded the first version of [http://www.trixbox.com/products/trixbox-pro/|Trixbox Pro] and found in the Fonality folder a script called activate.pl&lt;/p&gt;
&lt;p&gt;What are they trying to achieve here that Perl::Tidy can't make sense of? I'm really confused as to why they bothered.&lt;/p&gt;
&lt;readmore&gt;
&lt;code&gt;
#!/usr/bin/perl
#@%^&amp;*!eval('
use strict;use LWP::UserAgent;use File::Copy;use Sys::Hostname;use Term::ReadKey;use Term::ReadLine;use File::Path;use Data::Dumper;use Net::Ping;use Term::ANSIColor qw(:constants);$Term::ANSIColor::AUTORESET=1;our $ipnum=qr{([01]?\d\d?|2[0-4]\d|25[0-5])};our $ip_rx=qr{^$ipnum\.$ipnum\.$ipnum\.$ipnum$};our $if_file='/etc/sysconfig/network-scripts/ifcfg-eth0';our $network_file='/etc/sysconfig/network';our $resolv_file='/etc/resolv.conf';our $server_url='http://activate.trixbox.com/activatetb.cgi?';our $test_url='http://activate.trixbox.com/gd_test.htm?';our $code_url='http://activate.trixbox.com/activate_code.cgi?';chomp(my $GVqquVhiAz=`asterisk -V`);$server_url.="ast_ver=$GVqquVhiAz&amp;";$|++;my($PVOVqKqKJM)=new Term::ReadLine 'Fonality Activation';my($EmHDINcXZa)=hostname();my($dUmAMyhvCd)=0;our $tag;OCZveFAbjX();sub OCZveFAbjX{ZYaqMtxfrv();system('clear');VArFVNWbam();print GREEN "+------------------------+\n";print GREEN "| ";print BLACK ON_GREEN "trixbox Pro Activation";print GREEN " |\n";print GREEN "+------------------------+\n\n";print CYAN BLINK "--&gt; ";print CYAN "You may press 'r' at any time to restart activation";print CYAN BLINK " &lt;--\n";$tag=jnZbUZJApp();KqLlpipjyn(1);lIDBRbqpeC();OzekKOuyhw();}sub sKOyYGxskF{my($xKTKQMfbVD,$KgxZXqQGIF,$XbSfEMBcUk,$cTPCMqMfcH)=@_;my $VXeTfFIUiV;if(length($XbSfEMBcUk)){$KgxZXqQGIF.=" [$XbSfEMBcUk]";if($cTPCMqMfcH){$KgxZXqQGIF.=" " x($cTPCMqMfcH-length($XbSfEMBcUk));}}{$VXeTfFIUiV=_get_info_from_terminal($PVOVqKqKJM,$KgxZXqQGIF);chomp $VXeTfFIUiV;goto&amp;OCZveFAbjX if $VXeTfFIUiV=~/^r$/i;$VXeTfFIUiV=$XbSfEMBcUk,last if(!$VXeTfFIUiV)&amp;&amp;(length($XbSfEMBcUk)&gt;0);last if $VXeTfFIUiV=~/$xKTKQMfbVD/;redo;}return $VXeTfFIUiV;}sub TJQwGbWFKi{my $AlUiwojqTa=shift;my %tdMiGAqRFq=();open my $IcDxuREUNE,"&lt;$AlUiwojqTa" or die $!;for my $XmjVzWmCmz(grep{$_!~/^\s*#/}&lt;$IcDxuREUNE&gt;){my($k,$v)=split /=|\s+/,$XmjVzWmCmz;$tdMiGAqRFq{$k}=$v unless $tdMiGAqRFq{$k};}close $IcDxuREUNE;return\%tdMiGAqRFq;}sub FcbTHfkFxM{my($AlUiwojqTa,$tdMiGAqRFq,$oAYUkbbNOm)=@_;$oAYUkbbNOm||='=';my $lmzUStCpcK;$lmzUStCpcK.="$_$oAYUkbbNOm$$tdMiGAqRFq{$_}\n" for keys %$tdMiGAqRFq;open my $IcDxuREUNE,"&gt;$AlUiwojqTa" or die $!;print $IcDxuREUNE $lmzUStCpcK;close $IcDxuREUNE;}sub gSYwwUupkM{my $nxbNvJzwFY=qx{/sbin/ifconfig};my $elaMRBWDUG=qr{[\d.]+\s};my($dqGjPvcxQR,$PJeFpfLhEr)=$nxbNvJzwFY=~/eth0.+?inet addr:($elaMRBWDUG).+?Mask:($elaMRBWDUG)/s;
        return $dqGjPvcxQR, $PJeFpfLhEr;
}

sub network_restart
{
        print "\n&gt;&gt;&gt; Reconfiguring your network settings...\n\n"; system '/etc/init.d/network restart &gt;&gt;/dev/null 2&gt;&gt;/dev/null';my $msJKpWUmpl=TJQwGbWFKi $network_file;my $vXFXCrQFnU=TJQwGbWFKi $if_file;my $SbomKOcnKw=TJQwGbWFKi $resolv_file;($$vXFXCrQFnU{IPADDR},$$vXFXCrQFnU{NETMASK})=gSYwwUupkM if $$vXFXCrQFnU{BOOTPROTO}eq 'dhcp';$$vXFXCrQFnU{IPADDR}=~s/\s*$//;$$msJKpWUmpl{GATEWAY}||=arozmtfBtA();print "\nYour new IP configuration is:\n";UVjDfyLFLX($vXFXCrQFnU,$SbomKOcnKw,$msJKpWUmpl);}sub UVjDfyLFLX{my($sfJyxerKYI,$UpWrjVymzj,$TbrsIxlJJJ)=@_;chomp($$sfJyxerKYI{NETMASK});print qq{
                IP address      : $$sfJyxerKYI{IPADDR}
                Subnet mask     : $$sfJyxerKYI{NETMASK}
                Default gateway : $$TbrsIxlJJJ{GATEWAY}
                DNS server      : $$UpWrjVymzj{nameserver}
                Mode            : $$sfJyxerKYI{BOOTPROTO}
        }}sub XOYkQtvqAN{my $mMlzdjKpAg=shift;my $p=Net::Ping-&gt;new();my $eBkWXnmVJM=$p-&gt;ping($mMlzdjKpAg,1)?1:0;$p-&gt;close;print "\nERROR: The installer has detected a conflict for IP address $mMlzdjKpAg\n" if $eBkWXnmVJM;return $eBkWXnmVJM;}sub arozmtfBtA{my($rRTzLjmLtN)=grep{/^0\.0\.0\.0\s/}`/sbin/route -n`;my @WXqMFsGkCQ=split(/\s+/,$rRTzLjmLtN);return $WXqMFsGkCQ[1];}sub lIDBRbqpeC{my $oaDEGDOCYR=1;my $msJKpWUmpl=TJQwGbWFKi $network_file;my $vXFXCrQFnU=TJQwGbWFKi $if_file;my $SbomKOcnKw=TJQwGbWFKi $resolv_file;($$vXFXCrQFnU{IPADDR},$$vXFXCrQFnU{NETMASK})=gSYwwUupkM if $$vXFXCrQFnU{BOOTPROTO}eq 'dhcp';$$vXFXCrQFnU{IPADDR}=~s/\s*$//;$$msJKpWUmpl{GATEWAY}||=arozmtfBtA();print "\nYour current IP configuration is:\n";UVjDfyLFLX $vXFXCrQFnU,$SbomKOcnKw,$msJKpWUmpl;my $VXeTfFIUiV;print "\nSelect your desired IP configuration below:\n\n";print "1. DHCP\n";print "2. Static IP\n";print "3. Keep my current configuration\n";print "r. Restart activation\n";$VXeTfFIUiV=sKOyYGxskF qr/^(?:1|2|3)$/,"\nSelect option [1,2,3,r]";return if $VXeTfFIUiV==3;if($VXeTfFIUiV==1){$$vXFXCrQFnU{BOOTPROTO}='dhcp';}else{my $YVWMjzTYNT=$$vXFXCrQFnU{IPADDR};$$vXFXCrQFnU{BOOTPROTO}='static';{$vXFXCrQFnU-&gt;{IPADDR}=sKOyYGxskF $ip_rx,"Enter IP address  ",$vXFXCrQFnU-&gt;{IPADDR},15;if($YVWMjzTYNT ne $vXFXCrQFnU-&gt;{IPADDR}){redo if XOYkQtvqAN($vXFXCrQFnU-&gt;{IPADDR});}}$$vXFXCrQFnU{NETMASK}=sKOyYGxskF $ip_rx,"Enter Subnet mask ",$$vXFXCrQFnU{NETMASK},15;$$msJKpWUmpl{GATEWAY}=sKOyYGxskF $ip_rx,"Enter Gateway     ",$$msJKpWUmpl{GATEWAY},15;$$SbomKOcnKw{nameserver}=sKOyYGxskF $ip_rx,"Enter DNS server  ",$$SbomKOcnKw{nameserver},15;}FcbTHfkFxM $if_file,$vXFXCrQFnU;FcbTHfkFxM $network_file,$msJKpWUmpl;FcbTHfkFxM $resolv_file,$SbomKOcnKw,' ';network_restart if $oaDEGDOCYR;KqLlpipjyn();}sub rOknjWmhGj{my $uApaYxEtCg=shift;my $tYyzaroUCI=join '',('.','/',0..9,'A'..'Z','a'..'z')[rand 64,rand 64];return crypt $uApaYxEtCg,$tYyzaroUCI;}sub OzekKOuyhw{print "\nIf you do not have a trixbox Pro username and password, please\n";print "visit http://www.trixbox.com to obtain an account for FREE!\n";my $UQPxfutQHG=sKOyYGxskF(qw/^\w+$/,"\nEnter your trixbox Pro username");print "Enter your trixbox Pro password: ";my $JEIeAkJmLx=DMdpTcCgXX();print "\n";wTywFVxbkC($server_url."username=$UQPxfutQHG&amp;password=$JEIeAkJmLx");}sub DMdpTcCgXX{ReadMode(3);my $JEIeAkJmLx='';while(1){my $sOvLKRSEaI=eKmBXncRAW();if($sOvLKRSEaI==10){last;}if($sOvLKRSEaI==127){if(length($JEIeAkJmLx)){chop($JEIeAkJmLx);print chr(8),' ',chr(8);}next;}if($sOvLKRSEaI==27){bstLbHKYNu();$sOvLKRSEaI="\0";}if($sOvLKRSEaI!="\0"){$JEIeAkJmLx.=chr($sOvLKRSEaI);print '*';}}ReadMode(0);return $JEIeAkJmLx;}sub eKmBXncRAW{my $SJRrKNgJkm;if(defined($SJRrKNgJkm=ReadKey(0))){}return ord($SJRrKNgJkm);}sub bstLbHKYNu{while(1){my $SJRrKNgJkm;if(defined($SJRrKNgJkm=ReadKey(-1))){}else{return;}}return;}sub wTywFVxbkC{my $BQMWjcomfS=shift;my $mZTeCbfneK=shift||"Activating";print "\n";printf "%-59s","&gt;&gt;&gt; $mZTeCbfneK your system now (may take several minutes)...";my $TrTJQltZLH='/var/adm/bin/setup.pl';my $fMWWwAVxMf=new LWP::UserAgent;my $XWDoBfXXZZ=$fMWWwAVxMf-&gt;get($BQMWjcomfS);my $KgxZXqQGIF;if($XWDoBfXXZZ-&gt;is_success){my($uqcUwvgUky,$jhYLzWckFm)=$XWDoBfXXZZ-&gt;content=~m{^(.*?)(#!/usr/bin/perl.+)$}s;
                ($KgxZXqQGIF) = $uqcUwvgUky =~ m!&gt;&gt;&gt;(.+?)&lt;&lt;&lt;!s;

                if ($jhYLzWckFm)
                {
                        print "[  " . GREEN . "OK" . WHITE . "  ]\n"; system("/bin/mkdir -p /var/adm/bin")unless-d '/var/adm/bin';open FILE,"&gt;$TrTJQltZLH"||warn $!;print FILE $jhYLzWckFm;close FILE;if(-f $TrTJQltZLH){system("/usr/bin/perl $TrTJQltZLH");unlink($TrTJQltZLH,'/Fonality/activate.pl')if $?==0;}}else{print "[".RED."FAILED".WHITE."]\n";print "\nERROR: ".$XWDoBfXXZZ-&gt;content;_get_info_from_terminal($PVOVqKqKJM,"\nPress Enter to restart activation");goto&amp;OCZveFAbjX;}}else{print "[".RED."FAILED".WHITE."]\n";print "\nERROR: ".$XWDoBfXXZZ-&gt;status_line."\n".$XWDoBfXXZZ-&gt;content;return;}print $KgxZXqQGIF;exit;}sub KqLlpipjyn{my $MAYltVyoJH=shift;print "\n&gt;&gt;&gt; Checking for Internet connection (may take several minutes)...";system("/sbin/ifdown eth0 &gt; /dev/null");system("/sbin/ifup eth0 &gt; /dev/null");my $BQMWjcomfS=$test_url."tag=$tag";my $fMWWwAVxMf=new LWP::UserAgent;my $XWDoBfXXZZ=$fMWWwAVxMf-&gt;get($BQMWjcomfS);if($XWDoBfXXZZ-&gt;is_success){print "[  ".GREEN."OK".WHITE."  ]\n"}else{print "[".RED."FAILED".WHITE."]\n";print "\nERROR: Unable to connect to external host. This is typically due\n";print "       to an IP configuration or network issue.\n\n";my $VXeTfFIUiV=sKOyYGxskF qr/^(?:1|2)$/,"1. Test your connection again\n2. Re-configure your IP settings\n\nSelect option [1,2,r]";if($VXeTfFIUiV==1){KqLlpipjyn()}else{lIDBRbqpeC unless $MAYltVyoJH}}}sub VArFVNWbam{my($ajVzVgZgjk)=`/usr/bin/tty`;chomp($ajVzVgZgjk);if($ajVzVgZgjk=~/^\/dev\/tty[1-6]$/){$dUmAMyhvCd=1;}else{}}sub jnZbUZJApp{system("/sbin/ifconfig eth0 | head -1 | sed -e 's/.*HWaddr //;' | sed -e 's/://g;' | sed -e 's/ //g;' &gt; /etc/tag");open(TAG,'/etc/tag')||die $!;my(@pSuUVmgycQ)=&lt;TAG&gt;;close(TAG);chomp(@pSuUVmgycQ);return($pSuUVmgycQ[0]);}sub _get_info_from_terminal{my($PVOVqKqKJM)=shift(@_);my($LFBMmishAR)=shift(@_).': ';my($VXeTfFIUiV)=$PVOVqKqKJM-&gt;readline($LFBMmishAR);$PVOVqKqKJM-&gt;addhistory($_)if /\S/;return($VXeTfFIUiV);}sub ZYaqMtxfrv{system("perl -pi -e 's/^KLOGD_OPTIONS=.*/KLOGD_OPTIONS=\"-x -c 4\"/;' /etc/sysconfig/syslog");system("/etc/init.d/syslog restart &gt; /dev/null 2&gt;&amp;1");}
&lt;/code&gt;
&lt;/readmore&gt;
&lt;p&gt;Tidy version:&lt;/p&gt;
&lt;readmore&gt;
&lt;code&gt;
#!/usr/bin/perl
#@%^&amp;*!eval('
use strict;
use LWP::UserAgent;
use File::Copy;
use Sys::Hostname;
use Term::ReadKey;
use Term::ReadLine;
use File::Path;
use Data::Dumper;
use Net::Ping;
use Term::ANSIColor qw(:constants);
$Term::ANSIColor::AUTORESET = 1;
our $ipnum        = qr{([01]?\d\d?|2[0-4]\d|25[0-5])};
our $ip_rx        = qr{^$ipnum\.$ipnum\.$ipnum\.$ipnum$};
our $if_file      = '/etc/sysconfig/network-scripts/ifcfg-eth0';
our $network_file = '/etc/sysconfig/network';
our $resolv_file  = '/etc/resolv.conf';
our $server_url   = 'http://activate.trixbox.com/activatetb.cgi?';
our $test_url     = 'http://activate.trixbox.com/gd_test.htm?';
our $code_url     = 'http://activate.trixbox.com/activate_code.cgi?';
chomp( my $GVqquVhiAz = `asterisk -V` );
$server_url .= "ast_ver=$GVqquVhiAz&amp;";
$|++;
my ($PVOVqKqKJM) = new Term::ReadLine 'Fonality Activation';
my ($EmHDINcXZa) = hostname();
my ($dUmAMyhvCd) = 0;
our $tag;
OCZveFAbjX();

sub OCZveFAbjX {
    ZYaqMtxfrv();
    system('clear');
    VArFVNWbam();
    print GREEN "+------------------------+\n";
    print GREEN "| ";
    print BLACK ON_GREEN "trixbox Pro Activation";
    print GREEN " |\n";
    print GREEN "+------------------------+\n\n";
    print CYAN BLINK "--&gt; ";
    print CYAN "You may press 'r' at any time to restart activation";
    print CYAN BLINK " &lt;--\n";
    $tag = jnZbUZJApp();
    KqLlpipjyn(1);
    lIDBRbqpeC();
    OzekKOuyhw();
}

sub sKOyYGxskF {
    my ( $xKTKQMfbVD, $KgxZXqQGIF, $XbSfEMBcUk, $cTPCMqMfcH ) = @_;
    my $VXeTfFIUiV;
    if ( length($XbSfEMBcUk) ) {
        $KgxZXqQGIF .= " [$XbSfEMBcUk]";
        if ($cTPCMqMfcH) {
            $KgxZXqQGIF .= " " x ( $cTPCMqMfcH - length($XbSfEMBcUk) );
        }
    }
    {
        $VXeTfFIUiV = _get_info_from_terminal( $PVOVqKqKJM, $KgxZXqQGIF );
        chomp $VXeTfFIUiV;
        goto &amp;OCZveFAbjX if $VXeTfFIUiV =~ /^r$/i;
        $VXeTfFIUiV = $XbSfEMBcUk, last
          if ( !$VXeTfFIUiV ) &amp;&amp; ( length($XbSfEMBcUk) &gt; 0 );
        last if $VXeTfFIUiV =~ /$xKTKQMfbVD/;
        redo;
    }
    return $VXeTfFIUiV;
}

sub TJQwGbWFKi {
    my $AlUiwojqTa = shift;
    my %tdMiGAqRFq = ();
    open my $IcDxuREUNE, "&lt;$AlUiwojqTa" or die $!;
    for my $XmjVzWmCmz ( grep { $_ !~ /^\s*#/ } &lt;$IcDxuREUNE&gt; ) {
        my ( $k, $v ) = split /=|\s+/, $XmjVzWmCmz;
        $tdMiGAqRFq{$k} = $v unless $tdMiGAqRFq{$k};
    }
    close $IcDxuREUNE;
    return \%tdMiGAqRFq;
}

sub FcbTHfkFxM {
    my ( $AlUiwojqTa, $tdMiGAqRFq, $oAYUkbbNOm ) = @_;
    $oAYUkbbNOm ||= '=';
    my $lmzUStCpcK;
    $lmzUStCpcK .= "$_$oAYUkbbNOm$$tdMiGAqRFq{$_}\n" for keys %$tdMiGAqRFq;
    open my $IcDxuREUNE, "&gt;$AlUiwojqTa" or die $!;
    print $IcDxuREUNE $lmzUStCpcK;
    close $IcDxuREUNE;
}

sub gSYwwUupkM {
    my $nxbNvJzwFY = qx{/sbin/ifconfig};
    my $elaMRBWDUG = qr{[\d.]+\s};
    my ( $dqGjPvcxQR, $PJeFpfLhEr ) =
      $nxbNvJzwFY =~ /eth0.+?inet addr:($elaMRBWDUG).+?Mask:($elaMRBWDUG)/s;
    return $dqGjPvcxQR, $PJeFpfLhEr;
}

sub network_restart {
    print "\n&gt;&gt;&gt; Reconfiguring your network settings...\n\n";
    system '/etc/init.d/network restart &gt;&gt;/dev/null 2&gt;&gt;/dev/null';
    my $msJKpWUmpl = TJQwGbWFKi $network_file;
    my $vXFXCrQFnU = TJQwGbWFKi $if_file;
    my $SbomKOcnKw = TJQwGbWFKi $resolv_file;
    ( $$vXFXCrQFnU{IPADDR}, $$vXFXCrQFnU{NETMASK} ) = gSYwwUupkM
      if $$vXFXCrQFnU{BOOTPROTO} eq 'dhcp';
    $$vXFXCrQFnU{IPADDR} =~ s/\s*$//;
    $$msJKpWUmpl{GATEWAY} ||= arozmtfBtA();
    print "\nYour new IP configuration is:\n";
    UVjDfyLFLX( $vXFXCrQFnU, $SbomKOcnKw, $msJKpWUmpl );
}

sub UVjDfyLFLX {
    my ( $sfJyxerKYI, $UpWrjVymzj, $TbrsIxlJJJ ) = @_;
    chomp( $$sfJyxerKYI{NETMASK} );
    print qq{
                IP address      : $$sfJyxerKYI{IPADDR}
                Subnet mask     : $$sfJyxerKYI{NETMASK}
                Default gateway : $$TbrsIxlJJJ{GATEWAY}
                DNS server      : $$UpWrjVymzj{nameserver}
                Mode            : $$sfJyxerKYI{BOOTPROTO}
        };
}

sub XOYkQtvqAN {
    my $mMlzdjKpAg = shift;
    my $p          = Net::Ping-&gt;new();
    my $eBkWXnmVJM = $p-&gt;ping( $mMlzdjKpAg, 1 ) ? 1 : 0;
    $p-&gt;close;
    print
"\nERROR: The installer has detected a conflict for IP address $mMlzdjKpAg\n"
      if $eBkWXnmVJM;
    return $eBkWXnmVJM;
}

sub arozmtfBtA {
    my ($rRTzLjmLtN) = grep { /^0\.0\.0\.0\s/ } `/sbin/route -n`;
    my @WXqMFsGkCQ = split( /\s+/, $rRTzLjmLtN );
    return $WXqMFsGkCQ[1];
}

sub lIDBRbqpeC {
    my $oaDEGDOCYR = 1;
    my $msJKpWUmpl = TJQwGbWFKi $network_file;
    my $vXFXCrQFnU = TJQwGbWFKi $if_file;
    my $SbomKOcnKw = TJQwGbWFKi $resolv_file;
    ( $$vXFXCrQFnU{IPADDR}, $$vXFXCrQFnU{NETMASK} ) = gSYwwUupkM
      if $$vXFXCrQFnU{BOOTPROTO} eq 'dhcp';
    $$vXFXCrQFnU{IPADDR} =~ s/\s*$//;
    $$msJKpWUmpl{GATEWAY} ||= arozmtfBtA();
    print "\nYour current IP configuration is:\n";
    UVjDfyLFLX $vXFXCrQFnU, $SbomKOcnKw, $msJKpWUmpl;
    my $VXeTfFIUiV;
    print "\nSelect your desired IP configuration below:\n\n";
    print "1. DHCP\n";
    print "2. Static IP\n";
    print "3. Keep my current configuration\n";
    print "r. Restart activation\n";
    $VXeTfFIUiV = sKOyYGxskF qr/^(?:1|2|3)$/, "\nSelect option [1,2,3,r]";
    return if $VXeTfFIUiV == 3;
    if ( $VXeTfFIUiV == 1 ) { $$vXFXCrQFnU{BOOTPROTO} = 'dhcp'; }
    else {
        my $YVWMjzTYNT = $$vXFXCrQFnU{IPADDR};
        $$vXFXCrQFnU{BOOTPROTO} = 'static';
        {
            $vXFXCrQFnU-&gt;{IPADDR} = sKOyYGxskF $ip_rx, "Enter IP address  ",
              $vXFXCrQFnU-&gt;{IPADDR}, 15;
            if ( $YVWMjzTYNT ne $vXFXCrQFnU-&gt;{IPADDR} ) {
                redo if XOYkQtvqAN( $vXFXCrQFnU-&gt;{IPADDR} );
            }
        }
        $$vXFXCrQFnU{NETMASK} = sKOyYGxskF $ip_rx, "Enter Subnet mask ",
          $$vXFXCrQFnU{NETMASK}, 15;
        $$msJKpWUmpl{GATEWAY} = sKOyYGxskF $ip_rx, "Enter Gateway     ",
          $$msJKpWUmpl{GATEWAY}, 15;
        $$SbomKOcnKw{nameserver} = sKOyYGxskF $ip_rx, "Enter DNS server  ",
          $$SbomKOcnKw{nameserver}, 15;
    }
    FcbTHfkFxM $if_file,      $vXFXCrQFnU;
    FcbTHfkFxM $network_file, $msJKpWUmpl;
    FcbTHfkFxM $resolv_file,  $SbomKOcnKw, ' ';
    network_restart if $oaDEGDOCYR;
    KqLlpipjyn();
}

sub rOknjWmhGj {
    my $uApaYxEtCg = shift;
    my $tYyzaroUCI = join '',
      ( '.', '/', 0 .. 9, 'A' .. 'Z', 'a' .. 'z' )[ rand 64, rand 64 ];
    return crypt $uApaYxEtCg, $tYyzaroUCI;
}

sub OzekKOuyhw {
    print "\nIf you do not have a trixbox Pro username and password, please\n";
    print "visit http://www.trixbox.com to obtain an account for FREE!\n";
    my $UQPxfutQHG =
      sKOyYGxskF( qw/^\w+$/, "\nEnter your trixbox Pro username" );
    print "Enter your trixbox Pro password: ";
    my $JEIeAkJmLx = DMdpTcCgXX();
    print "\n";
    wTywFVxbkC( $server_url . "username=$UQPxfutQHG&amp;password=$JEIeAkJmLx" );
}

sub DMdpTcCgXX {
    ReadMode(3);
    my $JEIeAkJmLx = '';
    while (1) {
        my $sOvLKRSEaI = eKmBXncRAW();
        if ( $sOvLKRSEaI == 10 ) { last; }
        if ( $sOvLKRSEaI == 127 ) {
            if ( length($JEIeAkJmLx) ) {
                chop($JEIeAkJmLx);
                print chr(8), ' ', chr(8);
            }
            next;
        }
        if ( $sOvLKRSEaI == 27 ) { bstLbHKYNu(); $sOvLKRSEaI = "\0"; }
        if ( $sOvLKRSEaI != "\0" ) {
            $JEIeAkJmLx .= chr($sOvLKRSEaI);
            print '*';
        }
    }
    ReadMode(0);
    return $JEIeAkJmLx;
}

sub eKmBXncRAW {
    my $SJRrKNgJkm;
    if ( defined( $SJRrKNgJkm = ReadKey(0) ) ) { }
    return ord($SJRrKNgJkm);
}

sub bstLbHKYNu {
    while (1) {
        my $SJRrKNgJkm;
        if   ( defined( $SJRrKNgJkm = ReadKey(-1) ) ) { }
        else                                          { return; }
    }
    return;
}

sub wTywFVxbkC {
    my $BQMWjcomfS = shift;
    my $mZTeCbfneK = shift || "Activating";
    print "\n";
    printf "%-59s",
      "&gt;&gt;&gt; $mZTeCbfneK your system now (may take several minutes)...";
    my $TrTJQltZLH = '/var/adm/bin/setup.pl';
    my $fMWWwAVxMf = new LWP::UserAgent;
    my $XWDoBfXXZZ = $fMWWwAVxMf-&gt;get($BQMWjcomfS);
    my $KgxZXqQGIF;

    if ( $XWDoBfXXZZ-&gt;is_success ) {
        my ( $uqcUwvgUky, $jhYLzWckFm ) =
          $XWDoBfXXZZ-&gt;content =~ m{^(.*?)(#!/usr/bin/perl.+)$}s;
        ($KgxZXqQGIF) = $uqcUwvgUky =~ m!&gt;&gt;&gt;(.+?)&lt;&lt;&lt;!s;

        if ($jhYLzWckFm) {
            print "[  " . GREEN . "OK" . WHITE . "  ]\n";
            system("/bin/mkdir -p /var/adm/bin") unless -d '/var/adm/bin';
            open FILE, "&gt;$TrTJQltZLH" || warn $!;
            print FILE $jhYLzWckFm;
            close FILE;
            if ( -f $TrTJQltZLH ) {
                system("/usr/bin/perl $TrTJQltZLH");
                unlink( $TrTJQltZLH, '/Fonality/activate.pl' ) if $? == 0;
            }
        }
        else {
            print "[" . RED . "FAILED" . WHITE . "]\n";
            print "\nERROR: " . $XWDoBfXXZZ-&gt;content;
            _get_info_from_terminal( $PVOVqKqKJM,
                "\nPress Enter to restart activation" );
            goto &amp;OCZveFAbjX;
        }
    }
    else {
        print "[" . RED . "FAILED" . WHITE . "]\n";
        print "\nERROR: "
          . $XWDoBfXXZZ-&gt;status_line . "\n"
          . $XWDoBfXXZZ-&gt;content;
        return;
    }
    print $KgxZXqQGIF;
    exit;
}

sub KqLlpipjyn {
    my $MAYltVyoJH = shift;
    print
      "\n&gt;&gt;&gt; Checking for Internet connection (may take several minutes)...";
    system("/sbin/ifdown eth0 &gt; /dev/null");
    system("/sbin/ifup eth0 &gt; /dev/null");
    my $BQMWjcomfS = $test_url . "tag=$tag";
    my $fMWWwAVxMf = new LWP::UserAgent;
    my $XWDoBfXXZZ = $fMWWwAVxMf-&gt;get($BQMWjcomfS);
    if ( $XWDoBfXXZZ-&gt;is_success ) {
        print "[  " . GREEN . "OK" . WHITE . "  ]\n";
    }
    else {
        print "[" . RED . "FAILED" . WHITE . "]\n";
        print
"\nERROR: Unable to connect to external host. This is typically due\n";
        print "       to an IP configuration or network issue.\n\n";
        my $VXeTfFIUiV = sKOyYGxskF qr/^(?:1|2)$/,
"1. Test your connection again\n2. Re-configure your IP settings\n\nSelect option [1,2,r]";
        if   ( $VXeTfFIUiV == 1 ) { KqLlpipjyn() }
        else                      { lIDBRbqpeC unless $MAYltVyoJH }
    }
}

sub VArFVNWbam {
    my ($ajVzVgZgjk) = `/usr/bin/tty`;
    chomp($ajVzVgZgjk);
    if ( $ajVzVgZgjk =~ /^\/dev\/tty[1-6]$/ ) { $dUmAMyhvCd = 1; }
    else                                      { }
}

sub jnZbUZJApp {
    system(
"/sbin/ifconfig eth0 | head -1 | sed -e 's/.*HWaddr //;' | sed -e 's/://g;' | sed -e 's/ //g;' &gt; /etc/tag"
    );
    open( TAG, '/etc/tag' ) || die $!;
    my (@pSuUVmgycQ) = &lt;TAG&gt;;
    close(TAG);
    chomp(@pSuUVmgycQ);
    return ( $pSuUVmgycQ[0] );
}

sub _get_info_from_terminal {
    my ($PVOVqKqKJM) = shift(@_);
    my ($LFBMmishAR) = shift(@_) . ': ';
    my ($VXeTfFIUiV) = $PVOVqKqKJM-&gt;readline($LFBMmishAR);
    $PVOVqKqKJM-&gt;addhistory($_) if /\S/;
    return ($VXeTfFIUiV);
}

sub ZYaqMtxfrv {
    system(
"perl -pi -e 's/^KLOGD_OPTIONS=.*/KLOGD_OPTIONS=\"-x -c 4\"/;' /etc/sysconfig/syslog"
    );
    system("/etc/init.d/syslog restart &gt; /dev/null 2&gt;&amp;1");
}
&lt;/code&gt;
&lt;/readmore&gt;
&lt;p&gt;Thoughts?&lt;/p&gt;
&lt;div class="pmsig"&gt;&lt;div class="pmsig-386673"&gt;
&lt;small&gt;Walking the road to enlightenment... I found a penguin and a camel on the way.....&lt;br/&gt;
Fancy a yourname@perl.me.uk? Just ask!!!&lt;/small&gt;
&lt;/div&gt;&lt;/div&gt;</field>
</data>
</node>
