module WEBrick::Utils
Constants
- RAND_CHARS
-
Characters used to generate random strings
Public Class Methods
# File vendor/bundle/ruby/4.0.0/gems/webrick-1.9.2/lib/webrick/utils.rb, line 56 def create_listeners(address, port) unless port raise ArgumentError, "must specify port" end sockets = Socket.tcp_server_sockets(address, port) sockets = sockets.map {|s| s.autoclose = false ts = TCPServer.for_fd(s.fileno) s.close ts } return sockets end
Creates TCP server sockets bound to address:port and returns them.
It will create IPV4 and IPV6 sockets on all interfaces.
Creates TCP server sockets bound to +address+:+port+ and returns them.
It will create IPV4 and IPV6 sockets on all interfaces.
(untyped bits, untyped cn, untyped comment) → ::Array[untyped]
Source
# File vendor/bundle/ruby/4.0.0/gems/webrick-1.9.2/lib/webrick/ssl.rb, line 97 def create_self_signed_cert(bits, cn, comment) rsa = if $VERBOSE OpenSSL::PKey::RSA.new(bits){|p, n| case p when 0; $stderr.putc "." # BN_generate_prime when 1; $stderr.putc "+" # BN_generate_prime when 2; $stderr.putc "*" # searching good prime, # n = #of try, # but also data from BN_generate_prime when 3; $stderr.putc "\n" # found good prime, n==0 - p, n==1 - q, # but also data from BN_generate_prime else; $stderr.putc "*" # BN_generate_prime end } else OpenSSL::PKey::RSA.new(bits) end cert = OpenSSL::X509::Certificate.new cert.version = 2 cert.serial = 1 name = (cn.kind_of? String) ? OpenSSL::X509::Name.parse(cn) : OpenSSL::X509::Name.new(cn) cert.subject = name cert.issuer = name cert.not_before = Time.now cert.not_after = Time.now + (365*24*60*60) cert.public_key = rsa.public_key ef = OpenSSL::X509::ExtensionFactory.new(nil,cert) ef.issuer_certificate = cert cert.extensions = [ ef.create_extension("basicConstraints","CA:FALSE"), ef.create_extension("keyUsage", "keyEncipherment, digitalSignature, keyAgreement, dataEncipherment"), ef.create_extension("subjectKeyIdentifier", "hash"), ef.create_extension("extendedKeyUsage", "serverAuth"), ef.create_extension("nsComment", comment), ] aki = ef.create_extension("authorityKeyIdentifier", "keyid:always,issuer:always") cert.add_extension(aki) cert.sign(rsa, "SHA256") return [ cert, rsa ] end
Creates a self-signed certificate with the given number of bits, the issuer cn and a comment to be stored in the certificate.
() → String
Source
# File vendor/bundle/ruby/4.0.0/gems/webrick-1.9.2/lib/webrick/utils.rb, line 47 def getservername Socket::gethostname end
The server hostname
The server hostname
# File vendor/bundle/ruby/4.0.0/gems/webrick-1.9.2/lib/webrick/utils.rb, line 79 def random_string(len) rand_max = RAND_CHARS.bytesize ret = +"" len.times{ ret << RAND_CHARS[rand(rand_max)] } ret end
Generates a random string of length len
Generates a random string of length +len+
(IO io) → void
Source
# File vendor/bundle/ruby/4.0.0/gems/webrick-1.9.2/lib/webrick/utils.rb, line 27 def set_close_on_exec(io) io.close_on_exec = true if io.respond_to?(:close_on_exec=) end
Sets the close on exec flag for io
Sets the close on exec flag for +io+
(IO io) → void
Source
# File vendor/bundle/ruby/4.0.0/gems/webrick-1.9.2/lib/webrick/utils.rb, line 20 def set_non_blocking(io) io.nonblock = true if io.respond_to?(:nonblock=) end
# File vendor/bundle/ruby/4.0.0/gems/webrick-1.9.2/lib/webrick/utils.rb, line 34 def su(user) if pw = Etc.getpwnam(user) Process::initgroups(user, pw.gid) Process::Sys::setgid(pw.gid) Process::Sys::setuid(pw.uid) else warn("WEBrick::Utils::su doesn't work on this platform", uplevel: 1) end end
Changes the process’s uid and gid to the ones of user
Changes the process’s uid and gid to the ones of +user+
# File vendor/bundle/ruby/4.0.0/gems/webrick-1.9.2/lib/webrick/utils.rb, line 253 def timeout(seconds, exception=Timeout::Error) return yield if seconds.nil? or seconds.zero? # raise ThreadError, "timeout within critical session" if Thread.critical id = TimeoutHandler.register(seconds, exception) begin yield(seconds) ensure TimeoutHandler.cancel(id) end end
Executes the passed block and raises exception if execution takes more than seconds.
If seconds is zero or nil, simply executes the block
Executes the passed block and raises +exception+ if execution takes more than +seconds+.
If +seconds+ is zero or nil, simply executes the block