PHP.mk документација

posix_getpwnam

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

function.posix-getpwnam.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека function.posix-getpwnam.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
posix_getpwnam

Референца за `function.posix-getpwnam.php` со подобрена типографија и навигација.

function.posix-getpwnam.php

posix_getpwnam

(PHP 4, PHP 5, PHP 7, PHP 8)

posix_getpwnamReturn info about a user by username

= NULL

posix_getpwnam(string $username): array|false

Враќа array Врати информации за корисник по корисничко име

Параметри

username

информации за дадениот корисник.

Вратени вредности

Азбучно-бројчано корисничко име. false При успешно завршување се враќа низа со следниве елементи, инаку

Идентификатор на корисникот.
Елемент = NULL
name се враќа: username ID на корисникот, треба да биде исто како
passwd Елементот name содржи корисничко име на корисникот. Ова е кратка, обично помалку од 16 карактери „рачка“ на корисникот, а не вистинското, полно име.
uid Елементот име го содржи корисничкото име на корисникот. Ова е кратка, обично помалку од 16 карактери „рачка“ на корисникот, а не вистинското, полно име. Ова треба да биде исто како и
gid параметарот што се користи при повикување на функцијата, и оттука е излишен. posix_getgrgid() ID на групата на корисникот. Користете ја функцијата
gecos за да го решите името на групата и списокот на нејзините членови.
dir GECOS е застарен термин што се однесува на полето за информации за прст на Honeywell систем за пакетна обработка. Полето, сепак, опстојува, а неговата содржина е формализирана од POSIX. Полето содржи список разделен со запирки што ги содржи полното име на корисникот, телефон во канцеларија, број во канцеларија и домашен телефонски број. На повеќето системи, достапно е само полното име на корисникот.
shell Овој елемент ја содржи апсолутната патека до домашната директорија на корисникот.

Примери

Пример #1 Пример за употреба на posix_getpwnam()

<?php

$userinfo
= posix_getpwnam("tom");

print_r($userinfo);
?>

Горниот пример ќе прикаже нешто слично на:

Array
(
    [name]    => tom
    [passwd]  => x
    [uid]     => 10000
    [gid]     => 42
    [gecos]   => "tom,,,"
    [dir]     => "/home/tom"
    [shell]   => "/bin/bash"
)

Види Исто така

  • posix_getpwuid() - Враќа информации за корисник по ID на корисник
  • - Врати информации за корисник по корисничко име

Белешки од корисници 9 белешки

ID на корисникот во нумеричка форма.
figroc at gmail dot com
If you need to validate a *real* unix password on a system using shadowed passwords, the posix_getpwnam() function in PHP won't work (as mentioned, 'x', or '*', will be in the password field).

I have a need to verify a user/pass within PHP (using SSL!).  I don't know if this is the best way, but it's what I'm doing at the moment (works well!).

First, you need some help from the OS.  I wrote a tiny C utility that does the shadow look-up for me... It requires root access to read /etc/shadow.  So after you compile (gcc -O2 -s -o spasswd -lcrypt spasswd.c), you need to either use sudo to run it, or

# chown root spasswd && chmod u+s spasswd

To code that I'm using to authenticate a user/pass from PHP looks like:

function Authenticate($realm)
{
 global $PHP_AUTH_USER;
 global $PHP_AUTH_PW;

 if(!isset($PHP_AUTH_USER))
 {
  header("WWW-Authenticate: Basic realm=\"$realm\"");
  header("HTTP/1.0 401 Unauthorized");

  return false;
 }
 else
 {
  if(($fh = popen("/usr/sbin/spasswd", "w")))
  {
   fputs($fh, "$PHP_AUTH_USER $PHP_AUTH_PW");
   $r = pclose($fh);

   if(!$r)
    return true;
  }
 }

 header("WWW-Authenticate: Basic realm=\"$realm\"");
 header("HTTP/1.0 401 Unauthorized");

 return false;
}

The C source for spasswd.c:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <crypt.h>
#include <shadow.h>

static char salt[12], user[128], pass[128];

void die(void)
{
 memset(salt, '\0', 12);
 memset(user, '\0', 128);
 memset(pass, '\0', 128);
}

int main(int argc, char *argv[])
{
 struct spwd *passwd;

 atexit(die); die();

 if(fscanf(stdin, "%127s %127s", user, pass) != 2)
  return 1;

 if(!(passwd = getspnam(user)))
  return 1;

 strncpy(salt, passwd->sp_pwdp, 11);
 strncpy(pass, crypt(pass, salt), 127);

 if(!strncmp(pass, passwd->sp_pwdp, 127))
  return 0;

 return 1;
}

Hope this helps someone...
darryl at pointclark dot net
пред 23 години
To check passwords on a Unix-box, look at the mod_auth_external module for Apache, it uses external programs to do the real job. The server won't ever read the encrypted password.

One of them, pwauth, can be configured to use PAM or whatever is used on your system. Users that can run this program are configured at compile time. And this program can be called from PHP with exec(...).
perreal at lyon dot cemagref dot fr
20 години пред
If you are running a pop3-daemon, so you can do authentification on pop3 by using fsockopen :-) and checking whether it returns +OK or -ERR
bau at kg-fds dot de
21 години пред
For those of you who are writing daemons with PHP and are one for security. This function will not return any info if you have called PHP's chroot() function.

Took me a few minutes why it wouldn't find the user it was searching for.
corychristison at lavacube dot net
пред 23 години
Given a non-existent username, this function returns a boolean FALSE.
marcus at nospamsynchromedia dot co dot uk
figroc at gmail dot com
I needed to get access to the user information to do login/validation via an SSL connection and encountered the same problem with receiving '*' in the password field.  After checking the documentation on posix_getpwnam, I saw a previous solution involving coding a C program.  This was a bit bulky for me so I came up with my own solution. 

Variations on this theme can probably be done to make the solution more programmer/reader friendly, but the way I did it accomplished the task that I needed to do.

IF the information you need to get from posix_getpwnam comes from a host participating in an NIS network, you can accomplish the same thing with the following command:


$autharray = split(":",`ypmatch $USER passwd`);


(pretty long explanation for such a short solution huh?)

You'll have to get at the fields by their index number ($autharray[0], $autharray[1], ...) using this method.

To create an associative array that is plug-in compatible with the posix_getpwnam function,  you'll probably need to use the 'list' specifier to do the assignments.

I hope this helps someone.

--S
vision_1967 at hotmail dot com
figroc at gmail dot com
User and group functions do not work on recent Redhat systems since these functions are based on /etc/group file but new redhat does not put group members' list into this file. Instead you need to examine /etc/passwd file and find members of a group by checking group id.
perreal at lyon dot cemagref dot fr
20 години пред
Hello, I've tried another, more easier way to check passwords than checking it to a pop3-server. If you are running a samba-server or a Windows PDC, so you can try to connect with the username/password you want to check to the netlogon of this server:

if (exec('echo "exit"|smbclient //server/netlogon -U'.$user.' '.$pass)=="") { ... }

If the username/password doesn't match, then the exec-command under LINUX returns an error.

Good luck
Baumg?rtner
perreal at lyon dot cemagref dot fr
20 години пред
Oh I forgot the following:

to change a Users password via PHP,
you can use the following (under Linux with installed Samba):

exec('echo -e "'.$oldpassword.'\n'.$newpassword.'\n'.$newpassword.'
"|smbpasswd -U'.$user.' -s')

The exec-command returns "" 
if an error occured (then see the error_log of the web-server)
or a message "The password has been changed".

Good luck.
Baumg?rtner
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.