LOGIN_CAP(3)

명칭
login_close, login_getcapbool, login_getcaplist, login_getcapnum, login_getcapstr, login_getcapsize, login_getcaptime, login_getclass, login_getclassbyname, login_getpwclass, login_getstyle, login_getuserclass, login_setcryptfmt - 로그인크라스케이파비리티데이타베이스를 액세스 하는 함수

프로그램 라이브러리
libutil

서식
<sys/types.h> <login_cap.h> void login_close(login_cap_t *lc) login_cap_t * login_getclassbyname(const char *nam, const struct passwd *pwd) login_cap_t * login_getclass(const char *nam) login_cap_t * login_getpwclass(const struct passwd *pwd) login_cap_t * login_getuserclass(const struct passwd *pwd) char * login_getcapstr(login_cap_t *lc, const char *cap, char *def, char *error) char ** login_getcaplist(login_cap_t *lc, const char *cap, const char *chars) char * login_getpath(login_cap_t *lc, const char *cap, char *error) rlim_t login_getcaptime(login_cap_t *lc, const char *cap, rlim_t def, rlim_t error) rlim_t login_getcapnum(login_cap_t *lc, const char *cap, rlim_t def, rlim_t error) rlim_t login_getcapsize(login_cap_t *lc, const char *cap, rlim_t def, rlim_t error) int login_getcapbool(login_cap_t *lc, const char *cap, int def) char * login_getstyle(login_cap_t *lc, char *style, const char *auth) const char * login_setcryptfmt(login_cap_t *lc, const char *def, const char *error)

해설
이러한 함수는 login.conf(5) 에 갖춰지고 있는 로그인 클래스 데이타베이스에 대한다 프로그래밍 인터페이스를 나타냅니다. 이 데이타베이스에 수록되고 있는 것은, 케이파비리티, 속성 및 디폴트 환경, 유저나 특수 유저로서의 가동중의 프로그램에 대한 과금상의 설정등으로, /etc/master.passwd 의 등록 데이터내의 로그인 클래스 필드에 정의되고 있습니다.

login.conf(5) 안의 레코드는, 코론 ‘’: 그리고 분리되는 필드로 구성되어 있습니다. 각 레코드의 최초의 필드는 (데이타베이스 전체로 일의인) 레코드를 위한 1 개 이상의 식별자입니다. 각각 '|'로 분리되고 있어 최후미에 'name'식별자가 붙어 있는 일도 있습니다. 레코드의 나머지의 필드는 키워드/데이터의 페어로 구성됩니다. 긴 행은, 하늘 레코드내에서 backslash를 후에 붙이는 것으로 계속 가능하고, 계속행은 읽기 쉬움을 위해서(때문에) 인덴트 되고 있을지도 모릅니다. 이것은, 키워드가 2 캐릭터로 한정되지 않는 것을 제외하면, termcap(5) 그리고 사용되고 있는 형식 과 유사해 읽기역 비는 개선되고 있는 점이 이점입니다. termcap 레코드의 경우와 같게, tc=<recordid> 가 기술되고 있는 필드 에 의해 복수 레코드를 서로 관련시킬 수가 있습니다 (레코드가 포함 관계에 있습니다). <recordid> 그리고 나타나는 모든 레코드는 발생한 개소에서 tc= 필드에 의해 바꿀 수 있습니다. 케이파비리티데이타베이스의 형식과 이용 방법에 관한 상세한 것에 대하여는, getcap(3) (을)를 참조해 주세요.

login_cap 인터페이스에는, tc= 참조의 확장에 의해, 로그인 레코드 수업을 듣기 시작하는 편리한 방법이 갖춰지고 있습니다. 프로그램 요구에 의해, login_getclass(), login_getpwclass(), login_getuserclass(), login_getclassbyname() 중 어떤 것이나 1 개를 호출해 실행합니다. 각각의 함수는 로그인케이파비리티 구조체 login_cap_t (을)를 반환값으로서 돌려주어, API 의 나머지를 사용해 지정한 값을 데이타베이스에 계속해 문의하고 할 경우에 사용됩니다. login_cap_t 가 불필요하게 되었을 경우는, 함수 login_close() 의 호출을 실행해 사용하고 있던 리소스를 모두 해방할 필요가 있습니다.

login_cap_t 의 구조는 login_cap.h 로 다음과 같이 정의됩니다.

    typedef struct {
    	char *lc_class;
    	char *lc_cap;
    	char *lc_style;
    } login_cap_t;

