Subversion Repositories ALCASAR

Rev

Rev 3248 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log

Rev 3248 Rev 3252
1
#!/bin/bash
1
#!/bin/bash
2
# $Id: alcasar-uninstall.sh 3248 2025-02-08 14:09:43Z rexy $
2
# $Id: alcasar-uninstall.sh 3252 2025-02-21 18:40:30Z rexy $
3
 
3
 
4
# alcasar-uninstall.sh
4
# alcasar-uninstall.sh
5
# by Franck BOUIJOUX, Pascal LEVANT and Richard REY
5
# by Franck BOUIJOUX, Pascal LEVANT and Richard REY
6
# This script is distributed under the Gnu General Public License (GPL)
6
# This script is distributed under the Gnu General Public License (GPL)
7
 
7
 
8
# Désinstallation ou mise à jour d'ALCASAR
8
# Désinstallation ou mise à jour d'ALCASAR
9
# Uninstall or update ALCASAR
9
# Uninstall or update ALCASAR
10
 
10
 
11
SED="/bin/sed -i"
11
SED="/bin/sed -i"
12
 
12
 
13
[ -z $DEBUG_ALCASAR ] && DEBUG_ALCASAR='off'
13
[ -z $DEBUG_ALCASAR ] && DEBUG_ALCASAR='off'
14
 
14
 
15
init ()
15
init ()
16
{
16
{
17
	echo -en "(3) : "
17
	echo -en "(3) : "
18
	rm -f /root/ALCASAR* && echo -n "1, " # The files in /usr/local/ will be removed at the end (still usefull here)
18
	rm -f /root/ALCASAR* && echo -n "1, " # The files in /usr/local/ will be removed at the end (still usefull here)
19
	[ -e /etc/grub.d/default-40_custom ] && mv /etc/grub.d/default-40_custom /etc/grub.d/40_custom && echo -n "2, "
19
	[ -e /etc/grub.d/default-40_custom ] && mv /etc/grub.d/default-40_custom /etc/grub.d/40_custom && echo -n "2, "
20
	[ -e /etc/default/grub.default ] && mv -f /etc/default/grub.default /etc/default/grub && echo -n "3"
20
	[ -e /etc/default/grub.default ] && mv -f /etc/default/grub.default /etc/default/grub && echo -n "3"
21
}
21
}
22
 
22
 
23
ACC ()
23
ACC ()
24
{
24
{
25
	echo -en "(12) : "
25
	echo -en "(13) : "
26
	[ -d /var/www/html ] && rm -rf /var/www/html && echo -n "1, "
26
	[ -d /var/www/html ] && rm -rf /var/www/html && echo -n "1, "
27
	[ -d /etc/freeradius-web ] && rm -rf /etc/freeradius-web && echo -n "2, "
27
	[ -d /etc/freeradius-web ] && rm -rf /etc/freeradius-web && echo -n "2, "
28
	[ -e /etc/php.ini.default ] && mv -f /etc/php.ini.default /etc/php.ini && echo -n "4, "
28
	[ -e /etc/php.ini.default ] && mv -f /etc/php.ini.default /etc/php.ini && echo -n "4, "
29
	[ -d /usr/local/etc/digest ] && rm -rf /usr/local/etc/digest && echo -n "5, "
29
	[ -d /usr/local/etc/digest ] && rm -rf /usr/local/etc/digest && echo -n "5, "
30
	[ -e /etc/httpd/conf/httpd.conf.default ] && mv /etc/httpd/conf/httpd.conf.default /etc/httpd/conf/httpd.conf && echo -n "6, "
30
	[ -e /etc/httpd/conf/httpd.conf.default ] && mv /etc/httpd/conf/httpd.conf.default /etc/httpd/conf/httpd.conf && echo -n "6, "
31
	[ -e /etc/httpd/conf/modules.d/00_base.conf.default ] && mv /etc/httpd/conf/modules.d/00_base.conf.default /etc/httpd/conf/modules.d/00_base.conf && echo -n "7, "
31
	[ -e /etc/httpd/conf/modules.d/00_base.conf.default ] && mv /etc/httpd/conf/modules.d/00_base.conf.default /etc/httpd/conf/modules.d/00_base.conf && echo -n "7, "
32
	[ -e /etc/httpd/conf/conf.d/ssl.conf.default ] && mv /etc/httpd/conf/conf.d/ssl.conf.default /etc/httpd/conf/conf.d/ssl.conf && echo -n "8, "
32
	[ -e /etc/httpd/conf/conf.d/ssl.conf.default ] && mv /etc/httpd/conf/conf.d/ssl.conf.default /etc/httpd/conf/conf.d/ssl.conf && echo -n "8, "
-
 
33
	[ -e /etc/httpd/conf/vhosts.d/00_default_ssl_vhost.conf.default ] && mv /etc/httpd/conf/vhosts.d/00_default_ssl_vhost.conf.default /etc/httpd/conf/vhosts.d/00_default_ssl_vhost.conf && echo -n "9, "
33
	[ -e /etc/httpd/conf/conf.d/multilang-errordoc.conf.default ] && mv /etc/httpd/conf/conf.d/multilang-errordoc.conf.default /etc/httpd/conf/conf.d/multilang-errordoc.conf && echo -n "9, "
34
	[ -e /etc/httpd/conf/conf.d/multilang-errordoc.conf.default ] && mv /etc/httpd/conf/conf.d/multilang-errordoc.conf.default /etc/httpd/conf/conf.d/multilang-errordoc.conf && echo -n "10, "
34
	[ -e /usr/share/httpd/error/include/top.html.default ] && mv /usr/share/httpd/error/include/top.html.default /usr/share/httpd/error/include/top.html && echo -n "10, "
35
	[ -e /usr/share/httpd/error/include/top.html.default ] && mv /usr/share/httpd/error/include/top.html.default /usr/share/httpd/error/include/top.html && echo -n "11, "
35
	[ -e /usr/share/httpd/error/include/bottom.html.default ] && mv /usr/share/httpd/error/include/bottom.html.default /usr/share/httpd/error/include/top.html && echo -n "11, "
36
	[ -e /usr/share/httpd/error/include/bottom.html.default ] && mv /usr/share/httpd/error/include/bottom.html.default /usr/share/httpd/error/include/top.html && echo -n "12, "
36
	[ -e /etc/httpd/conf/webapps.d/alcasar.conf ] && rm -f /etc/httpd/conf/webapps.d/alcasar.conf && echo -n "12"
37
	[ -e /etc/httpd/conf/webapps.d/alcasar.conf ] && rm -f /etc/httpd/conf/webapps.d/alcasar.conf && echo -n "13"
37
}
38
}
38
 
