diff -ruN rancid-2.3.8~/bin/rancid-fe.in rancid-2.3.8/bin/rancid-fe.in
--- rancid-2.3.8~/bin/rancid-fe.in
+++ rancid-2.3.8/bin/rancid-fe.in
@@ -86,12 +86,19 @@
     'zebra'		=> 'zrancid'
 );
 
-if ($vendortable{$vendor} eq "") {
+my $script;
+my $vendor_env = "CUSTOM_VENDOR_$vendor";
+$vendor_env =~ tr/-a-z/_A-Z/;
+if ($ENV{$vendor_env} ne "") {
+    # Environment checked first so that it may override the built-in table.
+    $script = $ENV{$vendor_env};
+} elsif ($vendortable{$vendor} ne "") {
+    $script = $vendortable{$vendor};
+} else {
     printf(STDERR "unknown router manufacturer for $router: $vendor\n");
     exit(-1);
-} else {
-    exec($vendortable{$vendor} . " $router");
 }
 
-printf(STDERR "exec failed router manufacturer $vendor: $!\n");
+exec("$script $router");
+printf(STDERR "exec failed router manufacturer $vendor: $script: $!\n");
 exit(-1);
diff -ruN rancid-2.3.8~/man/rancid.conf.5.in rancid-2.3.8/man/rancid.conf.5.in
--- rancid-2.3.8~/man/rancid.conf.5.in
+++ rancid-2.3.8/man/rancid.conf.5.in
@@ -50,6 +50,20 @@
 Default: @localstatedir@
 .\"
 .TP
+.BI CUSTOM_VENDOR_ vendor
+Specifies a custom rancid script for devices of type
+.IR vendor .
+Multiple variables may be specified,
+and may override values from the built-in vendor table in
+.BR rancid-fe .
+.sp
+The
+.I vendor
+suffix should be in upper case, with underscores rather than hyphens.
+.sp
+Example: CUSTOM_VENDOR_ACME_CO=acmerancid
+.\"
+.TP
 .B CVSROOT
 .IR cvs (1)
 and
