--XOIedfhf+7KOe/yw
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

I'm having the following problems with Net::HTTP on ruby 1.6.4 (and 1.6.5) on
FreeBSD 4.4-RC.. I suspect it to be a bug specific ruby on the platform actually
since it works on my OS X box fine.

Basically, I get this output when running a monitor script I wrote (code will
follow)

bluenugget% ruby aribasitemon.rb                                           ~)
Retrieving login page to obtain data to post . . .
Data retrieved, getting username value for posting . . .
Getting password value for posting . . .
Getting the new session ID for posting . . .
Posting data to the web server . . .
Received 302 redirect from server . . .
Searching for the magic string . . .
/Ariba/Buyer/aw?null=awsn&aws=mVbsIrCW2kZtLKee&awr=1
/usr/local/lib/ruby/1.6/net/protocol.rb:631:in `sysread': End of file reached (EOFError)
        from /usr/local/lib/ruby/1.6/net/protocol.rb:631:in `rbuf_fill'
        from /usr/local/lib/ruby/1.6/net/protocol.rb:576:in `readuntil'
        from /usr/local/lib/ruby/1.6/net/protocol.rb:587:in `readline'
        from /usr/local/lib/ruby/1.6/net/http.rb:1206:in `readnew'
        from /usr/local/lib/ruby/1.6/net/http.rb:1182:in `new_from_socket'
        from /usr/local/lib/ruby/1.6/net/http.rb:1039:in `get_response'
        from /usr/local/lib/ruby/1.6/net/http.rb:983:in `exec'
        from /usr/local/lib/ruby/1.6/net/http.rb:597:in `__send__'
         ... 8 levels...
        from /usr/local/lib/ruby/1.6/net/http.rb:584:in `post2'
        from aribasitemon.rb:58
        from aribasitemon.rb:56:in `timeout'
        from aribasitemon.rb:56


code is at the bottom of this message.  Is there a reason why this would work
on one platform and not another?  One thing to note is that I did install ruby
from the ports collection on the BSD box.  If there is a workaround I can do in
the mean time, let me know :-)

Thanks in advance,
-JD-

#!/usr/local/bin/ruby
###############################################################################
#                                                                          XXXXXX Site Monitor Skript -jd                      ##############################################################################

require 'net/http'
require 'timeout'

# Create our error class
class SiteError < StandardError
end

begin

  # Set some sane defaults
  scheme, host, port, path = "http", "xxxx.xxxxxx.xxx", 8081, "/Ariba"

  # Gather args from command line if necessary
  if %r!(https?)://(.*?)(?::(\d+))?(\.*)! =~ ARGV[0]
    scheme      = $1
    host        = $2
    port        = $3 ? $3.to_i : ((scheme == http) ? 80 : 443)
    path        = $4
  end

  PostData = Struct.new( "PostData", :name, :password, :sid )
  postValues = PostData.new( nil, nil, nil )

  # Fetch the requested document
  h = Net::HTTP.new(host, port)
  h.use_ssl = true if scheme == "https" # enable SSL/TLS

  # Try and extract the INPUT names
  timeout(15) do
    puts "Retrieving login page to obtain data to post . . ."
    h.get2( path, header = nil ) do |recv|
      inputLines = recv.body.to_s
      result = inputLines.scan(/.*grpFV">/)
      puts "Data retrieved, getting username value for posting . . ."
      postValues.name = result[0].scan("([0123456789]+)")[0]
      puts "Getting password value for posting . . ."
      postValues.password = result[1].scan("([0123456789]+)")[0]

      # Get the session ID
      puts "Getting the new session ID for posting . . ."
      result = inputLines.scan(/"aws".*/)[0]
      result = result.scan(/value="(.*)"/)[0]
      postValues.sid = result.to_s.gsub(/\".*/, "")
    end
  end

  # Try and post login data

  timeout(15) do
    puts "Posting data to the web server . . ."
    h.post2( '/Ariba/Buyer/aw', "#{postValues.name}=jdoe&#{postValues.passwor
d}=feh&timezone=420&timezoneFeb=480&timezoneAug=420&900=awsnf&awfid=true&aws=#
{postValues.sid}&awr=1&awscratch=&awcharset=8859_1&90131100.x=0&90131100.y=0" )
do |recv|

      # We have the new location, now go fetch the correct page
      raise SiteError, "Did not receive 302 from the application" if recv.header
['Location'] == nil
      puts "Received 302 redirect from server . . ."
      puts "Searching for the magic string . . ."
      path = recv.header['Location']
      puts path
      h.get2( path, header = nil ) do |page|
        if( page.body !~ /Welcome John Doe/ )
          raise SiteError, "Page returned was invalid"
        else
          puts "Found the magic string . . ."
        end # if ( page.body ... )
      end # h.get2( ... )
    end # h.post2( ... )
  end # timeout( ... )

puts "Site verified OK"

rescue TimeoutError
  $stderr.puts "xxxx.xxxxx.xxx not responding"
  exit 1
rescue SiteError
  $stderr.puts "Exception caught: SiteError: #{$!}"
  exit 1
end

-- 
Jason DiCioccio - geniusj / bsd.st - PGP Key @ http://bsd.st/~geniusj/pgpkey.asc
PGP Key Fingerprint C442 04E2 26B0 3809 8357  96AB D350 9596 0436 7C08

--XOIedfhf+7KOe/yw
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: PGP 6.5.8

iQA/AwUBO7D5L9NQlZYENnwIEQJiawCgvlYd+f9Eks1zLCVbLB6Wa6oBr7sAnRI/
CqoacUxWO75GryK7x3YF3xU1
Ch
-----END PGP SIGNATURE-----

--XOIedfhf+7KOe/yw--