tail head cat sleep
QR code linking to this page

Man page  — GETPWENT

명칭

getpwent, getpwnam, getpwuid, setpassent, setpwent, endpwent – 패스워드 데이타베이스를 조작

내용

프로그램 라이브러리

Standard C Library (libc, -lc)

서식

#include <sys/types.h>
#include <pwd.h>

struct passwd *
getpwent(void);

struct passwd *
getpwnam(const char *login);

struct passwd *
getpwuid(uid_t uid);

int
setpassent(int stayopen);

void
setpwent(void);

void
endpwent(void);

해설

이러한 함수는, passwd(5) 에 기술된 패스워드 데이타베이스 파일을 조작합니다. 데이타베이스의 각 엔트리는, 인클루드 파일 < pwd.h> 에 있는 구조체 passwd 그리고 정의됩니다. 다음과 같습니다.
struct passwd {
        char    *pw_name;       /* 유저명 */
        char    *pw_passwd;     /* 암호화된 패스워드 */
        uid_t   pw_uid;         /* 유저 uid */
        gid_t   pw_gid;         /* 유저 gid */
        time_t  pw_change;      /* 패스워드의 변경 시각 */
        char    *pw_class;      /* 유저 액세스 클래스 */
        char    *pw_gecos;      /* 하네웰 로그인 정보 */
        char    *pw_dir;        /* 홈 디렉토리 */
        char    *pw_shell;      /* 디폴트의 쉘 */
        time_t  pw_expire;      /* 어카운트 유효기간 */
        int     pw_fields;      /* 내부 필드: 충전 필드 */
};

함수 getpwnam() (은)는 주어진 로그인명을, getpwuid() (은)는 주어진 유저 ID 를 각각 패스워드 데이타베이스로 검색해, 항상 최초로 조우했다 엔트리를 돌려줍니다.

getpwent() 함수는 패스워드 데이타베이스를 차례차례 읽어들입니다. 유저의 완전한 리스트를 처리하고 싶은 프로그램 방향입니다.

setpassent() 함수는 2 개의 목적을 완수하는 것입니다. 우선 getpwent() 함수가 데이타베이스의 최초에 「되감는다 (rewind)」 같게 합니다. 한층 더 stayopen 하지만 0 (이)가 아니면, 파일 기술자를 오픈한 채로 합니다. 이것에 의해, 이러한 routine에 대한 그 후의 액세스 모든 것이 지극히 고속화됩니다 (다만 getpwent() 의 경우, 디폴트로 파일 기술자를 클로우즈 하지 않기 때문에 후자의 기능은 불필요합니다).

장시간 실행되고 있는 프로그램으로 파일 기술자를 오픈했다 로 해 두는 것은 위험합니다. 왜냐하면, 프로그램이 실행되어 있는 동안에 데이타베이스가 갱신되면(자), 오픈한 채로 하고 있다 데이타베이스는 낡은 쓸모 있게 되어 버리기 때문입니다.

setpwent() 함수는, 인수를 0 으로 했다 setpassent() (와)과 같습니다.

endpwent() 함수는, 오픈하고 있는 파일을 모두 클로우즈 합니다.

이러한 routine는, 패스워드 파일을 「숨긴다 (shadow)」목적으로 쓰여졌습니다. 예를 들어, 암호화 패스워드에 액세스 할 수 있다 프로그램을 한정할 수 있도록(듯이)입니다. 이러한 routine를 호출하는 프로세스의 유효 유저 ID 가 0 이라면 암호화 패스워드를 돌려주어, 그 외의 경우는 반환값인 구조체의 패스워드 필드는 string ‘*’ (을)를 가리키게 됩니다.

YP/NIS 의 상호작용

yp(4) 패스워드 데이타베이스가 사용 가능한 경우, 로컬의 데이타베이스에 요구된 패스워드 엔트리가 발견되지 않으면 getpwnam()getpwuid() 함수는 각각, "passwd.byname" 및 "passwd.byuid" YP MAP를 사용합니다. passwd(5) 그리고 기술되고 있도록(듯이) MAP 전체가 사용 가능한 경우는, getpwent() 함수는 YP MAP "passwd.byname" (을)를 대충 읽습니다.

반환값

함수 getpwent(), getpwnam()getpwuid() (은)는, 모두 성공하면(자), passwd 구조체에의 유효한 포인터를 돌려줍니다. 파일의 종단에 도달하는지, 혹은 에러가 발생했을 경우는 누르포인타를 돌려줍니다. setpassent() 함수는, 실패했을 경우는 0 을, 성공했을 경우는 1 을 돌려줍니다. endpwent()setpwent() 함수의 반환값은 없습니다.

관련 파일

/etc/pwd.db 안전하지 않는 패스워드 데이타베이스 파일
/etc/spwd.db 안전한 패스워드 데이타베이스 파일
/etc/master.passwd
  현재의 패스워드 파일
/etc/passwd Version 7 형식의 패스워드 파일

관련 항목

getlogin(2), getgrent(3), yp(4), passwd(5), pwd_mkdb(8) [영어], vipw(8)

역사

getpwent(), getpwnam(), getpwuid(), setpwent()endpwent() 함수는, AT&T v7 그리고 처음 등장했습니다. setpassent() 함수는 BSD 4.3 Reno 그리고 등장했습니다.

호환성

역사적인 이유로 존재하고 있던, 대체 패스워드 데이타베이스의 표준을 허락한 함수 setpwfile(3) [영어] (은)는 비추천이 되어 있어, 이제 사용할 수 없습니다.

버그

함수 getpwent(), getpwnam()getpwuid() (은)는, 호출 결과를 내부의 정적 오브젝트에 남겨, 그 오브젝트를 가리키는 포인터를 돌려줍니다. 그 후, 같은 함수를 호출하면(자), 같은 오브젝트를 변경해 갈 것입니다.

GETPWENT (3) September 20, 1994

tail head cat sleep
QR code linking to this page


Ben Bullock이 유닉스 매뉴얼 페이지에서 서비스에 대한 의견을 주시기 바랍니다. Privacy policy.

This philosophy, in the hands of amateurs, leads to inexplicably mind-numbing botches like the existence of two programs, “head” and “tail,” which print the first part or the last part of a file, depending. Even though their operations are duals of one another, “head” and “tail” are different programs, written by different authors, and take different options!
— The Unix Haters' handbook