lc_class 멤버에는 꺼낸 로그인 클래스의 이름에 대한 포인터가 있습니다. 이것은, login_getclass() 또는 login_getuserclass() (을)를 사용한 클래스명에 의해 login_getclassbyname() 경유로 직접적으로, 또는, login_getpwclass() (을)를 사용한 유저의 로그인 레코드 경유로 간접적으로 요구된 것과 반드시 같지는 않습니다. 참조된 유저에게 /etc/master.passwd 그리고 정의된 로그인 클래스가 없는 경우, 클래스명은 NULL 나 공문자열입니다. 또, 정의된 클래스가 데이타베이스에 존재하지 않는 경우, 각 함수는,"default" 라고 하는 ID 의 레코드를 탐색해, lc_class 필드에 그 이름을 반환값으로서 취득합니다. 더욱, 참조되는 유저가 UID 0 인 경우 (통상 "root" 입니다만, 유저명은 관계 없습니다), login_getpwclass() (은)는,"default" 라고 하는 ID 의 레코드의 전에,"root" 라고 한다 ID 의 레코드를 찾습니다.

lc_cap 필드는, 프로그램 라이브러리로 내부적으로 사용되어 확장된 로그인케이파비리티레코드를 보관 유지합니다. 예외적인 요건의 프로그램은, 저다음의 getcap() 방식의 함수와 함께 사용해, 레코드를 직접 액세스 하려고 합니다.

lc_style 필드에 대해서는, 로그인 자신의 조작 프로그램으로부터의 요구에 따라, 함수 login_getstyle() 에 의해, 인가 방식이 설정됩니다.

전술한 것처럼, 함수 get*class() (은)는, 케이파비리티데이타베이스의 매칭 또는 디폴트 레코드의 액세스에 사용된다 login_cap_t 오브젝트를 반환값으로서 돌려줍니다. getclassbyname() (은)는 2 개의 인수를 받습니다. 최초의 것은 꺼내 대상 레코드의 레코드 식별자로, 2 번째의 것은, 임의 지정의 디렉토리명입니다. 최초의 인수 name 하지만 NULL 인가, 공문자열인가, 혹은 보조적인 또는 시스템의 로그인 클래스 데이타베이스에 클래스가 존재하지 않는 경우, 시스템 디폴트 레코드가 대신에 돌려주어집니다. 2 번째의 인수 dir 파라미터가 NULL 때, 시스템 로그인 클래스 데이타베이스만이 사용됩니다만, NULL 가 아닐 때는, ".login_conf" 그렇다고 하는 파일내에서 이름 첨부 디렉토리가 검색되어 안에 있다 케이파비리티레코드가 시스템 디폴트를 덧쓰기합니다. 이 체계에 의해 유저는, 'me'라고 하는 ID 의 레코드가 있다 프라이빗 클래스에 대한다 클래스 레코드를 생성해, 시스템 로그인 클래스 데이타베이스의 레코드 에 있어서의 로그인 설정치를 덧쓰기할 수 있습니다. login 의 문맥에서는, 다음의 2 개의 이유에 의해, 유저가 덧쓰기할 수 없는 옵션이 있습니다. 제 1 에, 리소스 설정치나 디폴트의 프로세스 우선 순위등이 많은 옵션에서는, 효과를 발휘시키기 위해서(때문에) root 한이 필요한 것, 제 2 에, 유저 파일의 다른 필드는, 로그인의 초기 단계에서는 보안나 관리상의 이유로부터, 충분한 검토를 하고 있지 않습니다. 어느 설정이 유저가 덧쓰기할 수 있는지에 대한 상세한 것에 대하여는, login.conf(5) (을)를 참조해 주세요. 실제로는, 이것들은, 그렇지 않은 경우에 항상 초기 기동 셸 스크립트로 덧쓰기되는 유저의 디폴트 로그인 환경에 의해 명확하게 제한됩니다. 유저의 .login_conf (은)는, 로그인시, 쉘이 불리기 전에 실행되는 우선 로그인 환경 설정에서의 간편한 방법을 유저 에 제공합니다.

지정 레코드가 NULL 인가, 하늘 또는 존재하지 않을 때, 한층 더 불측의 사태에 갖추어 디폴트 레코드가 시스템에 없는 경우, 메모리 얼로케이션 에러 (이)가 되든가, 혹은 cgetent(3) 하지만 어떠한 이유에 의해 로그인케이파비리티데이타베이스에 액세스 할 수 없게 되어, NULL 를 돌려줍니다.

