\section{Refinement and Implementation} \subsection{First-Level Refinement} \frame { \frametitle{First-Level Refinement} Pseudocode Implementation \lstset{language=pascal,basicstyle=\tiny} \lstinputlisting{D:/acl.pseudo} } \subsection{Second-Level Refinement} \frame { \frametitle{Second-Level Refinement} Pseudocode Transfer \begin{itemize} \item<1-> role account \begin{itemize} \item<2-> \lstinline|struct uid_t| \end{itemize} \item<3-> commands \begin{itemize} \item<4-> \lstinline|char *[]| \end{itemize} \item<5-> definiertes Interface := \lstinline|int accessOk(uid_t rname, char *cmd[]);| \end{itemize} } \subsection{Functions} \frame { The missing three \begin{itemize} \item<2-> Obtaining Location \item<3-> parse ACL Records \item<4-> Error Handling \end{itemize} } \subsubsection{Obtaining Location} \frame { \frametitle{Obtaining Location} utmp File \begin{itemize} \item<1-4> user account \item<2-4> login terminal \item<3-4> login time \item<4-4> remotehost $|$ localhost \item<5-> (user,tty,time,host) \end{itemize} \begin{itemize} \item<6-> Parse utmp File \item<7-> $\rightarrow$ 2 neue Probleme \begin{itemize} \item<8-> I Jeder Prozess kann utmp verändern? \begin{itemize} \item<9-9> $\rightarrow$ utmp ist nicht Vertrauenswürdig \end{itemize} \item<10-> II Entkoppelte Prozesse (Terminallos) \begin{itemize} \item<11-12> User kann sich mehrfach anmelden \item<12-12> $\rightarrow$ Prozess an Terminal binden \end{itemize} \item<13-> umtp nicht Vertrauenswürdig $\Longrightarrow$ Design \item<14-> Zugriff verweigern, wenn nicht *any* angegeben \end{itemize} \end{itemize} } \subsubsection{ACL Record} \frame { \frametitle{ACL Record} \begin{itemize} \item<1-6> \lstinline|role rname| \item<2-6> \lstinline|string user| \item<3-6> \lstinline|string location| \item<4-6> \lstinline|string timeofday| \item<5-6> \lstinline|string commands[]| \item<6-6> \lstinline|int numcommands| \item<7-> \lstset{language=pascal,basicstyle=\tiny} \lstinputlisting{D:/record.pseudo} \end{itemize} } \subsubsection{Error Handling} \frame { }