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
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to