3 # réagit en fonction de "QUERY_STRING" :
4 # set=xx-xx-xx-xx-xx-xx renvoie un fichier .set
5 # cfg=xx-xx-xx-xx-xx-xx renvoie le fichier de config
7 BASEMICROLOGICIEL=micrologiciel
8 BASECONFIGURATION=configuration
10 # fin de la configuration
12 TAILLEMICROLOGICIEL=983040
16 echo "${PROGRAMME}: ERREUR: $@" 1>&2
20 TEMPFILE="$(tempfile)"
21 trap "rm \"$TEMPFILE\"" 0 1 15
23 # analyse de QUERY_STRING : type de requete, adresse mac
24 TYPE=`expr match "$QUERY_STRING" '\([[:alpha:]]\+\)='`
25 MAC=`expr match "$QUERY_STRING" '.*=\([[:xdigit:]-]\{17\}\)' | tr A-F a-f`
26 # echo type=$TYPE mac=$MAC
29 version_micrologiciel () {
30 # entrée : un nom de fichier micrologiciel
31 # au format ...-${version_auteur}-auf${version_auf}...
32 # sortie : le numéro de version au standard AuF
33 version_auteur=`expr match "$1" '.*-\([0-9]\+\)-'`
34 [ ${#version_auteur} != 3 ] && return 1
35 version_auf=`expr match "$1" '.*-auf\([0-9]\+\)'`
36 [ ${#version_auf} = 1 ] && version_auf="0${version_auf}"
37 [ ${#version_auf} != 2 ] && return 1
38 echo "${version_auteur}${version_auf}"
43 # on cherche d'abord un micrologiciel pour l'adresse MAC donnée
44 # (permet de proposer un micrologiciel spécifique par poste)
45 MICROLOGICIEL="${BASEMICROLOGICIEL}-${1}"
46 while [ -L "${MICROLOGICIEL}" ]
48 MICROLOGICIEL=`readlink "${MICROLOGICIEL}"`
50 # s'il n'y a pas de micrologiciel spécifique, on prend celui par défaut
51 if [ ! -e "${MICROLOGICIEL}" ]
53 MICROLOGICIEL="${BASEMICROLOGICIEL}"
54 while [ -L "${MICROLOGICIEL}" ]
56 MICROLOGICIEL=`readlink "${MICROLOGICIEL}"`
59 if [ ! -e "${MICROLOGICIEL}" ]
61 erreur "fichier de micrologiciel '${MICROLOGICIEL}' inexistant"
64 # la version du micrologiciel
65 VERSION=`version_micrologiciel "${MICROLOGICIEL}"`
68 erreur "pas de version pour le micrologiciel '${MICROLOGICIEL}'"
71 TAILLE=`stat -c %s "${MICROLOGICIEL}"`
72 if [ "$TAILLE" != "$TAILLEMICROLOGICIEL" ]
74 erreur "taille du micrologiciel '${MICROLOGICIEL}' incorrecte"
77 echo "BIN ${MICROLOGICIEL}:${VERSION}"
82 # reçoit en argument l'adresse MAC du poste
83 # renvoie le numéro de série = numéro de série pour la config de base
84 # + numéro de série de la configuration du poste (si elle existe)
85 NOBASE=`sed 's/^.*NUMERO_DE_SERIE_BASE: *\([0-9]*\).*$/\1/p;d' ${BASECONFIGURATION}-base 2> /dev/null`
86 NOPOSTE=`sed 's/^.*NUMERO_DE_SERIE: *\([0-9]*\).*$/\1/p;d' ${BASECONFIGURATION}-${1} 2> /dev/null`
87 expr ${NOBASE:-0} + ${NOPOSTE:-0}
91 # reçoit en argument l'adresse MAC du poste
92 # renvoie simplement la concaténation fichier de base + fichier du poste
94 sed '/^#/d;/^[[:space:]]*$/d' "${BASECONFIGURATION}-base" 2> /dev/null
95 sed '/^#/d;/^[[:space:]]*$/d' "${BASECONFIGURATION}-${1}" 2> /dev/null
100 #echo "Connection: close"
101 echo "Content-Length: $(stat -c %s "$1")"
102 echo "Content-Type: text/plain"
109 # on renvoie le micrologiciel
110 micrologiciel $MAC >> "$TEMPFILE"
111 # puis la configuration : lien vers un appel à ce script avec
112 # QUERY_STRING=cfg suivi du numéro de version
113 echo -n "CFG ${MAC}.cfg:" >> "$TEMPFILE"
114 noserieconfig $MAC >> "$TEMPFILE"
115 echo "END" >> "$TEMPFILE"
120 configuration $MAC >> "$TEMPFILE"
125 erreur "type de requête non géré : '$TYPE'"