* bug#26820: 26.0.50; DNS mode and IPv6 reverse zones
@ 2017-05-07 18:51 Peder O. Klingenberg
2017-05-07 18:58 ` Peder O. Klingenberg
0 siblings, 1 reply; 5+ messages in thread
From: Peder O. Klingenberg @ 2017-05-07 18:51 UTC (permalink / raw)
To: 26820
Last week I was trying to set up reverse delegations for some newly
assigned IPv6 address space. It was... painful.
IPv6 addresses are ugly enough in their normal format, but when used in
a reverse zone, they need to be converted to individual nibbles
separated by dots, reversed, and have .ip6.arpa. appended. The result
is less than human friendly.
So I've written a new feature for dns-mode.el that allows me to mostly
relate to the normal IPv6 format, and convert automatically to the
nibble format. I can for instance do this in a (part of a) zone file,
where I'm only interested in defining hosts in the last 16 bits of the
address:
$ORIGIN 2a0a:3dc0:10::/112
::1/-112 IN PTR www.example.com.
And then, by pressing C-c C-e on each of the IPv6 addresses, end up with
the necessary
$ORIGIN 0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.0.c.d.3.a.0.a.2.ip6.arpa.
1.0.0.0 IN PTR www.example.com.
Assuming I'm doing this as I type, I can then yank the last
standard-format address, do a minimal edit, C-c C-e again, and continue
typing to define the next PTR record.
I'm hoping this sounds useful to other people as well. I'll pass along
the patch as soon as I get a bug# to attach to it. :)
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#26820: 26.0.50; DNS mode and IPv6 reverse zones
2017-05-07 18:51 bug#26820: 26.0.50; DNS mode and IPv6 reverse zones Peder O. Klingenberg
@ 2017-05-07 18:58 ` Peder O. Klingenberg
2017-05-21 0:22 ` Glenn Morris
0 siblings, 1 reply; 5+ messages in thread
From: Peder O. Klingenberg @ 2017-05-07 18:58 UTC (permalink / raw)
To: 26820
[-- Attachment #1: Type: text/plain, Size: 372 bytes --]
peder@klingenberg.no (Peder O. Klingenberg) writes:
> I'll pass along the patch as soon as I get a bug# to attach to it. :)
As promised, here's the patch. I even wrote tests, which is a first for
me. I couldn't find dns-mode documented in any manual, so I haven't
written any info docs, but the docstrings should hopefully give enough
information to use the feature.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Command-to-convert-IPv6-addresses-in-zone-files.patch --]
[-- Type: text/x-patch, Size: 9146 bytes --]
From 8fe87aafd6aa77f5d4c1ac126e2d2e7e69ce236c Mon Sep 17 00:00:00 2001
From: "Peder O. Klingenberg" <peder@klingenberg.no>
Date: Sun, 7 May 2017 17:58:41 +0200
Subject: [PATCH] Command to convert IPv6 addresses in zone files
* lisp/textmodes/dns-mode.el (dns-mode-ipv6-to-nibbles):
New command to convert IPv6 addresses to a format suitable for
reverse lookup zone files.
(dns-mode-reverse-and-expand-ipv6): The algorithm central to
the command above.
(dns-mode-map, dns-mode-menu): Key and menu item for the new
command.
* test/lisp/textmodes/dns-mode-tests.el (dns-mode-ipv6-conversion)
(dns-mode-ipv6-text-replacement): Tests for new functionality
in dns-mode.el
(bug#26820)
---
etc/NEWS | 8 +++
lisp/textmodes/dns-mode.el | 102 +++++++++++++++++++++++++++++++++-
test/lisp/textmodes/dns-mode-tests.el | 58 +++++++++++++++++++
3 files changed, 167 insertions(+), 1 deletion(-)
create mode 100644 test/lisp/textmodes/dns-mode-tests.el
diff --git a/etc/NEWS b/etc/NEWS
index 4599efd7da..293ef4f960 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -784,6 +784,14 @@ file.
*** Emacs does no longer prompt the user before killing Flymake
processes on exit.
+** DNS mode
+
++++
+*** DNS mode has a tool to convert IPv6 addresses
+Reverse zones for IPv6 needs IPv6 addresses spelled out in a
+cumbersome format. A new command 'dns-mode-ipv6-to-nibbles' helps
+with the conversion.
+
\f
* New Modes and Packages in Emacs 26.1
diff --git a/lisp/textmodes/dns-mode.el b/lisp/textmodes/dns-mode.el
index 01f509d913..6f2f40cd2c 100644
--- a/lisp/textmodes/dns-mode.el
+++ b/lisp/textmodes/dns-mode.el
@@ -113,6 +113,7 @@ dns-mode-syntax-table
(defvar dns-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "\C-c\C-s" 'dns-mode-soa-increment-serial)
+ (define-key map "\C-c\C-e" 'dns-mode-ipv6-to-nibbles)
map)
"Keymap for DNS master file mode.")
@@ -124,7 +125,8 @@ dns-mode-menu
(easy-menu-define dns-mode-menu dns-mode-map
"DNS Menu."
'("DNS"
- ["Increment SOA serial" dns-mode-soa-increment-serial t]))
+ ["Increment SOA serial" dns-mode-soa-increment-serial t]
+ ["Convert IPv6 address to nibbles" dns-mode-ipv6-to-nibbles t]))
;; Mode.
@@ -220,6 +222,104 @@ dns-mode-soa-maybe-increment-serial
;; We return nil in case this is used in write-contents-functions.
nil)))
+;;;###autoload
+(defun dns-mode-ipv6-to-nibbles (negate-prefix-p)
+ "Replace an IPv6 address around or preceeding point by its
+ip6.arpa-representation for use in reverse zone files. The
+replaced address is placed in the kill ring.
+
+The address can be a complete address (no prefix designator), can
+have a normal prefix designator (e.g. /48), in which case only
+the required number of nibbles are output, or can have a negative
+prefix designator (e.g. /-112), in which case only the parts of
+the address *not* covered by the absolute value of the prefix
+length is output, as a relative address (without .ip6.arpa. at
+the end). This is useful when $ORIGIN is specified in the zone
+file.
+
+If called with a prefix argument (C-u), the value of the detected
+prefix length is negated.
+
+Examples:
+
+2001:db8::12 =>
+2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
+
+2001:db8::12/32 =>
+8.b.d.0.1.0.0.2.ip6.arpa.
+
+2001:db8::12/-32 =>
+2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0
+
+::42/112 (with C-u prefix) =>
+2.4.0.0"
+ (interactive "P")
+ (skip-syntax-backward " ")
+ (skip-syntax-backward "w_.")
+ (re-search-forward "\\([[:xdigit:]:]+\\)\\(/-?[0-9]\\{2,3\\}\\)?")
+ (kill-new (match-string 0))
+ (let ((address (match-string 1))
+ (prefix-length (match-string 2)))
+ (if prefix-length
+ (progn
+ (setq prefix-length (string-to-number (substring prefix-length 1)))
+ (if negate-prefix-p
+ (setq prefix-length (* -1 prefix-length)))))
+ (replace-match (save-match-data
+ (dns-mode-reverse-and-expand-ipv6 address prefix-length)))))
+
+(defun dns-mode-reverse-and-expand-ipv6 (address &optional prefix-length)
+ "Convert an IPv6 address to (parts of) an ip6.arpa nibble format.
+
+ADDRESS must be an IPv6 address in the usual colon-separaated
+format, without a prefix designator at the end. PREFIX-LENGTH,
+if given, must be a number whose absolute value is the length in
+bits of the network part of the address.
+
+If PREFIX-LENGTH is `nil', an absolute address is returned
+representing the full IPv6 address.
+
+If PREFIX-LENGTH is positive, an absolute address is returned
+representing the network prefix indicated.
+
+If PREFIX-LENGTH is negative, a relative address is returned
+representing the host parts of the address with respect to the
+indicated network prefix.
+
+See `dns-mode-ipv6-to-nibbles' for examples."
+ (let* ((chunks (split-string address ":"))
+ (prefix-length-nibbles (if prefix-length
+ (ceiling (abs prefix-length) 4)
+ 32))
+ (filler-chunks (- 8 (length (remove "" chunks))))
+ (expanded-address (apply #'concat
+ (loop with filler-done = nil
+ for chunk in chunks
+ if (and (not filler-done)
+ (string= "" chunk))
+ append (prog1
+ (loop repeat filler-chunks
+ collect "0000")
+ (setq filler-done t))
+ else
+ if (not (string= "" chunk))
+ collect (format "%04x" (string-to-number chunk 16)))))
+ (rev-address-nibbles (nreverse (if (and prefix-length
+ (minusp prefix-length))
+ (substring expanded-address prefix-length-nibbles)
+ (substring expanded-address 0 prefix-length-nibbles)))))
+ (with-temp-buffer
+ (loop for char across rev-address-nibbles
+ do
+ (insert char)
+ (insert "."))
+ (if (and prefix-length
+ (minusp prefix-length))
+ (delete-char -1)
+ (insert "ip6.arpa."))
+ (insert " ")
+ (buffer-string))))
+
(provide 'dns-mode)
;;; dns-mode.el ends here
diff --git a/test/lisp/textmodes/dns-mode-tests.el b/test/lisp/textmodes/dns-mode-tests.el
new file mode 100644
index 0000000000..34e86201d8
--- /dev/null
+++ b/test/lisp/textmodes/dns-mode-tests.el
@@ -0,0 +1,58 @@
+;;; dns-mode-tests.el --- Test suite for dns-mode -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2017 Free Software Foundation, Inc.
+
+;; Author: Peder O. Klingenberg <peder@klingenberg.no>
+;; Keywords: dns zone
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'ert)
+(require 'dns-mode)
+
+;;; IPv6 reverse zones
+(ert-deftest dns-mode-ipv6-conversion ()
+ (let ((address "2001:db8::42"))
+ (should (equal (dns-mode-reverse-and-expand-ipv6 address)
+ "2.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa. "))
+ (should (equal (dns-mode-reverse-and-expand-ipv6 address 32)
+ "8.b.d.0.1.0.0.2.ip6.arpa. "))
+ (should (equal (dns-mode-reverse-and-expand-ipv6 address -112)
+ "2.4.0.0 "))))
+
+(ert-deftest dns-mode-ipv6-text-replacement ()
+ (let ((address "2001:db8::42/32"))
+ (with-temp-buffer
+ ;; Conversion with point directly after address
+ (insert address)
+ (dns-mode-ipv6-to-nibbles nil)
+ (should (equal (buffer-string) "8.b.d.0.1.0.0.2.ip6.arpa. "))
+ ;; Kill ring contains the expected
+ (erase-buffer)
+ (yank)
+ (should (equal (buffer-string) address))
+ ;; Point at beginning of address (and prefix arg to command)
+ (goto-char (point-min))
+ (dns-mode-ipv6-to-nibbles t)
+ (should (equal (buffer-string) "2.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 "))
+ ;; Point separated from address by whitespace
+ (erase-buffer)
+ (insert address)
+ (insert " ")
+ (dns-mode-ipv6-to-nibbles nil)
+ (should (equal (buffer-string) "8.b.d.0.1.0.0.2.ip6.arpa. ")))))
--
2.11.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* bug#26820: 26.0.50; DNS mode and IPv6 reverse zones
2017-05-07 18:58 ` Peder O. Klingenberg
@ 2017-05-21 0:22 ` Glenn Morris
2017-05-21 19:56 ` Peder O. Klingenberg
0 siblings, 1 reply; 5+ messages in thread
From: Glenn Morris @ 2017-05-21 0:22 UTC (permalink / raw)
To: Peder O. Klingenberg; +Cc: 26820
Thanks, but:
In dns-mode-reverse-and-expand-ipv6:
~/dns-mode.el:330:41:Warning: reference to free variable ‘with’
~/dns-mode.el:330:46:Warning: reference to free variable ‘filler-done’
~/dns-mode.el:330:58:Warning: reference to free variable ‘=’
~/dns-mode.el:331:41:Warning: reference to free variable ‘for’
~/dns-mode.el:331:45:Warning: reference to free variable ‘chunk’
~/dns-mode.el:331:51:Warning: reference to free variable ‘in’
~/dns-mode.el:332:41:Warning: reference to free variable ‘if’
~/dns-mode.el:334:41:Warning: reference to free variable ‘append’
~/dns-mode.el:335:58:Warning: reference to free variable ‘repeat’
~/dns-mode.el:336:58:Warning: reference to free variable ‘collect’
~/dns-mode.el:337:56:Warning: assignment to free variable ‘filler-done’
~/dns-mode.el:338:41:Warning: reference to free variable ‘else’
~/dns-mode.el:346:17:Warning: reference to free variable ‘char’
~/dns-mode.el:346:22:Warning: reference to free variable ‘across’
~/dns-mode.el:347:13:Warning: reference to free variable ‘do’
In end of data:
~/dns-mode.el:360:1:Warning: the following functions are not known to be
defined: loop, minusp
which is due to using stuff from cl.el without requiring it.
And in any case, the cl-lib versions should be used instead these days.
Please could you revise that? TIA.
^ permalink raw reply [flat|nested] 5+ messages in thread
* bug#26820: 26.0.50; DNS mode and IPv6 reverse zones
2017-05-21 0:22 ` Glenn Morris
@ 2017-05-21 19:56 ` Peder O. Klingenberg
2017-05-24 0:36 ` Glenn Morris
0 siblings, 1 reply; 5+ messages in thread
From: Peder O. Klingenberg @ 2017-05-21 19:56 UTC (permalink / raw)
To: Glenn Morris; +Cc: 26820
[-- Attachment #1: Type: text/plain, Size: 291 bytes --]
Glenn Morris <rgm@gnu.org> writes:
> And in any case, the cl-lib versions should be used instead these days.
> Please could you revise that? TIA.
Revised patch attached, using the cl-lib versions. dns-mode.el now
compiles without warnings in emacs -Q. Thank you for taking an
interest.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Command-to-convert-IPv6-addresses-in-zone-files.patch --]
[-- Type: text/x-patch, Size: 9203 bytes --]
From 784308bc7b85c9012f89294fec478f43b0f1f210 Mon Sep 17 00:00:00 2001
From: "Peder O. Klingenberg" <peder@klingenberg.no>
Date: Sun, 7 May 2017 17:58:41 +0200
Subject: [PATCH] Command to convert IPv6 addresses in zone files
* lisp/textmodes/dns-mode.el (dns-mode-ipv6-to-nibbles):
New command to convert IPv6 addresses to a format suitable for
reverse lookup zone files.
(dns-mode-reverse-and-expand-ipv6): The algorithm central to
the command above.
(dns-mode-map, dns-mode-menu): Key and menu item for the new
command.
* test/lisp/textmodes/dns-mode-tests.el (dns-mode-ipv6-conversion)
(dns-mode-ipv6-text-replacement): Tests for new functionality
in dns-mode.el
(bug#26820)
---
etc/NEWS | 8 +++
lisp/textmodes/dns-mode.el | 102 +++++++++++++++++++++++++++++++++-
test/lisp/textmodes/dns-mode-tests.el | 58 +++++++++++++++++++
3 files changed, 167 insertions(+), 1 deletion(-)
create mode 100644 test/lisp/textmodes/dns-mode-tests.el
diff --git a/etc/NEWS b/etc/NEWS
index 4599efd7da..293ef4f960 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -784,6 +784,14 @@ file.
*** Emacs does no longer prompt the user before killing Flymake
processes on exit.
+** DNS mode
+
++++
+*** DNS mode has a tool to convert IPv6 addresses
+Reverse zones for IPv6 needs IPv6 addresses spelled out in a
+cumbersome format. A new command 'dns-mode-ipv6-to-nibbles' helps
+with the conversion.
+
\f
* New Modes and Packages in Emacs 26.1
diff --git a/lisp/textmodes/dns-mode.el b/lisp/textmodes/dns-mode.el
index 01f509d913..88d9c6bee6 100644
--- a/lisp/textmodes/dns-mode.el
+++ b/lisp/textmodes/dns-mode.el
@@ -113,6 +113,7 @@ dns-mode-syntax-table
(defvar dns-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "\C-c\C-s" 'dns-mode-soa-increment-serial)
+ (define-key map "\C-c\C-e" 'dns-mode-ipv6-to-nibbles)
map)
"Keymap for DNS master file mode.")
@@ -124,7 +125,8 @@ dns-mode-menu
(easy-menu-define dns-mode-menu dns-mode-map
"DNS Menu."
'("DNS"
- ["Increment SOA serial" dns-mode-soa-increment-serial t]))
+ ["Increment SOA serial" dns-mode-soa-increment-serial t]
+ ["Convert IPv6 address to nibbles" dns-mode-ipv6-to-nibbles t]))
;; Mode.
@@ -220,6 +222,104 @@ dns-mode-soa-maybe-increment-serial
;; We return nil in case this is used in write-contents-functions.
nil)))
+;;;###autoload
+(defun dns-mode-ipv6-to-nibbles (negate-prefix-p)
+ "Replace an IPv6 address around or preceeding point by its
+ip6.arpa-representation for use in reverse zone files. The
+replaced address is placed in the kill ring.
+
+The address can be a complete address (no prefix designator), can
+have a normal prefix designator (e.g. /48), in which case only
+the required number of nibbles are output, or can have a negative
+prefix designator (e.g. /-112), in which case only the parts of
+the address *not* covered by the absolute value of the prefix
+length is output, as a relative address (without .ip6.arpa. at
+the end). This is useful when $ORIGIN is specified in the zone
+file.
+
+If called with a prefix argument (C-u), the value of the detected
+prefix length is negated.
+
+Examples:
+
+2001:db8::12 =>
+2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
+
+2001:db8::12/32 =>
+8.b.d.0.1.0.0.2.ip6.arpa.
+
+2001:db8::12/-32 =>
+2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0
+
+::42/112 (with C-u prefix) =>
+2.4.0.0"
+ (interactive "P")
+ (skip-syntax-backward " ")
+ (skip-syntax-backward "w_.")
+ (re-search-forward "\\([[:xdigit:]:]+\\)\\(/-?[0-9]\\{2,3\\}\\)?")
+ (kill-new (match-string 0))
+ (let ((address (match-string 1))
+ (prefix-length (match-string 2)))
+ (if prefix-length
+ (progn
+ (setq prefix-length (string-to-number (substring prefix-length 1)))
+ (if negate-prefix-p
+ (setq prefix-length (* -1 prefix-length)))))
+ (replace-match (save-match-data
+ (dns-mode-reverse-and-expand-ipv6 address prefix-length)))))
+
+(defun dns-mode-reverse-and-expand-ipv6 (address &optional prefix-length)
+ "Convert an IPv6 address to (parts of) an ip6.arpa nibble format.
+
+ADDRESS must be an IPv6 address in the usual colon-separaated
+format, without a prefix designator at the end. PREFIX-LENGTH,
+if given, must be a number whose absolute value is the length in
+bits of the network part of the address.
+
+If PREFIX-LENGTH is `nil', an absolute address is returned
+representing the full IPv6 address.
+
+If PREFIX-LENGTH is positive, an absolute address is returned
+representing the network prefix indicated.
+
+If PREFIX-LENGTH is negative, a relative address is returned
+representing the host parts of the address with respect to the
+indicated network prefix.
+
+See `dns-mode-ipv6-to-nibbles' for examples."
+ (let* ((chunks (split-string address ":"))
+ (prefix-length-nibbles (if prefix-length
+ (ceiling (abs prefix-length) 4)
+ 32))
+ (filler-chunks (- 8 (length (remove "" chunks))))
+ (expanded-address (apply #'concat
+ (cl-loop with filler-done = nil
+ for chunk in chunks
+ if (and (not filler-done)
+ (string= "" chunk))
+ append (prog1
+ (cl-loop repeat filler-chunks
+ collect "0000")
+ (setq filler-done t))
+ else
+ if (not (string= "" chunk))
+ collect (format "%04x" (string-to-number chunk 16)))))
+ (rev-address-nibbles (nreverse (if (and prefix-length
+ (cl-minusp prefix-length))
+ (substring expanded-address prefix-length-nibbles)
+ (substring expanded-address 0 prefix-length-nibbles)))))
+ (with-temp-buffer
+ (cl-loop for char across rev-address-nibbles
+ do
+ (insert char)
+ (insert "."))
+ (if (and prefix-length
+ (cl-minusp prefix-length))
+ (delete-char -1)
+ (insert "ip6.arpa."))
+ (insert " ")
+ (buffer-string))))
+
(provide 'dns-mode)
;;; dns-mode.el ends here
diff --git a/test/lisp/textmodes/dns-mode-tests.el b/test/lisp/textmodes/dns-mode-tests.el
new file mode 100644
index 0000000000..34e86201d8
--- /dev/null
+++ b/test/lisp/textmodes/dns-mode-tests.el
@@ -0,0 +1,58 @@
+;;; dns-mode-tests.el --- Test suite for dns-mode -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2017 Free Software Foundation, Inc.
+
+;; Author: Peder O. Klingenberg <peder@klingenberg.no>
+;; Keywords: dns zone
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'ert)
+(require 'dns-mode)
+
+;;; IPv6 reverse zones
+(ert-deftest dns-mode-ipv6-conversion ()
+ (let ((address "2001:db8::42"))
+ (should (equal (dns-mode-reverse-and-expand-ipv6 address)
+ "2.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa. "))
+ (should (equal (dns-mode-reverse-and-expand-ipv6 address 32)
+ "8.b.d.0.1.0.0.2.ip6.arpa. "))
+ (should (equal (dns-mode-reverse-and-expand-ipv6 address -112)
+ "2.4.0.0 "))))
+
+(ert-deftest dns-mode-ipv6-text-replacement ()
+ (let ((address "2001:db8::42/32"))
+ (with-temp-buffer
+ ;; Conversion with point directly after address
+ (insert address)
+ (dns-mode-ipv6-to-nibbles nil)
+ (should (equal (buffer-string) "8.b.d.0.1.0.0.2.ip6.arpa. "))
+ ;; Kill ring contains the expected
+ (erase-buffer)
+ (yank)
+ (should (equal (buffer-string) address))
+ ;; Point at beginning of address (and prefix arg to command)
+ (goto-char (point-min))
+ (dns-mode-ipv6-to-nibbles t)
+ (should (equal (buffer-string) "2.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 "))
+ ;; Point separated from address by whitespace
+ (erase-buffer)
+ (insert address)
+ (insert " ")
+ (dns-mode-ipv6-to-nibbles nil)
+ (should (equal (buffer-string) "8.b.d.0.1.0.0.2.ip6.arpa. ")))))
--
2.11.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* bug#26820: 26.0.50; DNS mode and IPv6 reverse zones
2017-05-21 19:56 ` Peder O. Klingenberg
@ 2017-05-24 0:36 ` Glenn Morris
0 siblings, 0 replies; 5+ messages in thread
From: Glenn Morris @ 2017-05-24 0:36 UTC (permalink / raw)
To: 26820-done
Version: 26.1
Thanks; tweaked and applied as 8f6550b.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-05-24 0:36 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-05-07 18:51 bug#26820: 26.0.50; DNS mode and IPv6 reverse zones Peder O. Klingenberg
2017-05-07 18:58 ` Peder O. Klingenberg
2017-05-21 0:22 ` Glenn Morris
2017-05-21 19:56 ` Peder O. Klingenberg
2017-05-24 0:36 ` Glenn Morris
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).