aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Thompson <thompsa@FreeBSD.org>2009-02-16 02:42:17 +0000
committerAndrew Thompson <thompsa@FreeBSD.org>2009-02-16 02:42:17 +0000
commitd842ade9a4f9fff680c8ccd906e43886dc7b6b9a (patch)
tree74963cb002aa75101f016a1f559db99f087afd9b
parente31a0702639a37cf5d6d5a525a2260a1a62c131d (diff)
Notes
-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 9864494b0d0c..bae2f86ba811 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 682329463176..098e39ad938b 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