39
 
39
CA ()
40
CA ()
40
{
41
{
41
	echo -en "(5) : "
42
	echo -en "(5) : "
42
	[ -e /etc/pki/CA/alcasar-ca.crt ] && rm -f /etc/pki/CA/alcasar-ca.crt && echo -n "1, "
43
	[ -e /etc/pki/CA/alcasar-ca.crt ] && rm -f /etc/pki/CA/alcasar-ca.crt && echo -n "1, "
43
	[ -e /etc/pki/CA/private/alcasar-ca.key ] && rm -f /etc/pki/CA/private/alcasar-ca.key && echo -n "2, "
44
	[ -e /etc/pki/CA/private/alcasar-ca.key ] && rm -f /etc/pki/CA/private/alcasar-ca.key && echo -n "2, "
44
	[ -e /etc/pki/tls/certs/alcasar.crt ] && rm -f /etc/pki/tls/certs/alcasar.crt && echo -n "3, "
45
	[ -e /etc/pki/tls/certs/alcasar.crt ] && rm -f /etc/pki/tls/certs/alcasar.crt && echo -n "3, "
45
	[ -e /etc/pki/tls/private/alcasar.key ] && rm -f /etc/pki/tls/private/alcasar.key && echo -n "4, "
46
	[ -e /etc/pki/tls/private/alcasar.key ] && rm -f /etc/pki/tls/private/alcasar.key && echo -n "4, "
46
	[ -e /etc/pki/tls/private/alcasar.pem ] && rm -f /etc/pki/tls/private/alcasar.pem && echo -n "5"
47
	[ -e /etc/pki/tls/private/alcasar.pem ] && rm -f /etc/pki/tls/private/alcasar.pem && echo -n "5"
47
}
48
}
48
 
49
 
49
time_server ()
50
time_server ()
50
{
51
{
51
	echo -en "(1) : "
52
	echo -en "(1) : "
52
	[ -e /etc/ntp.conf.default ] && mv /etc/ntp.conf.default /etc/ntp.conf && echo -n "1"
53
	[ -e /etc/ntp.conf.default ] && mv /etc/ntp.conf.default /etc/ntp.conf && echo -n "1"
53
}
54
}
54
 
55
 
55
init_db ()
56
init_db ()
56
{
57
{
57
	echo -en "(2) : "
58
	echo -en "(2) : "
58
	[ -e /etc/my.cnf.default ] && mv -f /etc/my.cnf.default /etc/my.cnf && echo -n "1, "
59
	[ -e /etc/my.cnf.default ] && mv -f /etc/my.cnf.default /etc/my.cnf && echo -n "1, "
59
	if [ -e /etc/systemd/system/mysqld.service ]
60
	if [ -e /etc/systemd/system/mysqld.service ]
60
	then
61
	then
61
		rm /etc/systemd/system/mysqld.service
62
		rm /etc/systemd/system/mysqld.service
62
		echo -n "2"
63
		echo -n "2"
63
	fi
64
	fi
64
	/usr/bin/systemctl daemon-reload
65
	/usr/bin/systemctl daemon-reload
65
	rm -rf /var/lib/mysql
66
	rm -rf /var/lib/mysql
66
}
67
}
67
 
68
 
68
freeradius ()
69
freeradius ()
69
{
70
{
70
	echo -en "(22) : "
71
	echo -en "(22) : "
71
	[ -e /etc/raddb/empty-radiusd-db.sql ] && rm /etc/raddb/empty-radiusd-db.sql && echo -n "1, "
72
	[ -e /etc/raddb/empty-radiusd-db.sql ] && rm /etc/raddb/empty-radiusd-db.sql && echo -n "1, "
72
	[ -e /etc/raddb/radiusd.conf.default ] && mv /etc/raddb/radiusd.conf.default /etc/raddb/radiusd.conf && echo -n "2, "
73
	[ -e /etc/raddb/radiusd.conf.default ] && mv /etc/raddb/radiusd.conf.default /etc/raddb/radiusd.conf && echo -n "2, "
73
	[ -e /etc/raddb/dictionary.default ] && mv /etc/raddb/dictionary.default /etc/raddb/dictionary && echo -n "3, "
74
	[ -e /etc/raddb/dictionary.default ] && mv /etc/raddb/dictionary.default /etc/raddb/dictionary && echo -n "3, "
74
	[ -e /etc/raddb/dictionary.alcasar ] && rm /etc/raddb/dictionary.alcasar && echo -n "4, "
75
	[ -e /etc/raddb/dictionary.alcasar ] && rm /etc/raddb/dictionary.alcasar && echo -n "4, "
75
	[ -e /etc/raddb/dictionary.coovachilli ] && rm /etc/raddb/dictionary.coovachilli && echo -n "5, "
76
	[ -e /etc/raddb/dictionary.coovachilli ] && rm /etc/raddb/dictionary.coovachilli && echo -n "5, "
76
	[ -e /etc/raddb/clients.conf.default ] && mv /etc/raddb/clients.conf.default /etc/raddb/clients.conf && echo -n "6, "
77
	[ -e /etc/raddb/clients.conf.default ] && mv /etc/raddb/clients.conf.default /etc/raddb/clients.conf && echo -n "6, "
77
	[ -e /etc/raddb/sites-enabled/alcasar ] && rm /etc/raddb/sites-enabled/alcasar && echo -n "7, "
78
	[ -e /etc/raddb/sites-enabled/alcasar ] && rm /etc/raddb/sites-enabled/alcasar && echo -n "7, "
78
	[ -e /etc/raddb/sites-available/alcasar ] && rm /etc/raddb/sites-available/alcasar && echo -n "8, "
79
	[ -e /etc/raddb/sites-available/alcasar ] && rm /etc/raddb/sites-available/alcasar && echo -n "8, "
79
	[ -e /etc/raddb/sites-available/alcasar-with-ldap ] && rm /etc/raddb/sites-available/alcasar-with-ldap && echo -n "9, "
80
	[ -e /etc/raddb/sites-available/alcasar-with-ldap ] && rm /etc/raddb/sites-available/alcasar-with-ldap && echo -n "9, "
80
	[ -e /etc/raddb/mods-available/ldap-alcasar ] && rm /etc/raddb/mods-available/ldap-alcasar && echo -n "10, "
81
	[ -e /etc/raddb/mods-available/ldap-alcasar ] && rm /etc/raddb/mods-available/ldap-alcasar && echo -n "10, "
81
    i=10
82
    i=10
82
	for mods in sql sqlcounter attr_filter expiration logintime pap expr always
83
	for mods in sql sqlcounter attr_filter expiration logintime pap expr always
83
	do
84
	do
84
		i=`expr $i + 1`
85
		i=`expr $i + 1`
85
        [ -e /etc/raddb/mods-enabled/$mods ] && rm /etc/raddb/mods-enabled/$mods && echo -n "$i, "
86
        [ -e /etc/raddb/mods-enabled/$mods ] && rm /etc/raddb/mods-enabled/$mods && echo -n "$i, "
86
	done
87
	done
87
	[ -e /etc/raddb/mods-available/sql.default ] && mv /etc/raddb/mods-available/sql.default /etc/raddb/mods-available/sql && echo -n "19, "
88
	[ -e /etc/raddb/mods-available/sql.default ] && mv /etc/raddb/mods-available/sql.default /etc/raddb/mods-available/sql && echo -n "19, "
88
	[ -e /etc/raddb/mods-config/sql/main/mysql/queries.conf.default ] && mv /etc/raddb/mods-config/sql/main/mysql/queries.conf.default /etc/raddb/mods-config/sql/main/mysql/queries.conf && echo -n "20, "
89
	[ -e /etc/raddb/mods-config/sql/main/mysql/queries.conf.default ] && mv /etc/raddb/mods-config/sql/main/mysql/queries.conf.default /etc/raddb/mods-config/sql/main/mysql/queries.conf && echo -n "20, "
89
	[ -e /etc/raddb/mods-available/sqlcounter.default ] && mv /etc/raddb/mods-available/sqlcounter.default /etc/raddb/mods-available/sqlcounter && echo -n "21, "
90
	[ -e /etc/raddb/mods-available/sqlcounter.default ] && mv /etc/raddb/mods-available/sqlcounter.default /etc/raddb/mods-available/sqlcounter && echo -n "21, "
90
	if [ -e /etc/systemd/system/radiusd.service ]; then
91
	if [ -e /etc/systemd/system/radiusd.service ]; then
91
		rm -f /etc/systemd/system/radiusd.service
92
		rm -f /etc/systemd/system/radiusd.service
92
		echo -n "22"
93
		echo -n "22"
93
	fi
94
	fi
94
}
95
}
95
 
