From a5e7aa3dd5a81517558b66be279ab4753358b5a8 Mon Sep 17 00:00:00 2001 From: Rodolphe Breard Date: Mon, 16 Nov 2015 12:17:30 +0100 Subject: [PATCH] Add support for timestamp based serial. Some people uses the current timestamp for the DNS serial number. The current implementation detects timestamps between September 9 2001 and March 17 2030. Implementing it has reduced the date based serial detection to a range between 1900 and 2999, however it should not be a problem at all because DNS didn't existed before 1900 and, if it still exists in 3000, there is literally almost 1000 years to fix the problem. --- README.md | 9 ++++++++- plugin/dnsserial.vim | 12 ++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d38b010..c575e8a 100644 --- a/README.md +++ b/README.md @@ -31,18 +31,25 @@ Patterns In order to be detected, the DNS serial number must match one the following pattern: * `YYYYMMDDXX ; serial` - - `YYYY` is the year (4 digits); + - `YYYY` is the year (4 digits, must start by either `19` or `2`); - `MM` is the month (2 digits); - `DD` is the day (2 digits); - `XX` is any non-negative number (1 or more digits); - the word `serial` is not case-sensitive; - there can be any number of blanks on each sides of the semicolon. +* `SSSSSSSSSS ; serial` + - `SSSSSSSSSS` is the UNIX tiemstamp (10 digits, must start by `1`); + - the word `serial` is not case-sensitive; + - there can be any number of blanks on each sides of the semicolon. + * `XX ; serial` - `XX` is any non-negative number (1 or more digits); - the word `serial` is not case-sensitive; - there can be any number of blanks on each sides of the semicolon. +According to those patterns, only dates between 1900 and 2999 will be detected; however this should not be a problem at all. Most importantly, only timestamps between September 9 2001 and March 17 2030 will be detected. + Configuration ------------- diff --git a/plugin/dnsserial.vim b/plugin/dnsserial.vim index 7de4233..72ee66a 100644 --- a/plugin/dnsserial.vim +++ b/plugin/dnsserial.vim @@ -20,12 +20,20 @@ endif if !exists('g:dnsserial_patterns') let g:dnsserial_patterns = [ \{ - \'regex': '\(\d\{8}\)\(\d\+\)\s*;\s*\cserial', + \'regex': '\(19\d\{2}\|20\d\{2}\)\([01]\d\)\([0-3]\d\)\(\d\+\)\s*;\s*\cserial', \'matching': [ - \{'type': 'date', 'fmt': '%Y%m%d'}, + \{'type': 'date', 'fmt': '%Y'}, + \{'type': 'date', 'fmt': '%m'}, + \{'type': 'date', 'fmt': '%d'}, \{'type': 'integer', 'padding': 2, 'date_reset': 1} \] \}, + \{ + \'regex': '\(1\d\{9}\)\s*;\s*\cserial', + \'matching': [ + \{'type': 'date', 'fmt': '%s'}, + \] + \}, \{ \'regex': '\(\d\+\)\s*;\s*\cserial', \'matching': [