Date: Thu, 18 Aug 2005 22:25:54 -0500 From: Dan Nelson <dnelson@allantgroup.com> To: "Brian J. McGovern" <mcgovern@beta.com> Cc: questions@freebsd.org Subject: Re: bootparamd doesn't allow parameters? Message-ID: <20050819032554.GD60291@dan.emsphone.com> In-Reply-To: <200508182207.j7IM7Urp003585@spoon.beta.com> References: <200508182207.j7IM7Urp003585@spoon.beta.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--NzB8fVQJ5HfG6fxh Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In the last episode (Aug 18), Brian J. McGovern said: > I'm in the process of trying to set up a Solaris jumpstart > server in a lab, and I decided for chuckles to do it with FreeBSD. > > The problem I'm running in to is that apparently, the Sun bootparamd > allows you to pass parameters as fields, for instance, as a couple of > sample fields out of the Solaris-generated /etc/bootparams (note: > entry is clearly not complete, but I didn't want to distract).... > > testserver rootopts=:rsize=32768 term=:vt100 > > However, if I move this directly in to FreeBSD's /etc/bootparams, it > will complain that it can not answer the request for "rootopts" from > the Sun box. > > Is there something I'm missing? the man page seems to allude to > the fact that all entries should be in the format of > <host>:</path/to/file>. Or, am I going to have to look at finding > another bootparamd than the stock one? The code silently fails if any host field doesn't resolve to a valid IP address. Try the attached diff, which lets your example line work for me. -- Dan Nelson dnelson@allantgroup.com --NzB8fVQJ5HfG6fxh Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="bootparamd.diff" Index: bootparamd.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/bootparamd/bootparamd/bootparamd.c,v retrieving revision 1.11.4.1 diff -u -p -r1.11.4.1 bootparamd.c --- bootparamd.c 28 Nov 2004 14:10:19 -0000 1.11.4.1 +++ bootparamd.c 19 Aug 2005 03:20:23 -0000 @@ -114,7 +114,7 @@ bp_getfile_res * bp_getfile_arg *getfile; struct svc_req *req; { - char *where, *index(); + char *where; static bp_getfile_res res; if (debug) @@ -127,35 +127,47 @@ struct svc_req *req; he = NULL; he = gethostbyname(getfile->client_name); - if (! he ) goto failed; + if (! he ) { + if (debug) warnx("bad hostname %s", getfile->client_name); + goto failed; + } strncpy(askname, he->h_name, sizeof(askname)); askname[sizeof(askname)-1] = 0; if (getthefile(askname, getfile->file_id,buffer,sizeof(buffer))) { + if (debug) warnx("matched: %s",buffer); + res.server_name = ""; + res.server_path = ""; + res.server_address.address_type = IP_ADDR_TYPE; + bzero(&res.server_address.bp_address_u.ip_addr,4); + if ( (where = index(buffer,':')) ) { /* buffer is re-written to contain the name of the info of file */ strncpy(hostname, buffer, where - buffer); hostname[where - buffer] = '\0'; where++; strcpy(path, where); - he = gethostbyname(hostname); - if ( !he ) goto failed; - bcopy( he->h_addr, &res.server_address.bp_address_u.ip_addr, 4); - res.server_name = hostname; res.server_path = path; - res.server_address.address_type = IP_ADDR_TYPE; - } - else { /* special for dump, answer with null strings */ - if (!strcmp(getfile->file_id, "dump")) { - res.server_name = ""; - res.server_path = ""; - res.server_address.address_type = IP_ADDR_TYPE; - bzero(&res.server_address.bp_address_u.ip_addr,4); - } else goto failed; + if (hostname[0]) { + he = gethostbyname(hostname); + if ( !he ) { + if (debug) warnx("invalid hostname %s", hostname); + goto failed; + } + bcopy( he->h_addr, &res.server_address.bp_address_u.ip_addr, 4); + res.server_name = hostname; + } + } else { + /* XXX allow "dump" keyword with no value. Why? no idea. + Fail otherwise. */ + if (strcmp(getfile->file_id, "dump")) { + if (debug) warnx("invalid value for keyword %s", getfile->file_id); + goto failed; + } } if (debug) - fprintf(stderr, "returning server:%s path:%s address: %d.%d.%d.%d\n", + fprintf(stderr, "returning server:\"%s\" path:\"%s\" address: %d.%d.%d.%d\n", res.server_name, res.server_path, 255 & res.server_address.bp_address_u.ip_addr.net, 255 & res.server_address.bp_address_u.ip_addr.host, --NzB8fVQJ5HfG6fxh--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050819032554.GD60291>