#!%TCLSH%

# $Id: dnsaddalias,v 1.6 2007/11/29 15:58:42 pda Exp $

#
# Script pour ajouter un alias dans la base
#
# Syntaxe :
#   dnsaddalias <fqdn-alias> <fqdn-machine>
#
# Historique
#   2004/09/24 : pda/jean : cration  partir du script cgi
#   2005/04/11 : pda/jean : adaptation
#   2007/10/25 : jean     : log des actions de modification
#

set conf(homeurl)	%HOMEURL%

#
# Chemins utiliss par les scripts
#

set conf(pkg)		%PKGTCL%
set conf(lib)		%DESTDIR%/lib
set conf(libdns)	$conf(lib)/libdns.tcl

#
# Quelques paramtres du script
#

set conf(base)		%BASE%
set conf(auth)		%AUTH%
set conf(nologin)	%NOLOGIN%
set conf(log)		%LOG%
set conf(defuser)	%DEFUSER%

#
# Les outils du parfait concepteur de pages Web dynamiques...
#

lappend auto_path $conf(pkg)
package require webapp
package require pgsql

#
# On y va !
#

# ::webapp::cgidebug ; exit

source $conf(libdns)

##############################################################################
# Petites fonctions utilitaires
##############################################################################

proc syntax-error {argv0} {
    regsub {.*/} $argv0 {} argv0
    puts stderr "usage: $argv0 fqdn-alias fqdn-machine"
    exit 1
}

##############################################################################
# Ajout d'un alias
##############################################################################

#
# Ajout d'un alias dans la base
#
# Entre :
#   - dbfd : accs  la base
#   - idcor : id du correspondant faisant l'ajout
#   - fqdnalias : nom complet de l'alias
#   - fqdnref : nom complet de la cible de l'alias
# Sortie :
#   - valeur de retour : message d'erreur, ou chane vide si ok.
#
# Historique
#   2004/09/29 : pda/jean : conception  partir du script CGI
#

proc add-alias {dbfd login idcor fqdnalias fqdnref} {
    #
    # Vrifier le FDQN de l'alias
    #

    set msg [syntaxe-fqdn $dbfd $fqdnalias nom domaine iddom]
    if {! [string equal $msg ""]} then {
	return $msg
    }

    #
    # Vrifier le FQDN de la cible
    #

    set msg [syntaxe-fqdn $dbfd $fqdnref nomref domaineref iddomref]
    if {! [string equal $msg ""]} then {
	return $msg
    }

    #
    # Valider les noms d'alias et de machine.
    #

    set msg [valide-droit-nom $dbfd $idcor $nom $domaine trr "alias"]
    if {! [string equal $msg ""]} then {
	return $msg
    }
    set iddom $trr(iddom)

    set msg [valide-droit-nom $dbfd $idcor $nomref $domaineref trrref "machine-existante"]
    if {! [string equal $msg ""]} then {
	return $msg
    }

    #
    # Tous les tests sont ok, il faut insrer l'alias
    #

    if {! [::pgsql::lock $dbfd {rr rr_cname} msg]} then {
	return "Transaction impossible : $msg"
    }

    #
    # Rien n'existait pour ce nom, donc on insre un nouveau
    # RR.
    #

    set msg [ajouter-rr $dbfd $nom $iddom "" 0 "" "" "" "" $idcor newrr]
    if {! [string equal $msg ""]} then {
	return "Impossible d'insrer : $msg"
    }

    #
    # Ajouter l'alias proprement dit
    #

    set sql "INSERT INTO rr_cname VALUES ($newrr(idrr), $trrref(idrr))"
    if {! [::pgsql::execsql $dbfd $sql msg]} then {
	return "Impossible d'insrer l'alias : $msg"
    }

    if {! [::pgsql::unlock $dbfd "commit" msg]} then {
       ::pgsql::unlock $dbfd "abort" m
       return "L'insertion a chou : $msg"
    }

    #
    # crire le log
    #

    writelog "ajoutalias" $login \
	"ajout de l'alias $fqdnalias -> $fqdnref (ligne de commande)"

    #
    # Sortie du rsultat
    #

    return ""
}

##############################################################################
# Programme principal
##############################################################################

proc main {argv0 argv} {
    global conf

    #
    # Initialisation des accs
    #

    set errmsg [init-dns-util $conf(nologin) $conf(auth) $conf(base) \
				    dbfd $conf(defuser) tabcor $conf(log)]
    if {! [string equal $errmsg ""]} then {
	puts stderr "$errmsg"
	puts stderr "Aborted."
	return 1
    }

    #
    # Validation des arguments
    #

    if {[llength $argv] != 2} then {
	syntax-error $argv0
	return 1
    }

    set fqdnalias [lindex $argv 0]
    set fqdnref   [lindex $argv 1]

    set msg [add-alias $dbfd $tabcor(login) $tabcor(idcor) $fqdnalias $fqdnref]
    if {! [string equal $msg ""]} then {
	puts stderr $msg
	puts stderr "Aborted."
	return 1
    }

    #
    # Dconnexion de la base
    #

    fermer-base $dbfd

    return 0
}

exit [main $argv0 $argv]