96
 
96
chilli ()
97
chilli ()
97
{
98
{
98
	echo -en "(4) : "
99
	echo -en "(4) : "
99
	[ -e /etc/init.d/chilli.default ] && mv /etc/init.d/chilli.default /etc/init.d/chilli && echo -n "1, "
100
	[ -e /etc/init.d/chilli.default ] && mv /etc/init.d/chilli.default /etc/init.d/chilli && echo -n "1, "
100
	[ -e /usr/libexec/chilli ] && rm /usr/libexec/chilli && echo -n "2, "
101
	[ -e /usr/libexec/chilli ] && rm /usr/libexec/chilli && echo -n "2, "
101
	[ -e /etc/chilli.conf.default ] && mv /etc/chilli.conf.default /etc/chilli.conf && echo -n "3, "
102
	[ -e /etc/chilli.conf.default ] && mv /etc/chilli.conf.default /etc/chilli.conf && echo -n "3, "
102
	[ -e /etc/systemd/system/chilli.service ] && rm /etc/systemd/system/chilli.service && echo -n "4"
103
	[ -e /etc/systemd/system/chilli.service ] && rm /etc/systemd/system/chilli.service && echo -n "4"
103
}
104
}
104
 
105
 
105
e2guardian ()
106
e2guardian ()
106
{
107
{
107
	echo -en "(7) : "
108
	echo -en "(7) : "
108
	[ -d /var/e2guardian ] && rm -rf /var/e2guardian
109
	[ -d /var/e2guardian ] && rm -rf /var/e2guardian
109
	[ -d /var/dansguardian ] && rm -rf /var/dansguardian
110
	[ -d /var/dansguardian ] && rm -rf /var/dansguardian
110
	if [ -e /etc/systemd/system/e2guardian.service ]; then
111
	if [ -e /etc/systemd/system/e2guardian.service ]; then
111
		rm -f /etc/systemd/system/e2guardian.service
112
		rm -f /etc/systemd/system/e2guardian.service
112
		echo -n "1, "
113
		echo -n "1, "
113
	fi
114
	fi
114
	[ -e /etc/e2guardian/e2guardian.conf.default ] && mv /etc/e2guardian/e2guardian.conf.default /etc/e2guardian/e2guardian.conf && echo -n "2, "
115
	[ -e /etc/e2guardian/e2guardian.conf.default ] && mv /etc/e2guardian/e2guardian.conf.default /etc/e2guardian/e2guardian.conf && echo -n "2, "
115
	[ -e /usr/share/e2guardian/languages/french/alcasar-e2g.html ] && rm /usr/share/e2guardian/languages/french/alcasar-e2g.html && echo -n "3, "
116
	[ -e /usr/share/e2guardian/languages/french/alcasar-e2g.html ] && rm /usr/share/e2guardian/languages/french/alcasar-e2g.html && echo -n "3, "
116
	[ -e /usr/share/e2guardian/languages/ukenglish/alcasar-e2g.html ] && rm /usr/share/e2guardian/languages/ukenglish/alcasar-e2g.html && echo -n "4, "
117
	[ -e /usr/share/e2guardian/languages/ukenglish/alcasar-e2g.html ] && rm /usr/share/e2guardian/languages/ukenglish/alcasar-e2g.html && echo -n "4, "
117
	[ -e /etc/e2guardian/e2guardianf1.conf.default ] && mv /etc/e2guardian/e2guardianf1.conf.default /etc/e2guardian/e2guardianf1.conf && echo -n "5, "
118
	[ -e /etc/e2guardian/e2guardianf1.conf.default ] && mv /etc/e2guardian/e2guardianf1.conf.default /etc/e2guardian/e2guardianf1.conf && echo -n "5, "
118
	[ -d /etc/e2guardian/lists/group1 ] && rm -rf /etc/e2guardian/lists/group1 && echo -n "6, "
119
	[ -d /etc/e2guardian/lists/group1 ] && rm -rf /etc/e2guardian/lists/group1 && echo -n "6, "
119
	[ -e /etc/e2guardian/e2guardianf2.conf ] && rm -f /etc/e2guardian/e2guardianf2.conf && echo -n "7"
120
	[ -e /etc/e2guardian/e2guardianf2.conf ] && rm -f /etc/e2guardian/e2guardianf2.conf && echo -n "7"
120
}
121
}
121
 
