https://github.com/martan03/ios-project
First project for the IOS subject
https://github.com/martan03/ios-project
school-assignment school-project
Last synced: 2 months ago
JSON representation
First project for the IOS subject
- Host: GitHub
- URL: https://github.com/martan03/ios-project
- Owner: Martan03
- Created: 2023-03-06T22:19:00.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2023-03-24T19:13:31.000Z (over 3 years ago)
- Last Synced: 2025-12-25T16:18:33.689Z (6 months ago)
- Topics: school-assignment, school-project
- Language: Shell
- Homepage:
- Size: 45.9 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
1. Úloha IOS (2023)
Popis úlohy
Česká kontrarozvědka FDTO (Fakt
Děsně Tajná
Organizace) má podezření, že v jejích řadách působí
krtek a služba tak byla kompromitována. Obsah některých přísně tajných
digitálních dokumentů byl nejenže vyzrazen tajným službám cizích
mocností, ale zřejmě i modifikován, což způsobilo chaos v organizaci
některých tajných operací a částečně tak paralyzovalo fungování celé
kontrarozvědky. V zájmu národní bezpečnosti je zapotřebí krtka urychleně
najít a polapit. Hledání však musí být maximálně diskrétní, aby krtek
netušil, že se okolo něj utahuje smyčka.
Protože zavedení nových oficiálních bezpečnostních opatření při práci
s utajovanými digitálními dokumenty by mohlo být podezřelé a krtka
vyplašit, rozhodlo se vedení kontrarozvědky, že bude potřeba tato
bezpečností opatření zavést utajeně. Tedy tak, aby si nikdo (kromě
nejužšího vedení a Vás) nebyl vědom toho, že nějaká nová opatření vešla
v platnost.
Vzhledem k Vaší léty prověřené loajalitě a bezchybné pracovní
historii v IT jednotce kontrarozvědky jste byli pro tuto tajnou misi
vybráni právě Vy. Vaším úkolem je vytvořit skript, který bude
prezentován jako nový interní nástroj pro zvýšení efektivity při práci s
elektronickými dokumenty, zatímco skrytě bude použit pro tajné
zaznamenávání (tzv. logging) a ohlašování informací o tom, se kterými
dokumenty (a kdy) daný uživatel pracoval.
Citlivé dokumenty jsou v kontrarozvědce zásadně uchovávány na
serverech a přístup k nim probíhá vzdáleně pomocí příslušných nástrojů.
Skript mole (Makes One’s
Life Easier) tedy bude fungovat jako
tzv. wrapper nad textovými editory, což znamená, že textový editor bude
spouštěn skrze skript mole. Skript si bude pamatovat, které
soubory byly v jakém adresáři prostřednictvím skriptu mole
editovány. Jednotlivé soubory je zároveň možné přiřazovat do skupin pro
jednodušší filtrování při práci s velkým množstvím souborů. Pokud bude
skript spuštěn bez parametrů, vybere skript soubor, který má být
editován.
Specifikace chování skriptu
JMÉNO
-
mole – wrapper pro efektivní použití textového editoru
s možností automatického výběru nejčastěji či posledně modifikovaného
souboru.
POUŽITÍ
mole -h
mole [-g GROUP] FILE
mole [-m] [FILTERS] [DIRECTORY]
mole list [FILTERS] [DIRECTORY]
mole secret-log [-b DATE] [-a DATE] [DIRECTORY1 [DIRECTORY2 [...]]]
Popis
-
-h – Vypíše nápovědu k použití skriptu (volba
secret-log by neměla být v nápovědě uvedena; nechceme krtka
upozornit, že sbíráme informace).
-
mole [-g GROUP] FILE – Zadaný soubor bude otevřen.
- Pokud byl zadán přepínač
-g, dané otevření souboru bude
zároveň přiřazeno do skupiny s názvem GROUP.
GROUP může být název jak existující, tak nové skupiny.
-
mole [-m] [FILTERS] [DIRECTORY] – Pokud
DIRECTORY odpovídá existujícímu adresáři, skript z daného
adresáře vybere soubor, který má být otevřen.
- Pokud nebyl zadán adresář, předpokládá se aktuální adresář.
- Pokud bylo v daném adresáři editováno skriptem více souborů, vybere
se soubor, který byl pomocí skriptu otevřen (editován) jako
poslední.
- Pokud byl zadán argument
-m, tak skript vybere soubor,
který byl pomocí skriptu otevřen (editován) nejčastěji.
- Pokud bude při použití přepínače
-m nalezeno více
souborů se stejným maximálním počtem otevření, může mole
vybrat kterýkoliv z nich.
- Výběr souboru může být dále ovlivněn zadanými filtry
FILTERS.
- Pokud nebyl v daném adresáři otevřen (editován) ještě žádný soubor,
případně žádný soubor nevyhovuje zadaným filtrům, jedná se o chybu.
-
mole list [FILTERS] [DIRECTORY] – Skript zobrazí seznam
souborů, které byly v daném adresáři otevřeny (editovány) pomocí
skriptu.
- Pokud nebyl zadán adresář, předpokládá se aktuální adresář.
- Seznam souborů může být filtrován pomocí
FILTERS.
- Seznam souborů bude lexikograficky seřazen a každý soubor bude
uveden na samostatném řádku.
- Každý řádek bude mít formát
FILENAME:<INDENT>GROUP_1,GROUP_2,..., kde
FILENAME je jméno souboru (i s jeho případnými příponami),
<INDENT> je počet mezer potřebných k zarovnání a
GROUP_* jsou názvy skupin, u kterých je soubor evidován.
- Seznam skupin bude lexikograficky seřazen.
- Pokud budou skupiny upřesněny pomocí přepínače
-g (viz
sekce FILTRY), uvažujte při výpisu souborů a skupin pouze záznamy
patřící do těchto skupin.
- Pokud soubor nepatří do žádné skupiny, bude namísto seznamu skupin
vypsán pouze znak -.
- Minimální počet mezer použitých k zarovnání (
INDENT) je
jedna. Každý řádek bude zarovnán tak, aby seznam skupin začínal na
stejné pozici. Tedy např:
FILE1: grp1,grp2
FILE10: grp1,grp3
FILE: -
-
mole secret-log [-b DATE] [-a DATE] [DIRECTORY1 [DIRECTORY2 [...]]]
– Skript za účelem dopadení krtka vytvoří tajný komprimovaný log s
informacemi o souborech otevřených (editovaných) skrze skript
mole.
- Pokud byly zadány adresáře, tajný log bude obsahovat záznamy o
otevřených (editovaných) souborech pouze z těchto adresářů. Neexistující
adresáře nebo adresáře bez záznamů budou ignorovány.
- Pokud nebyl zadán žádný adresář, tajný log bude obsahovat záznamy ze
všech evidovaných adresářů.
- Otevřené (editované) soubory, které mají být v tajném logu
zaznamenány, je možné dále omezit pomocí filtrů -a a
-b (viz níže).
Filtry
FILTERS může být kombinace následujících filtrů (každý
může být uveden maximálně jednou):
-
[-g GROUP1[,GROUP2[,...]]] – Specifikace skupin. Soubor
bude uvažován (pro potřeby otevření nebo výpisu) pouze tehdy, pokud jeho
spuštění spadá alespoň do jedné z těchto skupin.
-
[-a DATE] - Záznamy o otevřených (editovaných)
souborech před tímto datem včetně (volitelně lze implementovat i
jako striktně před uvedeným datem; UPDATED 22.3.) nebudou
uvažovány.
-
[-b DATE] - Záznamy o otevřených (editovaných)
souborech po tomto datu včetně (volitelně lze implementovat i
jako striktně po uvedeném datu; UPDATED 22.3.) nebudou
uvažovány.
- Argument
DATE je ve formátu
YYYY-MM-DD.
Nastavení a konfigurace
- Skript si pamatuje informace o svém spouštění v souboru, který je
dán proměnnou MOLE_RC. Formát souboru není specifikován.
- Pokud není proměnná nastavena, jedná se o chybu.
- Pokud soubor na cestě dané proměnnou
MOLE_RC
neexistuje, soubor bude vytvořen včetně cesty k danému souboru (pokud i
ta neexistuje).
- Skript spouští editor, který je nastaven v proměnné
EDITOR. Pokud není proměnná EDITOR nastavená,
respektuje proměnnou VISUAL. Pokud ani ta není nastavená,
použije se příkaz vi.
Formát tajného logu
- Tajný log vygenerovaný pomocí příkazu
secret-log bude
uložen v adresáři .mole umístěném v domovském adresáři
(tedy např. /home/$USER/.mole/). Název souboru bude ve
formátu log_USER_DATETIME.bz2, kde USER
odpovídá jménu aktuálního uživatele a DATETIME odpovídá
datu a času vytvoření tajného logu.
- Tajný log bude obsahovat záznamy o všech známých manipulacích (tedy
otevření skrze skript mole) s vybranými soubory, případně
dále omezených na daný časový úsek pomocí přepínačů -a,
-b, nebo jejich kombinací.
- Formát záznamů v logu bude
FILEPATH;DATETIME_1;DATETIME_2;..., kde
-
FILEPATH je reálná cesta k souboru,
-
DATETIME_N je datum a čas chronologicky
N-tého známého otevření souboru buď napříč celou známou
historií, nebo v daném časovém úseku.
- Záznamy v tajném logu budou seřazeny lexikograficky podle hodnoty
FILEPATH.
- Formát hodnot
DATETIME a DATETIME_N je
YYYY-MM-DD_HH-mm-ss.
- Tajný log komprimujte pomocí utility
bzip2.
Poznámky
- Můžete předpokládat, že nebude zadána skupina se jménem
- a že názvy skupin nebudou obsahovat znak čárky
- Můžete předpokládat, že názvy souborů (ani jejich cesty) nebudou
obsahovat znaky středníku nebo dvojtečky.
- Skript nebere v potaz otevření nebo editace, které byly provedeny
mimo skript mole.
- Stejně tak pro příkaz
mole [-m] [FILTERS] [DIRECTORY]
skript nebere v potaz soubory, se kterými dříve počítal a které jsou
nyní smazané (u ostatních příkazů není potřeba kontrolovat existenci
souboru). Například, pokud byl posledně editovaný soubor
smazán, volání mole otevře předposledně editovaný
soubor, pokud byl i ten smazán, bude otevřen předpředposledně
editovaný soubor, atp. UPDATED 6.3.
- Při rozhodování relativní cesty adresáře je doporučené používat
reálnou cestu (realpath). Důvod např.:
Návratová hodnota
- Skript vrací úspěch v případě úspěšné operace nebo v případě úspěšné
editace. Pokud editor vrátí chybu, skript vrátí stejný chybový návratový
kód. Interní chyba skriptu bude doprovázena chybovým hlášením.
Implementační detaily
- Skript by měl mít v celém běhu nastaveno
POSIXLY_CORRECT=yes.
- Skript by měl běžet na všech běžných shellech (dash, ksh, bash).
Můžete použít GNU rozšíření pro sed či awk.
Jazyk Perl nebo Python povolen není.
- Skript by měl ošetřit i chybový případ, že na daném stroji utilita
realpath není dostupná (např. ukončením programu s chybovým
kódem).
-
UPOZORNĚNÍ: některé servery, např.
merlin.fit.vutbr.cz, mají symlink
/bin/sh -> bash. Ověřte si proto, že skript skutečně
testujete daným shellem. Doporučujeme ověřit správnou funkčnost pomocí
virtuálního stroje níže.
- Skript musí běžet na běžně dostupných OS GNU/Linux, BSD a MacOS.
Studentům je k dispozici virtuální stroj, na kterém lze ověřit správnou
funkčnost projektu, s obrazem ke stažení zde: http://www.fit.vutbr.cz/~lengal/public/trusty.ova
(pro VirtualBox, login: trusty / heslo:
trusty).
- Skript nesmí používat dočasné soubory. Povoleny jsou však dočasné
soubory nepřímo tvořené jinými příkazy (např. příkazem
sed -i). Soubor MOLE_RC ani tajné log soubory
nejsou v tomto případě chápány jako dočasné soubory.
- Není potřeba řešit možnost souběhu několika instancí skriptu, v
takovém případě je chování nedefinované.
Možná rozšíření
- Implementuje u příkazů
mole [-m] [FILTERS] [DIRECTORY],
list a secret-log nový přepínač
-r (recursive), který způsobí, že mole bude
hledat vyhovující záznamy o otevření (editaci) souborů i mezi záznamy,
které se vztahují ke vnořeným adresářům vzhledem k
DIRECTORY (resp. aktuálnímu adresáři, pokud nebyl
DIRECTORY zadán).
- Tedy například příkaz
mole list ~/proj1 by na výstup
vypsal jak soubor main.c, tak soubor
.git/config za předpokladu, že má v logu
MOLE_RC uloženy záznamy o otevření souborů
~/proj1/main.c a ~/proj1/.git/config.
- Implementujte u příkazů
mole [-m] [FILTERS] [DIRECTORY]
a list nový přepínač -d (default), který
způsobí, že mole bude pracovat pouze se záznamy spuštění
(editace) souborů bez specifikované skupiny.
- Tedy např. při použití příkazu
mole -d ~ bude ignorován
záznam o spuštění mole -g bash ~/.bashrc.
- Přepínač
-d bude výlučný s přepínačem -g,
tedy v rámci jednoho spuštění mole nemohou být zadány oba
přepínače zároveň.
- Implementace přepínačů
-d a -r je
nepovinná; korektní implementace může vynahradit jiné bodové
ztráty.
Odevzdávání
Odevzdávejte pouze skript mole (nebalte ho do žádného
archivu) do IS VUT.