| Module | WEBrick::Utils |
| In: |
lib/webrick/utils.rb
lib/webrick/ssl.rb |
| RAND_CHARS | = | "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789" + "abcdefghijklmnopqrstuvwxyz" |
# File lib/webrick/utils.rb, line 59
59: def create_listeners(address, port, logger=nil)
60: unless port
61: raise ArgumentError, "must specify port"
62: end
63: res = Socket::getaddrinfo(address, port,
64: Socket::AF_UNSPEC, # address family
65: Socket::SOCK_STREAM, # socket type
66: 0, # protocol
67: Socket::AI_PASSIVE) # flag
68: last_error = nil
69: sockets = []
70: res.each{|ai|
71: begin
72: logger.debug("TCPServer.new(#{ai[3]}, #{port})") if logger
73: sock = TCPServer.new(ai[3], port)
74: port = sock.addr[1] if port == 0
75: Utils::set_close_on_exec(sock)
76: sockets << sock
77: rescue => ex
78: logger.warn("TCPServer Error: #{ex}") if logger
79: last_error = ex
80: end
81: }
82: raise last_error if sockets.empty?
83: return sockets
84: end
# File lib/webrick/ssl.rb, line 39
39: def create_self_signed_cert(bits, cn, comment)
40: rsa = OpenSSL::PKey::RSA.new(bits){|p, n|
41: case p
42: when 0; $stderr.putc "." # BN_generate_prime
43: when 1; $stderr.putc "+" # BN_generate_prime
44: when 2; $stderr.putc "*" # searching good prime,
45: # n = #of try,
46: # but also data from BN_generate_prime
47: when 3; $stderr.putc "\n" # found good prime, n==0 - p, n==1 - q,
48: # but also data from BN_generate_prime
49: else; $stderr.putc "*" # BN_generate_prime
50: end
51: }
52: cert = OpenSSL::X509::Certificate.new
53: cert.version = 3
54: cert.serial = 0
55: name = OpenSSL::X509::Name.new(cn)
56: cert.subject = name
57: cert.issuer = name
58: cert.not_before = Time.now
59: cert.not_after = Time.now + (365*24*60*60)
60: cert.public_key = rsa.public_key
61:
62: ef = OpenSSL::X509::ExtensionFactory.new(nil,cert)
63: ef.issuer_certificate = cert
64: cert.extensions = [
65: ef.create_extension("basicConstraints","CA:FALSE"),
66: ef.create_extension("keyUsage", "keyEncipherment"),
67: ef.create_extension("subjectKeyIdentifier", "hash"),
68: ef.create_extension("extendedKeyUsage", "serverAuth"),
69: ef.create_extension("nsComment", comment),
70: ]
71: aki = ef.create_extension("authorityKeyIdentifier",
72: "keyid:always,issuer:always")
73: cert.add_extension(aki)
74: cert.sign(rsa, OpenSSL::Digest::SHA1.new)
75:
76: return [ cert, rsa ]
77: end
# File lib/webrick/utils.rb, line 49
49: def getservername
50: host = Socket::gethostname
51: begin
52: Socket::gethostbyname(host)[0]
53: rescue
54: host
55: end
56: end
# File lib/webrick/utils.rb, line 91
91: def random_string(len)
92: rand_max = RAND_CHARS.size
93: ret = ""
94: len.times{ ret << RAND_CHARS[rand(rand_max)] }
95: ret
96: end
# File lib/webrick/utils.rb, line 30
30: def set_close_on_exec(io)
31: if defined?(Fcntl::FD_CLOEXEC)
32: io.fcntl(Fcntl::FD_CLOEXEC, 1)
33: end
34: end
# File lib/webrick/utils.rb, line 21
21: def set_non_blocking(io)
22: flag = File::NONBLOCK
23: if defined?(Fcntl::F_GETFL)
24: flag |= io.fcntl(Fcntl::F_GETFL)
25: end
26: io.fcntl(Fcntl::F_SETFL, flag)
27: end