From c262cbbc8301f7c884fd4800056ee51ba75d931c Mon Sep 17 00:00:00 2001 From: Toomas Soome Date: Sun, 12 Jul 2015 02:22:12 +0300 Subject: 6703 update bootadm to support loader configuration (loader project) 6708 update eeprom for loader (loader project) Reviewed by: Richard Lowe Reviewed by: Patrick Mooney Reviewed by: Alex Wilson Approved by: Robert Mustacchi --- usr/src/cmd/boot/bootadm/Makefile | 18 +- usr/src/cmd/boot/bootadm/bootadm.c | 1821 +++++++++++++++++----------- usr/src/cmd/boot/bootadm/bootadm.h | 36 + usr/src/cmd/boot/bootadm/bootadm_hyper.c | 80 +- usr/src/cmd/boot/bootadm/bootadm_loader.c | 1329 ++++++++++++++++++++ usr/src/cmd/boot/bootadm/bootadm_upgrade.c | 242 ++-- usr/src/cmd/boot/bootadm/message.h | 1354 --------------------- usr/src/cmd/eeprom/i386/Makefile | 8 +- usr/src/cmd/eeprom/i386/benv.c | 375 +----- usr/src/man/man1m/eeprom.1m | 29 +- 10 files changed, 2673 insertions(+), 2619 deletions(-) create mode 100644 usr/src/cmd/boot/bootadm/bootadm_loader.c delete mode 100644 usr/src/cmd/boot/bootadm/message.h diff --git a/usr/src/cmd/boot/bootadm/Makefile b/usr/src/cmd/boot/bootadm/Makefile index 64616469be..40ad948ba2 100644 --- a/usr/src/cmd/boot/bootadm/Makefile +++ b/usr/src/cmd/boot/bootadm/Makefile @@ -30,22 +30,26 @@ PROG= bootadm SBINLINKS= $(PROG) -OBJS= bootadm.o bootadm_upgrade.o bootadm_hyper.o bootadm_digest.o +OBJS= bootadm.o bootadm_upgrade.o bootadm_hyper.o bootadm_digest.o \ + bootadm_loader.o SRCS = $(OBJS:.o=.c) +POFILES= $(OBJS:%.o=%.po) include ../Makefile.com +POFILE= bootadm_cmd.po .KEEP_STATE: LDLIBS_i386= -lfdisk -LDLIBS += -lpkcs11 -lcryptoutil -lnvpair -lgen -ladm -lefi -lscf -lz -lbe -lzfs $(LDLIBS_$(MACH)) +LDLIBS += -lficl-sys -lpkcs11 -lcryptoutil -lnvpair -lgen -ladm -lefi +LDLIBS += -lscf -lz -lbe -lzfs $(LDLIBS_$(MACH)) # Writing into string literals is incorrect. We need to match gcc's # behavior, which causes us to take SIGSEGV on such a write. CFLAGS += $(XSTRCONST) CPPFLAGS += -D_FILE_OFFSET_BITS=64 -CPPFLAGS += -I../../../uts/common -I../../../common +CPPFLAGS += -I$(SRC)/uts/common -I$(SRC)/common -I$(SRC)/common/ficl C99MODE= $(C99_ENABLE) @@ -61,10 +65,12 @@ $(PROG): $(OBJS) bootadm.h install: all $(ROOTSBINPROG) .WAIT $(ROOTUSRSBINLINKS) -clean: - -$(RM) $(OBJS) +$(POFILE): $(POFILES) + $(RM) $@ + $(CAT) $(POFILES) > $@ -_msg: +clean: + -$(RM) $(OBJS) $(POFILE) $(POFILES) lint: lint_SRCS diff --git a/usr/src/cmd/boot/bootadm/bootadm.c b/usr/src/cmd/boot/bootadm/bootadm.c index a5a1490a72..92ffa0cdd5 100644 --- a/usr/src/cmd/boot/bootadm/bootadm.c +++ b/usr/src/cmd/boot/bootadm/bootadm.c @@ -87,7 +87,6 @@ #include #include -#include "message.h" #include "bootadm.h" #ifndef TEXT_DOMAIN @@ -103,19 +102,6 @@ typedef enum { BAM_INSTALL } subcmd_t; -typedef enum { - OPT_ABSENT = 0, /* No option */ - OPT_REQ, /* option required */ - OPT_OPTIONAL /* option may or may not be present */ -} option_t; - -typedef struct { - char *subcmd; - option_t option; - error_t (*handler)(); - int unpriv; /* is this an unprivileged command */ -} subcmd_defn_t; - #define LINE_INIT 0 /* lineNum initial value */ #define ENTRY_INIT -1 /* entryNum initial value */ #define ALL_ENTRIES -2 /* selects all boot entries */ @@ -165,14 +151,6 @@ typedef struct { #define STAGE1 "/boot/grub/stage1" #define STAGE2 "/boot/grub/stage2" -typedef enum zfs_mnted { - ZFS_MNT_ERROR = -1, - LEGACY_MOUNTED = 1, - LEGACY_ALREADY, - ZFS_MOUNTED, - ZFS_ALREADY -} zfs_mnted_t; - /* * Default file attributes */ @@ -228,10 +206,10 @@ int bam_force; int bam_debug; static char *prog; static subcmd_t bam_cmd; -static char *bam_root; -static int bam_rootlen; +char *bam_root; +int bam_rootlen; static int bam_root_readonly; -static int bam_alt_root; +int bam_alt_root; static int bam_extend = 0; static int bam_purge = 0; static char *bam_subcmd; @@ -245,7 +223,7 @@ static int bam_smf_check; static int bam_lock_fd = -1; static int bam_zfs; static int bam_mbr; -static char rootbuf[PATH_MAX] = "/"; +char rootbuf[PATH_MAX] = "/"; static int bam_update_all; static int bam_alt_platform; static char *bam_platform; @@ -289,14 +267,10 @@ static char *expand_path(const char *); static long s_strtol(char *); static int s_fputs(char *, FILE *); -static int is_zfs(char *root); static int is_ufs(char *root); -static int is_pcfs(char *root); static int is_amd64(void); static char *get_machine(void); static void append_to_flist(filelist_t *, char *); -static char *mount_top_dataset(char *pool, zfs_mnted_t *mnted); -static int umount_top_dataset(char *pool, zfs_mnted_t mnted, char *mntpt); static int ufs_add_to_sign_list(char *sign); static error_t synchronize_BE_menu(void); @@ -556,7 +530,13 @@ main(int argc, char *argv[]) switch (bam_cmd) { case BAM_MENU: - ret = bam_menu(bam_subcmd, bam_opt, bam_argc, bam_argv); + if (is_grub(bam_alt_root ? bam_root : "/")) { + ret = bam_menu(bam_subcmd, bam_opt, + bam_argc, bam_argv); + } else { + ret = bam_loader_menu(bam_subcmd, bam_opt, + bam_argc, bam_argv); + } break; case BAM_ARCHIVE: ret = bam_archive(bam_subcmd, bam_opt); @@ -672,7 +652,8 @@ parse_args_internal(int argc, char *argv[]) case 'a': if (bam_cmd) { error = 1; - bam_error(MULT_CMDS, c); + bam_error( + _("multiple commands specified: -%c\n"), c); } bam_cmd = BAM_ARCHIVE; bam_subcmd = optarg; @@ -680,7 +661,8 @@ parse_args_internal(int argc, char *argv[]) case 'd': if (bam_debug) { error = 1; - bam_error(DUP_OPT, c); + bam_error( + _("duplicate options specified: -%c\n"), c); } bam_debug = s_strtol(optarg); break; @@ -693,7 +675,8 @@ parse_args_internal(int argc, char *argv[]) case 'i': if (bam_cmd) { error = 1; - bam_error(MULT_CMDS, c); + bam_error( + _("multiple commands specified: -%c\n"), c); } bam_cmd = BAM_INSTALL; bam_subcmd = optarg; @@ -701,7 +684,8 @@ parse_args_internal(int argc, char *argv[]) case 'm': if (bam_cmd) { error = 1; - bam_error(MULT_CMDS, c); + bam_error( + _("multiple commands specified: -%c\n"), c); } bam_cmd = BAM_MENU; bam_subcmd = optarg; @@ -728,7 +712,8 @@ parse_args_internal(int argc, char *argv[]) case 'o': if (bam_opt) { error = 1; - bam_error(DUP_OPT, c); + bam_error( + _("duplicate options specified: -%c\n"), c); } bam_opt = optarg; break; @@ -741,19 +726,21 @@ parse_args_internal(int argc, char *argv[]) case 'P': if (bam_pool != NULL) { error = 1; - bam_error(DUP_OPT, c); + bam_error( + _("duplicate options specified: -%c\n"), c); } bam_pool = optarg; break; case 'R': if (bam_root) { error = 1; - bam_error(DUP_OPT, c); + bam_error( + _("duplicate options specified: -%c\n"), c); break; } else if (realpath(optarg, rootbuf) == NULL) { error = 1; - bam_error(CANT_RESOLVE, optarg, - strerror(errno)); + bam_error(_("cannot resolve path %s: %s\n"), + optarg, strerror(errno)); break; } bam_alt_root = 1; @@ -767,7 +754,9 @@ parse_args_internal(int argc, char *argv[]) (strcmp(bam_platform, "sun4u") != 0) && (strcmp(bam_platform, "sun4v") != 0)) { error = 1; - bam_error(INVALID_PLAT, bam_platform); + bam_error(_("invalid platform %s - must be " + "one of sun4u, sun4v or i86pc\n"), + bam_platform); } break; case 'X': @@ -781,11 +770,13 @@ parse_args_internal(int argc, char *argv[]) break; case '?': error = 1; - bam_error(BAD_OPT, optopt); + bam_error(_("invalid option or missing option " + "argument: -%c\n"), optopt); break; default : error = 1; - bam_error(BAD_OPT, c); + bam_error(_("invalid option or missing option " + "argument: -%c\n"), c); break; } } @@ -806,7 +797,7 @@ parse_args_internal(int argc, char *argv[]) usage(); bam_exit(0); } - bam_error(NEED_CMD); + bam_error(_("a command option must be specified\n")); error = 1; } @@ -816,7 +807,7 @@ parse_args_internal(int argc, char *argv[]) } if (optind > argc) { - bam_error(INT_ERROR, "parse_args"); + bam_error(_("Internal error: %s\n"), "parse_args"); bam_exit(1); } else if (optind < argc) { bam_argv = &argv[optind]; @@ -838,7 +829,7 @@ parse_args_internal(int argc, char *argv[]) bam_verbose = 1; } -static error_t +error_t check_subcmd_and_options( char *subcmd, char *opt, @@ -848,17 +839,17 @@ check_subcmd_and_options( int i; if (subcmd == NULL) { - bam_error(NEED_SUBCMD); + bam_error(_("this command requires a sub-command\n")); return (BAM_ERROR); } if (strcmp(subcmd, "set_option") == 0) { if (bam_argc == 0 || bam_argv == NULL || bam_argv[0] == NULL) { - bam_error(MISSING_ARG); + bam_error(_("missing argument for sub-command\n")); usage(); return (BAM_ERROR); } else if (bam_argc > 1 || bam_argv[1] != NULL) { - bam_error(TRAILING_ARGS); + bam_error(_("invalid trailing arguments\n")); usage(); return (BAM_ERROR); } @@ -869,7 +860,7 @@ check_subcmd_and_options( */ if (bam_argc > 1 || (bam_argc == 1 && strcmp(bam_argv[0], "fastboot") != 0)) { - bam_error(TRAILING_ARGS); + bam_error(_("invalid trailing arguments\n")); usage(); return (BAM_ERROR); } @@ -881,7 +872,7 @@ check_subcmd_and_options( * Of the remaining subcommands, only "enable_hypervisor" and * "list_setting" take trailing arguments. */ - bam_error(TRAILING_ARGS); + bam_error(_("invalid trailing arguments\n")); usage(); return (BAM_ERROR); } @@ -898,12 +889,12 @@ check_subcmd_and_options( } if (table[i].subcmd == NULL) { - bam_error(INVALID_SUBCMD, subcmd); + bam_error(_("invalid sub-command specified: %s\n"), subcmd); return (BAM_ERROR); } if (table[i].unpriv == 0 && geteuid() != 0) { - bam_error(MUST_BE_ROOT); + bam_error(_("you must be root to run this command\n")); return (BAM_ERROR); } @@ -917,9 +908,11 @@ check_subcmd_and_options( if (table[i].option != OPT_OPTIONAL) { if ((table[i].option == OPT_REQ) ^ (opt != NULL)) { if (opt) - bam_error(NO_OPT_REQ, subcmd); + bam_error(_("this sub-command (%s) does not " + "take options\n"), subcmd); else - bam_error(MISS_OPT, subcmd); + bam_error(_("an option is required for this " + "sub-command: %s\n"), subcmd); return (BAM_ERROR); } } @@ -933,7 +926,7 @@ check_subcmd_and_options( * NOTE: A single "/" is also considered a trailing slash and will * be deleted. */ -static void +void elide_trailing_slash(const char *src, char *dst, size_t dstsize) { size_t dstlen; @@ -955,22 +948,25 @@ is_safe_exec(char *path) struct stat sb; if (lstat(path, &sb) != 0) { - bam_error(STAT_FAIL, path, strerror(errno)); + bam_error(_("stat of file failed: %s: %s\n"), path, + strerror(errno)); return (BAM_ERROR); } if (!S_ISREG(sb.st_mode)) { - bam_error(PATH_EXEC_LINK, path); + bam_error(_("%s is not a regular file, skipping\n"), path); return (BAM_ERROR); } if (sb.st_uid != getuid()) { - bam_error(PATH_EXEC_OWNER, path, getuid()); + bam_error(_("%s is not owned by %d, skipping\n"), + path, getuid()); return (BAM_ERROR); } if (sb.st_mode & S_IWOTH || sb.st_mode & S_IWGRP) { - bam_error(PATH_EXEC_PERMS, path); + bam_error(_("%s is others or group writable, skipping\n"), + path); return (BAM_ERROR); } @@ -1014,7 +1010,7 @@ list_setting(menu_t *mp, char *which, char *setting) ; if (!ent) { - bam_error(NO_MATCH_ENTRY); + bam_error(_("no matching entry found\n")); return (BAM_ERROR); } @@ -1022,9 +1018,9 @@ list_setting(menu_t *mp, char *which, char *setting) for (lp = ent->start; lp != NULL; lp = lp->next) { if ((*setting == NULL) && (lp->flags != BAM_COMMENT)) - bam_print(PRINT, lp->line); + bam_print("%s\n", lp->line); else if (lp->cmd != NULL && strcmp(setting, lp->cmd) == 0) { - bam_print(PRINT, lp->arg); + bam_print("%s\n", lp->arg); found = 1; } @@ -1033,7 +1029,7 @@ list_setting(menu_t *mp, char *which, char *setting) } if (!found) { - bam_error(NO_MATCH_ENTRY); + bam_error(_("no matching entry found\n")); return (BAM_ERROR); } @@ -1069,11 +1065,13 @@ install_bootloader(void) if (bam_alt_root) { if (stat(bam_root, &statbuf) != 0) { - bam_error(STAT_FAIL, bam_root, strerror(errno)); + bam_error(_("stat of file failed: %s: %s\n"), bam_root, + strerror(errno)); goto done; } if ((fp = fopen(MNTTAB, "r")) == NULL) { - bam_error(OPEN_FAIL, MNTTAB, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), + MNTTAB, strerror(errno)); goto done; } resetmnttab(fp); @@ -1088,7 +1086,8 @@ install_bootloader(void) (void) fclose(fp); if (found == 0) { - bam_error(NOT_IN_MNTTAB, bam_root); + bam_error(_("alternate root %s not in mnttab\n"), + bam_root); goto done; } if (root_ds == NULL) { @@ -1197,7 +1196,8 @@ install_bootloader(void) * get dataset for "/" and fill up the args. */ if ((fp = fopen(MNTTAB, "r")) == NULL) { - bam_error(OPEN_FAIL, MNTTAB, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), + MNTTAB, strerror(errno)); ret = BAM_ERROR; be_free_list(be_nodes); goto done; @@ -1214,7 +1214,7 @@ install_bootloader(void) (void) fclose(fp); if (found == 0) { - bam_error(NOT_IN_MNTTAB, "/"); + bam_error(_("alternate root %s not in mnttab\n"), "/"); ret = BAM_ERROR; be_free_list(be_nodes); goto done; @@ -1293,7 +1293,8 @@ bam_menu(char *subcmd, char *opt, int largc, char *largv[]) * Menu sub-command only applies to GRUB (i.e. x86) */ if (!is_grub(bam_alt_root ? bam_root : "/")) { - bam_error(NOT_GRUB_BOOT); + bam_error(_("not a GRUB 0.97 based Illumos instance. " + "Operation not supported\n")); return (BAM_ERROR); } @@ -1319,8 +1320,8 @@ bam_menu(char *subcmd, char *opt, int largc, char *largv[]) if (osroot) { /* fixup bam_root so that it points at osroot */ if (realpath(osroot, rootbuf) == NULL) { - bam_error(CANT_RESOLVE, osroot, - strerror(errno)); + bam_error(_("cannot resolve path %s: %s\n"), + osroot, strerror(errno)); return (BAM_ERROR); } bam_alt_root = 1; @@ -1334,16 +1335,16 @@ bam_menu(char *subcmd, char *opt, int largc, char *largv[]) * not the OS root */ if (is_pcfs(bam_root)) { - bam_error(PCFS_ROOT_NOTSUP, bam_root); + bam_error(_("root <%s> on PCFS is not supported\n"), bam_root); return (BAM_ERROR); } if (stat(menu_root, &sb) == -1) { - bam_error(CANNOT_LOCATE_GRUB_MENU); + bam_error(_("cannot find GRUB menu\n")); return (BAM_ERROR); } - BAM_DPRINTF((D_MENU_ROOT, fcn, menu_root)); + BAM_DPRINTF(("%s: menu root is %s\n", fcn, menu_root)); /* * We no longer use the GRUB slice file. If it exists, then @@ -1360,56 +1361,61 @@ bam_menu(char *subcmd, char *opt, int largc, char *largv[]) } if (bam_verbose && stat(path, &sb) == 0) - bam_error(GRUB_SLICE_FILE_EXISTS, path); + bam_error(_("unsupported GRUB slice file (%s) exists - " + "ignoring.\n"), path); if (is_zfs(menu_root)) { assert(strcmp(menu_root, bam_root) == 0); special = get_special(menu_root); INJECT_ERROR1("Z_MENU_GET_SPECIAL", special = NULL); if (special == NULL) { - bam_error(CANT_FIND_SPECIAL, menu_root); + bam_error(_("cant find special file for " + "mount-point %s\n"), menu_root); return (BAM_ERROR); } pool = strtok(special, "/"); INJECT_ERROR1("Z_MENU_GET_POOL", pool = NULL); if (pool == NULL) { free(special); - bam_error(CANT_FIND_POOL, menu_root); + bam_error(_("cant find pool for mount-point %s\n"), + menu_root); return (BAM_ERROR); } - BAM_DPRINTF((D_Z_MENU_GET_POOL_FROM_SPECIAL, fcn, pool)); + BAM_DPRINTF(("%s: derived pool=%s from special\n", fcn, pool)); zmntpt = mount_top_dataset(pool, &zmnted); INJECT_ERROR1("Z_MENU_MOUNT_TOP_DATASET", zmntpt = NULL); if (zmntpt == NULL) { - bam_error(CANT_MOUNT_POOL_DATASET, pool); + bam_error(_("cannot mount pool dataset for pool: %s\n"), + pool); free(special); return (BAM_ERROR); } - BAM_DPRINTF((D_Z_GET_MENU_MOUNT_TOP_DATASET, fcn, zmntpt)); + BAM_DPRINTF(("%s: top dataset mountpoint=%s\n", fcn, zmntpt)); (void) strlcpy(menu_root, zmntpt, sizeof (menu_root)); - BAM_DPRINTF((D_Z_GET_MENU_MENU_ROOT, fcn, menu_root)); + BAM_DPRINTF(("%s: zfs menu_root=%s\n", fcn, menu_root)); } elide_trailing_slash(menu_root, clean_menu_root, sizeof (clean_menu_root)); - BAM_DPRINTF((D_CLEAN_MENU_ROOT, fcn, clean_menu_root)); + BAM_DPRINTF(("%s: cleaned menu root is <%s>\n", fcn, clean_menu_root)); (void) strlcpy(menu_path, clean_menu_root, sizeof (menu_path)); (void) strlcat(menu_path, GRUB_MENU, sizeof (menu_path)); - BAM_DPRINTF((D_MENU_PATH, fcn, menu_path)); + BAM_DPRINTF(("%s: menu path is: %s\n", fcn, menu_path)); /* * If listing the menu, display the menu location */ if (strcmp(subcmd, "list_entry") == 0) - bam_print(GRUB_MENU_PATH, menu_path); + bam_print(_("the location for the active GRUB menu is: %s\n"), + menu_path); if ((menu = menu_read(menu_path)) == NULL) { - bam_error(CANNOT_LOCATE_GRUB_MENU_FILE, menu_path); + bam_error(_("cannot find GRUB menu file: %s\n"), menu_path); free(special); return (BAM_ERROR); @@ -1430,7 +1436,7 @@ bam_menu(char *subcmd, char *opt, int largc, char *largv[]) ret = get_boot_cap(bam_root); if (ret != BAM_SUCCESS) { - BAM_DPRINTF((D_BOOT_GET_CAP_FAILED, fcn)); + BAM_DPRINTF(("%s: Failed to get boot capability\n", fcn)); goto out; } @@ -1449,14 +1455,16 @@ bam_menu(char *subcmd, char *opt, int largc, char *largv[]) ((largc > 1) ? largv[1] : "")); } else if (strcmp(subcmd, "disable_hypervisor") == 0) { if (is_sparc()) { - bam_error(NO_SPARC, subcmd); + bam_error(_("%s operation unsupported on SPARC " + "machines\n"), subcmd); ret = BAM_ERROR; } else { ret = f(menu, bam_root, NULL); } } else if (strcmp(subcmd, "enable_hypervisor") == 0) { if (is_sparc()) { - bam_error(NO_SPARC, subcmd); + bam_error(_("%s operation unsupported on SPARC " + "machines\n"), subcmd); ret = BAM_ERROR; } else { char *extra_args = NULL; @@ -1503,7 +1511,8 @@ bam_menu(char *subcmd, char *opt, int largc, char *largv[]) ret = f(menu, NULL, opt); if (ret == BAM_WRITE) { - BAM_DPRINTF((D_WRITING_MENU_ROOT, fcn, clean_menu_root)); + BAM_DPRINTF(("%s: writing menu to clean-menu-root: <%s>\n", + fcn, clean_menu_root)); ret = menu_write(clean_menu_root, menu); } @@ -1545,7 +1554,7 @@ bam_archive( ret = get_boot_cap(rootbuf); if (ret != BAM_SUCCESS) { - BAM_DPRINTF((D_BOOT_GET_CAP_FAILED, fcn)); + BAM_DPRINTF(("%s: Failed to get boot capability\n", fcn)); return (ret); } @@ -1555,7 +1564,8 @@ bam_archive( * information for each BE. */ if (bam_check && strcmp(subcmd, "update_all") == 0) { - bam_error(CHECK_NOT_SUPPORTED, subcmd); + bam_error(_("the check option is not supported with " + "subcmd: %s\n"), subcmd); return (BAM_ERROR); } @@ -1647,7 +1657,8 @@ bam_lock(void) return; } - bam_error(OPEN_FAIL, BAM_LOCK_FILE, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), + BAM_LOCK_FILE, strerror(errno)); bam_exit(1); } @@ -1658,21 +1669,25 @@ bam_lock(void) if (fcntl(bam_lock_fd, F_SETLK, &lock) == -1) { if (errno != EACCES && errno != EAGAIN) { - bam_error(LOCK_FAIL, BAM_LOCK_FILE, strerror(errno)); + bam_error(_("failed to lock file: %s: %s\n"), + BAM_LOCK_FILE, strerror(errno)); (void) close(bam_lock_fd); bam_lock_fd = -1; bam_exit(1); } pid = 0; (void) pread(bam_lock_fd, &pid, sizeof (pid_t), 0); - bam_print(FILE_LOCKED, pid); + bam_print( + _("another instance of bootadm (pid %lu) is running\n"), + pid); lock.l_type = F_WRLCK; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len = 0; if (fcntl(bam_lock_fd, F_SETLKW, &lock) == -1) { - bam_error(LOCK_FAIL, BAM_LOCK_FILE, strerror(errno)); + bam_error(_("failed to lock file: %s: %s\n"), + BAM_LOCK_FILE, strerror(errno)); (void) close(bam_lock_fd); bam_lock_fd = -1; bam_exit(1); @@ -1702,11 +1717,13 @@ bam_unlock(void) unlock.l_len = 0; if (fcntl(bam_lock_fd, F_SETLK, &unlock) == -1) { - bam_error(UNLOCK_FAIL, BAM_LOCK_FILE, strerror(errno)); + bam_error(_("failed to unlock file: %s: %s\n"), + BAM_LOCK_FILE, strerror(errno)); } if (close(bam_lock_fd) == -1) { - bam_error(CLOSE_FAIL, BAM_LOCK_FILE, strerror(errno)); + bam_error(_("failed to close file: %s: %s\n"), + BAM_LOCK_FILE, strerror(errno)); } bam_lock_fd = -1; } @@ -1728,7 +1745,7 @@ list_archive(char *root, char *opt) assert(flistp->head && flistp->tail); for (lp = flistp->head; lp; lp = lp->next) { - bam_print(PRINT, lp->line); + bam_print(_("%s\n"), lp->line); } filelist_free(flistp); @@ -1760,9 +1777,11 @@ list2file(char *root, char *tmp, char *final, line_t *start) if (start == NULL) { /* Empty GRUB menu */ if (stat(path, &sb) != -1) { - bam_print(UNLINK_EMPTY, path); + bam_print(_("file is empty, deleting file: %s\n"), + path); if (unlink(path) != 0) { - bam_error(UNLINK_FAIL, path, strerror(errno)); + bam_error(_("failed to unlink file: %s: %s\n"), + path, strerror(errno)); return (BAM_ERROR); } else { return (BAM_SUCCESS); @@ -1785,14 +1804,16 @@ list2file(char *root, char *tmp, char *final, line_t *start) if ((pw = getpwnam(DEFAULT_DEV_USER)) != NULL) { root_uid = pw->pw_uid; } else { - bam_error(CANT_FIND_USER, + bam_error(_("getpwnam: uid for %s failed, " + "defaulting to %d\n"), DEFAULT_DEV_USER, DEFAULT_DEV_UID); root_uid = (uid_t)DEFAULT_DEV_UID; } if ((gp = getgrnam(DEFAULT_DEV_GROUP)) != NULL) { sys_gid = gp->gr_gid; } else { - bam_error(CANT_FIND_GROUP, + bam_error(_("getgrnam: gid for %s failed, " + "defaulting to %d\n"), DEFAULT_DEV_GROUP, DEFAULT_DEV_GID); sys_gid = (gid_t)DEFAULT_DEV_GID; } @@ -1803,20 +1824,23 @@ list2file(char *root, char *tmp, char *final, line_t *start) /* Truncate tmpfile first */ fp = fopen(tmpfile, "w"); if (fp == NULL) { - bam_error(OPEN_FAIL, tmpfile, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), tmpfile, + strerror(errno)); return (BAM_ERROR); } ret = fclose(fp); INJECT_ERROR1("LIST2FILE_TRUNC_FCLOSE", ret = EOF); if (ret == EOF) { - bam_error(CLOSE_FAIL, tmpfile, strerror(errno)); + bam_error(_("failed to close file: %s: %s\n"), + tmpfile, strerror(errno)); return (BAM_ERROR); } /* Now open it in append mode */ fp = fopen(tmpfile, "a"); if (fp == NULL) { - bam_error(OPEN_FAIL, tmpfile, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), tmpfile, + strerror(errno)); return (BAM_ERROR); } @@ -1824,7 +1848,8 @@ list2file(char *root, char *tmp, char *final, line_t *start) ret = s_fputs(start->line, fp); INJECT_ERROR1("LIST2FILE_FPUTS", ret = EOF); if (ret == EOF) { - bam_error(WRITE_FAIL, tmpfile, strerror(errno)); + bam_error(_("write to file failed: %s: %s\n"), + tmpfile, strerror(errno)); (void) fclose(fp); return (BAM_ERROR); } @@ -1833,7 +1858,8 @@ list2file(char *root, char *tmp, char *final, line_t *start) ret = fclose(fp); INJECT_ERROR1("LIST2FILE_APPEND_FCLOSE", ret = EOF); if (ret == EOF) { - bam_error(CLOSE_FAIL, tmpfile, strerror(errno)); + bam_error(_("failed to close file: %s: %s\n"), + tmpfile, strerror(errno)); return (BAM_ERROR); } @@ -1845,14 +1871,16 @@ list2file(char *root, char *tmp, char *final, line_t *start) ret = chmod(tmpfile, mode); if (ret == -1 && errno != EINVAL && errno != ENOTSUP) { - bam_error(CHMOD_FAIL, tmpfile, strerror(errno)); + bam_error(_("chmod operation on %s failed - %s\n"), + tmpfile, strerror(errno)); return (BAM_ERROR); } ret = chown(tmpfile, root_uid, sys_gid); if (ret == -1 && errno != EINVAL && errno != ENOTSUP) { - bam_error(CHOWN_FAIL, tmpfile, strerror(errno)); + bam_error(_("chgrp operation on %s failed - %s\n"), + tmpfile, strerror(errno)); return (BAM_ERROR); } @@ -1862,11 +1890,12 @@ list2file(char *root, char *tmp, char *final, line_t *start) ret = rename(tmpfile, path); INJECT_ERROR1("LIST2FILE_RENAME", ret = -1); if (ret != 0) { - bam_error(RENAME_FAIL, path, strerror(errno)); + bam_error(_("rename to file failed: %s: %s\n"), path, + strerror(errno)); return (BAM_ERROR); } - BAM_DPRINTF((D_WROTE_FILE, fcn, path)); + BAM_DPRINTF(("%s: wrote file successfully: %s\n", fcn, path)); return (BAM_SUCCESS); } @@ -1889,10 +1918,12 @@ setup_path(char *path) /* best effort attempt, mkdirp will catch the error */ (void) unlink(path); if (bam_verbose) - bam_print(NEED_DIRPATH, path); + bam_print(_("need to create directory " + "path for %s\n"), path); ret = mkdirp(path, DIR_PERMS); if (ret == -1) { - bam_error(MKDIR_FAILED, path, strerror(errno)); + bam_error(_("mkdir of %s failed: %s\n"), + path, strerror(errno)); *p = '/'; return (BAM_ERROR); } @@ -1930,7 +1961,8 @@ setup_file(char *base, const char *path, cachefile *cf) ret = snprintf(cf->path, sizeof (cf->path), "%s/%s", base, strip); if (ret >= sizeof (cf->path)) { - bam_error(PATH_TOO_LONG, rootbuf); + bam_error(_("unable to create path on mountpoint %s, " + "path too long\n"), rootbuf); return (BAM_ERROR); } @@ -1940,7 +1972,8 @@ setup_file(char *base, const char *path, cachefile *cf) if (bam_direct == BAM_DIRECT_DBOOT) { if ((cf->out.gzfile = gzopen(cf->path, "wb")) == NULL) { - bam_error(OPEN_FAIL, cf->path, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), + cf->path, strerror(errno)); return (BAM_ERROR); } (void) gzsetparams(cf->out.gzfile, Z_BEST_SPEED, @@ -1948,7 +1981,8 @@ setup_file(char *base, const char *path, cachefile *cf) } else { if ((cf->out.fdfile = open(cf->path, O_WRONLY | O_CREAT, 0644)) == -1) { - bam_error(OPEN_FAIL, cf->path, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), + cf->path, strerror(errno)); return (BAM_ERROR); } } @@ -1963,15 +1997,18 @@ cache_write(cachefile cf, char *buf, int size) if (bam_direct == BAM_DIRECT_DBOOT) { if (gzwrite(cf.out.gzfile, buf, size) < 1) { - bam_error(GZ_WRITE_FAIL, gzerror(cf.out.gzfile, &err)); + bam_error(_("failed to write to %s\n"), + gzerror(cf.out.gzfile, &err)); if (err == Z_ERRNO && bam_verbose) { - bam_error(WRITE_FAIL, cf.path, strerror(errno)); + bam_error(_("write to file failed: %s: %s\n"), + cf.path, strerror(errno)); } return (BAM_ERROR); } } else { if (write(cf.out.fdfile, buf, size) < 1) { - bam_error(WRITE_FAIL, cf.path, strerror(errno)); + bam_error(_("write to file failed: %s: %s\n"), + cf.path, strerror(errno)); return (BAM_ERROR); } } @@ -1987,7 +2024,8 @@ cache_close(cachefile cf) if (cf.out.gzfile) { ret = gzclose(cf.out.gzfile); if (ret != Z_OK) { - bam_error(CLOSE_FAIL, cf.path, strerror(errno)); + bam_error(_("failed to close file: %s: %s\n"), + cf.path, strerror(errno)); return (BAM_ERROR); } } @@ -1995,7 +2033,8 @@ cache_close(cachefile cf) if (cf.out.fdfile != -1) { ret = close(cf.out.fdfile); if (ret != 0) { - bam_error(CLOSE_FAIL, cf.path, strerror(errno)); + bam_error(_("failed to close file: %s: %s\n"), + cf.path, strerror(errno)); return (BAM_ERROR); } } @@ -2021,7 +2060,8 @@ dircache_updatefile(const char *path, int what) return (BAM_SUCCESS); if ((infile = fopen(path, "rb")) == NULL) { - bam_error(OPEN_FAIL, path, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), path, + strerror(errno)); return (BAM_ERROR); } @@ -2077,7 +2117,8 @@ dircache_updatedir(const char *path, int what, int updt) get_updatedir(what) : get_cachedir(what), strip); if (ret >= sizeof (dpath)) { - bam_error(PATH_TOO_LONG, rootbuf); + bam_error(_("unable to create path on mountpoint %s, " + "path too long\n"), rootbuf); set_flag(UPDATE_ERROR); return (BAM_ERROR); } @@ -2124,7 +2165,8 @@ update_dircache(const char *path, int flags) _elfhdr elf; if ((fd = open(path, O_RDONLY)) < 0) { - bam_error(OPEN_FAIL, path, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), + path, strerror(errno)); set_flag(UPDATE_ERROR); rc = BAM_ERROR; break; @@ -2136,7 +2178,8 @@ update_dircache(const char *path, int flags) * _FILE_OFFSET_BITS is != 32 ... */ if (read(fd, (void *)&elf, sizeof (_elfhdr)) < 0) { - bam_error(READ_FAIL, path, strerror(errno)); + bam_error(_("read failed for file: %s: %s\n"), + path, strerror(errno)); set_flag(UPDATE_ERROR); (void) close(fd); rc = BAM_ERROR; @@ -2167,7 +2210,8 @@ update_dircache(const char *path, int flags) } else if (elf.e_ident[EI_CLASS] == ELFCLASS64) { rc = dircache_updatefile(path, FILE64); } else { - bam_print(NO3264ELF, path); + bam_print(_("WARNING: file %s is neither a " + "32-bit nor a 64-bit ELF\n"), path); /* paranoid */ rc = dircache_updatefile(path, FILE32); if (rc == BAM_SUCCESS) @@ -2241,7 +2285,8 @@ cmpstat( error = nvlist_add_uint64_array(walk_arg.new_nvlp, file + bam_rootlen, filestat, 2); if (error) - bam_error(NVADD_FAIL, file, strerror(error)); + bam_error(_("failed to update stat data for: %s: %s\n"), + file, strerror(error)); } /* @@ -2296,7 +2341,7 @@ cmpstat( */ if (is_flag_on(NEED_CACHE_DIR)) { if (bam_verbose) - bam_print(PARSEABLE_NEW_FILE, file); + bam_print(_(" new %s\n"), file); if (is_flag_on(IS_SPARC_TARGET)) { set_dir_flag(FILE64, NEED_UPDATE); @@ -2305,7 +2350,8 @@ cmpstat( ret = update_dircache(file, flags); if (ret == BAM_ERROR) { - bam_error(UPDT_CACHE_FAIL, file); + bam_error(_("directory cache update failed for %s\n"), + file); return (-1); } @@ -2326,13 +2372,14 @@ cmpstat( } else { ret = update_dircache(file, flags); if (ret == BAM_ERROR) { - bam_error(UPDT_CACHE_FAIL, file); + bam_error(_("directory cache update " + "failed for %s\n"), file); return (-1); } } if (bam_verbose) - bam_print(PARSEABLE_NEW_FILE, file); + bam_print(_(" new %s\n"), file); return (0); } @@ -2376,7 +2423,8 @@ cmpstat( } else { ret = update_dircache(file, flags); if (ret == BAM_ERROR) { - bam_error(UPDT_CACHE_FAIL, file); + bam_error(_("directory cache update failed " + "for %s\n"), file); return (-1); } } @@ -2385,7 +2433,7 @@ cmpstat( if (bam_smf_check) bam_print(" %s\n", file); else - bam_print(PARSEABLE_OUT_DATE, file); + bam_print(_(" changed %s\n"), file); } } @@ -2439,7 +2487,8 @@ set_cache_dir(char *root, int what) "/amd64" : "", CACHEDIR_SUFFIX); if (ret >= sizeof (get_cachedir(what))) { - bam_error(PATH_TOO_LONG, rootbuf); + bam_error(_("unable to create path on mountpoint %s, " + "path too long\n"), rootbuf); return (BAM_ERROR); } @@ -2451,11 +2500,12 @@ set_cache_dir(char *root, int what) (void) unlink(get_cachedir(what)); if (bam_verbose) - bam_print(UPDATE_CDIR_MISS, get_cachedir(what)); + bam_print(_("archive cache directory not found: %s\n"), + get_cachedir(what)); ret = mkdir(get_cachedir(what), DIR_PERMS); if (ret < 0) { - bam_error(MKDIR_FAILED, get_cachedir(what), - strerror(errno)); + bam_error(_("mkdir of %s failed: %s\n"), + get_cachedir(what), strerror(errno)); get_cachedir(what)[0] = '\0'; return (ret); } @@ -2490,7 +2540,8 @@ set_update_dir(char *root, int what) ARCHIVE_PREFIX, get_machine(), UPDATEDIR_SUFFIX); if (ret >= sizeof (get_updatedir(what))) { - bam_error(PATH_TOO_LONG, rootbuf); + bam_error(_("unable to create path on mountpoint %s, " + "path too long\n"), rootbuf); return (BAM_ERROR); } @@ -2527,13 +2578,14 @@ is_valid_archive(char *root, int what) root, ARCHIVE_PREFIX, get_machine(), ARCHIVE_SUFFIX); if (ret >= sizeof (archive_path)) { - bam_error(PATH_TOO_LONG, rootbuf); + bam_error(_("unable to create path on mountpoint %s, " + "path too long\n"), rootbuf); return (BAM_ERROR); } if (stat(archive_path, &sb) != 0) { if (bam_verbose && !bam_check) - bam_print(UPDATE_ARCH_MISS, archive_path); + bam_print(_("archive not found: %s\n"), archive_path); set_dir_flag(what, NEED_UPDATE); set_dir_flag(what, NO_MULTI); return (BAM_SUCCESS); @@ -2554,14 +2606,16 @@ is_valid_archive(char *root, int what) FILE_STAT_TIMESTAMP); if (ret >= sizeof (timestamp_path)) { - bam_error(PATH_TOO_LONG, rootbuf); + bam_error(_("unable to create path on mountpoint %s, " + "path too long\n"), rootbuf); return (BAM_ERROR); } if (stat(timestamp_path, ×tamp) != 0 || sb.st_mtime > timestamp.st_mtime) { if (bam_verbose && !bam_check) - bam_print(UPDATE_CACHE_OLD); + bam_print( + _("archive cache is out of sync. Rebuilding.\n")); /* * Don't generate a false positive for the boot-archive service * but trigger an update of the archive cache in @@ -2583,7 +2637,8 @@ is_valid_archive(char *root, int what) if (bam_extend && sb.st_size > BA_SIZE_MAX) { if (bam_verbose && !bam_check) - bam_print(MULTI_SIZE, archive_path, BA_SIZE_MAX); + bam_print(_("archive %s is bigger than %d bytes and " + "will be rebuilt\n"), archive_path, BA_SIZE_MAX); set_dir_flag(what, NO_MULTI); } @@ -2635,7 +2690,8 @@ check_flags_and_files(char *root) ARCHIVE_PREFIX, get_machine(), CACHEDIR_SUFFIX); if (ret >= sizeof (get_cachedir(FILE64))) { - bam_error(PATH_TOO_LONG, rootbuf); + bam_error(_("unable to create path on mountpoint %s, " + "path too long\n"), rootbuf); return (BAM_ERROR); } @@ -2646,8 +2702,8 @@ check_flags_and_files(char *root) walk_arg.sparcfile = fopen(get_cachedir(FILE64), "w"); if (walk_arg.sparcfile == NULL) { - bam_error(OPEN_FAIL, get_cachedir(FILE64), - strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), + get_cachedir(FILE64), strerror(errno)); return (BAM_ERROR); } @@ -2675,7 +2731,7 @@ check_flags_and_files(char *root) set_dir_flag(FILE32, NEED_UPDATE); set_dir_flag(FILE64, NEED_UPDATE); if (bam_verbose) - bam_print(UPDATE_FORCE); + bam_print(_("forced update of archive requested\n")); return (BAM_SUCCESS); } @@ -2694,7 +2750,8 @@ read_one_list(char *root, filelist_t *flistp, char *filelist) fp = fopen(path, "r"); if (fp == NULL) { - BAM_DPRINTF((D_FLIST_FAIL, fcn, path, strerror(errno))); + BAM_DPRINTF(("%s: failed to open archive filelist: %s: %s\n", + fcn, path, strerror(errno))); return (BAM_ERROR); } while (s_fgets(buf, sizeof (buf), fp) != NULL) { @@ -2704,7 +2761,8 @@ read_one_list(char *root, filelist_t *flistp, char *filelist) append_to_flist(flistp, buf); } if (fclose(fp) != 0) { - bam_error(CLOSE_FAIL, path, strerror(errno)); + bam_error(_("failed to close file: %s: %s\n"), + path, strerror(errno)); return (BAM_ERROR); } return (BAM_SUCCESS); @@ -2726,7 +2784,7 @@ read_list(char *root, filelist_t *flistp) */ n = snprintf(path, sizeof (path), "%s%s", root, EXTRACT_BOOT_FILELIST); if (n >= sizeof (path)) { - bam_error(NO_FLIST); + bam_error(_("archive filelist is empty\n")); return (BAM_ERROR); } @@ -2765,11 +2823,12 @@ read_list(char *root, filelist_t *flistp) free(platarg); free(rootarg); if (n >= sizeof (cmd)) { - bam_error(NO_FLIST); + bam_error(_("archive filelist is empty\n")); return (BAM_ERROR); } if (exec_cmd(cmd, flistp) != 0) { - BAM_DPRINTF((D_FLIST_FAIL, fcn, path, strerror(errno))); + BAM_DPRINTF(("%s: failed to open archive " + "filelist: %s: %s\n", fcn, path, strerror(errno))); return (BAM_ERROR); } } else { @@ -2783,7 +2842,7 @@ read_list(char *root, filelist_t *flistp) } if (flistp->head == NULL) { - bam_error(NO_FLIST); + bam_error(_("archive filelist is empty\n")); return (BAM_ERROR); } @@ -2802,19 +2861,22 @@ getoldstat(char *root) fd = open(path, O_RDONLY); if (fd == -1) { if (bam_verbose) - bam_print(OPEN_FAIL, path, strerror(errno)); + bam_print(_("failed to open file: %s: %s\n"), + path, strerror(errno)); goto out_err; } if (fstat(fd, &sb) != 0) { - bam_error(STAT_FAIL, path, strerror(errno)); + bam_error(_("stat of file failed: %s: %s\n"), path, + strerror(errno)); goto out_err; } ostat = s_calloc(1, sb.st_size); if (read(fd, ostat, sb.st_size) != sb.st_size) { - bam_error(READ_FAIL, path, strerror(errno)); + bam_error(_("read failed for file: %s: %s\n"), path, + strerror(errno)); free(ostat); goto out_err; } @@ -2828,7 +2890,8 @@ getoldstat(char *root) free(ostat); if (error) { - bam_error(UNPACK_FAIL, path, strerror(error)); + bam_error(_("failed to unpack stat data: %s: %s\n"), + path, strerror(error)); walk_arg.old_nvlp = NULL; goto out_err; } else { @@ -2903,7 +2966,7 @@ check4stale(char *root) int what; if (bam_verbose) - bam_print(PARSEABLE_STALE_FILE, path); + bam_print(_(" stale %s\n"), path); if (is_flag_on(IS_SPARC_TARGET)) { set_dir_flag(FILE64, NEED_UPDATE); @@ -2927,7 +2990,8 @@ create_newstat(void) * Not fatal - we can still create archive */ walk_arg.new_nvlp = NULL; - bam_error(NVALLOC_FAIL, strerror(error)); + bam_error(_("failed to create stat data: %s\n"), + strerror(error)); } } @@ -2954,7 +3018,8 @@ walk_list(char *root, filelist_t *flistp) * Emit verbose message only */ if (bam_verbose) - bam_print(NFTW_FAIL, path, strerror(errno)); + bam_print(_("cannot find: %s: %s\n"), + path, strerror(errno)); } } @@ -2979,8 +3044,10 @@ update_timestamp(char *root) * the user of the performance issue. */ if (creat(timestamp_path, FILE_STAT_MODE) < 0) { - bam_error(OPEN_FAIL, timestamp_path, strerror(errno)); - bam_error(TIMESTAMP_FAIL); + bam_error(_("failed to open file: %s: %s\n"), timestamp_path, + strerror(errno)); + bam_error(_("failed to update the timestamp file, next" + " archive update may experience reduced performance\n")); } } @@ -2999,20 +3066,23 @@ savenew(char *root) error = nvlist_pack(walk_arg.new_nvlp, &nstat, &sz, NV_ENCODE_XDR, 0); if (error) { - bam_error(PACK_FAIL, strerror(error)); + bam_error(_("failed to pack stat data: %s\n"), + strerror(error)); return; } (void) snprintf(path, sizeof (path), "%s%s", root, FILE_STAT_TMP); fd = open(path, O_RDWR|O_CREAT|O_TRUNC, FILE_STAT_MODE); if (fd == -1) { - bam_error(OPEN_FAIL, path, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), path, + strerror(errno)); free(nstat); return; } wrote = write(fd, nstat, sz); if (wrote != sz) { - bam_error(WRITE_FAIL, path, strerror(errno)); + bam_error(_("write to file failed: %s: %s\n"), path, + strerror(errno)); (void) close(fd); free(nstat); return; @@ -3022,7 +3092,8 @@ savenew(char *root) (void) snprintf(path2, sizeof (path2), "%s%s", root, FILE_STAT); if (rename(path, path2) != 0) { - bam_error(RENAME_FAIL, path2, strerror(errno)); + bam_error(_("rename to file failed: %s: %s\n"), path2, + strerror(errno)); } } @@ -3126,14 +3197,15 @@ update_required(char *root) /* something went wrong */ if (ret == BAM_ERROR) { - bam_error(CACHE_FAIL); + bam_error(_("Failed to gather cache files, archives " + "generation aborted\n")); return (BAM_ERROR); } if (walk_arg.new_nvlp == NULL) { if (walk_arg.sparcfile != NULL) (void) fclose(walk_arg.sparcfile); - bam_error(NO_NEW_STAT); + bam_error(_("cannot create new stat data\n")); } /* If nothing was updated, discard newstat. */ @@ -3211,7 +3283,7 @@ check_archive(char *dest) if (stat(dest, &sb) != 0 || !S_ISREG(sb.st_mode) || sb.st_size < 10000) { - bam_error(ARCHIVE_BAD, dest); + bam_error(_("archive file %s not generated correctly\n"), dest); (void) unlink(dest); return (BAM_ERROR); } @@ -3292,7 +3364,7 @@ create_sparc_archive(char *archive, char *tempname, char *bootblk, char *list) const char *func = "create_sparc_archive()"; if (access(bootblk, R_OK) == 1) { - bam_error(BOOTBLK_FAIL, bootblk); + bam_error(_("unable to access bootblk file : %s\n"), bootblk); return (BAM_ERROR); } @@ -3303,7 +3375,7 @@ create_sparc_archive(char *archive, char *tempname, char *bootblk, char *list) "-path-list \"%s\" 2>&1", MKISOFS_PATH, MKISO_PARAMS, bootblk, tempname, list); - BAM_DPRINTF((D_CMDLINE, func, cmdline)); + BAM_DPRINTF(("%s: executing: %s\n", func, cmdline)); ret = exec_cmd(cmdline, &flist); if (ret != 0 || check_cmdline(flist) == BAM_ERROR) { @@ -3321,7 +3393,7 @@ create_sparc_archive(char *archive, char *tempname, char *bootblk, char *list) " bs=1b oseek=1 count=15 conv=notrunc conv=sync 2>&1", DD_PATH_USR, bootblk, tempname); - BAM_DPRINTF((D_CMDLINE, func, cmdline)); + BAM_DPRINTF(("%s: executing: %s\n", func, cmdline)); ret = exec_cmd(cmdline, &flist); if (ret != 0 || check_cmdline(flist) == BAM_ERROR) @@ -3337,7 +3409,7 @@ create_sparc_archive(char *archive, char *tempname, char *bootblk, char *list) out_err: filelist_free(&flist); - bam_error(ARCHIVE_FAIL, cmdline); + bam_error(_("boot-archive creation FAILED, command: '%s'\n"), cmdline); (void) unlink(tempname); return (BAM_ERROR); } @@ -3413,7 +3485,8 @@ extend_iso_archive(char *archive, char *tempname, char *update_dir) fd = open(archive, O_RDWR); if (fd == -1) { if (bam_verbose) - bam_error(OPEN_FAIL, archive, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), + archive, strerror(errno)); goto out_err; } @@ -3424,13 +3497,15 @@ extend_iso_archive(char *archive, char *tempname, char *update_dir) VOLDESC_OFF * CD_BLOCK); if (ret != sizeof (saved_desc)) { if (bam_verbose) - bam_error(READ_FAIL, archive, strerror(errno)); + bam_error(_("read failed for file: %s: %s\n"), + archive, strerror(errno)); goto out_err; } if (memcmp(saved_desc[0].type, "\1CD001", 6)) { if (bam_verbose) - bam_error(SIGN_FAIL, archive); + bam_error(_("iso descriptor signature for %s is " + "invalid\n"), archive); goto out_err; } @@ -3444,12 +3519,13 @@ extend_iso_archive(char *archive, char *tempname, char *update_dir) "%s\" \"%s\" 2>&1", MKISOFS_PATH, next_session, archive, MKISO_PARAMS, tempname, update_dir); - BAM_DPRINTF((D_CMDLINE, func, cmdline)); + BAM_DPRINTF(("%s: executing: %s\n", func, cmdline)); ret = exec_cmd(cmdline, &flist); if (ret != 0 || check_cmdline(flist) == BAM_ERROR) { if (bam_verbose) { - bam_error(MULTI_FAIL, cmdline); + bam_error(_("Command '%s' failed while generating " + "multisession archive\n"), cmdline); dump_errormsg(flist); } goto out_flist_err; @@ -3459,7 +3535,8 @@ extend_iso_archive(char *archive, char *tempname, char *update_dir) newfd = open(tempname, O_RDONLY); if (newfd == -1) { if (bam_verbose) - bam_error(OPEN_FAIL, archive, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), + archive, strerror(errno)); goto out_err; } @@ -3467,13 +3544,15 @@ extend_iso_archive(char *archive, char *tempname, char *update_dir) VOLDESC_OFF * CD_BLOCK); if (ret != sizeof (saved_desc)) { if (bam_verbose) - bam_error(READ_FAIL, archive, strerror(errno)); + bam_error(_("read failed for file: %s: %s\n"), + archive, strerror(errno)); goto out_err; } if (memcmp(saved_desc[0].type, "\1CD001", 6)) { if (bam_verbose) - bam_error(SIGN_FAIL, archive); + bam_error(_("iso descriptor signature for %s is " + "invalid\n"), archive); goto out_err; } @@ -3496,7 +3575,8 @@ extend_iso_archive(char *archive, char *tempname, char *update_dir) ret = pwrite64(fd, saved_desc, DVD_BLOCK, VOLDESC_OFF*CD_BLOCK); if (ret != DVD_BLOCK) { if (bam_verbose) - bam_error(WRITE_FAIL, archive, strerror(errno)); + bam_error(_("write to file failed: %s: %s\n"), + archive, strerror(errno)); goto out_err; } (void) close(newfd); @@ -3509,7 +3589,8 @@ extend_iso_archive(char *archive, char *tempname, char *update_dir) ret = close(fd); if (ret != 0) { if (bam_verbose) - bam_error(CLOSE_FAIL, archive, strerror(errno)); + bam_error(_("failed to close file: %s: %s\n"), + archive, strerror(errno)); return (BAM_ERROR); } fd = -1; @@ -3518,12 +3599,13 @@ extend_iso_archive(char *archive, char *tempname, char *update_dir) "seek=%d conv=sync 2>&1", DD_PATH_USR, tempname, archive, (next_session/16)); - BAM_DPRINTF((D_CMDLINE, func, cmdline)); + BAM_DPRINTF(("%s: executing: %s\n", func, cmdline)); ret = exec_cmd(cmdline, &flist); if (ret != 0 || check_cmdline(flist) == BAM_ERROR) { if (bam_verbose) - bam_error(MULTI_FAIL, cmdline); + bam_error(_("Command '%s' failed while generating " + "multisession archive\n"), cmdline); goto out_flist_err; } filelist_free(&flist); @@ -3562,11 +3644,12 @@ create_x86_archive(char *archive, char *tempname, char *update_dir) (void) snprintf(cmdline, sizeof (cmdline), "%s %s -o \"%s\" \"%s\" " "2>&1", MKISOFS_PATH, MKISO_PARAMS, tempname, update_dir); - BAM_DPRINTF((D_CMDLINE, func, cmdline)); + BAM_DPRINTF(("%s: executing: %s\n", func, cmdline)); ret = exec_cmd(cmdline, &flist); if (ret != 0 || check_cmdline(flist) == BAM_ERROR) { - bam_error(ARCHIVE_FAIL, cmdline); + bam_error(_("boot-archive creation FAILED, command: '%s'\n"), + cmdline); dump_errormsg(flist); filelist_free(&flist); (void) unlink(tempname); @@ -3670,7 +3753,8 @@ mkisofs_archive(char *root, int what) return (ret); out_path_err: - bam_error(PATH_TOO_LONG, root); + bam_error(_("unable to create path on mountpoint %s, path too long\n"), + root); return (BAM_ERROR); } @@ -3704,7 +3788,8 @@ create_ramdisk(char *root) (void) snprintf(path, sizeof (path), "%s/%s", root, CREATE_RAMDISK); if (stat(path, &sb) != 0) { - bam_error(ARCH_EXEC_MISS, path, strerror(errno)); + bam_error(_("archive creation file not found: %s: %s\n"), + path, strerror(errno)); return (BAM_ERROR); } @@ -3730,7 +3815,8 @@ create_ramdisk(char *root) (void) snprintf(cmdline, len, "%s", path); if (exec_cmd(cmdline, NULL) != 0) { - bam_error(ARCHIVE_FAIL, cmdline); + bam_error(_("boot-archive creation FAILED, command: '%s'\n"), + cmdline); free(cmdline); return (BAM_ERROR); } @@ -3770,7 +3856,8 @@ is_ramdisk(char *root) */ fp = fopen(MNTTAB, "r"); if (fp == NULL) { - bam_error(OPEN_FAIL, MNTTAB, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), + MNTTAB, strerror(errno)); return (0); } @@ -3795,7 +3882,8 @@ is_ramdisk(char *root) if (!found) { if (bam_verbose) - bam_error(NOT_IN_MNTTAB, mntpt); + bam_error(_("alternate root %s not in mnttab\n"), + mntpt); (void) fclose(fp); return (0); } @@ -3803,7 +3891,7 @@ is_ramdisk(char *root) if (strncmp(mnt.mnt_special, RAMDISK_SPECIAL, strlen(RAMDISK_SPECIAL)) == 0) { if (bam_verbose) - bam_error(IS_RAMDISK, bam_root); + bam_error(_("%s is on a ramdisk device\n"), bam_root); (void) fclose(fp); return (1); } @@ -3829,12 +3917,14 @@ is_boot_archive(char *root) INJECT_ERROR1("NOT_ARCHIVE_BASED", error = -1); if (error == -1) { if (bam_verbose) - bam_print(FILE_MISS, path); - BAM_DPRINTF((D_NOT_ARCHIVE_BOOT, fcn, root)); + bam_print(_("file not found: %s\n"), path); + BAM_DPRINTF(("%s: not a boot archive based Solaris " + "instance: %s\n", fcn, root)); return (0); } - BAM_DPRINTF((D_IS_ARCHIVE_BOOT, fcn, root)); + BAM_DPRINTF(("%s: *IS* a boot archive based Solaris instance: %s\n", + fcn, root)); return (1); } @@ -3856,14 +3946,14 @@ is_grub(const char *root) (void) snprintf(path, sizeof (path), "%s%s", root, GRUB_STAGE2); if (stat(path, &sb) == -1) { - BAM_DPRINTF((D_NO_GRUB_DIR, fcn, path)); + BAM_DPRINTF(("%s: Missing GRUB directory: %s\n", fcn, path)); return (0); } return (1); } -static int +int is_zfs(char *root) { struct statvfs vfs; @@ -3873,15 +3963,16 @@ is_zfs(char *root) ret = statvfs(root, &vfs); INJECT_ERROR1("STATVFS_ZFS", ret = 1); if (ret != 0) { - bam_error(STATVFS_FAIL, root, strerror(errno)); + bam_error(_("statvfs failed for %s: %s\n"), root, + strerror(errno)); return (0); } if (strncmp(vfs.f_basetype, "zfs", strlen("zfs")) == 0) { - BAM_DPRINTF((D_IS_ZFS, fcn, root)); + BAM_DPRINTF(("%s: is a ZFS filesystem: %s\n", fcn, root)); return (1); } else { - BAM_DPRINTF((D_IS_NOT_ZFS, fcn, root)); + BAM_DPRINTF(("%s: is *NOT* a ZFS filesystem: %s\n", fcn, root)); return (0); } } @@ -3896,20 +3987,21 @@ is_ufs(char *root) ret = statvfs(root, &vfs); INJECT_ERROR1("STATVFS_UFS", ret = 1); if (ret != 0) { - bam_error(STATVFS_FAIL, root, strerror(errno)); + bam_error(_("statvfs failed for %s: %s\n"), root, + strerror(errno)); return (0); } if (strncmp(vfs.f_basetype, "ufs", strlen("ufs")) == 0) { - BAM_DPRINTF((D_IS_UFS, fcn, root)); + BAM_DPRINTF(("%s: is a UFS filesystem: %s\n", fcn, root)); return (1); } else { - BAM_DPRINTF((D_IS_NOT_UFS, fcn, root)); + BAM_DPRINTF(("%s: is *NOT* a UFS filesystem: %s\n", fcn, root)); return (0); } } -static int +int is_pcfs(char *root) { struct statvfs vfs; @@ -3919,15 +4011,17 @@ is_pcfs(char *root) ret = statvfs(root, &vfs); INJECT_ERROR1("STATVFS_PCFS", ret = 1); if (ret != 0) { - bam_error(STATVFS_FAIL, root, strerror(errno)); + bam_error(_("statvfs failed for %s: %s\n"), root, + strerror(errno)); return (0); } if (strncmp(vfs.f_basetype, "pcfs", strlen("pcfs")) == 0) { - BAM_DPRINTF((D_IS_PCFS, fcn, root)); + BAM_DPRINTF(("%s: is a PCFS filesystem: %s\n", fcn, root)); return (1); } else { - BAM_DPRINTF((D_IS_NOT_PCFS, fcn, root)); + BAM_DPRINTF(("%s: is *NOT* a PCFS filesystem: %s\n", + fcn, root)); return (0); } } @@ -3955,16 +4049,17 @@ is_readonly(char *root) error = errno; INJECT_ERROR2("RDONLY_TEST_ERROR", fd = -1, error = EACCES); if (fd == -1 && error == EROFS) { - BAM_DPRINTF((D_RDONLY_FS, fcn, root)); + BAM_DPRINTF(("%s: is a READONLY filesystem: %s\n", fcn, root)); return (1); } else if (fd == -1) { - bam_error(RDONLY_TEST_ERROR, root, strerror(error)); + bam_error(_("error during read-only test on %s: %s\n"), + root, strerror(error)); } (void) close(fd); (void) unlink(testfile); - BAM_DPRINTF((D_RDWR_FS, fcn, root)); + BAM_DPRINTF(("%s: is a RDWR filesystem: %s\n", fcn, root)); return (0); } @@ -3993,7 +4088,8 @@ update_archive(char *root, char *opt) * If in update_all, emit only if verbose flag is set. */ if (!bam_update_all || bam_verbose) - bam_print(NOT_ARCHIVE_BOOT, root); + bam_print(_("%s: not a boot archive based Solaris " + "instance\n"), root); return (BAM_ERROR); } @@ -4036,7 +4132,8 @@ update_archive(char *root, char *opt) if (is_flag_on(RDONLY_FSCHK)) { bam_check = bam_saved_check; if (ret > 0) - bam_error(RDONLY_FS, root); + bam_error(_("%s filesystem is read-only, " + "skipping archives update\n"), root); if (bam_update_all) return ((ret != 0) ? BAM_ERROR : BAM_SUCCESS); } @@ -4104,38 +4201,41 @@ synchronize_BE_menu(void) int ret; const char *fcn = "synchronize_BE_menu()"; - BAM_DPRINTF((D_FUNC_ENTRY0, fcn)); + BAM_DPRINTF(("%s: entered. No args\n", fcn)); /* Check if findroot enabled LU BE */ if (stat(FINDROOT_INSTALLGRUB, &sb) != 0) { - BAM_DPRINTF((D_NOT_LU_BE, fcn)); + BAM_DPRINTF(("%s: not a Live Upgrade BE\n", fcn)); return (BAM_SUCCESS); } if (stat(LU_MENU_CKSUM, &sb) != 0) { - BAM_DPRINTF((D_NO_CKSUM_FILE, fcn, LU_MENU_CKSUM)); + BAM_DPRINTF(("%s: checksum file absent: %s\n", + fcn, LU_MENU_CKSUM)); goto menu_sync; } cfp = fopen(LU_MENU_CKSUM, "r"); INJECT_ERROR1("CKSUM_FILE_MISSING", cfp = NULL); if (cfp == NULL) { - bam_error(CANNOT_READ_LU_CKSUM, LU_MENU_CKSUM); + bam_error(_("failed to read GRUB menu checksum file: %s\n"), + LU_MENU_CKSUM); goto menu_sync; } - BAM_DPRINTF((D_CKSUM_FILE_OPENED, fcn, LU_MENU_CKSUM)); + BAM_DPRINTF(("%s: opened checksum file: %s\n", fcn, LU_MENU_CKSUM)); found = 0; while (s_fgets(cksum_line, sizeof (cksum_line), cfp) != NULL) { INJECT_ERROR1("MULTIPLE_CKSUM", found = 1); if (found) { - bam_error(MULTIPLE_LU_CKSUM, LU_MENU_CKSUM); + bam_error(_("multiple checksums for GRUB menu in " + "checksum file: %s\n"), LU_MENU_CKSUM); (void) fclose(cfp); goto menu_sync; } found = 1; } - BAM_DPRINTF((D_CKSUM_FILE_READ, fcn, LU_MENU_CKSUM)); + BAM_DPRINTF(("%s: read checksum file: %s\n", fcn, LU_MENU_CKSUM)); old_cksum_str = strtok(cksum_line, " \t"); @@ -4146,17 +4246,19 @@ synchronize_BE_menu(void) INJECT_ERROR1("OLD_SIZE_NULL", old_size_str = NULL); INJECT_ERROR1("OLD_FILE_NULL", old_file = NULL); if (old_cksum_str == NULL || old_size_str == NULL || old_file == NULL) { - bam_error(CANNOT_PARSE_LU_CKSUM, LU_MENU_CKSUM); + bam_error(_("error parsing GRUB menu checksum file: %s\n"), + LU_MENU_CKSUM); goto menu_sync; } - BAM_DPRINTF((D_CKSUM_FILE_PARSED, fcn, LU_MENU_CKSUM)); + BAM_DPRINTF(("%s: parsed checksum file: %s\n", fcn, LU_MENU_CKSUM)); /* Get checksum of current menu */ pool = find_root_pool(); if (pool) { mntpt = mount_top_dataset(pool, &mnted); if (mntpt == NULL) { - bam_error(FAIL_MNT_TOP_DATASET, pool); + bam_error(_("failed to mount top dataset for %s\n"), + pool); free(pool); return (BAM_ERROR); } @@ -4173,18 +4275,18 @@ synchronize_BE_menu(void) } INJECT_ERROR1("GET_CURR_CKSUM", ret = 1); if (ret != 0) { - bam_error(MENU_CKSUM_FAIL); + bam_error(_("error generating checksum of GRUB menu\n")); return (BAM_ERROR); } - BAM_DPRINTF((D_CKSUM_GEN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: successfully generated checksum\n", fcn)); INJECT_ERROR1("GET_CURR_CKSUM_OUTPUT", flist.head = NULL); if ((flist.head == NULL) || (flist.head != flist.tail)) { - bam_error(BAD_CKSUM); + bam_error(_("bad checksum generated for GRUB menu\n")); filelist_free(&flist); return (BAM_ERROR); } - BAM_DPRINTF((D_CKSUM_GEN_OUTPUT_VALID, fcn)); + BAM_DPRINTF(("%s: generated checksum output valid\n", fcn)); curr_cksum_str = strtok(flist.head->line, " \t"); curr_size_str = strtok(NULL, " \t"); @@ -4195,27 +4297,28 @@ synchronize_BE_menu(void) INJECT_ERROR1("CURR_FILE_NULL", curr_file = NULL); if (curr_cksum_str == NULL || curr_size_str == NULL || curr_file == NULL) { - bam_error(BAD_CKSUM_PARSE); + bam_error(_("error parsing checksum generated " + "for GRUB menu\n")); filelist_free(&flist); return (BAM_ERROR); } - BAM_DPRINTF((D_CKSUM_GEN_PARSED, fcn)); + BAM_DPRINTF(("%s: successfully parsed generated checksum\n", fcn)); if (strcmp(old_cksum_str, curr_cksum_str) == 0 && strcmp(old_size_str, curr_size_str) == 0 && strcmp(old_file, curr_file) == 0) { filelist_free(&flist); - BAM_DPRINTF((D_CKSUM_NO_CHANGE, fcn)); + BAM_DPRINTF(("%s: no change in checksum of GRUB menu\n", fcn)); return (BAM_SUCCESS); } filelist_free(&flist); /* cksum doesn't match - the menu has changed */ - BAM_DPRINTF((D_CKSUM_HAS_CHANGED, fcn)); + BAM_DPRINTF(("%s: checksum of GRUB menu has changed\n", fcn)); menu_sync: - bam_print(PROP_GRUB_MENU); + bam_print(_("propagating updated GRUB menu\n")); (void) snprintf(cmdline, sizeof (cmdline), "/bin/sh -c '. %s > /dev/null; %s %s yes > /dev/null'", @@ -4223,20 +4326,22 @@ menu_sync: ret = exec_cmd(cmdline, NULL); INJECT_ERROR1("PROPAGATE_MENU", ret = 1); if (ret != 0) { - bam_error(MENU_PROP_FAIL); + bam_error(_("error propagating updated GRUB menu\n")); return (BAM_ERROR); } - BAM_DPRINTF((D_PROPAGATED_MENU, fcn)); + BAM_DPRINTF(("%s: successfully propagated GRUB menu\n", fcn)); (void) snprintf(cmdline, sizeof (cmdline), "/bin/cp %s %s > /dev/null", GRUB_MENU, GRUB_BACKUP_MENU); ret = exec_cmd(cmdline, NULL); INJECT_ERROR1("CREATE_BACKUP", ret = 1); if (ret != 0) { - bam_error(MENU_BACKUP_FAIL, GRUB_BACKUP_MENU); + bam_error(_("failed to create backup for GRUB menu: %s\n"), + GRUB_BACKUP_MENU); return (BAM_ERROR); } - BAM_DPRINTF((D_CREATED_BACKUP, fcn, GRUB_BACKUP_MENU)); + BAM_DPRINTF(("%s: successfully created backup GRUB menu: %s\n", + fcn, GRUB_BACKUP_MENU)); (void) snprintf(cmdline, sizeof (cmdline), "/bin/sh -c '. %s > /dev/null; %s %s no > /dev/null'", @@ -4244,20 +4349,24 @@ menu_sync: ret = exec_cmd(cmdline, NULL); INJECT_ERROR1("PROPAGATE_BACKUP", ret = 1); if (ret != 0) { - bam_error(BACKUP_PROP_FAIL, GRUB_BACKUP_MENU); + bam_error(_("error propagating backup GRUB menu: %s\n"), + GRUB_BACKUP_MENU); return (BAM_ERROR); } - BAM_DPRINTF((D_PROPAGATED_BACKUP, fcn, GRUB_BACKUP_MENU)); + BAM_DPRINTF(("%s: successfully propagated backup GRUB menu: %s\n", + fcn, GRUB_BACKUP_MENU)); (void) snprintf(cmdline, sizeof (cmdline), "%s %s > %s", CKSUM, GRUB_MENU, LU_MENU_CKSUM); ret = exec_cmd(cmdline, NULL); INJECT_ERROR1("CREATE_CKSUM_FILE", ret = 1); if (ret != 0) { - bam_error(MENU_CKSUM_WRITE_FAIL, LU_MENU_CKSUM); + bam_error(_("failed to write GRUB menu checksum file: %s\n"), + LU_MENU_CKSUM); return (BAM_ERROR); } - BAM_DPRINTF((D_CREATED_CKSUM_FILE, fcn, LU_MENU_CKSUM)); + BAM_DPRINTF(("%s: successfully created checksum file: %s\n", + fcn, LU_MENU_CKSUM)); (void) snprintf(cmdline, sizeof (cmdline), "/bin/sh -c '. %s > /dev/null; %s %s no > /dev/null'", @@ -4265,10 +4374,12 @@ menu_sync: ret = exec_cmd(cmdline, NULL); INJECT_ERROR1("PROPAGATE_MENU_CKSUM_FILE", ret = 1); if (ret != 0) { - bam_error(MENU_CKSUM_PROP_FAIL, LU_MENU_CKSUM); + bam_error(_("error propagating GRUB menu checksum file: %s\n"), + LU_MENU_CKSUM); return (BAM_ERROR); } - BAM_DPRINTF((D_PROPAGATED_CKSUM_FILE, fcn, LU_MENU_CKSUM)); + BAM_DPRINTF(("%s: successfully propagated checksum file: %s\n", + fcn, LU_MENU_CKSUM)); return (BAM_SUCCESS); } @@ -4288,7 +4399,8 @@ update_all(char *root, char *opt) if (bam_rootlen != 1 || *root != '/') { elide_trailing_slash(root, multibt, sizeof (multibt)); - bam_error(ALT_ROOT_INVALID, multibt); + bam_error(_("an alternate root (%s) cannot be used with this " + "sub-command\n"), multibt); return (BAM_ERROR); } @@ -4307,7 +4419,8 @@ update_all(char *root, char *opt) */ fp = fopen(MNTTAB, "r"); if (fp == NULL) { - bam_error(OPEN_FAIL, MNTTAB, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), + MNTTAB, strerror(errno)); ret = BAM_ERROR; goto out; } @@ -4355,7 +4468,8 @@ out: * updates */ if (stat(GRUB_fdisk, &sb) == 0 || stat(GRUB_fdisk_target, &sb) == 0) { - bam_error(FDISK_FILES_FOUND, GRUB_fdisk, GRUB_fdisk_target); + bam_error(_("Deferred FDISK update file(s) found: %s, %s. " + "Not supported.\n"), GRUB_fdisk, GRUB_fdisk_target); } /* @@ -4405,13 +4519,13 @@ boot_entry_new(menu_t *mp, line_t *start, line_t *end) assert(end); ent = s_calloc(1, sizeof (entry_t)); - BAM_DPRINTF((D_ENTRY_NEW, fcn)); + BAM_DPRINTF(("%s: new boot entry alloced\n", fcn)); ent->start = start; ent->end = end; if (mp->entries == NULL) { mp->entries = ent; - BAM_DPRINTF((D_ENTRY_NEW_FIRST, fcn)); + BAM_DPRINTF(("%s: (first) new boot entry created\n", fcn)); return (ent); } @@ -4420,7 +4534,7 @@ boot_entry_new(menu_t *mp, line_t *start, line_t *end) prev = prev->next; prev->next = ent; ent->prev = prev; - BAM_DPRINTF((D_ENTRY_NEW_LINKED, fcn)); + BAM_DPRINTF(("%s: new boot entry linked in\n", fcn)); return (ent); } @@ -4443,12 +4557,12 @@ check_cmd(const char *cmd, const int which, const char *arg, const char *str) int ret; const char *fcn = "check_cmd()"; - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, arg, str)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, arg, str)); if (cmd != NULL) { if ((strcmp(cmd, menu_cmds[which]) != 0) && (strcmp(cmd, menu_cmds[which + 1]) != 0)) { - BAM_DPRINTF((D_CHECK_CMD_CMD_NOMATCH, + BAM_DPRINTF(("%s: command %s does not match %s\n", fcn, cmd, menu_cmds[which])); return (0); } @@ -4457,9 +4571,9 @@ check_cmd(const char *cmd, const int which, const char *arg, const char *str) ret = 0; if (ret) { - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); } else { - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); } return (ret); @@ -4476,47 +4590,53 @@ kernel_parser(entry_t *entry, char *cmd, char *arg, int linenum) if (strcmp(cmd, menu_cmds[KERNEL_CMD]) != 0 && strcmp(cmd, menu_cmds[KERNEL_DOLLAR_CMD]) != 0) { - BAM_DPRINTF((D_NOT_KERNEL_CMD, fcn, cmd)); + BAM_DPRINTF(("%s: not a kernel command: %s\n", fcn, cmd)); return (BAM_ERROR); } if (strncmp(arg, DIRECT_BOOT_32, sizeof (DIRECT_BOOT_32) - 1) == 0) { - BAM_DPRINTF((D_SET_DBOOT_32, fcn, arg)); + BAM_DPRINTF(("%s: setting DBOOT|DBOOT_32 flag: %s\n", + fcn, arg)); entry->flags |= BAM_ENTRY_DBOOT | BAM_ENTRY_32BIT; } else if (strncmp(arg, DIRECT_BOOT_KERNEL, sizeof (DIRECT_BOOT_KERNEL) - 1) == 0) { - BAM_DPRINTF((D_SET_DBOOT, fcn, arg)); + BAM_DPRINTF(("%s: setting DBOOT flag: %s\n", fcn, arg)); entry->flags |= BAM_ENTRY_DBOOT; } else if (strncmp(arg, DIRECT_BOOT_64, sizeof (DIRECT_BOOT_64) - 1) == 0) { - BAM_DPRINTF((D_SET_DBOOT_64, fcn, arg)); + BAM_DPRINTF(("%s: setting DBOOT|DBOOT_64 flag: %s\n", + fcn, arg)); entry->flags |= BAM_ENTRY_DBOOT | BAM_ENTRY_64BIT; } else if (strncmp(arg, DIRECT_BOOT_FAILSAFE_KERNEL, sizeof (DIRECT_BOOT_FAILSAFE_KERNEL) - 1) == 0) { - BAM_DPRINTF((D_SET_DBOOT_FAILSAFE, fcn, arg)); + BAM_DPRINTF(("%s: setting DBOOT|DBOOT_FAILSAFE flag: %s\n", + fcn, arg)); entry->flags |= BAM_ENTRY_DBOOT | BAM_ENTRY_FAILSAFE; } else if (strncmp(arg, DIRECT_BOOT_FAILSAFE_32, sizeof (DIRECT_BOOT_FAILSAFE_32) - 1) == 0) { - BAM_DPRINTF((D_SET_DBOOT_FAILSAFE_32, fcn, arg)); + BAM_DPRINTF(("%s: setting DBOOT|DBOOT_FAILSAFE|DBOOT_32 " + "flag: %s\n", fcn, arg)); entry->flags |= BAM_ENTRY_DBOOT | BAM_ENTRY_FAILSAFE | BAM_ENTRY_32BIT; } else if (strncmp(arg, DIRECT_BOOT_FAILSAFE_64, sizeof (DIRECT_BOOT_FAILSAFE_64) - 1) == 0) { - BAM_DPRINTF((D_SET_DBOOT_FAILSAFE_64, fcn, arg)); + BAM_DPRINTF(("%s: setting DBOOT|DBOOT_FAILSAFE|DBOOT_64 " + "flag: %s\n", fcn, arg)); entry->flags |= BAM_ENTRY_DBOOT | BAM_ENTRY_FAILSAFE | BAM_ENTRY_64BIT; } else if (strncmp(arg, MULTI_BOOT, sizeof (MULTI_BOOT) - 1) == 0) { - BAM_DPRINTF((D_SET_MULTIBOOT, fcn, arg)); + BAM_DPRINTF(("%s: setting MULTIBOOT flag: %s\n", fcn, arg)); entry->flags |= BAM_ENTRY_MULTIBOOT; } else if (strncmp(arg, MULTI_BOOT_FAILSAFE, sizeof (MULTI_BOOT_FAILSAFE) - 1) == 0) { - BAM_DPRINTF((D_SET_MULTIBOOT_FAILSAFE, fcn, arg)); + BAM_DPRINTF(("%s: setting MULTIBOOT|MULTIBOOT_FAILSAFE " + "flag: %s\n", fcn, arg)); entry->flags |= BAM_ENTRY_MULTIBOOT | BAM_ENTRY_FAILSAFE; } else if (strstr(arg, XEN_KERNEL_SUBSTR)) { - BAM_DPRINTF((D_SET_HV, fcn, arg)); + BAM_DPRINTF(("%s: setting XEN HV flag: %s\n", fcn, arg)); entry->flags |= BAM_ENTRY_HV; } else if (!(entry->flags & (BAM_ENTRY_BOOTADM|BAM_ENTRY_LU))) { - BAM_DPRINTF((D_SET_HAND_KERNEL, fcn, arg)); + BAM_DPRINTF(("%s: is HAND kernel flag: %s\n", fcn, arg)); return (BAM_ERROR); } else if (strncmp(arg, KERNEL_PREFIX, strlen(KERNEL_PREFIX)) == 0 && strstr(arg, UNIX_SPACE)) { @@ -4525,8 +4645,9 @@ kernel_parser(entry_t *entry, char *cmd, char *arg, int linenum) strstr(arg, AMD_UNIX_SPACE)) { entry->flags |= BAM_ENTRY_DBOOT | BAM_ENTRY_64BIT; } else { - BAM_DPRINTF((D_IS_UNKNOWN_KERNEL, fcn, arg)); - bam_error(UNKNOWN_KERNEL_LINE, linenum); + BAM_DPRINTF(("%s: is UNKNOWN kernel entry: %s\n", fcn, arg)); + bam_error(_("kernel command on line %d not recognized.\n"), + linenum); return (BAM_ERROR); } @@ -4544,7 +4665,7 @@ module_parser(entry_t *entry, char *cmd, char *arg, int linenum) if (strcmp(cmd, menu_cmds[MODULE_CMD]) != 0 && strcmp(cmd, menu_cmds[MODULE_DOLLAR_CMD]) != 0) { - BAM_DPRINTF((D_NOT_MODULE_CMD, fcn, cmd)); + BAM_DPRINTF(("%s: not module cmd: %s\n", fcn, cmd)); return (BAM_ERROR); } @@ -4557,16 +4678,17 @@ module_parser(entry_t *entry, char *cmd, char *arg, int linenum) strcmp(arg, FAILSAFE_ARCHIVE_64) == 0 || strcmp(arg, XEN_KERNEL_MODULE_LINE) == 0 || strcmp(arg, XEN_KERNEL_MODULE_LINE_ZFS) == 0) { - BAM_DPRINTF((D_BOOTADM_LU_MODULE, fcn, arg)); + BAM_DPRINTF(("%s: bootadm or LU module cmd: %s\n", fcn, arg)); return (BAM_SUCCESS); } else if (!(entry->flags & BAM_ENTRY_BOOTADM) && !(entry->flags & BAM_ENTRY_LU)) { /* don't emit warning for hand entries */ - BAM_DPRINTF((D_IS_HAND_MODULE, fcn, arg)); + BAM_DPRINTF(("%s: is HAND module: %s\n", fcn, arg)); return (BAM_ERROR); } else { - BAM_DPRINTF((D_IS_UNKNOWN_MODULE, fcn, arg)); - bam_error(UNKNOWN_MODULE_LINE, linenum); + BAM_DPRINTF(("%s: is UNKNOWN module: %s\n", fcn, arg)); + bam_error(_("module command on line %d not recognized.\n"), + linenum); return (BAM_ERROR); } } @@ -4677,12 +4799,14 @@ line_parser(menu_t *mp, char *str, int *lineNum, int *entryNum) prev->entryNum = lp->entryNum; curr_ent = boot_entry_new(mp, prev, lp); curr_ent->flags |= BAM_ENTRY_BOOTADM; - BAM_DPRINTF((D_IS_BOOTADM_ENTRY, fcn, arg)); + BAM_DPRINTF(("%s: is bootadm(1M) entry: %s\n", + fcn, arg)); } else { curr_ent = boot_entry_new(mp, lp, lp); if (in_liveupgrade) { curr_ent->flags |= BAM_ENTRY_LU; - BAM_DPRINTF((D_IS_LU_ENTRY, fcn, arg)); + BAM_DPRINTF(("%s: is LU entry: %s\n", + fcn, arg)); } } curr_ent->entryNum = *entryNum; @@ -4703,17 +4827,18 @@ line_parser(menu_t *mp, char *str, int *lineNum, int *entryNum) if (cmd && arg) { if (strcmp(cmd, menu_cmds[ROOT_CMD]) == 0) { - BAM_DPRINTF((D_IS_ROOT_CMD, fcn, arg)); + BAM_DPRINTF(("%s: setting ROOT: %s\n", + fcn, arg)); curr_ent->flags |= BAM_ENTRY_ROOT; } else if (strcmp(cmd, menu_cmds[FINDROOT_CMD]) == 0) { - BAM_DPRINTF((D_IS_FINDROOT_CMD, fcn, - arg)); + BAM_DPRINTF(("%s: setting " + "FINDROOT: %s\n", fcn, arg)); curr_ent->flags |= BAM_ENTRY_FINDROOT; } else if (strcmp(cmd, menu_cmds[CHAINLOADER_CMD]) == 0) { - BAM_DPRINTF((D_IS_CHAINLOADER_CMD, fcn, - arg)); + BAM_DPRINTF(("%s: setting " + "CHAINLOADER: %s\n", fcn, arg)); curr_ent->flags |= BAM_ENTRY_CHAINLOADER; } else if (kernel_parser(curr_ent, cmd, arg, @@ -4882,7 +5007,8 @@ menu_read(char *menu_path) } if (fclose(fp) == EOF) { - bam_error(CLOSE_FAIL, menu_path, strerror(errno)); + bam_error(_("failed to close file: %s: %s\n"), menu_path, + strerror(errno)); } return (mp); @@ -4908,7 +5034,7 @@ selector(menu_t *mp, char *opt, int *entry, char **title) eq = strchr(opt_dup, '='); if (eq == NULL) { - bam_error(INVALID_OPT, opt); + bam_error(_("invalid option: %s\n"), opt); free(opt_dup); return (BAM_ERROR); } @@ -4918,7 +5044,7 @@ selector(menu_t *mp, char *opt, int *entry, char **title) assert(mp->end); entryNum = s_strtol(eq + 1); if (entryNum < 0 || entryNum > mp->end->entryNum) { - bam_error(INVALID_ENTRY, eq + 1); + bam_error(_("invalid boot entry number: %s\n"), eq + 1); free(opt_dup); return (BAM_ERROR); } @@ -4926,7 +5052,7 @@ selector(menu_t *mp, char *opt, int *entry, char **title) } else if (title && strcmp(opt_dup, menu_cmds[TITLE_CMD]) == 0) { *title = opt + (eq - opt_dup) + 1; } else { - bam_error(INVALID_OPT, opt); + bam_error(_("invalid option: %s\n"), opt); free(opt_dup); return (BAM_ERROR); } @@ -4954,11 +5080,11 @@ list_entry(menu_t *mp, char *menu_path, char *opt) assert(menu_path); /* opt is optional */ - BAM_DPRINTF((D_FUNC_ENTRY2, "list_entry", menu_path, + BAM_DPRINTF(("%s: entered. args: %s %s\n", "list_entry", menu_path, opt ? opt : "")); if (mp->start == NULL) { - bam_error(NO_MENU, menu_path); + bam_error(_("menu file not found: %s\n"), menu_path); return (BAM_ERROR); } @@ -4977,13 +5103,13 @@ list_entry(menu_t *mp, char *menu_path, char *opt) if (lp->flags == BAM_COMMENT || lp->flags == BAM_EMPTY) continue; if (opt == NULL && lp->flags == BAM_TITLE) { - bam_print(PRINT_TITLE, lp->entryNum, + bam_print(_("%d %s\n"), lp->entryNum, lp->arg); found = 1; continue; } if (entry != ENTRY_INIT && lp->entryNum == entry) { - bam_print(PRINT, lp->line); + bam_print(_("%s\n"), lp->line); found = 1; continue; } @@ -4996,7 +5122,7 @@ list_entry(menu_t *mp, char *menu_path, char *opt) */ if (title && lp->flags == BAM_TITLE && lp->arg && strncmp(title, lp->arg, strlen(title)) == 0) { - bam_print(PRINT, lp->line); + bam_print(_("%s\n"), lp->line); entry = lp->entryNum; found = 1; continue; @@ -5004,7 +5130,7 @@ list_entry(menu_t *mp, char *menu_path, char *opt) } if (!found) { - bam_error(NO_MATCH_ENTRY); + bam_error(_("no matching entry found\n")); return (BAM_ERROR); } @@ -5031,7 +5157,7 @@ add_boot_entry(menu_t *mp, INJECT_ERROR1("ADD_BOOT_ENTRY_FINDROOT_NULL", findroot = NULL); if (findroot == NULL) { - bam_error(NULL_FINDROOT); + bam_error(_("can't find argument for findroot command\n")); return (BAM_ERROR); } @@ -5039,12 +5165,13 @@ add_boot_entry(menu_t *mp, title = "Solaris"; /* default to Solaris */ } if (kernel == NULL) { - bam_error(SUBOPT_MISS, menu_cmds[KERNEL_CMD]); + bam_error(_("missing suboption: %s\n"), menu_cmds[KERNEL_CMD]); return (BAM_ERROR); } if (module == NULL) { if (bam_direct != BAM_DIRECT_DBOOT) { - bam_error(SUBOPT_MISS, menu_cmds[MODULE_CMD]); + bam_error(_("missing suboption: %s\n"), + menu_cmds[MODULE_CMD]); return (BAM_ERROR); } @@ -5084,7 +5211,8 @@ add_boot_entry(menu_t *mp, (void) snprintf(linebuf, sizeof (linebuf), "%s%s%s", menu_cmds[FINDROOT_CMD], menu_cmds[SEP_CMD], findroot); line_parser(mp, linebuf, &lineNum, &entryNum); - BAM_DPRINTF((D_ADD_FINDROOT_NUM, fcn, lineNum, entryNum)); + BAM_DPRINTF(("%s: findroot added: line#: %d: entry#: %d\n", + fcn, lineNum, entryNum)); if (bootfs != NULL) { (void) snprintf(linebuf, sizeof (linebuf), "%s%s%s", @@ -5150,7 +5278,8 @@ delete_boot_entry(menu_t *mp, int entryNum, int quiet) do { freed = lp; lp = lp->next; /* prev stays the same */ - BAM_DPRINTF((D_FREEING_LINE, fcn, freed->lineNum)); + BAM_DPRINTF(("%s: freeing line: %d\n", + fcn, freed->lineNum)); unlink_line(mp, freed); line_free(freed); } while (freed != ent->end); @@ -5165,7 +5294,7 @@ delete_boot_entry(menu_t *mp, int entryNum, int quiet) mp->entries = ent; if (ent) ent->prev = tmp->prev; - BAM_DPRINTF((D_FREEING_ENTRY, fcn, tmp->entryNum)); + BAM_DPRINTF(("%s: freeing entry: %d\n", fcn, tmp->entryNum)); free(tmp); tmp = NULL; deleted = 1; @@ -5175,7 +5304,7 @@ delete_boot_entry(menu_t *mp, int entryNum, int quiet) if (!deleted && entryNum != ALL_ENTRIES) { if (quiet == DBE_PRINTERR) - bam_error(NO_BOOTADM_MATCH); + bam_error(_("no matching bootadm entry found\n")); return (BAM_ERROR); } @@ -5195,10 +5324,10 @@ delete_all_entries(menu_t *mp, char *dummy, char *opt) assert(dummy == NULL); assert(opt == NULL); - BAM_DPRINTF((D_FUNC_ENTRY0, "delete_all_entries")); + BAM_DPRINTF(("%s: entered. No args\n", "delete_all_entries")); if (mp->start == NULL) { - bam_print(EMPTY_MENU); + bam_print(_("the GRUB menu is empty\n")); return (BAM_SUCCESS); } @@ -5225,7 +5354,8 @@ create_diskmap(char *osroot) ret = snprintf(path, sizeof (path), "%s/%s", osroot, CREATE_DISKMAP); if (ret >= sizeof (path)) { - bam_error(PATH_TOO_LONG, osroot); + bam_error(_("unable to create path on mountpoint %s, " + "path too long\n"), osroot); return (NULL); } if (is_safe_exec(path) == BAM_ERROR) @@ -5238,9 +5368,11 @@ create_diskmap(char *osroot) fp = fopen(GRUBDISK_MAP, "r"); INJECT_ERROR1("DISKMAP_CREATE_FAIL", fp = NULL); if (fp) { - BAM_DPRINTF((D_CREATED_DISKMAP, fcn, GRUBDISK_MAP)); + BAM_DPRINTF(("%s: created diskmap file: %s\n", + fcn, GRUBDISK_MAP)); } else { - BAM_DPRINTF((D_CREATE_DISKMAP_FAIL, fcn, GRUBDISK_MAP)); + BAM_DPRINTF(("%s: FAILED to create diskmap file: %s\n", + fcn, GRUBDISK_MAP)); } } return (fp); @@ -5365,13 +5497,14 @@ get_grubroot(char *osroot, char *osdev, char *menu_root) INJECT_ERROR1("GRUBROOT_INVALID_OSDEV", ctdname = NULL); if (ctdname == NULL) { - bam_error(INVALID_DEV_DSK, osdev); + bam_error(_("not a /dev/[r]dsk name: %s\n"), osdev); return (NULL); } if (menu_root && !menu_on_bootdisk(osroot, menu_root)) { /* menu bears no resemblance to our reality */ - bam_error(CANNOT_GRUBROOT_BOOTDISK, osdev); + bam_error(_("cannot get (hd?,?,?) for menu. menu not on " + "bootdisk: %s\n"), osdev); return (NULL); } @@ -5382,7 +5515,8 @@ get_grubroot(char *osroot, char *osdev, char *menu_root) fp = create_diskmap(osroot); if (fp == NULL) { - bam_error(DISKMAP_FAIL, osroot); + bam_error(_("create_diskmap command failed for OS root: %s.\n"), + osroot); return (NULL); } @@ -5407,14 +5541,16 @@ get_grubroot(char *osroot, char *osdev, char *menu_root) INJECT_ERROR1("GRUBROOT_BIOSDEV_FAIL", found = 0); if (found == 0) { - bam_error(BIOSDEV_SKIP, osdev); + bam_error(_("not using biosdev command for disk: %s.\n"), + osdev); return (NULL); } fdiskpart = get_partition(osdev); INJECT_ERROR1("GRUBROOT_FDISK_FAIL", fdiskpart = PARTNO_NOTFOUND); if (fdiskpart == PARTNO_NOTFOUND) { - bam_error(FDISKPART_FAIL, osdev); + bam_error(_("failed to determine fdisk partition: %s\n"), + osdev); return (NULL); } @@ -5453,14 +5589,15 @@ find_primary_common(char *mntpt, char *fstype) mntpt, GRUBSIGN_DIR); if (stat(signdir, &sb) == -1) { - BAM_DPRINTF((D_NO_SIGNDIR, fcn, signdir)); + BAM_DPRINTF(("%s: no sign dir: %s\n", fcn, signdir)); return (NULL); } dirp = opendir(signdir); INJECT_ERROR1("SIGNDIR_OPENDIR_FAIL", dirp = NULL); if (dirp == NULL) { - bam_error(OPENDIR_FAILED, signdir, strerror(errno)); + bam_error(_("opendir of %s failed: %s\n"), signdir, + strerror(errno)); return (NULL); } @@ -5492,7 +5629,7 @@ find_primary_common(char *mntpt, char *fstype) } } - BAM_DPRINTF((D_EXIST_PRIMARY_SIGNS, fcn, + BAM_DPRINTF(("%s: existing primary signs: zfs=%s ufs=%s lu=%s\n", fcn, zfs ? zfs : "NULL", ufs ? ufs : "NULL", lu ? lu : "NULL")); @@ -5503,11 +5640,13 @@ find_primary_common(char *mntpt, char *fstype) } if (strcmp(fstype, "ufs") == 0 && zfs) { - bam_error(SIGN_FSTYPE_MISMATCH, zfs, "ufs"); + bam_error(_("found mismatched boot signature %s for " + "filesystem type: %s.\n"), zfs, "ufs"); free(zfs); zfs = NULL; } else if (strcmp(fstype, "zfs") == 0 && ufs) { - bam_error(SIGN_FSTYPE_MISMATCH, ufs, "zfs"); + bam_error(_("found mismatched boot signature %s for " + "filesystem type: %s.\n"), ufs, "zfs"); free(ufs); ufs = NULL; } @@ -5516,7 +5655,7 @@ find_primary_common(char *mntpt, char *fstype) /* For now, we let Live Upgrade take care of its signature itself */ if (lu) { - BAM_DPRINTF((D_FREEING_LU_SIGNS, fcn, lu)); + BAM_DPRINTF(("%s: feeing LU sign: %s\n", fcn, lu)); free(lu); lu = NULL; } @@ -5547,9 +5686,11 @@ find_backup_common(char *mntpt, char *fstype) if (bfp == NULL) { error = errno; if (bam_verbose) { - bam_error(OPEN_FAIL, backup, strerror(error)); + bam_error(_("failed to open file: %s: %s\n"), + backup, strerror(error)); } - BAM_DPRINTF((D_OPEN_FAIL, fcn, backup, strerror(error))); + BAM_DPRINTF(("%s: failed to open %s: %s\n", + fcn, backup, strerror(error))); return (NULL); } @@ -5576,7 +5717,7 @@ find_backup_common(char *mntpt, char *fstype) } } - BAM_DPRINTF((D_EXIST_BACKUP_SIGNS, fcn, + BAM_DPRINTF(("%s: existing backup signs: zfs=%s ufs=%s lu=%s\n", fcn, zfs ? zfs : "NULL", ufs ? ufs : "NULL", lu ? lu : "NULL")); @@ -5587,11 +5728,13 @@ find_backup_common(char *mntpt, char *fstype) } if (strcmp(fstype, "ufs") == 0 && zfs) { - bam_error(SIGN_FSTYPE_MISMATCH, zfs, "ufs"); + bam_error(_("found mismatched boot signature %s for " + "filesystem type: %s.\n"), zfs, "ufs"); free(zfs); zfs = NULL; } else if (strcmp(fstype, "zfs") == 0 && ufs) { - bam_error(SIGN_FSTYPE_MISMATCH, ufs, "zfs"); + bam_error(_("found mismatched boot signature %s for " + "filesystem type: %s.\n"), ufs, "zfs"); free(ufs); ufs = NULL; } @@ -5600,7 +5743,7 @@ find_backup_common(char *mntpt, char *fstype) /* For now, we let Live Upgrade take care of its signature itself */ if (lu) { - BAM_DPRINTF((D_FREEING_LU_SIGNS, fcn, lu)); + BAM_DPRINTF(("%s: feeing LU sign: %s\n", fcn, lu)); free(lu); lu = NULL; } @@ -5617,9 +5760,10 @@ find_ufs_existing(char *osroot) sign = find_primary_common(osroot, "ufs"); if (sign == NULL) { sign = find_backup_common(osroot, "ufs"); - BAM_DPRINTF((D_EXIST_BACKUP_SIGN, fcn, sign ? sign : "NULL")); + BAM_DPRINTF(("%s: existing backup sign: %s\n", fcn, + sign ? sign : "NULL")); } else { - BAM_DPRINTF((D_EXIST_PRIMARY_SIGN, fcn, sign)); + BAM_DPRINTF(("%s: existing primary sign: %s\n", fcn, sign)); } return (sign); @@ -5635,13 +5779,14 @@ get_mountpoint(char *special, char *fstype) int ret; const char *fcn = "get_mountpoint()"; - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, special, fstype)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, special, fstype)); mntfp = fopen(MNTTAB, "r"); error = errno; INJECT_ERROR1("MNTTAB_ERR_GET_MNTPT", mntfp = NULL); if (mntfp == NULL) { - bam_error(OPEN_FAIL, MNTTAB, strerror(error)); + bam_error(_("failed to open file: %s: %s\n"), + MNTTAB, strerror(error)); return (NULL); } @@ -5652,14 +5797,16 @@ get_mountpoint(char *special, char *fstype) INJECT_ERROR1("GET_MOUNTPOINT_MNTANY", ret = 1); if (ret != 0) { (void) fclose(mntfp); - BAM_DPRINTF((D_NO_MNTPT, fcn, special, fstype)); + BAM_DPRINTF(("%s: no mount-point for special=%s and " + "fstype=%s\n", fcn, special, fstype)); return (NULL); } (void) fclose(mntfp); assert(mp.mnt_mountp); - BAM_DPRINTF((D_GET_MOUNTPOINT_RET, fcn, special, mp.mnt_mountp)); + BAM_DPRINTF(("%s: returning mount-point for special %s: %s\n", + fcn, special, mp.mnt_mountp)); return (s_strdup(mp.mnt_mountp)); } @@ -5680,7 +5827,7 @@ mount_legacy_dataset(char *pool, zfs_mnted_t *mnted) int ret; const char *fcn = "mount_legacy_dataset()"; - BAM_DPRINTF((D_FUNC_ENTRY1, fcn, pool)); + BAM_DPRINTF(("%s: entered. arg: %s\n", fcn, pool)); *mnted = ZFS_MNT_ERROR; @@ -5691,13 +5838,14 @@ mount_legacy_dataset(char *pool, zfs_mnted_t *mnted) ret = exec_cmd(cmd, &flist); INJECT_ERROR1("Z_MOUNT_LEG_GET_MOUNTED_CMD", ret = 1); if (ret != 0) { - bam_error(ZFS_MNTED_FAILED, pool); + bam_error(_("failed to determine mount status of ZFS " + "pool %s\n"), pool); return (NULL); } INJECT_ERROR1("Z_MOUNT_LEG_GET_MOUNTED_OUT", flist.head = NULL); if ((flist.head == NULL) || (flist.head != flist.tail)) { - bam_error(BAD_ZFS_MNTED, pool); + bam_error(_("ZFS pool %s has bad mount status\n"), pool); filelist_free(&flist); return (NULL); } @@ -5709,7 +5857,8 @@ mount_legacy_dataset(char *pool, zfs_mnted_t *mnted) filelist_free(&flist); *mnted = LEGACY_ALREADY; /* get_mountpoint returns a strdup'ed string */ - BAM_DPRINTF((D_Z_MOUNT_TOP_LEG_ALREADY, fcn, pool)); + BAM_DPRINTF(("%s: legacy pool %s already mounted\n", + fcn, pool)); return (get_mountpoint(pool, "zfs")); } @@ -5724,15 +5873,18 @@ mount_legacy_dataset(char *pool, zfs_mnted_t *mnted) ret = stat(tmpmnt, &sb); if (ret == -1) { - BAM_DPRINTF((D_Z_MOUNT_TOP_LEG_MNTPT_ABS, fcn, pool, tmpmnt)); + BAM_DPRINTF(("%s: legacy pool %s mount-point %s absent\n", + fcn, pool, tmpmnt)); ret = mkdirp(tmpmnt, DIR_PERMS); INJECT_ERROR1("Z_MOUNT_TOP_LEG_MNTPT_MKDIRP", ret = -1); if (ret == -1) { - bam_error(MKDIR_FAILED, tmpmnt, strerror(errno)); + bam_error(_("mkdir of %s failed: %s\n"), tmpmnt, + strerror(errno)); return (NULL); } } else { - BAM_DPRINTF((D_Z_MOUNT_TOP_LEG_MNTPT_PRES, fcn, pool, tmpmnt)); + BAM_DPRINTF(("%s: legacy pool %s mount-point %s is already " + "present\n", fcn, pool, tmpmnt)); } (void) snprintf(cmd, sizeof (cmd), @@ -5742,13 +5894,14 @@ mount_legacy_dataset(char *pool, zfs_mnted_t *mnted) ret = exec_cmd(cmd, NULL); INJECT_ERROR1("Z_MOUNT_TOP_LEG_MOUNT_CMD", ret = 1); if (ret != 0) { - bam_error(ZFS_MOUNT_FAILED, pool); + bam_error(_("mount of ZFS pool %s failed\n"), pool); (void) rmdir(tmpmnt); return (NULL); } *mnted = LEGACY_MOUNTED; - BAM_DPRINTF((D_Z_MOUNT_TOP_LEG_MOUNTED, fcn, pool, tmpmnt)); + BAM_DPRINTF(("%s: legacy pool %s successfully mounted at %s\n", + fcn, pool, tmpmnt)); return (s_strdup(tmpmnt)); } @@ -5757,7 +5910,7 @@ mount_legacy_dataset(char *pool, zfs_mnted_t *mnted) * Returns: The mountpoint of the top dataset or NULL on error * mnted returns one of the above values defined for zfs_mnted_t */ -static char * +char * mount_top_dataset(char *pool, zfs_mnted_t *mnted) { char cmd[PATH_MAX]; @@ -5770,7 +5923,7 @@ mount_top_dataset(char *pool, zfs_mnted_t *mnted) *mnted = ZFS_MNT_ERROR; - BAM_DPRINTF((D_FUNC_ENTRY1, fcn, pool)); + BAM_DPRINTF(("%s: entered. arg: %s\n", fcn, pool)); /* * First check if the top dataset is a "legacy" dataset @@ -5781,7 +5934,8 @@ mount_top_dataset(char *pool, zfs_mnted_t *mnted) ret = exec_cmd(cmd, &flist); INJECT_ERROR1("Z_MOUNT_TOP_GET_MNTPT", ret = 1); if (ret != 0) { - bam_error(ZFS_MNTPT_FAILED, pool); + bam_error(_("failed to determine mount point of ZFS pool %s\n"), + pool); return (NULL); } @@ -5789,14 +5943,14 @@ mount_top_dataset(char *pool, zfs_mnted_t *mnted) char *legacy = strtok(flist.head->line, " \t\n"); if (legacy && strcmp(legacy, "legacy") == 0) { filelist_free(&flist); - BAM_DPRINTF((D_Z_IS_LEGACY, fcn, pool)); + BAM_DPRINTF(("%s: is legacy, pool=%s\n", fcn, pool)); return (mount_legacy_dataset(pool, mnted)); } } filelist_free(&flist); - BAM_DPRINTF((D_Z_IS_NOT_LEGACY, fcn, pool)); + BAM_DPRINTF(("%s: is *NOT* legacy, pool=%s\n", fcn, pool)); (void) snprintf(cmd, sizeof (cmd), "/sbin/zfs get -Ho value mounted %s", @@ -5805,13 +5959,14 @@ mount_top_dataset(char *pool, zfs_mnted_t *mnted) ret = exec_cmd(cmd, &flist); INJECT_ERROR1("Z_MOUNT_TOP_NONLEG_GET_MOUNTED", ret = 1); if (ret != 0) { - bam_error(ZFS_MNTED_FAILED, pool); + bam_error(_("failed to determine mount status of ZFS " + "pool %s\n"), pool); return (NULL); } INJECT_ERROR1("Z_MOUNT_TOP_NONLEG_GET_MOUNTED_VAL", flist.head = NULL); if ((flist.head == NULL) || (flist.head != flist.tail)) { - bam_error(BAD_ZFS_MNTED, pool); + bam_error(_("ZFS pool %s has bad mount status\n"), pool); filelist_free(&flist); return (NULL); } @@ -5822,12 +5977,14 @@ mount_top_dataset(char *pool, zfs_mnted_t *mnted) if (strcmp(is_mounted, "no") != 0) { filelist_free(&flist); *mnted = ZFS_ALREADY; - BAM_DPRINTF((D_Z_MOUNT_TOP_NONLEG_MOUNTED_ALREADY, fcn, pool)); + BAM_DPRINTF(("%s: non-legacy pool %s mounted already\n", + fcn, pool)); goto mounted; } filelist_free(&flist); - BAM_DPRINTF((D_Z_MOUNT_TOP_NONLEG_MOUNTED_NOT_ALREADY, fcn, pool)); + BAM_DPRINTF(("%s: non-legacy pool %s *NOT* already mounted\n", + fcn, pool)); /* top dataset is not mounted. Mount it now */ (void) snprintf(cmd, sizeof (cmd), @@ -5835,11 +5992,11 @@ mount_top_dataset(char *pool, zfs_mnted_t *mnted) ret = exec_cmd(cmd, NULL); INJECT_ERROR1("Z_MOUNT_TOP_NONLEG_MOUNT_CMD", ret = 1); if (ret != 0) { - bam_error(ZFS_MOUNT_FAILED, pool); + bam_error(_("mount of ZFS pool %s failed\n"), pool); return (NULL); } *mnted = ZFS_MOUNTED; - BAM_DPRINTF((D_Z_MOUNT_TOP_NONLEG_MOUNTED_NOW, fcn, pool)); + BAM_DPRINTF(("%s: non-legacy pool %s mounted now\n", fcn, pool)); /*FALLTHRU*/ mounted: /* @@ -5852,38 +6009,41 @@ mounted: ret = exec_cmd(cmd, &flist); INJECT_ERROR1("Z_MOUNT_TOP_NONLEG_GET_MNTPT_CMD", ret = 1); if (ret != 0) { - bam_error(ZFS_MNTPT_FAILED, pool); + bam_error(_("failed to determine mount point of ZFS pool %s\n"), + pool); goto error; } INJECT_ERROR1("Z_MOUNT_TOP_NONLEG_GET_MNTPT_OUT", flist.head = NULL); if ((flist.head == NULL) || (flist.head != flist.tail)) { - bam_error(NULL_ZFS_MNTPT, pool); + bam_error(_("ZFS pool %s has no mount-point\n"), pool); goto error; } mntpt = strtok(flist.head->line, " \t\n"); INJECT_ERROR1("Z_MOUNT_TOP_NONLEG_GET_MNTPT_STRTOK", mntpt = "foo"); if (*mntpt != '/') { - bam_error(BAD_ZFS_MNTPT, pool, mntpt); + bam_error(_("ZFS pool %s has bad mount-point %s\n"), + pool, mntpt); goto error; } zmntpt = s_strdup(mntpt); filelist_free(&flist); - BAM_DPRINTF((D_Z_MOUNT_TOP_NONLEG_MNTPT, fcn, pool, zmntpt)); + BAM_DPRINTF(("%s: non-legacy pool %s is mounted at %s\n", + fcn, pool, zmntpt)); return (zmntpt); error: filelist_free(&flist); (void) umount_top_dataset(pool, *mnted, NULL); - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); return (NULL); } -static int +int umount_top_dataset(char *pool, zfs_mnted_t mnted, char *mntpt) { char cmd[PATH_MAX]; @@ -5895,8 +6055,8 @@ umount_top_dataset(char *pool, zfs_mnted_t mnted, char *mntpt) case LEGACY_ALREADY: case ZFS_ALREADY: /* nothing to do */ - BAM_DPRINTF((D_Z_UMOUNT_TOP_ALREADY_NOP, fcn, pool, - mntpt ? mntpt : "NULL")); + BAM_DPRINTF(("%s: pool %s was already mounted at %s, Nothing " + "to umount\n", fcn, pool, mntpt ? mntpt : "NULL")); free(mntpt); return (BAM_SUCCESS); case LEGACY_MOUNTED: @@ -5905,14 +6065,15 @@ umount_top_dataset(char *pool, zfs_mnted_t mnted, char *mntpt) ret = exec_cmd(cmd, NULL); INJECT_ERROR1("Z_UMOUNT_TOP_LEGACY_UMOUNT_FAIL", ret = 1); if (ret != 0) { - bam_error(UMOUNT_FAILED, pool); + bam_error(_("umount of %s failed\n"), pool); free(mntpt); return (BAM_ERROR); } if (mntpt) (void) rmdir(mntpt); free(mntpt); - BAM_DPRINTF((D_Z_UMOUNT_TOP_LEGACY, fcn, pool)); + BAM_DPRINTF(("%s: legacy pool %s was mounted by us, " + "successfully unmounted\n", fcn, pool)); return (BAM_SUCCESS); case ZFS_MOUNTED: free(mntpt); @@ -5921,13 +6082,15 @@ umount_top_dataset(char *pool, zfs_mnted_t mnted, char *mntpt) ret = exec_cmd(cmd, NULL); INJECT_ERROR1("Z_UMOUNT_TOP_NONLEG_UMOUNT_FAIL", ret = 1); if (ret != 0) { - bam_error(UMOUNT_FAILED, pool); + bam_error(_("umount of %s failed\n"), pool); return (BAM_ERROR); } - BAM_DPRINTF((D_Z_UMOUNT_TOP_NONLEG, fcn, pool)); + BAM_DPRINTF(("%s: nonleg pool %s was mounted by us, " + "successfully unmounted\n", fcn, pool)); return (BAM_SUCCESS); default: - bam_error(INT_BAD_MNTSTATE, pool); + bam_error(_("Internal error: bad saved mount state for " + "pool %s\n"), pool); return (BAM_ERROR); } /*NOTREACHED*/ @@ -5952,11 +6115,11 @@ get_pool(char *osdev) INJECT_ERROR1("GET_POOL_OSDEV", osdev = NULL); if (osdev == NULL) { - bam_error(GET_POOL_OSDEV_NULL); + bam_error(_("NULL device: cannot determine pool name\n")); return (NULL); } - BAM_DPRINTF((D_GET_POOL_OSDEV, fcn, osdev)); + BAM_DPRINTF(("%s: osdev arg = %s\n", fcn, osdev)); if (osdev[0] != '/') { (void) strlcpy(buf, osdev, sizeof (buf)); @@ -5964,11 +6127,12 @@ get_pool(char *osdev) if (slash) *slash = '\0'; pool = s_strdup(buf); - BAM_DPRINTF((D_GET_POOL_RET, fcn, pool)); + BAM_DPRINTF(("%s: got pool. pool = %s\n", fcn, pool)); return (pool); } else if (strncmp(osdev, "/dev/dsk/", strlen("/dev/dsk/")) != 0 && strncmp(osdev, "/dev/rdsk/", strlen("/dev/rdsk/")) != 0) { - bam_error(GET_POOL_BAD_OSDEV, osdev); + bam_error(_("invalid device %s: cannot determine pool name\n"), + osdev); return (NULL); } @@ -5983,13 +6147,13 @@ get_pool(char *osdev) ret = exec_cmd(cmd, &flist); INJECT_ERROR1("GET_POOL_FSTYP", ret = 1); if (ret != 0) { - bam_error(FSTYP_A_FAILED, osdev); + bam_error(_("fstyp -a on device %s failed\n"), osdev); return (NULL); } INJECT_ERROR1("GET_POOL_FSTYP_OUT", flist.head = NULL); if ((flist.head == NULL) || (flist.head != flist.tail)) { - bam_error(NULL_FSTYP_A, osdev); + bam_error(_("NULL fstyp -a output for device %s\n"), osdev); filelist_free(&flist); return (NULL); } @@ -5998,7 +6162,7 @@ get_pool(char *osdev) cp = strtok(NULL, "'"); INJECT_ERROR1("GET_POOL_FSTYP_STRTOK", cp = NULL); if (cp == NULL) { - bam_error(BAD_FSTYP_A, osdev); + bam_error(_("bad fstyp -a output for device %s\n"), osdev); filelist_free(&flist); return (NULL); } @@ -6007,7 +6171,7 @@ get_pool(char *osdev) filelist_free(&flist); - BAM_DPRINTF((D_GET_POOL_RET, fcn, pool)); + BAM_DPRINTF(("%s: got pool. pool = %s\n", fcn, pool)); return (pool); } @@ -6024,14 +6188,15 @@ find_zfs_existing(char *osdev) pool = get_pool(osdev); INJECT_ERROR1("ZFS_FIND_EXIST_POOL", pool = NULL); if (pool == NULL) { - bam_error(ZFS_GET_POOL_FAILED, osdev); + bam_error(_("failed to get pool for device: %s\n"), osdev); return (NULL); } mntpt = mount_top_dataset(pool, &mnted); INJECT_ERROR1("ZFS_FIND_EXIST_MOUNT_TOP", mntpt = NULL); if (mntpt == NULL) { - bam_error(ZFS_MOUNT_TOP_DATASET_FAILED, pool); + bam_error(_("failed to mount top dataset for pool: %s\n"), + pool); free(pool); return (NULL); } @@ -6039,9 +6204,10 @@ find_zfs_existing(char *osdev) sign = find_primary_common(mntpt, "zfs"); if (sign == NULL) { sign = find_backup_common(mntpt, "zfs"); - BAM_DPRINTF((D_EXIST_BACKUP_SIGN, fcn, sign ? sign : "NULL")); + BAM_DPRINTF(("%s: existing backup sign: %s\n", fcn, + sign ? sign : "NULL")); } else { - BAM_DPRINTF((D_EXIST_PRIMARY_SIGN, fcn, sign)); + BAM_DPRINTF(("%s: existing primary sign: %s\n", fcn, sign)); } (void) umount_top_dataset(pool, mnted, mntpt); @@ -6058,13 +6224,14 @@ find_existing_sign(char *osroot, char *osdev, char *fstype) INJECT_ERROR1("FIND_EXIST_NOTSUP_FS", fstype = "foofs"); if (strcmp(fstype, "ufs") == 0) { - BAM_DPRINTF((D_CHECK_UFS_EXIST_SIGN, fcn)); + BAM_DPRINTF(("%s: checking for existing UFS sign\n", fcn)); return (find_ufs_existing(osroot)); } else if (strcmp(fstype, "zfs") == 0) { - BAM_DPRINTF((D_CHECK_ZFS_EXIST_SIGN, fcn)); + BAM_DPRINTF(("%s: checking for existing ZFS sign\n", fcn)); return (find_zfs_existing(osdev)); } else { - bam_error(GRUBSIGN_NOTSUP, fstype); + bam_error(_("boot signature not supported for fstype: %s\n"), + fstype); return (NULL); } } @@ -6122,7 +6289,8 @@ cache_mnttab(void) error = errno; INJECT_ERROR1("CACHE_MNTTAB_MNTTAB_ERR", mfp = NULL); if (mfp == NULL) { - bam_error(OPEN_FAIL, MNTTAB, strerror(error)); + bam_error(_("failed to open file: %s: %s\n"), MNTTAB, + strerror(error)); return (NULL); } @@ -6143,8 +6311,8 @@ cache_mnttab(void) mcp->mc_special = s_strdup(ctds); mcp->mc_mntpt = s_strdup(mnt.mnt_mountp); mcp->mc_fstype = s_strdup(mnt.mnt_fstype); - BAM_DPRINTF((D_CACHE_MNTS, fcn, ctds, - mnt.mnt_mountp, mnt.mnt_fstype)); + BAM_DPRINTF(("%s: caching mount: special=%s, mntpt=%s, " + "fstype=%s\n", fcn, ctds, mnt.mnt_mountp, mnt.mnt_fstype)); idx = mhash_fcn(ctds); mcp->mc_next = mhp->mh_hash[idx]; mhp->mh_hash[idx] = mcp; @@ -6191,7 +6359,7 @@ search_hash(mhash_t *mhp, char *special, char **mntpt) INJECT_ERROR1("SEARCH_HASH_FULL_PATH", special = "/foo"); if (strchr(special, '/')) { - bam_error(INVALID_MHASH_KEY, special); + bam_error(_("invalid key for mnttab hash: %s\n"), special); return (MH_ERROR); } @@ -6203,13 +6371,13 @@ search_hash(mhash_t *mhp, char *special, char **mntpt) } if (mcp == NULL) { - BAM_DPRINTF((D_MNTTAB_HASH_NOMATCH, fcn, special)); + BAM_DPRINTF(("%s: no match in cache for: %s\n", fcn, special)); return (MH_NOMATCH); } assert(strcmp(mcp->mc_fstype, "ufs") == 0); *mntpt = mcp->mc_mntpt; - BAM_DPRINTF((D_MNTTAB_HASH_MATCH, fcn, special)); + BAM_DPRINTF(("%s: *MATCH* in cache for: %s\n", fcn, special)); return (MH_MATCH); } @@ -6227,7 +6395,8 @@ check_add_ufs_sign_to_list(FILE *tfp, char *mntpt) sign = find_existing_sign(mntpt, NULL, "ufs"); if (sign == NULL) { /* No existing signature, nothing to add to list */ - BAM_DPRINTF((D_NO_SIGN_TO_LIST, fcn, mntpt)); + BAM_DPRINTF(("%s: no sign on %s to add to signlist\n", + fcn, mntpt)); return (0); } @@ -6237,7 +6406,7 @@ check_add_ufs_sign_to_list(FILE *tfp, char *mntpt) INJECT_ERROR1("UFS_MNTPT_SIGN_NOTUFS", signline = "pool_rpool10\n"); if (strncmp(signline, GRUBSIGN_UFS_PREFIX, strlen(GRUBSIGN_UFS_PREFIX))) { - bam_error(INVALID_UFS_SIGNATURE, sign); + bam_error(_("invalid UFS boot signature %s\n"), sign); free(sign); /* ignore invalid signatures */ return (0); @@ -6247,14 +6416,16 @@ check_add_ufs_sign_to_list(FILE *tfp, char *mntpt) error = errno; INJECT_ERROR1("SIGN_LIST_PUTS_ERROR", len = 0); if (len != strlen(signline)) { - bam_error(SIGN_LIST_FPUTS_ERR, sign, strerror(error)); + bam_error(_("failed to write signature %s to signature " + "list: %s\n"), sign, strerror(error)); free(sign); return (-1); } free(sign); - BAM_DPRINTF((D_SIGN_LIST_PUTS_DONE, fcn, mntpt)); + BAM_DPRINTF(("%s: successfully added sign on %s to signlist\n", + fcn, mntpt)); return (0); } @@ -6291,7 +6462,7 @@ process_slice_common(char *slice, FILE *tfp, mhash_t *mhp, char *tmpmnt) (void) snprintf(path, sizeof (path), "/dev/rdsk/%s", slice); if (stat(path, &sbuf) == -1) { - BAM_DPRINTF((D_SLICE_ENOENT, fcn, path)); + BAM_DPRINTF(("%s: slice does not exist: %s\n", fcn, path)); return (0); } @@ -6302,13 +6473,14 @@ process_slice_common(char *slice, FILE *tfp, mhash_t *mhp, char *tmpmnt) if (exec_cmd(cmd, &flist) != 0) { if (bam_verbose) - bam_print(FSTYP_FAILED, slice); + bam_print(_("fstyp failed for slice: %s\n"), slice); return (0); } if ((flist.head == NULL) || (flist.head != flist.tail)) { if (bam_verbose) - bam_print(FSTYP_BAD, slice); + bam_print(_("bad output from fstyp for slice: %s\n"), + slice); filelist_free(&flist); return (0); } @@ -6316,7 +6488,8 @@ process_slice_common(char *slice, FILE *tfp, mhash_t *mhp, char *tmpmnt) fstype = strtok(flist.head->line, " \t\n"); if (fstype == NULL || strcmp(fstype, "ufs") != 0) { if (bam_verbose) - bam_print(NOT_UFS_SLICE, slice, fstype); + bam_print(_("%s is not a ufs slice: %s\n"), + slice, fstype); filelist_free(&flist); return (0); } @@ -6338,7 +6511,8 @@ process_slice_common(char *slice, FILE *tfp, mhash_t *mhp, char *tmpmnt) if (exec_cmd(cmd, NULL) != 0) { if (bam_verbose) - bam_print(MOUNT_FAILED, blkslice, "ufs"); + bam_print(_("mount of %s (fstype %s) failed\n"), + blkslice, "ufs"); return (0); } @@ -6349,7 +6523,7 @@ process_slice_common(char *slice, FILE *tfp, mhash_t *mhp, char *tmpmnt) tmpmnt); if (exec_cmd(cmd, NULL) != 0) { - bam_print(UMOUNT_FAILED, slice); + bam_print(_("umount of %s failed\n"), slice); return (0); } @@ -6387,7 +6561,8 @@ process_vtoc_slices( (void) snprintf(cp, sizeof (slice) - (len - 1), "%u", idx); if (vtoc->v_part[idx].p_size == 0) { - BAM_DPRINTF((D_VTOC_SIZE_ZERO, fcn, slice)); + BAM_DPRINTF(("%s: VTOC: skipping 0-length slice: %s\n", + fcn, slice)); continue; } @@ -6399,10 +6574,12 @@ process_vtoc_slices( case V_VAR: case V_HOME: case V_ALTSCTR: - BAM_DPRINTF((D_VTOC_NOT_ROOT_TAG, fcn, slice)); + BAM_DPRINTF(("%s: VTOC: unsupported tag, " + "skipping: %s\n", fcn, slice)); continue; default: - BAM_DPRINTF((D_VTOC_ROOT_TAG, fcn, slice)); + BAM_DPRINTF(("%s: VTOC: supported tag, checking: %s\n", + fcn, slice)); break; } @@ -6410,10 +6587,12 @@ process_vtoc_slices( switch (vtoc->v_part[idx].p_flag) { case V_UNMNT: case V_RONLY: - BAM_DPRINTF((D_VTOC_NOT_RDWR_FLAG, fcn, slice)); + BAM_DPRINTF(("%s: VTOC: non-RDWR flag, skipping: %s\n", + fcn, slice)); continue; default: - BAM_DPRINTF((D_VTOC_RDWR_FLAG, fcn, slice)); + BAM_DPRINTF(("%s: VTOC: RDWR flag, checking: %s\n", + fcn, slice)); break; } @@ -6456,7 +6635,8 @@ process_efi_slices( (void) snprintf(cp, sizeof (slice) - (len - 1), "%u", idx); if (efi->efi_parts[idx].p_size == 0) { - BAM_DPRINTF((D_EFI_SIZE_ZERO, fcn, slice)); + BAM_DPRINTF(("%s: EFI: skipping 0-length slice: %s\n", + fcn, slice)); continue; } @@ -6468,10 +6648,12 @@ process_efi_slices( case V_VAR: case V_HOME: case V_ALTSCTR: - BAM_DPRINTF((D_EFI_NOT_ROOT_TAG, fcn, slice)); + BAM_DPRINTF(("%s: EFI: unsupported tag, skipping: %s\n", + fcn, slice)); continue; default: - BAM_DPRINTF((D_EFI_ROOT_TAG, fcn, slice)); + BAM_DPRINTF(("%s: EFI: supported tag, checking: %s\n", + fcn, slice)); break; } @@ -6479,10 +6661,12 @@ process_efi_slices( switch (efi->efi_parts[idx].p_flag) { case V_UNMNT: case V_RONLY: - BAM_DPRINTF((D_EFI_NOT_RDWR_FLAG, fcn, slice)); + BAM_DPRINTF(("%s: EFI: non-RDWR flag, skipping: %s\n", + fcn, slice)); continue; default: - BAM_DPRINTF((D_EFI_RDWR_FLAG, fcn, slice)); + BAM_DPRINTF(("%s: EFI: RDWR flag, checking: %s\n", + fcn, slice)); break; } @@ -6514,13 +6698,14 @@ process_slice0(char *s0, FILE *tfp, mhash_t *mhp, char *tmpmnt) (void) snprintf(s0path, sizeof (s0path), "/dev/rdsk/%s", s0); if (stat(s0path, &sbuf) == -1) { - BAM_DPRINTF((D_SLICE0_ENOENT, fcn, s0path)); + BAM_DPRINTF(("%s: slice 0 does not exist: %s\n", fcn, s0path)); return (0); } fd = open(s0path, O_NONBLOCK|O_RDONLY); if (fd == -1) { - bam_error(OPEN_FAIL, s0path, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), s0path, + strerror(errno)); return (0); } @@ -6528,24 +6713,30 @@ process_slice0(char *s0, FILE *tfp, mhash_t *mhp, char *tmpmnt) retval = ((err = read_vtoc(fd, &vtoc)) >= 0) ? 0 : err; switch (retval) { case VT_EIO: - BAM_DPRINTF((D_VTOC_READ_FAIL, fcn, s0path)); + BAM_DPRINTF(("%s: VTOC: failed to read: %s\n", + fcn, s0path)); break; case VT_EINVAL: - BAM_DPRINTF((D_VTOC_INVALID, fcn, s0path)); + BAM_DPRINTF(("%s: VTOC: is INVALID: %s\n", + fcn, s0path)); break; case VT_ERROR: - BAM_DPRINTF((D_VTOC_UNKNOWN_ERR, fcn, s0path)); + BAM_DPRINTF(("%s: VTOC: unknown error while " + "reading: %s\n", fcn, s0path)); break; case VT_ENOTSUP: e_flag = 1; - BAM_DPRINTF((D_VTOC_NOTSUP, fcn, s0path)); + BAM_DPRINTF(("%s: VTOC: not supported: %s\n", + fcn, s0path)); break; case 0: v_flag = 1; - BAM_DPRINTF((D_VTOC_READ_SUCCESS, fcn, s0path)); + BAM_DPRINTF(("%s: VTOC: SUCCESS reading: %s\n", + fcn, s0path)); break; default: - BAM_DPRINTF((D_VTOC_UNKNOWN_RETCODE, fcn, s0path)); + BAM_DPRINTF(("%s: VTOC: READ: unknown return " + "code: %s\n", fcn, s0path)); break; } @@ -6555,23 +6746,28 @@ process_slice0(char *s0, FILE *tfp, mhash_t *mhp, char *tmpmnt) retval = ((err = efi_alloc_and_read(fd, &efi)) >= 0) ? 0 : err; switch (retval) { case VT_EIO: - BAM_DPRINTF((D_EFI_READ_FAIL, fcn, s0path)); + BAM_DPRINTF(("%s: EFI: failed to read: %s\n", + fcn, s0path)); break; case VT_EINVAL: - BAM_DPRINTF((D_EFI_INVALID, fcn, s0path)); + BAM_DPRINTF(("%s: EFI: is INVALID: %s\n", fcn, s0path)); break; case VT_ERROR: - BAM_DPRINTF((D_EFI_UNKNOWN_ERR, fcn, s0path)); + BAM_DPRINTF(("%s: EFI: unknown error while " + "reading: %s\n", fcn, s0path)); break; case VT_ENOTSUP: - BAM_DPRINTF((D_EFI_NOTSUP, fcn, s0path)); + BAM_DPRINTF(("%s: EFI: not supported: %s\n", + fcn, s0path)); break; case 0: e_flag = 1; - BAM_DPRINTF((D_EFI_READ_SUCCESS, fcn, s0path)); + BAM_DPRINTF(("%s: EFI: SUCCESS reading: %s\n", + fcn, s0path)); break; default: - BAM_DPRINTF((D_EFI_UNKNOWN_RETCODE, fcn, s0path)); + BAM_DPRINTF(("%s: EFI: READ: unknown return code: %s\n", + fcn, s0path)); break; } } @@ -6585,7 +6781,8 @@ process_slice0(char *s0, FILE *tfp, mhash_t *mhp, char *tmpmnt) retval = process_efi_slices(s0, efi, tfp, mhp, tmpmnt); } else { - BAM_DPRINTF((D_NOT_VTOC_OR_EFI, fcn, s0path)); + BAM_DPRINTF(("%s: disk has neither VTOC nor EFI: %s\n", + fcn, s0path)); return (0); } @@ -6612,7 +6809,8 @@ FindAllUfsSignatures(void) const char *fcn = "FindAllUfsSignatures()"; if (stat(UFS_SIGNATURE_LIST, &sb) != -1) { - bam_print(SIGNATURE_LIST_EXISTS, UFS_SIGNATURE_LIST); + bam_print(_(" - signature list %s exists\n"), + UFS_SIGNATURE_LIST); return (0); } @@ -6621,7 +6819,8 @@ FindAllUfsSignatures(void) error = errno; INJECT_ERROR1("SIGN_LIST_TMP_TRUNC", fd = -1); if (fd == -1) { - bam_error(OPEN_FAIL, UFS_SIGNATURE_LIST".tmp", strerror(error)); + bam_error(_("failed to open file: %s: %s\n"), + UFS_SIGNATURE_LIST".tmp", strerror(error)); return (-1); } @@ -6629,8 +6828,8 @@ FindAllUfsSignatures(void) error = errno; INJECT_ERROR1("SIGN_LIST_TMP_CLOSE", ret = -1); if (ret == -1) { - bam_error(CLOSE_FAIL, UFS_SIGNATURE_LIST".tmp", - strerror(error)); + bam_error(_("failed to close file: %s: %s\n"), + UFS_SIGNATURE_LIST".tmp", strerror(error)); (void) unlink(UFS_SIGNATURE_LIST".tmp"); return (-1); } @@ -6639,7 +6838,8 @@ FindAllUfsSignatures(void) error = errno; INJECT_ERROR1("SIGN_LIST_APPEND_FOPEN", tfp = NULL); if (tfp == NULL) { - bam_error(OPEN_FAIL, UFS_SIGNATURE_LIST".tmp", strerror(error)); + bam_error(_("failed to open file: %s: %s\n"), + UFS_SIGNATURE_LIST".tmp", strerror(error)); (void) unlink(UFS_SIGNATURE_LIST".tmp"); return (-1); } @@ -6649,7 +6849,7 @@ FindAllUfsSignatures(void) if (mnttab_hash == NULL) { (void) fclose(tfp); (void) unlink(UFS_SIGNATURE_LIST".tmp"); - bam_error(CACHE_MNTTAB_FAIL, fcn); + bam_error(_("%s: failed to cache /etc/mnttab\n"), fcn); return (-1); } @@ -6661,7 +6861,8 @@ FindAllUfsSignatures(void) error = errno; INJECT_ERROR1("MKDIRP_SIGN_MNT", ret = -1); if (ret == -1) { - bam_error(MKDIR_FAILED, tmpmnt, strerror(error)); + bam_error(_("mkdir of %s failed: %s\n"), tmpmnt, + strerror(error)); free_mnttab(mnttab_hash); (void) fclose(tfp); (void) unlink(UFS_SIGNATURE_LIST".tmp"); @@ -6672,7 +6873,8 @@ FindAllUfsSignatures(void) error = errno; INJECT_ERROR1("OPENDIR_DEV_RDSK", dirp = NULL); if (dirp == NULL) { - bam_error(OPENDIR_FAILED, "/dev/rdsk", strerror(error)); + bam_error(_("opendir of %s failed: %s\n"), "/dev/rdsk", + strerror(error)); goto fail; } @@ -6687,7 +6889,8 @@ FindAllUfsSignatures(void) */ len = strlen(dp->d_name); if (dp->d_name[len - 2 ] != 's' || dp->d_name[len - 1] != '0') { - BAM_DPRINTF((D_SKIP_SLICE_NOTZERO, fcn, dp->d_name)); + BAM_DPRINTF(("%s: skipping non-s0 slice: %s\n", + fcn, dp->d_name)); continue; } @@ -6705,8 +6908,8 @@ FindAllUfsSignatures(void) error = errno; INJECT_ERROR1("FCLOSE_SIGNLIST_TMP", ret = EOF); if (ret == EOF) { - bam_error(CLOSE_FAIL, UFS_SIGNATURE_LIST".tmp", - strerror(error)); + bam_error(_("failed to close file: %s: %s\n"), + UFS_SIGNATURE_LIST".tmp", strerror(error)); (void) unlink(UFS_SIGNATURE_LIST".tmp"); return (-1); } @@ -6719,7 +6922,7 @@ FindAllUfsSignatures(void) ret = exec_cmd(cmd, NULL); INJECT_ERROR1("SORT_SIGN_LIST", ret = 1); if (ret != 0) { - bam_error(GRUBSIGN_SORT_FAILED); + bam_error(_("error sorting GRUB UFS boot signatures\n")); (void) unlink(UFS_SIGNATURE_LIST".sorted"); (void) unlink(UFS_SIGNATURE_LIST".tmp"); return (-1); @@ -6731,16 +6934,18 @@ FindAllUfsSignatures(void) error = errno; INJECT_ERROR1("RENAME_TMP_SIGNLIST", ret = -1); if (ret == -1) { - bam_error(RENAME_FAIL, UFS_SIGNATURE_LIST, strerror(error)); + bam_error(_("rename to file failed: %s: %s\n"), + UFS_SIGNATURE_LIST, strerror(error)); (void) unlink(UFS_SIGNATURE_LIST".sorted"); return (-1); } if (stat(UFS_SIGNATURE_LIST, &sb) == 0 && sb.st_size == 0) { - BAM_DPRINTF((D_ZERO_LEN_SIGNLIST, fcn, UFS_SIGNATURE_LIST)); + BAM_DPRINTF(("%s: generated zero length signlist: %s.\n", + fcn, UFS_SIGNATURE_LIST)); } - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (0); fail: @@ -6750,7 +6955,7 @@ fail: (void) rmdir(tmpmnt); (void) fclose(tfp); (void) unlink(UFS_SIGNATURE_LIST".tmp"); - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); return (-1); } @@ -6767,12 +6972,12 @@ create_ufs_sign(void) int error; const char *fcn = "create_ufs_sign()"; - bam_print(SEARCHING_UFS_SIGN); + bam_print(_(" - searching for UFS boot signatures\n")); ret = FindAllUfsSignatures(); INJECT_ERROR1("FIND_ALL_UFS", ret = -1); if (ret == -1) { - bam_error(ERR_FIND_UFS_SIGN); + bam_error(_("search for UFS boot signatures failed\n")); return (NULL); } @@ -6781,12 +6986,13 @@ create_ufs_sign(void) (void) unlink(UFS_SIGNATURE_LIST)); if (stat(UFS_SIGNATURE_LIST, &sb) == -1 || sb.st_uid != 0) { (void) unlink(UFS_SIGNATURE_LIST); - bam_error(UFS_SIGNATURE_LIST_MISS, UFS_SIGNATURE_LIST); + bam_error(_("missing UFS signature list file: %s\n"), + UFS_SIGNATURE_LIST); return (NULL); } if (sb.st_size == 0) { - bam_print(GRUBSIGN_UFS_NONE); + bam_print(_(" - no existing UFS boot signatures\n")); i = 0; goto found; } @@ -6796,8 +7002,8 @@ create_ufs_sign(void) error = errno; INJECT_ERROR1("FOPEN_SIGN_LIST", tfp = NULL); if (tfp == NULL) { - bam_error(UFS_SIGNATURE_LIST_OPENERR, - UFS_SIGNATURE_LIST, strerror(error)); + bam_error(_("error opening UFS boot signature list " + "file %s: %s\n"), UFS_SIGNATURE_LIST, strerror(error)); (void) unlink(UFS_SIGNATURE_LIST); return (NULL); } @@ -6808,7 +7014,7 @@ create_ufs_sign(void) strlen(GRUBSIGN_UFS_PREFIX)) != 0) { (void) fclose(tfp); (void) unlink(UFS_SIGNATURE_LIST); - bam_error(UFS_BADSIGN, tmpsign); + bam_error(_("bad UFS boot signature: %s\n"), tmpsign); return (NULL); } numstr = tmpsign + strlen(GRUBSIGN_UFS_PREFIX); @@ -6816,7 +7022,7 @@ create_ufs_sign(void) if (numstr[0] == '\0' || !isdigit(numstr[0])) { (void) fclose(tfp); (void) unlink(UFS_SIGNATURE_LIST); - bam_error(UFS_BADSIGN, tmpsign); + bam_error(_("bad UFS boot signature: %s\n"), tmpsign); return (NULL); } @@ -6825,12 +7031,13 @@ create_ufs_sign(void) if (signnum < 0) { (void) fclose(tfp); (void) unlink(UFS_SIGNATURE_LIST); - bam_error(UFS_BADSIGN, tmpsign); + bam_error(_("bad UFS boot signature: %s\n"), tmpsign); return (NULL); } if (i != signnum) { - BAM_DPRINTF((D_FOUND_HOLE_SIGNLIST, fcn, i)); + BAM_DPRINTF(("%s: found hole %d in sign list.\n", + fcn, i)); break; } } @@ -6845,11 +7052,11 @@ found: INJECT_ERROR1("UFS_ADD_TO_SIGN_LIST", ret = -1); if (ret == -1) { (void) unlink(UFS_SIGNATURE_LIST); - bam_error(FAILED_ADD_SIGNLIST, tmpsign); + bam_error(_("failed to add sign %s to signlist.\n"), tmpsign); return (NULL); } - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (s_strdup(tmpsign)); } @@ -6866,7 +7073,7 @@ get_fstype(char *osroot) INJECT_ERROR1("GET_FSTYPE_OSROOT", osroot = NULL); if (osroot == NULL) { - bam_error(GET_FSTYPE_ARGS); + bam_error(_("no OS mountpoint. Cannot determine fstype\n")); return (NULL); } @@ -6874,7 +7081,8 @@ get_fstype(char *osroot) error = errno; INJECT_ERROR1("GET_FSTYPE_FOPEN", mntfp = NULL); if (mntfp == NULL) { - bam_error(OPEN_FAIL, MNTTAB, strerror(error)); + bam_error(_("failed to open file: %s: %s\n"), MNTTAB, + strerror(error)); return (NULL); } @@ -6886,7 +7094,8 @@ get_fstype(char *osroot) ret = getmntany(mntfp, &mp, &mpref); INJECT_ERROR1("GET_FSTYPE_GETMNTANY", ret = 1); if (ret != 0) { - bam_error(MNTTAB_MNTPT_NOT_FOUND, osroot, MNTTAB); + bam_error(_("failed to find OS mountpoint %s in %s\n"), + osroot, MNTTAB); (void) fclose(mntfp); return (NULL); } @@ -6894,11 +7103,11 @@ get_fstype(char *osroot) INJECT_ERROR1("GET_FSTYPE_NULL", mp.mnt_fstype = NULL); if (mp.mnt_fstype == NULL) { - bam_error(MNTTAB_FSTYPE_NULL, osroot); + bam_error(_("NULL fstype found for OS root %s\n"), osroot); return (NULL); } - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (s_strdup(mp.mnt_fstype)); } @@ -6910,7 +7119,7 @@ create_zfs_sign(char *osdev) char *pool; const char *fcn = "create_zfs_sign()"; - BAM_DPRINTF((D_FUNC_ENTRY1, fcn, osdev)); + BAM_DPRINTF(("%s: entered. arg: %s\n", fcn, osdev)); /* * First find the pool name @@ -6918,17 +7127,17 @@ create_zfs_sign(char *osdev) pool = get_pool(osdev); INJECT_ERROR1("CREATE_ZFS_SIGN_GET_POOL", pool = NULL); if (pool == NULL) { - bam_error(GET_POOL_FAILED, osdev); + bam_error(_("failed to get pool name from %s\n"), osdev); return (NULL); } (void) snprintf(tmpsign, sizeof (tmpsign), "pool_%s", pool); - BAM_DPRINTF((D_CREATED_ZFS_SIGN, fcn, tmpsign)); + BAM_DPRINTF(("%s: created ZFS sign: %s\n", fcn, tmpsign)); free(pool); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (s_strdup(tmpsign)); } @@ -6942,17 +7151,19 @@ create_new_sign(char *osdev, char *fstype) INJECT_ERROR1("NEW_SIGN_FSTYPE", fstype = "foofs"); if (strcmp(fstype, "zfs") == 0) { - BAM_DPRINTF((D_CREATE_NEW_ZFS, fcn)); + BAM_DPRINTF(("%s: created new ZFS sign\n", fcn)); sign = create_zfs_sign(osdev); } else if (strcmp(fstype, "ufs") == 0) { - BAM_DPRINTF((D_CREATE_NEW_UFS, fcn)); + BAM_DPRINTF(("%s: created new UFS sign\n", fcn)); sign = create_ufs_sign(); } else { - bam_error(GRUBSIGN_NOTSUP, fstype); + bam_error(_("boot signature not supported for fstype: %s\n"), + fstype); sign = NULL; } - BAM_DPRINTF((D_CREATED_NEW_SIGN, fcn, sign ? sign : "")); + BAM_DPRINTF(("%s: created new sign: %s\n", fcn, + sign ? sign : "")); return (sign); } @@ -6977,15 +7188,17 @@ set_backup_common(char *mntpt, char *sign) if (bfp != NULL) { while (s_fgets(tmpsign, sizeof (tmpsign), bfp)) { if (strcmp(tmpsign, sign) == 0) { - BAM_DPRINTF((D_FOUND_IN_BACKUP, fcn, sign)); + BAM_DPRINTF(("%s: found sign (%s) in backup.\n", + fcn, sign)); (void) fclose(bfp); return (0); } } (void) fclose(bfp); - BAM_DPRINTF((D_NOT_FOUND_IN_EXIST_BACKUP, fcn, sign)); + BAM_DPRINTF(("%s: backup exists but sign %s not found\n", + fcn, sign)); } else { - BAM_DPRINTF((D_BACKUP_NOT_EXIST, fcn, backup)); + BAM_DPRINTF(("%s: no backup file (%s) found.\n", fcn, backup)); } /* @@ -7001,12 +7214,13 @@ set_backup_common(char *mntpt, char *sign) ret = stat(bdir, &sb); INJECT_ERROR1("SET_BACKUP_STAT", ret = -1); if (ret == -1) { - BAM_DPRINTF((D_BACKUP_DIR_NOEXIST, fcn, bdir)); + BAM_DPRINTF(("%s: backup dir (%s) does not exist.\n", + fcn, bdir)); ret = mkdirp(bdir, DIR_PERMS); error = errno; INJECT_ERROR1("SET_BACKUP_MKDIRP", ret = -1); if (ret == -1) { - bam_error(GRUBSIGN_BACKUP_MKDIRERR, + bam_error(_("mkdirp() of backup dir failed: %s: %s\n"), GRUBSIGN_BACKUP, strerror(error)); free(backup_dup); return (-1); @@ -7022,8 +7236,8 @@ set_backup_common(char *mntpt, char *sign) error = errno; INJECT_ERROR1("SET_BACKUP_FOPEN_A", bfp = NULL); if (bfp == NULL) { - bam_error(GRUBSIGN_BACKUP_OPENERR, - GRUBSIGN_BACKUP, strerror(error)); + bam_error(_("error opening boot signature backup " + "file %s: %s\n"), GRUBSIGN_BACKUP, strerror(error)); return (-1); } @@ -7033,8 +7247,8 @@ set_backup_common(char *mntpt, char *sign) error = errno; INJECT_ERROR1("SET_BACKUP_FPUTS", ret = 0); if (ret != strlen(tmpsign)) { - bam_error(GRUBSIGN_BACKUP_WRITEERR, - GRUBSIGN_BACKUP, strerror(error)); + bam_error(_("error writing boot signature backup " + "file %s: %s\n"), GRUBSIGN_BACKUP, strerror(error)); (void) fclose(bfp); return (-1); } @@ -7042,9 +7256,10 @@ set_backup_common(char *mntpt, char *sign) (void) fclose(bfp); if (bam_verbose) - bam_print(GRUBSIGN_BACKUP_UPDATED, GRUBSIGN_BACKUP); + bam_print(_("updated boot signature backup file %s\n"), + GRUBSIGN_BACKUP); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (0); } @@ -7054,7 +7269,7 @@ set_backup_ufs(char *osroot, char *sign) { const char *fcn = "set_backup_ufs()"; - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, osroot, sign)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, osroot, sign)); return (set_backup_common(osroot, sign)); } @@ -7067,19 +7282,19 @@ set_backup_zfs(char *osdev, char *sign) int ret; const char *fcn = "set_backup_zfs()"; - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, osdev, sign)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, osdev, sign)); pool = get_pool(osdev); INJECT_ERROR1("SET_BACKUP_GET_POOL", pool = NULL); if (pool == NULL) { - bam_error(GET_POOL_FAILED, osdev); + bam_error(_("failed to get pool name from %s\n"), osdev); return (-1); } mntpt = mount_top_dataset(pool, &mnted); INJECT_ERROR1("SET_BACKUP_MOUNT_DATASET", mntpt = NULL); if (mntpt == NULL) { - bam_error(FAIL_MNT_TOP_DATASET, pool); + bam_error(_("failed to mount top dataset for %s\n"), pool); free(pool); return (-1); } @@ -7092,9 +7307,9 @@ set_backup_zfs(char *osdev, char *sign) INJECT_ERROR1("SET_BACKUP_ZFS_FAIL", ret = 1); if (ret == 0) { - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); } else { - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); } return (ret); @@ -7109,20 +7324,21 @@ set_backup(char *osroot, char *osdev, char *sign, char *fstype) INJECT_ERROR1("SET_BACKUP_FSTYPE", fstype = "foofs"); if (strcmp(fstype, "ufs") == 0) { - BAM_DPRINTF((D_SET_BACKUP_UFS, fcn)); + BAM_DPRINTF(("%s: setting UFS backup sign\n", fcn)); ret = set_backup_ufs(osroot, sign); } else if (strcmp(fstype, "zfs") == 0) { - BAM_DPRINTF((D_SET_BACKUP_ZFS, fcn)); + BAM_DPRINTF(("%s: setting ZFS backup sign\n", fcn)); ret = set_backup_zfs(osdev, sign); } else { - bam_error(GRUBSIGN_NOTSUP, fstype); + bam_error(_("boot signature not supported for fstype: %s\n"), + fstype); ret = -1; } if (ret == 0) { - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); } else { - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); } return (ret); @@ -7144,22 +7360,25 @@ set_primary_common(char *mntpt, char *sign) if (stat(signfile, &sb) != -1) { if (bam_verbose) - bam_print(PRIMARY_SIGN_EXISTS, sign); + bam_print(_("primary sign %s exists\n"), sign); return (0); } else { - BAM_DPRINTF((D_PRIMARY_NOT_EXIST, fcn, signfile)); + BAM_DPRINTF(("%s: primary sign (%s) does not exist\n", + fcn, signfile)); } (void) snprintf(signdir, sizeof (signdir), "%s/%s", mntpt, GRUBSIGN_DIR); if (stat(signdir, &sb) == -1) { - BAM_DPRINTF((D_PRIMARY_DIR_NOEXIST, fcn, signdir)); + BAM_DPRINTF(("%s: primary signdir (%s) does not exist\n", + fcn, signdir)); ret = mkdirp(signdir, DIR_PERMS); error = errno; INJECT_ERROR1("SET_PRIMARY_MKDIRP", ret = -1); if (ret == -1) { - bam_error(GRUBSIGN_MKDIR_ERR, signdir, strerror(errno)); + bam_error(_("error creating boot signature " + "directory %s: %s\n"), signdir, strerror(errno)); return (-1); } } @@ -7168,7 +7387,8 @@ set_primary_common(char *mntpt, char *sign) error = errno; INJECT_ERROR1("PRIMARY_SIGN_CREAT", fd = -1); if (fd == -1) { - bam_error(GRUBSIGN_PRIMARY_CREATERR, signfile, strerror(error)); + bam_error(_("error creating primary boot signature %s: %s\n"), + signfile, strerror(error)); return (-1); } @@ -7176,15 +7396,17 @@ set_primary_common(char *mntpt, char *sign) error = errno; INJECT_ERROR1("PRIMARY_FSYNC", ret = -1); if (ret != 0) { - bam_error(GRUBSIGN_PRIMARY_SYNCERR, signfile, strerror(error)); + bam_error(_("error syncing primary boot signature %s: %s\n"), + signfile, strerror(error)); } (void) close(fd); if (bam_verbose) - bam_print(GRUBSIGN_CREATED_PRIMARY, signfile); + bam_print(_("created primary GRUB boot signature: %s\n"), + signfile); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (0); } @@ -7194,7 +7416,7 @@ set_primary_ufs(char *osroot, char *sign) { const char *fcn = "set_primary_ufs()"; - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, osroot, sign)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, osroot, sign)); return (set_primary_common(osroot, sign)); } @@ -7207,12 +7429,12 @@ set_primary_zfs(char *osdev, char *sign) int ret; const char *fcn = "set_primary_zfs()"; - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, osdev, sign)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, osdev, sign)); pool = get_pool(osdev); INJECT_ERROR1("SET_PRIMARY_ZFS_GET_POOL", pool = NULL); if (pool == NULL) { - bam_error(GET_POOL_FAILED, osdev); + bam_error(_("failed to get pool name from %s\n"), osdev); return (-1); } @@ -7220,7 +7442,8 @@ set_primary_zfs(char *osdev, char *sign) ret = (strstr(sign, pool) != NULL); INJECT_ERROR1("SET_PRIMARY_ZFS_POOL_SIGN_INCOMPAT", ret = 0); if (ret == 0) { - bam_error(POOL_SIGN_INCOMPAT, pool, sign); + bam_error(_("pool name %s not present in signature %s\n"), + pool, sign); free(pool); return (-1); } @@ -7228,7 +7451,7 @@ set_primary_zfs(char *osdev, char *sign) mntpt = mount_top_dataset(pool, &mnted); INJECT_ERROR1("SET_PRIMARY_ZFS_MOUNT_DATASET", mntpt = NULL); if (mntpt == NULL) { - bam_error(FAIL_MNT_TOP_DATASET, pool); + bam_error(_("failed to mount top dataset for %s\n"), pool); free(pool); return (-1); } @@ -7241,9 +7464,9 @@ set_primary_zfs(char *osdev, char *sign) INJECT_ERROR1("SET_PRIMARY_ZFS_FAIL", ret = 1); if (ret == 0) { - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); } else { - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); } return (ret); @@ -7257,20 +7480,21 @@ set_primary(char *osroot, char *osdev, char *sign, char *fstype) INJECT_ERROR1("SET_PRIMARY_FSTYPE", fstype = "foofs"); if (strcmp(fstype, "ufs") == 0) { - BAM_DPRINTF((D_SET_PRIMARY_UFS, fcn)); + BAM_DPRINTF(("%s: setting UFS primary sign\n", fcn)); ret = set_primary_ufs(osroot, sign); } else if (strcmp(fstype, "zfs") == 0) { - BAM_DPRINTF((D_SET_PRIMARY_ZFS, fcn)); + BAM_DPRINTF(("%s: setting ZFS primary sign\n", fcn)); ret = set_primary_zfs(osdev, sign); } else { - bam_error(GRUBSIGN_NOTSUP, fstype); + bam_error(_("boot signature not supported for fstype: %s\n"), + fstype); ret = -1; } if (ret == 0) { - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); } else { - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); } return (ret); @@ -7289,7 +7513,7 @@ ufs_add_to_sign_list(char *sign) INJECT_ERROR1("ADD_TO_SIGN_LIST_NOT_UFS", sign = "pool_rpool5"); if (strncmp(sign, GRUBSIGN_UFS_PREFIX, strlen(GRUBSIGN_UFS_PREFIX)) != 0) { - bam_error(INVALID_UFS_SIGN, sign); + bam_error(_("invalid UFS boot signature %s\n"), sign); (void) unlink(UFS_SIGNATURE_LIST); return (-1); } @@ -7303,8 +7527,8 @@ ufs_add_to_sign_list(char *sign) error = errno; INJECT_ERROR1("ADD_TO_SIGN_LIST_RENAME", ret = -1); if (ret == -1) { - bam_error(RENAME_FAIL, UFS_SIGNATURE_LIST".tmp", - strerror(error)); + bam_error(_("rename to file failed: %s: %s\n"), + UFS_SIGNATURE_LIST".tmp", strerror(error)); (void) unlink(UFS_SIGNATURE_LIST); return (0); } @@ -7313,7 +7537,8 @@ ufs_add_to_sign_list(char *sign) error = errno; INJECT_ERROR1("ADD_TO_SIGN_LIST_FOPEN", tfp = NULL); if (tfp == NULL) { - bam_error(OPEN_FAIL, UFS_SIGNATURE_LIST".tmp", strerror(error)); + bam_error(_("failed to open file: %s: %s\n"), + UFS_SIGNATURE_LIST".tmp", strerror(error)); (void) unlink(UFS_SIGNATURE_LIST".tmp"); return (0); } @@ -7324,7 +7549,8 @@ ufs_add_to_sign_list(char *sign) error = errno; INJECT_ERROR1("ADD_TO_SIGN_LIST_FPUTS", ret = 0); if (ret != strlen(signline)) { - bam_error(SIGN_LIST_FPUTS_ERR, sign, strerror(error)); + bam_error(_("failed to write signature %s to signature " + "list: %s\n"), sign, strerror(error)); (void) fclose(tfp); (void) unlink(UFS_SIGNATURE_LIST".tmp"); return (0); @@ -7334,8 +7560,8 @@ ufs_add_to_sign_list(char *sign) error = errno; INJECT_ERROR1("ADD_TO_SIGN_LIST_FCLOSE", ret = EOF); if (ret == EOF) { - bam_error(CLOSE_FAIL, UFS_SIGNATURE_LIST".tmp", - strerror(error)); + bam_error(_("failed to close file: %s: %s\n"), + UFS_SIGNATURE_LIST".tmp", strerror(error)); (void) unlink(UFS_SIGNATURE_LIST".tmp"); return (0); } @@ -7348,7 +7574,7 @@ ufs_add_to_sign_list(char *sign) ret = exec_cmd(cmd, NULL); INJECT_ERROR1("ADD_TO_SIGN_LIST_SORT", ret = 1); if (ret != 0) { - bam_error(GRUBSIGN_SORT_FAILED); + bam_error(_("error sorting GRUB UFS boot signatures\n")); (void) unlink(UFS_SIGNATURE_LIST".sorted"); (void) unlink(UFS_SIGNATURE_LIST".tmp"); return (0); @@ -7360,12 +7586,13 @@ ufs_add_to_sign_list(char *sign) error = errno; INJECT_ERROR1("ADD_TO_SIGN_LIST_RENAME2", ret = -1); if (ret == -1) { - bam_error(RENAME_FAIL, UFS_SIGNATURE_LIST, strerror(error)); + bam_error(_("rename to file failed: %s: %s\n"), + UFS_SIGNATURE_LIST, strerror(error)); (void) unlink(UFS_SIGNATURE_LIST".sorted"); return (0); } - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (0); } @@ -7376,13 +7603,15 @@ set_signature(char *osroot, char *osdev, char *sign, char *fstype) int ret; const char *fcn = "set_signature()"; - BAM_DPRINTF((D_FUNC_ENTRY4, fcn, osroot, osdev, sign, fstype)); + BAM_DPRINTF(("%s: entered. args: %s %s %s %s\n", fcn, + osroot, osdev, sign, fstype)); ret = set_backup(osroot, osdev, sign, fstype); INJECT_ERROR1("SET_SIGNATURE_BACKUP", ret = -1); if (ret == -1) { - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); - bam_error(SET_BACKUP_FAILED, sign, osroot, osdev); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); + bam_error(_("failed to set backup sign (%s) for %s: %s\n"), + sign, osroot, osdev); return (-1); } @@ -7390,10 +7619,11 @@ set_signature(char *osroot, char *osdev, char *sign, char *fstype) INJECT_ERROR1("SET_SIGNATURE_PRIMARY", ret = -1); if (ret == 0) { - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); } else { - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); - bam_error(SET_PRIMARY_FAILED, sign, osroot, osdev); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); + bam_error(_("failed to set primary sign (%s) for %s: %s\n"), + sign, osroot, osdev); } return (ret); @@ -7410,22 +7640,24 @@ get_grubsign(char *osroot, char *osdev) int ret; const char *fcn = "get_grubsign()"; - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, osroot, osdev)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, osroot, osdev)); fstype = get_fstype(osroot); INJECT_ERROR1("GET_GRUBSIGN_FSTYPE", fstype = NULL); if (fstype == NULL) { - bam_error(GET_FSTYPE_FAILED, osroot); + bam_error(_("failed to get fstype for %s\n"), osroot); return (NULL); } sign = find_existing_sign(osroot, osdev, fstype); INJECT_ERROR1("FIND_EXISTING_SIGN", sign = NULL); if (sign == NULL) { - BAM_DPRINTF((D_GET_GRUBSIGN_NO_EXISTING, fcn, osroot, osdev)); + BAM_DPRINTF(("%s: no existing grubsign for %s: %s\n", + fcn, osroot, osdev)); sign = create_new_sign(osdev, fstype); INJECT_ERROR1("CREATE_NEW_SIGN", sign = NULL); if (sign == NULL) { - bam_error(GRUBSIGN_CREATE_FAIL, osdev); + bam_error(_("failed to create GRUB boot signature for " + "device: %s\n"), osdev); free(fstype); return (NULL); } @@ -7434,7 +7666,8 @@ get_grubsign(char *osroot, char *osdev) ret = set_signature(osroot, osdev, sign, fstype); INJECT_ERROR1("SET_SIGNATURE_FAIL", ret = -1); if (ret == -1) { - bam_error(GRUBSIGN_WRITE_FAIL, osdev); + bam_error(_("failed to write GRUB boot signature for " + "device: %s\n"), osdev); free(sign); free(fstype); (void) unlink(UFS_SIGNATURE_LIST); @@ -7444,12 +7677,14 @@ get_grubsign(char *osroot, char *osdev) free(fstype); if (bam_verbose) - bam_print(GRUBSIGN_FOUND_OR_CREATED, sign, osdev); + bam_print(_("found or created GRUB signature %s for %s\n"), + sign, osdev); fdiskpart = get_partition(osdev); INJECT_ERROR1("GET_GRUBSIGN_FDISK", fdiskpart = PARTNO_NOTFOUND); if (fdiskpart == PARTNO_NOTFOUND) { - bam_error(FDISKPART_FAIL, osdev); + bam_error(_("failed to determine fdisk partition: %s\n"), + osdev); free(sign); return (NULL); } @@ -7471,7 +7706,7 @@ get_grubsign(char *osroot, char *osdev) free(sign); - BAM_DPRINTF((D_GET_GRUBSIGN_SUCCESS, fcn, grubsign)); + BAM_DPRINTF(("%s: successfully created grubsign %s\n", fcn, grubsign)); return (grubsign); } @@ -7490,7 +7725,8 @@ get_title(char *rootdir) fp = fopen(release, "r"); if (fp == NULL) { - bam_error(OPEN_FAIL, release, strerror(errno)); + bam_error(_("failed to open file: %s: %s\n"), release, + strerror(errno)); cp = NULL; goto out; } @@ -7507,7 +7743,7 @@ get_title(char *rootdir) out: cp = cp ? cp : "Oracle Solaris"; - BAM_DPRINTF((D_GET_TITLE, fcn, cp)); + BAM_DPRINTF(("%s: got title: %s\n", fcn, cp)); return (cp); } @@ -7524,7 +7760,7 @@ get_special(char *mountp) INJECT_ERROR1("GET_SPECIAL_MNTPT", mountp = NULL); if (mountp == NULL) { - bam_error(GET_SPECIAL_NULL_MNTPT); + bam_error(_("cannot get special file: NULL mount-point\n")); return (NULL); } @@ -7532,7 +7768,8 @@ get_special(char *mountp) error = errno; INJECT_ERROR1("GET_SPECIAL_MNTTAB_OPEN", mntfp = NULL); if (mntfp == NULL) { - bam_error(OPEN_FAIL, MNTTAB, strerror(error)); + bam_error(_("failed to open file: %s: %s\n"), MNTTAB, + strerror(error)); return (NULL); } @@ -7545,12 +7782,13 @@ get_special(char *mountp) INJECT_ERROR1("GET_SPECIAL_MNTTAB_SEARCH", ret = 1); if (ret != 0) { (void) fclose(mntfp); - BAM_DPRINTF((D_GET_SPECIAL_NOT_IN_MNTTAB, fcn, mountp)); + BAM_DPRINTF(("%s: Cannot get special file: mount-point %s " + "not in mnttab\n", fcn, mountp)); return (NULL); } (void) fclose(mntfp); - BAM_DPRINTF((D_GET_SPECIAL, fcn, mp.mnt_special)); + BAM_DPRINTF(("%s: returning special: %s\n", fcn, mp.mnt_special)); return (s_strdup(mp.mnt_special)); } @@ -7564,14 +7802,14 @@ free_physarray(char **physarray, int n) assert(physarray); assert(n); - BAM_DPRINTF((D_FUNC_ENTRY_N1, fcn, n)); + BAM_DPRINTF(("%s: entering args: %d\n", fcn, n)); for (i = 0; i < n; i++) { free(physarray[i]); } free(physarray); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); } static int @@ -7591,11 +7829,12 @@ zfs_get_physical(char *special, char ***physarray, int *n) assert(special); - BAM_DPRINTF((D_FUNC_ENTRY1, fcn, special)); + BAM_DPRINTF(("%s: entered. arg: %s\n", fcn, special)); INJECT_ERROR1("INVALID_ZFS_SPECIAL", special = "/foo"); if (special[0] == '/') { - bam_error(INVALID_ZFS_SPECIAL, special); + bam_error(_("invalid device for ZFS filesystem: %s\n"), + special); return (-1); } @@ -7604,7 +7843,8 @@ zfs_get_physical(char *special, char ***physarray, int *n) pool = strtok(sdup, "/"); INJECT_ERROR1("ZFS_GET_PHYS_POOL", pool = NULL); if (pool == NULL) { - bam_error(CANT_FIND_POOL_FROM_SPECIAL, special); + bam_error(_("cannot derive ZFS pool from special: %s\n"), + special); return (-1); } @@ -7613,19 +7853,20 @@ zfs_get_physical(char *special, char ***physarray, int *n) ret = exec_cmd(cmd, &flist); INJECT_ERROR1("ZFS_GET_PHYS_STATUS", ret = 1); if (ret != 0) { - bam_error(ZFS_GET_POOL_STATUS, pool); + bam_error(_("cannot get zpool status for pool: %s\n"), pool); return (-1); } INJECT_ERROR1("ZFS_GET_PHYS_STATUS_OUT", flist.head = NULL); if (flist.head == NULL) { - bam_error(BAD_ZPOOL_STATUS, pool); + bam_error(_("bad zpool status for pool=%s\n"), pool); filelist_free(&flist); return (-1); } for (lp = flist.head; lp; lp = lp->next) { - BAM_DPRINTF((D_STRTOK_ZPOOL_STATUS, fcn, lp->line)); + BAM_DPRINTF(("%s: strtok() zpool status line=%s\n", + fcn, lp->line)); comp1 = strtok(lp->line, " \t"); if (comp1 == NULL) { free(lp->line); @@ -7641,13 +7882,14 @@ zfs_get_physical(char *special, char ***physarray, int *n) if (lp->line == NULL) continue; if (strcmp(lp->line, pool) == 0) { - BAM_DPRINTF((D_FOUND_POOL_IN_ZPOOL_STATUS, fcn, pool)); + BAM_DPRINTF(("%s: found pool name: %s in zpool " + "status\n", fcn, pool)); break; } } if (lp == NULL) { - bam_error(NO_POOL_IN_ZPOOL_STATUS, pool); + bam_error(_("no pool name %s in zpool status\n"), pool); filelist_free(&flist); return (-1); } @@ -7661,11 +7903,13 @@ zfs_get_physical(char *special, char ***physarray, int *n) if (lp->line[0] == '\0' || strcmp(lp->line, "errors:") == 0) break; i++; - BAM_DPRINTF((D_COUNTING_ZFS_PHYS, fcn, i)); + BAM_DPRINTF(("%s: counting phys slices in zpool status: %d\n", + fcn, i)); } if (i == 0) { - bam_error(NO_PHYS_IN_ZPOOL_STATUS, pool); + bam_error(_("no physical device in zpool status for pool=%s\n"), + pool); filelist_free(&flist); return (-1); } @@ -7687,7 +7931,8 @@ zfs_get_physical(char *special, char ***physarray, int *n) } else { (void) strlcpy(dsk, lp->line, sizeof (dsk)); } - BAM_DPRINTF((D_ADDING_ZFS_PHYS, fcn, dsk, pool)); + BAM_DPRINTF(("%s: adding phys slice=%s from pool %s status\n", + fcn, dsk, pool)); (*physarray)[i++] = s_strdup(dsk); } @@ -7695,7 +7940,7 @@ zfs_get_physical(char *special, char ***physarray, int *n) filelist_free(&flist); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (0); } @@ -7715,23 +7960,23 @@ is_svc_online(char *svc) char *state; const char *fcn = "is_svc_online()"; - BAM_DPRINTF((D_FUNC_ENTRY1, fcn, svc)); + BAM_DPRINTF(("%s: entered. arg: %s\n", fcn, svc)); state = smf_get_state(svc); INJECT_ERROR2("GET_SVC_STATE", free(state), state = NULL); if (state == NULL) { - bam_error(GET_SVC_STATE_ERR, svc); + bam_error(_("failed to determine state of service: %s\n"), svc); return (-1); } - BAM_DPRINTF((D_GOT_SVC_STATUS, fcn, svc)); + BAM_DPRINTF(("%s: got status for service: %s\n", fcn, svc)); if (strcmp(state, SCF_STATE_STRING_ONLINE) == 0) { - BAM_DPRINTF((D_SVC_ONLINE, fcn, svc)); + BAM_DPRINTF(("%s: service is online: %s\n", fcn, svc)); free(state); return (1); } - BAM_DPRINTF((D_SVC_NOT_ONLINE, fcn, state, svc)); + BAM_DPRINTF(("%s: service is *NOT* online(%s): %s\n", fcn, state, svc)); free(state); @@ -7747,10 +7992,11 @@ enable_svc(char *svc) ret = is_svc_online(svc); if (ret == -1) { - bam_error(SVC_IS_ONLINE_FAILED, svc); + bam_error(_("failed to determine if service is online: %s\n"), + svc); return (-1); } else if (ret == 1) { - BAM_DPRINTF((D_SVC_ALREADY_ONLINE, fcn, svc)); + BAM_DPRINTF(("%s: service is already online: %s\n", fcn, svc)); return (0); } @@ -7758,11 +8004,11 @@ enable_svc(char *svc) ret = smf_enable_instance(svc, 0); INJECT_ERROR1("ENABLE_SVC_FAILED", ret = -1); if (ret != 0) { - bam_error(ENABLE_SVC_FAILED, svc); + bam_error(_("failed to online service: %s\n"), svc); return (-1); } - BAM_DPRINTF((D_SVC_ONLINE_INITIATED, fcn, svc)); + BAM_DPRINTF(("%s: initiated online of service: %s\n", fcn, svc)); sleeptime = 0; do { @@ -7771,16 +8017,18 @@ enable_svc(char *svc) INJECT_ERROR1("SVC_ONLINE_FAILURE", ret = -1); INJECT_ERROR1("SVC_ONLINE_NOTYET", ret = 0); if (ret == -1) { - bam_error(ERR_SVC_GET_ONLINE, svc); + bam_error(_("failed to get online status for " + "service: %s\n"), svc); return (-1); } else if (ret == 1) { - BAM_DPRINTF((D_SVC_NOW_ONLINE, fcn, svc)); + BAM_DPRINTF(("%s: service is NOW online: %s\n", + fcn, svc)); return (1); } (void) sleep(1); } while (++sleeptime < 60); - bam_error(TIMEOUT_ENABLE_SVC, svc); + bam_error(_("timed out waiting for service to online: %s\n"), svc); return (-1); } @@ -7805,10 +8053,11 @@ ufs_get_physical(char *special, char ***physarray, int *n) assert(special); - BAM_DPRINTF((D_FUNC_ENTRY1, fcn, special)); + BAM_DPRINTF(("%s: entered. arg: %s\n", fcn, special)); if (strncmp(special, "/dev/md/", strlen("/dev/md/")) != 0) { - bam_error(UFS_GET_PHYS_NOT_SVM, special); + bam_error(_("not a SVM metadevice: %s. Cannot derive physical " + "device\n"), special); return (-1); } @@ -7818,15 +8067,18 @@ ufs_get_physical(char *special, char ***physarray, int *n) strlen("/dev/md/rdsk/")) == 0) { shortname = special + strlen("/dev/md/rdsk"); } else { - bam_error(UFS_GET_PHYS_INVALID_SVM, special); + bam_error(_("invalid SVM metadevice name: %s. Cannot derive " + "physical device\n"), special); return (-1); } - BAM_DPRINTF((D_UFS_SVM_SHORT, fcn, special, shortname)); + BAM_DPRINTF(("%s: short SVM name for special=%s is %s\n", + fcn, special, shortname)); svc = "network/rpc/meta:default"; if (enable_svc(svc) == -1) { - bam_error(UFS_SVM_METASTAT_SVC_ERR, svc); + bam_error(_("failed to start service %s for metastat " + "command\n"), svc); } (void) snprintf(cmd, sizeof (cmd), "/sbin/metastat -p %s", shortname); @@ -7834,13 +8086,15 @@ ufs_get_physical(char *special, char ***physarray, int *n) ret = exec_cmd(cmd, &flist); INJECT_ERROR1("UFS_SVM_METASTAT", ret = 1); if (ret != 0) { - bam_error(UFS_SVM_METASTAT_ERR, shortname); + bam_error(_("metastat command failed on SVM metadevice: %s\n"), + shortname); return (-1); } INJECT_ERROR1("UFS_SVM_METASTAT_OUT", flist.head = NULL); if (flist.head == NULL) { - bam_error(BAD_UFS_SVM_METASTAT, shortname); + bam_error(_("bad output from metastat command on SVM " + "metadevice: %s\n"), shortname); filelist_free(&flist); return (-1); } @@ -7852,7 +8106,8 @@ ufs_get_physical(char *special, char ***physarray, int *n) meta = strtok(flist.head->line, " \t"); type = strtok(NULL, " \t"); if (meta == NULL || type == NULL) { - bam_error(ERROR_PARSE_UFS_SVM_METASTAT, shortname); + bam_error(_("error parsing metastat output for SVM " + "metadevice: %s\n"), shortname); filelist_free(&flist); return (-1); } @@ -7860,11 +8115,13 @@ ufs_get_physical(char *special, char ***physarray, int *n) comp1 = strtok(NULL, " \t"); comp2 = strtok(NULL, " \t"); if (comp1 == NULL || comp2 != NULL) { - bam_error(INVALID_UFS_SVM_METASTAT, shortname); + bam_error(_("invalid fields in metastat output for " + "SVM metadevice: %s\n"), shortname); filelist_free(&flist); return (-1); } - BAM_DPRINTF((D_UFS_SVM_ONE_COMP, fcn, comp1, shortname)); + BAM_DPRINTF(("%s: single component %s for metadevice %s\n", + fcn, comp1, shortname)); *physarray = s_calloc(1, sizeof (char *)); (*physarray)[0] = s_strdup(comp1); *n = 1; @@ -7879,7 +8136,8 @@ ufs_get_physical(char *special, char ***physarray, int *n) for (i = 0, lp = flist.head->next; lp; lp = lp->next) { if (strstr(lp->line, "/dev/dsk/") == NULL && strstr(lp->line, "/dev/rdsk/") == NULL) { - bam_error(CANNOT_PARSE_UFS_SVM_METASTAT, shortname); + bam_error(_("cannot parse output of metastat command " + "for metadevice: %s\n"), shortname); filelist_free(&flist); return (-1); } @@ -7898,7 +8156,8 @@ ufs_get_physical(char *special, char ***physarray, int *n) if (comp3 == NULL || comp4 == NULL || (strncmp(comp4, "/dev/dsk/", strlen("/dev/dsk/")) != 0 && strncmp(comp4, "/dev/rdsk/", strlen("/dev/rdsk/")) != 0)) { - bam_error(CANNOT_PARSE_UFS_SVM_SUBMIRROR, shortname); + bam_error(_("cannot parse submirror line in metastat " + "output for metadevice: %s\n"), shortname); filelist_free(&flist); free_physarray(*physarray, *n); return (-1); @@ -7911,7 +8170,7 @@ ufs_get_physical(char *special, char ***physarray, int *n) filelist_free(&flist); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (0); } @@ -7929,21 +8188,23 @@ get_physical(char *menu_root, char ***physarray, int *n) *physarray = NULL; *n = 0; - BAM_DPRINTF((D_FUNC_ENTRY1, fcn, menu_root)); + BAM_DPRINTF(("%s: entered. arg: %s\n", fcn, menu_root)); /* First get the device special file from /etc/mnttab */ special = get_special(menu_root); INJECT_ERROR1("GET_PHYSICAL_SPECIAL", special = NULL); if (special == NULL) { - bam_error(GET_SPECIAL_NULL, menu_root); + bam_error(_("cannot get special file for mount-point: %s\n"), + menu_root); return (-1); } /* If already a physical device nothing to do */ if (strncmp(special, "/dev/dsk/", strlen("/dev/dsk/")) == 0 || strncmp(special, "/dev/rdsk/", strlen("/dev/rdsk/")) == 0) { - BAM_DPRINTF((D_GET_PHYSICAL_ALREADY, fcn, menu_root, special)); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: got physical device already directly for " + "menu_root=%s special=%s\n", fcn, menu_root, special)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); *physarray = s_calloc(1, sizeof (char *)); (*physarray)[0] = special; *n = 1; @@ -7955,7 +8216,8 @@ get_physical(char *menu_root, char ***physarray, int *n) } else if (is_ufs(menu_root)) { ret = ufs_get_physical(special, physarray, n); } else { - bam_error(GET_PHYSICAL_NOTSUP_FSTYPE, menu_root, special); + bam_error(_("cannot derive physical device for %s (%s), " + "unsupported filesystem\n"), menu_root, special); ret = -1; } @@ -7963,12 +8225,13 @@ get_physical(char *menu_root, char ***physarray, int *n) INJECT_ERROR1("GET_PHYSICAL_RET", ret = -1); if (ret == -1) { - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); } else { int i; assert (*n > 0); for (i = 0; i < *n; i++) { - BAM_DPRINTF((D_GET_PHYSICAL_RET, fcn, (*physarray)[i])); + BAM_DPRINTF(("%s: returning physical=%s\n", + fcn, (*physarray)[i])); } } @@ -7986,7 +8249,7 @@ is_bootdisk(char *osroot, char *physical) assert(osroot); assert(physical); - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, osroot, physical)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, osroot, physical)); bootp = strstr(physical, "p0:boot"); if (bootp) @@ -8004,13 +8267,14 @@ is_bootdisk(char *osroot, char *physical) INJECT_ERROR1("IS_BOOTDISK_GRUBROOT", grubroot = NULL); if (grubroot == NULL) { if (bam_verbose) - bam_error(NO_GRUBROOT_FOR_DISK, physical); + bam_error(_("cannot determine BIOS disk ID 'hd?' for " + "disk: %s\n"), physical); return (0); } ret = grubroot[3] == '0'; free(grubroot); - BAM_DPRINTF((D_RETURN_RET, fcn, ret)); + BAM_DPRINTF(("%s: returning ret = %d\n", fcn, ret)); return (ret); } @@ -8029,12 +8293,13 @@ menu_on_bootdisk(char *osroot, char *menu_root) int on_bootdisk; const char *fcn = "menu_on_bootdisk()"; - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, osroot, menu_root)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, osroot, menu_root)); ret = get_physical(menu_root, &physarray, &n); INJECT_ERROR1("MENU_ON_BOOTDISK_PHYSICAL", ret = -1); if (ret != 0) { - bam_error(GET_PHYSICAL_MENU_NULL, menu_root); + bam_error(_("cannot get physical device special file for menu " + "root: %s\n"), menu_root); return (0); } @@ -8048,10 +8313,12 @@ menu_on_bootdisk(char *osroot, char *menu_root) strncmp(physarray[i], "/dev/rdsk/", strlen("/dev/rdsk/")) == 0); - BAM_DPRINTF((D_CHECK_ON_BOOTDISK, fcn, physarray[i])); + BAM_DPRINTF(("%s: checking if phys-device=%s is on bootdisk\n", + fcn, physarray[i])); if (is_bootdisk(osroot, physarray[i])) { on_bootdisk = 1; - BAM_DPRINTF((D_IS_ON_BOOTDISK, fcn, physarray[i])); + BAM_DPRINTF(("%s: phys-device=%s *IS* on bootdisk\n", + fcn, physarray[i])); } } @@ -8060,9 +8327,9 @@ menu_on_bootdisk(char *osroot, char *menu_root) INJECT_ERROR1("ON_BOOTDISK_YES", on_bootdisk = 1); INJECT_ERROR1("ON_BOOTDISK_NO", on_bootdisk = 0); if (on_bootdisk) { - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); } else { - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); } return (on_bootdisk); @@ -8080,22 +8347,22 @@ bam_add_line(menu_t *mp, entry_t *entry, line_t *prev, line_t *lp) lp->next = prev->next; if (prev->next) { - BAM_DPRINTF((D_ADD_LINE_PREV_NEXT, fcn)); + BAM_DPRINTF(("%s: previous next exists\n", fcn)); prev->next->prev = lp; } else { - BAM_DPRINTF((D_ADD_LINE_NOT_PREV_NEXT, fcn)); + BAM_DPRINTF(("%s: previous next does not exist\n", fcn)); } prev->next = lp; lp->prev = prev; if (entry->end == prev) { - BAM_DPRINTF((D_ADD_LINE_LAST_LINE_IN_ENTRY, fcn)); + BAM_DPRINTF(("%s: last line in entry\n", fcn)); entry->end = lp; } if (mp->end == prev) { assert(lp->next == NULL); mp->end = lp; - BAM_DPRINTF((D_ADD_LINE_LAST_LINE_IN_MENU, fcn)); + BAM_DPRINTF(("%s: last line in menu\n", fcn)); } } @@ -8142,10 +8409,12 @@ find_boot_entry( if (title) { if (lp->flags == BAM_TITLE && lp->arg && strcmp(lp->arg, title) == 0) { - BAM_DPRINTF((D_MATCHED_TITLE, fcn, title)); + BAM_DPRINTF(("%s: matched title: %s\n", + fcn, title)); break; } - BAM_DPRINTF((D_NOMATCH_TITLE, fcn, title, lp->arg)); + BAM_DPRINTF(("%s: no match title: %s, %s\n", + fcn, title, lp->arg)); continue; /* check title only */ } @@ -8157,33 +8426,34 @@ find_boot_entry( INJECT_ERROR1("FIND_BOOT_ENTRY_NULL_FINDROOT", findroot = NULL); if (findroot == NULL) { - BAM_DPRINTF((D_NOMATCH_FINDROOT_NULL, - fcn, lp->arg)); + BAM_DPRINTF(("%s: no match line has findroot, " + "we don't: %s\n", fcn, lp->arg)); continue; } /* findroot command found, try match */ if (strcmp(lp->arg, findroot) != 0) { - BAM_DPRINTF((D_NOMATCH_FINDROOT, + BAM_DPRINTF(("%s: no match findroot: %s, %s\n", fcn, findroot, lp->arg)); continue; } - BAM_DPRINTF((D_MATCHED_FINDROOT, fcn, findroot)); + BAM_DPRINTF(("%s: matched findroot: %s\n", + fcn, findroot)); lp = lp->next; /* advance to kernel line */ } else if (lp->cmd != NULL && strcmp(lp->cmd, menu_cmds[ROOT_CMD]) == 0) { INJECT_ERROR1("FIND_BOOT_ENTRY_NULL_ROOT", root = NULL); if (root == NULL) { - BAM_DPRINTF((D_NOMATCH_ROOT_NULL, - fcn, lp->arg)); + BAM_DPRINTF(("%s: no match, line has root, we " + "don't: %s\n", fcn, lp->arg)); continue; } /* root cmd found, try match */ if (strcmp(lp->arg, root) != 0) { - BAM_DPRINTF((D_NOMATCH_ROOT, + BAM_DPRINTF(("%s: no match root: %s, %s\n", fcn, root, lp->arg)); continue; } - BAM_DPRINTF((D_MATCHED_ROOT, fcn, root)); + BAM_DPRINTF(("%s: matched root: %s\n", fcn, root)); lp = lp->next; /* advance to kernel line */ } else { INJECT_ERROR1("FIND_BOOT_ENTRY_ROOT_OPT_NO", @@ -8192,10 +8462,10 @@ find_boot_entry( root_opt = 1); /* no root command, see if root is optional */ if (root_opt == 0) { - BAM_DPRINTF((D_NO_ROOT_OPT, fcn)); + BAM_DPRINTF(("%s: root NOT optional\n", fcn)); continue; } - BAM_DPRINTF((D_ROOT_OPT, fcn)); + BAM_DPRINTF(("%s: root IS optional\n", fcn)); } if (lp == NULL || lp->next == NULL) { @@ -8212,7 +8482,8 @@ find_boot_entry( ent->flags |= BAM_ENTRY_UPGFSKERNEL; } - BAM_DPRINTF((D_KERNEL_MATCH, fcn, kernel, lp->arg)); + BAM_DPRINTF(("%s: kernel match: %s, %s\n", fcn, + kernel, lp->arg)); /* * Check for matching module entry (failsafe or normal). @@ -8225,7 +8496,8 @@ find_boot_entry( (((lp = lp->next) != NULL) && check_cmd(lp->cmd, MODULE_CMD, lp->arg, module))) { /* match found */ - BAM_DPRINTF((D_MODULE_MATCH, fcn, module, lp->arg)); + BAM_DPRINTF(("%s: module match: %s, %s\n", fcn, + module, lp->arg)); break; } @@ -8243,9 +8515,9 @@ find_boot_entry( } if (ent) { - BAM_DPRINTF((D_RETURN_RET, fcn, i)); + BAM_DPRINTF(("%s: returning ret = %d\n", fcn, i)); } else { - BAM_DPRINTF((D_RETURN_RET, fcn, BAM_ERROR)); + BAM_DPRINTF(("%s: returning ret = %d\n", fcn, BAM_ERROR)); } return (ent); } @@ -8274,15 +8546,18 @@ update_boot_entry(menu_t *mp, char *title, char *findroot, char *root, ent = find_boot_entry(mp, NULL, "multiboot", NULL, root, MULTIBOOT_ARCHIVE, root_opt, &i); if (ent != NULL) { - BAM_DPRINTF((D_UPGRADE_FROM_MULTIBOOT, fcn, root)); + BAM_DPRINTF(("%s: upgrading entry from dboot to " + "multiboot: root = %s\n", fcn, root)); change_kernel = 1; } } else if (ent) { - BAM_DPRINTF((D_FOUND_FINDROOT, fcn, findroot)); + BAM_DPRINTF(("%s: found entry with matching findroot: %s\n", + fcn, findroot)); } if (ent == NULL) { - BAM_DPRINTF((D_ENTRY_NOT_FOUND_CREATING, fcn, findroot)); + BAM_DPRINTF(("%s: boot entry not found in menu. Creating " + "new entry, findroot = %s\n", fcn, findroot)); return (add_boot_entry(mp, title, findroot, kernel, mod_kernel, module, NULL)); } @@ -8296,7 +8571,7 @@ update_boot_entry(menu_t *mp, char *title, char *findroot, char *root, free(lp->line); lp->arg = s_strdup(title); lp->line = s_strdup(linebuf); - BAM_DPRINTF((D_CHANGING_TITLE, fcn, title)); + BAM_DPRINTF(("%s: changing title to: %s\n", fcn, title)); tlp = lp; /* title line */ lp = lp->next; /* root line */ @@ -8321,7 +8596,7 @@ update_boot_entry(menu_t *mp, char *title, char *findroot, char *root, (void) snprintf(linebuf, sizeof (linebuf), "%s%s%s", menu_cmds[FINDROOT_CMD], menu_cmds[SEP_CMD], findroot); lp->line = s_strdup(linebuf); - BAM_DPRINTF((D_ADDING_FINDROOT_LINE, fcn, findroot)); + BAM_DPRINTF(("%s: adding findroot line: %s\n", fcn, findroot)); /* kernel line */ lp = lp->next; @@ -8348,7 +8623,8 @@ update_boot_entry(menu_t *mp, char *title, char *findroot, char *root, lp->arg = s_strdup(strstr(linebuf, "/")); lp->line = s_strdup(linebuf); ent->flags &= ~BAM_ENTRY_UPGFSKERNEL; - BAM_DPRINTF((D_ADDING_KERNEL_DOLLAR, fcn, lp->prev->cmd)); + BAM_DPRINTF(("%s: adding new kernel$ line: %s\n", + fcn, lp->prev->cmd)); } if (change_kernel) { @@ -8367,7 +8643,8 @@ update_boot_entry(menu_t *mp, char *title, char *findroot, char *root, lp->arg = s_strdup(kernel); lp->line = s_strdup(linebuf); lp = lp->next; - BAM_DPRINTF((D_ADDING_KERNEL_DOLLAR, fcn, kernel)); + BAM_DPRINTF(("%s: adding new kernel$ line: %s\n", + fcn, kernel)); } if (lp->cmd != NULL && strcmp(lp->cmd, menu_cmds[MODULE_CMD]) == 0) { @@ -8381,7 +8658,8 @@ update_boot_entry(menu_t *mp, char *title, char *findroot, char *root, lp->arg = s_strdup(module); lp->line = s_strdup(linebuf); lp = lp->next; - BAM_DPRINTF((D_ADDING_MODULE_DOLLAR, fcn, module)); + BAM_DPRINTF(("%s: adding new module$ line: %s\n", + fcn, module)); } } @@ -8402,11 +8680,12 @@ update_boot_entry(menu_t *mp, char *title, char *findroot, char *root, lp->line = s_strdup(linebuf); lp = lp->next; ent->flags &= ~BAM_ENTRY_UPGFSMODULE; - BAM_DPRINTF((D_ADDING_MODULE_DOLLAR, fcn, module)); + BAM_DPRINTF(("%s: adding new module$ line: %s\n", + fcn, module)); } } - BAM_DPRINTF((D_RETURN_RET, fcn, i)); + BAM_DPRINTF(("%s: returning ret = %d\n", fcn, i)); return (i); } @@ -8421,7 +8700,7 @@ root_optional(char *osroot, char *menu_root) int ret2; const char *fcn = "root_optional()"; - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, osroot, menu_root)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, osroot, menu_root)); /* * For all filesystems except ZFS, a straight compare of osroot @@ -8433,7 +8712,8 @@ root_optional(char *osroot, char *menu_root) ret2 = is_zfs(menu_root); INJECT_ERROR1("ROOT_OPT_NOT_ZFS", ret1 = 0); if (!ret1 || !ret2) { - BAM_DPRINTF((D_ROOT_OPT_NOT_ZFS, fcn, osroot, menu_root)); + BAM_DPRINTF(("%s: one or more non-ZFS filesystems (%s, %s)\n", + fcn, osroot, menu_root)); root_opt = (strcmp(osroot, menu_root) == 0); goto out; } @@ -8441,24 +8721,28 @@ root_optional(char *osroot, char *menu_root) ospecial = get_special(osroot); INJECT_ERROR1("ROOT_OPTIONAL_OSPECIAL", ospecial = NULL); if (ospecial == NULL) { - bam_error(GET_OSROOT_SPECIAL_ERR, osroot); + bam_error(_("failed to get special file for osroot: %s\n"), + osroot); return (0); } - BAM_DPRINTF((D_ROOT_OPTIONAL_OSPECIAL, fcn, ospecial, osroot)); + BAM_DPRINTF(("%s: ospecial=%s for osroot=%s\n", fcn, ospecial, osroot)); mspecial = get_special(menu_root); INJECT_ERROR1("ROOT_OPTIONAL_MSPECIAL", mspecial = NULL); if (mspecial == NULL) { - bam_error(GET_MENU_ROOT_SPECIAL_ERR, menu_root); + bam_error(_("failed to get special file for menu_root: %s\n"), + menu_root); free(ospecial); return (0); } - BAM_DPRINTF((D_ROOT_OPTIONAL_MSPECIAL, fcn, mspecial, menu_root)); + BAM_DPRINTF(("%s: mspecial=%s for menu_root=%s\n", + fcn, mspecial, menu_root)); slash = strchr(ospecial, '/'); if (slash) *slash = '\0'; - BAM_DPRINTF((D_ROOT_OPTIONAL_FIXED_OSPECIAL, fcn, ospecial, osroot)); + BAM_DPRINTF(("%s: FIXED ospecial=%s for osroot=%s\n", + fcn, ospecial, osroot)); root_opt = (strcmp(ospecial, mspecial) == 0); @@ -8469,9 +8753,9 @@ out: INJECT_ERROR1("ROOT_OPTIONAL_NO", root_opt = 0); INJECT_ERROR1("ROOT_OPTIONAL_YES", root_opt = 1); if (root_opt) { - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); } else { - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); } return (root_opt); @@ -8498,7 +8782,8 @@ update_entry(menu_t *mp, char *menu_root, char *osdev) assert(osdev); assert(bam_root); - BAM_DPRINTF((D_FUNC_ENTRY3, fcn, menu_root, osdev, bam_root)); + BAM_DPRINTF(("%s: entered. args: %s %s %s\n", fcn, menu_root, osdev, + bam_root)); (void) strlcpy(osroot, bam_root, sizeof (osroot)); @@ -8508,7 +8793,8 @@ update_entry(menu_t *mp, char *menu_root, char *osdev) grubsign = get_grubsign(osroot, osdev); INJECT_ERROR1("GET_GRUBSIGN_FAIL", grubsign = NULL); if (grubsign == NULL) { - bam_error(GET_GRUBSIGN_ERROR, osroot, osdev); + bam_error(_("failed to get grubsign for root: %s, device %s\n"), + osroot, osdev); return (BAM_ERROR); } @@ -8520,11 +8806,11 @@ update_entry(menu_t *mp, char *menu_root, char *osdev) grubroot = get_grubroot(osroot, osdev, menu_root); INJECT_ERROR1("GET_GRUBROOT_FAIL", grubroot = NULL); if (grubroot) { - BAM_DPRINTF((D_GET_GRUBROOT_SUCCESS, - fcn, osroot, osdev, menu_root)); + BAM_DPRINTF(("%s: get_grubroot success. osroot=%s, osdev=%s, " + "menu_root=%s\n", fcn, osroot, osdev, menu_root)); } else { - BAM_DPRINTF((D_GET_GRUBROOT_FAILURE, - fcn, osroot, osdev, menu_root)); + BAM_DPRINTF(("%s: get_grubroot failed. osroot=%s, osdev=%s, " + "menu_root=%s\n", fcn, osroot, osdev, menu_root)); } /* add the entry for normal Solaris */ @@ -8535,22 +8821,24 @@ update_entry(menu_t *mp, char *menu_root, char *osdev) (bam_zfs ? DIRECT_BOOT_KERNEL_ZFS : DIRECT_BOOT_KERNEL), NULL, DIRECT_BOOT_ARCHIVE, root_optional(osroot, menu_root)); - BAM_DPRINTF((D_UPDATED_BOOT_ENTRY, fcn, bam_zfs, grubsign)); + BAM_DPRINTF(("%s: updated boot entry bam_zfs=%d, " + "grubsign = %s\n", fcn, bam_zfs, grubsign)); if ((entry != BAM_ERROR) && (bam_is_hv == BAM_HV_PRESENT)) { (void) update_boot_entry(mp, NEW_HV_ENTRY, grubsign, grubroot, XEN_MENU, bam_zfs ? XEN_KERNEL_MODULE_LINE_ZFS : XEN_KERNEL_MODULE_LINE, DIRECT_BOOT_ARCHIVE, root_optional(osroot, menu_root)); - BAM_DPRINTF((D_UPDATED_HV_ENTRY, - fcn, bam_zfs, grubsign)); + BAM_DPRINTF(("%s: updated HV entry bam_zfs=%d, " + "grubsign = %s\n", fcn, bam_zfs, grubsign)); } } else { entry = update_boot_entry(mp, title, grubsign, grubroot, MULTI_BOOT, NULL, MULTIBOOT_ARCHIVE, root_optional(osroot, menu_root)); - BAM_DPRINTF((D_UPDATED_MULTIBOOT_ENTRY, fcn, grubsign)); + BAM_DPRINTF(("%s: updated MULTIBOOT entry grubsign = %s\n", + fcn, grubsign)); } /* @@ -8589,15 +8877,16 @@ update_entry(menu_t *mp, char *menu_root, char *osdev) (void) update_boot_entry(mp, FAILSAFE_TITLE, grubsign, grubroot, failsafe_kernel, NULL, FAILSAFE_ARCHIVE, root_optional(osroot, menu_root)); - BAM_DPRINTF((D_UPDATED_FAILSAFE_ENTRY, fcn, - failsafe_kernel)); + BAM_DPRINTF(("%s: updated FAILSAFE entry " + "failsafe_kernel = %s\n", fcn, failsafe_kernel)); } } free(grubroot); INJECT_ERROR1("UPDATE_ENTRY_ERROR", entry = BAM_ERROR); if (entry == BAM_ERROR) { - bam_error(FAILED_TO_ADD_BOOT_ENTRY, title, grubsign); + bam_error(_("failed to add boot entry with title=%s, grub " + "signature=%s\n"), title, grubsign); free(grubsign); return (BAM_ERROR); } @@ -8607,9 +8896,9 @@ update_entry(menu_t *mp, char *menu_root, char *osdev) ret = set_global(mp, menu_cmds[DEFAULT_CMD], entry); INJECT_ERROR1("SET_DEFAULT_ERROR", ret = BAM_ERROR); if (ret == BAM_ERROR) { - bam_error(SET_DEFAULT_FAILED, entry); + bam_error(_("failed to set GRUB menu default to %d\n"), entry); } - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (BAM_WRITE); } @@ -8635,9 +8924,10 @@ save_default_entry(menu_t *mp, const char *which) entry = s_strtol(lp->arg); (void) snprintf(linebuf, sizeof (linebuf), "#%s%d", which, entry); - BAM_DPRINTF((D_SAVING_DEFAULT_TO, fcn, linebuf)); + BAM_DPRINTF(("%s: saving default to: %s\n", fcn, linebuf)); line_parser(mp, linebuf, &lineNum, &entryNum); - BAM_DPRINTF((D_SAVED_DEFAULT_TO, fcn, lineNum, entryNum)); + BAM_DPRINTF(("%s: saved default to lineNum=%d, entryNum=%d\n", fcn, + lineNum, entryNum)); } static void @@ -8648,17 +8938,17 @@ restore_default_entry(menu_t *mp, const char *which, line_t *lp) const char *fcn = "restore_default_entry()"; if (lp == NULL) { - BAM_DPRINTF((D_RESTORE_DEFAULT_NULL, fcn)); + BAM_DPRINTF(("%s: NULL saved default\n", fcn)); return; /* nothing to restore */ } - BAM_DPRINTF((D_RESTORE_DEFAULT_STR, fcn, which)); + BAM_DPRINTF(("%s: saved default string: %s\n", fcn, which)); str = lp->arg + strlen(which); entry = s_strtol(str); (void) set_global(mp, menu_cmds[DEFAULT_CMD], entry); - BAM_DPRINTF((D_RESTORED_DEFAULT_TO, fcn, entry)); + BAM_DPRINTF(("%s: restored default to entryNum: %d\n", fcn, entry)); /* delete saved old default line */ unlink_line(mp, lp); @@ -8697,45 +8987,49 @@ update_temp(menu_t *mp, char *dummy, char *opt) assert(dummy == NULL); /* opt can be NULL */ - BAM_DPRINTF((D_FUNC_ENTRY1, fcn, opt ? opt : "")); - BAM_DPRINTF((D_BAM_ROOT, fcn, bam_alt_root, bam_root)); + BAM_DPRINTF(("%s: entered. arg: %s\n", fcn, opt ? opt : "")); + BAM_DPRINTF(("%s: bam_alt_root: %d, bam_root: %s\n", fcn, + bam_alt_root, bam_root)); if (bam_alt_root || bam_rootlen != 1 || strcmp(bam_root, "/") != 0 || strcmp(rootbuf, "/") != 0) { - bam_error(ALT_ROOT_INVALID, bam_root); + bam_error(_("an alternate root (%s) cannot be used with this " + "sub-command\n"), bam_root); return (BAM_ERROR); } /* If no option, delete exiting reboot menu entry */ if (opt == NULL) { entry_t *ent; - BAM_DPRINTF((D_OPT_NULL, fcn)); + BAM_DPRINTF(("%s: opt is NULL\n", fcn)); ent = find_boot_entry(mp, REBOOT_TITLE, NULL, NULL, NULL, NULL, 0, &entry); if (ent == NULL) { /* not found is ok */ - BAM_DPRINTF((D_TRANSIENT_NOTFOUND, fcn)); + BAM_DPRINTF(("%s: transient entry not found\n", fcn)); return (BAM_SUCCESS); } (void) delete_boot_entry(mp, entry, DBE_PRINTERR); restore_default_entry(mp, BAM_OLDDEF, mp->olddefault); mp->olddefault = NULL; - BAM_DPRINTF((D_RESTORED_DEFAULT, fcn)); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: restored old default\n", fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (BAM_WRITE); } /* if entry= is specified, set the default entry */ if (strncmp(opt, "entry=", strlen("entry=")) == 0) { int entryNum = s_strtol(opt + strlen("entry=")); - BAM_DPRINTF((D_ENTRY_EQUALS, fcn, opt)); + BAM_DPRINTF(("%s: opt has entry=: %s\n", fcn, opt)); if (selector(mp, opt, &entry, NULL) == BAM_SUCCESS) { /* this is entry=# option */ ret = set_global(mp, menu_cmds[DEFAULT_CMD], entry); - BAM_DPRINTF((D_ENTRY_SET_IS, fcn, entry, ret)); + BAM_DPRINTF(("%s: default set to %d, " + "set_default ret=%d\n", fcn, entry, ret)); return (ret); } else { - bam_error(SET_DEFAULT_FAILED, entryNum); + bam_error(_("failed to set GRUB menu default to %d\n"), + entryNum); return (BAM_ERROR); } } @@ -8747,7 +9041,8 @@ update_temp(menu_t *mp, char *dummy, char *opt) fstype = get_fstype("/"); INJECT_ERROR1("REBOOT_FSTYPE_NULL", fstype = NULL); if (fstype == NULL) { - bam_error(REBOOT_FSTYPE_FAILED); + bam_error(_("failed to determine filesystem type for \"/\". " + "Reboot with \narguments failed.\n")); return (BAM_ERROR); } @@ -8755,7 +9050,8 @@ update_temp(menu_t *mp, char *dummy, char *opt) INJECT_ERROR1("REBOOT_SPECIAL_NULL", osdev = NULL); if (osdev == NULL) { free(fstype); - bam_error(REBOOT_SPECIAL_FAILED); + bam_error(_("failed to find device special file for \"/\". " + "Reboot with \narguments failed.\n")); return (BAM_ERROR); } @@ -8764,7 +9060,8 @@ update_temp(menu_t *mp, char *dummy, char *opt) if (sign == NULL) { free(fstype); free(osdev); - bam_error(REBOOT_SIGN_FAILED); + bam_error(_("failed to find boot signature. Reboot with " + "arguments failed.\n")); return (BAM_ERROR); } @@ -8783,7 +9080,9 @@ update_temp(menu_t *mp, char *dummy, char *opt) INJECT_ERROR1("REBOOT_NOT_DBOOT", bam_direct = BAM_DIRECT_MULTIBOOT); if (bam_direct != BAM_DIRECT_DBOOT) { free(fstype); - bam_error(REBOOT_DIRECT_FAILED); + bam_error(_("the root filesystem is not a dboot Solaris " + "instance. \nThis version of bootadm is not supported " + "on this version of Solaris.\n")); return (BAM_ERROR); } @@ -8794,7 +9093,8 @@ update_temp(menu_t *mp, char *dummy, char *opt) INJECT_ERROR1("REBOOT_GET_KERNEL", ret = BAM_ERROR); if (ret != BAM_SUCCESS) { free(fstype); - bam_error(REBOOT_GET_KERNEL_FAILED); + bam_error(_("reboot with arguments: error querying " + "current boot-file settings\n")); return (BAM_ERROR); } if (kernbuf[0] == '\0') @@ -8810,7 +9110,8 @@ update_temp(menu_t *mp, char *dummy, char *opt) } (void) strlcat(kernbuf, " ", sizeof (kernbuf)); (void) strlcat(kernbuf, opt, sizeof (kernbuf)); - BAM_DPRINTF((D_REBOOT_OPTION, fcn, kernbuf)); + BAM_DPRINTF(("%s: reboot with args, option specified: " + "kern=%s\n", fcn, kernbuf)); } else if (opt[0] == '/') { /* It's a full path, so write it out. */ (void) strlcpy(kernbuf, opt, sizeof (kernbuf)); @@ -8836,7 +9137,8 @@ update_temp(menu_t *mp, char *dummy, char *opt) INJECT_ERROR1("REBOOT_GET_ARGS", ret = BAM_ERROR); if (ret != BAM_SUCCESS) { free(fstype); - bam_error(REBOOT_GET_ARGS_FAILED); + bam_error(_("reboot with arguments: error " + "querying current boot-args settings\n")); return (BAM_ERROR); } @@ -8846,7 +9148,8 @@ update_temp(menu_t *mp, char *dummy, char *opt) sizeof (kernbuf)); } } - BAM_DPRINTF((D_REBOOT_ABSPATH, fcn, kernbuf)); + BAM_DPRINTF(("%s: reboot with args, abspath specified: " + "kern=%s\n", fcn, kernbuf)); } else { /* * It may be a partial path, or it may be a partial @@ -8880,7 +9183,9 @@ update_temp(menu_t *mp, char *dummy, char *opt) ret = BAM_ERROR); if (ret != BAM_SUCCESS) { free(fstype); - bam_error(REBOOT_GET_ARGS_FAILED); + bam_error(_("reboot with arguments: " + "error querying current boot-args " + "settings\n")); return (BAM_ERROR); } @@ -8891,11 +9196,14 @@ update_temp(menu_t *mp, char *dummy, char *opt) args_buf, sizeof (kernbuf)); } } - BAM_DPRINTF((D_REBOOT_RESOLVED_PARTIAL, fcn, kernbuf)); + BAM_DPRINTF(("%s: resolved partial path: %s\n", + fcn, kernbuf)); } else { free(fstype); - bam_error(UNKNOWN_KERNEL, opt); - bam_print_stderr(UNKNOWN_KERNEL_REBOOT); + bam_error(_("unable to expand %s to a full file" + " path.\n"), opt); + bam_print_stderr(_("Rebooting with default kernel " + "and options.\n")); return (BAM_ERROR); } } @@ -8904,7 +9212,8 @@ update_temp(menu_t *mp, char *dummy, char *opt) NULL, NULL, NULL); INJECT_ERROR1("REBOOT_ADD_BOOT_ENTRY", entry = BAM_ERROR); if (entry == BAM_ERROR) { - bam_error(REBOOT_WITH_ARGS_ADD_ENTRY_FAILED); + bam_error(_("Cannot update menu. Cannot reboot with " + "requested arguments\n")); return (BAM_ERROR); } @@ -8912,9 +9221,10 @@ update_temp(menu_t *mp, char *dummy, char *opt) ret = set_global(mp, menu_cmds[DEFAULT_CMD], entry); INJECT_ERROR1("REBOOT_SET_GLOBAL", ret = BAM_ERROR); if (ret == BAM_ERROR) { - bam_error(REBOOT_SET_DEFAULT_FAILED, entry); + bam_error(_("reboot with arguments: setting GRUB menu default " + "to %d failed\n"), entry); } - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (BAM_WRITE); } @@ -8939,7 +9249,7 @@ set_global(menu_t *mp, char *globalcmd, int val) INJECT_ERROR1("SET_GLOBAL_VAL_TOO_BIG", val = 100); if (val < 0 || mp->end == NULL || val > mp->end->entryNum) { (void) snprintf(prefix, sizeof (prefix), "%d", val); - bam_error(INVALID_ENTRY, prefix); + bam_error(_("invalid boot entry number: %s\n"), prefix); return (BAM_ERROR); } } @@ -8953,16 +9263,19 @@ set_global(menu_t *mp, char *globalcmd, int val) INJECT_ERROR1("SET_GLOBAL_NULL_CMD", lp->cmd = NULL); if (lp->cmd == NULL) { - bam_error(NO_CMD, lp->lineNum); + bam_error(_("no command at line %d\n"), lp->lineNum); continue; } if (strcmp(globalcmd, lp->cmd) != 0) continue; - BAM_DPRINTF((D_FOUND_GLOBAL, fcn, globalcmd)); + BAM_DPRINTF(("%s: found matching global command: %s\n", + fcn, globalcmd)); if (found) { - bam_error(DUP_CMD, globalcmd, lp->lineNum, bam_root); + bam_error(_("duplicate command %s at line %d of " + "%sboot/grub/menu.lst\n"), globalcmd, + lp->lineNum, bam_root); } found = lp; } @@ -8985,8 +9298,8 @@ set_global(menu_t *mp, char *globalcmd, int val) lp->line = s_calloc(1, len); (void) snprintf(lp->line, len, "%s%s%d", globalcmd, menu_cmds[SEP_CMD], val); - BAM_DPRINTF((D_SET_GLOBAL_WROTE_NEW, fcn, lp->line)); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: wrote new global line: %s\n", fcn, lp->line)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (BAM_WRITE); } @@ -9008,8 +9321,8 @@ set_global(menu_t *mp, char *globalcmd, int val) (void) snprintf(found->line, len, "%s%s%s%d", prefix, globalcmd, menu_cmds[SEP_CMD], val); - BAM_DPRINTF((D_SET_GLOBAL_REPLACED, fcn, found->line)); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: replaced global line with: %s\n", fcn, found->line)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (BAM_WRITE); /* need a write to menu */ } @@ -9034,14 +9347,14 @@ expand_path(const char *partial_path) (void) snprintf(new_path, new_path_len, "/platform/i86pc/%s", partial_path); if (stat(new_path, &sb) == 0) { - BAM_DPRINTF((D_EXPAND_PATH, fcn, new_path)); + BAM_DPRINTF(("%s: expanded path: %s\n", fcn, new_path)); return (new_path); } if (strcmp(partial_path, "kmdb") == 0) { (void) snprintf(new_path, new_path_len, "%s -k", DIRECT_BOOT_KERNEL); - BAM_DPRINTF((D_EXPAND_PATH, fcn, new_path)); + BAM_DPRINTF(("%s: expanded path: %s\n", fcn, new_path)); return (new_path); } @@ -9063,12 +9376,12 @@ expand_path(const char *partial_path) "/platform/i86pc/kernel/%s/$ISADIR/unix", partial_path); } - BAM_DPRINTF((D_EXPAND_PATH, fcn, new_path)); + BAM_DPRINTF(("%s: expanded path: %s\n", fcn, new_path)); return (new_path); } free(new_path); - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); return (NULL); } @@ -9092,14 +9405,15 @@ set_archive_line(entry_t *entryp, line_t *kernelp) INJECT_ERROR1("SET_ARCHIVE_LINE_END_ENTRY", lp = entryp->end); if (lp == entryp->end) { - BAM_DPRINTF((D_ARCHIVE_LINE_NONE, fcn, - entryp->entryNum)); + BAM_DPRINTF(("%s: no module/archive line for entry: " + "%d\n", fcn, entryp->entryNum)); return; } } INJECT_ERROR1("SET_ARCHIVE_LINE_END_MENU", lp = NULL); if (lp == NULL) { - BAM_DPRINTF((D_ARCHIVE_LINE_NONE, fcn, entryp->entryNum)); + BAM_DPRINTF(("%s: no module/archive line for entry: %d\n", + fcn, entryp->entryNum)); return; } @@ -9115,7 +9429,7 @@ set_archive_line(entry_t *entryp, line_t *kernelp) } if (strcmp(lp->arg, new_archive) == 0) { - BAM_DPRINTF((D_ARCHIVE_LINE_NOCHANGE, fcn, lp->arg)); + BAM_DPRINTF(("%s: no change for line: %s\n", fcn, lp->arg)); return; } @@ -9127,7 +9441,7 @@ set_archive_line(entry_t *entryp, line_t *kernelp) free(lp->arg); lp->arg = s_strdup(new_archive); update_line(lp); - BAM_DPRINTF((D_ARCHIVE_LINE_REPLACED, fcn, lp->line)); + BAM_DPRINTF(("%s: replaced for line: %s\n", fcn, lp->line)); } /* @@ -9179,7 +9493,9 @@ get_set_kernel( INJECT_ERROR1("GET_SET_KERNEL_NOT_DBOOT", bam_direct = BAM_DIRECT_MULTIBOOT); if (bam_direct != BAM_DIRECT_DBOOT) { - bam_error(NOT_DBOOT, optnum == KERNEL_CMD ? "kernel" : "args"); + bam_error(_("bootadm set-menu %s may only be run on " + "directboot kernels.\n"), + optnum == KERNEL_CMD ? "kernel" : "args"); return (BAM_ERROR); } @@ -9196,7 +9512,8 @@ get_set_kernel( } if ((entryp != NULL) && ((entryp->flags & (BAM_ENTRY_BOOTADM|BAM_ENTRY_LU)) == 0)) { - bam_error(DEFAULT_NOT_BAM); + bam_error(_("Default /boot/grub/menu.lst entry is not " + "controlled by bootadm. Exiting\n")); return (BAM_ERROR); } } @@ -9214,7 +9531,8 @@ get_set_kernel( } } if (kernelp == NULL) { - bam_error(NO_KERNEL, entryNum); + bam_error(_("no kernel line found in entry %d\n"), + entryNum); return (BAM_ERROR); } @@ -9226,15 +9544,17 @@ get_set_kernel( if (path == NULL) { if (entryp == NULL) { - BAM_DPRINTF((D_GET_SET_KERNEL_NO_RC, fcn)); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: no RC entry, nothing to report\n", + fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (BAM_SUCCESS); } assert(kernelp); if (optnum == ARGS_CMD) { if (old_args[0] != '\0') { (void) strlcpy(buf, old_args, bufsize); - BAM_DPRINTF((D_GET_SET_KERNEL_ARGS, fcn, buf)); + BAM_DPRINTF(("%s: read menu boot-args: %s\n", + fcn, buf)); } } else { /* @@ -9246,11 +9566,12 @@ get_set_kernel( *space = '\0'; if (strcmp(kernelp->arg, DIRECT_BOOT_KERNEL) != 0) { (void) strlcpy(buf, kernelp->arg, bufsize); - BAM_DPRINTF((D_GET_SET_KERNEL_KERN, fcn, buf)); + BAM_DPRINTF(("%s: read menu boot-file: %s\n", + fcn, buf)); } *space = old_space; } - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (BAM_SUCCESS); } @@ -9262,7 +9583,8 @@ get_set_kernel( (strcmp(path, DIRECT_BOOT_KERNEL) == 0))) { if ((entryp == NULL) || (kernelp == NULL)) { /* No previous entry, it's already the default */ - BAM_DPRINTF((D_GET_SET_KERNEL_ALREADY, fcn)); + BAM_DPRINTF(("%s: no reset, already has default\n", + fcn)); return (BAM_SUCCESS); } @@ -9283,7 +9605,7 @@ get_set_kernel( mp->old_rc_default); mp->old_rc_default = NULL; rv = BAM_WRITE; - BAM_DPRINTF((D_GET_SET_KERNEL_RESTORE_DEFAULT, fcn)); + BAM_DPRINTF(("%s: resetting to default\n", fcn)); goto done; } @@ -9306,8 +9628,8 @@ get_set_kernel( * to update the archive line as well. */ set_archive_line(entryp, kernelp); - BAM_DPRINTF((D_GET_SET_KERNEL_RESET_KERNEL_SET_ARG, - fcn, kernelp->arg)); + BAM_DPRINTF(("%s: reset kernel to default, but " + "retained old args: %s\n", fcn, kernelp->arg)); } else { /* * We're resetting the boot args to nothing, so @@ -9319,8 +9641,8 @@ get_set_kernel( kernelp->arg); free(kernelp->arg); kernelp->arg = new_arg; - BAM_DPRINTF((D_GET_SET_KERNEL_RESET_ARG_SET_KERNEL, - fcn, kernelp->arg)); + BAM_DPRINTF(("%s: reset args to default, but retained " + "old kernel: %s\n", fcn, kernelp->arg)); } rv = BAM_WRITE; goto done; @@ -9332,8 +9654,9 @@ get_set_kernel( if ((optnum == KERNEL_CMD) && (path[0] != '/')) { new_path = expand_path(path); if (new_path == NULL) { - bam_error(UNKNOWN_KERNEL, path); - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + bam_error(_("unable to expand %s to a full file " + "path.\n"), path); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); return (BAM_ERROR); } free_new_path = 1; @@ -9352,7 +9675,9 @@ get_set_kernel( fstype = get_fstype("/"); INJECT_ERROR1("GET_SET_KERNEL_FSTYPE", fstype = NULL); if (fstype == NULL) { - bam_error(BOOTENV_FSTYPE_FAILED); + bam_error(_("cannot determine filesystem type for " + "\"/\".\nCannot generate GRUB menu entry with " + "EEPROM arguments.\n")); rv = BAM_ERROR; goto done; } @@ -9361,7 +9686,9 @@ get_set_kernel( INJECT_ERROR1("GET_SET_KERNEL_SPECIAL", osdev = NULL); if (osdev == NULL) { free(fstype); - bam_error(BOOTENV_SPECIAL_FAILED); + bam_error(_("cannot determine device special file for " + "\"/\".\nCannot generate GRUB menu entry with " + "EEPROM arguments.\n")); rv = BAM_ERROR; goto done; } @@ -9371,7 +9698,9 @@ get_set_kernel( if (sign == NULL) { free(fstype); free(osdev); - bam_error(BOOTENV_SIGN_FAILED); + bam_error(_("cannot determine boot signature for " + "\"/\".\nCannot generate GRUB menu entry with " + "EEPROM arguments.\n")); rv = BAM_ERROR; goto done; } @@ -9390,13 +9719,13 @@ get_set_kernel( new_arg = s_calloc(1, new_str_len); (void) snprintf(new_arg, new_str_len, "%s %s", new_path, ZFS_BOOT); - BAM_DPRINTF((D_GET_SET_KERNEL_NEW_KERN, fcn, + BAM_DPRINTF(("%s: new kernel=%s\n", fcn, new_arg)); entryNum = add_boot_entry(mp, BOOTENV_RC_TITLE, signbuf, new_arg, NULL, NULL, NULL); free(new_arg); } else { - BAM_DPRINTF((D_GET_SET_KERNEL_NEW_KERN, fcn, + BAM_DPRINTF(("%s: new kernel=%s\n", fcn, new_path)); entryNum = add_boot_entry(mp, BOOTENV_RC_TITLE, signbuf, new_path, NULL, NULL, NULL); @@ -9415,7 +9744,7 @@ get_set_kernel( DIRECT_BOOT_KERNEL, path); } - BAM_DPRINTF((D_GET_SET_KERNEL_NEW_ARG, fcn, new_arg)); + BAM_DPRINTF(("%s: new args=%s\n", fcn, new_arg)); entryNum = add_boot_entry(mp, BOOTENV_RC_TITLE, signbuf, new_arg, NULL, DIRECT_BOOT_ARCHIVE, NULL); free(new_arg); @@ -9424,7 +9753,7 @@ get_set_kernel( INJECT_ERROR1("GET_SET_KERNEL_ADD_BOOT_ENTRY", entryNum = BAM_ERROR); if (entryNum == BAM_ERROR) { - bam_error(GET_SET_KERNEL_ADD_BOOT_ENTRY, + bam_error(_("failed to add boot entry: %s\n"), BOOTENV_RC_TITLE); rv = BAM_ERROR; goto done; @@ -9433,7 +9762,8 @@ get_set_kernel( ret = set_global(mp, menu_cmds[DEFAULT_CMD], entryNum); INJECT_ERROR1("GET_SET_KERNEL_SET_GLOBAL", ret = BAM_ERROR); if (ret == BAM_ERROR) { - bam_error(GET_SET_KERNEL_SET_GLOBAL, entryNum); + bam_error(_("failed to set default to: %d\n"), + entryNum); } rv = BAM_WRITE; goto done; @@ -9455,8 +9785,8 @@ get_set_kernel( * the archive line as well. */ set_archive_line(entryp, kernelp); - BAM_DPRINTF((D_GET_SET_KERNEL_REPLACED_KERNEL_SAME_ARG, fcn, - kernelp->arg)); + BAM_DPRINTF(("%s: rc line exists, replaced kernel, same " + "args: %s\n", fcn, kernelp->arg)); } else { new_str_len = old_kernel_len + strlen(path) + 8; new_arg = s_calloc(1, new_str_len); @@ -9465,8 +9795,8 @@ get_set_kernel( (void) strlcat(new_arg, path, new_str_len); free(kernelp->arg); kernelp->arg = new_arg; - BAM_DPRINTF((D_GET_SET_KERNEL_SAME_KERNEL_REPLACED_ARG, fcn, - kernelp->arg)); + BAM_DPRINTF(("%s: rc line exists, same kernel, but new " + "args: %s\n", fcn, kernelp->arg)); } rv = BAM_WRITE; @@ -9476,9 +9806,9 @@ done: if (free_new_path) free(new_path); if (rv == BAM_WRITE) { - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); } else { - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); } return (rv); } @@ -9487,7 +9817,7 @@ static error_t get_kernel(menu_t *mp, menu_cmd_t optnum, char *buf, size_t bufsize) { const char *fcn = "get_kernel()"; - BAM_DPRINTF((D_FUNC_ENTRY1, fcn, menu_cmds[optnum])); + BAM_DPRINTF(("%s: entered. arg: %s\n", fcn, menu_cmds[optnum])); return (get_set_kernel(mp, optnum, NULL, buf, bufsize)); } @@ -9496,7 +9826,8 @@ set_kernel(menu_t *mp, menu_cmd_t optnum, char *path, char *buf, size_t bufsize) { const char *fcn = "set_kernel()"; assert(path != NULL); - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, menu_cmds[optnum], path)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, + menu_cmds[optnum], path)); return (get_set_kernel(mp, optnum, path, buf, bufsize)); } @@ -9516,7 +9847,7 @@ set_option(menu_t *mp, char *dummy, char *opt) assert(dummy == NULL); /* opt is set from bam_argv[0] and is always non-NULL */ - BAM_DPRINTF((D_FUNC_ENTRY1, fcn, opt)); + BAM_DPRINTF(("%s: entered. arg: %s\n", fcn, opt)); val = strchr(opt, '='); if (val != NULL) { @@ -9532,7 +9863,7 @@ set_option(menu_t *mp, char *dummy, char *opt) } else if (strcmp(opt, menu_cmds[ARGS_CMD]) == 0) { optnum = ARGS_CMD; } else { - bam_error(INVALID_OPTION, opt); + bam_error(_("invalid option: %s\n"), opt); return (BAM_ERROR); } @@ -9541,15 +9872,15 @@ set_option(menu_t *mp, char *dummy, char *opt) * others cause errors */ if ((val == NULL) && (optnum != KERNEL_CMD) && (optnum != ARGS_CMD)) { - bam_error(NO_OPTION_ARG, opt); + bam_error(_("option has no argument: %s\n"), opt); return (BAM_ERROR); } else if (val != NULL) { *val = '='; } if ((optnum == KERNEL_CMD) || (optnum == ARGS_CMD)) { - BAM_DPRINTF((D_SET_OPTION, fcn, menu_cmds[optnum], - val ? val + 1 : "NULL")); + BAM_DPRINTF(("%s: setting %s option to %s\n", + fcn, menu_cmds[optnum], val ? val + 1 : "NULL")); if (val) rv = set_kernel(mp, optnum, val + 1, buf, sizeof (buf)); @@ -9559,14 +9890,15 @@ set_option(menu_t *mp, char *dummy, char *opt) (void) printf("%s\n", buf); } else { optval = s_strtol(val + 1); - BAM_DPRINTF((D_SET_OPTION, fcn, menu_cmds[optnum], val + 1)); + BAM_DPRINTF(("%s: setting %s option to %s\n", fcn, + menu_cmds[optnum], val + 1)); rv = set_global(mp, menu_cmds[optnum], optval); } if (rv == BAM_WRITE || rv == BAM_SUCCESS) { - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); } else { - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); } return (rv); @@ -9589,7 +9921,7 @@ read_globals(menu_t *mp, char *menu_path, char *globalcmd, int quiet) if (mp->start == NULL) { if (!quiet) - bam_error(NO_MENU, menu_path); + bam_error(_("menu file not found: %s\n"), menu_path); return (BAM_ERROR); } @@ -9600,7 +9932,8 @@ read_globals(menu_t *mp, char *menu_path, char *globalcmd, int quiet) if (lp->cmd == NULL) { if (!quiet) - bam_error(NO_CMD, lp->lineNum); + bam_error(_("no command at line %d\n"), + lp->lineNum); continue; } @@ -9609,17 +9942,19 @@ read_globals(menu_t *mp, char *menu_path, char *globalcmd, int quiet) /* Found global. Check for duplicates */ if (done && !quiet) { - bam_error(DUP_CMD, globalcmd, lp->lineNum, bam_root); + bam_error(_("duplicate command %s at line %d of " + "%sboot/grub/menu.lst\n"), globalcmd, + lp->lineNum, bam_root); ret = BAM_ERROR; } arg = lp->arg ? lp->arg : ""; - bam_print(GLOBAL_CMD, globalcmd, arg); + bam_print(_("%s %s\n"), globalcmd, arg); done = 1; } if (!done && bam_verbose) - bam_print(NO_ENTRY, globalcmd); + bam_print(_("no %s entry found\n"), globalcmd); return (ret); } @@ -9629,7 +9964,7 @@ menu_write(char *root, menu_t *mp) { const char *fcn = "menu_write()"; - BAM_DPRINTF((D_MENU_WRITE_ENTER, fcn, root)); + BAM_DPRINTF(("%s: entered menu_write() for root: <%s>\n", fcn, root)); return (list2file(root, MENU_TMP, GRUB_MENU, mp->start)); } @@ -9712,7 +10047,7 @@ exec_cmd(char *cmdline, filelist_t *flistp) * - set IFS to space and tab */ if (*cmdline != '/') { - bam_error(ABS_PATH_REQ, cmdline); + bam_error(_("path is not absolute: %s\n"), cmdline); return (-1); } (void) putenv("IFS= \t"); @@ -9724,7 +10059,7 @@ exec_cmd(char *cmdline, filelist_t *flistp) (void) sigemptyset(&set); (void) sigaddset(&set, SIGCHLD); if (sigprocmask(SIG_UNBLOCK, &set, NULL) != 0) { - bam_error(CANT_UNBLOCK_SIGCHLD, strerror(errno)); + bam_error(_("cannot unblock SIGCHLD: %s\n"), strerror(errno)); return (-1); } @@ -9733,17 +10068,20 @@ exec_cmd(char *cmdline, filelist_t *flistp) */ disp = sigset(SIGCHLD, SIG_DFL); if (disp == SIG_ERR) { - bam_error(FAILED_SIG, strerror(errno)); + bam_error(_("cannot set SIGCHLD disposition: %s\n"), + strerror(errno)); return (-1); } if (disp == SIG_HOLD) { - bam_error(BLOCKED_SIG, cmdline); + bam_error(_("SIGCHLD signal blocked. Cannot exec: %s\n"), + cmdline); return (-1); } ptr = popen(cmdline, "r"); if (ptr == NULL) { - bam_error(POPEN_FAIL, cmdline, strerror(errno)); + bam_error(_("popen failed: %s: %s\n"), cmdline, + strerror(errno)); return (-1); } @@ -9766,7 +10104,7 @@ exec_cmd(char *cmdline, filelist_t *flistp) while (s_fgets(buf, sizeof (buf), ptr) != NULL) { if (flistp == NULL) { /* s_fgets strips newlines, so insert them at the end */ - bam_print(PRINT, buf); + bam_print(_("%s\n"), buf); } else { append_to_flist(flistp, buf); } @@ -9774,14 +10112,16 @@ exec_cmd(char *cmdline, filelist_t *flistp) ret = pclose(ptr); if (ret == -1) { - bam_error(PCLOSE_FAIL, cmdline, strerror(errno)); + bam_error(_("pclose failed: %s: %s\n"), cmdline, + strerror(errno)); return (-1); } if (WIFEXITED(ret)) { return (WEXITSTATUS(ret)); } else { - bam_error(EXEC_FAIL, cmdline, ret); + bam_error(_("command terminated abnormally: %s: %d\n"), + cmdline, ret); return (-1); } } @@ -9834,7 +10174,8 @@ s_fgets(char *buf, int buflen, FILE *fp) if (buf) { n = strlen(buf); if (n == buflen - 1 && buf[n-1] != '\n') - bam_error(TOO_LONG, buflen - 1, buf); + bam_error(_("the following line is too long " + "(> %d chars)\n\t%s\n"), buflen - 1, buf); buf[n-1] = (buf[n-1] == '\n') ? '\0' : buf[n-1]; } @@ -9848,7 +10189,8 @@ s_calloc(size_t nelem, size_t sz) ptr = calloc(nelem, sz); if (ptr == NULL) { - bam_error(NO_MEM, nelem*sz); + bam_error(_("could not allocate memory: size = %u\n"), + nelem*sz); bam_exit(1); } return (ptr); @@ -9859,7 +10201,7 @@ s_realloc(void *ptr, size_t sz) { ptr = realloc(ptr, sz); if (ptr == NULL) { - bam_error(NO_MEM, sz); + bam_error(_("could not allocate memory: size = %u\n"), sz); bam_exit(1); } return (ptr); @@ -9875,7 +10217,8 @@ s_strdup(char *str) ptr = strdup(str); if (ptr == NULL) { - bam_error(NO_MEM, strlen(str) + 1); + bam_error(_("could not allocate memory: size = %u\n"), + strlen(str) + 1); bam_exit(1); } return (ptr); diff --git a/usr/src/cmd/boot/bootadm/bootadm.h b/usr/src/cmd/boot/bootadm/bootadm.h index b59d860e4e..0b63a69310 100644 --- a/usr/src/cmd/boot/bootadm/bootadm.h +++ b/usr/src/cmd/boot/bootadm/bootadm.h @@ -33,11 +33,18 @@ extern "C" { #endif #include +#include #ifndef TEXT_DOMAIN #define TEXT_DOMAIN "SUNW_OST_OSCMD" #endif /* TEXT_DOMAIN */ +#ifndef lint +#define _(x) gettext(x) +#else +#define _(x) (x) +#endif + /* Type definitions */ /* GRUB menu per-line classification */ @@ -154,6 +161,27 @@ typedef enum { BAM_FINDROOT_PRESENT } findroot_t; +typedef enum { + OPT_ABSENT = 0, /* No option */ + OPT_REQ, /* option required */ + OPT_OPTIONAL /* option may or may not be present */ +} option_t; + +typedef struct { + char *subcmd; + option_t option; + error_t (*handler)(); + int unpriv; /* is this an unprivileged command */ +} subcmd_defn_t; + +typedef enum zfs_mnted { + ZFS_MNT_ERROR = -1, + LEGACY_MOUNTED = 1, + LEGACY_ALREADY, + ZFS_MOUNTED, + ZFS_ALREADY +} zfs_mnted_t; + extern int bam_verbose; extern int bam_force; extern direct_or_multi_t bam_direct; @@ -167,6 +195,11 @@ extern error_t set_global(menu_t *, char *, int); extern error_t upgrade_menu(menu_t *, char *, char *); extern error_t cvt_to_hyper(menu_t *, char *, char *); extern error_t cvt_to_metal(menu_t *, char *, char *); +extern error_t check_subcmd_and_options(char *, char *, subcmd_defn_t *, + error_t (**fp)()); +extern char *mount_top_dataset(char *pool, zfs_mnted_t *mnted); +extern void elide_trailing_slash(const char *, char *, size_t); +extern int umount_top_dataset(char *, zfs_mnted_t, char *); extern void *s_calloc(size_t, size_t); extern void *s_realloc(void *, size_t); extern char *s_fgets(char *buf, int n, FILE *fp); @@ -175,6 +208,7 @@ extern void bam_exit(int); extern void bam_print(char *, ...); extern void bam_print_stderr(char *format, ...); extern void bam_derror(char *format, ...); +extern error_t bam_loader_menu(char *, char *, int, char *[]); extern error_t get_boot_cap(const char *osroot); extern char *get_special(char *); extern char *os_to_grubdisk(char *, int); @@ -190,6 +224,8 @@ extern void unlink_line(menu_t *mp, line_t *lp); extern void line_free(line_t *lp); extern char *s_strdup(char *); extern int is_sparc(void); +extern int is_pcfs(char *); +extern int is_zfs(char *); extern int bootadm_digest(const char *, char **); #define BAM_MAXLINE 8192 diff --git a/usr/src/cmd/boot/bootadm/bootadm_hyper.c b/usr/src/cmd/boot/bootadm/bootadm_hyper.c index 01e7dd3e69..66e0051eae 100644 --- a/usr/src/cmd/boot/bootadm/bootadm_hyper.c +++ b/usr/src/cmd/boot/bootadm/bootadm_hyper.c @@ -20,6 +20,7 @@ */ /* + * Copyright 2016 Toomas Soome * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. */ @@ -32,7 +33,6 @@ #include #include -#include "message.h" #include "bootadm.h" #define HYPER_KERNEL_DIR "/platform/i86xpv/kernel" @@ -82,7 +82,7 @@ append_str(char *orig, char *str, char *delim) len = strlen(orig) + strlen(str) + strlen(delim) + 1; if ((newstr = malloc(len)) == NULL) { - bam_error(NO_MEM, len); + bam_error(_("could not allocate memory: size = %u\n"), len); bam_exit(1); } @@ -116,7 +116,7 @@ modify_path(char *path, char *old_str, char *new_str) len = strlen(path) - strlen(old_str) + strlen(new_str) + 1; if ((newpath = malloc(len)) == NULL) { - bam_error(NO_MEM, len); + bam_error(_("could not allocate memory: size = %u\n"), len); bam_exit(1); } @@ -171,7 +171,8 @@ get_token(char **token, char *str, char *delim) /* found a delimiter, so create a token string */ if ((*token = malloc(len)) == NULL) { - bam_error(NO_MEM, len); + bam_error(_("could not allocate memory: " + "size = %u\n"), len); bam_exit(1); } @@ -520,7 +521,8 @@ cvt_metal_kernel(char *kernstr, char **path) * hypervisor, so error out now. */ if (strstr(*path, XEN_MENU) != NULL) { - bam_error(ALREADY_HYPER); + bam_error(_("default entry already setup for use with the " + "hypervisor!\n")); free(*path); *path = NULL; return (1); @@ -576,7 +578,8 @@ cvt_hyper_kernel(char *kernel) * to run on bare metal, so error out now. */ if (strncmp(token, METAL_KERNEL_DIR, strlen(METAL_KERNEL_DIR)) == 0) { - bam_error(ALREADY_METAL); + bam_error(_("default entry already setup for use with a metal " + "kernel!\n")); free(token); return (-1); } @@ -668,7 +671,8 @@ parse_bootenvrc(char *osroot) /* if we couldn't open the bootenv.rc file, ignore the issue. */ if ((fp = fopen(rcpath, "r")) == NULL) { - BAM_DPRINTF((D_NO_BOOTENVRC, rcpath, strerror(errno))); + BAM_DPRINTF(("could not open %s: %s\n", rcpath, + strerror(errno))); return; } @@ -775,13 +779,14 @@ cvt_to_hyper(menu_t *mp, char *osroot, char *extra_args) assert(osroot); - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, osroot, extra_args)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, osroot, extra_args)); /* * First just check to verify osroot is a sane directory. */ if ((osdev = get_special(osroot)) == NULL) { - bam_error(CANT_FIND_SPECIAL, osroot); + bam_error(_("cant find special file for mount-point %s\n"), + osroot); return (BAM_ERROR); } @@ -808,7 +813,8 @@ cvt_to_hyper(menu_t *mp, char *osroot, char *extra_args) /* couldn't find it, so error out */ if (ent == NULL) { - bam_error(CANT_FIND_DEFAULT, curdef); + bam_error(_("unable to find default boot entry (%d) in " + "menu.lst file.\n"), curdef); goto abort; } @@ -854,7 +860,9 @@ cvt_to_hyper(menu_t *mp, char *osroot, char *extra_args) &kern_path)) != 0) { if (ret < 0) { ret = BAM_ERROR; - bam_error(KERNEL_NOT_PARSEABLE, curdef); + bam_error(_("kernel$ in default boot " + "entry (%d) missing or not " + "parseable.\n"), curdef); } else ret = BAM_NOCHANGE; @@ -871,17 +879,20 @@ cvt_to_hyper(menu_t *mp, char *osroot, char *extra_args) * malformed. */ if (findroot == NULL) { - bam_error(FINDROOT_NOT_FOUND, curdef); + bam_error(_("findroot in default boot entry (%d) missing.\n"), + curdef); goto abort; } if (module == NULL) { - bam_error(MODULE_NOT_PARSEABLE, curdef); + bam_error(_("module$ in default boot entry (%d) missing or " + "not parseable.\n"), curdef); goto abort; } if (kern_path == NULL) { - bam_error(KERNEL_NOT_FOUND, curdef); + bam_error(_("kernel$ in default boot entry (%d) missing.\n"), + curdef); goto abort; } @@ -964,8 +975,8 @@ cvt_to_hyper(menu_t *mp, char *osroot, char *extra_args) if (ent->flags & BAM_ENTRY_BOOTADM) ent->flags &= ~BAM_ENTRY_BOOTADM; - BAM_DPRINTF((D_CVT_CMD_KERN_DOLLAR, fcn, kernel)); - BAM_DPRINTF((D_CVT_CMD_MOD_DOLLAR, fcn, mod_kernel)); + BAM_DPRINTF(("%s: converted kernel cmd to %s\n", fcn, kernel)); + BAM_DPRINTF(("%s: converted module cmd to %s\n", fcn, mod_kernel)); if ((newdef = add_boot_entry(mp, title, findroot, kernel, mod_kernel, module, bootfs)) == BAM_ERROR) @@ -978,7 +989,8 @@ cvt_to_hyper(menu_t *mp, char *osroot, char *extra_args) if (delete_boot_entry(mp, curdef, DBE_QUIET) == BAM_SUCCESS) newdef--; else - bam_print(NEW_BOOT_ENTRY, title); + bam_print(_("unable to modify default entry; creating new " + "boot entry for %s\n"), title); /* * If we successfully created the new entry, set the default boot @@ -989,7 +1001,9 @@ cvt_to_hyper(menu_t *mp, char *osroot, char *extra_args) abort: if (ret != BAM_NOCHANGE) - bam_error(HYPER_ABORT, ((*osroot == NULL) ? "/" : osroot)); + bam_error(_("error converting GRUB menu entry on %s for use " + "with the hypervisor.\nAborting.\n"), + ((*osroot == NULL) ? "/" : osroot)); return (ret); } @@ -1023,13 +1037,14 @@ cvt_to_metal(menu_t *mp, char *osroot, char *menu_root) assert(osroot); - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, osroot, "")); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, osroot, "")); /* * First just check to verify osroot is a sane directory. */ if ((osdev = get_special(osroot)) == NULL) { - bam_error(CANT_FIND_SPECIAL, osroot); + bam_error(_("cant find special file for mount-point %s\n"), + osroot); return (BAM_ERROR); } @@ -1048,7 +1063,8 @@ cvt_to_metal(menu_t *mp, char *osroot, char *menu_root) /* couldn't find it, so error out */ if (ent == NULL) { - bam_error(CANT_FIND_DEFAULT, curdef); + bam_error(_("unable to find default boot entry (%d) in " + "menu.lst file.\n"), curdef); goto abort; } @@ -1091,17 +1107,20 @@ cvt_to_metal(menu_t *mp, char *osroot, char *menu_root) * malformed. */ if (findroot == NULL) { - bam_error(FINDROOT_NOT_FOUND, curdef); + bam_error(_("findroot in default boot entry (%d) missing.\n"), + curdef); goto abort; } if (module == NULL) { - bam_error(MODULE_NOT_PARSEABLE, curdef); + bam_error(_("module$ in default boot entry (%d) missing or " + "not parseable.\n"), curdef); goto abort; } if (kern_path == NULL) { - bam_error(KERNEL_NOT_FOUND, curdef); + bam_error(_("kernel$ in default boot entry (%d) missing.\n"), + curdef); goto abort; } @@ -1121,7 +1140,8 @@ cvt_to_metal(menu_t *mp, char *osroot, char *menu_root) if ((kernel = malloc(len + zfslen)) == NULL) { free(kern_path); - bam_error(NO_MEM, len + zfslen); + bam_error(_("could not allocate memory: size = %u\n"), + len + zfslen); bam_exit(1); } @@ -1220,8 +1240,8 @@ cvt_to_metal(menu_t *mp, char *osroot, char *menu_root) if (ent->flags & BAM_ENTRY_BOOTADM) ent->flags &= ~BAM_ENTRY_BOOTADM; - BAM_DPRINTF((D_CVT_CMD_KERN_DOLLAR, fcn, kernel)); - BAM_DPRINTF((D_CVT_CMD_MOD_DOLLAR, fcn, module)); + BAM_DPRINTF(("%s: converted kernel cmd to %s\n", fcn, kernel)); + BAM_DPRINTF(("%s: converted module cmd to %s\n", fcn, module)); if ((newdef = add_boot_entry(mp, title, findroot, kernel, NULL, barchive_path, bootfs)) == BAM_ERROR) { @@ -1236,7 +1256,8 @@ cvt_to_metal(menu_t *mp, char *osroot, char *menu_root) if (delete_boot_entry(mp, curdef, DBE_QUIET) == BAM_SUCCESS) newdef--; else - bam_print(NEW_BOOT_ENTRY, title); + bam_print(_("unable to modify default entry; creating new " + "boot entry for %s\n"), title); free(kernel); @@ -1249,7 +1270,8 @@ cvt_to_metal(menu_t *mp, char *osroot, char *menu_root) abort: if (ret != BAM_NOCHANGE) - bam_error(METAL_ABORT, osroot); + bam_error(_("error converting GRUB menu entry on %s for use " + "with a metal kernel.\nAborting.\n"), osroot); return (ret); } diff --git a/usr/src/cmd/boot/bootadm/bootadm_loader.c b/usr/src/cmd/boot/bootadm/bootadm_loader.c new file mode 100644 index 0000000000..2c7382a11c --- /dev/null +++ b/usr/src/cmd/boot/bootadm/bootadm_loader.c @@ -0,0 +1,1329 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012 Milan Jurik. All rights reserved. + */ + +/* + * Copyright 2015 Nexenta Systems, Inc. All rights reserved. + * Copyright 2016 Toomas Soome + */ + +/* + * Loader menu management. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "bootadm.h" + +extern int bam_rootlen; +extern int bam_alt_root; +extern char *rootbuf; +extern char *bam_root; + +#define BOOT_DIR "/boot" +#define CONF_DIR BOOT_DIR "/conf.d" +#define MENU BOOT_DIR "/menu.lst" +#define TRANSIENT BOOT_DIR "/transient.conf" +#define XEN_CONFIG CONF_DIR "/xen" + +struct menu_entry { + int entry; + char *title; + char *bootfs; + STAILQ_ENTRY(menu_entry) next; +}; +STAILQ_HEAD(menu_lst, menu_entry); + +static error_t set_option(struct menu_lst *, char *, char *); +static error_t list_entry(struct menu_lst *, char *, char *); +static error_t update_entry(struct menu_lst *, char *, char *); +static error_t update_temp(struct menu_lst *, char *, char *); +static error_t list_setting(struct menu_lst *menu, char *, char *); +static error_t disable_hyper(struct menu_lst *, char *, char *); +static error_t enable_hyper(struct menu_lst *, char *, char *); + +/* Menu related sub commands */ +static subcmd_defn_t menu_subcmds[] = { + "set_option", OPT_ABSENT, set_option, 0, /* PUB */ + "list_entry", OPT_OPTIONAL, list_entry, 1, /* PUB */ + "update_entry", OPT_REQ, update_entry, 0, /* menu */ + "update_temp", OPT_OPTIONAL, update_temp, 0, /* reboot */ + "list_setting", OPT_OPTIONAL, list_setting, 1, /* menu */ + "disable_hypervisor", OPT_ABSENT, disable_hyper, 0, /* menu */ + "enable_hypervisor", OPT_ABSENT, enable_hyper, 0, /* menu */ + NULL, 0, NULL, 0 /* must be last */ +}; + +#define NUM_COLS (4) +struct col_info { + const char *col_name; + size_t width; +}; + +/* + * all columns output format + */ +struct hdr_info { + struct col_info cols[NUM_COLS]; +}; + +static void +print_hdr(struct hdr_info *hdr_info) +{ + boolean_t first = B_TRUE; + size_t i; + + for (i = 0; i < NUM_COLS; i++) { + struct col_info *col_info = &hdr_info->cols[i]; + const char *name = col_info->col_name; + size_t width = col_info->width; + + if (name == NULL) + continue; + + if (first) { + (void) printf("%-*s", width, name); + first = B_FALSE; + } else + (void) printf(" %-*s", width, name); + } + (void) putchar('\n'); +} + +static void +init_hdr_cols(struct hdr_info *hdr) +{ + struct col_info *col = hdr->cols; + size_t i; + + col[0].col_name = _("Index"); + col[1].col_name = _("Default"); + col[2].col_name = _("Dataset"); + col[3].col_name = _("Menu"); + col[4].col_name = NULL; + + for (i = 0; i < NUM_COLS; i++) { + const char *name = col[i].col_name; + col[i].width = 0; + + if (name != NULL) { + wchar_t wname[128]; + size_t sz = mbstowcs(wname, name, sizeof (wname) / + sizeof (wchar_t)); + if (sz > 0) { + int wcsw = wcswidth(wname, sz); + if (wcsw > 0) + col[i].width = wcsw; + else + col[i].width = sz; + } else { + col[i].width = strlen(name); + } + } + } +} + +static void +count_widths(struct hdr_info *hdr, struct menu_lst *menu) +{ + size_t len[NUM_COLS]; + struct menu_entry *entry; + int i; + + for (i = 0; i < NUM_COLS; i++) + len[i] = hdr->cols[i].width + 1; + + STAILQ_FOREACH(entry, menu, next) { + size_t bootfs_len = strlen(entry->bootfs); + if (bootfs_len > len[2]) + len[2] = bootfs_len + 1; + } + + for (i = 0; i < NUM_COLS; i++) + hdr->cols[i].width = len[i]; +} + +static void +print_menu_nodes(boolean_t parsable, struct hdr_info *hdr, + struct menu_lst *menu) +{ + struct menu_entry *entry; + int i = -1; + int rv; + be_node_list_t *be_nodes, *be_node; + + rv = be_list(NULL, &be_nodes); + if (rv != BE_SUCCESS) + return; + + STAILQ_FOREACH(entry, menu, next) { + i++; + for (be_node = be_nodes; be_node; + be_node = be_node->be_next_node) + if (strcmp(be_node->be_root_ds, entry->bootfs) == 0) + break; + + if (parsable) + (void) printf("%d;%s;%s;%s\n", i, + be_node->be_active_on_boot == B_TRUE? "*" : "-", + entry->bootfs, entry->title); + else + (void) printf("%-*d %-*s %-*s %-*s\n", + hdr->cols[0].width, i, + hdr->cols[1].width, + be_node->be_active_on_boot == B_TRUE? "*" : "-", + hdr->cols[2].width, entry->bootfs, + hdr->cols[3].width, entry->title); + } + be_free_list(be_nodes); +} + +static void +print_nodes(boolean_t parsable, struct menu_lst *menu) +{ + struct hdr_info hdr; + + if (!parsable) { + init_hdr_cols(&hdr); + count_widths(&hdr, menu); + print_hdr(&hdr); + } + + print_menu_nodes(parsable, &hdr, menu); +} + +error_t +menu_read(struct menu_lst *menu, char *menu_path) +{ + FILE *fp; + struct menu_entry *mp; + char buf[PATH_MAX]; + char *title; + char *bootfs; + char *ptr; + int i = 0; + int ret = BAM_SUCCESS; + + fp = fopen(menu_path, "r"); + if (fp == NULL) + return (BAM_ERROR); + + /* + * menu.lst entry is on two lines, one for title, one for bootfs + * so we process both lines in succession. + */ + do { + if (fgets(buf, PATH_MAX, fp) == NULL) { + if (!feof(fp)) + ret = BAM_ERROR; + (void) fclose(fp); + return (ret); + } + ptr = strchr(buf, '\n'); + if (ptr != NULL) + *ptr = '\0'; + + ptr = strchr(buf, ' '); + if (ptr == NULL) { + (void) fclose(fp); + return (BAM_ERROR); + } + *ptr++ = '\0'; + if (strcmp(buf, "title") != 0) { + (void) fclose(fp); + return (BAM_ERROR); + } + if ((title = strdup(ptr)) == NULL) { + (void) fclose(fp); + return (BAM_ERROR); + } + + if (fgets(buf, PATH_MAX, fp) == NULL) { + free(title); + (void) fclose(fp); + return (BAM_ERROR); + } + + ptr = strchr(buf, '\n'); + if (ptr != NULL) + *ptr = '\0'; + + ptr = strchr(buf, ' '); + if (ptr == NULL) { + free(title); + (void) fclose(fp); + return (BAM_ERROR); + } + *ptr++ = '\0'; + if (strcmp(buf, "bootfs") != 0) { + free(title); + (void) fclose(fp); + return (BAM_ERROR); + } + if ((bootfs = strdup(ptr)) == NULL) { + free(title); + (void) fclose(fp); + return (BAM_ERROR); + } + if ((mp = malloc(sizeof (struct menu_entry))) == NULL) { + free(title); + free(bootfs); + (void) fclose(fp); + return (BAM_ERROR); + } + mp->entry = i++; + mp->title = title; + mp->bootfs = bootfs; + STAILQ_INSERT_TAIL(menu, mp, next); + } while (feof(fp) == 0); + + (void) fclose(fp); + return (ret); +} + +void +menu_free(struct menu_lst *menu) +{ + struct menu_entry *entry; + STAILQ_FOREACH(entry, menu, next) { + STAILQ_REMOVE_HEAD(menu, next); + free(entry->title); + free(entry->bootfs); + free(entry); + } +} + +error_t +bam_loader_menu(char *subcmd, char *opt, int largc, char *largv[]) +{ + error_t ret; + char menu_path[PATH_MAX]; + char clean_menu_root[PATH_MAX]; + char menu_root[PATH_MAX]; + struct stat sb; + error_t (*f)(struct menu_lst *, char *, char *); + char *special; + char *pool = NULL; + zfs_mnted_t zmnted; + char *zmntpt; + char *osdev; + char *osroot; + const char *fcn = "bam_loader_menu()"; + struct menu_lst menu = {0}; + + STAILQ_INIT(&menu); + + /* + * Check arguments + */ + ret = check_subcmd_and_options(subcmd, opt, menu_subcmds, &f); + if (ret == BAM_ERROR) { + return (BAM_ERROR); + } + + assert(bam_root); + + (void) strlcpy(menu_root, bam_root, sizeof (menu_root)); + osdev = osroot = NULL; + + if (strcmp(subcmd, "update_entry") == 0) { + assert(opt); + + osdev = strtok(opt, ","); + assert(osdev); + osroot = strtok(NULL, ","); + if (osroot) { + /* fixup bam_root so that it points at osroot */ + if (realpath(osroot, rootbuf) == NULL) { + bam_error(_("cannot resolve path %s: %s\n"), + osroot, strerror(errno)); + return (BAM_ERROR); + } + bam_alt_root = 1; + bam_root = rootbuf; + bam_rootlen = strlen(rootbuf); + } + } + + if (stat(menu_root, &sb) == -1) { + bam_error(_("cannot find menu\n")); + return (BAM_ERROR); + } + + if (!is_zfs(menu_root)) { + bam_error(_("only ZFS root is supported\n")); + return (BAM_ERROR); + } + + assert(strcmp(menu_root, bam_root) == 0); + special = get_special(menu_root); + INJECT_ERROR1("Z_MENU_GET_SPECIAL", special = NULL); + if (special == NULL) { + bam_error(_("cant find special file for mount-point %s\n"), + menu_root); + return (BAM_ERROR); + } + pool = strtok(special, "/"); + INJECT_ERROR1("Z_MENU_GET_POOL", pool = NULL); + if (pool == NULL) { + free(special); + bam_error(_("cant find pool for mount-point %s\n"), menu_root); + return (BAM_ERROR); + } + BAM_DPRINTF(("%s: derived pool=%s from special\n", fcn, pool)); + + zmntpt = mount_top_dataset(pool, &zmnted); + INJECT_ERROR1("Z_MENU_MOUNT_TOP_DATASET", zmntpt = NULL); + if (zmntpt == NULL) { + bam_error(_("cannot mount pool dataset for pool: %s\n"), pool); + free(special); + return (BAM_ERROR); + } + BAM_DPRINTF(("%s: top dataset mountpoint=%s\n", fcn, zmntpt)); + + (void) strlcpy(menu_root, zmntpt, sizeof (menu_root)); + BAM_DPRINTF(("%s: zfs menu_root=%s\n", fcn, menu_root)); + + elide_trailing_slash(menu_root, clean_menu_root, + sizeof (clean_menu_root)); + + BAM_DPRINTF(("%s: cleaned menu root is <%s>\n", fcn, clean_menu_root)); + + (void) strlcpy(menu_path, clean_menu_root, sizeof (menu_path)); + (void) strlcat(menu_path, MENU, sizeof (menu_path)); + + BAM_DPRINTF(("%s: menu path is: %s\n", fcn, menu_path)); + + /* + * update_entry is special case, its used by installer + * and needs to create menu.lst file for loader + */ + if (menu_read(&menu, menu_path) == BAM_ERROR && + strcmp(subcmd, "update_entry") != 0) { + bam_error(_("cannot find menu file: %s\n"), menu_path); + if (special != NULL) + free(special); + return (BAM_ERROR); + } + + /* + * If listing the menu, display the menu location + */ + if (strcmp(subcmd, "list_entry") == 0) + bam_print(_("the location for the active menu is: %s\n"), + menu_path); + + /* + * We already checked the following case in + * check_subcmd_and_suboptions() above. Complete the + * final step now. + */ + if (strcmp(subcmd, "set_option") == 0) { + assert(largc == 1 && largv[0] && largv[1] == NULL); + opt = largv[0]; + } else if ((strcmp(subcmd, "enable_hypervisor") != 0) && + (strcmp(subcmd, "list_setting") != 0)) { + assert(largc == 0 && largv == NULL); + } + + /* + * Once the sub-cmd handler has run + * only the line field is guaranteed to have valid values + */ + if (strcmp(subcmd, "update_entry") == 0) { + ret = f(&menu, menu_root, osdev); + } else if (strcmp(subcmd, "upgrade") == 0) { + ret = f(&menu, bam_root, menu_root); + } else if (strcmp(subcmd, "list_entry") == 0) { + ret = f(&menu, menu_path, opt); + } else if (strcmp(subcmd, "list_setting") == 0) { + ret = f(&menu, ((largc > 0) ? largv[0] : ""), + ((largc > 1) ? largv[1] : "")); + } else if (strcmp(subcmd, "disable_hypervisor") == 0) { + if (is_sparc()) { + bam_error(_("%s operation unsupported on SPARC " + "machines\n"), subcmd); + ret = BAM_ERROR; + } else { + ret = f(&menu, bam_root, NULL); + } + } else if (strcmp(subcmd, "enable_hypervisor") == 0) { + if (is_sparc()) { + bam_error(_("%s operation unsupported on SPARC " + "machines\n"), subcmd); + ret = BAM_ERROR; + } else { + char *extra_args = NULL; + + /* + * Compress all arguments passed in the largv[] array + * into one string that can then be appended to the + * end of the kernel$ string the routine to enable the + * hypervisor will build. + * + * This allows the caller to supply arbitrary unparsed + * arguments, such as dom0 memory settings or APIC + * options. + * + * This concatenation will be done without ANY syntax + * checking whatsoever, so it's the responsibility of + * the caller to make sure the arguments are valid and + * do not duplicate arguments the conversion routines + * may create. + */ + if (largc > 0) { + int extra_len, i; + + for (extra_len = 0, i = 0; i < largc; i++) + extra_len += strlen(largv[i]); + + /* + * Allocate space for argument strings, + * intervening spaces and terminating NULL. + */ + extra_args = alloca(extra_len + largc); + + (void) strcpy(extra_args, largv[0]); + + for (i = 1; i < largc; i++) { + (void) strcat(extra_args, " "); + (void) strcat(extra_args, largv[i]); + } + } + + ret = f(&menu, bam_root, extra_args); + } + } else + ret = f(&menu, NULL, opt); + + if (ret == BAM_WRITE) { + BAM_DPRINTF(("%s: writing menu to clean-menu-root: <%s>\n", + fcn, clean_menu_root)); + /* ret = menu_write(clean_menu_root, menu); */ + } + + INJECT_ERROR1("POOL_SET", pool = "/pooldata"); + assert((is_zfs(menu_root)) ^ (pool == NULL)); + if (pool) { + (void) umount_top_dataset(pool, zmnted, zmntpt); + free(special); + } + + menu_free(&menu); + return (ret); +} + +/* + * To suppress output from ficl. We do not want to see messages + * from interpreting loader config. + */ + +/*ARGSUSED*/ +static void +ficlTextOutSilent(ficlCallback *cb, char *text) +{ +} + +/*ARGSUSED*/ +static error_t +set_option(struct menu_lst *menu, char *dummy, char *opt) +{ + char path[PATH_MAX]; + char *val; + char *rest; + int optval; + struct menu_entry *entry; + nvlist_t *be_attrs; + FILE *fp; + int rv, ret = BAM_SUCCESS; + + assert(menu); + assert(opt); + assert(dummy == NULL); + + val = strchr(opt, '='); + if (val != NULL) { + *val++ = '\0'; + } + + if (strcmp(opt, "default") == 0) { + errno = 0; + optval = strtol(val, &rest, 10); + if (errno != 0 || *rest != '\0') { + bam_error(_("invalid boot entry number: %s\n"), val); + return (BAM_ERROR); + } + STAILQ_FOREACH(entry, menu, next) { + if (entry->entry == optval) + break; + } + if (entry == NULL) { + bam_error(_("invalid boot entry number: %s\n"), val); + return (BAM_ERROR); + } + if (nvlist_alloc(&be_attrs, NV_UNIQUE_NAME, 0) != 0) { + bam_error(_("out of memory\n")); + return (BAM_ERROR); + } + if (nvlist_add_string(be_attrs, BE_ATTR_ORIG_BE_NAME, + entry->title) != 0) { + bam_error(_("out of memory\n")); + nvlist_free(be_attrs); + return (BAM_ERROR); + } + ret = be_activate(be_attrs); + nvlist_free(be_attrs); + if (ret != 0) + ret = BAM_ERROR; + return (ret); + } else if (strcmp(opt, "timeout") == 0) { + errno = 0; + optval = strtol(val, &rest, 10); + if (errno != 0 || *rest != '\0') { + bam_error(_("invalid timeout: %s\n"), val); + return (BAM_ERROR); + } + + (void) snprintf(path, PATH_MAX, "%s" CONF_DIR "/timeout", + bam_root); + + fp = fopen(path, "w"); + if (fp == NULL) { + bam_error(_("failed to open file: %s: %s\n"), + path, strerror(errno)); + return (BAM_ERROR); + } + /* + * timeout=-1 is to disable auto boot in illumos, but + * loader needs "NO" to disable auto boot. + */ + if (optval == -1) + rv = fprintf(fp, "autoboot_delay=\"NO\"\n"); + else + rv = fprintf(fp, "autoboot_delay=\"%d\"\n", optval); + + if (rv < 0) { + bam_error(_("write to file failed: %s: %s\n"), + path, strerror(errno)); + (void) fclose(fp); + ret = BAM_ERROR; + } else + rv = fclose(fp); + + if (rv < 0) { + bam_error(_("failed to close file: %s: %s\n"), + path, strerror(errno)); + ret = BAM_ERROR; + } + if (ret == BAM_ERROR) + (void) unlink(path); + + return (BAM_SUCCESS); + } + + bam_error(_("invalid option: %s\n"), opt); + return (BAM_ERROR); +} + +static int +bam_mount_be(struct menu_entry *entry, char **dir) +{ + nvlist_t *be_attrs = NULL; + const char *tmpdir = getenv("TMPDIR"); + const char *tmpname = "bam.XXXXXX"; + be_node_list_t *be_node, *be_nodes = NULL; + int ret; + + *dir = NULL; + if (tmpdir == NULL) + tmpdir = "/tmp"; + + ret = asprintf(dir, "%s/%s", tmpdir, tmpname); + if (ret < 0) { + return (BE_ERR_NOMEM); + } + *dir = mkdtemp(*dir); + + if (nvlist_alloc(&be_attrs, NV_UNIQUE_NAME, 0) != 0) { + ret = BE_ERR_NOMEM; + goto out; + } + + ret = be_list(NULL, &be_nodes); + if (ret != BE_SUCCESS) { + goto out; + } + + for (be_node = be_nodes; be_node; + be_node = be_node->be_next_node) + if (strcmp(be_node->be_root_ds, entry->bootfs) == 0) + break; + + if (nvlist_add_string(be_attrs, BE_ATTR_ORIG_BE_NAME, + be_node->be_node_name) != 0) { + ret = BE_ERR_NOMEM; + goto out; + } + + if (nvlist_add_string(be_attrs, BE_ATTR_MOUNTPOINT, *dir) != 0) { + ret = BE_ERR_NOMEM; + goto out; + } + + ret = be_mount(be_attrs); + if (ret == BE_ERR_MOUNTED) { + /* + * if BE is mounted, dir does not point to correct directory + */ + (void) rmdir(*dir); + free(*dir); + *dir = NULL; + } +out: + if (be_nodes != NULL) + be_free_list(be_nodes); + nvlist_free(be_attrs); + return (ret); +} + +static int +bam_umount_be(char *dir) +{ + nvlist_t *be_attrs; + int ret; + + if (dir == NULL) /* nothing to do */ + return (BE_SUCCESS); + + if (nvlist_alloc(&be_attrs, NV_UNIQUE_NAME, 0) != 0) + return (BE_ERR_NOMEM); + + if (nvlist_add_string(be_attrs, BE_ATTR_ORIG_BE_NAME, dir) != 0) { + ret = BE_ERR_NOMEM; + goto out; + } + + ret = be_unmount(be_attrs); +out: + nvlist_free(be_attrs); + return (ret); +} + +/* + * display details of menu entry or single property + */ +static error_t +list_menu_entry(struct menu_entry *entry, char *setting) +{ + int ret = BAM_SUCCESS; + char *ptr, *dir; + char buf[MAX_INPUT]; + ficlVm *vm; + int mounted; + + mounted = bam_mount_be(entry, &dir); + if (mounted != BE_SUCCESS && mounted != BE_ERR_MOUNTED) { + if (dir != NULL) { + (void) rmdir(dir); + free(dir); + } + bam_error(_("%s is not mounted\n"), entry->title); + return (BAM_ERROR); + } + + vm = bf_init("", ficlTextOutSilent); + if (vm == NULL) { + bam_error(_("error setting up forth interpreter\n")); + ret = BAM_ERROR; + goto done; + } + + /* should only get FICL_VM_STATUS_OUT_OF_TEXT */ + (void) snprintf(buf, MAX_INPUT, "set currdev=zfs:%s:", + entry->bootfs); + ret = ficlVmEvaluate(vm, buf); + if (ret != FICL_VM_STATUS_OUT_OF_TEXT) { + bam_error(_("error interpreting boot config\n")); + ret = BAM_ERROR; + goto done; + } + (void) snprintf(buf, MAX_INPUT, "include /boot/forth/loader.4th"); + ret = ficlVmEvaluate(vm, buf); + if (ret != FICL_VM_STATUS_OUT_OF_TEXT) { + bam_error(_("error interpreting boot config\n")); + ret = BAM_ERROR; + goto done; + } + (void) snprintf(buf, MAX_INPUT, "start"); + ret = ficlVmEvaluate(vm, buf); + if (ret != FICL_VM_STATUS_OUT_OF_TEXT) { + bam_error(_("error interpreting boot config\n")); + ret = BAM_ERROR; + goto done; + } + (void) snprintf(buf, MAX_INPUT, "boot"); + ret = ficlVmEvaluate(vm, buf); + if (ret != FICL_VM_STATUS_OUT_OF_TEXT) { + bam_error(_("error interpreting boot config\n")); + ret = BAM_ERROR; + goto done; + } + + ret = BAM_SUCCESS; + if (*setting == '\0') + (void) printf("\nTitle: %s\n", entry->title); + else if (strcasecmp(setting, "title") == 0) { + (void) printf("%s\n", entry->title); + goto done; + } + + ptr = getenv("autoboot_delay"); + if (ptr != NULL) { + char *timeout = "-1"; + + if (strcasecmp(ptr, "NO") != 0) + timeout = ptr; + + if (*setting == '\0') + (void) printf("Timeout: %s\n", timeout); + else if (strcasecmp(setting, "timeout") == 0) { + (void) printf("%s\n", timeout); + goto done; + } + + } + ptr = getenv("console"); + if (ptr != NULL) { + if (*setting == '\0') + (void) printf("Console: %s\n", ptr); + else if (strcasecmp(setting, "console") == 0) { + (void) printf("%s\n", ptr); + goto done; + } + } + + if (*setting == '\0') + (void) printf("Bootfs: %s\n", entry->bootfs); + else if (strcasecmp(setting, "bootfs") == 0) { + (void) printf("%s\n", entry->bootfs); + goto done; + } + + ptr = getenv("xen_kernel"); + if (ptr != NULL) { + if (*setting == '\0') { + (void) printf("Xen kernel: %s\n", ptr); + } else if (strcasecmp(setting, "xen_kernel") == 0) { + (void) printf("%s\n", ptr); + goto done; + } + + if (*setting == '\0') { + (void) printf("Xen args: \"%s\"\n", + getenv("xen_cmdline")); + } else if (strcasecmp(setting, "xen_cmdline") == 0) { + (void) printf("%s\n", getenv("xen_cmdline")); + goto done; + } + + if (*setting == '\0') { + (void) printf("Kernel: %s\n", + getenv("bootfile")); + } if (strcasecmp(setting, "kernel") == 0) { + (void) printf("%s\n", getenv("bootfile")); + goto done; + } + } else { + ptr = getenv("kernelname"); + if (ptr != NULL) { + if (*setting == '\0') { + (void) printf("Kernel: %s\n", ptr); + } else if (strcasecmp(setting, "kernel") == 0) { + (void) printf("%s\n", ptr); + goto done; + } + } + } + + ptr = getenv("boot-args"); + if (ptr != NULL) { + if (*setting == '\0') { + (void) printf("Boot-args: \"%s\"\n", ptr); + } else if (strcasecmp(setting, "boot-args") == 0) { + (void) printf("%s\n", ptr); + goto done; + } + } + + if (*setting == '\0' || strcasecmp(setting, "modules") == 0) { + (void) printf("\nModules:\n"); + ficlVmSetTextOut(vm, ficlCallbackDefaultTextOut); + (void) snprintf(buf, MAX_INPUT, "show-module-options"); + ret = ficlVmEvaluate(vm, buf); + if (ret != FICL_VM_STATUS_OUT_OF_TEXT) { + bam_error(_("error interpreting boot config\n")); + ret = BAM_ERROR; + goto done; + } + ret = BAM_SUCCESS; + goto done; + } + + /* if we got here with setting string, its unknown property */ + if (*setting != '\0') { + bam_error(_("unknown property: %s\n"), setting); + ret = BAM_ERROR; + } else + ret = BAM_SUCCESS; +done: + bf_fini(); + if (mounted != BE_ERR_MOUNTED) { + (void) bam_umount_be(dir); + } + + if (dir != NULL) { + (void) rmdir(dir); + free(dir); + } + + return (ret); +} + +/*ARGSUSED*/ +static error_t +list_entry(struct menu_lst *menu, char *menu_root, char *opt) +{ + error_t ret = BAM_SUCCESS; + struct menu_entry *entry; + char *ptr, *title = NULL; + int i, e = -1; + + if (opt == NULL) { + print_nodes(B_FALSE, menu); + return (ret); + } + + if ((ptr = strchr(opt, '=')) == NULL) { + bam_error(_("invalid option: %s\n"), opt); + return (BAM_ERROR); + } + + i = ptr - opt; + if (strncmp(opt, "entry", i) == 0) { + e = atoi(ptr+1); + } else if (strncmp(opt, "title", i) == 0) { + title = ptr+1; + } else { + bam_error(_("invalid option: %s\n"), opt); + return (BAM_ERROR); + } + + STAILQ_FOREACH(entry, menu, next) { + if (title != NULL) { + if (strcmp(title, entry->title) == 0) + break; + } else if (entry->entry == e) + break; + } + + if (entry == NULL) { + bam_error(_("no matching entry found\n")); + return (BAM_ERROR); + } + + return (list_menu_entry(entry, "")); +} + +/* + * For now this is just stub entry to support grub interface, the + * known consumer is installer ict.py code, calling as: + * bootadm update-menu -R /a -Z -o rdisk + * Later this can be converted to do something useful. + */ +/*ARGSUSED*/ +static error_t +update_entry(struct menu_lst *menu, char *menu_root, char *osdev) +{ + char path[PATH_MAX]; + char *pool = menu_root + 1; + be_node_list_t *be_nodes, *be_node; + int rv; + FILE *fp; + + (void) snprintf(path, PATH_MAX, "%s%s", menu_root, MENU); + rv = be_list(NULL, &be_nodes); + + if (rv != BE_SUCCESS) + return (BAM_ERROR); + + fp = fopen(path, "w"); + if (fp == NULL) { + be_free_list(be_nodes); + return (BAM_ERROR); + } + + for (be_node = be_nodes; be_node; be_node = be_node->be_next_node) { + if (strcmp(be_node->be_rpool, pool) == 0) { + (void) fprintf(fp, "title %s\n", be_node->be_node_name); + (void) fprintf(fp, "bootfs %s\n", be_node->be_root_ds); + } + } + + be_free_list(be_nodes); + (void) fclose(fp); + return (BAM_SUCCESS); +} + +/*ARGSUSED*/ +static error_t +update_temp(struct menu_lst *menu, char *dummy, char *opt) +{ + error_t ret = BAM_ERROR; + char path[PATH_MAX]; + char buf[MAX_INPUT]; + struct mnttab mpref = { 0 }; + struct mnttab mp = { 0 }; + ficlVm *vm; + char *env, *o; + FILE *fp; + + (void) snprintf(path, PATH_MAX, "%s" TRANSIENT, bam_root); + /* + * if opt == NULL, remove transient config + */ + if (opt == NULL) { + (void) unlink(path); + return (BAM_SUCCESS); + } + + fp = fopen(MNTTAB, "r"); + if (fp == NULL) + return (BAM_ERROR); + + mpref.mnt_mountp = "/"; + if (getmntany(fp, &mp, &mpref) != 0) { + (void) fclose(fp); + return (BAM_ERROR); + } + (void) fclose(fp); + + vm = bf_init("", ficlTextOutSilent); + if (vm == NULL) { + bam_error(_("Error setting up forth interpreter\n")); + return (ret); + } + + /* + * need to check current boot config, so fire up the ficl + * if its xen setup, we add option to boot-args list, not replacing it. + */ + (void) snprintf(buf, MAX_INPUT, "set currdev=zfs:%s:", mp.mnt_special); + ret = ficlVmEvaluate(vm, buf); + if (ret != FICL_VM_STATUS_OUT_OF_TEXT) { + bam_error(_("Error interpreting boot config\n")); + bf_fini(); + return (BAM_ERROR); + } + (void) snprintf(buf, MAX_INPUT, "include /boot/forth/loader.4th"); + ret = ficlVmEvaluate(vm, buf); + if (ret != FICL_VM_STATUS_OUT_OF_TEXT) { + bam_error(_("Error interpreting boot config\n")); + bf_fini(); + return (BAM_ERROR); + } + (void) snprintf(buf, MAX_INPUT, "start"); + ret = ficlVmEvaluate(vm, buf); + if (ret != FICL_VM_STATUS_OUT_OF_TEXT) { + bam_error(_("Error interpreting boot config\n")); + bf_fini(); + return (BAM_ERROR); + } + (void) snprintf(buf, MAX_INPUT, "boot"); + ret = ficlVmEvaluate(vm, buf); + if (ret != FICL_VM_STATUS_OUT_OF_TEXT) { + bam_error(_("Error interpreting boot config\n")); + bf_fini(); + return (BAM_ERROR); + } + bf_fini(); + + if (opt[0] == '-') { + env = getenv("xen_kernel"); + fp = fopen(path, "w"); + if (fp == NULL) + return (BAM_ERROR); + + if (env != NULL) { + env = getenv("boot-args"); + (void) fprintf(fp, "boot-args=\"%s %s\"\n", env, opt); + } else + (void) fprintf(fp, "boot-args=\"%s\"\n", opt); + (void) fclose(fp); + return (BAM_SUCCESS); + } + + /* + * it should be the case with "kernel args" + * so, we split the opt at first space + * and store bootfile= and boot-args= + */ + env = getenv("xen_kernel"); + + o = strchr(opt, ' '); + if (o == NULL) { + fp = fopen(path, "w"); + if (fp == NULL) + return (BAM_ERROR); + (void) fprintf(fp, "bootfile=\"%s\"\n", opt); + (void) fclose(fp); + return (BAM_SUCCESS); + } + *o++ = '\0'; + fp = fopen(path, "w"); + if (fp == NULL) + return (BAM_ERROR); + (void) fprintf(fp, "bootfile=\"%s\"\n", opt); + + if (env != NULL) { + env = getenv("boot-args"); + (void) fprintf(fp, "boot-args=\"%s %s\"\n", env, opt); + } else + (void) fprintf(fp, "boot-args=\"%s\"\n", o); + + (void) fflush(fp); + (void) fclose(fp); + return (ret); +} + +static error_t +list_setting(struct menu_lst *menu, char *which, char *setting) +{ + int entry = -1; + struct menu_entry *m; + be_node_list_t *be_nodes, *be_node = NULL; + int ret; + + assert(which); + assert(setting); + + /* + * which can be: + * "" - list default entry + * number - use for entry number + * property name + */ + if (*which != '\0') { + if (isdigit(*which)) { + char *rest; + errno = 0; + entry = strtol(which, &rest, 10); + if (errno != 0 || *rest != '\0') { + bam_error(_("invalid boot entry number: %s\n"), + which); + return (BAM_ERROR); + } + } else + setting = which; + } + + /* find default entry */ + if (entry == -1) { + ret = be_list(NULL, &be_nodes); + if (ret != BE_SUCCESS) { + bam_error(_("No BE's found\n")); + return (BAM_ERROR); + } + STAILQ_FOREACH(m, menu, next) { + entry++; + for (be_node = be_nodes; be_node; + be_node = be_node->be_next_node) + if (strcmp(be_node->be_root_ds, m->bootfs) == 0) + break; + if (be_node->be_active_on_boot == B_TRUE) + break; /* found active node */ + } + be_free_list(be_nodes); + if (be_node == NULL) { + bam_error(_("None of BE nodes is marked active\n")); + return (BAM_ERROR); + } + } else { + STAILQ_FOREACH(m, menu, next) + if (m->entry == entry) + break; + + if (m == NULL) { + bam_error(_("no matching entry found\n")); + return (BAM_ERROR); + } + } + + return (list_menu_entry(m, setting)); +} + +/*ARGSUSED*/ +static error_t +disable_hyper(struct menu_lst *menu, char *osroot, char *opt) +{ + char path[PATH_MAX]; + + (void) snprintf(path, PATH_MAX, "%s" XEN_CONFIG, bam_root); + (void) unlink(path); + return (BAM_SUCCESS); +} + +/*ARGSUSED*/ +static error_t +enable_hyper(struct menu_lst *menu, char *osroot, char *opt) +{ + ficlVm *vm; + char path[PATH_MAX]; + char buf[MAX_INPUT]; + char *env; + FILE *fp; + struct mnttab mpref = { 0 }; + struct mnttab mp = { 0 }; + int ret; + + fp = fopen(MNTTAB, "r"); + if (fp == NULL) + return (BAM_ERROR); + + mpref.mnt_mountp = "/"; + if (getmntany(fp, &mp, &mpref) != 0) { + (void) fclose(fp); + return (BAM_ERROR); + } + (void) fclose(fp); + + vm = bf_init("", ficlTextOutSilent); + if (vm == NULL) { + bam_error(_("Error setting up forth interpreter\n")); + return (BAM_ERROR); + } + + /* + * need to check current boot config, so fire up the ficl + * if its xen setup, we add option to boot-args list, not replacing it. + */ + (void) snprintf(buf, MAX_INPUT, "set currdev=zfs:%s:", mp.mnt_special); + ret = ficlVmEvaluate(vm, buf); + if (ret != FICL_VM_STATUS_OUT_OF_TEXT) { + bam_error(_("Error interpreting boot config\n")); + bf_fini(); + return (BAM_ERROR); + } + (void) snprintf(buf, MAX_INPUT, "include /boot/forth/loader.4th"); + ret = ficlVmEvaluate(vm, buf); + if (ret != FICL_VM_STATUS_OUT_OF_TEXT) { + bam_error(_("Error interpreting boot config\n")); + bf_fini(); + return (BAM_ERROR); + } + (void) snprintf(buf, MAX_INPUT, "start"); + ret = ficlVmEvaluate(vm, buf); + if (ret != FICL_VM_STATUS_OUT_OF_TEXT) { + bam_error(_("Error interpreting boot config\n")); + bf_fini(); + return (BAM_ERROR); + } + (void) snprintf(buf, MAX_INPUT, "boot"); + ret = ficlVmEvaluate(vm, buf); + if (ret != FICL_VM_STATUS_OUT_OF_TEXT) { + bam_error(_("Error interpreting boot config\n")); + bf_fini(); + return (BAM_ERROR); + } + bf_fini(); + + (void) mkdir(CONF_DIR, 0755); + (void) snprintf(path, PATH_MAX, "%s" XEN_CONFIG, bam_root); + fp = fopen(path, "w"); + if (fp == NULL) { + return (BAM_ERROR); /* error, cant write config */ + } + + errno = 0; + /* + * on write error, remove file to ensure we have bootable config. + * note we dont mind if config exists, it will get updated + */ + (void) fprintf(fp, "xen_kernel=\"/boot/${ISADIR}/xen\"\n"); + if (errno != 0) + goto error; + + /* + * really simple and stupid console conversion. + * it really has to be gone, it belongs to milestone/xvm properties. + */ + env = getenv("console"); + if (env != NULL) { + if (strcmp(env, "ttya") == 0) + (void) fprintf(fp, "xen_cmdline=\"console=com1 %s\"\n", + opt); + else if (strcmp(env, "ttyb") == 0) + (void) fprintf(fp, "xen_cmdline=\"console=com2 %s\"\n", + opt); + else + (void) fprintf(fp, "xen_cmdline=\"console=vga %s\"\n", + opt); + } else + (void) fprintf(fp, "xen_cmdline=\"%s\"\n", opt); + if (errno != 0) + goto error; + + (void) fprintf(fp, + "bootfile=\"/platform/i86xpv/kernel/${ISADIR}/unix\"\n"); + if (errno != 0) + goto error; + + (void) fprintf(fp, + "boot-args=\"/platform/i86xpv/kernel/${ISADIR}/unix\"\n"); + if (errno != 0) + goto error; + + (void) fclose(fp); + if (errno != 0) { + (void) unlink(path); + return (BAM_ERROR); + } + return (BAM_SUCCESS); +error: + (void) fclose(fp); + (void) unlink(path); + return (BAM_ERROR); +} diff --git a/usr/src/cmd/boot/bootadm/bootadm_upgrade.c b/usr/src/cmd/boot/bootadm/bootadm_upgrade.c index aafff97207..0a6b95f7ed 100644 --- a/usr/src/cmd/boot/bootadm/bootadm_upgrade.c +++ b/usr/src/cmd/boot/bootadm/bootadm_upgrade.c @@ -21,7 +21,7 @@ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. - * Copyright 2015 Toomas Soome + * Copyright 2016 Toomas Soome */ #include @@ -39,7 +39,6 @@ #include #include -#include "message.h" #include "bootadm.h" direct_or_multi_t bam_direct = BAM_DIRECT_NOT_SET; @@ -63,7 +62,7 @@ get_findroot_cap(const char *osroot) if (stat(path, &sb) == -1) { bam_is_findroot = BAM_FINDROOT_ABSENT; - BAM_DPRINTF((D_FINDROOT_ABSENT, fcn)); + BAM_DPRINTF(("%s: findroot capability absent\n", fcn)); return; } @@ -71,18 +70,19 @@ get_findroot_cap(const char *osroot) error = errno; INJECT_ERROR1("GET_CAP_FINDROOT_FOPEN", fp = NULL); if (fp == NULL) { - bam_error(OPEN_FAIL, path, strerror(error)); + bam_error(_("failed to open file: %s: %s\n"), path, + strerror(error)); return; } dboot = 0; while (s_fgets(buf, sizeof (buf), fp) != NULL) { if (strcmp(buf, "findroot") == 0) { - BAM_DPRINTF((D_FINDROOT_PRESENT, fcn)); + BAM_DPRINTF(("%s: findroot capability present\n", fcn)); bam_is_findroot = BAM_FINDROOT_PRESENT; } if (strcmp(buf, "dboot") == 0) { - BAM_DPRINTF((D_DBOOT_PRESENT, fcn)); + BAM_DPRINTF(("%s: dboot capability present\n", fcn)); dboot = 1; } } @@ -91,14 +91,15 @@ get_findroot_cap(const char *osroot) if (bam_is_findroot == BAM_FINDROOT_UNKNOWN) { bam_is_findroot = BAM_FINDROOT_ABSENT; - BAM_DPRINTF((D_FINDROOT_ABSENT, fcn)); + BAM_DPRINTF(("%s: findroot capability absent\n", fcn)); } ret = fclose(fp); error = errno; INJECT_ERROR1("GET_CAP_FINDROOT_FCLOSE", ret = 1); if (ret != 0) { - bam_error(CLOSE_FAIL, path, strerror(error)); + bam_error(_("failed to close file: %s: %s\n"), + path, strerror(error)); } } @@ -118,7 +119,7 @@ get_boot_cap(const char *osroot) if (is_sparc()) { /* there is no non dboot sparc new-boot */ bam_direct = BAM_DIRECT_DBOOT; - BAM_DPRINTF((D_IS_SPARC_DBOOT, fcn)); + BAM_DPRINTF(("%s: is sparc - always DBOOT\n", fcn)); return (BAM_SUCCESS); } @@ -128,7 +129,8 @@ get_boot_cap(const char *osroot) error = errno; INJECT_ERROR1("GET_CAP_UNIX_OPEN", fd = -1); if (fd < 0) { - bam_error(OPEN_FAIL, fname, strerror(error)); + bam_error(_("failed to open file: %s: %s\n"), fname, + strerror(error)); return (BAM_ERROR); } @@ -137,7 +139,7 @@ get_boot_cap(const char *osroot) */ if (fstat(fd, &sb) == -1 || sb.st_size < 8192) { (void) close(fd); - bam_error(INVALID_BINARY, fname); + bam_error(_("invalid or corrupted binary: %s\n"), fname); return (BAM_ERROR); } @@ -148,18 +150,20 @@ get_boot_cap(const char *osroot) error = errno; INJECT_ERROR1("GET_CAP_MMAP", image = MAP_FAILED); if (image == MAP_FAILED) { - bam_error(MMAP_FAIL, fname, strerror(error)); + bam_error(_("failed to mmap file: %s: %s\n"), fname, + strerror(error)); return (BAM_ERROR); } ident = (uchar_t *)image; if (ident[EI_MAG0] != ELFMAG0 || ident[EI_MAG1] != ELFMAG1 || ident[EI_MAG2] != ELFMAG2 || ident[EI_MAG3] != ELFMAG3) { - bam_error(NOT_ELF_FILE, fname); + bam_error(_("%s is not an ELF file.\n"), fname); return (BAM_ERROR); } if (ident[EI_CLASS] != ELFCLASS32) { - bam_error(WRONG_ELF_CLASS, fname, ident[EI_CLASS]); + bam_error(_("%s is wrong ELF class 0x%x\n"), fname, + ident[EI_CLASS]); return (BAM_ERROR); } @@ -174,7 +178,7 @@ get_boot_cap(const char *osroot) for (m = 0; m < 8192 - sizeof (multiboot_header_t); m += 4) { mbh = (void *)(image + m); if (mbh->magic == MB_HEADER_MAGIC) { - BAM_DPRINTF((D_IS_DBOOT, fcn)); + BAM_DPRINTF(("%s: is DBOOT unix\n", fcn)); bam_direct = BAM_DIRECT_DBOOT; break; } @@ -185,18 +189,18 @@ get_boot_cap(const char *osroot) INJECT_ERROR1("GET_CAP_MULTIBOOT", bam_direct = BAM_DIRECT_MULTIBOOT); if (bam_direct == BAM_DIRECT_DBOOT) { if (bam_is_hv == BAM_HV_PRESENT) { - BAM_DPRINTF((D_IS_XVM, fcn)); + BAM_DPRINTF(("%s: is xVM system\n", fcn)); } else { - BAM_DPRINTF((D_IS_NOT_XVM, fcn)); + BAM_DPRINTF(("%s: is *NOT* xVM system\n", fcn)); } } else { - BAM_DPRINTF((D_IS_MULTIBOOT, fcn)); + BAM_DPRINTF(("%s: is MULTIBOOT unix\n", fcn)); } /* Not a fatal error if this fails */ get_findroot_cap(osroot); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (BAM_SUCCESS); } @@ -216,17 +220,18 @@ is_bfu_system(const char *root) const char *fcn = "is_bfu_system()"; if (is_bfu != -1) { - BAM_DPRINTF((D_ALREADY_BFU_TEST, fcn, is_bfu ? "" : "NOT")); + BAM_DPRINTF(("%s: already done bfu test. bfu is %s present\n", + fcn, is_bfu ? "" : "NOT")); return (is_bfu); } (void) snprintf(path, sizeof (path), "%s/%s", root, INST_RELEASE); if (stat(path, &sb) != 0) { is_bfu = 1; - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); } else { is_bfu = 0; - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); } return (is_bfu); } @@ -244,13 +249,13 @@ update_line(line_t *linep) size_t size; const char *fcn = "update_line()"; - BAM_DPRINTF((D_UPDATE_LINE_BEFORE, fcn, linep->line)); + BAM_DPRINTF(("%s: line before update: %s\n", fcn, linep->line)); free(linep->line); size = strlen(linep->cmd) + strlen(linep->sep) + strlen(linep->arg) + 1; linep->line = s_calloc(1, size); (void) snprintf(linep->line, size, "%s%s%s", linep->cmd, linep->sep, linep->arg); - BAM_DPRINTF((D_UPDATE_LINE_AFTER, fcn, linep->line)); + BAM_DPRINTF(("%s: line after update: %s\n", fcn, linep->line)); } static char * @@ -260,11 +265,11 @@ skip_wspace(char *ptr) INJECT_ERROR1("SKIP_WSPACE", ptr = NULL); if (ptr == NULL) { - BAM_DPRINTF((D_SKIP_WSPACE_PTR_NULL, fcn)); + BAM_DPRINTF(("%s: NULL ptr\n", fcn)); return (NULL); } - BAM_DPRINTF((D_SKIP_WSPACE_ENTRY_PTR, fcn, ptr)); + BAM_DPRINTF(("%s: ptr on entry: %s\n", fcn, ptr)); for (; *ptr != '\0'; ptr++) { if ((*ptr != ' ') && (*ptr != '\t') && (*ptr != '\n')) @@ -273,7 +278,7 @@ skip_wspace(char *ptr) ptr = (*ptr == '\0' ? NULL : ptr); - BAM_DPRINTF((D_SKIP_WSPACE_EXIT_PTR, fcn, ptr ? ptr : "NULL")); + BAM_DPRINTF(("%s: ptr on exit: %s\n", fcn, ptr ? ptr : "NULL")); return (ptr); } @@ -287,13 +292,13 @@ rskip_bspace(char *bound, char *ptr) assert(bound <= ptr); assert(*bound != ' ' && *bound != '\t' && *bound != '\n'); - BAM_DPRINTF((D_RSKIP_BSPACE_ENTRY, fcn, ptr)); + BAM_DPRINTF(("%s: ptr on entry: %s\n", fcn, ptr)); for (; ptr > bound; ptr--) { if (*ptr == ' ' || *ptr == '\t' || *ptr == '\n') break; } - BAM_DPRINTF((D_RSKIP_BSPACE_EXIT, fcn, ptr)); + BAM_DPRINTF(("%s: ptr on exit: %s\n", fcn, ptr)); return (ptr); } @@ -350,13 +355,13 @@ cvt_kernel_line(line_t *line, const char *osroot, entry_t *entry) char *flags2_ptr; const char *fcn = "cvt_kernel_line()"; - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, line->line, osroot)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, line->line, osroot)); /* * We only convert multiboot to dboot and nothing else. */ if (!(entry->flags & BAM_ENTRY_MULTIBOOT)) { - BAM_DPRINTF((D_NOT_MULTIBOOT_CONVERT, fcn)); + BAM_DPRINTF(("%s: not MULTIBOOT, not converting\n", fcn)); return (BAM_SUCCESS); } @@ -368,16 +373,19 @@ cvt_kernel_line(line_t *line, const char *osroot, entry_t *entry) * If so, just emit a message in verbose mode and * return success. */ - BAM_DPRINTF((D_TRYING_FAILSAFE_CVT_TO_DBOOT, fcn)); + BAM_DPRINTF(("%s: trying to convert failsafe to DBOOT\n", fcn)); (void) snprintf(path, PATH_MAX, "%s%s", osroot, DIRECT_BOOT_FAILSAFE_32); (void) snprintf(path_64, PATH_MAX, "%s%s", osroot, DIRECT_BOOT_FAILSAFE_64); if (stat(path, &sb) != 0 && stat(path_64, &sb_64) != 0) { if (bam_verbose) { - bam_error(FAILSAFE_MISSING, line->lineNum); + bam_error(_("bootadm -m upgrade run, but the " + "failsafe archives have not been\nupdated. " + "Not updating line %d\n"), line->lineNum); } - BAM_DPRINTF((D_NO_FAILSAFE_UNIX_CONVERT, fcn)); + BAM_DPRINTF(("%s: no FAILSAFE unix, not converting\n", + fcn)); return (BAM_SUCCESS); } } @@ -388,7 +396,7 @@ cvt_kernel_line(line_t *line, const char *osroot, entry_t *entry) free(line->cmd); line->cmd = s_strdup(menu_cmds[KERNEL_DOLLAR_CMD]); - BAM_DPRINTF((D_CVT_CMD_KERN_DOLLAR, fcn, line->cmd)); + BAM_DPRINTF(("%s: converted kernel cmd to %s\n", fcn, line->cmd)); assert(sizeof (linebuf) > strlen(line->arg) + 32); (void) strlcpy(linebuf, line->arg, sizeof (linebuf)); @@ -401,7 +409,7 @@ cvt_kernel_line(line_t *line, const char *osroot, entry_t *entry) * i.e. flags1 = unix = flags2 = NULL */ flags1_ptr = unix_ptr = flags2_ptr = NULL; - BAM_DPRINTF((D_FLAGS1_UNIX_FLAGS2_NULL, fcn)) + BAM_DPRINTF(("%s: NULL flags1, unix, flags2\n", fcn)) goto create; } @@ -414,15 +422,16 @@ cvt_kernel_line(line_t *line, const char *osroot, entry_t *entry) /* * There is a unix. */ - BAM_DPRINTF((D_UNIX_PRESENT, fcn)); + BAM_DPRINTF(("%s: unix present\n", fcn)); /* See if there's a flags2 past unix */ flags2_ptr = unix_ptr + strlen("/unix"); flags2_ptr = skip_wspace(flags2_ptr); if (flags2_ptr) { - BAM_DPRINTF((D_FLAGS2_PRESENT, fcn, flags2_ptr)); + BAM_DPRINTF(("%s: flags2 present: %s\n", fcn, + flags2_ptr)); } else { - BAM_DPRINTF((D_FLAGS2_ABSENT, fcn)); + BAM_DPRINTF(("%s: flags2 absent\n", fcn)); } /* see if there is a flags1 before unix */ @@ -430,19 +439,21 @@ cvt_kernel_line(line_t *line, const char *osroot, entry_t *entry) if (unix_ptr == old_ptr) { flags1_ptr = NULL; - BAM_DPRINTF((D_FLAGS1_ABSENT, fcn)); + BAM_DPRINTF(("%s: flags1 absent\n", fcn)); } else { flags1_ptr = old_ptr; *unix_ptr = '\0'; unix_ptr++; - BAM_DPRINTF((D_FLAGS1_PRESENT, fcn, flags1_ptr)); + BAM_DPRINTF(("%s: flags1 present: %s\n", fcn, + flags1_ptr)); } } else { /* There is no unix, there is only a bunch of flags */ flags1_ptr = old_ptr; unix_ptr = flags2_ptr = NULL; - BAM_DPRINTF((D_FLAGS1_ONLY, fcn, flags1_ptr)); + BAM_DPRINTF(("%s: flags1 present: %s, unix, flags2 absent\n", + fcn, flags1_ptr)); } /* @@ -457,7 +468,7 @@ create: (void) snprintf(new_arg, sizeof (new_arg), "%s", DIRECT_BOOT_KERNEL); } - BAM_DPRINTF((D_CVTED_UNIX, fcn, new_arg)); + BAM_DPRINTF(("%s: converted unix: %s\n", fcn, new_arg)); if (flags1_ptr != NULL) { (void) strlcat(new_arg, " ", sizeof (new_arg)); @@ -469,12 +480,12 @@ create: (void) strlcat(new_arg, flags2_ptr, sizeof (new_arg)); } - BAM_DPRINTF((D_CVTED_UNIX_AND_FLAGS, fcn, new_arg)); + BAM_DPRINTF(("%s: converted unix with flags : %s\n", fcn, new_arg)); free(line->arg); line->arg = s_strdup(new_arg); update_line(line); - BAM_DPRINTF((D_CVTED_KERNEL_LINE, fcn, line->line)); + BAM_DPRINTF(("%s: converted line is: %s\n", fcn, line->line)); return (BAM_SUCCESS); } @@ -513,25 +524,27 @@ cvt_module_line(line_t *line, entry_t *entry) { const char *fcn = "cvt_module_line()"; - BAM_DPRINTF((D_FUNC_ENTRY1, fcn, line->line)); + BAM_DPRINTF(("%s: entered. arg: %s\n", fcn, line->line)); /* * We only convert multiboot to dboot and nothing else */ if (!(entry->flags & BAM_ENTRY_MULTIBOOT)) { - BAM_DPRINTF((D_NOT_MULTIBOOT_CONVERT, fcn)); + BAM_DPRINTF(("%s: not MULTIBOOT, not converting\n", fcn)); return (BAM_SUCCESS); } if (entry->flags & BAM_ENTRY_FAILSAFE) { if (strcmp(line->arg, FAILSAFE_ARCHIVE) == 0) { - BAM_DPRINTF((D_FAILSAFE_NO_CVT_NEEDED, fcn, line->arg)); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: failsafe module line needs no " + "conversion: %s\n", fcn, line->arg)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (BAM_SUCCESS); } } else if (strcmp(line->arg, MULTIBOOT_ARCHIVE) != 0) { - bam_error(UNKNOWN_MODULE_LINE, line->lineNum); - BAM_DPRINTF((D_RETURN_FAILURE, fcn)); + bam_error(_("module command on line %d not recognized.\n"), + line->lineNum); + BAM_DPRINTF(("%s: returning FAILURE\n", fcn)); return (BAM_MSG); } @@ -543,8 +556,8 @@ cvt_module_line(line_t *line, entry_t *entry) FAILSAFE_ARCHIVE : DIRECT_BOOT_ARCHIVE); update_line(line); - BAM_DPRINTF((D_CVTED_MODULE, fcn, line->line)); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: converted module line is: %s\n", fcn, line->line)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (BAM_SUCCESS); } @@ -563,7 +576,8 @@ bam_warn_hand_entries(menu_t *mp, char *osroot) * No warning needed, we are automatically converting * the "hand" entries */ - BAM_DPRINTF((D_FORCE_HAND_CVT, fcn)); + BAM_DPRINTF(("%s: force specified, no warnings about hand " + "entries\n", fcn)); return; } @@ -574,7 +588,8 @@ bam_warn_hand_entries(menu_t *mp, char *osroot) for (entry = mp->entries; entry; entry = entry->next) { if (entry->flags & (BAM_ENTRY_BOOTADM|BAM_ENTRY_LU)) continue; - BAM_DPRINTF((D_FOUND_HAND, fcn, entry->entryNum)); + BAM_DPRINTF(("%s: found hand entry #: %d\n", fcn, + entry->entryNum)); if (++hand_num > hand_max) { hand_max *= 2; hand_list = s_realloc(hand_list, @@ -583,7 +598,10 @@ bam_warn_hand_entries(menu_t *mp, char *osroot) hand_list[hand_num - 1] = entry->entryNum; } - bam_error(HAND_ADDED_ENTRIES, osroot, MENU_URL(osroot)); + bam_error(_("bootadm(1M) will only upgrade GRUB menu entries added " + "by \nbootadm(1M) or lu(1M). The following entries on %s will " + "not be upgraded.\nFor details on manually updating entries, " + "see %s\n"), osroot, MENU_URL(osroot)); bam_print_stderr("Entry Number%s: ", (hand_num > 1) ? "s" : ""); for (i = 0; i < hand_num; i++) { @@ -608,13 +626,15 @@ find_matching_entry( assert(root_opt == 0 || root_opt == 1); (void) snprintf(opt, sizeof (opt), "%d", root_opt); - BAM_DPRINTF((D_FUNC_ENTRY3, fcn, grubsign, grubroot, opt)); + BAM_DPRINTF(("%s: entered. args: %s %s %s\n", fcn, grubsign, + grubroot, opt)); for (entry = estart; entry; entry = entry->next) { if (!(entry->flags & (BAM_ENTRY_BOOTADM|BAM_ENTRY_LU)) && !bam_force) { - BAM_DPRINTF((D_SKIP_ENTRY, fcn, entry->entryNum)); + BAM_DPRINTF(("%s: skipping hand entry #: %d\n", + fcn, entry->entryNum)); continue; } @@ -622,21 +642,25 @@ find_matching_entry( for (line = entry->start; line; line = line->next) { if (line->cmd == NULL || line->arg == NULL) { if (line == entry->end) { - BAM_DPRINTF((D_ENTRY_END, fcn)); + BAM_DPRINTF(("%s: entry has " + "ended\n", fcn)); break; } else { - BAM_DPRINTF((D_SKIP_NULL, fcn)); + BAM_DPRINTF(("%s: skipping " + "NULL line\n", fcn)); continue; } } if (strcmp(line->cmd, menu_cmds[ROOT_CMD]) == 0 && strcmp(line->arg, grubroot) == 0) { - BAM_DPRINTF((D_ROOT_MATCH, fcn, + BAM_DPRINTF(("%s: found matching root " + "line: %s,%s\n", fcn, line->line, grubsign)); return (entry); } if (line == entry->end) { - BAM_DPRINTF((D_ENTRY_END, fcn)); + BAM_DPRINTF(("%s: entry has ended\n", + fcn)); break; } } @@ -644,32 +668,37 @@ find_matching_entry( for (line = entry->start; line; line = line->next) { if (line->cmd == NULL || line->arg == NULL) { if (line == entry->end) { - BAM_DPRINTF((D_ENTRY_END, fcn)); + BAM_DPRINTF(("%s: entry has " + "ended\n", fcn)); break; } else { - BAM_DPRINTF((D_SKIP_NULL, fcn)); + BAM_DPRINTF(("%s: skipping " + "NULL line\n", fcn)); continue; } } if (strcmp(line->cmd, menu_cmds[FINDROOT_CMD]) == 0 && strcmp(line->arg, grubsign) == 0) { - BAM_DPRINTF((D_FINDROOT_MATCH, fcn, + BAM_DPRINTF(("%s: found matching " + "findroot line: %s,%s\n", fcn, line->line, grubsign)); return (entry); } if (line == entry->end) { - BAM_DPRINTF((D_ENTRY_END, fcn)); + BAM_DPRINTF(("%s: entry has ended\n", + fcn)); break; } } } else if (root_opt) { /* Neither root nor findroot */ - BAM_DPRINTF((D_NO_ROOT_FINDROOT, fcn, entry->entryNum)); + BAM_DPRINTF(("%s: no root or findroot and root is " + "opt: %d\n", fcn, entry->entryNum)); return (entry); } } - BAM_DPRINTF((D_NO_MATCH, fcn)); + BAM_DPRINTF(("%s: no matching entry found\n", fcn)); return (NULL); } @@ -700,13 +729,14 @@ bam_add_findroot(menu_t *mp, char *grubsign, char *grubroot, int root_opt) update_num = 0; - bam_print(CVT_FINDROOT); + bam_print(_("converting entries to findroot...\n")); entry = find_matching_entry(mp->entries, grubsign, grubroot, root_opt); while (entry != NULL) { if (entry->flags & BAM_ENTRY_FINDROOT) { /* already converted */ - BAM_DPRINTF((D_ALREADY_FINDROOT, fcn, entry->entryNum)); + BAM_DPRINTF(("%s: entry %d already converted to " + "findroot\n", fcn, entry->entryNum)); entry = find_matching_entry(entry->next, grubsign, grubroot, root_opt); continue; @@ -714,10 +744,12 @@ bam_add_findroot(menu_t *mp, char *grubsign, char *grubroot, int root_opt) for (line = entry->start; line; line = line->next) { if (line->cmd == NULL || line->arg == NULL) { if (line == entry->end) { - BAM_DPRINTF((D_ENTRY_END, fcn)); + BAM_DPRINTF(("%s: entry has ended\n", + fcn)); break; } else { - BAM_DPRINTF((D_SKIP_NULL, fcn)); + BAM_DPRINTF(("%s: skipping NULL line\n", + fcn)); continue; } } @@ -734,17 +766,18 @@ bam_add_findroot(menu_t *mp, char *grubsign, char *grubroot, int root_opt) update_num = 1; entry->flags &= ~BAM_ENTRY_ROOT; entry->flags |= BAM_ENTRY_FINDROOT; - BAM_DPRINTF((D_ADDED_FINDROOT, fcn, - newlp->line)); + BAM_DPRINTF(("%s: added findroot line: %s\n", + fcn, newlp->line)); line = newlp; } if (strcmp(line->cmd, menu_cmds[ROOT_CMD]) == 0) { - BAM_DPRINTF((D_FREEING_ROOT, fcn, line->line)); + BAM_DPRINTF(("%s: freeing root line: %s\n", + fcn, line->line)); unlink_line(mp, line); line_free(line); } if (line == entry->end) { - BAM_DPRINTF((D_ENTRY_END, fcn)); + BAM_DPRINTF(("%s: entry has ended\n", fcn)); break; } } @@ -753,11 +786,11 @@ bam_add_findroot(menu_t *mp, char *grubsign, char *grubroot, int root_opt) } if (update_num) { - BAM_DPRINTF((D_UPDATED_NUMBERING, fcn)); + BAM_DPRINTF(("%s: updated numbering\n", fcn)); update_numbering(mp); } - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (BAM_SUCCESS); } @@ -767,12 +800,13 @@ bam_add_hv(menu_t *mp, char *grubsign, char *grubroot, int root_opt) entry_t *entry; const char *fcn = "bam_add_hv()"; - bam_print(CVT_HV); + bam_print(_("adding xVM entries...\n")); entry = find_matching_entry(mp->entries, grubsign, grubroot, root_opt); while (entry != NULL) { if (entry->flags & BAM_ENTRY_HV) { - BAM_DPRINTF((D_ALREADY_HV, fcn, entry->entryNum)); + BAM_DPRINTF(("%s: entry %d already converted to " + "xvm HV\n", fcn, entry->entryNum)); return (BAM_SUCCESS); } entry = find_matching_entry(entry->next, grubsign, grubroot, @@ -782,11 +816,11 @@ bam_add_hv(menu_t *mp, char *grubsign, char *grubroot, int root_opt) (void) add_boot_entry(mp, NEW_HV_ENTRY, grubsign, XEN_MENU, XEN_KERNEL_MODULE_LINE, DIRECT_BOOT_ARCHIVE, NULL); - BAM_DPRINTF((D_ADDED_XVM_ENTRY, fcn)); + BAM_DPRINTF(("%s: added xVM HV entry via add_boot_entry()\n", fcn)); update_numbering(mp); - BAM_DPRINTF((D_RETURN_SUCCESS, fcn)); + BAM_DPRINTF(("%s: returning SUCCESS\n", fcn)); return (BAM_SUCCESS); } @@ -805,17 +839,19 @@ bam_add_dboot( error_t ret; const char *fcn = "bam_add_dboot()"; - bam_print(CVT_DBOOT); + bam_print(_("converting entries to dboot...\n")); entry = find_matching_entry(mp->entries, grubsign, grubroot, root_opt); while (entry != NULL) { for (line = entry->start; line; line = line->next) { if (line->cmd == NULL || line->arg == NULL) { if (line == entry->end) { - BAM_DPRINTF((D_ENTRY_END, fcn)); + BAM_DPRINTF(("%s: entry has ended\n", + fcn)); break; } else { - BAM_DPRINTF((D_SKIP_NULL, fcn)); + BAM_DPRINTF(("%s: skipping NULL line\n", + fcn)); continue; } } @@ -833,11 +869,13 @@ bam_add_dboot( INJECT_ERROR1("ADD_DBOOT_KERN_MSG", ret = BAM_MSG); if (ret == BAM_ERROR) { - BAM_DPRINTF((D_CVT_KERNEL_FAIL, fcn)); + BAM_DPRINTF(("%s: cvt_kernel_line() " + "failed\n", fcn)); return (ret); } else if (ret == BAM_MSG) { msg = 1; - BAM_DPRINTF((D_CVT_KERNEL_MSG, fcn)); + BAM_DPRINTF(("%s: BAM_MSG returned " + "from cvt_kernel_line()\n", fcn)); } } if (strcmp(line->cmd, menu_cmds[MODULE_CMD]) == 0) { @@ -847,16 +885,18 @@ bam_add_dboot( INJECT_ERROR1("ADD_DBOOT_MOD_MSG", ret = BAM_MSG); if (ret == BAM_ERROR) { - BAM_DPRINTF((D_CVT_MODULE_FAIL, fcn)); + BAM_DPRINTF(("%s: cvt_module_line() " + "failed\n", fcn)); return (ret); } else if (ret == BAM_MSG) { - BAM_DPRINTF((D_CVT_MODULE_MSG, fcn)); + BAM_DPRINTF(("%s: BAM_MSG returned " + "from cvt_module_line()\n", fcn)); msg = 1; } } if (line == entry->end) { - BAM_DPRINTF((D_ENTRY_END, fcn)); + BAM_DPRINTF(("%s: entry has ended\n", fcn)); break; } } @@ -865,7 +905,7 @@ bam_add_dboot( } ret = msg ? BAM_MSG : BAM_SUCCESS; - BAM_DPRINTF((D_RETURN_RET, fcn, ret)); + BAM_DPRINTF(("%s: returning ret = %d\n", fcn, ret)); return (ret); } @@ -884,7 +924,7 @@ upgrade_menu(menu_t *mp, char *osroot, char *menu_root) assert(osroot); assert(menu_root); - BAM_DPRINTF((D_FUNC_ENTRY2, fcn, osroot, menu_root)); + BAM_DPRINTF(("%s: entered. args: %s %s\n", fcn, osroot, menu_root)); /* * We only support upgrades. Xen may not be present @@ -892,7 +932,8 @@ upgrade_menu(menu_t *mp, char *osroot, char *menu_root) */ if (bam_is_findroot != BAM_FINDROOT_PRESENT || bam_direct != BAM_DIRECT_DBOOT) { - bam_error(DOWNGRADE_NOTSUP); + bam_error(_("automated downgrade of GRUB menu to older " + "version not supported.\n")); return (BAM_ERROR); } @@ -902,7 +943,8 @@ upgrade_menu(menu_t *mp, char *osroot, char *menu_root) osdev = get_special(osroot); INJECT_ERROR1("UPGRADE_OSDEV", osdev = NULL); if (osdev == NULL) { - bam_error(CANT_FIND_SPECIAL, osroot); + bam_error(_("cant find special file for mount-point %s\n"), + osroot); return (BAM_ERROR); } @@ -910,7 +952,7 @@ upgrade_menu(menu_t *mp, char *osroot, char *menu_root) INJECT_ERROR1("UPGRADE_GRUBSIGN", grubsign = NULL); if (grubsign == NULL) { free(osdev); - bam_error(CANT_FIND_GRUBSIGN, osroot); + bam_error(_("cannot find GRUB signature for %s\n"), osroot); return (BAM_ERROR); } @@ -942,18 +984,22 @@ upgrade_menu(menu_t *mp, char *osroot, char *menu_root) goto abort; if (ret1 == BAM_MSG || ret2 == BAM_MSG || ret3 == BAM_MSG) { - bam_error(CVT_TODO, MENU_URL(osroot)); + bam_error(_("one or more GRUB menu entries were not " + "automatically upgraded\nFor details on manually " + "updating entries, see %s\n"), MENU_URL(osroot)); } else { bam_warn_hand_entries(mp, osroot); } free(grubsign); - BAM_DPRINTF((D_RETURN_RET, fcn, BAM_WRITE)); + BAM_DPRINTF(("%s: returning ret = %d\n", fcn, BAM_WRITE)); return (BAM_WRITE); abort: free(grubsign); - bam_error(CVT_ABORT, osroot, MENU_URL(osroot)); + bam_error(_("error upgrading GRUB menu entries on %s. Aborting.\n" + "For details on manually updating entries, see %s\n"), osroot, + MENU_URL(osroot)); return (BAM_ERROR); } diff --git a/usr/src/cmd/boot/bootadm/message.h b/usr/src/cmd/boot/bootadm/message.h deleted file mode 100644 index 4e43b5c3da..0000000000 --- a/usr/src/cmd/boot/bootadm/message.h +++ /dev/null @@ -1,1354 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2009 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - * Copyright 2015 Toomas Soome - */ - -#ifndef _MESSAGE_H -#define _MESSAGE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#ifndef lint -#define _(x) gettext(x) -#else -#define _(x) (x) -#endif - -#define FILE_MISS _("file not found: %s\n") - -#define ARCH_EXEC_MISS _("archive creation file not found: %s: %s\n") - -#define PATH_EXEC_OWNER _("%s is not owned by %d, skipping\n") - -#define PATH_EXEC_LINK _("%s is not a regular file, skipping\n") - -#define PATH_EXEC_PERMS _("%s is others or group writable, skipping\n") - -#define UPDATE_CACHE_OLD _("archive cache is out of sync. Rebuilding.\n") - -#define MUST_BE_ROOT _("you must be root to run this command\n") - -#define NOT_ARCHIVE_BOOT \ - _("%s: not a boot archive based Solaris instance\n") - -#define MULT_CMDS _("multiple commands specified: -%c\n") - -#define INVALID_SUBCMD _("invalid sub-command specified: %s\n") - -#define NEED_SUBCMD _("this command requires a sub-command\n") - -#define NEED_CMD _("a command option must be specified\n") - -#define DUP_OPT _("duplicate options specified: -%c\n") - -#define BAD_OPT _("invalid option or missing option argument: -%c\n") - -#define NO_OPT_REQ _("this sub-command (%s) does not take options\n") - -#define MISS_OPT _("an option is required for this sub-command: %s\n") - -#define ABS_PATH_REQ _("path is not absolute: %s\n") - -#define PATH_TOO_LONG \ - _("unable to create path on mountpoint %s, path too long\n") - -#define TOO_LONG _("the following line is too long (> %d chars)\n\t%s\n") - -#define NOT_GRUB_BOOT \ - _("not a GRUB 0.97 based Illumos instance. Operation not supported\n") - -#define NOT_GRUB_ROOT _("missing /boot/grub on root: %s\n") - -#define ALT_ROOT_INVALID \ - _("an alternate root (%s) cannot be used with this sub-command\n") - -#define NO_ENTRY _("no %s entry found\n") - -#define NO_MATCH_ENTRY _("no matching entry found\n") - -#define NO_BOOTADM_MATCH _("no matching bootadm entry found\n") - -#define NO_MEM _("could not allocate memory: size = %u\n") - -#define NO_SPARC _("%s operation unsupported on SPARC machines\n") - -#define CANNOT_LOCATE_GRUB_MENU _("cannot find GRUB menu\n") - -#define CANNOT_LOCATE_GRUB_MENU_FILE _("cannot find GRUB menu file: %s\n") - -#define GRUB_MENU_PATH _("the location for the active GRUB menu is: %s\n") - -#define STUBBOOT_DIR_NOT_FOUND _("cannot find stubboot directory\n") - -#define NO_CMD _("no command at line %d\n") - -#define DUP_CMD \ - _("duplicate command %s at line %d of %sboot/grub/menu.lst\n") - -#define NO_MENU _("menu file not found: %s\n") - -#define GLOBAL_CMD _("%s %s\n") - -#define INVALID_ENTRY _("invalid boot entry number: %s\n") - -#define INVALID_OPTION _("invalid option: %s\n") - -#define SUBOPT_MISS _("missing suboption: %s\n") - -#define NO_KERNEL _("no kernel line found in entry %d\n") - -#define EMPTY_MENU _("the GRUB menu is empty\n") - -#define UNLINK_EMPTY _("file is empty, deleting file: %s\n") - -#define UNLINK_FAIL _("failed to unlink file: %s: %s\n") - -#define NO_MATCH _("no matching entry found: %s\n") - -#define INVALID_OPT _("invalid option: %s\n") - -#define FAILED_SIG _("cannot set SIGCHLD disposition: %s\n") - -#define CANT_UNBLOCK_SIGCHLD _("cannot unblock SIGCHLD: %s\n") - -#define NO3264ELF \ - _("WARNING: file %s is neither a 32-bit nor a 64-bit ELF\n") - -#define BLOCKED_SIG _("SIGCHLD signal blocked. Cannot exec: %s\n") - -#define POPEN_FAIL _("popen failed: %s: %s\n") - -#define PCLOSE_FAIL _("pclose failed: %s: %s\n") - -#define EXEC_FAIL _("command terminated abnormally: %s: %d\n") - -#define OPEN_FAIL _("failed to open file: %s: %s\n") - -#define LOCK_FAIL _("failed to lock file: %s: %s\n") - -#define UNLOCK_FAIL _("failed to unlock file: %s: %s\n") - -#define TIMESTAMP_FAIL _("failed to update the timestamp file, next\ - archive update may experience reduced performance\n") - -#define MMAP_FAIL _("failed to mmap file: %s: %s\n") - -#define FILE_LOCKED _("another instance of bootadm (pid %lu) is running\n") - -#define NO_FLIST _("archive filelist is empty\n") - -#define CLOSE_FAIL _("failed to close file: %s: %s\n") - -#define RENAME_FAIL _("rename to file failed: %s: %s\n") - -#define NOT_IN_MNTTAB _("alternate root %s not in mnttab\n") - -#define CANT_RESOLVE _("cannot resolve path %s: %s\n") - -#define ROOT_ABS _("this sub-command doesn't take root arguments: %s\n") - -#define ARCHIVE_FAIL _("boot-archive creation FAILED, command: '%s'\n") - -#define MULTI_FAIL \ - _("Command '%s' failed while generating multisession archive\n") - -#define INFILE_FAIL _("unable to read from %s: %s\n") - -#define ARCHIVE_BAD _("archive file %s not generated correctly\n") - -#define CACHE_FAIL \ - _("Failed to gather cache files, archives generation aborted\n") - -#define BOOTBLK_FAIL _("unable to access bootblk file : %s\n") - -#define WRITE_FAIL _("write to file failed: %s: %s\n") - -#define GZ_WRITE_FAIL _("failed to write to %s\n") - -#define STAT_FAIL _("stat of file failed: %s: %s\n") - -#define PACK_FAIL _("failed to pack stat data: %s\n") - -#define NVALLOC_FAIL _("failed to create stat data: %s\n") - -#define NVADD_FAIL _("failed to update stat data for: %s: %s\n") - -#define DISKMAP_FAIL \ - _("create_diskmap command failed for OS root: %s.\n") - -#define BIOSDEV_SKIP \ - _("not using biosdev command for disk: %s.\n") - -#define CHECK_NOT_SUPPORTED \ - _("the check option is not supported with subcmd: %s\n") - -#define PARSEABLE_NEW_FILE _(" new %s\n") - -#define PARSEABLE_OUT_DATE _(" changed %s\n") - -#define PARSEABLE_STALE_FILE _(" stale %s\n") - -#define UPDATE_FORCE _("forced update of archive requested\n") - -#define NO_NEW_STAT _("cannot create new stat data\n") - -#define UPDATE_ARCH_MISS _("archive not found: %s\n") - -#define UPDATE_CDIR_MISS _("archive cache directory not found: %s\n") - -#define MULTI_SIZE \ - _("archive %s is bigger than %d bytes and will be rebuilt\n") - -#define READ_FAIL _("read failed for file: %s: %s\n") - -#define UNPACK_FAIL _("failed to unpack stat data: %s: %s\n") - -#define NFTW_FAIL _("cannot find: %s: %s\n") - -#define SIGN_FAIL _("iso descriptor signature for %s is invalid\n") - -#define STATVFS_FAIL _("statvfs failed for %s: %s\n") - -#define IS_RAMDISK _("%s is on a ramdisk device\n") - -#define PRINT _("%s\n") - -#define PRINT_TITLE _("%d %s\n") - -#define INT_ERROR _("Internal error: %s\n") - -#define CANT_FIND_USER \ - _("getpwnam: uid for %s failed, defaulting to %d\n") - -#define CANT_FIND_GROUP \ - _("getgrnam: gid for %s failed, defaulting to %d\n") - -#define CHMOD_FAIL _("chmod operation on %s failed - %s\n") - -#define CHOWN_FAIL _("chgrp operation on %s failed - %s\n") - -#define MISSING_SLICE_FILE _("GRUB slice file %s missing: %s\n") - -#define MKDIR_FAILED _("mkdir of %s failed: %s\n") - -#define MOUNT_FAILED _("mount of %s (fstype %s) failed\n") - -#define MOUNT_MNTPT_FAILED _("mount at %s failed\n") - -#define UMOUNT_FAILED _("umount of %s failed\n") - -#define CANNOT_RESTORE_GRUB_SLICE _("cannot restore GRUB slice\n") - -#define RESTORE_GRUB_FAILED _("cannot restore GRUB loader\n") - -#define MISSING_BACKUP_MENU _("no backup menu %s: %s\n") - -#define RESTORE_MENU_FAILED _("cannot restore menu %s\n") - -#define MISSING_ROOT_FILE _("file missing: %s: %s\n") - -#define BAD_ROOT_FILE _("file is invalid: %s\n") - -#define TRAILING_ARGS _("invalid trailing arguments\n") - -#define RESTORING_GRUB \ - _("No GRUB installation found. Restoring GRUB from backup\n") - -#define REBOOT_WITH_ARGS_ADD_ENTRY_FAILED \ - _("Cannot update menu. Cannot reboot with requested arguments\n") - -#define FDISK_FILES_FOUND \ - _("Deferred FDISK update file(s) found: %s, %s. Not supported.\n") - -#define UNKNOWN_KERNEL _("unable to expand %s to a full file path.\n") - -#define UNKNOWN_KERNEL_REBOOT \ - _("Rebooting with default kernel and options.\n") - -#define NOT_DBOOT \ - _("bootadm set-menu %s may only be run on directboot kernels.\n") - -#define DEFAULT_NOT_BAM _( \ -"Default /boot/grub/menu.lst entry is not controlled by bootadm. Exiting\n") - -#define CANT_FIND_DEFAULT \ -_("unable to find default boot entry (%d) in menu.lst file.\n") - -#define UNKNOWN_KERNEL_LINE \ -_("kernel command on line %d not recognized.\n") - -#define UNKNOWN_MODULE_LINE \ -_("module command on line %d not recognized.\n") - -#define FINDROOT_NOT_FOUND \ -_("findroot in default boot entry (%d) missing.\n") - -#define KERNEL_NOT_FOUND \ -_("kernel$ in default boot entry (%d) missing.\n") - -#define KERNEL_NOT_PARSEABLE \ -_("kernel$ in default boot entry (%d) missing or not parseable.\n") - -#define MODULE_NOT_PARSEABLE \ -_("module$ in default boot entry (%d) missing or not parseable.\n") - -#define NOT_ELF_FILE _("%s is not an ELF file.\n") - -#define WRONG_ELF_CLASS _("%s is wrong ELF class 0x%x\n") - -#define FAILSAFE_MISSING \ -_("bootadm -m upgrade run, but the failsafe archives have not been\n\ -updated. Not updating line %d\n") - -#define INVALID_PLAT \ - _("invalid platform %s - must be one of sun4u, sun4v or i86pc\n") - -#define FDISKPART_FAIL _("failed to determine fdisk partition: %s\n") - -#define INVALID_MHASH_KEY _("invalid key for mnttab hash: %s\n") - -#define INVALID_UFS_SIGNATURE _("invalid UFS boot signature: %s\n") - -#define SIGN_LIST_FPUTS_ERR \ - _("failed to write signature %s to signature list: %s\n") - -#define SIGNATURE_LIST_EXISTS _(" - signature list %s exists\n") - -#define OPENDIR_FAILED _("opendir of %s failed: %s\n") - -#define GRUBSIGN_SORT_FAILED _("error sorting GRUB UFS boot signatures\n") - -#define SEARCHING_UFS_SIGN _(" - searching for UFS boot signatures\n") - -#define ERR_FIND_UFS_SIGN _("search for UFS boot signatures failed\n") - -#define UFS_SIGNATURE_LIST_MISS _("missing UFS signature list file: %s\n") - -#define UFS_SIGNATURE_LIST_OPENERR \ - _("error opening UFS boot signature list file %s: %s\n") - -#define UFS_BADSIGN _("bad UFS boot signature: %s\n") - -#define GRUBSIGN_BACKUP_OPENERR \ - _("error opening boot signature backup file %s: %s\n") - -#define GRUBSIGN_BACKUP_WRITEERR \ - _("error writing boot signature backup file %s: %s\n") - -#define GRUBSIGN_BACKUP_UPDATED \ - _("updated boot signature backup file %s\n") - -#define GRUBSIGN_PRIMARY_CREATERR \ - _("error creating primary boot signature %s: %s\n") - -#define GRUBSIGN_PRIMARY_SYNCERR \ - _("error syncing primary boot signature %s: %s\n") - -#define GRUBSIGN_CREATED_PRIMARY \ - _("created primary GRUB boot signature: %s\n") - -#define GRUBSIGN_CREATE_FAIL \ - _("failed to create GRUB boot signature for device: %s\n") - -#define GRUBSIGN_WRITE_FAIL \ - _("failed to write GRUB boot signature for device: %s\n") - -#define GRUBSIGN_UFS_NONE _(" - no existing UFS boot signatures\n") - -#define GRUBSIGN_NOTSUP _("boot signature not supported for fstype: %s\n") - -#define GRUBSIGN_MKDIR_ERR \ - _("error creating boot signature directory %s: %s\n") - -#define NOT_UFS_SLICE _("%s is not a ufs slice: %s\n") - -#define FSTYP_FAILED _("fstyp failed for slice: %s\n") - -#define FSTYP_BAD _("bad output from fstyp for slice: %s\n") - -#define ZFS_MOUNT_FAILED _("mount of ZFS pool %s failed\n") - -#define ZFS_MNTPT_FAILED \ - _("failed to determine mount point of ZFS pool %s\n") - -#define NULL_ZFS_MNTPT _("ZFS pool %s has no mount-point\n") - -#define BAD_ZFS_MNTPT _("ZFS pool %s has bad mount-point %s\n") - -#define NULL_ZFS_MNTPT _("ZFS pool %s has no mount-point\n") - -#define BAD_ZFS_MNTED _("ZFS pool %s has bad mount status\n") - -#define ZFS_MNTED_FAILED \ - _("failed to determine mount status of ZFS pool %s\n") - -#define INT_BAD_MNTSTATE \ - _("Internal error: bad saved mount state for pool %s\n") - -#define FSTYP_A_FAILED _("fstyp -a on device %s failed\n") - -#define NULL_FSTYP_A _("NULL fstyp -a output for device %s\n") - -#define BAD_FSTYP_A _("bad fstyp -a output for device %s\n") - -#define INVALID_UFS_SIGN _("invalid UFS boot signature %s\n") - -#define CANT_FIND_SPECIAL _("cant find special file for mount-point %s\n") - -#define CANT_FIND_POOL _("cant find pool for mount-point %s\n") - -#define NULL_FINDROOT _("can't find argument for findroot command\n") - -#define INVALID_DEV_DSK _("not a /dev/[r]dsk name: %s\n") - -#define CVT_FINDROOT _("converting entries to findroot...\n") - -#define CVT_HV _("adding xVM entries...\n") - -#define CVT_DBOOT _("converting entries to dboot...\n") - -#define DOWNGRADE_NOTSUP \ -_("automated downgrade of GRUB menu to older version not supported.\n") - -#define CANT_FIND_GRUBSIGN _("cannot find GRUB signature for %s\n") - -#define CVT_TODO \ -_("one or more GRUB menu entries were not automatically upgraded\n\ -For details on manually updating entries, see %s\n") - -#define CVT_ABORT \ -_("error upgrading GRUB menu entries on %s. Aborting.\n\ -For details on manually updating entries, see %s\n") - -#define ALREADY_HYPER \ -_("default entry already setup for use with the hypervisor!\n") - -#define HYPER_ABORT \ -_("error converting GRUB menu entry on %s for use with the hypervisor.\n\ -Aborting.\n") - -#define ALREADY_METAL \ -_("default entry already setup for use with a metal kernel!\n") - -#define METAL_ABORT \ -_("error converting GRUB menu entry on %s for use with a metal kernel.\n\ -Aborting.\n") - -#define HAND_ADDED_ENTRIES \ -_("bootadm(1M) will only upgrade GRUB menu entries added by \n\ -bootadm(1M) or lu(1M). The following entries on %s will not be upgraded.\n\ -For details on manually updating entries, see %s\n") - -#define SIGN_FSTYPE_MISMATCH \ -_("found mismatched boot signature %s for filesystem type: %s.\n") - -#define REBOOT_FSTYPE_FAILED \ -_("failed to determine filesystem type for \"/\". Reboot with \n\ -arguments failed.\n") - -#define REBOOT_SPECIAL_FAILED \ -_("failed to find device special file for \"/\". Reboot with \n\ -arguments failed.\n") - -#define REBOOT_SIGN_FAILED \ -_("failed to find boot signature. Reboot with arguments failed.\n") - -#define REBOOT_DIRECT_FAILED \ -_("the root filesystem is not a dboot Solaris instance. \n\ -This version of bootadm is not supported on this version of Solaris.\n") - -#define BOOTENV_FSTYPE_FAILED \ -_("cannot determine filesystem type for \"/\".\n\ -Cannot generate GRUB menu entry with EEPROM arguments.\n") - -#define BOOTENV_SPECIAL_FAILED \ -_("cannot determine device special file for \"/\".\n\ -Cannot generate GRUB menu entry with EEPROM arguments.\n") - -#define BOOTENV_SIGN_FAILED \ -_("cannot determine boot signature for \"/\".\n\ -Cannot generate GRUB menu entry with EEPROM arguments.\n") - -#define GRUB_SLICE_FILE_EXISTS \ - _("unsupported GRUB slice file (%s) exists - ignoring.\n") - -#define GRUBSIGN_FOUND_OR_CREATED \ -_("found or created GRUB signature %s for %s\n") - -#define GET_FSTYPE_ARGS _("no OS mountpoint. Cannot determine fstype\n") - -#define MNTTAB_MNTPT_NOT_FOUND \ - _("failed to find OS mountpoint %s in %s\n") - -#define MNTTAB_FSTYPE_NULL _("NULL fstype found for OS root %s\n") - -#define MISSING_ARG _("missing argument for sub-command\n") - -#define INVALID_BINARY _("invalid or corrupted binary: %s\n") - -#define PCFS_ROOT_NOTSUP _("root <%s> on PCFS is not supported\n") - -#define NO_O_OSROOT _("OS root not specified with -o option: %s\n") - -#define RDONLY_FS \ - _("%s filesystem is read-only, skipping archives update\n") - -#define RDONLY_TEST_ERROR _("error during read-only test on %s: %s\n") - -#define CANNOT_GRUBROOT_BOOTDISK \ - _("cannot get (hd?,?,?) for menu. menu not on bootdisk: %s\n") - -#define NO_GRUBROOT_FOR_DISK \ - _("cannot determine BIOS disk ID 'hd?' for disk: %s\n") - -#define CACHE_MNTTAB_FAIL _("%s: failed to cache /etc/mnttab\n") - -#define FAILED_ADD_SIGNLIST _("failed to add sign %s to signlist.\n") - -#define GRUBSIGN_BACKUP_MKDIRERR _("mkdirp() of backup dir failed: %s: %s\n") - -#define GET_POOL_FAILED _("failed to get pool name from %s\n") - -#define FAIL_MNT_TOP_DATASET _("failed to mount top dataset for %s\n") - -#define PRIMARY_SIGN_EXISTS _("primary sign %s exists\n") - -#define SET_BACKUP_FAILED _("failed to set backup sign (%s) for %s: %s\n") - -#define SET_PRIMARY_FAILED \ -_("failed to set primary sign (%s) for %s: %s\n") - -#define GET_FSTYPE_FAILED _("failed to get fstype for %s\n") - -#define GET_SPECIAL_NULL_MNTPT \ - _("cannot get special file: NULL mount-point\n") - -#define GET_SPECIAL_NULL \ - _("cannot get special file for mount-point: %s\n") - -#define GET_PHYSICAL_MENU_NULL \ - _("cannot get physical device special file for menu root: %s\n") - -#define GET_GRUBSIGN_ERROR \ - _("failed to get grubsign for root: %s, device %s\n") - -#define FAILED_TO_ADD_BOOT_ENTRY \ - _("failed to add boot entry with title=%s, grub signature=%s\n") - -#define SET_DEFAULT_FAILED _("failed to set GRUB menu default to %d\n") - -#define REBOOT_GET_KERNEL_FAILED \ -_("reboot with arguments: error querying current boot-file settings\n") - -#define REBOOT_GET_ARGS_FAILED \ -_("reboot with arguments: error querying current boot-args settings\n") - -#define REBOOT_SET_DEFAULT_FAILED \ -_("reboot with arguments: setting GRUB menu default to %d failed\n") - -#define GET_SET_KERNEL_ADD_BOOT_ENTRY _("failed to add boot entry: %s\n") - -#define GET_SET_KERNEL_SET_GLOBAL _("failed to set default to: %d\n") - -#define NO_OPTION_ARG _("option has no argument: %s\n") - -#define CANT_MOUNT_POOL_DATASET \ - _("cannot mount pool dataset for pool: %s\n") - -#define ZFS_GET_POOL_FAILED _("failed to get pool for device: %s\n") - -#define ZFS_MOUNT_TOP_DATASET_FAILED \ - _("failed to mount top dataset for pool: %s\n") - -#define GET_POOL_OSDEV_NULL _("NULL device: cannot determine pool name\n") - -#define GET_POOL_BAD_OSDEV \ -_("invalid device %s: cannot determine pool name\n") - -#define POOL_SIGN_INCOMPAT \ -_("pool name %s not present in signature %s\n") - -#define INVALID_ZFS_SPECIAL \ -_("invalid device for ZFS filesystem: %s\n") - -#define CANT_FIND_POOL_FROM_SPECIAL \ -_("cannot derive ZFS pool from special: %s\n") - -#define ZFS_GET_POOL_STATUS \ -_("cannot get zpool status for pool: %s\n") - -#define BAD_ZPOOL_STATUS \ -_("bad zpool status for pool=%s\n") - -#define NO_POOL_IN_ZPOOL_STATUS \ -_("no pool name %s in zpool status\n") - -#define NO_PHYS_IN_ZPOOL_STATUS \ -_("no physical device in zpool status for pool=%s\n") - -#define UFS_GET_PHYS_NOT_SVM \ -_("not a SVM metadevice: %s. Cannot derive physical device\n") - -#define UFS_GET_PHYS_INVALID_SVM \ -_("invalid SVM metadevice name: %s. Cannot derive physical device\n") - -#define UFS_SVM_METASTAT_ERR \ -_("metastat command failed on SVM metadevice: %s\n") - -#define UFS_SVM_METASTAT_SVC_ERR \ -_("failed to start service %s for metastat command\n") - -#define BAD_UFS_SVM_METASTAT \ -_("bad output from metastat command on SVM metadevice: %s\n") - -#define INVALID_UFS_SVM_METASTAT \ -_("invalid fields in metastat output for SVM metadevice: %s\n") - -#define CANNOT_PARSE_UFS_SVM_METASTAT \ -_("cannot parse output of metastat command for metadevice: %s\n") - -#define CANNOT_PARSE_UFS_SVM_SUBMIRROR \ -_("cannot parse submirror line in metastat output for metadevice: %s\n") - -#define GET_PHYSICAL_NOTSUP_FSTYPE \ -_("cannot derive physical device for %s (%s), unsupported filesystem\n") - -#define ERROR_PARSE_UFS_SVM_METASTAT \ -_("error parsing metastat output for SVM metadevice: %s\n") - -#define GET_OSROOT_SPECIAL_ERR \ -_("failed to get special file for osroot: %s\n") - -#define GET_MENU_ROOT_SPECIAL_ERR \ -_("failed to get special file for menu_root: %s\n") - -#define GET_SVC_STATE_ERR _("failed to determine state of service: %s\n") - -#define SVC_IS_ONLINE_FAILED \ - _("failed to determine if service is online: %s\n") - -#define ENABLE_SVC_FAILED _("failed to online service: %s\n") - -#define ERR_SVC_GET_ONLINE \ - _("failed to get online status for service: %s\n") - -#define TIMEOUT_ENABLE_SVC \ - _("timed out waiting for service to online: %s\n") - -#define CANNOT_READ_LU_CKSUM \ - _("failed to read GRUB menu checksum file: %s\n") - -#define MULTIPLE_LU_CKSUM \ - _("multiple checksums for GRUB menu in checksum file: %s\n") - -#define CANNOT_PARSE_LU_CKSUM \ - _("error parsing GRUB menu checksum file: %s\n") - -#define MENU_CKSUM_FAIL \ - _("error generating checksum of GRUB menu\n") - -#define BAD_CKSUM \ - _("bad checksum generated for GRUB menu\n") - -#define BAD_CKSUM_PARSE \ - _("error parsing checksum generated for GRUB menu\n") - -#define MENU_PROP_FAIL \ - _("error propagating updated GRUB menu\n") - -#define MENU_BACKUP_FAIL \ - _("failed to create backup for GRUB menu: %s\n") - -#define BACKUP_PROP_FAIL \ - _("error propagating backup GRUB menu: %s\n") - -#define MENU_CKSUM_WRITE_FAIL \ - _("failed to write GRUB menu checksum file: %s\n") - -#define MENU_CKSUM_PROP_FAIL \ - _("error propagating GRUB menu checksum file: %s\n") - -#define BOOTADM_PROP_FAIL \ - _("error propagating bootadm: %s\n") - -#define PROP_GRUB_MENU \ - _("propagating updated GRUB menu\n") - -#define NEED_DIRPATH _("need to create directory path for %s\n") - -#define UPDT_CACHE_FAIL _("directory cache update failed for %s\n") - -#define NEW_BOOT_ENTRY \ - _("unable to modify default entry; creating new boot entry for %s\n") - -/* - * NOTE: The following are debug messages and not I18Ned - */ - -#define D_MATCHED_TITLE "%s: matched title: %s\n" - -#define D_NOMATCH_TITLE "%s: no match title: %s, %s\n" - -#define D_MATCHED_FINDROOT "%s: matched findroot: %s\n" - -#define D_NOMATCH_FINDROOT "%s: no match findroot: %s, %s\n" - -#define D_NOMATCH_FINDROOT_NULL "%s: no match line has findroot, we don't: %s\n" - -#define D_MATCHED_ROOT "%s: matched root: %s\n" - -#define D_NOMATCH_ROOT "%s: no match root: %s, %s\n" - -#define D_NOMATCH_ROOT_NULL "%s: no match, line has root, we don't: %s\n" - -#define D_NO_ROOT_OPT "%s: root NOT optional\n" - -#define D_ROOT_OPT "%s: root IS optional\n" - -#define D_KERNEL_MATCH "%s: kernel match: %s, %s\n" - -#define D_MODULE_MATCH "%s: module match: %s, %s\n" - -#define D_UPGRADE_FROM_MULTIBOOT \ - "%s: upgrading entry from dboot to multiboot: root = %s\n" - -#define D_ENTRY_NOT_FOUND_CREATING \ - "%s: boot entry not found in menu. Creating new entry, findroot = %s\n" - -#define D_CHANGING_TITLE "%s: changing title to: %s\n" - -#define D_ADDING_FINDROOT_LINE "%s: adding findroot line: %s\n" - -#define D_ADDING_KERNEL_DOLLAR "%s: adding new kernel$ line: %s\n" - -#define D_ADDING_MODULE_DOLLAR "%s: adding new module$ line: %s\n" - -#define D_GET_GRUBROOT_SUCCESS \ - "%s: get_grubroot success. osroot=%s, osdev=%s, menu_root=%s\n" - -#define D_GET_GRUBROOT_FAILURE \ - "%s: get_grubroot failed. osroot=%s, osdev=%s, menu_root=%s\n" - -#define D_UPDATED_BOOT_ENTRY \ - "%s: updated boot entry bam_zfs=%d, grubsign = %s\n" - -#define D_UPDATED_HV_ENTRY \ - "%s: updated HV entry bam_zfs=%d, grubsign = %s\n" - -#define D_UPDATED_MULTIBOOT_ENTRY \ - "%s: updated MULTIBOOT entry grubsign = %s\n" - -#define D_UPDATED_FAILSAFE_ENTRY \ - "%s: updated FAILSAFE entry failsafe_kernel = %s\n" - -#define D_GET_GRUBSIGN_SUCCESS "%s: successfully created grubsign %s\n" - -#define D_ADD_LINE_PREV_NEXT "%s: previous next exists\n" - -#define D_ADD_LINE_NOT_PREV_NEXT "%s: previous next does not exist\n" - -#define D_ADD_LINE_LAST_LINE_IN_ENTRY "%s: last line in entry\n" - -#define D_ADD_LINE_LAST_LINE_IN_MENU "%s: last line in menu\n" - -#define D_FOUND_FINDROOT "%s: found entry with matching findroot: %s\n" - -#define D_SAVING_DEFAULT_TO "%s: saving default to: %s\n" - -#define D_SAVED_DEFAULT_TO "%s: saved default to lineNum=%d, entryNum=%d\n" - -#define D_RESTORE_DEFAULT_NULL "%s: NULL saved default\n" - -#define D_RESTORE_DEFAULT_STR "%s: saved default string: %s\n" - -#define D_RESTORED_DEFAULT_TO "%s: restored default to entryNum: %d\n" - -#define D_FUNC_ENTRY0 "%s: entered. No args\n" - -#define D_FUNC_ENTRY1 "%s: entered. arg: %s\n" - -#define D_FUNC_ENTRY2 "%s: entered. args: %s %s\n" - -#define D_FUNC_ENTRY3 "%s: entered. args: %s %s %s\n" - -#define D_FUNC_ENTRY4 "%s: entered. args: %s %s %s %s\n" - -#define D_OPT_NULL "%s: opt is NULL\n" - -#define D_TRANSIENT_NOTFOUND "%s: transient entry not found\n" - -#define D_RESTORED_DEFAULT "%s: restored old default\n" - -#define D_ENTRY_EQUALS "%s: opt has entry=: %s\n" - -#define D_ENTRY_SET_IS "%s: default set to %d, set_default ret=%d\n" - -#define D_REBOOT_RESOLVED_PARTIAL "%s: resolved partial path: %s\n" - -#define D_FOUND_GLOBAL "%s: found matching global command: %s\n" - -#define D_SET_GLOBAL_WROTE_NEW "%s: wrote new global line: %s\n" - -#define D_SET_GLOBAL_REPLACED "%s: replaced global line with: %s\n" - -#define D_ARCHIVE_LINE_NONE "%s: no module/archive line for entry: %d\n" - -#define D_ARCHIVE_LINE_NOCHANGE "%s: no change for line: %s\n" - -#define D_ARCHIVE_LINE_REPLACED "%s: replaced for line: %s\n" - -#define D_GET_SET_KERNEL_NO_RC "%s: no RC entry, nothing to report\n" - -#define D_GET_SET_KERNEL_ALREADY "%s: no reset, already has default\n" - -#define D_GET_SET_KERNEL_RESTORE_DEFAULT "%s: resetting to default\n" - -#define D_GET_SET_KERNEL_RESET_KERNEL_SET_ARG \ -"%s: reset kernel to default, but retained old args: %s\n" - -#define D_GET_SET_KERNEL_RESET_ARG_SET_KERNEL \ -"%s: reset args to default, but retained old kernel: %s\n" - -#define D_GET_SET_KERNEL_REPLACED_KERNEL_SAME_ARG \ -"%s: rc line exists, replaced kernel, same args: %s\n" - -#define D_GET_SET_KERNEL_SAME_KERNEL_REPLACED_ARG \ -"%s: rc line exists, same kernel, but new args: %s\n" - -#define D_SET_OPTION "%s: setting %s option to %s\n" - -#define D_EXPAND_PATH "%s: expanded path: %s\n" - -#define D_GET_SET_KERNEL_ARGS "%s: read menu boot-args: %s\n" - -#define D_GET_SET_KERNEL_KERN "%s: read menu boot-file: %s\n" - -#define D_BAM_ROOT "%s: bam_alt_root: %d, bam_root: %s\n" - -#define D_REBOOT_OPTION "%s: reboot with args, option specified: kern=%s\n" - -#define D_REBOOT_ABSPATH "%s: reboot with args, abspath specified: kern=%s\n" - -#define D_GET_SET_KERNEL_NEW_KERN "%s: new kernel=%s\n" - -#define D_GET_SET_KERNEL_NEW_ARG "%s: new args=%s\n" - -#define D_Z_MENU_GET_POOL_FROM_SPECIAL "%s: derived pool=%s from special\n" - -#define D_Z_GET_MENU_MOUNT_TOP_DATASET "%s: top dataset mountpoint=%s\n" - -#define D_Z_GET_MENU_MENU_ROOT "%s: zfs menu_root=%s\n" - -#define D_Z_IS_LEGACY "%s: is legacy, pool=%s\n" - -#define D_Z_IS_NOT_LEGACY "%s: is *NOT* legacy, pool=%s\n" - -#define D_Z_MOUNT_TOP_NONLEG_MOUNTED_ALREADY \ - "%s: non-legacy pool %s mounted already\n" - -#define D_Z_MOUNT_TOP_NONLEG_MOUNTED_NOT_ALREADY \ - "%s: non-legacy pool %s *NOT* already mounted\n" - -#define D_Z_MOUNT_TOP_NONLEG_MOUNTED_NOW \ - "%s: non-legacy pool %s mounted now\n" - -#define D_Z_MOUNT_TOP_NONLEG_MNTPT \ - "%s: non-legacy pool %s is mounted at %s\n" - -#define D_Z_UMOUNT_TOP_ALREADY_NOP \ - "%s: pool %s was already mounted at %s, Nothing to umount\n" - -#define D_Z_UMOUNT_TOP_LEGACY \ - "%s: legacy pool %s was mounted by us, successfully unmounted\n" - -#define D_Z_UMOUNT_TOP_NONLEG \ - "%s: nonleg pool %s was mounted by us, successfully unmounted\n" - -#define D_Z_MOUNT_TOP_LEG_ALREADY \ - "%s: legacy pool %s already mounted\n" - -#define D_Z_MOUNT_TOP_LEG_MNTPT_ABS \ - "%s: legacy pool %s mount-point %s absent\n" - -#define D_Z_MOUNT_TOP_LEG_MNTPT_PRES \ - "%s: legacy pool %s mount-point %s is already present\n" - -#define D_Z_MOUNT_TOP_LEG_MOUNTED \ - "%s: legacy pool %s successfully mounted at %s\n" - -#define D_Z_MOUNT_TOP_LEG_MOUNTED \ - "%s: legacy pool %s successfully mounted at %s\n" - -#define D_GET_MOUNTPOINT_RET \ - "%s: returning mount-point for special %s: %s\n" - -#define D_IS_ZFS "%s: is a ZFS filesystem: %s\n" - -#define D_IS_NOT_ZFS "%s: is *NOT* a ZFS filesystem: %s\n" - -#define D_IS_UFS "%s: is a UFS filesystem: %s\n" - -#define D_IS_NOT_UFS "%s: is *NOT* a UFS filesystem: %s\n" - -#define D_IS_PCFS "%s: is a PCFS filesystem: %s\n" - -#define D_IS_NOT_PCFS "%s: is *NOT* a PCFS filesystem: %s\n" - -#define D_MENU_PATH "%s: menu path is: %s\n" - -#define D_FREEING_LU_SIGNS "%s: feeing LU sign: %s\n" - -#define D_OPEN_FAIL "%s: failed to open %s: %s\n" - -#define D_GET_POOL_OSDEV "%s: osdev arg = %s\n" - -#define D_GET_POOL_RET "%s: got pool. pool = %s\n" - -#define D_GET_GRUBSIGN_NO_EXISTING "%s: no existing grubsign for %s: %s\n" - -#define D_GET_PHYSICAL_ALREADY \ - "%s: got physical device already directly for menu_root=%s special=%s\n" - -#define D_GET_PHYSICAL_RET "%s: returning physical=%s\n" - -#define D_STRTOK_ZPOOL_STATUS "%s: strtok() zpool status line=%s\n" - -#define D_FOUND_POOL_IN_ZPOOL_STATUS "%s: found pool name: %s in zpool status\n" - -#define D_COUNTING_ZFS_PHYS "%s: counting phys slices in zpool status: %d\n" - -#define D_ADDING_ZFS_PHYS "%s: adding phys slice=%s from pool %s status\n" - -#define D_FUNC_ENTRY_N1 "%s: entering args: %d\n" - -#define D_UFS_SVM_SHORT "%s: short SVM name for special=%s is %s\n" - -#define D_UFS_SVM_ONE_COMP "%s: single component %s for metadevice %s\n" - -#define D_CHECK_ON_BOOTDISK "%s: checking if phys-device=%s is on bootdisk\n" - -#define D_IS_ON_BOOTDISK "%s: phys-device=%s *IS* on bootdisk\n" - -#define D_ROOT_OPT_NOT_ZFS "%s: one or more non-ZFS filesystems (%s, %s)\n" - -#define D_ROOT_OPTIONAL_OSPECIAL "%s: ospecial=%s for osroot=%s\n" - -#define D_ROOT_OPTIONAL_MSPECIAL "%s: mspecial=%s for menu_root=%s\n" - -#define D_ROOT_OPTIONAL_FIXED_OSPECIAL "%s: FIXED ospecial=%s for osroot=%s\n" - -#define D_CHECK_CMD_CMD_NOMATCH "%s: command %s does not match %s\n" - -#define D_FINDROOT_ABSENT "%s: findroot capability absent\n" - -#define D_FINDROOT_PRESENT "%s: findroot capability present\n" - -#define D_DBOOT_PRESENT "%s: dboot capability present\n" - -#define D_XVM_PRESENT "%s: xVM capability present\n" - -#define D_IS_SPARC_DBOOT "%s: is sparc - always DBOOT\n" - -#define D_IS_DBOOT "%s: is DBOOT unix\n" - -#define D_IS_MULTIBOOT "%s: is MULTIBOOT unix\n" - -#define D_IS_XVM "%s: is xVM system\n" - -#define D_IS_NOT_XVM "%s: is *NOT* xVM system\n" - -#define D_ALREADY_BFU_TEST "%s: already done bfu test. bfu is %s present\n" - -#define D_UPDATE_LINE_BEFORE "%s: line before update: %s\n" - -#define D_UPDATE_LINE_AFTER "%s: line after update: %s\n" - -#define D_SKIP_WSPACE_PTR_NULL "%s: NULL ptr\n" - -#define D_SKIP_WSPACE_ENTRY_PTR "%s: ptr on entry: %s\n" - -#define D_SKIP_WSPACE_EXIT_PTR "%s: ptr on exit: %s\n" - -#define D_RSKIP_BSPACE_ENTRY "%s: ptr on entry: %s\n" - -#define D_RSKIP_BSPACE_EXIT "%s: ptr on exit: %s\n" - -#define D_RSKIP_BSPACE_EXIT "%s: ptr on exit: %s\n" - -#define D_NOT_MULTIBOOT_CONVERT "%s: not MULTIBOOT, not converting\n" - -#define D_TRYING_FAILSAFE_CVT_TO_DBOOT \ - "%s: trying to convert failsafe to DBOOT\n" - -#define D_NO_FAILSAFE_UNIX_CONVERT "%s: no FAILSAFE unix, not converting\n" - -#define D_CVT_CMD_KERN_DOLLAR "%s: converted kernel cmd to %s\n" - -#define D_CVT_CMD_MOD_DOLLAR "%s: converted module cmd to %s\n" - -#define D_FLAGS1_UNIX_FLAGS2_NULL "%s: NULL flags1, unix, flags2\n" - -#define D_UNIX_PRESENT "%s: unix present\n" - -#define D_UNIX_PRESENT "%s: unix present\n" - -#define D_UNIX_ABSENT "%s: unix ABSENT\n" - -#define D_FLAGS2_PRESENT "%s: flags2 present: %s\n" - -#define D_FLAGS2_ABSENT "%s: flags2 absent\n" - -#define D_FLAGS1_PRESENT "%s: flags1 present: %s\n" - -#define D_FLAGS1_ABSENT "%s: flags1 absent\n" - -#define D_FLAGS1_ONLY "%s: flags1 present: %s, unix, flags2 absent\n" - -#define D_CVTED_UNIX "%s: converted unix: %s\n" - -#define D_CVTED_UNIX_AND_FLAGS "%s: converted unix with flags : %s\n" - -#define D_CVTED_KERNEL_LINE "%s: converted line is: %s\n" - -#define D_FAILSAFE_NO_CVT_NEEDED \ - "%s: failsafe module line needs no conversion: %s\n" - -#define D_CVTED_MODULE "%s: converted module line is: %s\n" - -#define D_FORCE_HAND_CVT "%s: force specified, no warnings about hand entries\n" - -#define D_FOUND_HAND "%s: found hand entry #: %d\n" - -#define D_SKIP_ENTRY "%s: skipping hand entry #: %d\n" - -#define D_SKIP_ROOT_ENTRY "%s: skipping root entry #: %d\n" - -#define D_ENTRY_END "%s: entry has ended\n" - -#define D_SKIP_NULL "%s: skipping NULL line\n" - -#define D_ROOT_MATCH "%s: found matching root line: %s,%s\n" - -#define D_FINDROOT_MATCH "%s: found matching findroot line: %s,%s\n" - -#define D_NO_ROOT_FINDROOT "%s: no root or findroot and root is opt: %d\n" - -#define D_NO_MATCH "%s: no matching entry found\n" - -#define D_ALREADY_FINDROOT "%s: entry %d already converted to findroot\n" - -#define D_ADDED_FINDROOT "%s: added findroot line: %s\n" - -#define D_ADDED_NUMBERING "%s: updating numbering\n" - -#define D_ALREADY_HV "%s: entry %d already converted to xvm HV\n" - -#define D_ADDED_XVM_ENTRY "%s: added xVM HV entry via add_boot_entry()\n" - -#define D_CVT_KERNEL_FAIL "%s: cvt_kernel_line() failed\n" - -#define D_CVT_KERNEL_MSG "%s: BAM_MSG returned from cvt_kernel_line()\n" - -#define D_CVT_MODULE_FAIL "%s: cvt_module_line() failed\n" - -#define D_CVT_MODULE_MSG "%s: BAM_MSG returned from cvt_module_line()\n" - -#define D_UPDATED_NUMBERING "%s: updated numbering\n" - -#define D_FREEING_ROOT "%s: freeing root line: %s\n" - -#define D_MENU_ROOT "%s: menu root is %s\n" - -#define D_CLEAN_MENU_ROOT "%s: cleaned menu root is <%s>\n" - -#define D_BOOT_GET_CAP_FAILED "%s: Failed to get boot capability\n" - -#define D_WRITING_MENU_ROOT "%s: writing menu to clean-menu-root: <%s>\n" - -#define D_WROTE_FILE "%s: wrote file successfully: %s\n" - -#define D_FLIST_FAIL "%s: failed to open archive filelist: %s: %s\n" - -#define D_NOT_ARCHIVE_BOOT "%s: not a boot archive based Solaris instance: %s\n" - -#define D_IS_ARCHIVE_BOOT "%s: *IS* a boot archive based Solaris instance: %s\n" - -#define D_NO_GRUB_DIR "%s: Missing GRUB directory: %s\n" - -#define D_RDONLY_FS "%s: is a READONLY filesystem: %s\n" - -#define D_RDWR_FS "%s: is a RDWR filesystem: %s\n" - -#define D_ENTRY_NEW "%s: new boot entry alloced\n" - -#define D_ENTRY_NEW_FIRST "%s: (first) new boot entry created\n" - -#define D_ENTRY_NEW_LINKED "%s: new boot entry linked in\n" - -#define D_NOT_KERNEL_CMD "%s: not a kernel command: %s\n" - -#define D_SET_DBOOT_32 "%s: setting DBOOT|DBOOT_32 flag: %s\n" - -#define D_SET_DBOOT "%s: setting DBOOT flag: %s\n" - -#define D_SET_DBOOT_64 "%s: setting DBOOT|DBOOT_64 flag: %s\n" - -#define D_SET_DBOOT_FAILSAFE "%s: setting DBOOT|DBOOT_FAILSAFE flag: %s\n" - -#define D_SET_DBOOT_FAILSAFE_32 \ - "%s: setting DBOOT|DBOOT_FAILSAFE|DBOOT_32 flag: %s\n" - -#define D_SET_DBOOT_FAILSAFE_64 \ - "%s: setting DBOOT|DBOOT_FAILSAFE|DBOOT_64 flag: %s\n" - -#define D_SET_MULTIBOOT "%s: setting MULTIBOOT flag: %s\n" - -#define D_SET_MULTIBOOT_FAILSAFE \ - "%s: setting MULTIBOOT|MULTIBOOT_FAILSAFE flag: %s\n" - -#define D_SET_HV "%s: setting XEN HV flag: %s\n" - -#define D_REC_MKDIR "%s: making recursive directory %s\n" - -#define D_SET_HAND_KERNEL "%s: is HAND kernel flag: %s\n" - -#define D_IS_UNKNOWN_KERNEL "%s: is UNKNOWN kernel entry: %s\n" - -#define D_NOT_MODULE_CMD "%s: not module cmd: %s\n" - -#define D_BOOTADM_LU_MODULE "%s: bootadm or LU module cmd: %s\n" - -#define D_IS_HAND_MODULE "%s: is HAND module: %s\n" - -#define D_IS_UNKNOWN_MODULE "%s: is UNKNOWN module: %s\n" - -#define D_IS_BOOTADM_ENTRY "%s: is bootadm(1M) entry: %s\n" - -#define D_IS_LU_ENTRY "%s: is LU entry: %s\n" - -#define D_IS_ROOT_CMD "%s: setting ROOT: %s\n" - -#define D_IS_FINDROOT_CMD "%s: setting FINDROOT: %s\n" - -#define D_CMDLINE "%s: executing: %s\n" - -#define D_IS_CHAINLOADER_CMD "%s: setting CHAINLOADER: %s\n" - -#define D_NO_BOOTENVRC "could not open %s: %s\n" - -#define D_ADD_FINDROOT_NUM "%s: findroot added: line#: %d: entry#: %d\n" - -#define D_FREEING_LINE "%s: freeing line: %d\n" - -#define D_FREEING_ENTRY "%s: freeing entry: %d\n" - -#define D_CREATED_DISKMAP "%s: created diskmap file: %s\n" - -#define D_CREATE_DISKMAP_FAIL "%s: FAILED to create diskmap file: %s\n" - -#define D_NO_SIGNDIR "%s: no sign dir: %s\n" - -#define D_EXIST_BACKUP_SIGNS \ -"%s: found backup signs: zfs=%s ufs=%s lu=%s\n" - -#define D_RETURN_SUCCESS "%s: returning SUCCESS\n" - -#define D_RETURN_FAILURE "%s: returning FAILURE\n" - -#define D_RETURN_RET "%s: returning ret = %d\n" - -#define D_EXIST_PRIMARY_SIGN "%s: existing primary sign: %s\n" - -#define D_EXIST_BACKUP_SIGN "%s: existing backup sign: %s\n" - -#define D_EXIST_PRIMARY_SIGNS \ -"%s: found primary signs: zfs=%s ufs=%s lu=%s\n" - -#define D_CHECK_UFS_EXIST_SIGN "%s: checking for existing UFS sign\n" - -#define D_CHECK_ZFS_EXIST_SIGN "%s: checking for existing ZFS sign\n" - -#define D_NO_MNTPT "%s: no mount-point for special=%s and fstype=%s\n" - -#define D_CACHE_MNTS \ -"%s: caching mount: special=%s, mntpt=%s, fstype=%s\n" - -#define D_MNTTAB_HASH_NOMATCH "%s: no match in cache for: %s\n" - -#define D_MNTTAB_HASH_MATCH "%s: *MATCH* in cache for: %s\n" - -#define D_NO_SIGN_TO_LIST "%s: no sign on %s to add to signlist\n" - -#define D_SIGN_LIST_PUTS_DONE \ -"%s: successfully added sign on %s to signlist\n" - -#define D_SLICE_ENOENT "%s: slice does not exist: %s\n" - -#define D_VTOC_SIZE_ZERO "%s: VTOC: skipping 0-length slice: %s\n" - -#define D_VTOC_NOT_ROOT_TAG "%s: VTOC: unsupported tag, skipping: %s\n" - -#define D_VTOC_ROOT_TAG "%s: VTOC: supported tag, checking: %s\n" - -#define D_VTOC_NOT_RDWR_FLAG "%s: VTOC: non-RDWR flag, skipping: %s\n" - -#define D_VTOC_RDWR_FLAG "%s: VTOC: RDWR flag, checking: %s\n" - -#define D_EFI_SIZE_ZERO "%s: EFI: skipping 0-length slice: %s\n" - -#define D_EFI_NOT_ROOT_TAG "%s: EFI: unsupported tag, skipping: %s\n" - -#define D_EFI_ROOT_TAG "%s: EFI: supported tag, checking: %s\n" - -#define D_EFI_NOT_RDWR_FLAG "%s: EFI: non-RDWR flag, skipping: %s\n" - -#define D_EFI_RDWR_FLAG "%s: EFI: RDWR flag, checking: %s\n" - -#define D_SLICE0_ENOENT "%s: slice 0 does not exist: %s\n" - -#define D_VTOC_READ_FAIL "%s: VTOC: failed to read: %s\n" - -#define D_VTOC_INVALID "%s: VTOC: is INVALID: %s\n" - -#define D_VTOC_UNKNOWN_ERR "%s: VTOC: unknown error while reading: %s\n" - -#define D_VTOC_NOTSUP "%s: VTOC: not supported: %s\n" - -#define D_VTOC_READ_SUCCESS "%s: VTOC: SUCCESS reading: %s\n" - -#define D_VTOC_UNKNOWN_RETCODE "%s: VTOC: READ: unknown return code: %s\n" - -#define D_EFI_READ_FAIL "%s: EFI: failed to read: %s\n" - -#define D_EFI_INVALID "%s: EFI: is INVALID: %s\n" - -#define D_EFI_UNKNOWN_ERR "%s: EFI: unknown error while reading: %s\n" - -#define D_EFI_NOTSUP "%s: EFI: not supported: %s\n" - -#define D_EFI_READ_SUCCESS "%s: EFI: SUCCESS reading: %s\n" - -#define D_EFI_UNKNOWN_RETCODE "%s: EFI: READ: unknown return code: %s\n" - -#define D_NOT_VTOC_OR_EFI "%s: disk has neither VTOC nor EFI: %s\n" - -#define D_SKIP_SLICE_NOTZERO "%s: skipping non-s0 slice: %s\n" - -#define D_FOUND_HOLE_SIGNLIST "%s: found hole %d in sign list.\n" - -#define D_ZERO_LEN_SIGNLIST "%s: generated zero length signlist: %s.\n" - -#define D_CREATED_ZFS_SIGN "%s: created ZFS sign: %s\n" - -#define D_CREATE_NEW_UFS "%s: created new UFS sign\n" - -#define D_CREATE_NEW_ZFS "%s: created new ZFS sign\n" - -#define D_CREATED_NEW_SIGN "%s: created new sign: %s\n" - -#define D_FOUND_IN_BACKUP "%s: found sign (%s) in backup.\n" - -#define D_NOT_FOUND_IN_EXIST_BACKUP \ - "%s: backup exists but sign %s not found\n" - -#define D_BACKUP_NOT_EXIST "%s: no backup file (%s) found.\n" - -#define D_BACKUP_DIR_NOEXIST "%s: backup dir (%s) does not exist.\n" - -#define D_SET_BACKUP_UFS "%s: setting UFS backup sign\n" - -#define D_SET_BACKUP_ZFS "%s: setting ZFS backup sign\n" - -#define D_PRIMARY_NOT_EXIST "%s: primary sign (%s) does not exist\n" - -#define D_PRIMARY_DIR_NOEXIST "%s: primary signdir (%s) does not exist\n" - -#define D_SET_PRIMARY_UFS "%s: setting UFS primary sign\n" - -#define D_SET_PRIMARY_ZFS "%s: setting ZFS primary sign\n" - -#define D_GET_TITLE "%s: got title: %s\n" - -#define D_GET_SPECIAL_NOT_IN_MNTTAB \ - "%s: Cannot get special file: mount-point %s not in mnttab\n" - -#define D_GET_SPECIAL "%s: returning special: %s\n" - -#define D_MENU_WRITE_ENTER "%s: entered menu_write() for root: <%s>\n" - -#define D_GOT_SVC_STATUS "%s: got status for service: %s\n" - -#define D_SVC_ONLINE "%s: service is online: %s\n" - -#define D_SVC_NOT_ONLINE "%s: service is *NOT* online(%s): %s\n" - -#define D_SVC_ALREADY_ONLINE "%s: service is already online: %s\n" - -#define D_SVC_ONLINE_INITIATED "%s: initiated online of service: %s\n" - -#define D_SVC_NOW_ONLINE "%s: service is NOW online: %s\n" - -#define D_NOT_LU_BE "%s: not a Live Upgrade BE\n" - -#define D_NO_CKSUM_FILE "%s: checksum file absent: %s\n" - -#define D_CKSUM_FILE_OPENED "%s: opened checksum file: %s\n" - -#define D_CKSUM_FILE_READ "%s: read checksum file: %s\n" - -#define D_CKSUM_FILE_PARSED "%s: parsed checksum file: %s\n" - -#define D_CKSUM_GEN_SUCCESS "%s: successfully generated checksum\n" - -#define D_CKSUM_GEN_OUTPUT_VALID "%s: generated checksum output valid\n" - -#define D_CKSUM_GEN_PARSED "%s: successfully parsed generated checksum\n" - -#define D_CKSUM_NO_CHANGE "%s: no change in checksum of GRUB menu\n" - -#define D_CKSUM_HAS_CHANGED "%s: checksum of GRUB menu has changed\n" - -#define D_PROPAGATED_MENU "%s: successfully propagated GRUB menu\n" - -#define D_CREATED_BACKUP "%s: successfully created backup GRUB menu: %s\n" - -#define D_PROPAGATED_BACKUP "%s: successfully propagated backup GRUB menu: %s\n" - -#define D_CREATED_CKSUM_FILE "%s: successfully created checksum file: %s\n" - -#define D_PROPAGATED_CKSUM_FILE \ - "%s: successfully propagated checksum file: %s\n" - -#define D_PROPAGATED_BOOTADM \ - "%s: successfully propagated bootadm: %s\n" - -#ifdef __cplusplus -} -#endif - -#endif /* _MESSAGE_H */ diff --git a/usr/src/cmd/eeprom/i386/Makefile b/usr/src/cmd/eeprom/i386/Makefile index 4c28dce186..d47fd832d1 100644 --- a/usr/src/cmd/eeprom/i386/Makefile +++ b/usr/src/cmd/eeprom/i386/Makefile @@ -18,9 +18,7 @@ # # CDDL HEADER END # -# -#ident "%Z%%M% %I% %E% SMI" -# +# Copyright 2016 Toomas Soome # Copyright 2007 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # @@ -29,10 +27,6 @@ SRCDIR = .. include $(SRCDIR)/Makefile.com -# We "borrow" some error messages from bootadm. Add the path to pick these up -CFLAGS += -I../../boot/bootadm -LINTFLAGS += -I../../boot/bootadm - OBJS += benv.o benv_kvm.o .KEEP_STATE: diff --git a/usr/src/cmd/eeprom/i386/benv.c b/usr/src/cmd/eeprom/i386/benv.c index f032a3e064..11613cc5ce 100644 --- a/usr/src/cmd/eeprom/i386/benv.c +++ b/usr/src/cmd/eeprom/i386/benv.c @@ -20,11 +20,11 @@ */ /* + * Copyright 2016 Toomas Soome * Copyright (c) 1995, 2010, Oracle and/or its affiliates. All rights reserved. */ #include "benv.h" -#include "message.h" #include #include #include @@ -186,280 +186,15 @@ get_var(char *name, eplist_t *list) return (NULL); } -/*PRINTFLIKE1*/ -static void -eeprom_error(const char *format, ...) -{ - va_list ap; - - va_start(ap, format); - (void) fprintf(stderr, "eeprom: "); - (void) vfprintf(stderr, format, ap); - va_end(ap); -} - -static int -exec_cmd(char *cmdline, char *output, int64_t osize) -{ - char buf[BUFSIZ]; - int ret; - size_t len; - FILE *ptr; - sigset_t set; - void (*disp)(int); - - if (output) - output[0] = '\0'; - - /* - * For security - * - only absolute paths are allowed - * - set IFS to space and tab - */ - if (*cmdline != '/') { - eeprom_error(ABS_PATH_REQ, cmdline); - return (-1); - } - (void) putenv("IFS= \t"); - - /* - * We may have been exec'ed with SIGCHLD blocked - * unblock it here - */ - (void) sigemptyset(&set); - (void) sigaddset(&set, SIGCHLD); - if (sigprocmask(SIG_UNBLOCK, &set, NULL) != 0) { - eeprom_error(FAILED_SIG, strerror(errno)); - return (-1); - } - - /* - * Set SIGCHLD disposition to SIG_DFL for popen/pclose - */ - disp = sigset(SIGCHLD, SIG_DFL); - if (disp == SIG_ERR) { - eeprom_error(FAILED_SIG, strerror(errno)); - return (-1); - } - if (disp == SIG_HOLD) { - eeprom_error(BLOCKED_SIG, cmdline); - return (-1); - } - - ptr = popen(cmdline, "r"); - if (ptr == NULL) { - eeprom_error(POPEN_FAIL, cmdline, strerror(errno)); - return (-1); - } - - /* - * If we simply do a pclose() following a popen(), pclose() - * will close the reader end of the pipe immediately even - * if the child process has not started/exited. pclose() - * does wait for cmd to terminate before returning though. - * When the executed command writes its output to the pipe - * there is no reader process and the command dies with - * SIGPIPE. To avoid this we read repeatedly until read - * terminates with EOF. This indicates that the command - * (writer) has closed the pipe and we can safely do a - * pclose(). - * - * Since pclose() does wait for the command to exit, - * we can safely reap the exit status of the command - * from the value returned by pclose() - */ - while (fgets(buf, sizeof (buf), ptr) != NULL) { - if (output && osize > 0) { - (void) snprintf(output, osize, "%s", buf); - len = strlen(buf); - output += len; - osize -= len; - } - } - - /* - * If there's a "\n" at the end, we want to chop it off - */ - if (output) { - len = strlen(output) - 1; - if (output[len] == '\n') - output[len] = '\0'; - } - - ret = pclose(ptr); - if (ret == -1) { - eeprom_error(PCLOSE_FAIL, cmdline, strerror(errno)); - return (-1); - } - - if (WIFEXITED(ret)) { - return (WEXITSTATUS(ret)); - } else { - eeprom_error(EXEC_FAIL, cmdline, ret); - return (-1); - } -} - -#define BOOTADM_STR "bootadm: " - -/* - * bootadm starts all error messages with "bootadm: ". - * Add a note so users don't get confused on how they ran bootadm. - */ -static void -output_error_msg(const char *msg) -{ - size_t len = sizeof (BOOTADM_STR) - 1; - - if (strncmp(msg, BOOTADM_STR, len) == 0) { - eeprom_error("error returned from %s\n", msg); - } else if (msg[0] != '\0') { - eeprom_error("%s\n", msg); - } -} - -static char * -get_bootadm_value(char *name, const int quiet) -{ - char *ptr, *ret_str, *end_ptr, *orig_ptr; - char output[BUFSIZ]; - int is_console, is_kernel = 0; - size_t len; - - is_console = (strcmp(name, "console") == 0); - - if (strcmp(name, "boot-file") == 0) { - is_kernel = 1; - ptr = "/sbin/bootadm set-menu kernel 2>&1"; - } else if (is_console || (strcmp(name, "boot-args") == 0)) { - ptr = "/sbin/bootadm set-menu args 2>&1"; - } else { - eeprom_error("Unknown value in get_bootadm_value: %s\n", name); - return (NULL); - } - - if (exec_cmd(ptr, output, BUFSIZ) != 0) { - if (quiet == 0) { - output_error_msg(output); - } - return (NULL); - } - - if (is_console) { - if ((ptr = strstr(output, "console=")) == NULL) { - return (NULL); - } - ptr += strlen("console="); - - /* - * -B may have comma-separated values. It may also be - * followed by other flags. - */ - len = strcspn(ptr, " \t,"); - ret_str = calloc(len + 1, 1); - if (ret_str == NULL) { - eeprom_error(NO_MEM, len + 1); - return (NULL); - } - (void) strncpy(ret_str, ptr, len); - return (ret_str); - } else if (is_kernel) { - ret_str = strdup(output); - if (ret_str == NULL) - eeprom_error(NO_MEM, strlen(output) + 1); - return (ret_str); - } else { - /* If there's no console setting, we can return */ - if ((orig_ptr = strstr(output, "console=")) == NULL) { - return (strdup(output)); - } - len = strcspn(orig_ptr, " \t,"); - ptr = orig_ptr; - end_ptr = orig_ptr + len + 1; - - /* Eat up any white space */ - while ((*end_ptr == ' ') || (*end_ptr == '\t')) - end_ptr++; - - /* - * If there's data following the console string, copy it. - * If not, cut off the new string. - */ - if (*end_ptr == '\0') - *ptr = '\0'; - - while (*end_ptr != '\0') { - *ptr = *end_ptr; - ptr++; - end_ptr++; - } - *ptr = '\0'; - if ((strchr(output, '=') == NULL) && - (strncmp(output, "-B ", 3) == 0)) { - /* - * Since we removed the console setting, we no - * longer need the initial "-B " - */ - orig_ptr = output + 3; - } else { - orig_ptr = output; - } - - ret_str = strdup(orig_ptr); - if (ret_str == NULL) - eeprom_error(NO_MEM, strlen(orig_ptr) + 1); - return (ret_str); - } -} - -/* - * If quiet is 1, print nothing if there is no value. If quiet is 0, print - * a message. Return 1 if the value is printed, 0 otherwise. - */ -static int -print_bootadm_value(char *name, const int quiet) -{ - int rv = 0; - char *value = get_bootadm_value(name, quiet); - - if ((value != NULL) && (value[0] != '\0')) { - (void) printf("%s=%s\n", name, value); - rv = 1; - } else if (quiet == 0) { - (void) printf("%s: data not available.\n", name); - } - - if (value != NULL) - free(value); - return (rv); -} - static void print_var(char *name, eplist_t *list) { benv_ent_t *p; char *bootcmd; - /* - * The console property is kept in both menu.lst and bootenv.rc. The - * menu.lst value takes precedence. - */ - if (strcmp(name, "console") == 0) { - if (print_bootadm_value(name, 1) == 0) { - if ((p = get_var(name, list)) != NULL) { - (void) printf("%s=%s\n", name, p->val ? - p->val : ""); - } else { - (void) printf("%s: data not available.\n", - name); - } - } - } else if (strcmp(name, "bootcmd") == 0) { + if (strcmp(name, "bootcmd") == 0) { bootcmd = getbootcmd(); (void) printf("%s=%s\n", name, bootcmd ? bootcmd : ""); - } else if ((strcmp(name, "boot-file") == 0) || - (strcmp(name, "boot-args") == 0)) { - (void) print_bootadm_value(name, 0); } else if ((p = get_var(name, list)) == NULL) { (void) printf("%s: data not available.\n", name); } else { @@ -472,30 +207,13 @@ print_vars(eplist_t *list) { eplist_t *e; benv_ent_t *p; - int console_printed = 0; - - /* - * The console property is kept both in menu.lst and bootenv.rc. - * The menu.lst value takes precedence, so try printing that one - * first. - */ - console_printed = print_bootadm_value("console", 1); for (e = list->next; e != list; e = e->next) { p = (benv_ent_t *)e->item; if (p->name != NULL) { - if (((strcmp(p->name, "console") == 0) && - (console_printed == 1)) || - ((strcmp(p->name, "boot-file") == 0) || - (strcmp(p->name, "boot-args") == 0))) { - /* handle these separately */ - continue; - } (void) printf("%s=%s\n", p->name, p->val ? p->val : ""); } } - (void) print_bootadm_value("boot-file", 1); - (void) print_bootadm_value("boot-args", 1); } /* @@ -522,77 +240,6 @@ put_quoted(FILE *fp, char *val) (void) putc('\'', fp); } -static void -set_bootadm_var(char *name, char *value) -{ - char buf[BUFSIZ]; - char output[BUFSIZ] = ""; - char *console, *args; - int is_console; - - if (verbose) { - (void) printf("old:"); - (void) print_bootadm_value(name, 0); - } - - /* - * For security, we single-quote whatever we run on the command line, - * and we don't allow single quotes in the string. - */ - if (strchr(value, '\'') != NULL) { - eeprom_error("Single quotes are not allowed " - "in the %s property.\n", name); - return; - } - - is_console = (strcmp(name, "console") == 0); - if (strcmp(name, "boot-file") == 0) { - (void) snprintf(buf, BUFSIZ, "/sbin/bootadm set-menu " - "kernel='%s' 2>&1", value); - } else if (is_console || (strcmp(name, "boot-args") == 0)) { - if (is_console) { - args = get_bootadm_value("boot-args", 1); - console = value; - } else { - args = value; - console = get_bootadm_value("console", 1); - } - if (((args == NULL) || (args[0] == '\0')) && - ((console == NULL) || (console[0] == '\0'))) { - (void) snprintf(buf, BUFSIZ, "/sbin/bootadm set-menu " - "args= 2>&1"); - } else if ((args == NULL) || (args[0] == '\0')) { - (void) snprintf(buf, BUFSIZ, "/sbin/bootadm " - "set-menu args='-B console=%s' 2>&1", - console); - } else if ((console == NULL) || (console[0] == '\0')) { - (void) snprintf(buf, BUFSIZ, "/sbin/bootadm " - "set-menu args='%s' 2>&1", args); - } else if (strncmp(args, "-B ", 3) != 0) { - (void) snprintf(buf, BUFSIZ, "/sbin/bootadm " - "set-menu args='-B console=%s %s' 2>&1", - console, args); - } else { - (void) snprintf(buf, BUFSIZ, "/sbin/bootadm " - "set-menu args='-B console=%s,%s' 2>&1", - console, args + 3); - } - } else { - eeprom_error("Unknown value in set_bootadm_value: %s\n", name); - return; - } - - if (exec_cmd(buf, output, BUFSIZ) != 0) { - output_error_msg(output); - return; - } - - if (verbose) { - (void) printf("new:"); - (void) print_bootadm_value(name, 0); - } -} - /* * Returns 1 if bootenv.rc was modified, 0 otherwise. */ @@ -600,28 +247,10 @@ static int set_var(char *name, char *val, eplist_t *list) { benv_ent_t *p; - int old_verbose; if (strcmp(name, "bootcmd") == 0) return (0); - if ((strcmp(name, "boot-file") == 0) || - (strcmp(name, "boot-args") == 0)) { - set_bootadm_var(name, val); - return (0); - } - - /* - * The console property is kept in two places: menu.lst and bootenv.rc. - * Update them both. We clear verbose to prevent duplicate messages. - */ - if (strcmp(name, "console") == 0) { - old_verbose = verbose; - verbose = 0; - set_bootadm_var(name, val); - verbose = old_verbose; - } - if (verbose) { (void) printf("old:"); print_var(name, list); diff --git a/usr/src/man/man1m/eeprom.1m b/usr/src/man/man1m/eeprom.1m index a4d0213654..b24478363c 100644 --- a/usr/src/man/man1m/eeprom.1m +++ b/usr/src/man/man1m/eeprom.1m @@ -3,7 +3,7 @@ .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License. .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License. .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner] -.TH EEPROM 1M "Mar 28, 2007" +.TH EEPROM 1M "Feb 21, 2016" .SH NAME eeprom \- EEPROM display and load utility .SH SYNOPSIS @@ -13,7 +13,6 @@ eeprom \- EEPROM display and load utility .fi .SH DESCRIPTION -.sp .LP \fBeeprom\fR displays or changes the values of parameters in the \fBEEPROM.\fR It processes parameters in the order given. When processing a \fIparameter\fR @@ -35,13 +34,11 @@ incorrect. \fIplatform-name\fR is the name of the platform implementation and can be found using the \fB-i\fR option of \fBuname\fR(1). .SS "SPARC" -.sp .LP \fBSPARC\fR based systems implement firmware password protection with \fBeeprom\fR, using the \fBsecurity-mode\fR, \fBsecurity-password\fR and \fBsecurity-#badlogins\fR properties. .SS "x86" -.sp .LP \fBEEPROM\fR storage is simulated using a file residing in the platform-specific boot area. The \fB/boot/solaris/bootenv.rc\fR file simulates @@ -55,7 +52,6 @@ program. While it is possible to set the \fBsecurity-mode\fR, systems, these properties have no special meaning or behavior on x86 based systems. .SH OPTIONS -.sp .ne 2 .na \fB\fB-f\fR \fIdevice\fR\fR @@ -67,7 +63,6 @@ Use \fIdevice\fR as the \fBEEPROM\fR device. .SH OPERANDS .SS "x86 Only" -.sp .ne 2 .na \fB\fIacpi-user-options\fR\fR @@ -107,15 +102,26 @@ and then, if you do not obtain satisfactory results, \fB0x02\fR. Specifies the console device. Possible values are \fBttya\fR, \fBttyb\fR, \fBttyc\fR, \fBttyd\fR, and \fBtext\fR. In \fBtext\fR mode, console output goes to the frame buffer and -input comes from the keyboard. When this property is not present, the console -device falls back to the device specified by \fBinput-device\fR and +input comes from the keyboard. For SPARC, when this property is not present, +the console device falls back to the device specified by \fBinput-device\fR and \fBoutput-device\fR. When neither the console property or the \fBinput-device\fR and \fBoutput-device\fR property pair are present, the console defaults to the frame buffer and keyboard. .RE +.SS "x86 Only" +.ne 2 +.na +\fB\fIos_console\fR\fR +.ad +.sp .6 +.RS 4n +While \fBconsole\fR controls both boot loader and kernel console, setting +\fBos_console\fR allows setting console device only for kernel. Values +are the same as for \fBconsole\fR. +.RE + .SH NVRAM CONFIGURATION PARAMETERS -.sp .LP Not all OpenBoot systems support all parameters. Defaults vary depending on the system and the \fBPROM\fR revision. See the output in the "Default Value" @@ -129,8 +135,7 @@ prompt, to determine the default for your system. .sp .6 .RS 4n If \fBtrue\fR, boots automatically after power-on or reset. Defaults to -\fBtrue\fR. On x86, this parameter is controlled by the grub menu file. See -\fBinstallgrub\fR(1M). +\fBtrue\fR. .RE .sp @@ -1270,7 +1275,6 @@ you might use a device other than device \fBa\fR, as shown above. For example, you could set console to \fBttyb\fR if the second serial port is present. .SH FILES -.sp .ne 2 .na \fB\fB/boot/solaris/bootenv.rc\fR\fR @@ -1302,7 +1306,6 @@ Platform-specific version of \fBeeprom\fR. Use \fBuname\fR \fB-i\fR to obtain .RE .SH SEE ALSO -.sp .LP \fBpasswd\fR(1), \fBsh\fR(1), \fBsvcs\fR(1), \fBtip\fR(1), \fBuname\fR(1), \fBboot\fR(1M), \fBkadb\fR(1M), \fBkernel\fR(1M), \fBinit\fR(1M), -- cgit v1.2.3