summaryrefslogtreecommitdiffstats
path: root/security/ossec-hids-local/scripts/plist.sh
blob: c08c5e16a1af6cb7f07e48182f873bda14ee9794 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/bin/sh

# Script generates entries for pkg-plist.
# Do not use it directly. Use the following command instead:
#
# make MAINTAINER_MODE=yes clean plist

OSSEC_TYPE=$1
OSSEC_HOME=$2
PLIST=$3
WORKDIR=$4
STAGEDIR=$5

staged_plist="${WORKDIR}/.staged-plist"
fixed_lines=""
if [ "${OSSEC_TYPE}" != "agent" ]; then
    fixed_lines="${fixed_lines} %%MYSQL%%%%DOCSDIR%%/mysql.schema %%PGSQL%%%%DOCSDIR%%/postgresql.schema"
fi
skip_lines="%%PORTDOCS%%%%DOCSDIR%%/mysql.schema %%PORTDOCS%%%%DOCSDIR%%/postgresql.schema"
skip_paths="/etc/ossec.conf /etc/client.keys /logs/active-responses.log /logs/ossec.log /lua"
sample_paths="/etc/local_internal_options.conf.sample"
if [ "${OSSEC_TYPE}" == "agent" ]; then
    skip_paths="${skip_paths} /rules /agentless /.ssh"
fi

print_path() {
    local path="$1"
    local command="$2"
    local full_path="${STAGEDIR}${OSSEC_HOME}${path}"
    if [ -z "${command}" ]; then
        command="@"
        if [ -d "${full_path}" ]; then
            command="@dir"
        fi
    fi
    local user=`stat -f "%Su" "${full_path}"`
    if [ "${user}" == "${USER}" ]; then
        user=""
    fi
    local group=`stat -f "%Sg" "${full_path}"`
    if [ "${group}" == "${GROUP}" ]; then
        group=""
    fi
    local mode=`stat -f "%p" "${full_path}" | tail -c 5`
    echo -e "${command}(${user},${group},${mode}) %%OSSEC_HOME%%${path}" >> "${PLIST}"
}

echo -n > "${PLIST}"

print_path

done_paths=""
while read line; do
    skip_line=""
    for e in ${skip_lines}; do
        if [ "${e}" == "${line}" ]; then
            skip_line="${e}"
            break
        fi
    done
    if [ -z "${skip_line}" ]; then
        path=""
        case $line in
            "@dir %%OSSEC_HOME%%"*)
                path=`echo "${line}" | sed -e "s|@dir %%OSSEC_HOME%%||g"`
                ;;
            "%%OSSEC_HOME%%"*)
                path=`echo "${line}" | sed -e "s|%%OSSEC_HOME%%||g"`
                ;;
            "%%"*)
                unchanged_lines="${unchanged_lines} ${line}"
                ;;
        esac
        if [ -n "${path}" ]; then
            segments=`echo "${path}" | tr "/" "\n"`
            path=""
            for segment in ${segments}; do
                path="${path}/${segment}"
                skip_path=""
                for e in ${skip_paths}; do
                    if [ "${e}" == "${path}" ]; then
                        skip_path="${e}"
                        break
                    fi
                done
                if [ -n "${skip_path}" ]; then
                    break
                fi
                done_path=""
                for e in ${done_paths}; do
                    if [ "${e}" == "${path}" ]; then
                        done_path="${e}"
                        break
                    fi
                done
                if [ -z "${done_path}" ]; then
                    done_paths="${done_paths} ${path}"
                    sample_path=""
                    for e in ${sample_paths}; do
                        if [ "${e}" == "${path}" ]; then
                            sample_path="${e}"
                            break
                        fi
                    done
                    if [ -n "${sample_path}" ]; then
                        print_path "${path}" @sample
                    else
                        print_path "${path}"
                    fi
                fi
            done
        fi
    fi
done < "${staged_plist}"

unchanged_lines="${unchanged_lines} ${fixed_lines}"
for line in ${unchanged_lines}; do
    echo "${line}" >> "${PLIST}"
done