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