Lecture de script

N’étant pas un spécialiste des scripts je vous passe celui de hylafax pour la réception.
Ma question est :
"Ou se trouve la partie correspondant à la création du fichier fax0000?.tif sachat que le ‘?’ est un int de type auto (ou counter suivant vos habitudes) ?"
Je voudrais assigner le chmod 666 au fichier généré automatiquement, pour qu’il soit lisible depuis mes partages SAMBA.

#! /bin/sh
#	$Id: faxrcvd.sh.in,v 1.27 2006/01/09 19:26:37 aidan Exp $
#
# HylaFAX Facsimile Software
#
# Copyright (c) 1990-1996 Sam Leffler
# Copyright (c) 1991-1996 Silicon Graphics, Inc.
# HylaFAX is a trademark of Silicon Graphics
# 
# Permission to use, copy, modify, distribute, and sell this software and 
# its documentation for any purpose is hereby granted without fee, provided
# that (i) the above copyright notices and this permission notice appear in
# all copies of the software and related documentation, and (ii) the names of
# Sam Leffler and Silicon Graphics may not be used in any advertising or
# publicity relating to the software without the specific, prior written
# permission of Sam Leffler and Silicon Graphics.
# 
# THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
# EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
# WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
# 
# IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
# ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
# WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
# LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
# OF THIS SOFTWARE.
#

