X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=sockctrl.tex;h=eec51ecf19485044bac87a036036176cc952e00e;hp=7a7d12fd6c7ad7e8efb9f6fd6df074f9b259df5b;hb=ac964c5d51a316d519c5a6319b46e962c947d025;hpb=605d546f92ab29c9bc331c17c4c95ab967243ff0 diff --git a/sockctrl.tex b/sockctrl.tex index 7a7d12f..eec51ec 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -170,13 +170,12 @@ carattere ``\texttt{:}'' e prosegue con la lista dei \textsl{servizi} su cui le relative informazioni sono raggiungibili, scritti nell'ordine in cui si vuole siano interrogati. -Ciascun servizio è specificato a sua volta da un nome, come \texttt{file}, +Ogni servizio è specificato a sua volta da un nome, come \texttt{file}, \texttt{dns}, \texttt{db}, ecc. che identifica la libreria dinamica che -realizza l'interfaccia con esso, che per ciascuno di essi sarà realizzata in -un file \texttt{libnss\_NAME} dove \texttt{NAME} è appunto il nome - - - +realizza l'interfaccia con esso. Per ciascun servizio se \texttt{NAME} è il +nome utilizzato dentro \file{/etc/nsswitch.conf}, dovrà essere presente +(usualmente in \file{/lib}) una libreria \texttt{libnss\_NAME} che ne +implementa le funzioni. In ogni caso, qualunque sia la modalità con cui ricevono i dati o il supporto su cui vengono mantenuti, e che si usino o meno funzionalità aggiuntive @@ -188,6 +187,54 @@ disposizione,\footnote{ quelle che tratteremo nelle sezioni successive. +\subsection{Le funzioni di interrogazione del \textit{resolver}} +\label{sec:sock_resolver_functions} + +Prima di trattare le funzioni usate normalmente nella risoluzione dei nomi a +dominio conviene trattare in maniera più dettagliata il meccanismo principale +da esse utilizzato e cioè quello del servizio DNS. Come accennato questo, +benché in teoria sia solo uno dei possibili supporti su cui mantenere le +relative informazioni, in pratica costituisce il meccanismo principale + + +Per questo motivo il \textit{resolver} prevede delle funzioni che permettono +sia di eseguire direttamente delle interrogazione ad un server DNS, che di +controllare le modalità con cui queste vengono eseguite; diventa così +possibile modificare da programma buona parte dei parametri controllati da +\file{/etc/resolv.conf}. + + + +Per capire meglio il contenuto della struttura \struct{hostent} conviene +spendere alcune parole sul funzionamento del DNS. Questo in sostanza è un +database distribuito organizzato in maniera gerarchica, interrogando il quale +si possono avere una serie di informazioni, la principale delle quali è la +corrispondenza fra un nome (a dominio) ed indirizzo IP. Un server DNS +contiene comunque una serie di altre informazioni; ciascuna voce nel database +viene chiamata \textit{resource record} e vi è associato un certo +\textsl{tipo}, identificato da una sigla. Per quanto ci interessa i tipi di +\textit{resource record} che vengono utilizzati dal \textit{resolver} sono +sostanzialmente i seguenti: +\begin{basedescript}{\desclabelwidth{1.2cm}\desclabelstyle{\nextlinelabel}} +\item[\texttt{A}] indica la corripondenza fra un nome a dominio ed un + indirizzo IPv4, ad esempio la corrispondenza fra \texttt{dodds.truelite.it} + e l'indirizzo IP \texttt{62.48.34.25}. +\item[\texttt{AAAA}] chiamato in questo modo dato che la dimensione è quattro + volte quella di un indirizzo IPv4, questo record contiene la corrispondenza + fra un nome a dominio ed un indirizzo IPv6. +\item[\texttt{PTR}] per provvedere la mappatura inversa fra un indirizzo IP ed + un nome a dominio si utilizza invece questo tipo di record (il cui nome sta + per \textit{pointer}). +\item[\texttt{CNAME}] qualora si abbiamo più nomi con i quali si voglia + indicare lo stesso indirizzo (ad esempio \texttt{www.truelite.it}, o + \texttt{sources.truelite.it}, che comunque fanno sempre riferimento alla + macchina \texttt{dodds.truelite.it}) si può usare questo tipo di record per + creare degli \textit{alias} in modo da associare un qualunque altro nome al + \textsl{nome canonico} della macchina (quello associato al record + \texttt{A}). +\end{basedescript} + + \subsection{La risoluzione dei nomi a dominio} \label{sec:sock_gethostbyname} @@ -246,35 +293,6 @@ ed i valori che pu di un server DNS, si può ritentare l'interrogazione in un secondo tempo. \end{basedescript} -Per capire meglio il contenuto della struttura \struct{hostent} conviene -spendere alcune parole sul funzionamento del DNS. Questo in sostanza è un -database distribuito organizzato in maniera gerarchica, interrogando il quale -si possono avere una serie di informazioni, la principale delle quali è la -corrispondenza fra un nome (a dominio) ed indirizzo IP. Un server DNS -contiene comunque una serie di altre informazioni; ciascuna voce nel database -viene chiamata \textit{resource record} e vi è associato un certo -\textsl{tipo}, identificato da una sigla. Per quanto ci interessa i tipi di -\textit{resource record} che vengono utilizzati dal \textit{resolver} sono -sostanzialmente i seguenti: -\begin{basedescript}{\desclabelwidth{1.2cm}\desclabelstyle{\nextlinelabel}} -\item[\texttt{A}] indica la corripondenza fra un nome a dominio ed un - indirizzo IPv4, ad esempio la corrispondenza fra \texttt{dodds.truelite.it} - e l'indirizzo IP \texttt{62.48.34.25}. -\item[\texttt{AAAA}] chiamato in questo modo dato che la dimensione è quattro - volte quella di un indirizzo IPv4, questo record contiene la corrispondenza - fra un nome a dominio ed un indirizzo IPv6. -\item[\texttt{PTR}] per provvedere la mappatura inversa fra un indirizzo IP ed - un nome a dominio si utilizza invece questo tipo di record (il cui nome sta - per \textit{pointer}). -\item[\texttt{CNAME}] qualora si abbiamo più nomi con i quali si voglia - indicare lo stesso indirizzo (ad esempio \texttt{www.truelite.it}, o - \texttt{sources.truelite.it}, che comunque fanno sempre riferimento alla - macchina \texttt{dodds.truelite.it}) si può usare questo tipo di record per - creare degli \textit{alias} in modo da associare un qualunque altro nome al - \textsl{nome canonico} della macchina (quello associato al record - \texttt{A}). -\end{basedescript} - Quando un programma chiama \func{gethostbyname} e questa usa il DNS per effettuare la risoluzione del nome, è con i valori di questi record che vengono riempite le varie parti della struttura \struct{hostent}. Il primo @@ -289,14 +307,14 @@ DNS vengono inseriti come record di tipo \texttt{CNAME}). Il terzo campo della struttura, \var{h\_addrtype}, indica il tipo di indirizzo che è stato restituito, e può assumere soltanto i valori \const{AF\_INET} o \const{AF\_INET6}, mentre il quarto campo, \var{h\_length}, indica la -lunghezza dell'indirizzo stesso in byte. Infine il campo \var{h\_addr\_list} è -il puntatore ad un vettore di puntatori ai singoli indirizzi; il vettore è -terminato da un puntatore nullo. Inoltre, come illustrato in -fig.~\ref{fig:sock_hostent_struct}, viene definito il campo \var{h\_addr} come -sinonimo di \code{h\_addr\_list[0]}, cioè un riferimento diretto al primo -indirizzo della lista. - - +lunghezza dell'indirizzo stesso in byte. La funzione ritorna sempre una +struttura + +Infine il campo \var{h\_addr\_list} è il puntatore ad un vettore di puntatori +ai singoli indirizzi; il vettore è terminato da un puntatore nullo. Inoltre, +come illustrato in fig.~\ref{fig:sock_hostent_struct}, viene definito il campo +\var{h\_addr} come sinonimo di \code{h\_addr\_list[0]}, cioè un riferimento +diretto al primo indirizzo della lista. Oltre ai normali nomi a dominio la funzione accetta come argomento \param{name} anche indirizzi numerici, in formato dotted decimal per IPv4 o