第 4 章 编译器和工具
与 sockaddr_in的 gcc 兼容性问题解决
默认 RHEL 6 编译器包含有关如何复制 struct sockaddr_in 的规则,这些规则与更新版本的 gcc (E.g.这会导致在使用较新的编译器时损坏 sockaddr_in overlay。
这个版本更改了定义 sockaddr_in 结构 未使用的 部分的方式。现在,新版本的 gcc 将正确复制它们。
请注意,编译此类源仍然需要 -fno-strict-aliasing。(BZ#1338673)
当测量没有分配内存的进程的内存用量时,浮动点异常错误
当在没有显式分配任何额外内存的程序上运行 memusage 工具时,会出现浮点异常。
这个版本会检查零个内部统计信息,且不会按它们划分,从而避免异常。(BZ#1331304)
改进了在传递 IP 地址后扫描接口时 getaddrinfo ()的行为
此之前的 glibc 版本会在 getaddrinfo ()调用引用的接口上扫描每个 IP 地址,即使传递的主机名本身是一个数字 IP 地址。在接口上配置了大量 IP 地址的系统上,这会导致调用过长。
在这个版本中,扫描仅在需要时才进行,调用会在传递数字 IP 地址时快速返回。(BZ#1270950)
修复了在线程取消时处理任何打开的文件描述符的问题
使用 POSIX 线程取消可能会导致 glibc 错误地处理打开的文件描述符,特别是在处理身份信息时保持开放。
要更正此问题,并确保 getpwuid_r 等功能在线程被取消时也是如此,以便正确处理来自 exec 系列功能的任何调用中的开放文件描述符。(BZ#1012343)
修复了 tzdata-update 继承一个不可用的 umask
更新 /etc/localtime 时,tzdata-update 应用当前进程 umask 来确定文件权限。
如果 umask 是限制性值,如 077,则非 root 用户可能无法读取新的 /etc/localtime 文件。要解决这个问题,tzdata-update 现在将权限设置为 rw-r--r--(0644)。(BZ#1373646)
访问未初始数据的 getaddrinfo 解析
在启用了 nscd 的系统上,glibc 中的 getaddrinfo 功能可以访问未初始化的数据并返回 false 地址信息。
这个版本可避免访问未初始化的数据,并确保返回正确的地址。(BZ#1223095)
在 Mutt
中的默认设置或配置中,系统默认 CA 捆绑包已设置为默认设置
在以前的版本中,当通过 TLS/SSL 连接到新系统时,
mutt
电子邮件客户端需要用户保存证书。在这个版本中,系统证书颁发机构(CA)捆绑包默认在 Mutt
中设置。因此,mutt
现在通过 SSL/TLS 连接到具有有效证书的主机,而不提示用户批准或拒绝证书。(BZ#1196787)
resolv::DNS
不再返回截断的 DNS 回复
当 DNS 响应不符合硬编码的 512 字节限制时,Ruby
Resolv::DNS
解析器静默返回截断的 DNS 回复。因此,大量 DNS 记录需要从 User Datagram Protocol (UDP)升级 DNS 连接来传输控制协议(TCP)来接收完整的 DNS 回复。例如,这会影响到密钥分发中心(KDC)列表包含大量服务器的 Microsoft Active Directory 域。在这个版本中,如果 UDP 回复被截断,使用 TCP Resolv::DNS
重试,这是 RFC 1123 的正确行为。因此,会返回完整的 DNS 回复。(BZ#1331086)
当 .history
文件位于网络文件系统中时,tcsh
不再变得无响应
在以前的版本中,如果
.history
文件位于网络文件系统中,如 NFS 或 Samba,则 tcsh
命令语言解释器有时会在登录过程中变得无响应。在这个版本中,如果位于网络文件系统中,则不会锁定 .history
文件。因此,在上述情况下 tcsh
不再变得无响应。
请注意,运行多个
tcsh
实例可能会导致 .history
文件被破坏。您可以通过启用显式文件锁定机制来解决这个问题。为此,请在 tcsh
配置文件中的 savehist 选项中添加 lock 参数。例如:
cat /etc/csh.cshrc csh configuration for all shell invocations. set savehist = (1024 merge lock)
$ cat /etc/csh.cshrc
# csh configuration for all shell invocations.
set savehist = (1024 merge lock)
要强制
tcsh
使用文件锁定,当 .history
位于网络文件系统中时,lock 参数必须是 savehist 选项的第三个参数。在您自己的风险下执行此操作,因为红帽不保证使用 lock 参数可防止 tcsh
在登录过程中变得无响应。(BZ#885901)
LWP::UserAgent
Perl 模块现在可以正确地处理 HTTPS 请求的代理设置
默认情况下,
LWP::UserAgent
Perl 模块不会遵循 HTTPS 代理环境变量。perl-libwww-perl 软件包版本 5.883-3 使用 IO::Socket::SSL
模块启动,而不是 Net::SSL
模块来实现 TLS。因此,依赖 Net:SSL
模块中处理 https_proxy
环境变量的应用程序直接建立到 HTTPS 服务器的连接,而不是通过 HTTPS 代理服务器。
在这个版本中,
Net::SSL
模块的行为已添加到 LWP::UserAgent
模块中,以确保 https_proxy
和 HTTPS_PROXY
环境变量如果没有 env_proxy
选项传递给 LWP::UserAgent
模块的 new ()
方法,则会满足。另外,现在可识别没有 URL 模式的代理规格。因此,在从 perl-libwww-perl 软件包切换到 IO::Socket::SSL
加密后端后,使用 Net::SSL
模块的应用程序可以正常工作。(BZ#1400632)
Frontier::Client
Perl 模块不再忽略 HTTPS 请求的代理设置
当使用
Frontier::Client
Perl 模块通过代理服务向 HTTPS 服务器发送 XML-RPC 请求时,代理设置之前会被忽略。因此,请求会直接发送到 HTTPS 服务器,而不是通过代理服务器。在这个版本中, Frontier::Client
Perl 模块已被修正,将代理设置传递给 HTTP 和 HTTPS 模式ta 的底层 LWP::UserAgent
对象,现在还遵循 HTTPS 请求的代理设置。(BZ#832390)
RPM 验证不再报告 /var/account/pacct
文件中的故障
在以前的版本中,RPM 验证和合规性检查会报告失败,因为安装后没有设置
/var/account/pacct
文件的模式。要修复这个程序错误,/var/account/pacct
的模式会在安装后马上更改为 0600。因此,RPM 验证检查不再报告 /var/account/pacct
中的失败,该文件现在只能被 root 访问。(BZ#1182317)
tcsh
中的 作业输出现在可以正确显示到 stdout
修复了 tcsh 中的多个回归
在这个版本中解决了 tcsh 命令语言解释器中的几个回归问题:
- 当使用
Ctrl+P
或上箭头键
浏览命令历史记录时,现在可以正确显示反斜杠。 - 现在,反斜杠可以正确地转义用户定义的别名;这修复了 git-completion。
Git shortlog 不再会因为使用空闲的内存而崩溃
在以前的版本中,当只当电子邮件地址条目不同时,git shortlog 命令的
.mailmap
功能不会用 strdup 指针替换重复的电子邮件条目,并引用空闲的内存。因此,由于使用已释放的内存,Git
会意外终止。应用了补丁,以确保在替换这些条目前内存会被释放,git shortlog 可以正确地使用分配的内存。(BZ#874659)
当试图向字符串报告 Can't coerce HASH 时,Perl 解释器不再崩溃
当在
mod_perl
环境中运行 XML::LibXSLT
Perl 脚本时,Perl 解释器可能会意外终止并出现分段错误,同时尝试报告 Can't coerce HASH 到字符串
运行时错误。打印错误消息的代码已被修改,以正确处理缺少的脚本行详情,Perl 解释器不再会在这种情况下崩溃。(BZ#1364206)
gdbserver 现在支持从容器中无缝调试进程
在此次更新之前,当
GDB
在 Super-Privileged Container (SPC)中执行,并附加到在 Red Hat Enterprise Linux Atomic Host 上另一个容器中运行的进程,GDB
并没有找到主可执行文件的二进制镜像,或者进程加载的任何共享库被调试。
因此,
GDB
可能会显示与不存在的文件相关的错误消息,或者存在但不匹配。另外,GDB
可能已被认为正确附加,但后续命令可能会失败或显示损坏的信息。
在 Red Hat Enterprise Linux 6.9 中,gdbserver 已扩展,支持容器调试进程。Red Hat Enterprise Linux 6.9 版本新支持
qXfer:exec-file:read
和 vFile:setfs
数据包。但是,Red Hat Enterprise Linux 6.9 版本的 gdb 无法使用这些数据包。建议将 Red Hat Developer Toolset 4.1 (或更新版本)用于容器和 Red Hat Enterprise Linux 6.9 gdbserver 一起使用。也可以使用 Red Hat Developer Toolset 版本的 gdbserver。
Red Hat Enterprise Linux 6.9 gdb 现在建议在运行 with the -p 参数(或 attach 命令)时,使用 gdbserver。同时,它会检测正在附加的进程来自容器。Red Hat Enterprise Linux 6.9 gdb 现在还建议明确使用 file 命令来指定被调试容器中的进程可执行文件的位置。当使用 Red Hat Developer Toolset 版本 gdb 时,不需要输入 file 命令。
在这个版本中,Red Hat Enterprise Linux 6.9 gdbserver 提供从容器以及 Red Hat Developer Toolset 4.1 (或更新版本) gdb 的无缝调试。另外,当 Red Hat Developer Toolset gdb 不可用时,Red Hat Enterprise Linux 6.9 gdb 会指导用户完成容器的进程调试。(BZ#1316539)