Search
j0ke.net Open Build Service
>
Projects
>
server:pxe
>
openbsd-pxeboot
> pxeboot_i386.patch
Sign Up
|
Log In
Username
Password
Cancel
Overview
Repositories
Revisions
Requests
Users
Advanced
Attributes
Meta
File pxeboot_i386.patch of Package openbsd-pxeboot
--- sys/arch/i386/stand/pxeboot/srt0.S Fri Mar 19 08:48:19 2004 +++ sys/arch/i386/stand/pxeboot/srt0.S Mon Oct 22 11:40:12 2007 @@ -34,6 +34,7 @@ .globl _C_LABEL(end) .globl _C_LABEL(edata) .globl _C_LABEL(boot) + .globl _C_LABEL(boot_params) .globl _C_LABEL(_rtt) .globl _C_LABEL(bios_bootdev) .globl _ASM_LABEL(pmm_init) @@ -143,6 +144,12 @@ relocated: movl $_C_LABEL(edata), %edi cld rep; stosb + + /* Point at the boot params */ + movl $_C_LABEL(edata), %esi + subl $_C_LABEL(_start), %esi + addl $PXEBOOTADDR, %esi + movl %esi, _C_LABEL(boot_params) /* Set our program name ("PXEBOOT", not "BOOT"). */ movl $pxe_progname, %eax --- sys/stand/boot/cmd.c Wed Feb 28 11:15:25 2007 +++ sys/stand/boot/cmd.c Mon Oct 22 11:40:12 2007 @@ -80,6 +80,8 @@ char *nextword(char *); static char *whatcmd(const struct cmd_table **ct, char *); static char *qualify(char *); +const char* boot_params = NULL; +const char boot_params_sig[11] = "BootParams:"; char cmd_buf[CMD_BUFF_SIZE]; int @@ -99,24 +101,34 @@ read_conf(void) #ifndef INSECURE struct stat sb; #endif - int fd, rc = 0; + int fd = 0, rc = 0; - if ((fd = open(qualify(cmd.conf), 0)) < 0) { - if (errno != ENOENT && errno != ENXIO) { - printf("open(%s): %s\n", cmd.path, strerror(errno)); - return 0; + if (!boot_params || + strncmp(boot_params, boot_params_sig, + sizeof(boot_params_sig)) != 0 || + *(boot_params += sizeof(boot_params_sig)) == '\0') + boot_params = NULL; + + if (!boot_params) { + if ((fd = open(qualify(cmd.conf), 0)) < 0) { + if (errno != ENOENT && errno != ENXIO) { + printf("open(%s): %s\n", cmd.path, + strerror(errno)); + return 0; + } + return -1; } - return -1; - } #ifndef INSECURE - (void) fstat(fd, &sb); - if (sb.st_uid || (sb.st_mode & 2)) { - printf("non-secure %s, will not proceed\n", cmd.path); - close(fd); - return -1; - } + (void) fstat(fd, &sb); + if (sb.st_uid || (sb.st_mode & 2)) { + printf("non-secure %s, will not proceed\n", + cmd.path); + close(fd); + return -1; + } #endif + } do { char *p = cmd_buf; @@ -124,7 +136,14 @@ read_conf(void) cmd.cmd = NULL; do { - rc = read(fd, p, 1); + if (boot_params) { + *p = *(boot_params++); + if( *p == ';' ) + *p = '\n'; + rc = *p == '\0' ? 0 : 1; + } else { + rc = read(fd, p, 1); + } } while (rc > 0 && *p++ != '\n' && (p-cmd_buf) < sizeof(cmd_buf));