[rancid] mtrancid patch

Steven Saner ssaner at hubris.net
Fri Jan 9 21:15:19 UTC 2015

I had an issue with rancid 3.1 (and earlier versions too) tracking
several Mikrotik routers. I'm not sure if this issue affects all
Mikrotik models, but in my case I am using the following:

> system resource print
             uptime: 8w2d22h47m48s
            version: 5.21
        free-memory: 992624KiB
       total-memory: 1555212KiB
                cpu: e500v2
          cpu-count: 2
      cpu-frequency: 1066MHz
           cpu-load: 16%
     free-hdd-space: 68928KiB
    total-hdd-space: 110092KiB
  architecture-name: powerpc
         board-name: RB1100AHx2
           platform: MikroTik

In the config export there is the following:

/interface ovpn-server server
set auth=sha1,md5 certificate=none cipher=blowfish128,aes128
    default enabled=no keepalive-timeout=60 mac-address=FE:EB:E4:50:DC:E8 \
    max-mtu=1500 mode=ip netmask=24 port=1194 require-client-certificate=no

This is an interface associated with the OpenVPN server, which I am not
using. The thing is, the mac-address attribute seems to be a generated
value and it changes (how often or why, I'm not sure). As a result every
time rancid would run, it would log a config change because this value
was different.

I implemented a quick and dirty patch to mtrancid to simply ignore the
set auth= line inside of the ovpn-server interface so that the config
would not change each run.

Has someone else run in to this? Did they solve the problem in a
different way? It might be better to make this ignore just the
mac-address attribute, rather than the entire config line, but it didn't
matter to me as I'm not using that interface.

Here is my patch:

--- a/bin/mtrancid.in
+++ b/bin/mtrancid.in
@@ -236,10 +236,12 @@ sub SystemLicensePrint {
 sub Export {
        print STDERR "    In Export: $_" if ($debug);
        my $buffer = "";
+       my $ovpn   = 0;

        while (<INPUT>) {
                if (/$prompt/) { $found_end=1; $clean_run=1; return 0};
+               if (/interface ovpn-server server/) { $ovpn = 1; }
                next if(/^(\s*|\s*$cmd\s*)$/);
                next if(/^#/);
                return(1) if /(bad command name )/;
@@ -259,7 +261,11 @@ sub Export {
                        # Fix quoted strings
                        $buffer =~ s/(\S+)="(\S+)"/$1=$2/g;

-                       ProcessHistory("","","","$buffer");
+                       if ($ovpn && $buffer =~ m/\s*set auth/) {
+                               $ovpn = 0;
+                       } else {
+                               ProcessHistory("","","","$buffer");
+                       }
                        $buffer = "";

Steven Saner <ssaner at hubris.net>                      Voice:  316-858-3000
Director of Network Operations                          Fax:  316-858-3001
Hubris Communications                                http://www.hubris.net

More information about the Rancid-discuss mailing list