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