As seções de processamento formam o motor que impulsiona as políticas do servidor. Quando o servidor recebe uma requisição ou envia uma resposta, uma ou mais seções de processamento são executadas. O comportamento do servidor e as informações que entram nas respostas, são determinadas unicamente pela forma como as seções são processadas.
O processamento de uma requisição, depende de quatro peças de informação:
- Os dados associados com a requisição;
- O conteúdo da seção de processamento;
- Uma ação em cada tabela associada a uma seção de processamento;
- O algoritmo de processamento em si.
O conteúdo de uma seção de processamento é composto por declarações escritas na (como diria Sheldon Cooper) "não linguagem" chamada Unlang. Esse conjunto de instruções é usado por
FreeRADIUS para processar requisições e funciona como uma pseudolinguagem de programação.
O manual de Unlang pode ser encontrado em:
Obviamente, para uma instalação básica de FreeRADIUS, não é necessário entender as seções de processamento em detalhes profundos. Vejamos termos e definições básicos.
Requisições
Um número de listas de atributos é associado a cada requisição recebida no servidor (?). As listas são nomeadas. O significado dos nomes dessas listas é dado pela tabela abaixo. Atributos são referenciados por seus nomes na lista, seguidos de dois pontos e seu nome literal de atributo. Por exemplo:
request:User-Name
Cada lista serve a um propósito particular. Os módulos podem editar uma ou mais listas. Por exemplo, o módulo mschap adiciona o atributo MS-CHAP na lista reply. O administrador pode usar Unlang para editar a lista diretamente.
A tabela a seguir, relaciona as listas associadas com uma requisição RADIUS:
Cada requisição é passada através de uma ou mais seções de processamento. As seções e seus significados são dados na tabela a seguir:
Cada seção de processamento possui uma lista de módulos para executar um conjunto de declarações Unlang. A lista é processada na ordem de apresentação: de cima para baixo.
Em alguns casos, as listas não são processadas até o fim; algumas partes podem ser puladas ou o processamento pode retornar ao início da lista. Por exemplo, se durante a análise da requisição um pacote rejeitar (reject) for enviado, em função de uma regra da política, não há motivo para continuar o processando nesta lista.
Quando um módulo é executado, um código de retorno como reject, noop ou ok, é enviado como resultado. Esses códigos de retorno controlam o processamento da lista. A tabela a seguir exibe os nomes dos códigos de retorno e seus significados: