[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: commandes dans un bash script



Bonjour,

Le 19 Jul, Yann K. a écrit:
> Dans un bash-script, je souhaiterai automatiser la saisi de connection
> à un tierce programme, lui passer des arguments, le faire agir, et le
> quitter sans avoir à rien saisir au clavier.
> 
> Exemple au clavier:
>    # cyradm localhost
>    : log_admin
>     : mdp_admin
>    > cm user. $toto
>    > sq user.$toto 10000
>    > exit
>    # echo "merci d'être venu!"
> 
> Comment puis je passer ces commandes dans le script?...
> Dès que le prog arrive à la ligne "cyradm localhost",
> cyradmin prends la main et me demande de m'identifier (alors que j'ai
> saisi les éléments dans les lignes suivantes...)
Pour te faire un tel truc, il te faudrai expect, car les machins a mot
de passe s'assurent toujours d'avoir a faire a un terminal, et ne cause
qu'au terminal, pas  a l'entrée standard, enfin 9 fois sur 10

Cela étant dit, cyradm est scriptable, en TCL.(je crois qu'il contient
expect)... Y'a un truc pour faire du password en pas interactif avec
cyradm.
Genre le fichier joint. Mais fait gaffe au permission (700) car le mot
de passe est en clair dedans. de meme que le nom de l'administrateur
cyrus.
Cherche la chaine Main dans le script pour savoir ce qu'il fait.

	Christophe.
-- 
char*p="[)1++++++11+(QI1)9191991)9)1)(II1)919Y91)9)1)(AK+9;991+3*(9I1*IY991)Q1\
)(1I1))A91991)Q1)(+)1)1++9;)Q1+(";main(_){while(*p){for(_=*p-32>>3;_;--_)
putchar(' ');if(!(_=*p++-32&7))putchar('\n');else while(_--)printf("_/");}}
#! /bin/sh
# restart trick \
exec cyradm -file "$0" ${1+"$@"}



global con
global adminname

#
# Renvoie une liste contenant : 1 nom d'utilisateur
#                               1 mot de passe
# Procedure interactive qui demande sur le terminal un nom et un mot de passe
proc getpassword_inter {} {
	global con adminname
	puts -nonewline "nom d'administrateur ([$con servername]) : "
	flush stdout
	if {[gets stdin adminname] == -1} {
		puts stderr "Huuu. rien a lire.... comme c'est bizarre"
		exit 1
	}
	exec stty -echo
	puts -nonewline "Mot de passe : "
	flush stdout
	if {[gets stdin passwd] == -1} {
		exec stty echo
		puts stderr "Huuu. rien a lire.... comme c'est bizarre"
		exit 1
	}
	exec stty echo
	puts {}
	list $adminname $passwd
}

#
# Renvoie une liste contenant : 1 nom d'utilisateur
#                               1 mot de passe
# Procedure non interactive qui retourne un nom et un mot de passe
proc getpassword_noninter {} {
	global adminname

	list [set adminname nom_administrateur] mot_de_passe
}


# cree une boite a lettre pour le user
# un 2eme parametre est facultatif : la partition
proc creemb {user {partition {}}} {
	global con

	if {{} == $partition} {
		$con createmailbox user.$user
	} else {
		$con createmailbox user.$user $partition
	}
}

# detruit une boite a lettre pour le user
proc detruitmb {user} {
	global con adminname

	$con setaclmailbox user.$user $adminname all
	$con deletemailbox user.$user
}

#
# renomme une bal de user vers destuser
# un 2eme parametre est facultatif : la partition
proc renommemb {user destuser {partition {}}} {
	global con

	if {{} == $partition} {
		$con renamemailbox user.$user user.$destuser
	} else {
		$con renamemailbox user.$user user.$destuser $partition
	}
}


#
# Detruit toutes les boites a lettres
proc detruittouteslesboite {} {
	global con adminname

	foreach i [$con listmailbox user.*] {
		set name [lindex $i 0]
		$con setaclmailbox $name $adminname all
		$con deletemailbox $name
	}
}

#
#
# Main
#


# usage : addmbox server file
# ce script cree des tas et des tas de boites à lettres depuis le contenu
# d'un fichier
# le fichier contient sur chaque ligne, un nom d'utilisateur
# Cela crée alors les bal user.utilisateur1, user.utilisateur2, etc...


set filename [lindex $argv 1]
set f [open $filename r]

cyradm connect [set con [lindex $argv 0]]
$con authenticate -pwcommand getpassword_noninter

while {[gets $f line] != -1} {
	if [regexp {^[a-zA-Z0-9]+$} $line] {
		creemb $line
	} else {
		puts stderr "rejecting funny name -->'$line'<--"
	}

}


Reply to: