]> git.treefish.org Git - fex.git/blobdiff - bin/fexget
Original release 20150826
[fex.git] / bin / fexget
index 034ced112fa3d6e581ea7a092c602f9c6e2ff436..8e001196d8cc13b1f0d4fc24c16b0f1c01268625 100755 (executable)
@@ -30,7 +30,7 @@ our $SH;
 our ($fexhome,$idf,$tmpdir,$windoof,$useragent);
 our ($xv,%autoview);
 our $bs = 2**16; # blocksize for tcp-reading and writing file
-our $version = 20150120;
+our $version = 20150826;
 our $CTYPE = 'ISO-8859-1';
 our $fexsend = $ENV{FEXSEND} || 'fexsend';
 
@@ -115,7 +115,7 @@ SSLCIPHERLIST=HIGH:!3DES    # see http://www.openssl.org/docs/apps/ciphers.html
 
 You can set these environment variables also in $HOME/.fex/config.pl, as well as
 the $opt_* variables, e.g.:
-  
+
 $ENV{SSLVERSION} = 'TLSv1';
 ${'opt_+'} = 1;
 $opt_m = 200;
@@ -157,59 +157,18 @@ if ($opt_H) {
   exit;
 }
 
-# set SSL/TLS options
-$SSL{SSL_verify_mode} = $ENV{SSLVERIFY} if defined($ENV{SSLVERIFY});
-foreach my $opt (qw(
-  SSL_version
-  SSL_cipher_list 
-  SSL_verify_mode 
-  SSL_ca_path 
-  SSL_ca_file)
-) {
-  my $env = uc($opt);
-  $env =~ s/_//g;
-  $SSL{$opt} = $ENV{$env} if defined($ENV{$env});
-}
-
-if ($SSL{SSL_verify_mode}) {
-  &search_ca;
-  unless ($SSL{SSL_ca_path} or $SSL{SSL_ca_file}) {
-    die "$0: \$SSLVERIFYMODE, but not valid \$SSLCAPATH or \$SSLCAFILE\n";
-  }
-} elsif (defined($SSL{SSL_verify_mode})) {
-  # user has set SSLVERIFY=0 !
-} else {
-  &search_ca;
-  $SSL{SSL_verify_mode} = 1 if $SSL{SSL_ca_path} or $SSL{SSL_ca_file};
-}
-
-sub search_ca {
-  local $_;
-  return if $SSL{SSL_ca_file} or $SSL{SSL_ca_path};
-  foreach (qw(/etc/ssl/certs/ca-certificates.crt)) {
-    if (-f) {
-      $SSL{SSL_ca_file} = $_;
-      return;
-    }
-  }
-  foreach (qw(/etc/ssl/certs /etc/pki/tls/certs)) {
-    if (-f) {
-      $SSL{SSL_ca_path} = $_;
-      return;
-    }
-  }
-}
+&get_ssl_env;
 
 my $ffl = "$tmpdir/fexget";            # F*EX files list (cache)
 
 my @rcamel = (
 '\e[A
-(_*)  _  _     
+(_*)  _  _
    \\\\/ \\/ \\
     \  __  )=*
-    //\\\\//\\\\   
+    //\\\\//\\\\
 ',
-'\e[A     \\\\/\\\\/ 
+'\e[A     \\\\/\\\\/
 ',
 '\e[A    //\\\\//\\\\
 ');
