44 lines
797 B
Ruby
Executable File
44 lines
797 B
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
require "socket"
|
|
require "fileutils"
|
|
|
|
SOCKET_PATH = "/run/malpd/malpd.sock"
|
|
|
|
if Process.uid != 0
|
|
$stderr.puts "malpd must be run as root"
|
|
exit(1)
|
|
end
|
|
|
|
FileUtils.mkdir_p(File.dirname(SOCKET_PATH))
|
|
FileUtils.rm_f(SOCKET_PATH)
|
|
|
|
server = UNIXServer.new(SOCKET_PATH)
|
|
File.chmod(0660, SOCKET_PATH)
|
|
FileUtils.chown(nil, "apache", SOCKET_PATH)
|
|
|
|
Signal.trap("TERM") { server.close }
|
|
Signal.trap("INT") { server.close }
|
|
|
|
$stdout.puts "malpd listening on #{SOCKET_PATH}"
|
|
|
|
loop do
|
|
conn = server.accept
|
|
request = conn.gets&.chomp
|
|
|
|
begin
|
|
case request
|
|
when nil
|
|
# empty request
|
|
else
|
|
conn.puts "unknown request: #{request}"
|
|
end
|
|
rescue => e
|
|
$stderr.puts "error handling request: #{e.message}"
|
|
ensure
|
|
conn.close
|
|
end
|
|
rescue IOError
|
|
break
|
|
end
|