#!/usr/local/bin/perl # # en cours de mise au point par BF # # en cours de test # # CRI # Frédéric BOIVENT # decembre/1998 # # APPEL : tulp2sympa.pl # #Utilise des fichiers d'une liste de diffusion gérée par TULP #pour générer les fichiers utilisables par SYMPA pour cette même liste. # $tulp_dir = "/var/mailimailo/tulp/expl"; # $sympa_dir = "/var/mailimailo/sympa/expl"; # $charte_dir = "/web/htdocs/listes/admin-cri/chartes"; # $QUEUE="/var/mailimailo/sympa/bin/queue"; $priorite=3; sub traitement_ligne_config{ #Elimination des caractères '#' et'=' d'une ligne, #les deux mots clé sont placés dans @tab $_[0]=~/^\s*#\s*([a-zA-Z-]+)\s*=\s*([^\s]+)\s*$/; $tab[0]=$1; $tab[1]=$2; return(@tab); } sub config_tulp2sympa{ #"Traduction" des mots clés de TULP if($_[0]=~ /\s*Review\s*/){ #pour SYMPA. print CONFIG "review $_[1]\n"; # } if($_[0]=~ /\s*Subscription\s*/){ print CONFIG "subscription $_[1]\n"; } if($_[0]=~ /\s*Send\s*/){ print CONFIG "send $_[1]\n"; } if($_[0]=~ /\s*Notify\s*/){ } if($_[0]=~ /\s*Errors_To\s*/){ } if($_[0]=~ /\s*Owner\s*/){ print CONFIG "owner\n"; trait ($_[1],CONFIG,1); } if($_[0]=~ /\s*Editor\s*/){ print CONFIG "editor\n"; trait ($_[1],CONFIG,0); } if($_[0]=~ /\s*Reply-To\s*/){ if($_[1]=~/\s*list\s*/){ $traduc='list'; print "ATTENTION reply-to = list"; }elsif($_[1]=~/\s*sender\s*/){ $traduc='sender'; }else { $traduc='sender'; print CONFIG "# Reply-to = $_[1] (TULP) est changé en reply-to sender\n\n"; print "# Reply-to = $_[1] (TULP) est changé en reply-to sender\n\n"; } print CONFIG "reply-to $traduc\n"; } } sub trait{ #écriture d'un e_mail dans le fichier passé en paramètre #et gecos éventuel. $_[0]=~/^\s*([^\(\s]+)\s*(\(?.*\)?)\s*$/; print {$_[1]} "email $1\n"; if ($_[2]==1){ $PROPRIO_ALIAS=$1.','.$PROPRIO_ALIAS; } if ($_[2]==2){ $MODER_ALIAS=','.$1.$MODER_ALIAS; } if ($2 !~ /^$/){ print {$_[1]} "gecos $2\n\n"; }else{ print {$_[1]} "\n"; } } $list = $ARGV[0]; if (! $list) { die "Usage: $0 list-name " } if (! -e "$tulp_dir/$list.u") { die "Impossible d'ouvrir $list dans $tulp_dir"; } open (FICHTULP, "< $tulp_dir/$list.u") || die "Impossible d'ouvrir la config de $list (TULP)."; mkdir ("$sympa_dir/$list", 0700) || die "Impossible de créer le répertoire $list dans $sympa_dir."; mkdir ("$sympa_dir/$list/archives", 0700) || die "Impossible de créer le répertoire archives dans $sympa_dir/$list."; if (-e "$tulp_dir/$list.w") { open (DOTW, "< $tulp_dir/$list.w"); open (BIENVENUE, "> $sympa_dir/$list/bienvenue"); while () { print BIENVENUE; } close (DOTW); close (BIENVENUE); } open (STATS, "> $sympa_dir/$list/stats") ; open (CONFIG, "> $sympa_dir/$list/config"); open (ABON, "> $sympa_dir/$list/abonnes"); open (OBJET, "> $sympa_dir/$list/objet"); open (LISTLIST, "< $tulp_dir/lists") || die "Impossible d'ouvrir la liste des listes (TULP)."; $visibility ="conceal"; while($ligne=) { if ($ligne =~ /^$list,(.*)$/){ $subject=$1; $visibility ="noconceal"; open (LIST, ">>$sympa_dir/lists"); print LIST "$list \t $subject\n"; print OBJET "$subject\n"; close LIST; }elsif ($ligne =~ /^#$list,(.*)$/){ $subject=$1; $visibility ="conceal"; open (LIST, ">>$sympa_dir/lists.cacher"); print LIST "$list \t $subject\n"; print OBJET "$subject\n"; close LIST; } } close OBJET; close LISTLIST; print CONFIG "subject $subject\n\n"; # subject et visibility sont mis a jour print CONFIG "visibility $visibility\n\n"; print CONFIG "archive month\n\n"; while($ligne=) { if ($ligne =~ /\s*#\s*$/){ #ligne: # }elsif ($ligne =~ /^\s*$/){ #ligne:" vide " }elsif ($ligne =~ /\s*#.*=.*/){ #ligne: # xxxx = xxxxx @tab=traitement_ligne_config ($ligne); $key=@tab[0]; $val=@tab[1]; config_tulp2sympa ($key,$val); print CONFIG "\n"; }elsif ($ligne !~ /#/){ #ligne:" xxxx@xxx.xx " trait ($ligne,ABON,0); }else{ print "Ligne du $list.u de TULP non utilisées pour SYMPA :\n$ligne\n"; } } print CONFIG "priorite 3\n\n"; close STATS; close ABON; close FICHTULP; close CONFIG; chop $PROPRIO_ALIAS; open (ALIAS, "> $sympa_dir/$list/alias"); print ALIAS "# -------------------------------------- $list\n"; print ALIAS "$list: \"|$QUEUE $priorite $list $MODER_ALIAS\"\n"; print ALIAS "$list-request: $PROPRIO_ALIAS\n"; print ALIAS "$list-owner: $list-request\n"; close (ALIAS); system "cp -p $tulp_dir/$list/* $sympa_dir/$list/archives"; #copie du répèrtoire contenant les archives. system "/etc/chown -R sympa:sympa $sympa_dir/$list";