OVH Cloud OVH Cloud

[expect] Fonctionnement différent entre Linux et NetBSD

12 réponses
Avatar
JKB
Bonjour à tous,

J'utilise dans un script expect pour envoyer un mail à un
utilisateur (je ne peux pas faire autre chose qu'un telnet sur le
port 587 pour des raisons trop longues à expliquer ici, donc me dire
d'utiliser la commande mail _n'est pas une solution_).

Sur un serveur Linux, j'avais écrit :

expect << EOS 1> /dev/null 2>&1
set timeout 10
spawn telnet localhost 587
expect \
{
"220 *" { puts Nice... }
timeout { puts error; exit }
}
send -- "EHLO localhost\r"
expect \
{
"250 *" { puts Nice... }
timeout { puts error; exit }
}
send "MAIL FROM:<$EXPEDITEUR>\r"
expect \
{
"250 *" { puts Nice... }
timeout { puts error; exit }
}
send "RCPT TO:<$DESTINATAIRE>\r"
expect \
{
"250 *" { puts Nice... }
timeout { puts timeout; exit }
}
send "DATA\r"
expect \
{
"354 *" { puts Nice... }
timeout { puts error; exit }
}
send "X-content-type: $FILTRES\r"
send "X-sequence-id: $HASH\r"
send "X-sequence: $PAQUET\r"
send "X-last: $2\r"
send "X-hash: $(md5sum $1 | cut -f1 -d' ')\n"
send "X-in-reply-to: $IN_REPLY_TO\r"
send "X-expiration: $EXPIRATION\r"
send "Subject: $SUJET\r\r"
send "$CORPS"
send "\r.\r"
expect \
{
"250 *" { puts Nice... }
timeout { puts timeout; exit }
}
send -- "QUIT"

Ça fonctionne parfaitement (moyennant le positionnement des
variables en question). J'ai migré ce script sous NetBSD et là, j'ai
une surprise que je ne saisis pas.

La variable $CORPS contient un fragment de fichier encodé et
chiffré (longueur des lignes : 76 caractères). Il y a un md5 pour
s'assurer de la validité des données transmises.

Sous les deux OS, la variable CORPS est strictement identique.
Pourtant, dans la sortie d'expect, sous Linux, j'ai un \r et sous
NetBSD un \r\n d'où un saut de ligne supplémentaire qui me met ma
somme md5 par terre.

Je viens de lire et de relire la doc d'expect, visiblement, ça ne se
configure pas. Alors comment faire ?

Merci pour toute suggestion,

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr

2 réponses

1 2
Avatar
Olivier Miakinen
Le 05/02/2013 23:36, Cyrille Lefevre a écrit :

ne peux-tu pas utiliser des entêtes mimes standard ?
par ex. :
MIME-Version: 1.0
Content-Transfer-Encoding: plain



« 8bit » au lieu de « plain », je suppose.

Cordialement,
--
Olivier Miakinen
Avatar
JKB
Le Tue, 05 Feb 2013 23:36:58 +0100,
Cyrille Lefevre <cyrille.lefevre-news% écrivait :
Le 30/01/2013 21:38, JKB a écrit :

Oui, je sais. Mon cas est très spécifique puisque je bidouilleles
en-têtes SMTP (je parle d'un serveur à un autre que je maîtrise pour
une transmission de données un peu particulière). Utiliser la
commande sendmail ne me permet pas toutes les bizarreries voulues
;-)




Bonjour,

c'est quoi le pb avec ce qui suit ?
l'option -t permet de faire ce que l'on veux avec les entêtes, non ?

sendmail -t << EOF
From: <$EXPEDITEUR>
To: <$DESTINATAIRE>
Subject: $SUJET
X-content-type: $FILTRES
X-sequence-id: $HASH
X-sequence: $PAQUET
X-last: $2
X-hash: $(md5sum $1 | cut -f1 -d' ')
X-in-reply-to: $IN_REPLY_TO
X-expiration: $EXPIRATION

$CORPS
EOF



Ce n'est pas équivalent. J'ai simplifié le script que j'ai posté ici
(il gére finement les erreurs, ce que ne fait pas sendmail -t).

ne peux-tu pas utiliser des entêtes mimes standard ?
par ex. :
MIME-Version: 1.0
Content-Transfer-Encoding: plain
Content-Type: text/html; charset="ISO-8859-1"
pour du HTML, etc. ça peut aider le voyage entre les passerelle SMTP.



Quel en serait l'intérêt. C'est du SMTP bricolé entre deux machines
que je maîtrise. Je ne cherche pas à utiliser ça sur un réseau
public. L'idée est d'utiliser les caractéristiques du SMTP (en terme
de fiabilité de la transmission) pour transmettre des données sur un
réseau au fonctionnement aléatoire. Et en dehors du problème de
base64 évoqué (et résolu) plus haut, ça fonctionne très bien depuis
plus d'un an.

Cordialement,

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
1 2