#!/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