122
 
122
antivirus ()
123
antivirus ()
123
{
124
{
124
	echo -en "(4) : "
125
	echo -en "(4) : "
125
	if [ -e /etc/systemd/system/clamav-daemon.service ]; then
126
	if [ -e /etc/systemd/system/clamav-daemon.service ]; then
126
		rm -f /etc/systemd/system/clamav-daemon.service
127
		rm -f /etc/systemd/system/clamav-daemon.service
127
		echo -n "1, "
128
		echo -n "1, "
128
	fi
129
	fi
129
	if [ -e /etc/systemd/system/clamav-daemon.socket ]; then
130
	if [ -e /etc/systemd/system/clamav-daemon.socket ]; then
130
		rm -f /etc/systemd/system/clamav-daemon.socket
131
		rm -f /etc/systemd/system/clamav-daemon.socket
131
		echo -n "2, "
132
		echo -n "2, "
132
	fi
133
	fi
133
	[ -e /etc/clamd.conf.default ] && mv /etc/clamd.conf.default /etc/clamd.conf && echo -n "3, "
134
	[ -e /etc/clamd.conf.default ] && mv /etc/clamd.conf.default /etc/clamd.conf && echo -n "3, "
134
	[ -e /etc/freshclam.conf.default ] && mv /etc/freshclam.conf.default /etc/freshclam.conf && echo -n "4"
135
	[ -e /etc/freshclam.conf.default ] && mv /etc/freshclam.conf.default /etc/freshclam.conf && echo -n "4"
135
}
136
}
136
 
137
 
137
ulogd ()
138
ulogd ()
138
{
139
{
139
	echo -en "(6) : "
140
	echo -en "(6) : "
140
	i=0
141
	i=0
141
	for log_type in traceability ssh ext-access
142
	for log_type in traceability ssh ext-access
142
	do
143
	do
143
		i=`expr $i + 1`
144
		i=`expr $i + 1`
144
		[ -e /etc/ulogd-$log_type.conf ] && rm -f /etc/ulogd-$log_type.conf && echo -n "$i, "
145
		[ -e /etc/ulogd-$log_type.conf ] && rm -f /etc/ulogd-$log_type.conf && echo -n "$i, "
145
		i=`expr $i + 1`
146
		i=`expr $i + 1`
146
		[ -e /etc/systemd/system/ulogd-$log_type.service ] && rm -f /etc/systemd/system/ulogd-$log_type.service && echo -n "$i, "
147
		[ -e /etc/systemd/system/ulogd-$log_type.service ] && rm -f /etc/systemd/system/ulogd-$log_type.service && echo -n "$i, "
147
	done
148
	done
148
}
149
}
149
 
150
 
150
nfsen ()
151
nfsen ()
151
{
152
{
152
	# we don't remove user "nfcapd" & nfcapd folders in order to keep data when updating
153
	# we don't remove user "nfcapd" & nfcapd folders in order to keep data when updating
153
	echo -en "(2) : "
154
	echo -en "(2) : "
154
	[ -e /etc/systemd/system/nfcapd.service ] && rm -f /etc/systemd/system/nfcapd.service && echo -n "1"
155
	[ -e /etc/systemd/system/nfcapd.service ] && rm -f /etc/systemd/system/nfcapd.service && echo -n "1"
155
	[ -e /etc/systemd/system/nfsen-ng.service ] && rm -f /etc/systemd/system/nfsen-ng.service && echo -n "2"
156
	[ -e /etc/systemd/system/nfsen-ng.service ] && rm -f /etc/systemd/system/nfsen-ng.service && echo -n "2"
156
}
157
}
157
 
158
 
158
vnstat ()
159
vnstat ()
159
{
160
{
160
	echo -en "(2) : "
161
	echo -en "(2) : "
161
	[ -e /etc/vnstat.conf.default ] && mv /etc/vnstat.conf.default /etc/vnstat.conf && echo -n "1, "
162
	[ -e /etc/vnstat.conf.default ] && mv /etc/vnstat.conf.default /etc/vnstat.conf && echo -n "1, "
162
	if [ -e /etc/systemd/system/vnstat.service ]; then
163
	if [ -e /etc/systemd/system/vnstat.service ]; then
163
		rm -f /etc/systemd/system/vnstat.service
164
		rm -f /etc/systemd/system/vnstat.service
164
		echo -n "2"
165
		echo -n "2"
165
	fi
166
	fi
166
}
167
}
167
 
168
 
168
unbound ()
169
unbound ()
169
{
170
{
170
	echo -en "(9) : "
171
	echo -en "(9) : "
171
	[ -e /etc/unbound/unbound.conf.default ] && mv /etc/unbound/unbound.conf.default /etc/unbound/unbound.conf && echo -n "1, "
172
	[ -e /etc/unbound/unbound.conf.default ] && mv /etc/unbound/unbound.conf.default /etc/unbound/unbound.conf && echo -n "1, "
172
	[ -e /etc/unbound/unbound-blacklist.conf ] && rm -f /etc/unbound/unbound-blacklist.conf && echo -n "2, "
173
	[ -e /etc/unbound/unbound-blacklist.conf ] && rm -f /etc/unbound/unbound-blacklist.conf && echo -n "2, "
173
	[ -e /etc/unbound/unbound-whitelist.conf ] && rm -f /etc/unbound/unbound-whitelist.conf && echo -n "3, "
174
	[ -e /etc/unbound/unbound-whitelist.conf ] && rm -f /etc/unbound/unbound-whitelist.conf && echo -n "3, "
174
	[ -e /etc/unbound/unbound-blackhole.conf ] && rm -f /etc/unbound/unbound-blackhole.conf && echo -n "4, "
175
	[ -e /etc/unbound/unbound-blackhole.conf ] && rm -f /etc/unbound/unbound-blackhole.conf && echo -n "4, "
175
	[ -e /etc/unbound/conf.d ] && rm -rf /etc/unbound/conf.d && echo -n "5, "
176
	[ -e /etc/unbound/conf.d ] && rm -rf /etc/unbound/conf.d && echo -n "5, "
176
	i=6
177
	i=6
177
	for list in blacklist blackhole whitelist
178
	for list in blacklist blackhole whitelist
178
	do
179
	do
179
		if [ -e /etc/systemd/system/unbound-$list.service ]
180
		if [ -e /etc/systemd/system/unbound-$list.service ]
180
		then
181
		then
181
			rm -f /etc/systemd/system/unbound-$list.service
182
			rm -f /etc/systemd/system/unbound-$list.service
182
			echo -n "$i, "
183
			echo -n "$i, "
183
		fi
184
		fi
184
		i=`expr $i + 1`
185
		i=`expr $i + 1`
185
	done
186
	done
186
	if [ -e /etc/systemd/system/unbound.service ]; then
187
	if [ -e /etc/systemd/system/unbound.service ]; then
187
		rm -f /etc/systemd/system/unbound.service
188
		rm -f /etc/systemd/system/unbound.service
188
		echo -n "9"
189
		echo -n "9"
189
	fi
190
	fi
190
}
191
}
191
 
