Az bootparamd.c egy függvénye (jelen esetben ebben van a lényeg) (az eredeti, debian patch nélküli változat):
Nézzük meg hol ugorhat a failed ágra: (a könnyebb észrevehetőség kedvéért CSUPA NAGY BETŰVEL kommentelek)
bp_getfile_res *
bootparamproc_getfile_1_svc(bp_getfile_arg *getfile,struct svc_req *svc_req)
{
char *where;
static bp_getfile_res res;
(void)svc_req;
if (debug)
fprintf(stderr,"getfile got question for \"%s\" and file \"%s\"\n",
getfile->client_name, getfile->file_id);
if (dolog)
syslog(LOG_NOTICE,"getfile got question for \"%s\" and file \"%s\"\n",
getfile->client_name, getfile->file_id);
he = gethostbyname(getfile->client_name);
if (!he) goto failed; // ITT BIZTOSAN NEM, MERT A KLIENS NEVÉT ÁT TUDJA ALAKÍTANI CÍMMÉ
strncpy(askname, he->h_name, sizeof(askname));
askname[sizeof(askname)-1] = 0;
if (getthefile(askname, getfile->file_id, buffer, sizeof(buffer))) {
if ((where = strchr(buffer,':'))!=NULL) { // HA VAN : A PARAMÉTERBEN
/* buffer is re-written to contain the name of the info of file */
strncpy(hostname, buffer, where - buffer);
hostname[where - buffer] = '\0';
where++;
strncpy(path, where, sizeof(path));
path[sizeof(path)-1] = 0;
he = gethostbyname(hostname);
// A ROOTOPTS ÉS NÉHÁNY MÁS PARAMÉTER ESETÉN A : ELŐTTI RÉSZ ÜRES!
if (!he) goto failed;
// AZ ÜRES SZTRINGET NEM FOGJA TUDNI CÍMMÉ ALAKÍTANI, MEGYÜNK A LEFOLYÓBA
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 */ // HA NINCS : A PARAMÉTERBEN
if (!strcmp(getfile->file_id, "dump")) {
res.server_name[0] = '\0';
res.server_path[0] = '\0';
bzero(&res.server_address.bp_address_u.ip_addr,4);
}
else goto failed; // HA NEM DUMP ÉS NINCS : A PARAMÉTERBEN
}
if (debug)
fprintf(stderr,
"returning server:%s path:%s address: %s\n",
res.server_name, res.server_path,
my_ntoa(res.server_address.bp_address_u.ip_addr));
if (dolog)
syslog(LOG_NOTICE,
"returning server:%s path:%s address: %s\n",
res.server_name, res.server_path,
my_ntoa(res.server_address.bp_address_u.ip_addr));
return(&res);
}
failed:
if (debug) fprintf(stderr,
"getfile failed for %s\n", getfile->client_name);
if (dolog) syslog(LOG_NOTICE,
"getfile failed for %s\n", getfile->client_name);
return NULL;
}
A kód alapján a bootparamd nem tud mit kezdeni az olyan paraméterekkel, amelyekben a kettőspont előtti rész üres. Például ezekkel: rootopts=:rsize=32768 boottype=:in console=:console=ttya
Nos, kb ennyit a drága bootparamd-ről. Most még megnézem a debian-os patch-et, hátha ott megjavították.
Szerk: a debian-os patch sem foglalkozott a problémával.
Szerk2: Pénteken kipróbálom majd, hogy tényleg így van-e. De nagy valószínűséggel tényleg nem működik megfelelően. Esetleg próbaképp' odabiggyesztek majd egy hosztnevet a kettőspont elé, hogy ahhoz mit szól a drága.
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.
Slackware Linux 12.1 | 2.6.26.7-janos