Zadani prikladu na jedenactem terminu UNIXu (22.6.2000)

Naprogramujte uidlist

Máme server MFF, který se jmenuje master. Dále máme servery jednotlivých kateder (např. KSVI), které mají svoje subdomény. Každá katedra si eviduje zaměstnance ve své databázi (např. soubor "ksvi.uid") na svém serveru a má přidělen nějaký interval čísel UID, které může využívat. Na master serveru je potom databáze "uidlist", která vznikne spojením všech katederních databází. Na všech katederních servrech je uložena kopie "uidlist". Napište sadu programů, která tento systém realizuje a program "getuid".

Soubory "*.uid" a "uidlist" mají tuto strukturu:

UID   login   fullname

(pozor: fullname může obsahovat i mezery, proto je vhodné použít na oddělování jiný znak)

Na všech počítačích je uložen soubor uid.cfg, který má tuto strukturu:

Jméno_katedry   first_UID   number_UID   adresa_katederního_serveru

Je tedy třeba udělat tyto úkoly:

  1. Vyrobit soubory "*.uid". To se udělá tak, že si každý katederní server z proměnné $HOSTNAME zjistí svoji adresu, poté se podívá do souboru uid.cfg a od tamtud si zjistí rozsah UID svých zaměstnanců. Potom prohledá /etc/passwd a vytáhne z něho ty lidi, které k němu patří. Z toho potom vytvoří soubor "jméno_katedry.uid"
  2. Soubor "*.uid" nějak poslat na server master. Je jedno, jestli pomocí FTP, emailu nebo něčeho jiného.
  3. Udržovat na serveru "uidlist". Je jedno, jestli se to bude dít okamžitě po obdržení každého nového "*.uid" nebo třeba jednou za týden hromadně.
  4. Změněný "uidlist" dostat zase zpátky na všechny katederní servery.
  5. Vytvořit program "getuid", který bude dostávat dva parametry: jméno katedry a fullname nějakého uživatele (příklad volání programu: getuid KSVI Pavel Topfer). Tento program bude spouštěn na katederních serverech. Program prohledá "uidlist" a když tam uživatele najde, tak vypíše jeho UID a login. Když ho tam nenajde a dotazovaná katedra je jiná, než jeho katedra, tak zařve. Když ho tam nenajde a dotazovaná katedra je jeho (to opět zjistí z "uid.cfg"), tak si najde poslední využívané UID na jeho katedře a vypíše toto číslo zvýšené o jedničku. (To kvůli tomu, aby potom někdo s touto informací mohl založit nový účet tomuto člověku).

Toť vše. Případné nejasnosti adresujte na david@steiner.cz