Che*_*eso 6 authentication testing perl function
想要了解 @ perldoc.perl.org给出的示例代码行getlogin
$login = getlogin || getpwuid($<) || "Kilroy";
getlogin它似乎尝试从或获取用户名getpwuid,但如果其中一个失败,请Kilroy改为使用。我可能是错的,所以请纠正我。另外,我一直在以前的脚本中使用-和getlogin()之间有什么区别吗? getlogin()getlogin
这段代码是为了防范什么?另外,$<这样做的目的是什么?$<在查找它是什么及其用途时,我不太确定要搜索什么。
$<
Run Code Online (Sandbox Code Playgroud)
该进程的真实uid。(助记:如果您正在运行 setuid,那么它就是您来自的 uid。)您可以使用 POSIX::setuid() 同时更改真实 uid 和有效 uid。由于对 $< 的更改需要系统调用,因此检查 $! 更改后尝试检测任何可能的错误。
这条线与上面的例子有可比性吗?(目前我用它来避免“cron”执行脚本的任何潜在问题 - 我从未遇到过这个问题,但我试图避免任何理论问题)
my $username = getlogin(); if(!($username)){$username = 'jsmith';}
你说得完全正确。如果getlogin返回 false 它将测试getpwuid($<)如果返回 false 它将设置$login为“Kilroy”
$<是进程的真实uid。即使您在 setuid 环境中运行,它也会返回进程启动时的原始 uid。
编辑以匹配您的编辑:)
getpwuid通过 UID 返回用户名(在标量上下文中,就是这里的情况)。您需要$<作为一个参数,以防程序在某个时刻切换 UID($<是它启动时使用的原始 UID)