192
 
192
dhcpd ()
193
dhcpd ()
193
{
194
{
194
	echo -en "(1) : "
195
	echo -en "(1) : "
195
	[ -e /etc/dhcpd.conf.default ] && mv /etc/dhcpd.conf.default /etc/dhcpd.conf && echo -n "1"
196
	[ -e /etc/dhcpd.conf.default ] && mv /etc/dhcpd.conf.default /etc/dhcpd.conf && echo -n "1"
196
}
197
}
197
 
198
 
198
cron ()
199
cron ()
199
{
200
{
200
# /etc/cron.d/alcasar-daemon-watchdog is removed at the beginning of this script
201
# /etc/cron.d/alcasar-daemon-watchdog is removed at the beginning of this script
201
echo -en "(12) : "
202
echo -en "(12) : "
202
	i=1
203
	i=1
203
	for cron in `ls /etc/cron.d/alcasar-* 2>/dev/null`
204
	for cron in `ls /etc/cron.d/alcasar-* 2>/dev/null`
204
	do
205
	do
205
		rm $cron && echo -n "$i, "
206
		rm $cron && echo -n "$i, "
206
		i=`expr $i + 1`
207
		i=`expr $i + 1`
207
	done
208
	done
208
	[ -e /etc/crontab.default ] && mv /etc/crontab.default /etc/crontab && echo -n "11, "
209
	[ -e /etc/crontab.default ] && mv /etc/crontab.default /etc/crontab && echo -n "11, "
209
	[ -e /etc/anacrontab.default ] && mv /etc/anacrontab.default /etc/anacrontab && echo -n "12"
210
	[ -e /etc/anacrontab.default ] && mv /etc/anacrontab.default /etc/anacrontab && echo -n "12"
210
}
211
}
211
 
212
 
212
fail2ban ()
213
fail2ban ()
213
{
214
{
214
	echo -en "(11) : "
215
	echo -en "(11) : "
215
	[ -e /etc/fail2ban/jail.conf.default ] && mv /etc/fail2ban/jail.conf.default /etc/fail2ban/jail.conf && echo -n "1, "
216
	[ -e /etc/fail2ban/jail.conf.default ] && mv /etc/fail2ban/jail.conf.default /etc/fail2ban/jail.conf && echo -n "1, "
216
	[ -e /etc/fail2ban/action.d/iptables-allports.conf.default ] && mv /etc/fail2ban/action.d/iptables-allports.conf.default /etc/fail2ban/action.d/iptables-allports.conf # only for ALCASAR version <= V3.5.1
217
	[ -e /etc/fail2ban/action.d/iptables-allports.conf.default ] && mv /etc/fail2ban/action.d/iptables-allports.conf.default /etc/fail2ban/action.d/iptables-allports.conf # only for ALCASAR version <= V3.5.1
217
	i=2
218
	i=2
218
	for filter in `ls /etc/fail2ban/filter.d/alcasar_* 2>/dev/null`
219
	for filter in `ls /etc/fail2ban/filter.d/alcasar_* 2>/dev/null`
219
	do
220
	do
220
		i=`expr $i + 1`
221
		i=`expr $i + 1`
221
		rm $filter && echo -n "$i, "
222
		rm $filter && echo -n "$i, "
222
	done
223
	done
223
	for jail in `ls /etc/fail2ban/jail.d/*alcasar_* 2>/dev/null`
224
	for jail in `ls /etc/fail2ban/jail.d/*alcasar_* 2>/dev/null`
224
	do
225
	do
225
		i=`expr $i + 1`
226
		i=`expr $i + 1`
226
		rm $jail && echo -n "$i, "
227
		rm $jail && echo -n "$i, "
227
	done
228
	done
228
	if [ -e /etc/systemd/system/fail2ban.service ]; then
229
	if [ -e /etc/systemd/system/fail2ban.service ]; then
229
		rm -f /etc/systemd/system/fail2ban.service
230
		rm -f /etc/systemd/system/fail2ban.service
230
		echo -n "11"
231
		echo -n "11"
231
	fi
232
	fi
232
}
233
}
233
 
234
 
234
gammu_smsd ()
235
gammu_smsd ()
235
{
236
{
236
	echo -en "(4) : "
237
	echo -en "(4) : "
237
	[ -e /etc/gammu_smsd_conf ] && rm -f /etc/gammu_smsd_conf && echo -n "1, "
238
	[ -e /etc/gammu_smsd_conf ] && rm -f /etc/gammu_smsd_conf && echo -n "1, "
238
	[ -e /etc/systemd/system/gammu-smsd.service ] && rm -f /etc/systemd/system/gammu-smsd.service && echo -n "2, "
239
	[ -e /etc/systemd/system/gammu-smsd.service ] && rm -f /etc/systemd/system/gammu-smsd.service && echo -n "2, "
239
	[ -e /var/log/gammu-smsd ] && rm -rf /var/log/gammu-smsd && echo -n "3, "
240
	[ -e /var/log/gammu-smsd ] && rm -rf /var/log/gammu-smsd && echo -n "3, "
240
	userdel -r gammu_smsd 2>/dev/null && echo -n "4"
241
	userdel -r gammu_smsd 2>/dev/null && echo -n "4"
241
	#[ -e /lib/udev/rules.d/66-huawei.rules ] && rm -f /lib/udev/rules.d/66-huawei.rules && echo -n "4"
242
	#[ -e /lib/udev/rules.d/66-huawei.rules ] && rm -f /lib/udev/rules.d/66-huawei.rules && echo -n "4"
242
}
243
}
243
 
