diff --git a/bin/malpd b/bin/malpd new file mode 100755 index 0000000..4476079 --- /dev/null +++ b/bin/malpd @@ -0,0 +1,43 @@ +#!/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