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