#
# faxrcvd file devID commID error-msg
#
if [ $# -lt 4 ]; then
    echo "Usage: $0 file devID commID error-msg [ callID-1 [ callID-2 [ ... [ callID-n ] ] ] ]"
    exit 1
fi

test -f etc/setup.cache || {
    SPOOL=`pwd`
    cat<<EOF

FATAL ERROR: $SPOOL/etc/setup.cache is missing!

The file $SPOOL/etc/setup.cache is not present.  This
probably means the machine has not been setup using the faxsetup(8)
command.  Read the documentation on setting up HylaFAX before you
startup a server system.

EOF
    exit 1
}

# These settings may not be present in setup.cache if user upgraded and
# didn't re-run faxsetup; we set them before calling setup.cache for
# backward compatibility.
ENCODING=base64
MIMENCODE=mimencode
TIFF2PDF=bin/tiff2pdf
TTYCMD=tty

. etc/setup.cache

INFO=$SBIN/faxinfo
FAX2PS=$TIFFBIN/fax2ps
TIFF2PS=tiff2ps
TOADDR=FaxMaster
FROMADDR=fax
TIFFINFO=tiffinfo
NOTIFY_FAXMASTER=always

#
# Redirect errors to a tty, if possible, rather than
# dev-nulling them or allowing them to creep into
# the mail.
#
if $TTYCMD >/dev/null 2>&1; then
    ERRORSTO=`$TTYCMD`
else
    ERRORSTO=/dev/null
fi

#
# Permit various types of attachment types: ps, tif, pdf
# Note that non-ASCII filetypes require an encoder.
# pdf requires tiff2ps and tiff2pdf
#
FILETYPE=ps
SENDTO=

#
# There is no good portable way to find out the fully qualified
# domain name (FQDN) of the host or the TCP port for the hylafax
# service so we fudge here.  Folks may want to tailor this to
# their needs; e.g. add a domain or use localhost so the loopback
# interface is used.
#
HOSTNAME=`hostname`			# XXX no good way to find FQDN
PORT=4559				# XXX no good way to lookup service

FILE="$1"; shift;
DEVICE="$1"; shift;
COMMID="$1"; shift;
MSG="$1"; shift;
COUNT=1
while [ $# -ge 1 ]; do
    # The eval has $1 set yet, and this forces a variable-to-variable
    # assignment, allowing us to not need to do escaping
    eval CALLID$COUNT='$1'
    shift
    COUNT=`expr $COUNT + 1`
done
CIDNUMBER="$CALLID1"
CIDNAME="$CALLID2"
DESTINATION="$CALLID3"

FILENAME=`echo $FILE | $SED -e 's/\.tif//' -e 's/recvq\///'`
SENDER="`$INFO $FILE | $AWK -F: '/Sender/ { print $2 }' 2>$ERRORSTO | $SED 's/^.//'`"
SUBADDR="`$INFO $FILE | $AWK -F: '/SubAddr/ { print $2 }' 2>$ERRORSTO | $SED 's/^.//'`"

#
# Apply customizations.  All customizable variables should
# be set to their non-customized defaults prior to this.
#
if [ -f etc/FaxDispatch ]; then
    . etc/FaxDispatch		# NB: FaxDispatch sets SENDTO
fi

#
# Produce mailable encoding for binary files.
#
encode()
{
    if [ -x "$MIMENCODE" ]; then
	$MIMENCODE < $1 2>$ERRORSTO
    elif [ -x "$UUENCODE" ]; then
	if [ "$ENCODING" = "base64" ]; then
	    $UUENCODE -m $1 $1 | grep -E -v "^begin|^====$" 2>$ERRORSTO
	else
	    $UUENCODE $1 $1 | grep -E -v "^begin|^====$" 2>$ERRORSTO
	fi
    else
	# Do not use "-x" for backward compatibility; even if it fails
	# this is last chance to encode data, so there's nothing to lose.
	$MIMENCODE < $1 2>$ERRORSTO
    fi
}

if [ -f $FILE ]; then
    #
    # Don't send FaxMaster duplicates, and FaxMaster may not even
    # want a message at all, depending on NOTIFY_FAXMASTER.
    #
    case $NOTIFY_FAXMASTER$MSG in
	never*)		NOTIFY_FAXMASTER=no;;
	errors)		NOTIFY_FAXMASTER=no;;
	*)		NOTIFY_FAXMASTER=yes;;
    esac
    if [ "$TOADDR" != "$SENDTO" ] && [ "$NOTIFY_FAXMASTER" != "no" ]; then
	(echo "To: $TOADDR"
	 echo "From: The HylaFAX Receive Agent <$FROMADDR>"
	 echo "Subject: Facsimile received from $SENDER";
	 echo ""
	 echo "$FILE (ftp://$HOSTNAME:$PORT/$FILE):"; $INFO -n $FILE
	echo "ReceivedOn: $DEVICE"
	if [ "$MSG" ]; then
	    echo ""
	    echo "The full document was not received because:"
	    echo ""
	    echo "    $MSG"
	    echo ""
	    echo "    ---- Transcript of session follows ----"
	    echo ""
	    if [ -f log/c$COMMID ]; then
		$SED -e '/-- data/d' \
		 -e '/start.*timer/d' -e '/stop.*timer/d' \
		 log/c$COMMID
	    elif [ -n "$COMMID" ]; then
		echo "    No transcript available (CommID c$COMMID)."
	    else
		echo "    No transcript available."
	    fi
	else
	    echo "    CommID: c$COMMID (ftp://$HOSTNAME:$PORT/log/c$COMMID)"
	fi
	if [ -n "$SENDTO" ]; then
	    echo ""
	    echo "The facsimile was automatically dispatched to: $SENDTO." 
	fi
	) 2>$ERRORSTO | $SENDMAIL -f$FROMADDR -oi $TOADDR
    fi
    if [ -n "$SENDTO" ]; then
	(MIMEBOUNDARY="NextPart$$"
	 echo "Mime-Version: 1.0"
	 echo "Content-Type: Multipart/Mixed; Boundary=\"$MIMEBOUNDARY\""
	 echo "Content-Transfer-Encoding: 7bit"
	 echo "To: $SENDTO"
	 echo "From: The HylaFAX Receive Agent <$FROMADDR>"
	 echo "Subject: Facsimile received from $SENDER";
	 echo ""
	 echo "--$MIMEBOUNDARY"
	 echo "Content-Type: text/plain; charset=us-ascii"
	 echo "Content-Transfer-Encoding: 7bit"
	 echo ""
	 $INFO -n $FILE
	 echo "ReceivedOn: $DEVICE"
	 if [ "$MSG" ]; then
	    echo ""
	    echo "The full document was not received because:"
	    echo ""
	    echo "    $MSG"
	    echo ""
	    echo "    ---- Transcript of session follows ----"
	    echo ""
	    if [ -f log/c$COMMID ]; then
		$SED -e '/-- data/d' \
		     -e '/start.*timer/d' -e '/stop.*timer/d' \
		     log/c$COMMID
	    elif [ -n "$COMMID" ]; then
		echo "    No transcript available (CommID c$COMMID)."
	    else
		echo "    No transcript available."
	    fi
	 else
	    echo "    CommID: c$COMMID"
	 fi
	 echo ""
	 echo "--$MIMEBOUNDARY"
	 if [ "$FILETYPE" = "tif" ]; then
	     echo "Content-Type: image/tiff; name=\"$FILENAME.tif\""
	     echo "Content-Description: FAX document"
	     echo "Content-Transfer-Encoding: $ENCODING"
	     echo "Content-Disposition: attachment; filename=\"$FILENAME.tif\""
	     echo ""
	     encode $FILE;
	 elif [ "$FILETYPE" = "pdf" ]; then
	     echo "Content-Type: application/pdf; name=\"$FILENAME.pdf\""
	     echo "Content-Description: FAX document"
	     echo "Content-Transfer-Encoding: $ENCODING"
	     echo "Content-Disposition: attachment; filename=\"$FILENAME.pdf\""
	     echo ""
	     $TIFF2PDF -o $FILE.pdf $FILE
	     encode $FILE.pdf
	     $RM -f $FILE.pdf 2>$ERRORSTO
	 else #  default as Postscript
	     echo "Content-Type: application/postscript; name=\"$FILENAME.ps\""
	     echo "Content-Description: FAX document"
	     echo "Content-Transfer-Encoding: 7bit"
	     echo "Content-Disposition: attachment; filename=\"$FILENAME.ps\""
	     echo ""
	     $FAX2PS $FILE 2>$ERRORSTO
	 fi
	 echo ""
	 echo "--$MIMEBOUNDARY--"
	) 2>$ERRORSTO | $SENDMAIL -f$FROMADDR -oi $SENDTO
    fi
