#!/usr/bin/perl

$version = "16";

# sert à l'automatisation des updates du côté serveur
if ($#ARGV == 0) {
	if ($ARGV[0] eq "v") {
		print "$version";
		exit;
	}
}



$id=`whoami`;
chomp $id;
if ($id eq "root") {
	print "Il NE faut PAS être 'root' pour tester.\n";
	exit;
}



# tests d'accessibilité de serveurs

$serveur_local30 = "192.168.30.130";
$serveur_internet = "epfc.nooware.net";
$net = "192.168.30.";


# si on donne 'f' comme argument il fait le test sur une 'fausse' adresse
# ce qui provoquera l'échec du test
if ($ARGV[0] eq "f") {
  $serveur_local30 = "192.168.30.139";
}
# si on donne 'n' comme argument il fait le test sur un 'faux' réseau
# ce qui provoquera l'échec du test
if ($ARGV[0] eq "n") {
  $net = "192.168.40.";
}



# /sbin/ifconfig = commande UNIX standard affichant l'état
# des interface réseau du système (if = InterFace)
# exécutez '/sbin/ifconfig' (ou mon alias 'ifc') 
# à la ligne de commande pour voir ce qu'elle affiche
@ifg=`/sbin/ifconfig`;
# récupéré dans un vecteur (@ifg): donc chaque ligne de l'affichage normal se retrouve
# dans un élément du vecteur @ifg
foreach (@ifg) {
	if (/^lo/) {
	# Si on arrive à la ligne qui commence par 'lo'
	# c'est qu'on n'a pas encore trouvé d'adresse IP,
	# car dès qu'on l'a trouvée, on sort de la boucle 
	# (par le 'last;' du 'elsif')
	# L'interface 'lo' a aussi une adresse IP
	# qui est toujours la m^eme : 127.0.0.1
	# mais ce n'est pas ça qui nous intéresse.
	# L'interface 'lo' est toujours affichée après 
	# les 'eth' par la commande /sbin/ifconfig .
	# En sortant tout de suite (par le 'last;)
	# on n'assigne pas de valeur à $ip 
	# qui, interprétée en contexte string, vaudra donc ""
		last;
	} elsif (/inet adr:/) {
	# si la ligne contient 'inet adr:'nv7
		s/.*inet adr:([^ ]*) .*/$1/;
		# on extrait l'adresse IP
		$ip = $1;
		last;
	}
}

if ( $ip =~ /^$net/) {
  $server_version = `perl udpget6 $serveur_local30 0.5 cs.version.server`;
  if ($server_version eq "") {
    $serveur_local30_accessible = "false";
  } else {
    $serveur_local30_accessible = "true";
  }
} else {
  $serveur_local30_accessible = "false";
  # ce n'est pas une certitude absolue,
  # mais la probabilité est très faible
  # d'avoir une telle adresse IP en dehors du local 30
  # dans le cas d'une connexion internet 'privée'
  # c'est à dire où l'adresse IP est
  # attribuée par le modem par le protocole 'dhcp'
}



if ($serveur_local30_accessible eq "true") {
# si le serveur du local 30 est accessible
	$serveur = $serveur_local30;

	$nom_du_script = $0;
	$nom_du_script =~ s/\.\///;
	if (($nom_du_script eq "csv.init") and (! -f "/etc/hd.nb")) {
	  exit;
	} else {
	# cas normal d'utilisation du script
	# lorsqu'il est installé dans /usr/local/bin
	# la plupart du temps en mode 'automatique' à partir du fichier /etc/rc.local
		$hdnb = `/bin/cat /etc/hd.nb`;
		if ($hdnb eq "") {
			$option = "l";
			# option locale
		} else {
			$option = "c";
			# option complète
		}
	}

} else {
  $server_version =  `curl -f -s --connect-timeout 1 192.168.30.130/cs.version.server`;
  # option -f = 'fail'          = pas de messages d'erreur élaborés
  # option -s = 'silent'        = pas de messages d'erreur 
  # option --connect-timeout 1  = timeout d'une seconde
  # (faire la commande 'man curl' pour voir l'explication des options)
  if ($server_version eq "") {
    $serveur_internet_accessible = "false";
  } else {
    $serveur_internet_accessible = "true";
  }
  
  if ($serveur_internet_accessible eq "true") {
  # si le serveur internet est accessible
	  $serveur = "$serveur_internet";
	  $option = "i";
	  # toujours partielle
  } else {
	  print "\nPas de serveur accessible !\n\n";
	  print "\nSTADARDISATION NON EFFECTUEE !\n\n";
	  exit;
  
  }
}

print "\$serveur = $serveur\n\n";
print "\$server_version = $server_version\n\n";
print "\$option = $option\n\n";

$installed_version = `/bin/cat /etc/cs.version`;
# version de cs actuellement installée
system("/bin/cp /etc/cs.version cs.version.atboot");
# la sauvegarder dans le fichier '/etc/cs.version.atboot'

if ( "$server_version" eq "") {
	print "\ncsv\n";
	print "\nVersion serveur de cs pas accessible !\n\n";
	print "\nSTADARDISATION NON EFFECTUEE !\n\n";
	exit;
}


system("/bin/echo -n $server_version > cs.version.server");
# sauvegarder la valeur dans le fichier 'cs.version.server'

# comparaison des versions de 'cs'
# et éventuelle exécution de 'cs'