@@ -365,7 +324,7 @@ URL: foreach my $url (@ARGV) {
   exit if $opt_s eq '-';
   unlink $download unless -s $download;
   exit 2 unless -f $download;
-  
+
   if ($windoof) {
     print "READY\n";
     exit;
@@ -387,7 +346,7 @@ URL: foreach my $url (@ARGV) {
   }
 
   unless ($opt_X) {
-    
+
     foreach my $a (keys %autoview) {
       if ($download =~ /$a$/i and $autoview{$a}) {
         printf "run \"%s %s\" [Yn] ? ",$autoview{$a},basename($download);
@@ -396,7 +355,7 @@ URL: foreach my $url (@ARGV) {
         next URL;
       }
     }
-    
+
     if ($ENV{DISPLAY} and $download =~ /\.(gif|jpg|png|tiff?)$/i) {
       # see also mimeopen and xdg-mime
       if (my $xv = $xv || pathsearch('xv') || pathsearch('xdg-open')) {
@@ -406,11 +365,11 @@ URL: foreach my $url (@ARGV) {
         next URL;
       }
     }
-  
+
     if ($download =~ /$atype/) {
       if    ($download =~ /\.(tgz|tar.gz)$/)  { extract('tar tvzf','tar xvzf') }
-      elsif ($download =~ /\.tar$/)           { extract('tar tvf','tar xvf') } 
-      elsif ($download =~ /\.zip$/i)          { extract('unzip -l','unzip') } 
+      elsif ($download =~ /\.tar$/)           { extract('tar tvf','tar xvf') }
+      elsif ($download =~ /\.zip$/i)          { extract('unzip -l','unzip') }
       elsif ($download =~ /\.7z$/i)           { extract('7z l','7z x') }
       else { die "$0: unknown archive \"$download\"\n" }
       if ($? == 0) {
@@ -431,7 +390,7 @@ sub extract {
   my $d = $download;
   my $xd = '.';
   local $_;
-  
+
   if (-t and not $windoof) {
     print "Files in archive:\n";
     system(split(' ',$l),$download);
@@ -443,7 +402,7 @@ sub extract {
       if ($xd eq '-') {
         print "keeping $download\n";
         exit;
-      }    
+      }
       if ($xd !~ s/!$//) {
         if (-d $xd) {
           print "directory $xd does already exist, add \"!\" to overwrite\n";
@@ -510,16 +469,16 @@ sub forward {
     "GET $uri?COPY HTTP/1.1",
     "User-Agent: $useragent",
   );
-  
+
   $_ = <$SH>;
   die "$0: no reply from fex server $server\n" unless $_;
   warn "<-- $_" if $opt_v;
-  
+
   unless (/^HTTP.*200/) {
     s/^HTTP.... \d+ //;
     die "$0: $_";
   }
-  
+
   while (<$SH>) {
     s/\r//;
     last if /^\n/; # ignore HTML output
@@ -542,7 +501,7 @@ sub forward {
     }
   }
   close $list;
-  
+
   if ($n) {
     $cmd = "fexsend -d $n >/dev/null 2>&1";
     print "$cmd\n" if $opt_v;
@@ -762,7 +721,7 @@ sub download {
   }
   close $SH;
   close X;
-  
+
   print $rcamel[2] if ${'opt_+'};
 
   $tt = $t2-$t0;
@@ -840,20 +799,20 @@ sub locale {
 
 sub pathsearch {
   my $prg = shift;
-  
+
   foreach my $dir (split(':',$ENV{PATH})) {
     return "$dir/$prg" if -x "$dir/$prg";
   }
 }
 
-    
+
 sub quote {
   local $_ = shift;
   s/([^\w¡-ÿ_%\/=~:.,-])/\\$1/g;
   return $_;
 }
 
-    
+
 {
   my $tty;
 
@@ -871,7 +830,7 @@ sub quote {
 
       if (defined(&TIOCSTI) and $tty and open($tty,'>',$tty)) {
         print $prompt;
-        foreach my $a (split("",$default)) { ioctl($tty,&TIOCSTI,$a) } 
+        foreach my $a (split("",$default)) { ioctl($tty,&TIOCSTI,$a) }
         chomp($_ = <STDIN>||'');
       } else {
         $prompt =~ s/([\?:=]\s*)/ [$default]$1/ or $prompt .= " [$default]";
@@ -885,8 +844,8 @@ sub quote {
     }
 
     return $_;
-  }    
-}    
+  }
+}
 
 
 ### common functions ###
@@ -910,9 +869,9 @@ sub get_ssl_env {
   $SSL{SSL_verify_mode} = $ENV{SSLVERIFY} if defined($ENV{SSLVERIFY});
   foreach my $opt (qw(
     SSL_version
-    SSL_cipher_list 
-    SSL_verify_mode 
-    SSL_ca_path 
+    SSL_cipher_list
+    SSL_verify_mode
+    SSL_ca_path
     SSL_ca_file)
   ) {
     my $env = uc($opt);
@@ -955,13 +914,13 @@ sub serverconnect {
   my ($server,$port) = @_;
   my $connect = "CONNECT $server:$port HTTP/1.1";
   local $_;
-  
+
   if ($opt_v and $port == 443 and %SSL) {
     foreach my $v (keys %SSL) {
       printf "%s => %s\n",$v,$SSL{$v};
     }
   }
-  
+
   if ($proxy) {
     tcpconnect(split(':',$proxy));
     if ($port == 443) {
@@ -989,12 +948,12 @@ sub serverconnect {
 # set up tcp/ip connection
 sub tcpconnect {
   my ($server,$port) = @_;
-  
+
   if ($SH) {
     close $SH;
     undef $SH;
   }
-  
+
   if ($port == 443) {
     # eval "use IO::Socket::SSL qw(debug3)";
     eval "use IO::Socket::SSL";
@@ -1012,13 +971,13 @@ sub tcpconnect {
       Proto    => 'tcp',
     );
   }
-  
+
   if ($SH) {
     autoflush $SH 1;
   } else {
     die "$0: cannot connect $server:$port - $@\n";
   }
-  
+
   print "TCPCONNECT to $server:$port\n" if $opt_v;
 }
 
@@ -1027,9 +986,9 @@ sub sendheader {
   my $sp = shift;
   my @head = @_;
   my $head;
-  
+
   push @head,"Host: $sp";
-  
+
   foreach $head (@head) {
     print "--> $head\n" if $opt_v;
     print {$SH} $head,"\r\n";
@@ -1041,12 +1000,12 @@ sub sendheader {
 
 sub nvtsend {
   local $SIG{PIPE} = sub { $sigpipe = "@_" };
-  
+
   $sigpipe = '';
-  
+
   die "$0: internal error: no active network handle\n" unless $SH;
   die "$0: remote host has closed the link\n" unless $SH->connected;
-  
+
   foreach my $line (@_) {
     print {$SH} $line,"\r\n";
     if ($sigpipe) {
@@ -1054,7 +1013,7 @@ sub nvtsend {
       return 0;
     }
   }
-  
+
   return 1;
 }
 
@@ -1064,7 +1023,7 @@ sub encode_b64 {
   my $res = "";
   my $eol = "\n";
   my $padding;
-  
+
   pos($_[0]) = 0;
   $res = join '',map(pack('u',$_)=~ /^.(\S*)/, ($_[0]=~/(.{1,45})/gs));
   $res =~ tr|` -_|AA-Za-z0-9+/|;