Gentoo Archives: gentoo-user

From: thelma@×××××××××××.com
To: Gentoo mailing list <gentoo-user@l.g.o>
Subject: [gentoo-user] How to run Clojure program/script
Date: Thu, 11 Feb 2021 18:23:56
Message-Id: 7d4b3001-2f3d-9bef-3a75-b1175a867583@sys-concept.com
1 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.
2 I have installed "dev-lang/clojure" but don't have any experience with it.
3
4 --------code--------
5 (ns htaccess.core)
6
7 (defn parse-ip [s]
8 (let [v (clojure.string/split s #"/")]
9 (flatten
10 (if (< (count v) 2)
11 [(clojure.string/split (get v 0) #"\.") "32"]
12 [(clojure.string/split (get v 0) #"\.") (get v 1)]))))
13
14 (defn convert-str-to-binary-str [s]
15 (clojure.string/replace (format "%0$8s" (java.lang.Integer/toBinaryString (java.lang.Integer/parseUnsignedInt (clojure.string/trim s)))) " " "0"))
16
17 (defn convert-mask-to-binary-str [s]
18 (let [m (java.lang.Integer/parseUnsignedInt (clojure.string/trim s))
19 m (if (< 32 m) 32 m)
20 l0 (repeatedly m (fn [] 1))
21 l1 (repeatedly (- 32 m) (fn [] 0))
22 v (apply str (flatten [l0 l1]))]
23 v))
24
25 (defn binary-string-to-int [s] (java.lang.Integer/parseUnsignedInt (clojure.string/trim s) 2))
26
27 (defn masked? [p m]
28 (let [s0 p
29 s1 m
30 p0 (parse-ip s0)
31 p1 (parse-ip s1)
32 v0 (apply str (map convert-str-to-binary-str (take 4 p0)))
33 v1 (apply str (map convert-str-to-binary-str (take 4 p1)))
34 m (convert-mask-to-binary-str (last p1))
35 im (binary-string-to-int m)
36 iv0 (binary-string-to-int v0)
37 iv1 (binary-string-to-int v1)]
38 (= (bit-and im iv0) (bit-and im iv1))))
39
40 (defn get-mask-data [s]
41 (map (fn [s] (clojure.string/replace s "Require not ip " ""))
42 (filter (fn [s] (clojure.string/includes? s "Require not ip "))
43 (with-open [rdr (clojure.java.io/reader s)]
44 (doall (line-seq rdr))))))
45
46 (defn return-matching-blocks [p f] (filter (fn [a] (masked? p a)) (get-mask-data f)))
47 ---- end code ----------------