Esta seção apresenta diversos arquivos de configuração para um site folha UUCP em uma rede local. Eles são baseados nos arquivos de exemplos incluídos na distribuição do programa smail-3.1.28. Apesar de todo o conteúdo do capítulo referente ao smail, é fortemente sugerida a leitura das páginas de manual do programa smail(8), a qual descreve estes arquivos detalhadamente. Uma vez que se tenha entendido a idéia básica por trás dos arquivos de configuração smail, será uma leitura valiosa. O primeiro arquivo abaixo mostra o conteúdo de routers, o qual descreve um conjunto de roteadores para smail. Quando smail tem que entregar uma mensagem para um determinado endereço, ele envia o endereço para todos os roteadores, até que um indique que possa lidar com ele, ou seja que pode encontrar uma máquina de destino em sua base de dados, seja no arquivo paths, no /etc/hosts, ou qualquer mecanismo de roteamento com o qual o roteador interaja.
Entradas nos arquivos de configuração do smail sempre começam com um único nome identificando o roteador, transporte ou diretor. Eles são seguidos por uma lista de atributos que definem o seu comportamento. Esta lista consiste da configuração de uma série de atributos globais, como por exemplo o programa de controle de dispositivo usado e de atributos privados que serão somente entendidos por programas específicos. Atributos são separados por vírgulas, enquanto os valores dos atributos globais e privados são separados por ponto e vírgula.
Para tornar estas distinções claras, assumiremos que se deseje manter dois arquivos separados de nomes alternativos de caminhos, um contendo as informações de roteamento do domínio e o segundo contendo informações de roteamento global, provavelmente geradas a partir de mapas UUCP. No programa smail, pode-se especificar dois roteadores no arquivo routers, ambos usando o programa de controle de dispositivos especificado no arquivo de caminhos alternativos. Este procurará os nomes das máquinas em uma base de dados. O nome do arquivo é esperado como sendo um atributo privado.
O segundo atributo global fornecido para cada um dos dois roteadores acima define o transporte que deve ser usado, caso o roteador encontre o endereço. Neste caso, a mensagem será entregue utilizando-se o transporte uux. Transportes são definidos no arquivo transports, o qual é explicado a seguir.
Pode-se ainda refinar a definição de qual transporte a mensagem utilizará ao se especificar um arquivo de método ao invés de um atributo de transporte. Arquivos de métodos contém um mapa de máquinas de destinos e transportes associados.
Os arquivos routers a seguir, definem roteadores para uma rede local que efetuam pesquisas em uma biblioteca resolvedora. Em uma máquina Internet, por outro lado, pode-se utilizar um roteador que lide com registros MX. Deve-se de qualquer forma retirar-se o comentário do roteador alternativo inet_bind que usa o driver pré-construído em smail.
Em um ambiente que misture UUCP e TCP/IP, pode-se ter alguns problemas em se ter máquinas listadas no arquivo /etc/hosts que tem conexões SLIP ou PPP de forma ocasional. Normalmente será desejável enviar mensagens via UUCP. Para prevenir que o programa inet_hosts associe estas máquinas à uma conexão permanente, elas devem ser informadas no arquivo paths/force. Trata-se de outro arquivo no mesmo estilo do arquivo de caminhos alternativos e é consultado antes que smail consulte o resolvedor.
Para lidar com mensagens para endereços locais é configurado o arquivo directors. Ele é constituído da mesma forma que o arquivo routers, com uma lista de entradas que definem uma forma de pesquisa cada uma delas. Estas entradas não definem a entrega da mensagem, mas sim o redirecionamento possível, por exemplo através de nomes alternativos, servidores de reenvio e assim por diante.
Ao entregar uma mensagem para um endereço local, como , smail passa o nome do usuário para todos os diretores, um a cada vez. Caso o nome seja localizado, o transporte especificado para o diretor será utilizado e a mensagem deverá ser entregue (por exemplo, no arquivo da caixa postal do usuário), ou será gerado um novo endereço (por exemplo, após o exame de um nome alternativo).
Devido aos aspectos de segurança envolvidos, diretores normalmente fazem uma série de checagens para verificarem se os arquivos utilizados podem estar com algum problema. Endereços obtidos de alguma forma dúbia (como a partir de um arquivo aliases que pode ser gravado por qualquer usuário) são assinalados como inseguros. Alguns programas de transporte poderão não utilizar estes endereços, por exemplo para entregar uma mensagem para um arquivo.
Além disso, smail também associa um usuário a cada endereço. Toda a operação de gravação e leitura é executada como se fosse realizada pelo usuário. Para entrega, por exemplo, na caixa postal de janete, o endereço é obviamente associado com o usuário janete. Outros endereços como aqueles obtidos a partir do arquivo aliases, tem outros usuários associados a eles, como por exemplo o usuário nobody.
Para maiores detalhes sobre estas funcionalidades, por favor visite a página de manual do programa smail(8).
Após rotear com sucesso ou direcionar uma mensagem, smail envia a mensagem para o transporte especificado pelo roteador ou diretor que coincidiu com as características de destino da mensagem. Estes transportes são definidos no arquivo transports. Novamente, um transporte é definido por opções globais ou privadas.
A mais importante definição de cada entrada é o programa que administra o transporte, por exemplo um programa conector de comandos, o qual aciona o comando específico através do atributo cmd. Além disso, há uma série de comandos que o transporte pode usar, que executam diversas transformações no cabeçalho da mensagem. O atributo return_path, por exemplo, faz com que o transporte insira uma campo de caminho_retorno na mensagem. O atributo unix_from_hack faz com que toda ocorrência da palavra From no início de uma linha seja precedido pelo caracter >.
# Um exemplo de arquivo /usr/lib/smail/transports # local - entrega de mensagens para usuários locais local: driver=appendfile, # anexa a mensagem a um arquivo return_path, # inclui o campo Return-Path: from, # fornece uma linha From_ ao envelope unix_from_hack, # insere > antes de From local; # usa as formas locais de entrega file=/var/spool/mail/${lc:user}, # localização dos arquivos de caixas # postais group=mail, # grupo dono do arquivo para System V mode=0660, # grupo mail pode acessar suffix="\n", # adiciona uma nova linha # pipe - entrega de mensagens para comandos pipe: driver=pipe, # envia a mensagem para outro programa return_path, # inclui o campo Return-Path: from, # fornece uma linha From_ ao envelope unix_from_hack, # insere > antes de From local; # usa as formas locais de entrega cmd="/bin/sh -c $user", # envia endereço para o Bourne Shell parent_env, # informação de ambiente do endereço pai pipe_as_user, # usa identificação de usuário associada com o # endereço ignore_status, # ignora um código de finalização diferente de # zero ignore_write_errors, # ignora erros de gravação umask=0022, # umask para processo filhos -log_output, # não gera mensagens na saída padrão # file - entrega mensagens para um arquivo file: driver=appendfile, return_path, # inclui o campo Return-Path: from, # fornece uma linha From_ ao envelope unix_from_hack, # insere > antes de From local; # usa as formas locais de entrega file=$user, # arquivo é obtido de um endereço append_as_user, # usa identificação de usuário associada com o # endereço expand_user, # expande ~ e $ nos endereços suffix="\n", # adiciona uma linha extra final mode=0600, # configura permissões para 600 # uux - entrega mensagens via programa rmail em um site UUCP remoto uux: driver=pipe, uucp, # usa endereços no formato UUCP from, # suprime a linha de envelope From_ max_addrs=5, # no máximo 5 endereços a cada acionamento max_chars=200; # no máximo 200 caracteres por endereço cmd="/usr/bin/uux - -r -a$sender -g$grade $host!rmail $(($user)$)", pipe_as_sender, # mantém o remetente nos registros UUCP log_output, # salva as mensagens de erro de mensagens # devolvidas # defer_child_errors, # tenta novamente se uux retorna algum erro # demand - entrega para um programa rmail remoto, pesquisando imediatamente uucp, # usa endereços no formato UUCP from, # suprime a linha de envelope From_ max_addrs=5, # no máximo 5 endereços a cada acionamento max_chars=200; # no máximo 200 caracteres por endereço cmd="/usr/bin/uux - -a$sender -g$grade $host!rmail $(($user)$)", pipe_as_sender, # mantém o remetente nos registros UUCP log_output, # salva as mensagens de erro de mensagens # devolvidas # defer_child_errors, # tenta novamente se uux retorna algum erro # hbsmtp - usa lotes BSMTP. O arquivo de saída deve ser processado regularmente # e enviado via UUCP hbsmtp: driver=appendfile, inet, # usa endereçamento RFC-822 hbsmtp, # SMTP em lotes sem HELO e QUIT -max_addrs, -max_chars; # sem limite no número de endereços file="/var/spool/smail/hbsmtp/$host", user=root, # arquivo pertence ao superusuário mode=0600, # somente pode ser lido ou gravado pelo # superusuário # smtp - entrega utilizando SMTP sobre TCP/IP smtp: driver=tcpsmtp, inet, -max_addrs, -max_chars; # sem limite de número de endereços short_timeout=5m, # tempo de espera para operações curtas long_timeout=2h, # tempo de espera para operações longas service=smtp, # conectar a esta porta # Para uso na Internet retirar os comentários das linhas abaixo # use_bind, # resolver MX e múltiplos registros A # defnames, # usar pesquisa padrão de nomes de # # domínios # defer_no_connect, # tentar novamente se o servidor de # # nomes não estiver respondendo # -local_mx_okay, # falhar no MX para a máquina local