Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package doggo for openSUSE:Factory checked 
in at 2026-01-13 21:26:50
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/doggo (Old)
 and      /work/SRC/openSUSE:Factory/.doggo.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "doggo"

Tue Jan 13 21:26:50 2026 rev:7 rq:1326799 version:1.1.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/doggo/doggo.changes      2025-12-22 
22:51:53.871594675 +0100
+++ /work/SRC/openSUSE:Factory/.doggo.new.1928/doggo.changes    2026-01-13 
21:27:20.918073438 +0100
@@ -1,0 +2,11 @@
+Mon Jan 12 06:40:35 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 1.1.4:
+  * Bug fixes
+    - 8ea55b6: fix(darwin): filter out scoped, Supplemental and
+      domain-specific resolvers from scutil (@mr-karan)
+  * Others
+    - 84808d4: chore(deps): update dependencies (@mr-karan)
+    - b0c0e89: chore(web): add umami analytics script (@mr-karan)
+
+-------------------------------------------------------------------

Old:
----
  doggo-1.1.3.obscpio

New:
----
  doggo-1.1.4.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ doggo.spec ++++++
--- /var/tmp/diff_new_pack.KMVDDw/_old  2026-01-13 21:27:22.050120162 +0100
+++ /var/tmp/diff_new_pack.KMVDDw/_new  2026-01-13 21:27:22.050120162 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package doggo
 #
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           doggo
-Version:        1.1.3
+Version:        1.1.4
 Release:        0
 Summary:        CLI tool and API server DNS client implemented in Go
 License:        GPL-3.0-only

++++++ _service ++++++
--- /var/tmp/diff_new_pack.KMVDDw/_old  2026-01-13 21:27:22.090121813 +0100
+++ /var/tmp/diff_new_pack.KMVDDw/_new  2026-01-13 21:27:22.098122144 +0100
@@ -2,7 +2,7 @@
   <service name="obs_scm" mode="manual">
     <param name="scm">git</param>
     <param name="url">https://github.com/mr-karan/doggo.git</param>
-    <param name="revision">v1.1.3</param>
+    <param name="revision">v1.1.4</param>
     <param name="match-tag">*</param>
     <param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param>
     <param name="versionformat">@PARENT_TAG@</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.KMVDDw/_old  2026-01-13 21:27:22.126123299 +0100
+++ /var/tmp/diff_new_pack.KMVDDw/_new  2026-01-13 21:27:22.138123795 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/mr-karan/doggo.git</param>
-              <param 
name="changesrevision">46a1de3ae6ee61267b678e7493a52657fde1bf74</param></service></servicedata>
+              <param 
name="changesrevision">84808d48aff88dadfbb8a28c0f473d05fd8ced00</param></service></servicedata>
 (No newline at EOF)
 

++++++ doggo-1.1.3.obscpio -> doggo-1.1.4.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/doggo-1.1.3/.github/dependabot.yaml 
new/doggo-1.1.4/.github/dependabot.yaml
--- old/doggo-1.1.3/.github/dependabot.yaml     2025-12-20 15:05:13.000000000 
+0100
+++ new/doggo-1.1.4/.github/dependabot.yaml     1970-01-01 01:00:00.000000000 
+0100
@@ -1,11 +0,0 @@
-version: 2
-updates:
-  - package-ecosystem: "gomod"
-    directory: "/"
-    schedule:
-      interval: "monthly"
-    open-pull-requests-limit: 10
-  - package-ecosystem: "github-actions"
-    directory: "/"
-    schedule:
-      interval: "monthly"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/doggo-1.1.3/.github/workflows/release.yml 
new/doggo-1.1.4/.github/workflows/release.yml
--- old/doggo-1.1.3/.github/workflows/release.yml       2025-12-20 
15:05:13.000000000 +0100
+++ new/doggo-1.1.4/.github/workflows/release.yml       2026-01-04 
04:39:23.000000000 +0100
@@ -13,7 +13,7 @@
     runs-on: ubuntu-latest
     steps:
       - name: Checkout
