代码之家  ›  专栏  ›  技术社区  ›  benc

在Perl for Windows中如何处理$<呢?

  •  2
  • benc  · 技术社区  · 14 年前

    我正在编写一个Perl脚本,它在执行开始时检查根访问。

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

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

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

    $lt;

    这个过程的真实uid。(助记符:如果您运行setuid,它就是您来自的uid。)您可以使用posix::setuid()同时更改实际uid和有效uid。由于对$<的更改需要系统调用,请检查$!在尝试检测任何可能的错误之后。

    1 回复  |  直到 14 年前
        1
  •  10
  •   Gabe Timothy Khouri    14 年前

    在我的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);
    }