#!/bin/bash

ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0
DEBUGMODE=no

unset ROOTFS; [[ -d /usr/lib/ublinux ]] || ROOTFS=.
SOURCE=${ROOTFS}/usr/lib/ublinux/functions; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
SOURCE=${ROOTFS}/usr/lib/ublinux/default; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null || exit 0
debug_mode "$0" "$@"

SYSCONF="${ROOTFS}${SYSCONF}"
SOURCE=${SYSCONF}/config; [[ -f ${SOURCE} ]] && . ${SOURCE} 2>/dev/null
SOURCE=${SYSCONF}/security; [ -f ${SOURCE} ] && . ${SOURCE} 2>/dev/null

#declare -A DISK_QUOTA
#DISK_QUOTA[usrquota:/dev/sda4]=enable
#DISK_QUOTA[usrquota:/dev/sda4]=disable
#DISK_QUOTA[usrquota:/dev/sda4:user-1,user-2]=7M:8M:0:0:86400:86400
#DISK_QUOTA[usrquota:/dev/sda4:user-1]=5M:6M:0:0
#DISK_QUOTA[usrquota:/dev/sda4:user-2]=7M:8M:0:0
#DISK_QUOTA[usrquota:/mnt/MyExt4:user-1,user-2]=5M:6M:0:0
#DISK_QUOTA[usrquota:/dev/sda4]=0:0:0:0:1604800:8604800

#DISK_QUOTA[grpquota:/dev/sda4]=enable
#DISK_QUOTA[grpquota:/dev/sda4]=disable
#DISK_QUOTA[grpquota:/dev/sda4:users]=2M:3M:0:0:604800:604800
#DISK_QUOTA[grpquota:/mnt/MyExt4:users]=5M:6M:0:0:604800:604800

#DISK_QUOTA[prjquota:/tmp/5/dir23:3,MyPN-3]=3M:4M:10:20:3600:3600
#DISK_QUOTA[prjquota:/mnt/MyExt4/test1:1,PN-1]=2M:3M:0:0:3600:3600
#DISK_QUOTA[prjquota:/mnt/sda4/test1:AUTO,PN-1]=2M:3M:0:0:3600:3600
#DISK_QUOTA[prjquota:/mnt/MyExt4/test2:2,PN-2]=3M:4M:10:12:3600:3600
#DISK_QUOTA[prjquota:/mnt/sda4/test1]=clean
#DISK_QUOTA[prjquota:/mnt/sda4/test1]=disable

#DISK_QUOTA[quota]=disable
#DISK_QUOTA[quota]=enable
#DISK_QUOTA[quota:/dev/sda4]=clean