-        uses: actions/checkout@v5
+        uses: actions/checkout@v6
         with:
           fetch-depth: 0
       - name: Set up Go
@@ -28,7 +28,7 @@
           password: ${{ secrets.GITHUB_TOKEN }}
 
       - name: Cache node modules
-        uses: actions/cache@v4
+        uses: actions/cache@v5
         with:
           path: ./docs/node_modules
           key: ${{ runner.os }}-npm-${{ hashFiles('**/docs/package-lock.json') 
}}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/doggo-1.1.3/go.mod new/doggo-1.1.4/go.mod
--- old/doggo-1.1.3/go.mod      2025-12-20 15:05:13.000000000 +0100
+++ new/doggo-1.1.4/go.mod      2026-01-04 04:39:23.000000000 +0100
@@ -15,14 +15,14 @@
        github.com/knadh/koanf/v2 v2.3.0
        github.com/miekg/dns v1.1.69
        github.com/olekukonko/tablewriter v1.1.2
-       github.com/quic-go/quic-go v0.57.1
+       github.com/quic-go/quic-go v0.58.0
        github.com/spf13/pflag v1.0.10
        golang.org/x/net v0.48.0
        golang.org/x/sys v0.39.0
 )
 
 require (
-       github.com/AdguardTeam/golibs v0.35.5 // indirect
+       github.com/AdguardTeam/golibs v0.35.7 // indirect
        github.com/andybalholm/brotli v1.2.0 // indirect
        github.com/clipperhouse/displaywidth v0.6.2 // indirect
        github.com/clipperhouse/stringish v0.1.1 // indirect
@@ -39,7 +39,6 @@
        github.com/olekukonko/errors v1.1.0 // indirect
        github.com/olekukonko/ll v0.1.3 // indirect
        github.com/pelletier/go-toml v1.9.5 // indirect
-       github.com/rivo/uniseg v0.4.7 // indirect
        go.uber.org/mock v0.6.0 // indirect
        golang.org/x/crypto v0.46.0 // indirect
        golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/doggo-1.1.3/go.sum new/doggo-1.1.4/go.sum
--- old/doggo-1.1.3/go.sum      2025-12-20 15:05:13.000000000 +0100
+++ new/doggo-1.1.4/go.sum      2026-01-04 04:39:23.000000000 +0100
@@ -1,7 +1,5 @@
-github.com/AdguardTeam/golibs v0.35.2 
h1:GVlx/CiCz5ZXQmyvFrE3JyeGsgubE8f4rJvRshYJVVs=
-github.com/AdguardTeam/golibs v0.35.2/go.mod 
h1:p/l6tG7QCv+Hi5yVpv1oZInoatRGOWoyD1m+Ume+ZNY=
-github.com/AdguardTeam/golibs v0.35.5 
h1:qbe7jkjm+qtvPJGo3UnAp0lsPVpuHULfivXUkyVujZE=
-github.com/AdguardTeam/golibs v0.35.5/go.mod 
h1:meFdRqMtG/PLW6LD20MYAlcRbwAVowlbunHgE17xz9s=
+github.com/AdguardTeam/golibs v0.35.7 
h1:pTQpixUos7mALr3jqb0pigfrkiqPAX1hiYUi/yeBWiA=
+github.com/AdguardTeam/golibs v0.35.7/go.mod 
h1:meFdRqMtG/PLW6LD20MYAlcRbwAVowlbunHgE17xz9s=
 github.com/ameshkov/dnscrypt/v2 v2.4.0 
h1:if6ZG2cuQmcP2TwSY+D0+8+xbPfoatufGlOQTMNkI9o=
 github.com/ameshkov/dnscrypt/v2 v2.4.0/go.mod 
h1:WpEFV2uhebXb8Jhes/5/fSdpmhGV8TL22RDaeWwV6hI=
 github.com/ameshkov/dnsstamps v1.0.3 
h1:Srzik+J9mivH1alRACTbys2xOxs0lRH9qnTA7Y1OYVo=
@@ -34,8 +32,6 @@
 github.com/knadh/koanf/parsers/toml v0.1.0/go.mod 
h1:yUprhq6eo3GbyVXFFMdbfZSo928ksS+uo0FFqNMnO18=
 github.com/knadh/koanf/providers/env v1.1.0 
h1:U2VXPY0f+CsNDkvdsG8GcsnK4ah85WwWyJgef9oQMSc=
 github.com/knadh/koanf/providers/env v1.1.0/go.mod 
h1:QhHHHZ87h9JxJAn2czdEl6pdkNnDh/JS1Vtsyt65hTY=
-github.com/knadh/koanf/providers/file v1.2.0 
h1:hrUJ6Y9YOA49aNu/RSYzOTFlqzXSCpmYIDXI7OJU6+U=
-github.com/knadh/koanf/providers/file v1.2.0/go.mod 
h1:bp1PM5f83Q+TOUu10J/0ApLBd9uIzg+n9UgthfY+nRA=
 github.com/knadh/koanf/providers/file v1.2.1 
h1:bEWbtQwYrA+W2DtdBrQWyXqJaJSG3KrP3AESOJYp9wM=
 github.com/knadh/koanf/providers/file v1.2.1/go.mod 
h1:bp1PM5f83Q+TOUu10J/0ApLBd9uIzg+n9UgthfY+nRA=
 github.com/knadh/koanf/providers/posflag v1.0.1 
h1:EnMxHSrPkYCFnKgBUl5KBgrjed8gVFrcXDzaW4l/C6Y=
@@ -48,8 +44,6 @@
 github.com/mattn/go-isatty v0.0.20/go.mod 
h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
 github.com/mattn/go-runewidth v0.0.19 
h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
 github.com/mattn/go-runewidth v0.0.19/go.mod 
h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
-github.com/miekg/dns v1.1.68 h1:jsSRkNozw7G/mnmXULynzMNIsgY2dHC8LO6U6Ij2JEA=
-github.com/miekg/dns v1.1.68/go.mod 
h1:fujopn7TB3Pu3JM69XaawiU0wqjpL9/8xGop5UrTPps=
 github.com/miekg/dns v1.1.69 h1:Kb7Y/1Jo+SG+a2GtfoFUfDkG//csdRPwRLkCsxDG9Sc=
 github.com/miekg/dns v1.1.69/go.mod 
h1:7OyjD9nEba5OkqQ/hB4fy3PIoxafSZJtducccIelz3g=
 github.com/mitchellh/copystructure v1.2.0 
h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
@@ -60,24 +54,16 @@
 github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6/go.mod 
h1:rEKTHC9roVVicUIfZK7DYrdIoM0EOr8mK1Hj5s3JjH0=
 github.com/olekukonko/errors v1.1.0 
h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM=
 github.com/olekukonko/errors v1.1.0/go.mod 
h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y=
-github.com/olekukonko/ll v0.1.2 h1:lkg/k/9mlsy0SxO5aC+WEpbdT5K83ddnNhAepz7TQc0=
-github.com/olekukonko/ll v0.1.2/go.mod 
h1:b52bVQRRPObe+yyBl0TxNfhesL0nedD4Cht0/zx55Ew=
 github.com/olekukonko/ll v0.1.3 h1:sV2jrhQGq5B3W0nENUISCR6azIPf7UBUpVq0x/y70Fg=
 github.com/olekukonko/ll v0.1.3/go.mod 
h1:b52bVQRRPObe+yyBl0TxNfhesL0nedD4Cht0/zx55Ew=
-github.com/olekukonko/tablewriter v1.1.0 
h1:N0LHrshF4T39KvI96fn6GT8HEjXRXYNDrDjKFDB7RIY=
-github.com/olekukonko/tablewriter v1.1.0/go.mod 
h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo=
 github.com/olekukonko/tablewriter v1.1.2 
h1:L2kI1Y5tZBct/O/TyZK1zIE9GlBj/TVs+AY5tZDCDSc=
 github.com/olekukonko/tablewriter v1.1.2/go.mod 
h1:z7SYPugVqGVavWoA2sGsFIoOVNmEHxUAAMrhXONtfkg=
 github.com/pelletier/go-toml v1.9.5 
h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
 github.com/pelletier/go-toml v1.9.5/go.mod 
h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
 github.com/pmezard/go-difflib v1.0.0 
h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/quic-go/quic-go v0.55.0 
h1:zccPQIqYCXDt5NmcEabyYvOnomjs8Tlwl7tISjJh9Mk=
-github.com/quic-go/quic-go v0.55.0/go.mod 
h1:DR51ilwU1uE164KuWXhinFcKWGlEjzys2l8zUl5Ss1U=
-github.com/quic-go/quic-go v0.57.1 
h1:25KAAR9QR8KZrCZRThWMKVAwGoiHIrNbT72ULHTuI10=
-github.com/quic-go/quic-go v0.57.1/go.mod 
h1:ly4QBAjHA2VhdnxhojRsCUOeJwKYg+taDlos92xb1+s=
-github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
-github.com/rivo/uniseg v0.4.7/go.mod 
h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
+github.com/quic-go/quic-go v0.58.0 
h1:ggY2pvZaVdB9EyojxL1p+5mptkuHyX5MOSv4dgWF4Ug=
+github.com/quic-go/quic-go v0.58.0/go.mod 
h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU=
 github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
 github.com/spf13/pflag v1.0.10/go.mod 
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/stretchr/testify v1.11.1 
h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
@@ -86,37 +72,21 @@
 github.com/xyproto/randomstring v1.0.5/go.mod 
h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
 go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
 go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
-golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
-golang.org/x/crypto v0.43.0/go.mod 
h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
 golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
 golang.org/x/crypto v0.46.0/go.mod 
h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
-golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 
h1:mgKeJMpvi0yx/sU5GsxQ7p6s2wtOnGAHZWCHUM4KGzY=
-golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod 
h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70=
 golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93 
h1:fQsdNF2N+/YewlRZiricy4P1iimyPKZ/xwniHj8Q2a0=
 golang.org/x/exp v0.0.0-20251219203646-944ab1f22d93/go.mod 
h1:EPRbTFwzwjXj9NpYyyrvenVh9Y+GFeEvMNh7Xuz7xgU=
-golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
-golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
 golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI=
 golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg=
-golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4=
-golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210=
 golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
 golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod 
h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
 golang.org/x/sync v0.19.0/go.mod 
h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
 golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
 golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
-golang.org/x/text v0.30.0/go.mod 
h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
 golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
 golang.org/x/text v0.32.0/go.mod 
h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
-golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
-golang.org/x/tools v0.38.0/go.mod 
h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
 golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA=
 golang.org/x/tools v0.40.0/go.mod 
h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/doggo-1.1.3/pkg/config/config_darwin.go 
new/doggo-1.1.4/pkg/config/config_darwin.go
--- old/doggo-1.1.3/pkg/config/config_darwin.go 2025-12-20 15:05:13.000000000 
+0100
+++ new/doggo-1.1.4/pkg/config/config_darwin.go 2026-01-04 04:39:23.000000000 
+0100
@@ -1,3 +1,4 @@
+//go:build darwin
 // +build darwin
 
 package config
@@ -21,6 +22,7 @@
        domain        string
        searchDomains []string
        options       []string
+       flags         []string
 }
 
 // GetDefaultServers retrieves DNS configuration from macOS SystemConfiguration
