Altro materiale relativo alle funzioni del resolver e alle relative opzioni,
authorSimone Piccardi <piccardi@gnulinux.it>
Sun, 18 Jul 2004 23:04:43 +0000 (23:04 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Sun, 18 Jul 2004 23:04:43 +0000 (23:04 +0000)
aggiungo anche un po' di definizioni

listati/resolv_option.c [new file with mode: 0644]
listati/resolv_option_def.c [new file with mode: 0644]
sockctrl.tex

diff --git a/listati/resolv_option.c b/listati/resolv_option.c
new file mode 100644 (file)
index 0000000..ebe8f92
--- /dev/null
@@ -0,0 +1 @@
+       extern struct state _res;
diff --git a/listati/resolv_option_def.c b/listati/resolv_option_def.c
new file mode 100644 (file)
index 0000000..8d45d78
--- /dev/null
@@ -0,0 +1 @@
+#define RES_DEFAULT     (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH)
index 512c380..1b99e53 100644 (file)
@@ -115,21 +115,22 @@ dell'ordine in cui questi vengono interrogati.\footnote{con le implementazioni
   funzioni di liberia, prevedendo un ordine di interrogazione predefinito e
   non modificabile (a meno di una ricompilazione delle librerie stesse).}
 
-Per risolvere questa serie di problemi il sistema del \textit{resolver} è
-stato incluso all'interno di un meccanismo generico per la risoluzione di
-corripondenze fra nomi ed informazioni ad essi associate chiamato \textit{Name
-  Service Switch}\footnote{il sistema è stato introdotto la prima volta nelle
-  librerie standard di Solaris, le \acr{glibc} hanno ripreso lo stesso schema,
-  si tenga presente che questo sistema non esiste per altre librerie standard
-  come le \acr{libc5} o le \acr{uclib}.} cui abbiamo accennato anche in
-sez.~\ref{sec:sys_user_group} per quanto riguarda la gestione dei dati
-associati a utenti e gruppi.  Il \textit{Name Service Switch} (cui spesso si
-fa riferimento con l'acronimo NSS) è un sistema di librerie dinamiche che
-permette di definire in maniera generica sia i supporti su cui mantenere i
-dati di corrispondenza fra nomi e valori numerici, sia l'ordine in cui
-effettuare le ricerche sui vari supporti disponibili. Il sistema prevede una
-serie di possibili classi di corrispondenza, quelle attualmente definite sono
-riportate in tab.~\ref{tab:sys_NSS_classes}.
+Per risolvere questa serie di problemi la risoluzione dei nomi a dominio
+eseguira dal \textit{resolver} è stata inclusa all'interno di un meccanismo
+generico per la risoluzione di corripondenze fra nomi ed informazioni ad essi
+associate chiamato \textit{Name Service Switch}\footnote{il sistema è stato
+  introdotto la prima volta nelle librerie standard di Solaris, le \acr{glibc}
+  hanno ripreso lo stesso schema, si tenga presente che questo sistema non
+  esiste per altre librerie standard come le \acr{libc5} o le \acr{uclib}.}
+cui abbiamo accennato anche in sez.~\ref{sec:sys_user_group} per quanto
+riguarda la gestione dei dati associati a utenti e gruppi.  Il \textit{Name
+  Service Switch} (cui spesso si fa riferimento con l'acronimo NSS) è un
+sistema di librerie dinamiche che permette di definire in maniera generica sia
+i supporti su cui mantenere i dati di corrispondenza fra nomi e valori
+numerici, sia l'ordine in cui effettuare le ricerche sui vari supporti
+disponibili. Il sistema prevede una serie di possibili classi di
+corrispondenza, quelle attualmente definite sono riportate in
+tab.~\ref{tab:sys_NSS_classes}.
 
 \begin{table}[htb]
   \footnotesize
@@ -207,7 +208,7 @@ generiche di libreria usate anche dal sistema del \textit{resolver}.
 Il sistema del DNS è in sostanza di un database distribuito organizzato in
 maniera gerarchica, la manutenzione dei dati è mantenuta in tanti server
 distinti ciascuno dei quali si occupa della risoluzione del proprio
-\textit{dominio}; i nomi a dominio sono poi organizzati in una struttura ad
+\textsl{dominio}; i nomi a dominio sono poi organizzati in una struttura ad
 albero analoga a quella dell'albero dei file in un sistema unix-like, con
 domini di primo livello (come i \texttt{.org}), secondo livello (come
 \texttt{.truelite.it}), ecc.  In questo caso le separazioni sono fra i vari
@@ -219,15 +220,106 @@ livello ad un altro server, il quale a sua volta potr
 di un eventuale sottodominio di terzo livello ad un altro server ancora.
 
 In realtà un server DNS contiene comunque una serie di altre informazioni;
-ciascuna voce nel database viene chiamata \textit{resource record}, e viene 
-vi è associato un certo \textsl{tipo}, identificato da una sigla.
+ciascuna voce nel database viene chiamata \textit{resource record}, e può
+contenere diverse informazioni; in genere i \textit{resource record} vengono
+classificati per la \textsl{classe di indirizzi} cui i dati contenuti fanno
+riferimento, e per il \textsl{tipo} di questi ultimi. Oggigiorno i dati
+mantenuti nei server DNS sono sostanzialmente relativi soltanto ad indirizzi
+internet, per cui in pratica c'è soltanto una classe di indirizzi utilizzata,
+i dati invece possono essere di vario tipo, uno dei quali è appunto la
+corrispondenza fra nome a dominio e numero IP.
+
+L'esistenza di vari tipi di informazioni ottenibili da un server DNS è
+un'altro dei motivi per cui il \textit{resolver} prevede un insieme di
+funzioni dedicato rispetto a quelle della semplice risoluzione dei nomi; la
+prima di queste è \funcd{res\_init}, il cui prototipo è:
+\begin{functions}
+\headdecl{netinet/in.h}
+\headdecl{arpa/nameser.h}
+\headdecl{resolv.h}
+\funcdecl{int res\_init(void)}
+
+Inizializza il sistema del \textit{resolver}.
+
+\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
+  errore.}
+\end{functions}
+
+La funzione legge il contenuto dei file di configurazione per impostare il
+dominio di default, gli indirizzi dei server DNS da contattare e l'ordine
+delle ricerche; se non sono specificati server verrà utilizzato l'indirizzo
+locale, e se non è definito un dominio di default sarà usato quello associato
+con l'indirizzo locale. In genere si deve eseguire questa funzione prima di
+chiamare tutte le altre. 
+
+Le impostazioni del resolver e lo stato del sistema vengono mantenute in una
+serie di variabili globali contenuti in una apposita struttura interna,
+definita in \file{resolv.h}, che può essere acceduta una volta che la si
+dichiara con:
+\includecodesnip{listati/resolv_option.c}
+
+Tutti i campi della struttura sono ad uso interno, l'unico che può essere
+utile modificare è il campo \var{\_res.options}, che è una maschera binaria
+che permette di controllare il comportamento del resolver, modificandone
+alcune impostazioni direttamente da programma prima di invocare
+\func{res\_init}. Le costanti che definiscono i vari bit di questo campo, con
+il relativo significato sono illustrate in tab.~\ref{tab:resolver_option}, un
+valore deve essere espresso con un opportuno OR aritmetico di dette costanti;
+ad esempio il valore di default dato dalla costante \const{RES\_DEFAULT} è 
+definito come: 
+\includecodesnip{listati/resolv_option_def.c}
 
 
 
+\begin{table}[htb]
+  \centering
+  \footnotesize
+  \begin{tabular}[c]{|l|p{8cm}|}
+    \hline
+    \textbf{Costante} & \textbf{Significato} \\
+    \hline
+    \hline
+    \const{RES\_INIT}       & viene attivato se è stata chiamata
+                              \func{res\_init}. \\
+    \const{RES\_DEBUG}      & stampa dei messaggi di debug.\\
+    \const{RES\_AAONLY}     & accetta solo risposte autoritative.\\
+    \const{RES\_USEVC}      & usa connessioni TCP per contattare i server 
+                              invece che l'usuale UDP.\\
+    \const{RES\_PRIMARY}    & interroga soltanto server DNS primari.
+                              \\
+    \const{RES\_IGNTC}      & ignora gli errori di troncamento, non ritenta la
+                              richiesta con una connessione TCP.\\
+    \const{RES\_RECURSE}    & imposta il bit che indica che si desidera
+                              eseguire una interrogazione ricorsiva.\\
+    \const{RES\_DEFNAMES}   & se attivo \func{res\_search} aggiunge il nome
+                              del dominio di default ai nomi singoli (che non
+                              contengono cioè un ``\texttt{.}'').\\
+    \const{RES\_STAYOPEN}   & usato con \const{RES\_USEVC} per mantenere
+                              aperte le connesioni TCP fra interrogazioni
+                              diverse. \\
+    \const{RES\_DNSRCH}     & se attivo \func{res\_search} esegue le ricerche
+                              di nomi di macchine nel dominio corrente o nei
+                              domini ad esso sovrastanti.\\
+    \const{RES\_INSECURE1}  & blocca i controlli di sicurezza di tipo 1.\\
+    \const{RES\_INSECURE2}  & blocca i controlli di sicurezza di tipo 2.\\
+    \const{RES\_NOALIASES}  & blocca l'uso della variabile di ambiente
+                              \texttt{HOSTALIASES}.\\ 
+    \const{RES\_USE\_INET6} & restituisce indirizzi IPv6 con
+                              \func{gethostbyname}. \\
+    \const{RES\_ROTATE}     & ruota la lista dei server DNS dopo ogni
+                              interrogazione.\\
+    \const{RES\_NOCHECKNAME}& non controlla i nomi per verificarne la
+                              correttezza sintattica. \\
+    \const{RES\_KEEPTSIG}   & non elimina i record di tipo \texttt{TSIG}.\\
+    \const{RES\_BLAST}      & \\
+    \const{RES\_DEFAULT}    & è l'insieme di \const{RES\_RECURSE},
+                              \const{RES\_DEFNAMES} e \const{RES\_DNSRCH}.\\
+    \hline
+  \end{tabular}
+  \caption{Costanti utilizzabili come valori per \var{\_res.options}.}
+  \label{tab:resolver_option}
+\end{table}
 
-interrogando il quale si possono avere una serie di informazioni,
-la principale delle quali è appunto la corrispondenza fra un nome (a dominio)
-ed indirizzo IP.
 
 
 Per quanto ci interessa i tipi di \textit{resource record} che vengono