Zaliczenie 2020

Zadanie 3: opisy merytoryczne kredytów
--------------------------------------

Przypominamy, że Green Forest Bank jest zorganizowany w ten sposób, że ma
dwa główne działy: bankowość detaliczną (DBD) i biznesową (DBB). Jeden z
nich zajmuje się obsługą klientów indywidualnych, a drugi klientów
biznesowych. Każdy dział ma swojego dyrektora, a każdy dyrektor ma pod sobą
pewną liczbę szeregowych pracowników obsługi. Zakładamy, że żaden
użytkownik systemu komputerowego banku nie może przyjmować więcej niż
jednej z powyższych roli.

Dotychczas baza danych zawierała trzy katalogi: kredyty, lokaty, zadania
oraz pewną liczbę ich podkatalogów. Katalog z opisami kredytów
pozwalał przeglądać kredyty w porządku chronologicznym.

Pracownicy uskarżali się, że trudno im szukać opisów kredytów z interesującej
ich dziedziny (np. mieszkaniowe). Dlatego postanowiono dołożyć opisy
merytoryczne stosując słowa kluczowe. Każdej dziedzinie odpowiada
pojedyncze słowo kluczowe. Każdy kredyt jest zaliczany TYLKO do jednej
dziedziny.

Do przeglądania kredytów z określonej dziedziny powstaną specyficzne
apliacje. Jak widać, ilość programów w banku zaczyna rosnąć.
Powoduje to kłopoty z zapewnieniem bezpieczństwa aplikacji.
Zdecydowano się więc na wdrożenie autoryzacji w oparciu o mechanizmy PAM.
Powierzono Ci wykonanie następujących bazowych prac:

1. Stworzenie szkieletu aplikacji w języku C dla pracowników firmy
z ustanowieniem standardu kodowania. Aplikacje mają używać
mechanizmów PAM do autoryzacji. Oprócz szkieletu programu potrzebny
będzie wzór pliku konfiguracyjnego dla PAM.

2. Wykonanie na bazie tego szkieletu próbnej aplikacji obsługującej
kredyty z określonej dziedziny (proof of concept). Ma ona mieć
dwa poziomy uprawnień:

- zwykły pracownik może przeglądać kredyty dla wybranej dziedziny,
na potrzeby tego zadania zakładamy, że przeglądanie polega na wypisaniu
pierwszych wierszy z plików tekstowych opisujących kredyty
(jakby nagłówków);
- menadżerowie mogą zmieniać klasyfikację istniejących kredytów,
wybierając kredyt i podając jego nową klasyfikację.

Pracę z aplikacją pracownik zaczyna od logowania się do aplikacji.
Aplikacja, używając mechanizmów PAM, ustala jego poziom uprawnień.

3. Ponieważ menadżerowie są leniwi i nie chce im się katalogować kredytów,
chcą mieć możliwość cedowania zwiększonych możliwości działania
na NIEKTÓRYCH pracowników. Skorzystamy do tego z mechanizmu SUDO.

Katalog opisów merytorycznych ma być osobną jednostką, zapisywaną pod
koniec pracy aplikacji na plik(i) w katalogu kredyty.

Wprowadzenie nowego kredytu powoduje automatycznie utworzenie pliku z
pełnym opisem kredytu (nasza aplikacja tego nie robi, kredyty do testowania
wprowadzimy ręcznie). Natomiast w katalogu merytorycznym przy jego
klasyfikacji znajdzie się stosowny odnośnik (umówmy się, że będzie to
ścieżka do pliku) - i to nasza aplikacja pozwala zmienić, o ile
użytkownik posiada rozszerzone uprawnienia.

Dozwolone operacje to:

- obejrzenie listy symboli klasyfikacyjnych
- obejrzenie nagłowków kredytów o podanym symbolu
- zmiana klasyfikacji dla istniejącego kredytu
- podanie listy kredytów bez klasyfikacji.

Interfejs nie musi być śliczny, wystarczy tekstowa komunikacja z oknem
konsoli.

---------------------------------------------------------------------

W ramach oddawania zadania należy

A. Przygotować szkielet aplikacji jako wzór dla innych.

B. Dostarczyć aplikację katalogu merytorycznego zgodną z powyższą:
żródła w C, pliki konfiguracyjne, skrypt/Makefile tworzący
aplikację i rozmieszczający pliki konfiguracyjne.

C. Przygotować na drugie zajęcia NIEWIELKĄ bazę testową (10 kredytów).

D. Nadać uprawnienia pracownikom (por. zajęcia 1-2),
używając SUDO należy jednemu z szeregowych pracowników pozwolić
na pełną obsługę aplikacji testowej (ale tylko na to).

Wszystkie materiały źródłowe należy dostarczyć w postaci spakowanego
archiwum tgz, używając Moodle. Termin: dzień przed laboratorium
z odbiorem zadania.

Przecieki z działu kontroli jakości: oceniany będzie styl programowania
(w zakresie bezpieczeństwa), zwłaszcza gospodarka buforami i ogólnie
pamięcią dynamiczną.