@@ -58,10 +60,13 @@
                return nil, 0, nil, fmt.Errorf("failed to parse scutil output: 
%w", err)
        }
 
-       // Filter out mDNS resolvers
+       // Filter out resolvers that shouldn't be used for general queries:
+       // - mDNS resolvers (for .local domains)
+       // - Supplemental resolvers (flagged as domain-specific)
+       // - Domain-specific resolvers (have explicit domain field)
        validResolvers := make([]scutilResolver, 0)
        for _, r := range resolvers {
-               if !isMDNS(r) && len(r.nameservers) > 0 {
+               if !isMDNS(r) && !isSupplemental(r) && !isDomainSpecific(r) && 
len(r.nameservers) > 0 {
                        validResolvers = append(validResolvers, r)
                }
        }
@@ -100,6 +105,9 @@
 }
 
 // parseScutilOutput parses the output of scutil --dns
+// It only parses the main "DNS configuration" section and stops at
+// "DNS configuration (for scoped queries)" since scoped resolvers
+// are interface-specific and shouldn't be used for general queries.
 func parseScutilOutput(output string) ([]scutilResolver, error) {
        lines := strings.Split(output, "\n")
        resolvers := make([]scutilResolver, 0)
@@ -110,8 +118,13 @@
        domainRe := regexp.MustCompile(`^\s+domain\s*:\s*(.+)`)
        searchDomainRe := regexp.MustCompile(`^\s+search 
domain\[\d+\]\s*:\s*(.+)`)
        optionsRe := regexp.MustCompile(`^\s+options\s*:\s*(.+)`)
+       flagsRe := regexp.MustCompile(`^\s+flags\s*:\s*(.+)`)
 
        for _, line := range lines {
+               if strings.Contains(line, "DNS configuration (for scoped 
queries)") {
+                       break
+               }
+
                // Check for resolver start
                if matches := resolverRe.FindStringSubmatch(line); matches != 
nil {
                        if current != nil {
@@ -123,6 +136,7 @@
                                nameservers:   make([]string, 0),
                                searchDomains: make([]string, 0),
                                options:       make([]string, 0),
+                               flags:         make([]string, 0),
                        }
                        continue
                }
@@ -155,6 +169,15 @@
                        current.options = append(current.options, opts...)
                        continue
                }
