malp/bin/malpd

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