Mailing List Archive

How to run Clojure program/script
How to run Clojure script? I have this code in "clojure" that compare given IP to a list of CIDR's in a file and look for a match.
I have installed "dev-lang/clojure" but don't have any experience with it.

--------code--------
(ns htaccess.core)

(defn parse-ip [s]
(let [v (clojure.string/split s #"/")]
(flatten
(if (< (count v) 2)
[(clojure.string/split (get v 0) #"\.") "32"]
[(clojure.string/split (get v 0) #"\.") (get v 1)]))))

(defn convert-str-to-binary-str [s]
(clojure.string/replace (format "%0$8s" (java.lang.Integer/toBinaryString (java.lang.Integer/parseUnsignedInt (clojure.string/trim s)))) " " "0"))

(defn convert-mask-to-binary-str [s]
(let [.m (java.lang.Integer/parseUnsignedInt (clojure.string/trim s))
m (if (< 32 m) 32 m)
l0 (repeatedly m (fn [] 1))
l1 (repeatedly (- 32 m) (fn [] 0))
v (apply str (flatten [l0 l1]))]
v))

(defn binary-string-to-int [s] (java.lang.Integer/parseUnsignedInt (clojure.string/trim s) 2))

(defn masked? [p m]
(let [.s0 p
s1 m
p0 (parse-ip s0)
p1 (parse-ip s1)
v0 (apply str (map convert-str-to-binary-str (take 4 p0)))
v1 (apply str (map convert-str-to-binary-str (take 4 p1)))
m (convert-mask-to-binary-str (last p1))
im (binary-string-to-int m)
iv0 (binary-string-to-int v0)
iv1 (binary-string-to-int v1)]
(= (bit-and im iv0) (bit-and im iv1))))

(defn get-mask-data [s]
(map (fn [s] (clojure.string/replace s "Require not ip " ""))
(filter (fn [s] (clojure.string/includes? s "Require not ip "))
(with-open [rdr (clojure.java.io/reader s)]
(doall (line-seq rdr))))))

(defn return-matching-blocks [p f] (filter (fn [a] (masked? p a)) (get-mask-data f)))
---- end code ----------------