]> git.treefish.org Git - fex.git/blobdiff - bin/fexsrv
Original release 20160104
[fex.git] / bin / fexsrv
index 6a3e80e73641aa0c91eaf2e2d66bd127177fb6f6..e89b6f9bd578d62186219d255d076dd2c37ceb9d 100755 (executable)
@@ -91,7 +91,7 @@ foreach my $lib (
 
 # import from fex.pp
 our ($hostname,$debug,$timeout,$max_error,$max_error_handler);
-our ($spooldir,@logdir,$docdir,$xkeydir,$lockdir);
+our ($spooldir,@logdir,$docdir,$xkeydir,$akeydir,$lockdir);
 our ($force_https,$default_locale,$bs,$MB,$adlm);
 our (@locales);
 
@@ -247,15 +247,16 @@ REQUEST: while (*STDIN) {
       http_error(413);
     }
 
-    if (/^(GET \/|X-Forwarded-For|User-Agent)/i) {
+    if (/^(GET \/|\S*Forwarded|\S*Client-IP|\S*Coming-From|User-Agent)/i) {
       $hid .= $_."\n";
     }
 
     # reverse-proxy?
+    # (only IPv4 support!)
     if ($reverse_proxy_ip and $reverse_proxy_ip eq $ra and
-       /^X-Forwarded-For: ([\d.]+)/
+       /^\S*(Forwarded|Client-IP|Coming-From)\S*: ([\d.]+)/i
     ) {
-      $ENV{REMOTE_ADDR} = $ra = $1;
+      $ENV{REMOTE_ADDR} = $ra = $2;
       $ENV{REMOTE_HOST} = $rh = gethostbyaddr(inet_aton($ra),AF_INET) || '';
       $ENV{HTTP_HOST} = $hostname;
       if ($ENV{PROTO} eq 'https') { $port = 443 }
@@ -312,7 +313,7 @@ REQUEST: while (*STDIN) {
     }
   }
 
-  if ($request =~ /^OPTIONS FEX HTTP\/[\d\.]+$/i) {
+  if ($request =~ /^OPTIONS \/?FEX HTTP\/[\d\.]+$/i) {
     fexlog($connect,@log);
     nvt_print(
       "HTTP/1.1 201 OK",
@@ -499,6 +500,22 @@ REQUEST: while (*STDIN) {
     $ENV{LOCALE} = $locale = $default_locale;
   }
 
+  # for dynamic HTML documents
+  if ($ENV{HTTP_COOKIE} =~ /akey=(\w+)/) {
+    my $akey = $1;
+    my ($user,$id);
+    if ($user = readlink "$akeydir/$akey") {
+      $user =~ s:.*/::;
+      $user = untaint($user);
+      if ($id = slurp("$spooldir/$user/@")) {
+        chomp $id;
+        $ENV{AKEY} = $akey;
+        $ENV{USER} = $user;
+        $ENV{ID}   = $id;
+      }
+    }
+  }
+
   # check for name based virtual host
   $vhost = vhost($ENV{'HTTP_HOST'});