( wowbagger | 2009. 02. 16., h – 17:12 )

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