Restituiscono le informazioni relative alll'utente specificato.
\bodydesc{Le funzioni ritornano il puntatore alla struttura contenente le
- informazioni in caso di successo e \macro{NULL} in caso di errore, nel
- qual caso \var{errno} viene settata ad \macro{ENOMEM}.}
+ informazioni in caso di successo e \macro{NULL} nel caso non sia stato
+ trovato nessun utente corrispondente a quanto specificato.}
\end{functions}
Le due funzioni forniscono le informazioni memorizzate nel database degli
utenti (che nelle versioni più recenti possono essere ottenute attraverso PAM)
relative all'utente specificato attraverso il suo \acr{uid} o il nome di
-login, restituendo un puntatore ad una struttura di tipo \type{passwd}, (la
-cui definizione è riportata in \figref{fig:sys_passwd_struct}), allocata
-staticamente.
+login. Entrambe le funzioni restituiscono un puntatore ad una struttura di
+tipo \type{passwd} la cui definizione (anch'essa eseguita in \file{pwd.h}) è
+riportata in \figref{fig:sys_passwd_struct}, dove è pure brevemente illustrato
+il significato dei vari campi.
\begin{figure}[!htb]
\footnotesize
\label{fig:sys_passwd_struct}
\end{figure}
+La struttura usata da entrambe le funzioni è allocata staticamente, per questo
+motivo viene sovrascritta ad ogni nuova invocazione, così come le stringhe a
+cui essa fa riferimento. Ovviamente queste funzioni non sono rientranti, ne
+esistono quindi anche due versioni alternative (denotate dalla solita
+estensione \code{\_r}), i cui prototipi sono:
+\begin{functions}
+ \headdecl{pwd.h}
+
+ \headdecl{sys/types.h} \funcdecl{struct passwd *getpwuid\_r(uid\_t uid,
+ struct passwd *password, char *buffer, size\_t buflen, struct passwd
+ **result)}
+
+ \funcdecl{struct passwd *getpwnam\_r(const char *name, struct passwd
+ *password, char *buffer, size\_t buflen, struct passwd **result)}
+
+ Restituiscono le informazioni relative alll'utente specificato.
+
+ \bodydesc{Le funzioni ritornano 0 in caso di successo e un codice d'errore
+ altriementi, nel qual caso \var{errno} sarà settato opportunente.}
+\end{functions}
+
+In questo caso l'uso è molto più complesso, in quanto bisogna prima allocare
+la memoria necessaria a contenere le informazioni. In particolare i valori
+della struttura \var{passwd} saranno restituiti all'indirizzo \param{password}
+mentre la memoria allocata all'indirizzo \param{buffer}, per un massimo di
+\param{buflen} byte, sarà utilizzata per contenere le stringhe puntate dai
+campi di \param{password}; infine all'indirizzo puntato da \param{result}
+viene restituito il puntatore ai dati ottenuti, cioè \param{buffer} nel caso
+l'utente esista, o \macro{NULL} altrimenti. Qualora i dati non possano essere
+contenuti in \param{buflen} byte la funzione fallirà restituendo
+\macro{ERANGE} (e \param{result} sarà comunque settato a \macro{NULL}).
+
+Del tutto analoghe alle precedenti sono le funzioni \func{getgrnam} e
+\func{getgrgid} (e le relative analoghe rientranti con la stessa estensione
+\code{\_r}) che permettono di leggere le informazioni relative ai gruppi, i
+loro prototipi sono:
+\begin{functions}
+ \headdecl{grp.h}
+ \headdecl{sys/types.h}
+
+ \funcdecl{struct group *getgrgid(gid\_t gid)}
+
+ \funcdecl{struct group *getgrnam(const char *name)}
+
+ \funcdecl{struct group *getpwuid\_r(gid\_t gid, struct group *password,
+ char *buffer, size\_t buflen, struct group **result)}
+
+ \funcdecl{struct group *getpwnam\_r(const char *name, struct group
+ *password, char *buffer, size\_t buflen, struct group **result)}
+
+ Restituiscono le informazioni relative al gruppo specificato.
+
+ \bodydesc{Le funzioni ritornano 0 in caso di successo e un codice d'errore
+ altriementi, nel qual caso \var{errno} sarà settato opportunente.}
+\end{functions}
+
+Il comportamento di tutte queste funzioni è assolutamente identico alle
+precedenti che leggono le informazioni sugli utenti, l'unica differenza è che
+in questo caso le informazioni vengono restituite in una struttura di tipo
+\type{group}, la cui definizione è riportata in \figref{fig:sys_group_struct}.
\begin{figure}[!htb]
\footnotesize
\end{lstlisting}
\end{minipage}
\normalsize
- \caption{La struttura \var{passwd} contenente le informazioni relative ad un
- utente del sistema.}
- \label{fig:sys_passwd_struct}
+ \caption{La struttura \var{group} contenente le informazioni relative ad un
+ gruppo del sistema.}
+ \label{fig:sys_group_struct}
\end{figure}
+Le funzioni viste finora sono in grado di leggere le informazioni sia dal file
+delle password in \file{/etc/passwd} che con qualunque altro metodo sia stato
+utilizzato per mantenere il database degli utenti. Non permettono però di
+settare direttamente le password; questo è possibile con un'altra interfaccia
+al database degli utenti, derivata da SVID, che però funziona soltanto con un
+database che sia tenuto su un file che abbia il formato classico di
+\file{/etc/passwd}.
+
+Dato che ormai la gran parte delle distribuzioni di Linux utilizzano PAM, che
+come minimo usa almeno le \textit{shadow password}, con quindi delle modifiche
+rispetto al formato classico di \file{/etc/passwd}, ci limitiamo a citare
+queste funzioni in \tabref{tab:sys_passwd_func}.
+
+
+\begin{table}[htb]
+ \footnotesize
+ \centering
+ \begin{tabular}[c]{|l|l|}
+ \hline
+ \textbf{Funzione} & \textbf{Significato}\\
+ \hline
+ \hline
+ \func{fgetpwent} & \\
+ \func{fgetpwent\_r}& \\
+ \func{getpwent} & \\
+ \func{getpwent\_r} & \\
+ \func{setpwent} & \\
+ \func{putpwent} & \\
+ \func{endpwent} & \\
+ \func{fgetgrent} & \\
+ \func{fgetgrent\_r}& \\
+ \func{getgrent} & \\
+ \func{getgrent\_r} & \\
+ \func{setgrent} & \\
+ \func{endgrent} & \\
+ \hline
+ \end{tabular}
+ \caption{Funzioni per la manipolazione dei campi di un file usato come
+ database di utenti e gruppi nel formato di \file{/etc/passwd} e
+ \file{/etc/groups}.}
+ \label{tab:sys_passwd_func}
+\end{table}
+
+Un altro insieme di funzioni utili è quello che permette di accedere ai dati
+del database di
+
+
\section{Limitazione ed uso delle risorse}
\label{sec:sys_res_limits}