Stránka s nějakými příklady ke cvičením ze základů Unixu a TCP/IP

  1. Quota system
    Máte dva konfigurační soubory - user.quota a group.quota. Soubory obsahují řádky ve formátu:
    <meno uzivatele (resp. jmeno(!) skupiny)><mezera><cislo>
    Číslo je limit v kilobajtech, které smí uživatel zabírat ve svem domovském adresáři včetne podadresářů.

    Pokud je uživatel uveden v souboru users.quota, je jeho limit cislo uvedene tam. Pokud neni, je potreba zjistit, do jake primarni skupiny patri a zjistit, jestli ma limit ta - pokud ano, limit uzivatele je cislo uvedene jako limit prislusne skupiny.

    Pokud uzivatel ani jeho skupina limit nemá - pak prostě limit nemá.

    Napište program, který pro všechny uživatele jistí, zda překračují limit. Pokud uživatel limit překročí, pošlete mu dopis. Pokud překročení trvá déle než 7 dní, neposílejte dopis uživateli, ale správci.

  2. NSLOOKUP via MAIL
    Program má zpracovat e-mail obsahující v textu sekci začínající klíčovým slovem nslookup a končící slovem exit tak, že obsah této sekce předá programu nslookup a výsledek odešle zpět odesilateli zprávy.
    Z předávaných řádků je potřeba odstranit veškerá případná přesměrování do souboru (příkaz se má provést, ale bez přesměrování) a je potřeba odstranit řádek obsahující příkaz type.
    Program je nutno navrhnout s ohledem na to, že v budoucnosti bychom třeba chtěli mít ve zprávě i jiné sekce, uvozené jiným startovacím slovem (ale končící vždy exit), jejichž obsah bude zpracováván jiným postupem (programem).

  3. FTP Mirror
    Program dostane na stdin URL ve tvaru ftp://[username:password@]host_address/directory[/file_name]. Má za úkol okopírovat tento adresář (soubor) na lokální disk. Soubor nesmí být kopírován pokud už stejný existuje (soubor není stejný, když má jinou délku, nebo když má soubor jiné datum). Při porovnávání datumů je potřeba, vzhledem k problémům s různými formáty času i časovými zónami neporovnávat "remote" čas s lokálním časem souboru, ale je potřeba mít uschované "remote" časy souborů z minulého běhu a porovnávat vůči nim.
    Soubory, které zmizí na vzdálené straně je potřeba smazat i lokálně.
    Není-li uvedeno uživatelské jméno a heslo v URL, je potřeba použít anonymní přístup.

  4. Listserver
    Program umožňuje uživatelům přihlašování se to diskusních skupin. Uživatelé diskusní skupiny <jméno> jsou (přesněji řečeno, jejich e-mail adresy) v souboru <jméno> - co řádek to jedna adresa.
    Program umí zpracovávat příkazy sloužící pro přidání resp. odebrání odesilatele dopisu ze specifikovaného seznamu.
    Některé diskusní listy mohou být prohlášený za uzavřené, pak není uživatel přidán/odebrán automaticky, místo toho je jeho požadavek forvardován na adresu správce listu (každý list může mít jineého správce).
    Formát konfiguračního souboru(-ů) je textový, ale jinak dle vašeho vlastního návrhu a uvážení.
    Program musí správně reagovat na situace, kdy se uživatel snaží přidat podruhé nebo kdy se snaží odstranit neexistující uživatel a odesilatele informovat o provedených (neprovedených) akcích.
    Pozor, soubory musí obsahovat "holé" e-mail adresy, zatímco adresy ve From: mohou být složitější. Počítejte, že From: V obou případech je třeba odstranit z "holé" adresy případné úvodní a závěrečné mezery

  5. WWW Statistika
    Máte k dispozici jednu HTML stránku obsahující (mimo jiné) odkazy na další WWW servery. Odkazy v rámci stránky, které nás zajímají mají zásadně tvar:
    <A HREF="http://server-address[:cislo_portu][/cokoliv]"
    Z této stránky vypreparujte seznam serverů, na které se odkazuje. Tak, kde součástí URL není ":číslo_portu", uložte default hodnotu :80. Servery jsou různé, pokud mají různou adresu serveru nebo číslo portu. Tento seznam je pomocný a jeho obsah nemusí být zachován
    Máte k dispozici program "socket adresa_serveru cislo_portu", který spustíte pro každý řádek seznamu. Na jeho vstup vždy předáváte data v následujícím formátu ([CRLF} označuje prázdný řádek):
    HEAD / HTTP/1.0
    Host: adresa_serveru
    [CRLF]
    Na výstupu obdržíte (mimo jiné) Ŕádku:
    Server: oznaceni_software další_údaje
    Cílem je vypracovat statistiku, kolikrát byl použit ten-který software (podle vráceného označení - identifikace) jako WWW server.
    Pokud program "socket" nevydá výsledek ve zvoleném časovém limitu, má být ukončen (zasláním signálu SIGINT, -2). Adresy serverů, které neodpoví nebo jejichž odpověď neobsahuje příslušný řádek je potřeba "přendat" do seznamu neodpovídajících serverů.
    Program by měl být napsán tak, aby bylo možno přerušit jeho běh a spustit jej znovu aniž by kontaktoval znovu všechny servery.
    Bylo by vhodné program napsat tak, aby kontaktoval několik serverů současně (několik programů "socket" spuštěných současně" - zároveň jich však nesmí současně běžet více než nastavený počet.
-------------------------- Nekladu si žádné zvláštní ambice, co se vzhledu a úpravy této stránky týče.
-------------------------
Powered by FreeBSD Náměty a tipy, co mi kde nefunguje a tak podobně prijímá dan@obluda.cz.

© Dan Lukeš, 1999, 2000

Poslední změna: Monday, 22-Feb-2000 08:10:48 CET