#!/usr/bin/perl -I/usr/local/sauron
#
# export-networks  generates /etc/networks file (from given server)
#
# Copyright (c) Michal Kostenec <kostenec@civ.zcu.cz> 2013-2014.
# Copyright (c) Timo Kokkonen <tjko@iki.fi>  2001,2003.
# $Id: export-networks,v 1.7 2003/12/28 19:29:11 tjko Exp $
#
require 5;
use Getopt::Long;
use Time::Local;
use Sauron::DB;
use Sauron::Util;
use Sauron::BackEnd;
use Sauron::Sauron;

load_config();

$VER = sauron_version();
$user = (getpwuid($<))[0];
$host = `hostname`;
$host =~ s/\n//g;
$time_now = localtime;

GetOptions("help|h","verbose|v","all|a","comments");

if ($opt_help || @ARGV < 1) {
  print "syntax: $0 [--help] [--verbose] [--comments] [--all] <servername>\n";
  print "\n" if ($opt_help);
  exit(0);
}

$opt_verbose = ($opt_verbose ? 1 : 0);
$opt_comments = ($opt_comments ? 1 : 0);
$opt_all = ($opt_all ? 1 : 0);
$servername=shift;

db_connect();

$serverid=get_server_id($servername);
fatal("cannot find server '$servername'") unless ($serverid > 0);


unless ($opt_all) {
  $rule1=' AND no_dhcp=false ';
}

undef @q;
db_query("SELECT net,netname,comment,name " .
	 "FROM nets " .
	 "WHERE server=$serverid $rule1 " .
	 "ORDER BY net",\@q);

$found=@q;
print STDERR "Found $found network(s)\n" if ($opt_verbose);

print "# /etc/networks  -- automagically generated (by Sauron $VER)\n",
      "#\n# server: $servername\n",
      "# created by $user\@$host at $time_now\n#\n",
      "# network-name                           network-number\n",
      "# ------------                           --------------\n#\n";


for $i (0..$#q) {
  if ($q[$i][0] =~ /^127/) {
    $loopback_found=1;
    last;
  }
}

unless ($loopback_found) {
  $names{'loopback'}++;
  printf "%-40s %-15s %s\n", 'loopback', '127.0.0.1/32', '';
  print "#\n";
}


for $i (0..$#q) {
  ($net=$q[$i][0]); # =~ s/\/\d+\s*$//;
  #$net =~ s/\.0//g;
  ($name=$q[$i][1]) =~ s/\s+/_/g;

  if ($name) {
    $nname=substr($name,0,35);
    if ($names{$nname}) {
      print STDERR "network name collision: $name\n" if ($opt_verbose);
      $names{$nname}++;
      $nname.="-$names{$nname}";
    } else {
      $names{$nname}++;
    }
  } else {
    $nname='#';
  }

  $comment = $q[$i][3] . ($q[$i][2] ? ", $q[$i][2]":"");
  printf "# %s\n", $comment if ($opt_comments);
  printf "%-40s %-15s\n", $nname, $net;
}


print "#\n# eof\n";

exit 0;

# eof

