#!/bin/bash
# 2006 (c) Etersoft http://etersoft.ru
# 2008 (c) Etersoft http://etersoft.ru
# 2011 (c) Etersoft http://etersoft.ru
# Authors:
#   Alexander Plikus <pav@etersoft.ru>
#   Vitaly Lipatov <lav@etersoft.ru>
# GNU Public License

# Command line tools for check and set correct file/dir permissions for shared databases
# Программа для проверки и установки прав на каталоги и файлы базы данных
# Устанавливает:
#   на каталоги: 02770: SGID, rwx на каталоги для владельца и группы
#   на файлы: 0660: rw для владельца и группы
#
# TODO:
# - добавить разбор параметров с помощью getopts

# Work group:
NAME_GR="wine"

if which gettext.sh &>/dev/null ; then
	. gettext.sh
else
	eval_gettext()
	{
		echo -n "$@"
	}

	gettext()
	{
		echo -n "$@"
	}
fi

TEXTDOMAIN=WINE@Etersoft
export TEXTDOMAIN
TEXTDOMAINDIR='/usr/share/locale'
export TEXTDOMAINDIR

fatal()
{
	gettext "You have not permission for change file owner or access mode. Run with root user." ; echo
	exit
}

help()
{
	gettext "Program for check and set file permissions" ; echo
	gettext "Use: setwineshare [--set|-s] [--group|-g]  [directory]" ; echo
	gettext "		--set 		Set correct access mode: 02770 for dirs, 0660 for files." ; echo
	gettext "		--group [GID]	Use GID group instead default wine" ; echo
}

SET=

for i in 1 2 ; do
case "$1" in
	("--help"|"-h"|"")
		help
		exit
		;;
	("--set"|"-s")
		SET=1
		shift
		;;
	("--group"|"-g")
		shift
		NAME_GR="$1"
		shift
		;;
esac
done

WORK_DIR="$1"


if ! [ -d "$WORK_DIR" ] ; then
    gettext "Directory '$WORK_DIR' is not found." ; echo
    gettext "Run with --help param for help." ; echo
    exit
fi

if [ -n "$SET" ]; then
    gettext "Fix permissions and group..." ; echo
    find "$WORK_DIR" -maxdepth 10 ! -group "$NAME_GR" -print0 | xargs -0 --no-run-if-empty chgrp -v $NAME_GR
    find "$WORK_DIR" -maxdepth 10 ! -perm 0660  -type f -print0 | xargs -0 --no-run-if-empty chmod -v 0660
    find "$WORK_DIR" -maxdepth 10 ! -perm 02770 -type d -print0 | xargs -0 --no-run-if-empty chmod -v 02770
    exit 0
else
    gettext "Incorrect files and dirs..." ; echo
    find "$WORK_DIR" -maxdepth 10 \( ! -group "$NAME_GR" -o ! -perm 02770 \)  -type d -print0 | xargs -n1 -0 --no-run-if-empty ls -d -l
    find "$WORK_DIR" -maxdepth 10 \( ! -group "$NAME_GR" -o ! -perm 0660 \)   -type f -print0 | xargs -n1 -0 --no-run-if-empty ls -l
    exit 0
fi

# disable umask test
exit 0
TESTFILE=$WORK_DIR/winelock-test.001

touch $TESTFILE

if  [ "`stat -c%a  $TESTFILE`" != "660" ] ; then 
    gettext "Incorrect umask " ; umask
    gettext "File really created with "
    stat -c%a $TESTFILE
else
    gettext "Umask is correct." ; echo
fi

rm -f $TESTFILE
