new upstream release (3.3.0); modify package compatibility for Stretch
[ossec-hids.git] / src / init / update.sh
1 #!/bin/sh
2 # Shell script update functions for the OSSEC HIDS
3 # Author: Daniel B. Cid <daniel.cid@gmail.com>
4
5 FALSE="false"
6 TRUE="true"
7
8 isUpdate()
9 {
10     ls -la ${OSSEC_INIT} > /dev/null 2>&1
11     if [ $? = 0 ]; then
12         . ${OSSEC_INIT}
13         if [ "X$DIRECTORY" = "X" ]; then
14             echo "# ($FUNCNAME) ERROR: The variable DIRECTORY wasn't set" 1>&2
15             echo "${FALSE}"
16             return 1;
17         fi
18         ls -la $DIRECTORY > /dev/null 2>&1
19         if [ $? = 0 ]; then
20             echo "${TRUE}"
21             return 0;
22         fi
23     fi
24     echo "${FALSE}"
25     return 1;
26 }
27
28 doUpdatecleanup()
29 {
30     . ${OSSEC_INIT}
31
32     if [ "X$DIRECTORY" = "X" ]; then
33         echo "# ($FUNCNAME) ERROR: The variable DIRECTORY wasn't set." 1>&2
34         echo "${FALSE}"
35         return 1;
36     fi
37
38     # Checking if the directory is valid.
39     _dir_pattern_update="^/[-a-zA-Z0-9/\.-]{3,128}$"
40     echo $DIRECTORY | grep -E "$_dir_pattern_update" > /dev/null 2>&1
41     if [ ! $? = 0 ]; then
42         echo "# ($FUNCNAME) ERROR: directory name ($DIRECTORY) doesn't match the pattern $_dir_pattern_update" 1>&2
43         echo "${FALSE}"
44         return 1;
45     fi
46 }
47
48 getPreinstalled()
49 {
50     . ${OSSEC_INIT}
51
52     # agent
53     cat $DIRECTORY/etc/ossec.conf | grep "<client>" > /dev/null 2>&1
54     if [ $? = 0 ]; then
55         echo "agent"
56         return 0;
57     fi
58
59     cat $DIRECTORY/etc/ossec.conf | grep "<remote>" > /dev/null 2>&1
60     if [ $? = 0 ]; then
61         echo "server"
62         return 0;
63     fi
64
65     echo "local"
66     return 0;
67 }
68
69 getPreinstalledDir()
70 {
71     . ${OSSEC_INIT}
72     echo "$DIRECTORY"
73     return 0;
74 }
75
76 UpdateStartOSSEC()
77 {
78    . ${OSSEC_INIT}
79
80    $DIRECTORY/bin/ossec-control start
81 }
82
83 UpdateStopOSSEC()
84 {
85    . ${OSSEC_INIT}
86
87    $DIRECTORY/bin/ossec-control stop
88
89    # We also need to remove all syscheck queue file (format changed)
90    if [ "X$VERSION" = "X0.9-3" ]; then
91         rm -f $DIRECTORY/queue/syscheck/* > /dev/null 2>&1
92         rm -f $DIRECTORY/queue/agent-info/* > /dev/null 2>&1
93    fi
94    rm -f $DIRECTORY/queue/syscheck/.* > /dev/null 2>&1
95 }
96
97 UpdateOSSECRules()
98 {
99     . ${OSSEC_INIT}
100
101     OSSEC_CONF_FILE="$DIRECTORY/etc/ossec.conf"
102
103     # Backing up the old config
104     cp -pr ${OSSEC_CONF_FILE} "${OSSEC_CONF_FILE}.$$.bak"
105
106     # Getting rid of old rules entries
107     grep -Ev "</*rules>|<include>|<list>|<decoder>|<decoder_dir|<rule_dir>|rules global entry" ${OSSEC_CONF_FILE} > "${OSSEC_CONF_FILE}.$$.tmp"
108
109     # Customer decoder, decoder_dir, rule_dir are carried over during upgrade
110     grep -E '<decoder>|<decoder_dir|<rule_dir>' ${OSSEC_CONF_FILE} | grep -v '<!--' >> "${OSSEC_CONF_FILE}.$$.tmp2"
111
112     # Check for custom files that may have been added in <rules> element
113     for i in `grep -E '<include>|<list>' ${OSSEC_CONF_FILE} | grep -v '<!--'`
114     do
115       grep "$i" ${RULES_TEMPLATE}>/dev/null || echo "    $i" >> "${OSSEC_CONF_FILE}.$$.tmp2"
116     done
117
118     # Putting everything back together
119     cat "${OSSEC_CONF_FILE}.$$.tmp" > ${OSSEC_CONF_FILE}
120     rm "${OSSEC_CONF_FILE}.$$.tmp"
121     echo "" >> ${OSSEC_CONF_FILE}
122     echo "<ossec_config>  <!-- rules global entry -->" >> ${OSSEC_CONF_FILE}
123     grep -v '</rules>' ${RULES_TEMPLATE} >> ${OSSEC_CONF_FILE}
124     cat "${OSSEC_CONF_FILE}.$$.tmp2" >> ${OSSEC_CONF_FILE}
125     echo "</rules>" >> ${OSSEC_CONF_FILE}
126     echo "</ossec_config>  <!-- rules global entry -->" >> ${OSSEC_CONF_FILE}
127     rm "${OSSEC_CONF_FILE}.$$.tmp2"
128 }
129