svn commit: r281843 - in stable/10: sys/boot sys/boot/arm/uboot sys/boot/common sys/boot/forth sys/boot/i386/loader sys/boot/pc98/loader sys/boot/powerpc/ofw sys/boot/powerpc/ps3 sys/boot/sparc64/l...
Devin Teske
dteske at FreeBSD.org
Wed Apr 22 01:08:45 UTC 2015
Author: dteske
Date: Wed Apr 22 01:08:40 2015
New Revision: 281843
URL: https://svnweb.freebsd.org/changeset/base/281843
Log:
MFC revisions 277693,278335,280382-280385,280923-280926,280931,
280933-280939,280974-280976,281002,281009,281081,281176-281180,
281271,281275,281616 (described in-breif below):
r277693: Font fix (des)
r278335: Revert that
r280382: Whitespace, comments, and copyright update
r280383: Prevent inadvertent bootlock condition
r280384: Increase max passowrd length from 16 to 255 chars
r280385: Add missing variable hints to loader.conf(5) defaults
r280923: Whitespace
r280924: Comments
r280925: Optimize bootmsg to use fg/bg/me from screen.4th
r280926: Whitespace and cleanup
r280931: Comments
r280933: Move beastie to logo-*.4th; brands to brand-*.4th
r280934: Add remainder of supported ANSI escape sequences
r280935: Securely overwrite (zero) user input after password checks
r280936: Use equals for ASCII double frames
r280937: Solve dreaded "dictionary full" issue
r280938: Add "GELI Passphrase:" prompt to boot loader
r280939: Revert that (premature commit)
r280974: Use fg/b/me from screen.4th instead of literals
r280975: Eliminate literal escape sequences from *.4th
r280976: Use ^[[m mode-ending versus ^[[37m
r281002: Install newly added brand-*.4th and logo-*.4th files (jkim)
r281009: Revert .PATH changes to fix mips build (jkim)
r281081: Make sure forth manpages are only installed once (bapt)
r281176: Back to previous mode-endings based on feedback
r281177: Back to previous mode-endings based on feedback
r281178: Back to previous mode-endings based on feedback
r281179: Back to previous mode-endings based on feedback
r281180: Eliminate literal escape sequences from *.rc
r281271: Fix a bootlock condition if loader_version is set
NB: Commit message of r281271 has a typo, s/_logo/_version/
r281275: Re-do proper mode-endings
r281616: Add "GELI Passphrase:" prompt to boot loader
Relnotes: Added "GELI Passphrase:" prompt to boot loader
Added:
stable/10/sys/boot/forth/Makefile
- copied unchanged from r281081, head/sys/boot/forth/Makefile
stable/10/sys/boot/forth/Makefile.inc
- copied, changed from r281002, head/sys/boot/forth/Makefile.inc
stable/10/sys/boot/forth/brand-fbsd.4th
- copied, changed from r280933, head/sys/boot/forth/brand-fbsd.4th
stable/10/sys/boot/forth/logo-beastie.4th
- copied, changed from r280933, head/sys/boot/forth/logo-beastie.4th
stable/10/sys/boot/forth/logo-beastiebw.4th
- copied, changed from r280933, head/sys/boot/forth/logo-beastiebw.4th
stable/10/sys/boot/forth/logo-fbsdbw.4th
- copied, changed from r280933, head/sys/boot/forth/logo-fbsdbw.4th
stable/10/sys/boot/forth/logo-orb.4th
- copied, changed from r280933, head/sys/boot/forth/logo-orb.4th
stable/10/sys/boot/forth/logo-orbbw.4th
- copied, changed from r280933, head/sys/boot/forth/logo-orbbw.4th
Modified:
stable/10/sys/boot/Makefile
stable/10/sys/boot/arm/uboot/Makefile
stable/10/sys/boot/common/Makefile.inc
stable/10/sys/boot/forth/beastie.4th
stable/10/sys/boot/forth/brand.4th
stable/10/sys/boot/forth/check-password.4th
stable/10/sys/boot/forth/check-password.4th.8
stable/10/sys/boot/forth/delay.4th
stable/10/sys/boot/forth/frames.4th
stable/10/sys/boot/forth/loader.4th
stable/10/sys/boot/forth/loader.conf
stable/10/sys/boot/forth/menu-commands.4th
stable/10/sys/boot/forth/menu.4th
stable/10/sys/boot/forth/menu.rc
stable/10/sys/boot/forth/menusets.4th
stable/10/sys/boot/forth/pnp.4th
stable/10/sys/boot/forth/screen.4th
stable/10/sys/boot/forth/support.4th
stable/10/sys/boot/forth/version.4th
stable/10/sys/boot/i386/loader/Makefile
stable/10/sys/boot/pc98/loader/Makefile
stable/10/sys/boot/powerpc/ofw/Makefile
stable/10/sys/boot/powerpc/ps3/Makefile
stable/10/sys/boot/sparc64/loader/Makefile
stable/10/sys/kern/init_main.c
stable/10/usr.sbin/bsdinstall/scripts/zfsboot
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/boot/Makefile
==============================================================================
--- stable/10/sys/boot/Makefile Wed Apr 22 00:40:41 2015 (r281842)
+++ stable/10/sys/boot/Makefile Wed Apr 22 01:08:40 2015 (r281843)
@@ -6,6 +6,7 @@
.if ${MK_FORTH} != "no"
# Build the add-in FORTH interpreter.
SUBDIR+= ficl
+SUBDIR+= forth
.endif
# Pick the machine-dependent subdir based on the target architecture.
Modified: stable/10/sys/boot/arm/uboot/Makefile
==============================================================================
--- stable/10/sys/boot/arm/uboot/Makefile Wed Apr 22 00:40:41 2015 (r281842)
+++ stable/10/sys/boot/arm/uboot/Makefile Wed Apr 22 01:08:40 2015 (r281843)
@@ -137,11 +137,7 @@ ldscript.generated::
.if !defined(LOADER_ONLY)
.PATH: ${.CURDIR}/../../forth
-FILES+= loader.help loader.4th support.4th loader.conf
-FILES+= screen.4th frames.4th beastie.4th
-FILES+= brand.4th check-password.4th color.4th delay.4th
-FILES+= menu.4th menu-commands.4th menusets.4th shortcuts.4th version.4th
-FILESDIR_loader.conf= /boot/defaults
+.include "${.CURDIR}/../../forth/Makefile.inc"
# Put sample loader.rc and menu.rc on disk but don't enable them
# by default.
Modified: stable/10/sys/boot/common/Makefile.inc
==============================================================================
--- stable/10/sys/boot/common/Makefile.inc Wed Apr 22 00:40:41 2015 (r281842)
+++ stable/10/sys/boot/common/Makefile.inc Wed Apr 22 01:08:40 2015 (r281843)
@@ -56,16 +56,6 @@ SRCS+= pnp.c
# Forth interpreter
.if defined(BOOT_FORTH)
SRCS+= interp_forth.c
-MAN+= ../forth/beastie.4th.8
-MAN+= ../forth/brand.4th.8
-MAN+= ../forth/check-password.4th.8
-MAN+= ../forth/color.4th.8
-MAN+= ../forth/delay.4th.8
-MAN+= ../forth/loader.conf.5
-MAN+= ../forth/loader.4th.8
-MAN+= ../forth/menu.4th.8
-MAN+= ../forth/menusets.4th.8
-MAN+= ../forth/version.4th.8
.endif
.if defined(BOOT_PROMPT_123)
Copied: stable/10/sys/boot/forth/Makefile (from r281081, head/sys/boot/forth/Makefile)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ stable/10/sys/boot/forth/Makefile Wed Apr 22 01:08:40 2015 (r281843, copy of r281081, head/sys/boot/forth/Makefile)
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+MAN+= beastie.4th.8 \
+ brand.4th.8 \
+ check-password.4th.8 \
+ color.4th.8 \
+ delay.4th.8 \
+ loader.conf.5 \
+ loader.4th.8 \
+ menu.4th.8 \
+ menusets.4th.8
+
+.include <bsd.prog.mk>
Copied and modified: stable/10/sys/boot/forth/Makefile.inc (from r281002, head/sys/boot/forth/Makefile.inc)
==============================================================================
--- head/sys/boot/forth/Makefile.inc Thu Apr 2 20:07:05 2015 (r281002, copy source)
+++ stable/10/sys/boot/forth/Makefile.inc Wed Apr 22 01:08:40 2015 (r281843)
@@ -1,6 +1,5 @@
# $FreeBSD$
-.PATH: ${.CURDIR}/../../forth
FILES+= beastie.4th
FILES+= brand.4th
FILES+= brand-fbsd.4th
Modified: stable/10/sys/boot/forth/beastie.4th
==============================================================================
--- stable/10/sys/boot/forth/beastie.4th Wed Apr 22 00:40:41 2015 (r281842)
+++ stable/10/sys/boot/forth/beastie.4th Wed Apr 22 01:08:40 2015 (r281843)
@@ -1,6 +1,6 @@
-\ Copyright (c) 2003 Scott Long <scottl at freebsd.org>
+\ Copyright (c) 2003 Scott Long <scottl at FreeBSD.org>
\ Copyright (c) 2003 Aleksander Fafula <alex at fafula.com>
-\ Copyright (c) 2006-2013 Devin Teske <dteske at FreeBSD.org>
+\ Copyright (c) 2006-2015 Devin Teske <dteske at FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
@@ -28,7 +28,7 @@
marker task-beastie.4th
-only forth definitions also support-functions
+only forth definitions
variable logoX
variable logoY
@@ -37,209 +37,52 @@ variable logoY
46 logoX !
4 logoY !
-: beastie-logo ( x y -- ) \ color BSD mascot (19 rows x 34 columns)
-
-2dup at-xy ." [31m, ," 1+
-2dup at-xy ." /( )`" 1+
-2dup at-xy ." \ \___ / |" 1+
-2dup at-xy ." /- [37m_[31m `-/ '" 1+
-2dup at-xy ." ([37m/\/ \[31m \ /\" 1+
-2dup at-xy ." [37m/ / |[31m ` \" 1+
-2dup at-xy ." [34mO O [37m) [31m/ |" 1+
-2dup at-xy ." [37m`-^--'[31m`< '" 1+
-2dup at-xy ." (_.) _ ) /" 1+
-2dup at-xy ." `.___/` /" 1+
-2dup at-xy ." `-----' /" 1+
-2dup at-xy ." [33m<----.[31m __ / __ \" 1+
-2dup at-xy ." [33m<----|====[31mO)))[33m==[31m) \) /[33m====|" 1+
-2dup at-xy ." [33m<----'[31m `--' `.__,' \" 1+
-2dup at-xy ." | |" 1+
-2dup at-xy ." \ / /\" 1+
-2dup at-xy ." [36m______[31m( (_ / \______/" 1+
-2dup at-xy ." [36m,' ,-----' |" 1+
- at-xy ." `--{__________)[37m"
-
- \ Put the cursor back at the bottom
- 0 25 at-xy
-;
-
-: beastiebw-logo ( x y -- ) \ B/W BSD mascot (19 rows x 34 columns)
-
- 2dup at-xy ." , ," 1+
- 2dup at-xy ." /( )`" 1+
- 2dup at-xy ." \ \___ / |" 1+
- 2dup at-xy ." /- _ `-/ '" 1+
- 2dup at-xy ." (/\/ \ \ /\" 1+
- 2dup at-xy ." / / | ` \" 1+
- 2dup at-xy ." O O ) / |" 1+
- 2dup at-xy ." `-^--'`< '" 1+
- 2dup at-xy ." (_.) _ ) /" 1+
- 2dup at-xy ." `.___/` /" 1+
- 2dup at-xy ." `-----' /" 1+
- 2dup at-xy ." <----. __ / __ \" 1+
- 2dup at-xy ." <----|====O)))==) \) /====|" 1+
- 2dup at-xy ." <----' `--' `.__,' \" 1+
- 2dup at-xy ." | |" 1+
- 2dup at-xy ." \ / /\" 1+
- 2dup at-xy ." ______( (_ / \______/" 1+
- 2dup at-xy ." ,' ,-----' |" 1+
- at-xy ." `--{__________)"
-
- \ Put the cursor back at the bottom
- 0 25 at-xy
-;
-
-: fbsdbw-logo ( x y -- ) \ "FreeBSD" logo in B/W (13 rows x 21 columns)
-
- \ We used to use the beastie himself as our default... until the
- \ eventual complaint derided his reign of the advanced boot-menu.
- \
- \ This is the replacement of beastie to satiate the haters of our
- \ beloved helper-daemon (ready to track down and spear bugs with
- \ his trident and sporty sneakers; see above).
- \
- \ Since we merely just changed the default and not the default-
- \ location, below is an adjustment to the passed-in coordinates,
- \ forever influenced by the proper location of beastie himself
- \ kept as the default loader_logo_x/loader_logo_y values.
- \
- 5 + swap 6 + swap
-
- 2dup at-xy ." ______" 1+
- 2dup at-xy ." | ____| __ ___ ___ " 1+
- 2dup at-xy ." | |__ | '__/ _ \/ _ \" 1+
- 2dup at-xy ." | __|| | | __/ __/" 1+
- 2dup at-xy ." | | | | | | |" 1+
- 2dup at-xy ." |_| |_| \___|\___|" 1+
- 2dup at-xy ." ____ _____ _____" 1+
- 2dup at-xy ." | _ \ / ____| __ \" 1+
- 2dup at-xy ." | |_) | (___ | | | |" 1+
- 2dup at-xy ." | _ < \___ \| | | |" 1+
- 2dup at-xy ." | |_) |____) | |__| |" 1+
- 2dup at-xy ." | | | |" 1+
- at-xy ." |____/|_____/|_____/"
-
- \ Put the cursor back at the bottom
- 0 25 at-xy
-;
-
-: orb-logo ( x y -- ) \ color Orb mascot (15 rows x 30 columns)
-
- 3 + \ beastie adjustment (see `fbsdbw-logo' comments above)
-
- 2dup at-xy ." [31m``` [31;1m`[31m" 1+
- 2dup at-xy ." s` `.....---...[31;1m....--.``` -/[31m" 1+
- 2dup at-xy ." +o .--` [31;1m/y:` +.[31m" 1+
- 2dup at-xy ." yo`:. [31;1m:o `+-[31m" 1+
- 2dup at-xy ." y/ [31;1m-/` -o/[31m" 1+
- 2dup at-xy ." .- [31;1m::/sy+:.[31m" 1+
- 2dup at-xy ." / [31;1m`-- /[31m" 1+
- 2dup at-xy ." `: [31;1m:`[31m" 1+
- 2dup at-xy ." `: [31;1m:`[31m" 1+
- 2dup at-xy ." / [31;1m/[31m" 1+
- 2dup at-xy ." .- [31;1m-.[31m" 1+
- 2dup at-xy ." -- [31;1m-.[31m" 1+
- 2dup at-xy ." `:` [31;1m`:`" 1+
- 2dup at-xy ." [31;1m.-- `--." 1+
- at-xy ." .---.....----.[37m"
-
- \ Put the cursor back at the bottom
- 0 25 at-xy
-;
-
-: orbbw-logo ( x y -- ) \ B/W Orb mascot (15 rows x 32 columns)
-
- 3 + \ beastie adjustment (see `fbsdbw-logo' comments above)
-
- 2dup at-xy ." ``` `" 1+
- 2dup at-xy ." s` `.....---.......--.``` -/" 1+
- 2dup at-xy ." +o .--` /y:` +." 1+
- 2dup at-xy ." yo`:. :o `+-" 1+
- 2dup at-xy ." y/ -/` -o/" 1+
- 2dup at-xy ." .- ::/sy+:." 1+
- 2dup at-xy ." / `-- /" 1+
- 2dup at-xy ." `: :`" 1+
- 2dup at-xy ." `: :`" 1+
- 2dup at-xy ." / /" 1+
- 2dup at-xy ." .- -." 1+
- 2dup at-xy ." -- -." 1+
- 2dup at-xy ." `:` `:`" 1+
- 2dup at-xy ." .-- `--." 1+
- at-xy ." .---.....----."
-
- \ Put the cursor back at the bottom
- 0 25 at-xy
-;
-
\ This function draws any number of beastie logos at (loader_logo_x,
\ loader_logo_y) if defined, else (46,4) (to the right of the menu). To choose
\ your beastie, set the variable `loader_logo' to the respective logo name.
\
-\ Currently available:
-\
-\ NAME DESCRIPTION
-\ beastie Color ``Helper Daemon'' mascot (19 rows x 34 columns)
-\ beastiebw B/W ``Helper Daemon'' mascot (19 rows x 34 columns)
-\ fbsdbw "FreeBSD" logo in B/W (13 rows x 21 columns)
-\ orb Color ``Orb'' mascot (15 rows x 30 columns) (2nd default)
-\ orbbw B/W ``Orb'' mascot (15 rows x 32 columns)
-\ tribute Color ``Tribute'' (must fit 19 rows x 34 columns) (default)
-\ tributebw B/W ``Tribute'' (must fit 19 rows x 34 columns)
-\
-\ NOTE: Setting `loader_logo' to an undefined value (such as "none") will
-\ prevent beastie from being drawn.
+\ NOTE: Each is defined as a logo function in /boot/logo-${loader_logo}.4th
+\ NOTE: If `/boot/logo-${loader_logo}.4th' does not exist or does not define
+\ a `logo' function, no beastie is drawn.
\
: draw-beastie ( -- ) \ at (loader_logo_x,loader_logo_y), else (46,4)
s" loader_logo_x" getenv dup -1 <> if
?number 1 = if logoX ! then
- else
- drop
- then
+ else drop then
s" loader_logo_y" getenv dup -1 <> if
?number 1 = if logoY ! then
- else
- drop
- then
+ else drop then
- s" loader_logo" getenv dup -1 <> if
- dup 5 + allocate if ENOMEM throw then
- 0 2swap strcat s" -logo" strcat
- over -rot ( a-addr/u -- a-addr a-addr/u )
- sfind ( a-addr a-addr/u -- a-addr xt bool )
- rot ( a-addr xt bool -- xt bool a-addr )
- free ( xt bool a-addr -- xt bool ior )
- if EFREE throw then
+
+ \ If `logo' is defined, execute it
+ s" logo" sfind ( -- xt|0 bool ) if
+ logoX @ logoY @ rot execute
else
- 0 ( cruft -- cruft bool ) \ load the default below
- then
- 0= if
- drop ( cruft -- )
- loader_color? if
- ['] orb-logo
+ \ Not defined; try-include desired logo file
+ drop ( xt = 0 ) \ cruft
+ s" loader_logo" getenv dup -1 = over 0= or if
+ dup 0= if 2drop else drop then \ getenv result unused
+ loader_color? if
+ s" try-include /boot/logo-orb.4th"
+ else
+ s" try-include /boot/logo-orbbw.4th"
+ then
else
- ['] orbbw-logo
+ 2drop ( c-addr/u -- ) \ getenv result unused
+ s" try-include /boot/logo-${loader_logo}.4th"
then
+ evaluate
+ 1 spaces
+
+ \ Execute `logo' if defined now
+ s" logo" sfind if
+ logoX @ logoY @ rot execute
+ else drop then
then
- logoX @ logoY @ rot execute
;
-: clear-beastie ( -- ) \ clears beastie from the screen
- logoX @ logoY @
- 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+
- 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+
- 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+
- 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+
- 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+
- 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+
- 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+
- 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+
- 2dup at-xy 34 spaces 1+ 2dup at-xy 34 spaces 1+
- 2dup at-xy 34 spaces 2drop
-
- \ Put the cursor back at the bottom
- 0 25 at-xy
-;
+also support-functions
: beastie-start ( -- ) \ starts the menu
s" console" getenv dup -1 <> if
@@ -247,8 +90,7 @@ variable logoY
s" set beastie_disable=YES" evaluate
then
else drop then
- s" beastie_disable" getenv
- dup -1 <> if
+ s" beastie_disable" getenv dup -1 <> if
s" YES" compare-insensitive 0= if
any_conf_read? if
load_kernel
@@ -256,12 +98,9 @@ variable logoY
then
exit \ to autoboot (default)
then
- else
- drop
- then
+ else drop then
- s" loader_delay" getenv
- -1 = if
+ s" loader_delay" getenv -1 = if
s" include /boot/menu.rc" evaluate
else
drop
@@ -272,4 +111,4 @@ variable logoY
then
;
-only forth also
+only forth definitions
Copied and modified: stable/10/sys/boot/forth/brand-fbsd.4th (from r280933, head/sys/boot/forth/brand-fbsd.4th)
==============================================================================
--- head/sys/boot/forth/brand-fbsd.4th Wed Apr 1 01:14:19 2015 (r280933, copy source)
+++ stable/10/sys/boot/forth/brand-fbsd.4th Wed Apr 22 01:08:40 2015 (r281843)
@@ -26,13 +26,21 @@
2 brandX ! 1 brandY ! \ Initialize brand placement defaults
+: brand+ ( x y c-addr/u -- x y' )
+ 2swap 2dup at-xy 2swap \ position the cursor
+ type \ print to the screen
+ 1+ \ increase y for next time we're called
+;
+
: brand ( x y -- ) \ "FreeBSD" [wide] logo in B/W (7 rows x 42 columns)
- 2dup at-xy ." ______ ____ _____ _____ " 1+
- 2dup at-xy ." | ____| | _ \ / ____| __ \ " 1+
- 2dup at-xy ." | |___ _ __ ___ ___ | |_) | (___ | | | |" 1+
- 2dup at-xy ." | ___| '__/ _ \/ _ \| _ < \___ \| | | |" 1+
- 2dup at-xy ." | | | | | __/ __/| |_) |____) | |__| |" 1+
- 2dup at-xy ." | | | | | | || | | |" 1+
- at-xy ." |_| |_| \___|\___||____/|_____/|_____/ "
+ s" ______ ____ _____ _____ " brand+
+ s" | ____| | _ \ / ____| __ \ " brand+
+ s" | |___ _ __ ___ ___ | |_) | (___ | | | |" brand+
+ s" | ___| '__/ _ \/ _ \| _ < \___ \| | | |" brand+
+ s" | | | | | __/ __/| |_) |____) | |__| |" brand+
+ s" | | | | | | || | | |" brand+
+ s" |_| |_| \___|\___||____/|_____/|_____/ " brand+
+
+ 2drop
;
Modified: stable/10/sys/boot/forth/brand.4th
==============================================================================
--- stable/10/sys/boot/forth/brand.4th Wed Apr 22 00:40:41 2015 (r281842)
+++ stable/10/sys/boot/forth/brand.4th Wed Apr 22 01:08:40 2015 (r281843)
@@ -1,4 +1,4 @@
-\ Copyright (c) 2006-2011 Devin Teske <dteske at FreeBSD.org>
+\ Copyright (c) 2006-2015 Devin Teske <dteske at FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
@@ -29,74 +29,46 @@ marker task-brand.4th
variable brandX
variable brandY
-\ Initialize logo placement
+\ Initialize brand placement to defaults
2 brandX !
1 brandY !
-: fbsd-logo ( x y -- ) \ "FreeBSD" [wide] logo in B/W (7 rows x 42 columns)
-
- 2dup at-xy ." ______ ____ _____ _____ " 1+
- 2dup at-xy ." | ____| | _ \ / ____| __ \ " 1+
- 2dup at-xy ." | |___ _ __ ___ ___ | |_) | (___ | | | |" 1+
- 2dup at-xy ." | ___| '__/ _ \/ _ \| _ < \___ \| | | |" 1+
- 2dup at-xy ." | | | | | __/ __/| |_) |____) | |__| |" 1+
- 2dup at-xy ." | | | | | | || | | |" 1+
- at-xy ." |_| |_| \___|\___||____/|_____/|_____/ "
-
- \ Put the cursor back at the bottom
- 0 25 at-xy
-;
-
-\ This function draws any number of company logos at (loader_brand_x,
-\ loader_brand_y) if defined, or (2,1) (top-left) if not defined. To choose
-\ your logo, set the variable `loader_brand' to the respective logo name.
-\
-\ Currently available:
-\
-\ NAME DESCRIPTION
-\ fbsd FreeBSD logo
+\ This function draws any number of company brands at (loader_brand_x,
+\ loader_brand_y) if defined, or (2,1) (top-left). To choose your brand, set
+\ the variable `loader_brand' to the respective brand name.
+\
+\ NOTE: Each is defined as a brand function in /boot/brand-${loader_brand}.4th
+\ NOTE: If `/boot/brand-${loader_brand}.4th' does not exist or does not define
+\ a `brand' function, no brand is drawn.
\
-\ NOTE: Setting `loader_brand' to the value of an existing function
-\ (such as "mycustom-brand") will cause that symbol to be executed.
-\ NOTE: Setting `loader_brand' to an undefined value (such as "none") will
-\ prevent any brand from being drawn.
-\
-: draw-brand ( -- )
+: draw-brand ( -- ) \ at (loader_brand_x,loader_brand_y), else (2,1)
s" loader_brand_x" getenv dup -1 <> if
- ?number 1 = if
- brandX !
- then
- else
- drop
- then
-
+ ?number 1 = if brandX ! then
+ else drop then
s" loader_brand_y" getenv dup -1 <> if
- ?number 1 = if
- brandY !
- then
- else
- drop
- then
+ ?number 1 = if brandY ! then
+ else drop then
- s" loader_brand" getenv dup -1 = if
- brandX @ brandY @ fbsd-logo
- drop exit
- then
+ \ If `brand' is defined, execute it
+ s" brand" sfind ( -- xt|0 bool ) if
+ brandX @ brandY @ rot execute
+ else
+ \ Not defined; try-include desired brand file
+ drop ( xt = 0 ) \ cruft
+ s" loader_brand" getenv dup -1 = over 0= or if
+ dup 0= if 2drop else drop then \ getenv result unused
+ s" try-include /boot/brand-fbsd.4th"
+ else
+ 2drop ( c-addr/u -- ) \ getenv result unused
+ s" try-include /boot/brand-${loader_brand}.4th"
+ then
+ evaluate
+ 1 spaces
- 2dup s" fbsd" compare-insensitive 0= if
- brandX @ brandY @ fbsd-logo
- 2drop exit
+ \ Execute `brand' if defined now
+ s" brand" sfind if
+ brandX @ brandY @ rot execute
+ else drop then
then
-
- \ if it refers to a raw symbol then run that function
- sfind if
- brandX @ brandY @
- 2 roll
- execute
- else
- drop
- then
-
- 2drop
;
Modified: stable/10/sys/boot/forth/check-password.4th
==============================================================================
--- stable/10/sys/boot/forth/check-password.4th Wed Apr 22 00:40:41 2015 (r281842)
+++ stable/10/sys/boot/forth/check-password.4th Wed Apr 22 01:08:40 2015 (r281843)
@@ -1,4 +1,4 @@
-\ Copyright (c) 2006-2012 Devin Teske <dteske at FreeBSD.org>
+\ Copyright (c) 2006-2015 Devin Teske <dteske at FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
@@ -28,15 +28,19 @@ marker task-check-password.4th
include /boot/screen.4th
-13 constant enter_key \ The decimal ASCII value for Enter key
-8 constant bs_key \ The decimal ASCII value for Backspace key
-16 constant readmax \ Maximum number of characters for the password
+vocabulary password-processing
+only forth also password-processing definitions
-variable readX \ Current X offset (column)(used by read)
-variable read-start \ Starting X offset (column)(used by read)
+13 constant enter_key \ The decimal ASCII value for Enter key
+8 constant bs_key \ The decimal ASCII value for Backspace key
+21 constant ctrl_u \ The decimal ASCII value for Ctrl-U sequence
+255 constant readmax \ Maximum number of characters for the password
-create readval 16 allot \ input obtained (maximum 16 characters)
-variable readlen \ input length
+variable read-tick \ Twiddle position (used by read)
+variable read-start \ Starting X offset (column)(used by read)
+
+create readval readmax allot \ input obtained (up to readmax characters)
+variable readlen \ input length
\ This function blocks program flow (loops forever) until a key is pressed.
\ The key that was pressed is added to the top of the stack in the form of its
@@ -48,37 +52,50 @@ variable readlen \ input length
\
: sgetkey ( -- )
- begin \ Loop forever
- key? if \ Was a key pressed? (see loader(8))
-
- drop \ Remove stack-cruft
- key \ Get the key that was pressed
+ begin \ Loop forever
+ key? if \ Was a key pressed? (see loader(8))
+ drop \ Remove stack-cruft
+ key \ Get the key that was pressed
+
+ \ Check key pressed (see loader(8)) and input limit
+ dup 0<> if ( and ) readlen @ readmax < if
+ \ Spin the twiddle and then exit this function
+ read-tick @ dup 1+ 4 mod read-tick !
+ 2 spaces
+ dup 0 = if ( 1 ) ." /" else
+ dup 1 = if ( 2 ) ." -" else
+ dup 2 = if ( 3 ) ." \" else
+ dup 3 = if ( 4 ) ." |" else
+ 1 spaces
+ then then then then drop
+ read-start @ 25 at-xy
+ exit
+ then then
+
+ \ Always allow Backspace, Enter, and Ctrl-U
+ dup bs_key = if exit then
+ dup enter_key = if exit then
+ dup ctrl_u = if exit then
+ then
+ 50 ms \ Sleep for 50 milliseconds (see loader(8))
+ again
+;
- \ Check key pressed (see loader(8)) and input limit
- dup 0<> if ( and ) readlen @ readmax < if
+: cfill ( c c-addr/u -- )
+ begin dup 0> while
+ -rot 2dup c! 1+ rot 1-
+ repeat 2drop drop
+;
- \ Echo an asterisk (unless Backspace/Enter)
- dup bs_key <> if ( and ) dup enter_key <> if
- ." *" \ Echo an asterisk
- then then
-
- exit \ Exit from the function
- then then
-
- \ Always allow Backspace and Enter
- dup bs_key = if exit then
- dup enter_key = if exit then
-
- then
- 50 ms \ Sleep for 50 milliseconds (see loader(8))
- again
+: read-reset ( -- )
+ 0 readlen !
+ 0 readval readmax cfill
;
-: read ( String prompt -- )
+: read ( c-addr/u -- ) \ Expects string prompt as stack input
0 25 at-xy \ Move the cursor to the bottom-left
dup 1+ read-start ! \ Store X offset after the prompt
- read-start @ readX ! \ copy value to the current X offset
0 readlen ! \ Initialize the read length
type \ Print the prompt
@@ -90,63 +107,53 @@ variable readlen \ input length
\ security reasons). If Enter is pressed, we process the
\ password, otherwise augment the key to a string.
- \ If the key that was entered was not Enter, advance
- dup enter_key <> if
- readX @ 1+ readX ! \ Advance the column
- readlen @ 1+ readlen ! \ Increment input length
- then
-
- \ Handle backspacing
- dup bs_key = if
- readX @ 2 - readX ! \ Set new cursor position
- readlen @ 2 - readlen ! \ Decrement input length
-
- \ Don't move behind starting position
- readX @ read-start @ < if
- read-start @ readX !
- then
- readlen @ 0< if
- 0 readlen !
- then
-
- \ Reposition cursor and erase character
- readX @ 25 at-xy 1 spaces readX @ 25 at-xy
- then
-
dup enter_key = if
- drop \ Clean up stack cruft
- 10 emit \ Echo new line
+ drop \ Clean up stack cruft
+ 3 spaces \ Erase the twiddle
+ 10 emit \ Echo new line
exit
- then
-
- \ If not Backspace or Enter, store the character
- dup bs_key <> if ( and ) dup enter_key <> if
-
- \ store the character in our buffer
- dup readval readlen @ 1- + c!
-
- then then
-
- drop \ drop the last key that was entered
+ else dup ctrl_u = if
+ 3 spaces read-start @ 25 at-xy \ Erase the twiddle
+ 0 readlen ! \ Reset input to NULL
+ else dup bs_key = if
+ readlen @ 1 - dup readlen ! \ Decrement input length
+ dup 0< if drop 0 dup readlen ! then \ Don't go negative
+ 0= if 3 spaces read-start @ 25 at-xy then \ Twiddle
+ else dup \ Store the character
+ \ NB: sgetkey prevents overflow by way of blocking
+ \ at readmax except for Backspace or Enter
+ readlen @ 1+ dup readlen ! 1- readval + c!
+ then then then
+ drop \ last key pressed
again \ Enter was not pressed; repeat
;
+only forth definitions also password-processing
+
: check-password ( -- )
\ Do not allow the user to proceed beyond this point if a boot-lock
\ password has been set (preventing even boot from proceeding)
s" bootlock_password" getenv dup -1 <> if
+ dup readmax > if drop readmax then
begin
s" Boot Password: " read ( prompt -- )
2dup readval readlen @ compare 0<>
while
3000 ms ." loader: incorrect password" 10 emit
repeat
- 2drop ( c-addr/u )
- else
- drop ( -1 ) \ getenv cruft
- then
+ 2drop read-reset
+ else drop then
+
+ \ Prompt for GEOM ELI (geli(8)) passphrase if enabled
+ s" geom_eli_passphrase_prompt" getenv dup -1 <> if
+ s" YES" compare-insensitive 0= if
+ s" GELI Passphrase: " read ( prompt -- )
+ readval readlen @ s" kern.geom.eli.passphrase" setenv
+ read-reset
+ then
+ else drop then
\ Exit if a password was not set
s" password" getenv -1 = if exit else drop then
@@ -159,12 +166,14 @@ variable readlen \ input length
\ Only reached if autoboot fails for any reason (including if/when
\ the user aborts/escapes the countdown sequence leading to boot).
- s" password" getenv
+ s" password" getenv dup readmax > if drop readmax then
begin
s" Password: " read ( prompt -- )
- 2dup readval readlen @ compare 0= if
- 2drop exit \ Correct password
+ 2dup readval readlen @ compare 0= if \ Correct password?
+ 2drop read-reset exit
then
3000 ms ." loader: incorrect password" 10 emit
again
;
+
+only forth definitions
Modified: stable/10/sys/boot/forth/check-password.4th.8
==============================================================================
--- stable/10/sys/boot/forth/check-password.4th.8 Wed Apr 22 00:40:41 2015 (r281842)
+++ stable/10/sys/boot/forth/check-password.4th.8 Wed Apr 22 01:08:40 2015 (r281843)
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2011-2012 Devin Teske
+.\" Copyright (c) 2011-2015 Devin Teske
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 10, 2012
+.Dd March 20, 2015
.Dt CHECK-PASSWORD.4TH 8
.Os
.Sh NAME
@@ -33,8 +33,12 @@
.Sh DESCRIPTION
The file that goes by the name of
.Nm
-is a set of commands designed to either prevent booting or prevent modification
-of boot options without an appropriately configured password.
+is a set of commands designed to do one or more of the following:
+.Pp
+.Dl o Prevent booting without password
+.Dl o Prevent modification of boot options without password
+.Dl o Provide a password to mount geli(8) encrypted root disk(s)
+.Pp
The commands of
.Nm
by themselves are not enough for most uses.
@@ -58,14 +62,23 @@ The commands provided by it are:
.Pp
.Bl -tag -width disable-module_module -compact -offset indent
.It Ic check-password
-Dual-purpose function that can either protect the interactive boot menu or
-prevent boot without password (separately).
+Multi-purpose function that can protect the interactive boot menu,
+prevent boot without password, or prompt for geli(8) passphrase
+.Pq depending on Xr loader.conf 5 settings .
.Pp
First checks
.Va bootlock_password
and if-set, the user cannot continue until the correct password is entered.
.Pp
-Next checks
+Next, checks
+.Va geom_eli_passphrase_prompt
+and if set to
+.Li YES
+.Pq case-insensitive
+prompts the user to enter their GELI password for later mounting of the root
+device(s) during boot.
+.Pp
+Last, checks
.Va password
and if-set, tries to
.Ic autoboot
@@ -81,6 +94,11 @@ The environment variables that effect it
Sets the bootlock password (up to 16 characters long) that is required by
.Ic check-password
to be entered before the system is allowed to boot.
+.It Va geom_eli_passphrase_prompt
+Selects whether loader(8) will prompt for GELI credentials, handing-off to the
+kernel for later mounting of
+.Xr geli 8
+encrypted root device(s).
.It Va password
Sets the password (up to 16 characters long) that is required by
.Ic check-password
@@ -122,6 +140,16 @@ to prevent booting without password:
.Bd -literal -offset indent -compact
bootlock_password="boot"
.Ed
+.Pp
+Add the following to
+.Xr loader.conf 5
+to generate a prompt at boot to collect GELI credentials for mounting
+.Xr geli 8
+encrypted root device(s):
+.Pp
+.Bd -literal -offset indent -compact
+geom_eli_passphrase_prompt="YES"
+.Ed
.Sh SEE ALSO
.Xr loader.conf 5 ,
.Xr loader 8 ,
Modified: stable/10/sys/boot/forth/delay.4th
==============================================================================
--- stable/10/sys/boot/forth/delay.4th Wed Apr 22 00:40:41 2015 (r281842)
+++ stable/10/sys/boot/forth/delay.4th Wed Apr 22 01:08:40 2015 (r281843)
@@ -1,4 +1,4 @@
-\ Copyright (c) 2008-2011 Devin Teske <dteske at FreeBSD.org>
+\ Copyright (c) 2008-2015 Devin Teske <dteske at FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
@@ -26,6 +26,9 @@
marker task-delay.4th
+vocabulary delay-processing
+only forth also delay-processing definitions
+
2 constant delay_default \ Default delay (in seconds)
3 constant etx_key \ End-of-Text character produced by Ctrl+C
13 constant enter_key \ Carriage-Return character produce by ENTER
@@ -36,6 +39,8 @@ variable delay_delay \ determined c
variable delay_cancelled \ state variable for user cancellation
variable delay_showdots \ whether continually print dots while waiting
+only forth definitions also delay-processing
+
: delay_execute ( -- )
\ make sure that we have a command to execute
@@ -110,3 +115,5 @@ variable delay_showdots \ whether cont
evaluate \ evaluate/execute the command string
then
;
+
+only forth definitions
Modified: stable/10/sys/boot/forth/frames.4th
==============================================================================
--- stable/10/sys/boot/forth/frames.4th Wed Apr 22 00:40:41 2015 (r281842)
+++ stable/10/sys/boot/forth/frames.4th Wed Apr 22 01:08:40 2015 (r281843)
@@ -1,9 +1,37 @@
-\ Words implementing frame drawing
-\ XXX Filled boxes are left as an exercise for the reader... ;-/
+\ Copyright (c) 2003 Scott Long <scottl at FreeBSD.org>
+\ Copyright (c) 2012-2015 Devin Teske <dteske at FreeBSD.org>
+\ All rights reserved.
+\
+\ Redistribution and use in source and binary forms, with or without
+\ modification, are permitted provided that the following conditions
+\ are met:
+\ 1. Redistributions of source code must retain the above copyright
+\ notice, this list of conditions and the following disclaimer.
+\ 2. Redistributions in binary form must reproduce the above copyright
+\ notice, this list of conditions and the following disclaimer in the
+\ documentation and/or other materials provided with the distribution.
+\
+\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+\ SUCH DAMAGE.
+\
\ $FreeBSD$
marker task-frames.4th
+vocabulary frame-drawing
+only forth also frame-drawing definitions
+
+\ XXX Filled boxes are left as an exercise for the reader... ;-/
+
variable h_el
variable v_el
variable lt_el
@@ -14,6 +42,7 @@ variable fill
\ ASCII frames (used when serial console is detected)
45 constant ascii_dash
+ 61 constant ascii_equal
124 constant ascii_pipe
43 constant ascii_plus
@@ -61,6 +90,8 @@ s" arch-pc98" environment? [if]
178 constant fill_bright
[then]
+only forth definitions also frame-drawing
+
: hline ( len x y -- ) \ Draw horizontal single line
at-xy \ move cursor
0 do
@@ -88,7 +119,11 @@ s" arch-pc98" environment? [if]
;
: f_double ( -- ) \ set frames to double
- boot_serial? if f_ascii exit then
+ boot_serial? if
+ f_ascii
+ ascii_equal h_el !
+ exit
+ then
dh_el h_el !
dv_el v_el !
dlt_el lt_el !
@@ -126,3 +161,5 @@ s" arch-pc98" environment? [if]
f_single
fill_none fill !
+
+only forth definitions
Modified: stable/10/sys/boot/forth/loader.4th
==============================================================================
--- stable/10/sys/boot/forth/loader.4th Wed Apr 22 00:40:41 2015 (r281842)
+++ stable/10/sys/boot/forth/loader.4th Wed Apr 22 01:08:40 2015 (r281843)
@@ -1,4 +1,5 @@
-\ Copyright (c) 1999 Daniel C. Sobral <dcs at freebsd.org>
+\ Copyright (c) 1999 Daniel C. Sobral <dcs at FreeBSD.org>
+\ Copyright (c) 2011-2015 Devin Teske <dteske at FreeBSD.org>
\ All rights reserved.
\
\ Redistribution and use in source and binary forms, with or without
@@ -24,6 +25,8 @@
\
\ $FreeBSD$
+only forth definitions
+
s" arch-i386" environment? [if] [if]
s" loader_version" environment? [if]
11 < [if]
@@ -42,15 +45,16 @@ s" arch-i386" environment? [if] [if]
include /boot/support.4th
include /boot/color.4th
include /boot/delay.4th
+include /boot/check-password.4th
-only forth also support-functions also builtins definitions
+only forth definitions
: bootmsg ( -- )
- loader_color? if
- ." [37;44mBooting...[0m" cr
- else
- ." Booting..." cr
- then
+ loader_color? dup ( -- bool bool )
+ if 7 fg 4 bg then
+ ." Booting..."
+ if me then
+ cr
;
: try-menu-unset
@@ -77,6 +81,8 @@ only forth also support-functions also b
then
;
+only forth also support-functions also builtins definitions
+
: boot
0= if ( interpreted ) get_arguments then
@@ -120,15 +126,13 @@ only forth also support-functions also b
?dup 0= if 0 1 autoboot then
;
-also forth definitions also builtins
+also forth definitions previous
builtin: boot
builtin: boot-conf
only forth definitions also support-functions
-include /boot/check-password.4th
-
\ ***** start
\
\ Initializes support.4th global variables, sets loader_conf_files,
@@ -244,5 +248,4 @@ include /boot/check-password.4th
then
; immediate \ interpret immediately for access to `source' (aka tib)
-only forth also
-
+only forth definitions
Modified: stable/10/sys/boot/forth/loader.conf
==============================================================================
--- stable/10/sys/boot/forth/loader.conf Wed Apr 22 00:40:41 2015 (r281842)
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-stable-10
mailing list