From 2c6f18c9d837c837ef239e817a92490461335c6c Mon Sep 17 00:00:00 2001
From: "Hahn Axel (hahn)" <axel.hahn@iml.unibe.ch>
Date: Tue, 13 Sep 2022 16:51:32 +0200
Subject: [PATCH] add search for ip address; fix cname as 1st param

---
 README.md     | 11 ++++++-----
 dns-search.sh | 27 +++++++++++++++++++--------
 2 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/README.md b/README.md
index 2146342..fe555ff 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@ Search for aliases and hosts.
 Search for hostnames or aliases in Infoblox API
 It uses dns-api.sh and adds the return field for aliases.
 
-SYNTAX: dns-search.sh [name|alias|cname] REGEX
+SYNTAX: dns-search.sh [name|alias|cname|ipv4addr] REGEX
 
 EXAMPLES:
 
@@ -50,13 +50,14 @@ The search supports regex:
     dns-search.sh name "^(connector|examinator).*measured.stage"
 
 (4)
-Lazy mode: do not add name or alias or cname to start 3 requests to search 
+search for an IP - use "ipv4addr" as 1st parameter
+    dns-search.sh ipv4addr .79.30
+
+(5)
+Lazy mode: do not add name or alias or cname to start 4 requests to search 
 in all object types
     dns-search.sh ufive
 
-Search for hostnames or aliases in Infoblox API
-It uses dns-api.sh and adds the return field for aliases.
-
 ```
 
 ### dns-api.sh
diff --git a/dns-search.sh b/dns-search.sh
index cf445d9..932c51e 100755
--- a/dns-search.sh
+++ b/dns-search.sh
@@ -9,8 +9,10 @@
 # 2022-03-01  v1.1  <axel.hahn@iml.unibe.ch>  fix usage with 1st param "name"
 # 2022-03-03  v1.2  <axel.hahn@iml.unibe.ch>  no param: 2 searches in name and alias
 # 2022-06-14  v1.3  <axel.hahn@iml.unibe.ch>  added search for cname objects; debug comments are written to stderr 
+# 2022-09-13  v1.4  <axel.hahn@iml.unibe.ch>  add search for ip address; fix cname as 1st param
 # ======================================================================
 
+returnFields='&_return_fields%2B=aliases,ttl'
 
 # ----------------------------------------------------------------------
 # HELP
@@ -21,7 +23,7 @@ cat <<EOH
 Search for hostnames or aliases in Infoblox API
 It uses dns-api.sh and adds the return field for aliases.
 
-SYNTAX: dns-search.sh [name|alias|cname] REGEX
+SYNTAX: dns-search.sh [name|alias|cname|ipv4addr] REGEX
 
 EXAMPLES:
 
@@ -39,7 +41,11 @@ The search supports regex:
     dns-search.sh name "^(connector|examinator).*measured.stage"
 
 (4)
-Lazy mode: do not add name or alias or cname to start 3 requests to search 
+search for an IP - use "ipv4addr" as 1st parameter
+    dns-search.sh ipv4addr .79.30
+
+(5)
+Lazy mode: do not add name or alias or cname to start 4 requests to search 
 in all object types
     dns-search.sh ufive
 
@@ -51,7 +57,7 @@ fi
 # MAIN
 # ----------------------------------------------------------------------
 mytype=
-if echo "$1" | grep -E '^(name|alias|cname)$' >/dev/null
+if echo "$1" | grep -E '^(name|alias|cname|ipv4addr)$' >/dev/null
 then
     mytype=$1
     shift 1
@@ -62,16 +68,21 @@ mysearch=$1
 
 # ----------------------------------------------------------------------
 
->&2 echo "; === DNS SEARCH"
+>&2 echo ";"
+>&2 echo "; === INFOBLOX DNS SEARCH"
+>&2 echo ";"
 >&2 echo "; search for type : $mytype"
 >&2 echo "; search regex    : $mysearch"
 >&2 echo ";"
 if [ -n "$mytype" ]; then
-    "$( dirname $0 )"/dns-api.sh GET "/record:host?${mytype}~=${mysearch}&_return_fields%2B=aliases"
+    test "$mytype" = "cname" || "$( dirname $0 )"/dns-api.sh GET "/record:host?${mytype}~=${mysearch}${returnFields}"
+    test "$mytype" = "cname" && "$( dirname $0 )"/dns-api.sh GET "/record:cname?name~=${mysearch}&_return_fields%2B=ttl"
 else
-    "$( dirname $0 )"/dns-api.sh GET "/record:host?name~=${mysearch}&_return_fields%2B=aliases"
-    "$( dirname $0 )"/dns-api.sh GET "/record:host?alias~=${mysearch}&_return_fields%2B=aliases"
-    "$( dirname $0 )"/dns-api.sh GET "/record:cname?name~=${mysearch}"
+    for mytype in name alias ipv4addr
+    do
+        "$( dirname $0 )"/dns-api.sh GET "/record:host?${mytype}~=${mysearch}${returnFields}"
+    done
+    "$( dirname $0 )"/dns-api.sh GET "/record:cname?name~=${mysearch}&_return_fields%2B=ttl"
 fi
 
 # ----------------------------------------------------------------------
\ No newline at end of file
-- 
GitLab