$<在Perl for Windows中处理?

时间:2010-10-25 00:39:08

标签: perl

我正在开发一个Perl脚本,它在执行开始时检查root访问权限。

if ($< != 0) {
  print "You need to be root";
  die "  ";
}

如何在Windows中评估$<?我搜索谷歌和这里,但找不到答案。

我最接近的是perlvar。它在Windows中有一些特殊变量处理的描述,但不适用于这种情况。

  

$&LT;

     

这个过程的真正意义。 (助记符:如果你正在运行setuid,那就是你来自的uid。)你可以使用POSIX :: setuid()同时更改真实的uid和有效的uid。由于更改为$&lt;需要系统调用,检查$!更改后尝试检测任何可能的错误。

1 个答案:

答案 0 :(得分:10)

在我的Win7框中,$<$>始终返回0,无论我是以管理员,提升管理员还是普通用户身份运行。我认为Perl只是因为Windows上的用户ID不能简单地表示为整数,所以它甚至都没有尝试。

确实,这是source code(第1073行):

/* Ownership
 *
 * Just pretend that everyone is a superuser. NT will let us know if
 * we don\'t really have permission to do something.
 */

#define ROOT_UID    ((uid_t)0)
#define ROOT_GID    ((gid_t)0)

uid_t
getuid(void)
{
    return ROOT_UID;
}

uid_t
geteuid(void)
{
    return ROOT_UID;
}

gid_t
getgid(void)
{
    return ROOT_GID;
}

gid_t
getegid(void)
{
    return ROOT_GID;
}

int
setuid(uid_t auid)
{
    return (auid == ROOT_UID ? 0 : -1);
}

int
setgid(gid_t agid)
{
    return (agid == ROOT_GID ? 0 : -1);
}