2010-08-19 2 views
13

Jak uzyskać dostęp do bieżącego użytkownika w sposób przenośny?Jak uzyskać dostęp do bieżącego użytkownika w Perlu w sposób przenośny?

Wydaje się, że jest to najczęściej zadawane pytanie, ale perlport o tym nie mówi, może dlatego, że niektóre dziwne systemy nie mają pojęcia "użytkownik" do bycia z nim? Jednak trzymajmy się * nix i Windows.

getpwuid($>) nie jest zaimplementowany w systemie Windows.

$ENV{USER} || $ENV{USERNAME} wydaje się być wybredny.

http://search.cpan.org nie pojawił się zbyt wiele.

+0

jest to skrypt CGI lub skrypt (aplikacja skryptowa)? – vol7ron

Odpowiedz

19

getlogin:

ten realizuje funkcję biblioteki C o tej samej nazwie, który w większości systemów Zwraca bieżącą logowanie z/etc/utmp, jeśli w ogóle. Jeśli null, użyj "getpwuid".

$login = getlogin || getpwuid($<) || "Kilroy"; 

Nie uważaj "getlogin" za uwierzytelnienie: nie jest tak bezpieczny jak "getpwuid".

Możesz także spróbować || -ing this z POSIX::cuserid() i Win32::LoginName().

+7

Jeśli zmienisz użytkowników za pomocą su, getlogin zwróci oryginalnego użytkownika, co byłoby nieprzyjemnym zaskoczeniem dla mnie jako użytkownika; po prostu użyj getpwuid dla systemów posixy i Win32 :: LoginName dla Windows. – ysth

+0

@ysth: dobrze wiedzieć. Spodziewam się, że to jest to, o czym wspominali docs w "Nie uwzględniaj ... do uwierzytelniania". – Ether

4

Win32::LoginName() mogą być wykorzystane w systemie Windows, aby odzyskać nazwę użytkownika (bez nazwy domeny, więc może być niejednoznaczne):

use Win32; 
my $username = Win32::LoginName; 

Win32::pwent realizuje getpwuid() i inne funkcje do przeszukiwania bazy danych użytkownika. Niestety, nie udało mi się zainstalować na moim StrawberryPerl 5.12.