Em primeiro lugar, o ua2b forneceu a resposta crítica que estava causando minha confusão:
Os módulos PAM só podem retornar um único valor de status por chamada
Como os módulos só podem retornar um código de status, fica claro que a ação para qualquer conjunto entre pares de valores / ações não é ambíguo. Eu pensei que um módulo poderia retornar vários códigos de status de uma só vez ( baseado na leitura de vários documentos ), daí minha confusão. Confunde-me que nenhuma referência que eu pudesse encontrar, incluindo a documentação oficial, é capaz de afirmar isso claramente. Em vez disso, encontra comentários como este:
" Um ou mais códigos de status são retornados por cada rotina PAM-API. "
Isso para mim parece que um módulo pode retornar vários códigos de status. Foi somente depois de ler o guia do desenvolvedor do módulo PAM que percebi que os códigos de status são retornados como um único inteiro que mapeia para os possíveis valores do código de status conforme descrito aqui (Sim, a mesma referência!)
Minha próxima pergunta tinha a ver com equacionar a palavra-chave do sinalizador de controle de estilo antigo obrigatório com essa sintaxe de colchetes:
[success=ok new_authtok_reqd=ok ignore=ignore default=bad]
Essa equivalência é repetida em todo o lugar, por exemplo, aqui .
Acontece que isso é um absurdo completo e total. Os códigos de status retornados por qualquer módulo específico podem diferir e diferir novamente, dependendo do tipo de grupo de gerenciamento (por exemplo, auth vs. conta).
Veja, por exemplo, o módulo pam_securetty . Este módulo fornece apenas o tipo auth e possui os seguintes valores possíveis de retorno de código de status:
PAM_SUCCESS
PAM_AUTH_ERR
PAM_INCOMPLETE
PAM_SERVICE_ERR
PAM_USER_UNKNOWN
O ignore=ignore
valor / mapeamento de ação, consequentemente, parece ser inútil, já que este módulo nunca retorna ignorar. Neste caso, você pode querer considerar o uso de user_unknown=ignore
se, na verdade, você quiser ignorar o resultado, se o usuário não puder ser encontrado.