/**
 * Funcao que realiza a autenticacao de usuarios em servidores Unix like
 * @param string $login Login de acesso
 * @param string $senha Senha de acesso
 * @param string $arquivo Nome do arquivo que guarda os logins/senhas
 * @param int $parametro_login Posicao do campo login no registro
 * @param int $parametro_senha Posicao do campo senha no registro
 * @return bool Flag indicando se o usuario se autenicou ou nao
 */
function autenticar_unix($login, $senha, $arquivo = '/etc/shadow', $parametro_login = 0, $parametro_senha = 1) {
    $autenticou = false;

    // Validar parametro $arquivo
    if (!is_file($arquivo)) {
        trigger_error('O arquivo de autenticacao '.$arquivo.' nao existe', E_USER_WARNING);
        return false;
    } elseif (!is_readable($arquivo)) {
        trigger_error('O arquivo de autenticacao '.$arquivo.' nao pode ser lido', E_USER_WARNING);
        return false;
    }

    // Percorrer o arquivo em busca do login
    $f = fopen($arquivo, 'r');
    if (!$f) {
        trigger_error('Erro ao abrir arquivo de autenticacao '.$arquivo, E_USER_WARNING);
        return false;
    }
    while (!feof($f)) {
        $linha = fgets($f, 1024);
        if (!$linha) { 
            continue;
        }
        $registro = explode(':', $linha);

        // Se achou o login
        if (strcmp($login, $registro[$parametro_login]) == 0) { 

            // Testar a senha
            $senha_codificada = crypt($senha, $registro[$parametro_senha]);
            $autenticou = strcmp($senha_codificada, $registro[$parametro_senha]) == 0;
            break;
        }
    }
    fclose($f);
    return $autenticou;
}