Jump to content

Recommended Posts

Posted

I am attempting to create a CGI scriptusing autoit. What I want ultimately want to have is a CGI script that will compile an autoit script based on the QUERY_STRING passed by the web server and then sending that compiled script back to the user.

http://whatever.org/compileit.exe?name=jamesband

I am having trouble with sending the file back as a response. Anyone here have any ideas? I know that "Content: application/octet-stream" can be sent back via the consolewrite(), but how do I attach the file to it?

Posted

I have found some perl code that gives some hints, but it has been a long time since I've done any perl programming and when I did, it wasn't very good. Any perl gurus out there?

# send the file to the client's browser
select STDOUT;
$| = 1;
print "Content-Type: application\/force-download\nContent-Disposition: attachment\; filename=$dlfile\nContent-Length: $size\nContent-Description: Larry\'s File Downloader 0.2\n\n";
open(FILEIN, $dlfile) or $err = $!;
if ($err) {
  &js_alert($alert_msg,1,"exit");  # abort if can't open download file
  die;
}
binmode FILEIN if (-B $dlfile);  # binary mode if binary file
my $blksize = (stat FILEIN)[11];  # get file system block size
if (!$blksize) {
  $blksize = 16384;
}
my($read,$buf,$log_entry);
while ($read = sysread FILEIN, $buf, $blksize) {
  if (!defined $read) {
       next if $! =~ /^Interrupted/;
       if ($logfile) {
      open LOG, "+>>$logfile" or $err = $!; 
      if (!$err) {
        $log_entry = "$date - System Read Error - $!\n\n";
        print LOG $log_entry;
        close LOG;
        $logfile = 0;
      }
    }
    &js_alert($alert_msg,1,"exit");  # abort - file read error
       die;
  }
  my $written = 0;
  my $offset = 0;
  while ($read) {
       $written = syswrite STDOUT, $buf, $read, $offset;
    if (!defined($written)) {
         if ($logfile) {
        open LOG, "+>>$logfile" or $err = $!; 
        if (!$err) {
          $log_entry = "$date - System Write Error - $!\n\n";
          print LOG $log_entry;
          close LOG;
          $logfile = 0;
        }
      }
      &js_alert($alert_msg,1,"exit");  # abort - file write error
      die;
    }
    $read -= $written;
    $offset += $written;
  }
}
# finished sending the file
Posted

I am using Larry's binary code and this is what I have so far... on a 120K test exe i am only getting 115K! I am missing something.

Also, I have the compiled script in a cgi-bin folder and am calling it through a webbrowser to test.

dim $file, $line, $iline, $path, $size, $x, $y

$path = envget('PATH_TRANSLATED')&'\cgi-bin\'

consolewrite('Content-Type: Application'&@lf&'Content-Disposition: name="test.exe"'&@lf&'Content-Transfer-Encoding: binary'&@lf&@lf)

TrayTip("cgi:", "openning file...", 3)
$size = filegetsize($path&"test.exe")
$file = _apifileopen($path&"test.exe")

if ($file = -1) then
    TrayTip("cgi:", "could not open '"&$path&"test.exe'", 10)
    sleep(10000)
    exit    
else
    TrayTip("cgi:", "transmitting file...", 3)
    for $x = 1 to $size step 1024
        TrayTip("cgi:", $x, 1)
        _APIFileSetPos($file,$x)

        $iline = stringsplit(_apifileread($file,1024,1), ",")
        for $y = 1 to $iline[0]
            consolewrite(Chr(Dec($iline[$y])))
        next

    next
    
    TrayTip("cgi:", "closing file...", 3)
    _apifileclose($file)
endif
Posted

Well, so long as I am typing to myself. I might as well point out to myself that the problem is on of two:

1. consolewrite will not send a chr(00) (null)

2. autoit treats chr(00) (null) as "" (which it is mo certainly not!)

So, does anyone have any ideas on how to handle this?

Posted

Well, so long as I am typing to myself.  I might as well point out to myself that the problem is on of two:

1.  consolewrite will not send a chr(00) (null)

2.  autoit treats chr(00) (null) as ""  (which it is mo certainly not!)

So, does anyone have any ideas on how to handle this?

<{POST_SNAPBACK}>

it is #2... :) hehehe the following code produces 'len=1', in a msgbox.

aaaaaaaaaaaaaaaaaah! executables have null characters in them, and I need to transmit them from a cgi! I am sooooooooooooooo close! Heeeeeeeeeeeeelp!

dim $s
$s = "1"
for $x = 1 to 10
    $s = $s & chr(0)
next

msgbox(0, "", "len="&stringlen($s))

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...