svn commit: r188666 - head/sys/boot/common
Andrew Thompson
thompsa at FreeBSD.org
Sun Feb 15 18:42:18 PST 2009
Author: thompsa
Date: Mon Feb 16 02:42:17 2009
New Revision: 188666
URL: http://svn.freebsd.org/changeset/base/188666
Log:
Add a helper function for loading geli keys from the loader.
Modified:
head/sys/boot/common/loader.8
head/sys/boot/common/module.c
Modified: head/sys/boot/common/loader.8
==============================================================================
--- head/sys/boot/common/loader.8 Sun Feb 15 23:40:29 2009 (r188665)
+++ head/sys/boot/common/loader.8 Mon Feb 16 02:42:17 2009 (r188666)
@@ -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 t
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
Modified: head/sys/boot/common/module.c
==============================================================================
--- head/sys/boot/common/module.c Sun Feb 15 23:40:29 2009 (r188665)
+++ head/sys/boot/common/module.c Mon Feb 16 02:42:17 2009 (r188666)
@@ -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
More information about the svn-src-all
mailing list