## Назначение квот на дисковые ресурсы
## Может принимать входящий параметр:
##   exec_disk_quota DISK_QUOTA[usrquota:/dev/sdc1]=user-1,user-2:5M:6M:0:0 DISK_QUOTA[usrquota:/dev/sdc2]=enable
exec_disk_quota(){
## Использовать дисковые квоты на файловые системы
    enable_quota(){
    # Включить поддержку квоты
    ##   Варианты опций mount для квотирования:
    ##     noquota                  # Отключить простые квоты на пользователя и группу
    ##     quota                    # Включить простые квоты на пользователя и группу
    ##     usrquota                 # Включить простые квоты на пользователя
    ##     grpquota                 # Включить простые квоты на группу
    ##     prjquota                 # Включить квоты на проект
    ##     usrjquota=aquota.user    # Включить журналируемые квоты на пользователя
    ##     grpjquota=aquota.group   # Включить журналируемые квоты на группу
    ##     jqfmt=vfsold             # Использовать БД для простых квот V1
    ##     jqfmt=vfsv0              # Выключить журналирование. Использовать БД для журналируемых квот V2
    ##     jqfmt=vfsv1              # Включить журналирование. Использовать БД для журналируемых квот V2
	#cat /proc/mounts | grep -q "^${PATH_DEVICE}.,*${ATTR_QUOTA}" && return 0
	local MOUNT_DEVICE=$(cat /proc/mounts | grep "^${PATH_DEVICE}" | head -1)
	if [[ -n ${MOUNT_DEVICE} ]]; then
	        if [[ ${ISFS_EXT234_FEATURES} == yes ]]; then
	    	    if [[  ${MOUNT_DEVICE} =~ ^${PATH_DEVICE}.*,${ATTR_QUOTA} ]]; then
	    		return 0
	    	    elif mount -o remount,${MOUNT_DISK_ATTR[${PATH_DEVICE}]} ${PATH_DEVICE}; then
	    	    # Перемонтировать со всеми атрибутами квот
			[[ ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} =~ usrquota ]] && rm -f ${MOUNT_POINT}/{aquota.user,quota.user}
			[[ ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} =~ grpquota ]] && rm -f ${MOUNT_POINT}/{aquota.group,quota.group}
	    	    else
	    		echo "ERROR: Device '${PATH_DEVICE}' not remounted with options 'remount,${MOUNT_DISK_ATTR[${PATH_DEVICE}]}'"
	    		return 1
	    	    fi
    		elif [[ ${ISFS_EXT234_FEATURES} == no  ]]; then
	    	    if [[  ${MOUNT_DEVICE} =~ ^${PATH_DEVICE}.*,${ATTR_QUOTA} && -f "${MOUNT_POINT}/${FILE_QUOTA}" ]]; then
	    		return 0
    		    elif [[ ! ${PATH_DEVICE} =~ ^/dev/loop* ]] && umount --quiet ${PATH_DEVICE} 2>/dev/null; then
			${ROOTFS}/usr/bin/tune2fs -Q ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} ${PATH_DEVICE} && ISFS_EXT234_FEATURES=yes
			mount --all
			mount -o ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} ${PATH_DEVICE} ${MOUNT_POINT}
	    		[[ ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} =~ usrquota ]] && rm -f ${MOUNT_POINT}/{aquota.user,quota.user}
	    		[[ ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} =~ grpquota ]] && rm -f ${MOUNT_POINT}/{aquota.group,quota.group}
		    elif [[ ${ATTR_QUOTA} != prjquota ]]; then
			if mount -o remount,${ATTR_QUOTA} ${PATH_DEVICE}; then
			    #${ROOTFS}/usr/bin/quotaoff -${ARG_CMD} ${PATH_DEVICE} 2>/dev/null
			    [[ -f "${MOUNT_POINT}/${FILE_QUOTA}" ]] || ${ROOTFS}/usr/bin/quotacheck -${ARG_CMD}cm ${PATH_DEVICE}
			    ${ROOTFS}/usr/bin/quotacheck -${ARG_CMD} ${PATH_DEVICE}
	    		else
	    		    echo "ERROR: Device '${PATH_DEVICE}' not remounted with options 'remount,${ATTR_QUOTA}'"
	    		    return 1
	    		fi
	    	    fi
	    	elif [[ ${ISFS_NFS} == yes ]]; then
	    	    if [[  ${MOUNT_DEVICE} =~ ^${PATH_DEVICE}.*,${ATTR_QUOTA} && -f "${MOUNT_POINT}/${FILE_QUOTA}" ]]; then
	    		return 0
	    	    fi
	    	    true
		fi
		if [[ -z ${ROOTFS} ]]; then
		    /usr/bin/ubconfig --quiet --source system get system SERVICES_ENABLE | grep -q systemd-quotacheck 2>/dev/null \
		    || /usr/bin/ubconfig --quiet --target system set system SERVICES_ENABLE++=systemd-quotacheck
		else
		    chroot . /usr/bin/ubconfig --quiet --source system get system SERVICES_ENABLE | grep -q systemd-quotacheck 2>/dev/null \
		    || /usr/bin/ubconfig --quiet --noexecute --target system set system SERVICES_ENABLE++=systemd-quotacheck
		fi
    	else
	    [[ -n ${ISFS_EXT234} && ${ISFS_EXT234_FEATURES} == no ]] && ${ROOTFS}/usr/bin/tune2fs -Q ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} ${PATH_DEVICE} #2>/dev/null
	    echo "ERROR: Device '${PATH_DEVICE}' not mounted."
	fi
    }
    disable_quota(){
    # Отключить поддержку квот
	cat /proc/mounts | grep -q "${PATH_DEVICE}.*,${ATTR_QUOTA}" || return 0
	${ROOTFS}/usr/bin/quotaoff -${ARG_CMD} ${PATH_DEVICE} &>/dev/null
	if [[ ${ATTR_QUOTA} == quota ]]; then
	    if [[ -z ${ROOTFS} ]]; then
		/usr/bin/ubconfig --quiet --target system set system SERVICES_ENABLE--=systemd-quotacheck
	    else
    		chroot . /usr/bin/ubconfig --quiet --noexecute --target system set system SERVICES_ENABLE--=systemd-quotacheck
    	    fi
	    cat /proc/mounts | grep -q "${PATH_DEVICE}.*${ATTR_QUOTA}" && mount -o remount,noquota ${PATH_DEVICE} &>/dev/null
	fi
    }
    set_quota(){
    # Установить квоту
	QUOTA_LIMITS=$(cut -d: -f1,2,3,4 <<< ${ALL_VALUE_QUOTA} | tr : ' ')
	QUOTA_GRACE=$(cut -d: -f5,6 <<< ${ALL_VALUE_QUOTA} | tr : ' ')
	#${ROOTFS}/usr/bin/quotaoff -${ARG_CMD} ${PATH_DEVICE} #2>/dev/null
	[[ -n ${QUOTA_GRACE} ]] && setquota -${ARG_CMD}t ${QUOTA_GRACE} ${MOUNT_POINT}
	if [[ ${ATTR_QUOTA} == @(usrquota|grpquota) && -n ${UGP_QUOTA} ]]; then
    	    while read SELECT_UG_QUOTA; do
		${ROOTFS}/usr/bin/setquota -${ARG_CMD} ${SELECT_UG_QUOTA} ${QUOTA_LIMITS} ${PATH_DEVICE}
	    done < <(tr ",;[[:space:]]" \\n <<< ${UGP_QUOTA})
	elif [[ ${ATTR_QUOTA} == prjquota && -n ${UGP_QUOTA} ]]; then
	    ID_PROJECT=${UGP_QUOTA%%,*}
	    NAME_PROJECT=${UGP_QUOTA#*,}
	    if [[ ${ID_PROJECT,,} == auto ]]; then
		FIND_ID_PROJECT=$(lsattr -p -d  "${PATH_PRJ}" | cut -d' ' -f1)
		[[ -n ${FIND_ID_PROJECT} && ${FIND_ID_PROJECT} != 0 ]] && ID_PROJECT=${FIND_ID_PROJECT} || ID_PROJECT=${RANDOM}
	    fi
	    [[ -f ${ROOTFS}/etc/projects ]] && sed "\|^${ID_PROJECT}:.*|d; \|.*:${PATH_PRJ}$|d" -i ${ROOTFS}/etc/projects 2>/dev/null
	    echo "${ID_PROJECT}:${PATH_PRJ}" >> ${ROOTFS}/etc/projects
	    [[ -f ${ROOTFS}/etc/projid ]] && sed "/.*:${ID_PROJECT}$/d" -i ${ROOTFS}/etc/projid 2>/dev/null
	    if [[ -n ${NAME_PROJECT} ]]; then
		[[ -f ${ROOTFS}/etc/projid ]] && sed "/^${NAME_PROJECT}:.*/d" -i ${ROOTFS}/etc/projid 2>/dev/null
		echo "${NAME_PROJECT}:${ID_PROJECT}" >> ${ROOTFS}/etc/projid
	    fi
	    if [[ -n ${ISFS_EXT234} || -n ${ISFS_XFS} || -n ${ISFS_BTRFS} ]]; then
		${ROOTFS}/usr/bin/chattr -R -p ${ID_PROJECT} ${PATH_PRJ}
		${ROOTFS}/usr/bin/chattr +P ${PATH_PRJ}
	    fi
	    ${ROOTFS}/usr/bin/setquota -${ARG_CMD} ${ID_PROJECT} ${QUOTA_LIMITS} ${PATH_DEVICE}
	fi
    }
    clean_quota(){
    # Очистить данные квот
	#disable_quota
	local MOUNT_DEVICE=$(cat /proc/mounts | grep "^${PATH_DEVICE}" | head -1)
	if [[ -n ${MOUNT_DEVICE} ]]; then
	    if [[ ${ATTR_QUOTA} == prjquota ]]; then
		${ROOTFS}/usr/bin/quotaoff -P ${PATH_DEVICE} 2>/dev/null
		if [[ -n ${UGP_QUOTA} ]]; then
		    ID_PROJECT=${UGP_QUOTA%%,*}
		    NAME_PROJECT=${UGP_QUOTA#*,}
		    [[ -f ${ROOTFS}/etc/projects ]] && sed "\|^${ID_PROJECT}:.*|d; \|.*:${PATH_PRJ}$|d" -i ${ROOTFS}/etc/projects 2>/dev/null
		    [[ -f ${ROOTFS}/etc/projid ]] && sed "/.*:${ID_PROJECT}$/d" -i ${ROOTFS}/etc/projid 2>/dev/null
		    [[ -f ${ROOTFS}/etc/projid && -n ${NAME_PROJECT} ]] && sed "/^${NAME_PROJECT}:.*/d" -i ${ROOTFS}/etc/projid 2>/dev/null
		fi
		if [[ -n ${PATH_PRJ} ]] && [[ -n ${ISFS_EXT234} || -n ${ISFS_XFS} || -n ${ISFS_BTRFS} ]]; then
		    ${ROOTFS}/usr/bin/chattr -R -p 0 ${PATH_PRJ}
		    ${ROOTFS}/usr/bin/chattr -P ${PATH_PRJ}
		fi
	    elif [[ ${ATTR_QUOTA} == quota && ${ATTR_QUOTA} == usrquota && ${ATTR_QUOTA} == grpquota ]]; then
		${ROOTFS}/usr/bin/quotaoff -ugP ${PATH_DEVICE} 2>/dev/null
		if [[ ${ISFS_EXT234_FEATURES} == yes ]]; then
		    if umount --quiet ${PATH_DEVICE} 2>/dev/null; then
	    		${ROOTFS}/usr/bin/tune2fs -Q ^usrquota,^grpquota,^prjquota ${PATH_DEVICE} 2>/dev/null
	    		#${ROOTFS}/usr/bin/tune2fs -Q quota,project ${PATH_DEVICE} 2>/dev/null
	    		mount --all
	    		mount ${PATH_DEVICE} ${MOUNT_POINT}
	    	    else
	    		echo "WARNING: Device '${PATH_DEVICE}' is busy."
	    	    fi
		else
		    [[  ${MOUNT_DEVICE} =~ ^${PATH_DEVICE}.*,${ATTR_QUOTA} ]] && mount -o remount,noquota ${PATH_DEVICE} &>/dev/null
		    rm -f ${MOUNT_POINT}/{aquota.user,aquota.group,quota.user,quota.group}
		fi
	    fi	    
    	else
	    if [[ ${ISFS_EXT234_FEATURES} == yes ]]; then
	        ${ROOTFS}/usr/bin/tune2fs -Q ^quota,^project ${PATH_DEVICE} 2>/dev/null
	        #${ROOTFS}/usr/bin/tune2fs -Q quota,project ${PATH_DEVICE} 2>/dev/null
	    fi
	fi
    }
    debug(){
	echo "--------------------------"
	echo "ATTR_QUOTA=${ATTR_QUOTA}"
	echo "UGP_QUOTA=${UGP_QUOTA}"
	echo "ALL_VALUE_QUOTA=${ALL_VALUE_QUOTA}"
	echo "IDENT_DEVICE=${IDENT_DEVICE}"
	echo "PATH_DEVICE_LSBLK=${PATH_DEVICE_LSBLK}"
	echo "PATH_DEVICE=${PATH_DEVICE}"
	echo "MOUNT_POINT=${MOUNT_POINT}"
	echo "PATH_PRJ=${PATH_PRJ}"
	echo "ISFS_EXT234=${ISFS_EXT234}"
	echo "ISFS_EXT234_FEATURES=${ISFS_EXT234_FEATURES}"
    }
    # Если заданы входящие параметр имя переменной со значением, то применяются параметры как основной DISK_QUOTA
    [[ -n $@ ]] && declare -A DISK_QUOTA && eval $@
    if [[ -n ${DISK_QUOTA[@]} ]]; then
	local -A MOUNT_DISK_ATTR
	KNOW_LSBLK=$("${ROOTFS}"/usr/bin/lsblk --raw --fs --output PATH,FSTYPE,LABEL,PARTLABEL,UUID,PARTUUID,MOUNTPOINT,MOUNTPOINTS --exclude 11,253)
	# Построить массив всех из указанных устройств со всеми аттрибутами монтирования для которых существуют квоты
	for SELECT_DISK_QUOTA in "${!DISK_QUOTA[@]}"; do
	    ATTR_QUOTA=${SELECT_DISK_QUOTA%%:*}
	    IDENT_DEVICE=${SELECT_DISK_QUOTA#*:}; IDENT_DEVICE=${IDENT_DEVICE%:*}
	    [[ ${IDENT_DEVICE} == quota ]] && continue
	    if [[ ${ATTR_QUOTA} == @(usrquota|grpquota|quota) && -n ${IDENT_DEVICE} ]]; then
		PATH_DEVICE_LSBLK=$(grep "${IDENT_DEVICE}" <<< ${KNOW_LSBLK} | cut -d' ' -f1)
		[[ -n ${PATH_DEVICE_LSBLK} ]] && PATH_DEVICE=${PATH_DEVICE_LSBLK} || PATH_DEVICE=${IDENT_DEVICE}
	    elif [[ ${ATTR_QUOTA} == prjquota && -n ${IDENT_DEVICE} ]]; then
		PATH_PRJ=${IDENT_DEVICE}
		[[ -d ${PATH_PRJ} ]] || continue
		PATH_DEVICE=$(${ROOTFS}/usr/bin/findmnt -n -o SOURCE --target ${PATH_PRJ})
		[[ -n ${PATH_DEVICE} ]] || PATH_DEVICE=${IDENT_DEVICE}
	    fi
	    [[ -z ${MOUNT_DISK_ATTR[${PATH_DEVICE}]} ]] && MOUNT_DISK_ATTR[${PATH_DEVICE}]="${ATTR_QUOTA}" || MOUNT_DISK_ATTR[${PATH_DEVICE}]+=",${ATTR_QUOTA}"
	done
#echo "#MOUNT_DISK_ATTR[@]=${#MOUNT_DISK_ATTR[@]}"
#echo "!MOUNT_DISK_ATTR[@]=${!MOUNT_DISK_ATTR[@]}"
#echo "MOUNT_DISK_ATTR[@]=${MOUNT_DISK_ATTR[@]}"
	# Установить квоты
	for SELECT_DISK_QUOTA in "${!DISK_QUOTA[@]}"; do
	    local ISFS_EXT234= MOUNT_POINT= PATH_PRJ= KNOW_LSBLK= PATH_DEVICE= PATH_DEVICE_LSBLK=
	    local ISFS_EXT234_FEATURES=		# Данные квот храняться в служебных данных файловой системы
	    ATTR_QUOTA=${SELECT_DISK_QUOTA%%:*}
	    case ${ATTR_QUOTA} in
		quota)		ARG_CMD="ugP"; ARG_TUNE2FS=" quota inode:"; FILE_QUOTA="aquota.user" ;;
		usrquota)	ARG_CMD="u"; ARG_TUNE2FS="User quota inode:"; FILE_QUOTA="aquota.user" ;;
		grpquota)	ARG_CMD="g"; ARG_TUNE2FS="Group quota inode:"; FILE_QUOTA="aquota.group" ;;
		prjquota)	ARG_CMD="P"; ARG_TUNE2FS="Project quota inode:"; FILE_QUOTA= ;;
		*)		exit 1 ;;
	    esac
	    ALL_VALUE_QUOTA="${DISK_QUOTA[${SELECT_DISK_QUOTA}]}"
	    UGP_QUOTA=${SELECT_DISK_QUOTA##*:}
	    IDENT_DEVICE=${SELECT_DISK_QUOTA#*:}; IDENT_DEVICE=${IDENT_DEVICE%:*}
	    [[ ${IDENT_DEVICE} == ${UGP_QUOTA} ]] && unset UGP_QUOTA
	    #[[ ${IDENT_DEVICE} == quota ]] && unset IDENT_DEVICE
	    if [[ ${ATTR_QUOTA} == quota && ${IDENT_DEVICE} == quota ]]; then
		unset IDENT_DEVICE
	    elif [[ ${ATTR_QUOTA} == @(usrquota|grpquota|quota) && -n ${IDENT_DEVICE} ]]; then
		KNOW_LSBLK=$("${ROOTFS}"/usr/bin/lsblk --raw --fs --output PATH,FSTYPE,LABEL,PARTLABEL,UUID,PARTUUID,MOUNTPOINT,MOUNTPOINTS --exclude 11,253)
		PATH_DEVICE_LSBLK=$(grep "${IDENT_DEVICE}" <<< ${KNOW_LSBLK} | cut -d' ' -f1)
		[[ -n ${PATH_DEVICE_LSBLK} ]] && PATH_DEVICE=${PATH_DEVICE_LSBLK} || PATH_DEVICE=${IDENT_DEVICE}
		MOUNT_POINT=$(grep "${PATH_DEVICE}" <<< ${KNOW_LSBLK} | cut -d' ' -f7)
	    elif [[ ${ATTR_QUOTA} == prjquota && -n ${IDENT_DEVICE} ]]; then
		PATH_PRJ=${SELECT_DISK_QUOTA#*:}; PATH_PRJ=${PATH_PRJ%:*}
		[[ -d ${PATH_PRJ} ]] || { echo "ERROR: The specified project directory '${PATH_PRJ}' does not exist." && continue; }
		KNOW_LSBLK=$("${ROOTFS}"/usr/bin/findmnt -n -o SOURCE,FSTYPE,TARGET --target ${PATH_PRJ} | xargs)
		PATH_DEVICE=$("${ROOTFS}"/usr/bin/findmnt -n -o SOURCE --target ${PATH_PRJ})
		[[ -n ${PATH_DEVICE} ]] || PATH_DEVICE=${IDENT_DEVICE}
		MOUNT_POINT=$("${ROOTFS}"/usr/bin/findmnt -n -o TARGET --target ${PATH_PRJ})
	    fi
	    [[ -n ${KNOW_LSBLK} ]] && ISFS_EXT234=$(grep -oE "${PATH_DEVICE} (ext2|ext3|ext4)" <<< ${KNOW_LSBLK}) #"
	    [[ -n ${KNOW_LSBLK} && -z ${ISFS_EXT234} ]] && ISFS_XFS=$(grep -oE "${PATH_DEVICE} xfs" <<< ${KNOW_LSBLK})
	    # Проверить ФС на поддержку SW|HW режимов квот
	    [[ -n ${ISFS_EXT234} ]] && { ${ROOTFS}/usr/bin/tune2fs -l ${PATH_DEVICE} | grep -q "${ARG_TUNE2FS}" && ISFS_EXT234_FEATURES=yes || ISFS_EXT234_FEATURES=no; }
	    # TODO: Уточнить получение атрибутов у ФС XFS
	    [[ -n ${ISFS_XFS} ]] && { ${ROOTFS}/usr/bin/tune2fs -l ${PATH_DEVICE} | grep -q "${ARG_TUNE2FS}" && ISFS_XFS_FEATURES=yes || ISFS_XFS_FEATURES=no; }
#debug
#continue
	    if [[ ${ALL_VALUE_QUOTA,,} == enable ]]; then
		if [[ -n ${PATH_DEVICE} ]]; then
		    enable_quota
		    ${ROOTFS}/usr/bin/quotaon -${ARG_CMD}vp ${PATH_DEVICE} | grep -qi 'is on (enforced)' || ${ROOTFS}/usr/bin/quotaon -${ARG_CMD} ${PATH_DEVICE}
		else
		    ${ROOTFS}/usr/bin/quotaoff -augP 2>/dev/null
		    ${ROOTFS}/usr/bin/quotacheck -aug 2>/dev/null
		    ${ROOTFS}/usr/bin/quotaon -augP 2>/dev/null
		    #${ROOTFS}/usr/bin/ubconfig --quiet set system SERVICES_ENABLE++=quotaon.service
		fi
		
	    elif [[ ${ALL_VALUE_QUOTA,,} == disable ]]; then
		if [[ -n ${PATH_DEVICE} ]]; then
		    disable_quota
		else
		    disable_quota
		    ${ROOTFS}/usr/bin/quotaoff -augP 2>/dev/null
		    #${ROOTFS}/usr/bin/ubconfig --quiet set system SERVICES_ENABLE--=quotaon.service
		fi
	    elif [[ ${ALL_VALUE_QUOTA,,} == clean ]]; then
		[[ -n ${PATH_DEVICE} ]] && clean_quota
	    elif [[ ${ALL_VALUE_QUOTA} =~ .*:.*:.*:.* ]]; then
		if [[ -n ${PATH_DEVICE} ]]; then
		    enable_quota
		    [[ ${ATTR_QUOTA} == prjquota && ${ISFS_EXT234_FEATURES} == no ]] && { echo "ERROR: Project '${UGP_QUOTA}' quota feature not enabled. Cannot enable project quota enforcement." && continue; }
		    [[ ${ATTR_QUOTA} == prjquota && ${ISFS_XFS_FEATURES} == no ]] && { echo "ERROR: Project '${UGP_QUOTA}' quota feature not enabled. Cannot enable project quota enforcement." && continue; }
		    if [[ -n ${MOUNT_POINT} ]]; then
			set_quota
			${ROOTFS}/usr/bin/quotaon -${ARG_CMD}vp ${PATH_DEVICE} | grep -qi 'is on (enforced)' || ${ROOTFS}/usr/bin/quotaon -${ARG_CMD} ${PATH_DEVICE} 2>/dev/null || echo "ERROR: Quota '${ATTR_QUOTA}' not enabled on device '${PATH_DEVICE}'"
		    fi
		fi
	    fi
	done
    fi
}
exec_disk_quota_get(){
    KNOW_LSBLK=$("${ROOTFS}"/usr/bin/lsblk --raw --fs --output PATH,FSTYPE,LABEL,PARTLABEL,UUID,PARTUUID,MOUNTPOINT,MOUNTPOINTS --exclude 11,253)
    PATH_DEVICE_LSBLK=$(grep -E " (ext2|ext3|ext4|xfs|btrfs|nfs) " <<< ${KNOW_LSBLK} | cut -d' ' -f1) #"
    echo "${PATH_DEVICE_LSBLK}"
}

################
##### MAIN #####
################

    if [[ -z $@ || $1 == @("set="|"set+="|"set++=") ]]; then
	shift
	exec_disk_quota $@
    elif [[ $1 == get ]]; then
	shift
	exec_disk_quota_get $@
    fi
