xref: /freebsd/tests/sys/geom/class/eli/delkey_test.sh (revision f397a004deeae195f8efdb4dc22a62204aa2c10d)
109d98641SEnji Cooper#!/bin/sh
209d98641SEnji Cooper# $FreeBSD$
309d98641SEnji Cooper
4*f397a004SAlan Somersatf_test_case delkey cleanup
5*f397a004SAlan Somersdelkey_head()
6*f397a004SAlan Somers{
7*f397a004SAlan Somers	atf_set "descr" "geli delkey can destroy the master key"
8*f397a004SAlan Somers	atf_set "require.user" "root"
9*f397a004SAlan Somers}
10*f397a004SAlan Somersdelkey_body()
11*f397a004SAlan Somers{
12*f397a004SAlan Somers	. $(atf_get_srcdir)/conf.sh
1309d98641SEnji Cooper
1409d98641SEnji Cooper	sectors=100
15041999e3SAlan Somers	md=$(attach_md -t malloc -s `expr $sectors + 1`)
1609d98641SEnji Cooper
17*f397a004SAlan Somers	atf_check dd if=/dev/random of=keyfile1 bs=512 count=16 status=none
18*f397a004SAlan Somers	atf_check dd if=/dev/random of=keyfile2 bs=512 count=16 status=none
19*f397a004SAlan Somers	atf_check dd if=/dev/random of=keyfile3 bs=512 count=16 status=none
20*f397a004SAlan Somers	atf_check dd if=/dev/random of=keyfile4 bs=512 count=16 status=none
2109d98641SEnji Cooper
22*f397a004SAlan Somers	atf_check geli init -B none -P -K keyfile1 ${md}
23*f397a004SAlan Somers	atf_check geli attach -p -k keyfile1 ${md}
24*f397a004SAlan Somers	atf_check -s exit:0 -o ignore geli setkey -n 1 -P -K keyfile2 ${md}
2509d98641SEnji Cooper
2609d98641SEnji Cooper	# Remove key 0 for attached provider.
27*f397a004SAlan Somers	atf_check geli delkey -n 0 ${md}
28*f397a004SAlan Somers	atf_check geli detach ${md}
2909d98641SEnji Cooper
3009d98641SEnji Cooper	# We cannot use keyfile1 anymore.
31*f397a004SAlan Somers	atf_check -s not-exit:0 -e match:"Wrong key" \
32*f397a004SAlan Somers		geli attach -p -k keyfile1 ${md}
3309d98641SEnji Cooper
3409d98641SEnji Cooper	# Attach with key 1.
35*f397a004SAlan Somers	atf_check geli attach -p -k keyfile2 ${md}
3609d98641SEnji Cooper
3709d98641SEnji Cooper	# We cannot remove last key without -f option (for attached provider).
38*f397a004SAlan Somers	atf_check -s not-exit:0 -e match:"This is the last Master Key" \
39*f397a004SAlan Somers		geli delkey -n 1 ${md}
4009d98641SEnji Cooper
4109d98641SEnji Cooper	# Remove last key for attached provider.
42*f397a004SAlan Somers	atf_check geli delkey -f -n 1 ${md}
4309d98641SEnji Cooper
4409d98641SEnji Cooper	# If there are no valid keys, but provider is attached, we can save situation.
45*f397a004SAlan Somers	atf_check -s exit:0 -o ignore geli setkey -n 0 -P -K keyfile3 ${md}
46*f397a004SAlan Somers	atf_check geli detach ${md}
4709d98641SEnji Cooper
4809d98641SEnji Cooper	# We cannot use keyfile2 anymore.
49*f397a004SAlan Somers	atf_check -s not-exit:0 -e match:"Wrong key" \
50*f397a004SAlan Somers		geli attach -p -k keyfile2 ${md}
5109d98641SEnji Cooper
5209d98641SEnji Cooper	# Attach with key 0.
53*f397a004SAlan Somers	atf_check geli attach -p -k keyfile3 ${md}
5409d98641SEnji Cooper
5509d98641SEnji Cooper	# Setup key 1.
56*f397a004SAlan Somers	atf_check -s exit:0 -o ignore geli setkey -n 1 -P -K keyfile4 ${md}
57*f397a004SAlan Somers	atf_check geli detach ${md}
5809d98641SEnji Cooper
5909d98641SEnji Cooper	# Remove key 1 for detached provider.
60*f397a004SAlan Somers	atf_check geli delkey -n 1 ${md}
6109d98641SEnji Cooper
6209d98641SEnji Cooper	# We cannot use keyfile4 anymore.
63*f397a004SAlan Somers	atf_check -s not-exit:0 -e match:"Wrong key" \
64*f397a004SAlan Somers		geli attach -p -k keyfile4 ${md}
6509d98641SEnji Cooper
6609d98641SEnji Cooper	# We cannot remove last key without -f option (for detached provider).
67*f397a004SAlan Somers	atf_check -s not-exit:0 -e match:"This is the last Master Key" \
68*f397a004SAlan Somers		geli delkey -n 0 ${md}
6909d98641SEnji Cooper
7009d98641SEnji Cooper	# Remove last key for detached provider.
71*f397a004SAlan Somers	atf_check geli delkey -f -n 0 ${md}
7209d98641SEnji Cooper
7309d98641SEnji Cooper	# We cannot use keyfile3 anymore.
74*f397a004SAlan Somers	atf_check -s not-exit:0 -e match:"No valid keys" \
75*f397a004SAlan Somers		geli attach -p -k keyfile3 ${md}
76*f397a004SAlan Somers}
77*f397a004SAlan Somersdelkey_cleanup()
78*f397a004SAlan Somers{
79*f397a004SAlan Somers	. $(atf_get_srcdir)/conf.sh
80*f397a004SAlan Somers	geli_test_cleanup
81*f397a004SAlan Somers}
8209d98641SEnji Cooper
83*f397a004SAlan Somersatf_init_test_cases()
84*f397a004SAlan Somers{
85*f397a004SAlan Somers	atf_add_test_case delkey
86*f397a004SAlan Somers}
87