summaryrefslogtreecommitdiffstats
path: root/sys/boot/common
diff options
context:
space:
mode:
authorthompsa <thompsa@FreeBSD.org>2009-02-16 02:42:17 +0000
committerthompsa <thompsa@FreeBSD.org>2009-02-16 02:42:17 +0000
commitb0997d1a78f9a42ec76c4b8c54a334622e41518a (patch)
tree74963cb002aa75101f016a1f559db99f087afd9b /sys/boot/common
parentc24b826e840d4b278e8a3e1ccb81a197d257f3ae (diff)
downloadFreeBSD-src-b0997d1a78f9a42ec76c4b8c54a334622e41518a.zip
FreeBSD-src-b0997d1a78f9a42ec76c4b8c54a334622e41518a.tar.gz
Add a helper function for loading geli keys from the loader.
Diffstat (limited to 'sys/boot/common')
-rw-r--r--sys/boot/common/loader.813
-rw-r--r--sys/boot/common/module.c38
2 files changed, 50 insertions, 1 deletions
diff --git a/sys/boot/common/loader.8 b/sys/boot/common/loader.8
index 9864494..bae2f86 100644
--- a/sys/boot/common/loader.8
+++ b/sys/boot/common/loader.8
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd November 8, 2007
+.Dd February 15, 2009
.Dt LOADER 8
.Os
.Sh NAME
@@ -215,6 +215,17 @@ Any arguments passed after the name of the file to be loaded
will be passed as arguments to that file.
Currently, argument passing does not work for the kernel.
.Pp
+.It Ic load_geli Xo
+.Op Fl n Ar keyno
+.Ar prov Ar file
+.Xc
+Loads a
+.Xr geli 8
+encryption keyfile for the given provider name.
+The key index can be specified via
+.Ar keyno
+or will default to zero.
+.Pp
.It Ic ls Xo
.Op Fl l
.Op Ar path
diff --git a/sys/boot/common/module.c b/sys/boot/common/module.c
index 6823294..098e39a 100644
--- a/sys/boot/common/module.c
+++ b/sys/boot/common/module.c
@@ -154,6 +154,44 @@ command_load(int argc, char *argv[])
return (error == 0 ? CMD_OK : CMD_ERROR);
}
+COMMAND_SET(load_geli, "load_geli", "load a geli key", command_load_geli);
+
+static int
+command_load_geli(int argc, char *argv[])
+{
+ char typestr[80];
+ char *cp;
+ int ch, num;
+
+ if (argc < 3) {
+ command_errmsg = "usage is [-n key#] <prov> <file>";
+ return(CMD_ERROR);
+ }
+
+ num = 0;
+ optind = 1;
+ optreset = 1;
+ while ((ch = getopt(argc, argv, "n:")) != -1) {
+ switch(ch) {
+ case 'n':
+ num = strtol(optarg, &cp, 0);
+ if (cp == optarg) {
+ sprintf(command_errbuf, "bad key index '%s'", optarg);
+ return(CMD_ERROR);
+ }
+ break;
+ case '?':
+ default:
+ /* getopt has already reported an error */
+ return(CMD_OK);
+ }
+ }
+ argv += (optind - 1);
+ argc -= (optind - 1);
+ sprintf(typestr, "%s:geli_keyfile%d", argv[1], num);
+ return(file_loadraw(typestr, argv[2]));
+}
+
COMMAND_SET(unload, "unload", "unload all modules", command_unload);
static int
OpenPOWER on IntegriCloud