244
 
244
msec ()
245
msec ()
245
{
246
{
246
	echo -en "(2) : "
247
	echo -en "(2) : "
247
	if [ -e /etc/security/msec/security.conf ]; then
248
	if [ -e /etc/security/msec/security.conf ]; then
248
		[ -e /etc/security/msec/security.conf.default ] && mv /etc/security/msec/security.conf.default /etc/security/msec/security.conf && echo -n "1, "
249
		[ -e /etc/security/msec/security.conf.default ] && mv /etc/security/msec/security.conf.default /etc/security/msec/security.conf && echo -n "1, "
249
		[ -e /etc/security/msec/perm.local ] && rm -f /etc/security/msec/perm.local && echo -n "2"
250
		[ -e /etc/security/msec/perm.local ] && rm -f /etc/security/msec/perm.local && echo -n "2"
250
	else
251
	else
251
		echo -n "uninstalled"
252
		echo -n "uninstalled"
252
	fi
253
	fi
253
}
254
}
254
 
255
 
255
letsencrypt ()
256
letsencrypt ()
256
{
257
{
257
	echo -en "(3) : "
258
	echo -en "(3) : "
258
	[ -e /usr/local/etc/letsencrypt ] && rm -rf /usr/local/etc/letsencrypt && echo -n "1, "
259
	[ -e /usr/local/etc/letsencrypt ] && rm -rf /usr/local/etc/letsencrypt && echo -n "1, "
259
	[ -e /opt/acme.sh/acme.sh ] && /opt/acme.sh/acme.sh --uninstall --nocron 1>/dev/null && echo -n "2, "
260
	[ -e /opt/acme.sh/acme.sh ] && /opt/acme.sh/acme.sh --uninstall --nocron 1>/dev/null && echo -n "2, "
260
	[ -e /opt/acme.sh ] && rm -rf /opt/acme.sh && echo -n "3"
261
	[ -e /opt/acme.sh ] && rm -rf /opt/acme.sh && echo -n "3"
261
}
262
}
262
 
263
 
263
mail_service()
264
mail_service()
264
{
265
{
265
	echo -en "(1) : "
266
	echo -en "(1) : "
266
	[ -e /etc/postfix/main.cf.orig ] && mv /etc/postfix/main.cf.orig /etc/postfix/main.cf && echo -n "1"
267
	[ -e /etc/postfix/main.cf.orig ] && mv /etc/postfix/main.cf.orig /etc/postfix/main.cf && echo -n "1"
267
}
268
}
268
 
269
 
269
post_install ()
270
post_install ()
270
{
271
{
271
echo -en "(7) : "
272
echo -en "(7) : "
272
	[ -e /etc/mageia-release.default ] && mv -f /etc/mageia-release.default /etc/mageia-release && echo -n "1, "
273
	[ -e /etc/mageia-release.default ] && mv -f /etc/mageia-release.default /etc/mageia-release && echo -n "1, "
273
	[ -e /etc/ssh/alcasar-banner-ssh ] && rm -f /etc/ssh/alcasar-banner-ssh && echo -n "2, "
274
	[ -e /etc/ssh/alcasar-banner-ssh ] && rm -f /etc/ssh/alcasar-banner-ssh && echo -n "2, "
274
	[ -e /etc/ssh/sshd_config.default ] && mv -f /etc/ssh/sshd_config.default /etc/ssh/sshd_config && echo -n "3, "
275
	[ -e /etc/ssh/sshd_config.default ] && mv -f /etc/ssh/sshd_config.default /etc/ssh/sshd_config && echo -n "3, "
275
	[ -e /etc/bashrc.default ] && mv -f /etc/bashrc.default /etc/bashrc && echo -n "4, "
276
	[ -e /etc/bashrc.default ] && mv -f /etc/bashrc.default /etc/bashrc && echo -n "4, "
276
	[ -e /etc/sudoers.default ] && mv -f /etc/sudoers.default /etc/sudoers && echo -n "5, "
277
	[ -e /etc/sudoers.default ] && mv -f /etc/sudoers.default /etc/sudoers && echo -n "5, "
277
	[ -e /etc/security/limits.conf.default ] && mv -f /etc/security/limits.conf.default /etc/security/limits.conf && echo -n "6, "
278
	[ -e /etc/security/limits.conf.default ] && mv -f /etc/security/limits.conf.default /etc/security/limits.conf && echo -n "6, "
278
	[ -e /etc/default/grub.default ] && mv -f /etc/default/grub.default /etc/default/grub && echo -n "7"
279
	[ -e /etc/default/grub.default ] && mv -f /etc/default/grub.default /etc/default/grub && echo -n "7"
279
}
280
}
280
 
281
 
281
usage="Usage: alcasar-uninstall.sh {-update or --update} | {-full or --full}"
282
usage="Usage: alcasar-uninstall.sh {-update or --update} | {-full or --full}"
282
 
283
 
283
nb_args=$#
284
nb_args=$#
284
args=$1
285
args=$1
285
if [ $nb_args -eq 0 ]; then
286
if [ $nb_args -eq 0 ]; then
286
	nb_args=1
287
	nb_args=1
287
	args="-h"
288
	args="-h"
288
fi
289
fi
289
case $args in
290
case $args in
290
	-\? | -h* | --h*)
291
	-\? | -h* | --h*)
291
		echo "$usage"
292
		echo "$usage"
292
		exit 0
293
		exit 0
293
		;;
294
		;;
294
	--update | -update)
295
	--update | -update)
295
		mode="update"
296
		mode="update"
296
		;;
297
		;;
297
	--full | -full)
298
	--full | -full)
298
		mode="full"
299
		mode="full"
299
		;;
300
		;;
300
	*)
301
	*)
301
		echo "Argument inconnu :$1";
302
		echo "Argument inconnu :$1";
302
		echo "$usage"
303
		echo "$usage"
303
		exit 1
304
		exit 1
304
		;;
305
		;;
