Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
liming6
pam_rs
Commits
f75947e9
Commit
f75947e9
authored
Feb 05, 2026
by
liming6
Browse files
fix 优化日志逻辑
parent
4128b4d0
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
19 additions
and
11 deletions
+19
-11
src/lib.rs
src/lib.rs
+19
-11
No files found.
src/lib.rs
View file @
f75947e9
...
@@ -20,8 +20,9 @@ use std::io::Write;
...
@@ -20,8 +20,9 @@ use std::io::Write;
*/
*/
const
PAM_AUTH_ERR
:
c_int
=
9
;
static
PAM_AUTH_ERR
:
c_int
=
9
;
const
DEBUG
:
AtomicBool
=
AtomicBool
::
new
(
false
);
// 是否开启debug模式的标志
static
DEBUG
:
AtomicBool
=
AtomicBool
::
new
(
false
);
#[unsafe(no_mangle)]
#[unsafe(no_mangle)]
...
@@ -39,24 +40,27 @@ pub unsafe extern "C" fn pam_sm_acct_mgmt(pamh: *mut pam_handle,flags: c_int,arg
...
@@ -39,24 +40,27 @@ pub unsafe extern "C" fn pam_sm_acct_mgmt(pamh: *mut pam_handle,flags: c_int,arg
return
PAM_AUTH_ERR
;
return
PAM_AUTH_ERR
;
}
}
let
uname
=
CStr
::
from_ptr
(
user_ptr
)
.to_string_lossy
();
let
uname
=
CStr
::
from_ptr
(
user_ptr
)
.to_string_lossy
();
wirte_log
(
&
uname
);
// 如果是root用户,必然成功
// 如果是root用户,必然成功
if
uname
==
"root"
{
if
uname
==
"root"
{
return
PAM_SUCCESS
;
return
PAM_SUCCESS
;
}
}
let
res_arg
=
parse_args
(
argc
,
argv
);
let
res_arg
=
parse_args
(
argc
,
argv
);
if
res_arg
.is_err
()
{
if
res_arg
.is_err
()
{
wirte_log
(
&
format!
(
"parse_args error: {}"
,
res_arg
.err
()
.unwrap
()));
// 如果解析参数错误,必生成日志
DEBUG
.store
(
true
,
SeqCst
);
wirte_log
(
&
format!
(
"=== parse_args error: {}"
,
res_arg
.err
()
.unwrap
()));
return
PAM_SUCCESS
;
return
PAM_SUCCESS
;
}
}
wirte_log
(
&
format!
(
"parse_args: {:?}"
,
res_arg
.as_ref
()
.unwrap
()));
wirte_log
(
format!
(
"----- a login auth start, user: {} -----"
,
uname
)
.as_str
());
wirte_log
(
format!
(
"--- parse_args: {:?}"
,
res_arg
.as_ref
()
.unwrap
())
.as_str
());
let
arg
=
res_arg
.unwrap
();
let
arg
=
res_arg
.unwrap
();
let
res
=
query_access
(
&
uname
,
&
arg
.0
,
&
arg
.1
);
let
res
=
query_access
(
&
uname
,
&
arg
.0
,
&
arg
.1
);
if
res
.is_err
()
{
if
res
.is_err
()
{
wirte_log
(
&
format!
(
"query_access error: {}"
,
res
.err
()
.unwrap
()));
wirte_log
(
format!
(
"
===
query_access error: {}"
,
res
.err
()
.unwrap
())
.as_str
()
);
return
PAM_SUCCESS
;
return
PAM_SUCCESS
;
}
else
{
}
else
{
wirte_log
(
&
format!
(
"query_access success: {}"
,
res
.as_ref
()
.unwrap
()));
wirte_log
(
format!
(
"
---
query_access success: {}"
,
res
.as_ref
()
.unwrap
())
.as_str
()
);
if
*
res
.as_ref
()
.unwrap
()
{
if
*
res
.as_ref
()
.unwrap
()
{
return
PAM_SUCCESS
;
return
PAM_SUCCESS
;
}
else
{
}
else
{
...
@@ -103,7 +107,7 @@ unsafe fn parse_args(argc: c_int, argv:*const*const c_char) -> Result<(String,St
...
@@ -103,7 +107,7 @@ unsafe fn parse_args(argc: c_int, argv:*const*const c_char) -> Result<(String,St
}
}
/// 若开启调试模式,就将信息追加到日志文件中
fn
wirte_log
(
msg
:
&
str
)
{
fn
wirte_log
(
msg
:
&
str
)
{
if
DEBUG
.load
(
SeqCst
)
{
if
DEBUG
.load
(
SeqCst
)
{
let
mut
file
=
OpenOptions
::
new
()
.append
(
true
)
.create
(
true
)
.open
(
"/tmp/pam_rs.log"
)
.unwrap
();
let
mut
file
=
OpenOptions
::
new
()
.append
(
true
)
.create
(
true
)
.open
(
"/tmp/pam_rs.log"
)
.unwrap
();
...
@@ -136,9 +140,12 @@ fn query_access(user: &str, url: &str, secret: &str) -> Result<bool> {
...
@@ -136,9 +140,12 @@ fn query_access(user: &str, url: &str, secret: &str) -> Result<bool> {
"user"
:
user
,
"user"
:
user
,
"host"
:
&
ips
,
"host"
:
&
ips
,
})
.to_string
())
?
;
})
.to_string
())
?
;
if
"0"
==
res
.body_mut
()
.read_to_string
()
?
{
let
query_res
=
res
.body_mut
()
.read_to_string
()
?
;
if
query_res
.eq
(
"0"
)
{
wirte_log
(
format!
(
"--- login ok, user: {}"
,
user
)
.as_str
());
return
Ok
(
true
);
return
Ok
(
true
);
}
else
{
}
else
{
wirte_log
(
format!
(
"=== login fail, user: {}, post return: {}"
,
user
,
query_res
)
.as_str
());
return
Ok
(
false
);
return
Ok
(
false
);
}
}
}
}
...
@@ -176,10 +183,11 @@ fn totp() {
...
@@ -176,10 +183,11 @@ fn totp() {
#[test]
#[test]
fn
test_query
()
{
fn
test_query
()
{
let
b
=
query_access
(
"liming6"
,
"http://127.0.0.1:99"
,
"FRZPBN2FAZMJY7G2FKTBZVXNNU"
);
let
b
=
query_access
(
"liming6"
,
"http://127.0.0.1:99/pam/auth/fai"
,
"FRZPBN2FAZMJY7G2FKTBZVXNNU"
);
DEBUG
.store
(
true
,
SeqCst
);
match
b
{
match
b
{
Ok
(
o
)
=>
{
println!
(
"access: {}"
,
o
)},
Ok
(
o
)
=>
{
println!
(
"access: {}"
,
o
)},
Err
(
e
)
=>
{
println!
(
"err: {}"
,
e
)}
Err
(
e
)
=>
{
println!
(
"err: {}"
,
e
)
;
wirte_log
(
e
.to_string
()
.as_str
());
}
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment