summaryrefslogtreecommitdiffstats
path: root/modules/cert.inc
blob: 3b4a222a1f188dd32186ed9696f416b332718aa5 (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
#!/bin/bash

# Convert .pem certificates from <src> to an sqlite
# nssdb at <dest>. The destination DB will be created
# if it does not exist, otherwise the certificates will
# be added to the existing nssdb.
# cert_to_db <src> <dst>
cert_to_nssdb() {
	local db="$2"
	local src="$1"
	if ! [ -f "$db/cert9.db" ] && ! [ -f "$db/key4.db" ]; then
		mkdir -p "$db" || return 1
		certutil -N --empty-password -d sql:"$db" || return 1
	fi
	if [ -f "$src" ]; then
		certutil -A -d sql:"$db" -n "$( basename "$src" )" -t C,C,C -i "$src"
		return # pass exit code
	fi
	if [ -d "$src" ]; then
		find "$src" \( -type f -o -type l \) -name "*.pem" | while read -r file; do
			file="$( readlink -f "$file" )"
			# Make sure there's nothing after this call so the exit code survives the loop end
			certutil -A -d sql:"$db" -n "$( basename "$file" )" -t C,C,C -i "$file"
		done
		return # pass exit code from within loop
	fi
	echo "Source is not a file or directory" >&2
	return 1
}