Commit f75947e9 authored by liming6's avatar liming6
Browse files

fix 优化日志逻辑

parent 4128b4d0
...@@ -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());}
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment