/** * 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; }