Function: dns-mode-soa-increment-serial
dns-mode-soa-increment-serial is an autoloaded, interactive and
byte-compiled function defined in dns-mode.el.gz.
Signature
(dns-mode-soa-increment-serial)
Documentation
Locate SOA record and increment the serial field.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/textmodes/dns-mode.el.gz
;;;###autoload (defalias 'zone-mode 'dns-mode)
;; Tools.
;;;###autoload
(defun dns-mode-soa-increment-serial ()
"Locate SOA record and increment the serial field."
(interactive)
(save-excursion
(goto-char (point-min))
(unless (re-search-forward
(concat "^\\(\\(\\([^ \t]+[ \t]+\\)?[^ \t]+"
"[ \t]+\\)?[^ \t]+[ \t]+\\)?SOA") nil t)
(error "Cannot locate SOA record"))
(if (re-search-forward (concat "\\<\\("
;; year
"\\(198\\|199\\|20[0-9]\\)[0-9]"
;; month
"\\(0[0-9]\\|10\\|11\\|12\\)"
;; day
"\\([012][0-9]\\|30\\|31\\)"
;; counter
"\\([0-9]\\{1,3\\}\\)"
"\\)\\>")
nil t)
;; YYYYMMDDIII format, one to three I's.
(let* ((serial (match-string 1))
(counterstr (match-string 5))
(counter (string-to-number counterstr))
(now (format-time-string "%Y%m%d"))
(nowandoldserial (concat now counterstr)))
(if (string< serial nowandoldserial)
(let ((new (format "%s00" now)))
(replace-match new nil nil nil 1)
(message "Replaced old serial %s with %s" serial new))
(if (string= serial nowandoldserial)
(let ((new (format (format "%%s%%0%dd" (length counterstr))
now (1+ counter))))
(replace-match new nil nil nil 1)
(message "Replaced old serial %s with %s" serial new))
(error "Current SOA serial is in the future"))))
(if (re-search-forward "\\<\\([0-9]\\{9,10\\}\\)\\>" nil t)
;; Unix time
(let* ((serial (match-string 1))
(new (format-time-string "%s")))
(if (not (string< serial new))
(error "Current SOA serial is in the future")
(replace-match new nil nil nil 1)
(message "Replaced old serial %s with %s" serial new)))
(if (re-search-forward "\\<\\([0-9]+\\)\\>" nil t)
;; Just any serial number.
(let* ((serial (match-string 1))
(new (format "%d" (1+ (string-to-number serial)))))
(replace-match new nil nil nil 1)
(message "Replaced old serial %s with %s" serial new))
(error "Cannot locate serial number in SOA record"))))))