305
esac
306
esac
306
clear
307
clear
307
if [ $mode == "full" ]; then
308
if [ $mode == "full" ]; then
308
	echo "----------------------------------------------------------------------------"
309
	echo "----------------------------------------------------------------------------"
309
	echo "**                     Uninstall/Désinstallation d'ALCASAR		**"
310
	echo "**                     Uninstall/Désinstallation d'ALCASAR		**"
310
	echo "----------------------------------------------------------------------------"
311
	echo "----------------------------------------------------------------------------"
311
	services="vnstat clamav-daemon clamav-freshclam ntpd httpd radiusd mysqld unbound unbound-blacklist unbound-whitelist unbound-blackhole nfcapd nfsen-ng fail2ban iptables ulogd-ext-access ulogd-ssh ulogd-traceability e2guardian sshd chilli"
312
	services="vnstat clamav-daemon clamav-freshclam ntpd httpd radiusd mysqld unbound unbound-blacklist unbound-whitelist unbound-blackhole nfcapd nfsen-ng fail2ban iptables ulogd-ext-access ulogd-ssh ulogd-traceability e2guardian sshd chilli"
312
	/usr/local/bin/alcasar-logout.sh all # logout everybody
313
	/usr/local/bin/alcasar-logout.sh all # logout everybody
313
else
314
else
314
	echo "--------------------------------------------------------------------------"
315
	echo "--------------------------------------------------------------------------"
315
	echo "**                     update/mise à jour d'ALCASAR			**"
316
	echo "**                     update/mise à jour d'ALCASAR			**"
316
	echo "--------------------------------------------------------------------------"
317
	echo "--------------------------------------------------------------------------"
317
	# unbound, iptables & sshd should stay on to allow remote update
318
	# unbound, iptables & sshd should stay on to allow remote update
318
	services="vnstat clamav-daemon clamav-freshclam ntpd httpd radiusd mysqld unbound-blacklist unbound-whitelist unbound-blackhole nfcapd nfsen-ng fail2ban ulogd-ext-access ulogd-ssh ulogd-traceability e2guardian chilli"
319
	services="vnstat clamav-daemon clamav-freshclam ntpd httpd radiusd mysqld unbound-blacklist unbound-whitelist unbound-blackhole nfcapd nfsen-ng fail2ban ulogd-ext-access ulogd-ssh ulogd-traceability e2guardian chilli"
319
	/usr/local/bin/alcasar-bypass.sh -on # to allow remote update + users stay connected during the update
320
	/usr/local/bin/alcasar-bypass.sh -on # to allow remote update + users stay connected during the update
320
fi
321
fi
321
 
322
 
322
echo "Stopping services : "
323
echo "Stopping services : "
323
# remove daemon watchdog in order to not restart alcasar daemons during the uninstall process
324
# remove daemon watchdog in order to not restart alcasar daemons during the uninstall process
324
[ -e /etc/cron.d/alcasar-daemon-watchdog ] && rm -f /etc/cron.d/alcasar-daemon-watchdog
325
[ -e /etc/cron.d/alcasar-daemon-watchdog ] && rm -f /etc/cron.d/alcasar-daemon-watchdog
325
/usr/local/bin/alcasar-sms.sh --stop
326
/usr/local/bin/alcasar-sms.sh --stop
326
for i in $services
327
for i in $services
327
do
328
do
328
	service_exist=`systemctl list-unit-files | grep ^$i.service | wc -l`
329
	service_exist=`systemctl list-unit-files | grep ^$i.service | wc -l`
329
	if [ $service_exist -eq 1 ]; then
330
	if [ $service_exist -eq 1 ]; then
330
		/usr/bin/systemctl disable $i.service
331
		/usr/bin/systemctl disable $i.service
331
		/usr/bin/systemctl stop $i.service 1>/dev/null
332
		/usr/bin/systemctl stop $i.service 1>/dev/null
332
		sleep 1
333
		sleep 1
333
	else
334
	else
334
		echo "The service $i.service doesn't exist !"
335
		echo "The service $i.service doesn't exist !"
335
	fi
336
	fi
336
done
337
done
337
echo "Check the service clearing"
338
echo "Check the service clearing"
338
for i in $services
339
for i in $services
339
do
340
do
340
	if [ `systemctl is-active $i.service` == "active" ]; then
341
	if [ `systemctl is-active $i.service` == "active" ]; then
341
		echo "The service '$i' need to be killed"
342
		echo "The service '$i' need to be killed"
342
		/usr/bin/systemctl stop $i.service
343
		/usr/bin/systemctl stop $i.service
343
		killall $i
344
		killall $i
344
	fi
345
	fi
345
done
346
done
346
 
347
 
347
[ $mode == "update" ] && /usr/bin/systemctl reload sshd # reload sshd in case of remote update
348
[ $mode == "update" ] && /usr/bin/systemctl reload sshd # reload sshd in case of remote update
348
 
349
 
349
echo "Reset ALCASAR main functions : "
350
echo "Reset ALCASAR main functions : "
350
for func in init ACC CA time_server init_db freeradius chilli e2guardian antivirus ulogd nfsen vnstat unbound dhcpd cron fail2ban gammu_smsd msec letsencrypt mail_service post_install
351
for func in init ACC CA time_server init_db freeradius chilli e2guardian antivirus ulogd nfsen vnstat unbound dhcpd cron fail2ban gammu_smsd msec letsencrypt mail_service post_install
351
do
352
do
352
	echo -en "\n- $func "
353
	echo -en "\n- $func "
353
	$func
354
	$func
354
	if [ $DEBUG_ALCASAR == "on" ]; then
355
	if [ $DEBUG_ALCASAR == "on" ]; then
355
		echo -n " *** 'debug' : end removing function '$func' *** "
356
		echo -n " *** 'debug' : end removing function '$func' *** "
356
		read a
357
		read a
357
	fi
358
	fi
358
done
359
done
359
if [ $mode == "full" ]; then
360
if [ $mode == "full" ]; then
360
	echo -en "\n- network(10) : "
361
	echo -en "\n- network(10) : "
361
	hostnamectl set-hostname localhost.lan
362
	hostnamectl set-hostname localhost.lan
362
	chmod a-x /etc/sysconfig/network-scripts/default-*
363
	chmod a-x /etc/sysconfig/network-scripts/default-*
363
	i=0
364
	i=0
364
	for nic in `ls /etc/sysconfig/network-scripts/default-*|cut -d'-' -f4`