+
+               // Parse flags (comma-separated, e.g., "Supplemental, Request A 
records")
+               if matches := flagsRe.FindStringSubmatch(line); matches != nil {
+                       flagStr := strings.TrimSpace(matches[1])
+                       for _, f := range strings.Split(flagStr, ",") {
+                               current.flags = append(current.flags, 
strings.TrimSpace(f))
+                       }
+                       continue
+               }
        }
 
        // Don't forget the last resolver
@@ -175,6 +198,23 @@
        return false
 }
 
+func isSupplemental(r scutilResolver) bool {
+       for _, flag := range r.flags {
+               if flag == "Supplemental" {
+                       return true
+               }
+       }
+       return false
+}
+
+// isDomainSpecific checks if a resolver is configured for a specific domain 
only.
+// Per scutil(8): "Those supplemental configurations containing a 'domain' name
+// will be used for queries matching the specified domain."
+// These should NOT be used for general DNS queries.
+func isDomainSpecific(r scutilResolver) bool {
+       return r.domain != ""
+}
+
 // aggregateSearchDomains collects search domains from all resolvers
 func aggregateSearchDomains(resolvers []scutilResolver) []string {
        seen := make(map[string]bool)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/doggo-1.1.3/pkg/config/config_darwin_test.go 
new/doggo-1.1.4/pkg/config/config_darwin_test.go
--- old/doggo-1.1.3/pkg/config/config_darwin_test.go    1970-01-01 
01:00:00.000000000 +0100
+++ new/doggo-1.1.4/pkg/config/config_darwin_test.go    2026-01-04 
04:39:23.000000000 +0100
@@ -0,0 +1,189 @@
+//go:build darwin
+
+package config
+
+import (
+       "reflect"
+       "testing"
+)
+
+const sampleScutilOutput = `
+DNS configuration
+
+resolver #1
+  search domain[0] : dove-climb.ts.net
+  nameserver[0] : 100.100.100.100
+  if_index : 34 (utun12)
+  flags    : Supplemental, Request A records, Request AAAA records
+  reach    : 0x00000003 (Reachable,Transient Connection)
+  order    : 101200
+
+resolver #2
+  nameserver[0] : 1.1.1.1
+  nameserver[1] : 8.8.8.8
+  if_index : 14 (en0)
+  flags    : Request A records
+  reach    : 0x00000002 (Reachable)
+  order    : 200000
+
+resolver #3
+  domain   : dove-climb.ts.net.
+  nameserver[0] : 100.100.100.100
+  if_index : 34 (utun12)
+  flags    : Supplemental, Request A records, Request AAAA records
+  reach    : 0x00000003 (Reachable,Transient Connection)
+  order    : 101201
+
+resolver #4
+  domain   : local
+  options  : mdns
+  timeout  : 5
+  flags    : Request A records
+  reach    : 0x00000000 (Not Reachable)
+  order    : 300000
+
+resolver #5
+  domain   : 254.169.in-addr.arpa
+  options  : mdns
+  timeout  : 5
+  flags    : Request A records
+  reach    : 0x00000000 (Not Reachable)
+  order    : 300200
+
+resolver #6
+  domain   : 8.e.f.ip6.arpa
+  options  : mdns
+  timeout  : 5
+  flags    : Request A records
+  reach    : 0x00000000 (Not Reachable)
+  order    : 300400
+
+resolver #7
+  domain   : 9.e.f.ip6.arpa
+  options  : mdns
+  timeout  : 5
+  flags    : Request A records
+  reach    : 0x00000000 (Not Reachable)
+  order    : 300600
+
+resolver #8
+  domain   : a.e.f.ip6.arpa
+  options  : mdns
+  timeout  : 5
+  flags    : Request A records
+  reach    : 0x00000000 (Not Reachable)
+  order    : 300800
+
+resolver #9
+  domain   : b.e.f.ip6.arpa
+  options  : mdns
+  timeout  : 5
+  flags    : Request A records
+  reach    : 0x00000000 (Not Reachable)
+  order    : 301000
+
+DNS configuration (for scoped queries)
+
+resolver #1
+  nameserver[0] : 1.1.1.1
+  nameserver[1] : 8.8.8.8
+  if_index : 14 (en0)
+  flags    : Scoped, Request A records
+  reach    : 0x00000002 (Reachable)
+
+resolver #2
+  search domain[0] : dove-climb.ts.net
+  nameserver[0] : 100.100.100.100
+  if_index : 34 (utun12)
+  flags    : Scoped, Request A records, Request AAAA records
+  reach    : 0x00000003 (Reachable,Transient Connection)
+`
+
+func TestParseScutilOutputStopsAtScoped(t *testing.T) {
+       resolvers, err := parseScutilOutput(sampleScutilOutput)
+       if err != nil {
+               t.Fatalf("parseScutilOutput error: %v", err)
+       }
+
+       if len(resolvers) != 9 {
+               t.Fatalf("expected 9 resolvers before scoped section, got %d", 
len(resolvers))
+       }
+
+       if resolvers[8].number != 9 {
+               t.Fatalf("expected last resolver to be #9, got #%d", 
resolvers[8].number)
+       }
+}
+
+func TestFilterScutilResolvers(t *testing.T) {
+       resolvers, err := parseScutilOutput(sampleScutilOutput)
+       if err != nil {
+               t.Fatalf("parseScutilOutput error: %v", err)
+       }
+
+       valid := make([]scutilResolver, 0)
+       for _, r := range resolvers {
+               if !isMDNS(r) && !isSupplemental(r) && !isDomainSpecific(r) && 
len(r.nameservers) > 0 {
+                       valid = append(valid, r)
+               }
+       }
+
+       if len(valid) != 1 {
+               t.Fatalf("expected 1 valid resolver, got %d", len(valid))
+       }
+
+       if valid[0].number != 2 {
+               t.Fatalf("expected resolver #2 to remain, got #%d", 
valid[0].number)
+       }
+
+       gotNameservers := valid[0].nameservers
+       wantNameservers := []string{"1.1.1.1", "8.8.8.8"}
+       if !reflect.DeepEqual(gotNameservers, wantNameservers) {
+               t.Fatalf("nameservers mismatch: got %v want %v", 
gotNameservers, wantNameservers)
+       }
+}
+
+func TestFilterDomainSpecificWithoutSupplementalFlag(t *testing.T) {
+       input := `
+DNS configuration
+
+resolver #1
+  search domain[0] : lan
+  nameserver[0] : 8.8.8.8
+  nameserver[1] : 1.1.1.1
+  flags    : Request A records
+  reach    : 0x00000002 (Reachable)
+
+resolver #2
+  domain   : test
+  nameserver[0] : 127.0.0.1
+  flags    : Request A records, Request AAAA records
+  reach    : 0x00030002 (Reachable,Local Address,Directly Reachable Address)
+
+DNS configuration (for scoped queries)
+`
+       resolvers, err := parseScutilOutput(input)
+       if err != nil {
+               t.Fatalf("parseScutilOutput error: %v", err)
+       }
+
+       valid := make([]scutilResolver, 0)
+       for _, r := range resolvers {
+               if !isMDNS(r) && !isSupplemental(r) && !isDomainSpecific(r) && 
len(r.nameservers) > 0 {
+                       valid = append(valid, r)
+               }
+       }
+
+       if len(valid) != 1 {
+               t.Fatalf("expected 1 valid resolver (resolver #2 with 
domain:test should be filtered), got %d", len(valid))
+       }
+
+       if valid[0].number != 1 {
+               t.Fatalf("expected resolver #1 to remain, got #%d", 
valid[0].number)
+       }
+
+       gotNameservers := valid[0].nameservers
+       wantNameservers := []string{"8.8.8.8", "1.1.1.1"}
+       if !reflect.DeepEqual(gotNameservers, wantNameservers) {
+               t.Fatalf("nameservers mismatch: got %v want %v", 
gotNameservers, wantNameservers)
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/doggo-1.1.3/web/faq.html new/doggo-1.1.4/web/faq.html
--- old/doggo-1.1.3/web/faq.html        2025-12-20 15:05:13.000000000 +0100
+++ new/doggo-1.1.4/web/faq.html        2026-01-04 04:39:23.000000000 +0100
@@ -142,6 +142,9 @@
     <!-- Stylesheets -->
     <link rel="stylesheet" href="assets/terminal.css">
     <link href="assets/style.css" rel="stylesheet">
+
+    <!-- Analytics -->
+    <script defer src="https://um.mrkaran.dev/script.js"; 
data-website-id="f9c569ff-af43-4875-ae1e-d6d2a6dedfd9"></script>
 </head>
 <body>
 <div class="container">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/doggo-1.1.3/web/index.html 
new/doggo-1.1.4/web/index.html
--- old/doggo-1.1.3/web/index.html      2025-12-20 15:05:13.000000000 +0100
+++ new/doggo-1.1.4/web/index.html      2026-01-04 04:39:23.000000000 +0100
@@ -121,6 +121,9 @@
     <!-- Stylesheets -->
     <link rel="stylesheet" href="assets/terminal.css">
     <link href="assets/style.css" rel="stylesheet">
+
+    <!-- Analytics -->
+    <script defer src="https://um.mrkaran.dev/script.js"; 
data-website-id="f9c569ff-af43-4875-ae1e-d6d2a6dedfd9"></script>
 </head>
 <body>
 <div class="container">

++++++ doggo.obsinfo ++++++
--- /var/tmp/diff_new_pack.KMVDDw/_old  2026-01-13 21:27:22.474137662 +0100
+++ /var/tmp/diff_new_pack.KMVDDw/_new  2026-01-13 21:27:22.482137993 +0100
@@ -1,5 +1,5 @@
 name: doggo
-version: 1.1.3
-mtime: 1766239513
-commit: 46a1de3ae6ee61267b678e7493a52657fde1bf74
+version: 1.1.4
+mtime: 1767497963
+commit: 84808d48aff88dadfbb8a28c0f473d05fd8ced00
 

++++++ vendor.tar.xz ++++++
++++ 1880 lines of diff (skipped)

Reply via email to