gpt4 book ai didi

perl - 如何使用 Perl 的 Archive::Tar 保存 tar 文件中的 setuid 位?

转载 作者:行者123 更新时间:2023-12-04 07:09:41 26 4
gpt4 key购买 nike

我正在使用 Perl 的 Archive::Tar模块。它保留了文件权限,但不保留粘性位。在我提取文件的另一端,所有的粘性位都消失了。我认为 UNIX/LINUX 操作系统将这些粘性位存储在其他地方。我怎样才能让我的文件也保留粘性位?

使用 -p 开关 tar 保留它,但我如何使用 Archive::Tar ?我在两边都使用 Perl 的模块。

最佳答案

根据 Fine Source,Archive::Tar::File 会从模式中去除高位。
您可以在脚本的开头尝试以下魔法咒语(在任何事情之前
可能已经引用了 Archive::Tar) 并查看它是否颠覆了它:

use Archive::Tar::Constant ();
BEGIN {
local $SIG{__WARN__} = sub{};
*Archive::Tar::Constant::STRIP_MODE = sub(){ sub {shift} };
}
...
use Archive::Tar;
...

简要说明:STRIP_MODE 是一个常量,包含一个子程序,可以传递原始模式并返回应该存储的模式。它通常设置为
sub { shift() & 0777 }

因为它是一个常量,从 Archive::Tar::Constant 导入到 Archive::Tar::File 并在那里使用,所以无论它设置什么都将在编译时内联到 Archive::Tar::File 中。所以要改变它,常量必须在它被内联之前改变,也就是说,在 Archive::Tar::File 被加载之前。

注:因为更改可内联常量很容易出错(在为时已晚而无法产生任何效果之后更改它),它通常会生成一个无法通过常规方式禁用的严重警告。

关于perl - 如何使用 Perl 的 Archive::Tar 保存 tar 文件中的 setuid 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/580653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com