-
Notifications
You must be signed in to change notification settings - Fork 0
/
adg-example.html
68 lines (54 loc) · 3.52 KB
/
adg-example.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>8장. 예시 응용</title><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="Linux-PAM_ADG.html" title="Linux-PAM 응용 개발자 안내서"><link rel="up" href="Linux-PAM_ADG.html" title="Linux-PAM 응용 개발자 안내서"><link rel="prev" href="adg-glossary.html" title="7장. PAM 관련 용어"><link rel="next" href="adg-files.html" title="9장. 파일"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">8장. 예시 응용</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="adg-glossary.html">이전</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="adg-files.html">다음</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h1 class="title"><a name="adg-example"></a>8장. 예시 응용</h1></div></div></div><p>
<span class="emphasis"><em>Linux-PAM</em></span> 응용 작성 방식을
살펴볼 수 있도록 다음 예시 응용을 준비했다. 사용자에게 패스워드를
묻고 계정이 유효한지를 표준 출력으로 표시한다. 반환 코드가 성공
여부를 나타낸다. (<span class="returnvalue">0</span>은 성공,
<span class="returnvalue">1</span>은 실패.)
</p><pre class="programlisting">
/*
Shane Watts가 작성해 준 프로그램이다.
[AGM과 kukuk이 변경]
/etc/pam.d/check_user 파일에 다음을 (또는 동등한 내용을)
추가해 줘야 한다.
# check authorization
auth required pam_unix.so
account required pam_unix.so
*/
#include <security/pam_appl.h>
#include <security/pam_misc.h>
#include <stdio.h>
static struct pam_conv conv = {
misc_conv,
NULL
};
int main(int argc, char *argv[])
{
pam_handle_t *pamh=NULL;
int retval;
const char *user="nobody";
if(argc == 2) {
user = argv[1];
}
if(argc > 2) {
fprintf(stderr, "Usage: check_user [username]\n");
exit(1);
}
retval = pam_start("check_user", user, &conv, &pamh);
if (retval == PAM_SUCCESS)
retval = pam_authenticate(pamh, 0); /* 사용자가 진짜 사용자인가? */
if (retval == PAM_SUCCESS)
retval = pam_acct_mgmt(pamh, 0); /* 접근 허용? */
/* 이 시점에서 인가 여부 결론이 나 있다. */
if (retval == PAM_SUCCESS) {
fprintf(stdout, "Authenticated\n");
} else {
fprintf(stdout, "Not Authenticated\n");
}
if (pam_end(pamh,retval) != PAM_SUCCESS) { /* Linux-PAM 닫기 */
pamh = NULL;
fprintf(stderr, "check_user: failed to release authenticator\n");
exit(1);
}
return ( retval == PAM_SUCCESS ? 0:1 ); /* 성공 여부 표시 */
}
</pre></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="adg-glossary.html">이전</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="adg-files.html">다음</a></td></tr><tr><td width="40%" align="left" valign="top">7장. PAM 관련 용어 </td><td width="20%" align="center"><a accesskey="h" href="Linux-PAM_ADG.html">대문</a></td><td width="40%" align="right" valign="top"> 9장. 파일</td></tr></table></div></body></html>