365
	for nic in `ls /etc/sysconfig/network-scripts/default-*|cut -d'-' -f4`
365
	do
366
	do
366
		i=`expr $i + 1`
367
		i=`expr $i + 1`
367
		/sbin/ifdown $nic
368
		/sbin/ifdown $nic
368
		[ -e /etc/sysconfig/network-scripts/default-ifcfg-$nic ] && mv -f /etc/sysconfig/network-scripts/default-ifcfg-$nic /etc/sysconfig/network-scripts/ifcfg-$nic && echo -n "$i ($nic), "
369
		[ -e /etc/sysconfig/network-scripts/default-ifcfg-$nic ] && mv -f /etc/sysconfig/network-scripts/default-ifcfg-$nic /etc/sysconfig/network-scripts/ifcfg-$nic && echo -n "$i ($nic), "
369
	done
370
	done
370
	[ -e /etc/sysconfig/network.default ] && mv -f /etc/sysconfig/network.default /etc/sysconfig/network && echo -n "3, "
371
	[ -e /etc/sysconfig/network.default ] && mv -f /etc/sysconfig/network.default /etc/sysconfig/network && echo -n "3, "
371
	[ -e /etc/hosts.default ] && mv -f /etc/hosts.default /etc/hosts && echo -n "4, "
372
	[ -e /etc/hosts.default ] && mv -f /etc/hosts.default /etc/hosts && echo -n "4, "
372
	[ -e /etc/hosts.allow.default ] && mv -f /etc/hosts.allow.default /etc/hosts.allow && echo -n "5, "
373
	[ -e /etc/hosts.allow.default ] && mv -f /etc/hosts.allow.default /etc/hosts.allow && echo -n "5, "
373
	[ -e /etc/hosts.deny.default ] && mv -f /etc/hosts.deny.default /etc/hosts.deny && echo -n "6, "
374
	[ -e /etc/hosts.deny.default ] && mv -f /etc/hosts.deny.default /etc/hosts.deny && echo -n "6, "
374
	[ -e /etc/modprobe.preload.default ] && mv -f /etc/modprobe.preload.default /etc/modprobe.preload && echo -n "7, "
375
	[ -e /etc/modprobe.preload.default ] && mv -f /etc/modprobe.preload.default /etc/modprobe.preload && echo -n "7, "
375
	if [ -e /etc/systemd/system/alcasar-network.service ]; then
376
	if [ -e /etc/systemd/system/alcasar-network.service ]; then
376
		rm -f /etc/systemd/system/alcasar-network.service
377
		rm -f /etc/systemd/system/alcasar-network.service
377
		echo -n "8, "
378
		echo -n "8, "
378
	fi
379
	fi
379
	if [ -e /etc/systemd/system/iptables.service ]; then
380
	if [ -e /etc/systemd/system/iptables.service ]; then
380
		rm -f /etc/systemd/system/iptables.service
381
		rm -f /etc/systemd/system/iptables.service
381
		echo -n "9, "
382
		echo -n "9, "
382
	fi
383
	fi
383
	[ -e /usr/libexec/iptables.init.default ] && mv -f /usr/libexec/iptables.init.default /usr/libexec/iptables.init && echo -n "10"
384
	[ -e /usr/libexec/iptables.init.default ] && mv -f /usr/libexec/iptables.init.default /usr/libexec/iptables.init && echo -n "10"
384
	/usr/bin/systemctl restart network
385
	/usr/bin/systemctl restart network
385
	sleep 1
386
	sleep 1
386
fi
387
fi
387
 
388
 
388
# Reset "skip.list" (we keep "kernel" in order not to download kernel we don't want to have)
389
# Reset "skip.list" (we keep "kernel" in order not to download kernel we don't want to have)
389
echo "/^kernel/" > /etc/urpmi/skip.list
390
echo "/^kernel/" > /etc/urpmi/skip.list
390
if [ `grep -E '^exclude=' /etc/dnf/dnf.conf |wc -l` -eq "1" ]; then
391
if [ `grep -E '^exclude=' /etc/dnf/dnf.conf |wc -l` -eq "1" ]; then
391
	$SED "s?^exclude=.*?exclude=kernel\*?g" /etc/dnf/dnf.conf
392
	$SED "s?^exclude=.*?exclude=kernel\*?g" /etc/dnf/dnf.conf
392
else
393
else
393
	echo "exclude=kernel*" >> /etc/dnf/dnf.conf
394
	echo "exclude=kernel*" >> /etc/dnf/dnf.conf
394
fi
395
fi
395
# Cleaning (remove all "old" alcasar scripts)
396
# Cleaning (remove all "old" alcasar scripts)
396
echo -en "\n- End of cleaning ...\n"
397
echo -en "\n- End of cleaning ...\n"
397
for rm_fic in /usr/local/bin /usr/local/etc /usr/local/sbin
398
for rm_fic in /usr/local/bin /usr/local/etc /usr/local/sbin
398
do
399
do
399
	rm -rf $rm_fic/alcasar*
400
	rm -rf $rm_fic/alcasar*
400
done
401
done
401
/usr/bin/update-grub2
402
/usr/bin/update-grub2
402
 
403
 
403
if [ $mode == "full" ]; then
404
if [ $mode == "full" ]; then
404
	echo -n "Waiting for Network to be up again : "
405
	echo -n "Waiting for Network to be up again : "
405
	i=0
406
	i=0
406
	while [ $i -lt 10 ] # We wait 10 seconds max
407
	while [ $i -lt 10 ] # We wait 10 seconds max
407
	do
408
	do
408
		echo -n "."
409
		echo -n "."
409
		DNS1=`grep ^nameserver /etc/resolv.conf|awk -F" " '{print $2}'|head -n 1`
410
		DNS1=`grep ^nameserver /etc/resolv.conf|awk -F" " '{print $2}'|head -n 1`
410
		if [ "$DNS1" != "" ] && [ "$DNS1" != "127.0.0.1" ]; then
411
		if [ "$DNS1" != "" ] && [ "$DNS1" != "127.0.0.1" ]; then
411
			i=9
412
			i=9
412
			echo -n "ok"
413
			echo -n "ok"
413
		fi
414
		fi
414
		i=`expr $i + 1`
415
		i=`expr $i + 1`
415
		sleep 1
416
		sleep 1
416
	done
417
	done
417
fi
418
fi
418
echo
419
echo
419
 
420