Как обрабатывается $ <в Perl для Windows? - PullRequest
2 голосов
/ 25 октября 2010

Я работаю над сценарием Perl, в котором он проверяет наличие корневого доступа в начале выполнения.

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

Как оценивается $< в Windows?Я искал в Google и здесь, но не смог найти ответ.

Ближайшее, что я получил, было в perlvar .В нем есть некоторые описания специальной обработки переменных в Windows, но не для этого случая.

$ <</p>

Реальный идентификатор этого процесса.(Мнемоника: это uid, из которого вы пришли, если вы запускаете setuid.) Вы можете изменить и реальный uid, и эффективный uid одновременно, используя POSIX :: setuid ().Поскольку для изменения $ <требуется системный вызов, проверьте $!после попытки изменения обнаружить возможные ошибки. </p>

1 Ответ

10 голосов
/ 25 октября 2010

В моем окне Win7 $< и $> всегда возвращают 0, независимо от того, работаю ли я в качестве администратора, администратора с повышенными правами или обычного пользователя. Я думаю, что Perl просто об этом говорит, потому что идентификаторы пользователей в Windows не могут быть выражены просто как целые числа, поэтому он даже не пытается.

Действительно, вот исходный код (строка 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...