Date: Sun, 29 Sep 2002 08:02:03 -0700 (PDT) From: Dirk-Willem van Gulik <dirkx@webweaving.org> To: freebsd-gnats-submit@FreeBSD.org Subject: misc/43474: dhcp.* values not set in kenv by bootp client in kernel Message-ID: <200209291502.g8TF23rF059594@www.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 43474 >Category: misc >Synopsis: dhcp.* values not set in kenv by bootp client in kernel >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sun Sep 29 08:10:04 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Dirk-Willem van Gulik >Release: 4.6.2, 5-Current >Organization: WebWeaving >Environment: FreeBSD foem.leiden.webweaving.org 5.0-CURRENT FreeBSD 5.0-CURRENT #0: Mon Jul 1 11:24:18 CEST 2002 dirkx@foem.leiden.webweaving.org:/usr/src/sys/i386/compile/FOEM i386 >Description: rc.diskless1 would like several dhcp.* variables to be set during the dhcp lease process of the kernel; i.e particular that of the dns servers. These are no longer set by the nfsclient/boot* system. >How-To-Repeat: Diskless boot -> /etc/resolv.conf not created by kenv extraction. >Fix: Add the nessesary fields (see patch) below. Index: bootp_subr.c =================================================================== RCS file: /usr/cvs/src/sys/nfsclient/bootp_subr.c,v retrieving revision 1.33 diff -r1.33 bootp_subr.c 181a183 > #define TAG_DOMAINSRVS 6 /* Domain name servers */ 182a185 > #define TAG_DOMAIN 15 /* Domain name */ 199a203 > #define TAG_COOKIE 134 /* ascii info for userland, via sysctl */ 1537a1555,1602 > TAG_DOMAINSRVS); > if (p != NULL) { > /* DNS / Domain name servers */ > struct in_addr addr; > #define _MAX_DNSSRV (3) > char tmp[ _MAX_DNSSRV * (4*3+3+1)+1]; /* dot.dot.dot.dot space repeat */ > int i,l = gctx->tag.taglen; > tmp[0] = '\0'; > > /* XX should we panic on currupted DHCP ?? */ > if (l % 4) > panic("bootpc: DNS srv len is %d", gctx->tag.taglen); > printf("domainnameservers "); > > /* XX double check if this is hte right method to obtain multiple entries > */ > l = l < sizeof(struct in_addr) * _MAX_DNSSRV ? l : sizeof(struct in_addr) * _MAX_DNSSRV; > for(i=0; i < l; i+=sizeof(struct in_addr)) { > unsigned int ip; > > bcopy(p+i, &addr,sizeof(struct in_addr)); > ip = ntohl(addr.s_addr); > > print_in_addr(addr); > printf(" "); > > snprintf(tmp+strlen(tmp),sizeof(tmp), > " %d.%d.%d.%d", > ip >> 24, (ip >> 16) & 255, (ip >> 8) & 255, ip & 255); > } > setenv("dhcp.domain-name-servers",tmp+1); > } > > p = bootpc_tag(&gctx->tag, &ifctx->reply, ifctx->replylen, > TAG_DOMAIN); > if (p != NULL) { > char tmp[ MAXHOSTNAMELEN +1 ]; > /* XXX so we can panic a boot with weird DHCP entries ? */ > if (gctx->tag.taglen > MAXHOSTNAMELEN) > panic("bootpc: DNS name too long (%d).",gctx->tag.taglen); > strncpy(tmp,p,gctx->tag.taglen); > tmp[gctx->tag.taglen]='\0'; > printf("domainname %s",tmp); > printf(" "); > setenv("dhcp.domain-name",tmp); > } > > p = bootpc_tag(&gctx->tag, &ifctx->reply, ifctx->replylen, >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200209291502.g8TF23rF059594>