else
    #
    # Generate notification mail for a failed attempt.
    #
    (echo "To: $TOADDR"
     echo "From: The HylaFAX Receive Agent <$FROMADDR>"
     echo "Subject: facsimile not received"
     echo ""
     echo "An attempt to receive facsimile on $DEVICE failed because:"
     echo ""
     echo "    $MSG"
     echo ""
     echo "    ---- Transcript of session follows ----"
     echo ""
     if [ -f log/c$COMMID ]; then
	$SED -e '/-- data/d' \
	     -e '/start.*timer/d' -e '/stop.*timer/d' \
	    log/c$COMMID
     elif [ -n "$COMMID" ]; then
	echo "    No transcript available (CommID c$COMMID)."
     else
	echo "    No transcript available."
     fi
    ) 2>$ERRORSTO | $SENDMAIL -f$FROMADDR -oi $TOADDR
fi

Si une méthode plus “debian” existe je suis preneur.

bonsoir,
je vois pas là comme ça au premier coup d’oeil … Donnes nous plutôt une phrase prise dans ce fichier pour qu’on situe le bloc où elle intervient …
De plus, tu ne pourras pas appeller un chmod dans ce script vu qu’à mon avis, il s’exécute pas en root … (mais il y a une solution).

salut,

FILENAME=`echo $FILE | $SED -e 's/\.tif//' -e 's/recvq\///'` 

C’est quoi ton soucis en question ?

il doit y avoir quelquechose à faire avec ulimit sur l’environnement du compte utilisateur sous lequel tourne hylafax (c.à.d. sans doute, l’user hylafax).

[quote=“stonfi”]salut,

FILENAME=`echo $FILE | $SED -e 's/\.tif//' -e 's/recvq\///'` 

C’est quoi ton soucis en question ?[/quote]

Bon c’est bien ce que je pensais, en gros la commande echo créer le fichier et le résultat, donc le nom du fichier est stocké dans la variable FILENAME, ok?

Au passage qu’est-ce que le ‘`’ ?

le fichier créé à ce moment la est du type rw------- donc avec les droits root ceci n’implique pas que c’est root qui exécute la commande ?

à la suite de cette commande je ne peux pas faire un :

`echo chmod 666 $FILENAME` ?

Ah ben oui peut-être que c’est en root alors, ou ça dépend du masque par défaut du repertoire où se crée le fichier, ou bien encore du bit (je sais plus) ‘s’ du repertoire où il est créé …
Bon, si la commande renomme ne effet le fichier $FILE en $FILENAME en modifiant l’extension (il me semble), c’est un chmod 666 $FILENAME, si par contre $FILENAME ne contient qu’une variable string, que le fichier existe en fait toujours sous $FILE, ben c’est chmod 666 $FILE.
tu rajoutes cette ligne au moment où le fichier se crée, ça va pas te casser la machine :wink: et tu vois …
' ce genre de signe signifie qu'il faut executer ce qui se trouve entre comme une commande `