Bon, voila , il y a quelques temps, j'ai écrit ce script qui permet de partager ou départager un répertoire sous samba. Ca ne modifie pas les options de smb.conf.
script toto -> partage toto s'il n'est pas partagé
script toto -> départage toto s'il n'est partagé
L'idée de départ est de mettre çà dans le menu contextuel "scripts" de gnome2
Voila , si ca peut servir à qq.
#!/bin/sh
# copyleft myocastor
# myocastor@netcourrier.com
# "Coded with feet"
# parametres globaux
smbconf="/etc/samba/smb.conf"
script="/etc/init.d/samba restart"
declare -i SHARESSTART
declare -i SHARESSTOP
declare -i NBSHARE
declare -i i
function verif
{
echo "Partages : "$SHARE
echo " "
echo "Nom de partage ligne debut ligne fin repertoire"
echo " "
for i in $(seq 1 $NBSHARE) ; do
echo ${NOMSHARES[i]} ${SHARESSTART[i]} ${SHARESSTOP[i]} ${SHAREPATH[i]}
done
}
function SuppressionPartage
{
if [ -f $smbconf.old ] ; then
rm -fr $smbconf.old
fi
mv $smbconf $smbconf.old
EXPR="cat $smbconf.old | sed '${SHARESSTART[$1]},${SHARESSTOP[$1]}d'"
eval $EXPR > $smbconf
eval $script
}
function AjouterPartage
{
local k
declare -i j
j=$((0))
ok="0"
NOMTESTE=$REP
while [ "$ok" = "0" ] ; do
corr="0"
for i in $(seq 1 $NBSHARE) ; do
if [ "$NOMTESTE" = ${NOMSHARES[i]} ] ; then
corr="1"
fi
done
if [ "$corr" = "0" ] ; then
ok="1"
else
NOMTESTE=$REP$j
j=$((j+1))
fi
done
echo " ">>$smbconf
echo "[$NOMTESTE]">>$smbconf
echo " comment = " >> $smbconf
echo " path = $PWD/$REP" >> $smbconf
echo " valid users = @partage" >> $smbconf
echo " public = no" >> $smbconf
echo " writable = yes" >> $smbconf
eval $script
}
# determiner les partages (les sections commencent par la
# declaration [...]
ENTETE="^[ ]*[[]\{1\}\(.\+\$*\)[]]\{1\}[ ]*$"
EXPR="cat $smbconf | sed -n 's/$ENTETE/\1/gp'"
SHARE=$(eval $EXPR)
NBSHARE=$(eval $EXPR | wc -l)
# determiner la ligne de demarrage du partage
# stocker dans NOMSHARE
# et SHARESSTART
# le dernier partage est fictif (fin de fichier)
for i in $(seq 1 $NBSHARE) ; do
EXPR3="$EXPR | sed -n '$i,${i}p'"
NOMSHARES[i]=$(eval $EXPR3)
EXPR2="cat $smbconf | sed -n '/^[ ]*[[]\{1\}${NOMSHARES[i]}[]]\{1\}[ ]*$/='"
SHARESSTART[i]=$(eval $EXPR2)
done
i=$((i+1))
SHARESSTART[i]=$(cat $smbconf|wc -l)+1
# determiner la ligne de fin de partage
# stocker dans SHARESSTOP
# ensuite, un sed 'debut,find' supprimera sur stdout
# le partage dans smb.conf
for i in $(seq 1 $NBSHARE) ; do
SHARESSTOP[i]=${SHARESSTART[i+1]}-1
done
# determiner le nom du repertoire du partage
for i in $(seq 1 $NBSHARE) ; do
EXPR4="^[ ]*[pP][aA][tT][hH][ ]*=[ ]*\(\/.\+\/*\)[ ]*$"
EXPR3="cat $smbconf| sed -n '${SHARESSTART[i]},${SHARESSTOP[i]}p'| sed -n 's/$EXPR4/\1/gp'"
SHAREPATH[i]=$(eval $EXPR3)
done
REP="$1"
SUPP=$((0))
for i in $(seq 1 $NBSHARE) ; do
if [ "$PWD/$REP" = "${SHAREPATH[i]}" ] ; then
# departager le repertoire
SuppressionPartage $i
SUPP=$((1))
fi
done
if [ $SUPP -eq 0 ] ; then
AjouterPartage
fi