함수 login_getpwclass(), login_getclass(), login_getuserclass() 그리고, 유저 패스워드 등록 정보에 대응하는 로그인 클래스 레코드의 꺼내, login_getclassbyname() 호출에 의한 클래스명의 취득이 생깁니다. 처리가 실패했을 경우는 NULL 가 돌려주어집니다. 이러한 함수의 사이로, login_getuserclass() (은)는 유저에 의한 덧쓰기가 가능한 유저 홈 디렉토리상의 .login_conf (을)를 포함하고 있습니다만, login_getpwclass() 및 login_getclass() 그럼, 그것에의 참조를 /etc/login.conf 위의 시스템 로그인 클래스에 제한하고 있는 점으로 다릅니다. 상기에 나타낸 것처럼, login_getpwclass() 하지만 login_getclass() (와)과 다른 유일한 점은, 패스워드 데이타베이스에서의 정의가 없을 때에, 유저 'root'를 시스템 "root" 로서 인정하고 있는 것입니다. 한편, 패스워드의 포인터가 NULL 때, 또는 유저 레코드에 로그인 클래스가 없는 경우, 시스템의 「디폴트」등록 레코드의 취득을 합니다.

프로그램으로 login_cap_t 오브젝트를 사용할 필요가 없어지면(자), login_close() 호출을 실행해, 로그인 클래스에서 사용하고 있던 리소스를 해방합니다. login_close() (은)는 NULL 포인터를 돌려줍니다만, 이것에는 폐해는 없습니다.

나머지의 함수는, 개별의 권한 레코드의 꺼내에 사용됩니다. 각 함수는, login_cap_t 오브젝트를 제 1 인수로 해, 케이파비리티타그를 제 2 인수로 합니다. 나머지의 파라미터는, 케이파비리티레코드가 발견되지 않을 때의 디폴트 또는 에러치를 지정합니다. 주고 받아 되는 파라미터의 형태는 관련하는 케이파비리티의 타입 에 의해 바뀝니다. 예를 들어, 캐릭터 라인, 리스트, 시간치, 파일이나 메모 리사이즈, 패스 (코론으로 분리된 디렉토리 리스트로부터 구성된다), 또는 바이너리치 플래그 등입니다. login.conf(5) 의 메뉴얼 페이지에서는, 고유의 태그와 이러한 타입에 대해 취급하고 있습니다.

이 그룹의 모든 함수에서는, 포인터를 돌려줄 때 free(3) 호출을 사용할 수 없는 것에 주의해 주세요. 검색이나 케이파비리티타그 처리동안에 할당할 수 있었던 메모리는, 후속 하는 이 그룹의 함수 호출로 자동적으로 재이용되는지, 또는 login_close() 호출로 해제됩니다.

login_getcapstr()
    이 함수는, 단순 캐릭터 라인 케이파비리티를 돌려줍니다. 캐릭터 라인이 발견되지 않을 때, def 안의 정의치가 기본값로서 돌려주어집니다. 에러가 발생했을 때, error 파라미터의 값이 돌려주어집니다.

login_getcaplist()
    본함수는, 이름 첨부 케이파비리티타그의 값을 NULL 로 종료하는 배열의 값 리스트 (으)로서 돌려줍니다. 로그인 클래스 데이타베이스에는, 리스트 타입의 태그가 있어, 복수의 칸마 또는 스페이스에서 분리한 값으로 구성되어 있습니다. 통상, 이 함수는 직접 어플리케이션으로부터 불러 나올 것은 없고, login_getstyle() 경유로 간접적으로 사용됩니다.

login_getpath()
    이 함수는, ‘&:’ 그리고 분리된 디렉토리 리스트를 돌려줍니다. 이 함수의 호출이 실행된다 케이파비리티타그는 스페이스에서 분리된 디렉토리 리스트로 구성됩니다.

login_getcaptime()
    이 함수는, 시, 분, 초 (디폴트), 년 ( 365 일 기준), 주, 혹은 이러한 임의의 편성으로 나타내지는 값의 특수한 케이파비리티 태그에 관련한다 시간치 (을)를 돌려줍니다. 접미어에 의해 사용되는 단위를 결정합니다. S 는 초를, M 는 분을, H 는 때를, D 는 날을, W 는 주를 나타내, Y 는 365 일 기준에 의한 해를 나타냅니다. 단위 접미어에서는 대문자, 소문자의 구별은 없습니다.

    시간치는, 통상은 리소스의 설정치, 과금 시스템, 및 세션 제한치에 사용됩니다. operating system나 컴파일러 ( FreeBSD 대응)으로 서포트하고 있는 경우, 반환값은 2 차원 (long long)의 rlim_t 형태가 됩니다. 값 'inf'또는 'infinity'로 무한의 값을 나타낼 수 있습니다. 그 경우 RLIM_INFINITY 하지만 반환값이 됩니다.

