#!/bin/sh

po_domain="alterator-limits"
alterator_api_version=1

. alterator-sh-functions

LIMIT_FILE="/etc/security/limits.d/95-alterator-limits.conf"

clean_file() {
        echo "# This file was autogenerated by alterator-limits" > "$LIMIT_FILE"
}

write_file() {
        echo -e "$1\t$2\t$3\t$4" >> "$LIMIT_FILE"
}

on_message() {
    case "$in_action" in
    write)
        case "$in__objects" in
        clean)
            clean_file
        ;;
        save)
            write_file "$in_domain" "$in_type" "$in_item" "$in_limit"
        ;;
        esac
    ;;
    list)
        case "$in__objects" in
        types)
            for i in - soft hard
            do
                    write_enum_item "$i" "`_ "$i"`"
            done
        ;;
        items)
            for i in core data fsize memlock nofile stack cpu nproc \
                    as maxlogins maxsyslogins priority locks sigpending \
                    msgqueue nice rtprio
            do
                    write_enum_item "$i" "`_ "$i"`"
            done
        ;;
        limit)
            if [ -f "$LIMIT_FILE" ]
            then
		    while read -r str
                    do
			    D=$(echo "$str" | awk '{print $1}')
			    T=$(echo "$str" | awk '{print $2}')
			    I=$(echo "$str" | awk '{print $3}')
			    L=$(echo "$str" | awk '{print $4}')
                            write_table_item domain "$D" type "$T" item "$I" limit "$L"
		    done <<<$(cat "$LIMIT_FILE" | grep -v "#")
            fi
        ;;
        esac
    ;;
    esac
}

message_loop
