From 5d96f6dfdd55250f1705430fc16bca61ff94b741 Mon Sep 17 00:00:00 2001 From: plugd Date: Thu, 10 Feb 2022 11:23:54 +0100 Subject: [PATCH] Added blacklist support. --- rags.scm | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/rags.scm b/rags.scm index 6eacfc4..f5da596 100644 --- a/rags.scm +++ b/rags.scm @@ -17,11 +17,12 @@ (chicken process) (chicken process-context) (chicken process-context posix) + (chicken gc) matchable srfi-13 srfi-1 uri-common tcp6 openssl) (define-record config - root-dir host port certfile keyfile uid gid) + root-dir host port certfile keyfile uid gid blacklist blacklist-resp) (define file-types '(("gmi" "text/gemini" "charset=utf-8") @@ -230,15 +231,30 @@ (define (server-loop listener config) (let-values (((in-port out-port) (ssl-accept listener))) (let-values (((local-ip remote-ip) (tcp-addresses (ssl-port->tcp-port in-port)))) + (print (conc "Memory statistics: " (memory-statistics))) (print "Accepted connection from " remote-ip " on " (seconds->string)) (condition-case - (let ((request-line (read-line in-port))) - (print* "Serving request '" request-line "' ... ") - (with-output-to-port out-port - (lambda () - (process-request config request-line))) - (print "done.")) + (if (or (config-blacklist config) + (not (member remote-ip + (with-input-from-file + (config-blacklist config))))) + (let ((request-line (read-line in-port))) + (print* "Serving request '" request-line "' ... ") + (with-output-to-port out-port + (lambda () + (process-request config request-line))) + (print "done.")) + (begin + (print "Connection from blacklisted IP. Closing.") + (with-output-to-port out-port + (lambda () + (print* "Refusing to serve to IP " remote-ip ".\n") + (when (config-blacklist-resp config) + (for-each print + (with-input-from-file + (config-blacklist-resp config) + read-lines))))))) (o (exn) (print-error-message o)))) (close-input-port in-port) @@ -255,7 +271,7 @@ (define (main) (let* ((progname (pathname-file (car (argv)))) - (config (make-config #f #f 1965 #f #f #f #f))) + (config (make-config #f #f 1965 #f #f #f #f #f #f))) (if (null? (command-line-arguments)) (print-usage progname) (let loop ((args (command-line-arguments))) @@ -278,6 +294,14 @@ (equal? this-arg "--group")) (config-gid-set! config (string->number (car rest-args))) (loop (cdr rest-args))) + ((or (equal? this-arg "-b") + (equal? this-arg "--blacklist")) + (config-blacklist-set! config (car rest-args)) + (loop (cdr rest-args))) + ((or (equal? this-arg "-r") + (equal? this-arg "--blacklist-resp")) + (config-blacklist-resp-set! config (car rest-args)) + (loop (cdr rest-args))) (else (print-usage progname))) (match args -- 2.20.1