bash: i have no name!

sziasztok!
jelenseg a kovetkezo" deb/lenny alatt: egy nss: compat+mysql modon beallitott gep eseten (lasd /etc/nsswitch.conf) nehany terminal (pl. xfce4-terminal) non-login inditasa eseten a shell promptban "i have no name!" jelenik meg a felhasznalo loginja helyett. mondjuk az esetek 70-80%-aban, teljesen random modon. mas terminal, pl xterm eseten mindig jo. a `whoami`, az `id`, a $USER shell valtozo viszont ezesetben is jol mutatja a felhasznalo valo's loginja't. persze az erintett felhasznalo NSS dolgait mysql-bol szedi. a google azt mondta erre nagy bolcsen hogyha 1. chroot-olunk 2. nem elerheto(?!) az /etc/passwd akkor jelentkezik hasonlo problema. itt ezutobbi nyilvan elmebetegseg, elobbi meg nem all fent, tehat ez kb hasznalhatatlan.
valami otlet? erdekesseg: a problema megoldhato egy

PS1='\u@\h:\w$ '

=>

PS1='${USER}@\h:\w$ '

csere'vel, csak most nincs kedvem soktucatnyi juzerne'l kezzel atirni ezeket...:]
a.

Hozzászólások

Nem is kell ÁTírni, ha strapásnak tűnik (szvsz nem az), elég egy ciklus az inkriminált fájlokra és mindegyikbe echo "export PS1..." >>.

Valahol az nss-ben elveszik a getpwnam. Ha nem mindig, nem mindenkinél, akkor én valami időzítési/kesselési problémára gyanakodnék.

igen, egy getpwuid() hivas elhasalasa utan teszi bele valahova hogy "i have no name!". de ilyen hivassal -- mmint getpwuid() es getpwnam() -- tele van a a shell. amit egyebkent nem is nagyon ertek, hogy miert nem az elejen 1x keri le az uid-hez tartozo adatokat. valoszinuleg ebbol az egyik elhasal, de a tobbi (az $USER valtozo beallitasa, pl) meg megy. najo, most nem fogok bash-t debuggolni ;] a.

annyira nem kell elbonyolitani a dolgot elvileg, mert minden processnek megvan a maga pidje (getpid(), rendszerhivas, eleg alacsony szinten), es utana ma'rcsak a getpwuid()-del meg kell keresni a megfelelo" nss-rekordot. csak a bash ezt egy kicsit elbonyolitja, jobban a kelletenel. es ezenfelul hogy a getpwnam()-ot miert is hivja meg egyatalan, azt sem ertem. login alapjan megmondani az uid-et? hol van erre szukseg a shell-ben?

Mindenhol szükség van rá, ugyanis noha sok *x-rendszer nem szereti, de gyakorlatilag mindegyik lehetővé teszi, hogy ugyanazzal az UID-del több különböző loginname-nel rendelkező felhasználó legyen a rendszerben. Márpedig a getpid alapján uidot ugyan ki tudsz bányászni, de hogy abból helyes logname is legyen ahhoz már az utmp(x)-t kellene bogarászni - no ennél sokkal egyszerűbb, ha a login mechanizmus maga átadja ezt az USER/LOGNAME nevű környezeti változóban.

"If bash cannot read the /etc/passwd file it will put the string "I have no name" in the environment variable."

Asszem anno nekem is volt emiatt ilyen probelmam.

Az baromira nem normális viselkedés, hogy a getpwuid/getpwnam hívások időnként random mód hibára futnak. Ennek szokott az lenni a vége, hogy pl. levelek néha visszapattannak (no such user), meg a login nem enged be.

Ha a dolog következetes (azaz pl. xy program mindig ezt csinálja), akkor az simán lehet jogosultságproblémák miatt is (pl. a nem root felhasználó nem tudja olvasni azt a konfig fájlt, amiből az nss_* modul a saját adatbázisához szükséges jelszót/egyebeket olvasná ki, vagy esetleg az iptables nem engedi konnektálni az adatbázishoz egyes usereket).

A megoldás:

apt-get install nscd

Noha nem tudom egészen pontosan, hogy mi okozza a jelenséget, de én is belefutottam már, és nálam az nscd (Name Service Cache Daemon) telepítése oldotta meg a problémát.

A munkahelyi gépemen Ubuntu 10.04 fut, nálam a gép tartományba léptetése után jött elő ez a probléma, de ahogy telepítettem az nscd-t, rögtön meg is oldódott.