login_getcapnum()
    이 함수는, 태그에 관한 수치를 돌려줍니다. 수치는, tag=<value> 또는 표준적인 cgetnum() 서식 tag#<value> 그리고 표현됩니다. 최초의 서식은 2 번째의 것보다 우선적으로 사용됩니다. 2 번째의 서식은, getcap(3) 데이타베이스의 서식과의 호환성과 정합성이 있어, 수치 타입의 경우, 수치의 딜리미터로서 ‘#’ 하지만 사용됩니다. 최초의 서식의 경우, 지정되는 값은 'inf'또는 'infinity'로, 반환값은 RLIM_INFINITY (이)가 됩니다. 지정된 케이파비리티타그를 찾아낼 수가 없는 경우, def 파라미터가 돌려주어집니다. 에러가 일어나면(자), error 파라미터가 돌려주어집니다.

login_getcapsize()
    login_getcapsize() (은)는, 사이즈(파일 또는 메모리의 경우)를 나타내는 값을, 바이트수(디폴트), 512 바이트의 블록수, KB, MB, GB 표시로 돌려줍니다. 또 long long 타입을 서포트하고 있는 시스템 이면, TB 표시도 있습니다. 사용되고 있는 접미어에 의해 단위, 복합치를 결정해, 단위는 배합한 형태로 사용됩니다. (예를 들면, 1m500k = 1.5megabytes) 접미어가 없는 값 A 는 바이트를, B 는 512 바이트 블록을, K 는 KB 를, M 는 MB 를, G 는 GB 를, 그리고 T (은)는 TB 를 나타냅니다. 대문자와 소문자의 구별은 없습니다. 에러치가 되돌아 오는 것은, 로그인케이파비리티데이타베이스에라가 있는지, 잘못한 접미어가 사용되고 있는지, 또는 수치를 변환을 할 수 없는 경우입니다.

login_getcapbool()
    이 함수는, 특정의 플래그에 관련한 바이너리치를, 돌려줍니다. 지정되었다 케이파비리티타그가 없는지, "tag@" (boolean 플래그의 상세한 것에 대하여는 getcap(3) (을)를 참조)에 의해 무효로 되고 있을 때, 0 이 돌아갑니다. 태그가 발견되면 1 이 돌아갑니다.

login_getstyle()
    이 함수는, 로그인 인가 시스템으로 사용되어 특정의 케이스로 유효한 로그인의 형식을 결정합니다. 함수는, 3 개의 파라미터와 login_cap 등록 레코드 그 자체, 및 2 개의 임의 지정 파라미터, 'auth' (와)과 'style' 의 인가 타입을 받아, 이것들을 이용해 이러한 룰과 모순되지 않는다 인가 스타일을 결정합니다.

    •   'auth'가 NULL 또는 공문자열이 아니면, 케이파비리티레코드의 "auth-<auth>" 타입의 태그의 검색을 실시합니다. 존재하지 않으면, 디폴트의 디폴트 태그 "auth=" (을)를 검색합니다.

    •   앞의 스텝에서 정당한 인가 리스트가 발견되지 않는 경우, 'passwd' 하지만 디폴트의 인가 리스트로 여겨집니다.

    •   'style'가 NULL 에서도 하늘도 아닐 때, 선행 스텝에서 발견된 인가 방식의 리스트로부터 그것을 검색합니다.

    •   'style'가 NULL 나 공문자열 때, 'passwd' (을)를 디폴트의 인가에 사용합니다.

    •   'style'가, 인가 방식의 선택 리스트에 발견되었을 경우, 그것을 돌려주어, 그렇지 않을 때는 NULL 를 돌려줍니다.

    이 체계에 의해, 관리자는, 액세스 방식에 따라, 시스템이 받는다 인가 방식을 결정합니다. 예를 들어, 관리자가 네트워크를 경유한 시스템에의 액세스에 사용된 인증 방식으로서 skey 또는 kerberos 를 요구합니다. 또, 직접적인 다이얼 업 또는 콘솔 로그인 경유에서의 표준적 방식을 요구하는 일도 있어,"snooping" 네트워크 패킷에 의해 패스워드가 발견되는 리스크를 현저하게 감소 당합니다.

login_setcryptfmt()
    crypt(3) 서식의 설정을 위해서(때문에), ‘passwd_format’ 설정 엔트리를 사용해, login_setcryptfmt() 함수가 사용됩니다. 엔트리가 발견되지 않는 경우, def 하지만 폴 백으로서 사용됩니다. 지정한 인수의 crypt_set_format(3) 하지만 실패하면(자), error 하지만 돌려주어집니다.

관련 항목
crypt(3), getcap(3), login_class(3), login.conf(5), termcap(5)