Commit f75947e9 authored by liming6's avatar liming6
Browse files

fix 优化日志逻辑

parent 4128b4d0
......@@ -20,8 +20,9 @@ use std::io::Write;
*/
const PAM_AUTH_ERR: c_int = 9;
const DEBUG: AtomicBool = AtomicBool::new(false);
static PAM_AUTH_ERR: c_int = 9;
// 是否开启debug模式的标志
static DEBUG: AtomicBool = AtomicBool::new(false);
#[unsafe(no_mangle)]
......@@ -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;
}
let uname = CStr::from_ptr(user_ptr).to_string_lossy();
wirte_log(&uname);
// 如果是root用户,必然成功
if uname == "root" {
return PAM_SUCCESS;
}
let res_arg = parse_args(argc, argv);
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;
}
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 res = query_access(&uname, &arg.0, &arg.1);
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;
} 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() {
return PAM_SUCCESS;
} else {
......@@ -103,7 +107,7 @@ unsafe fn parse_args(argc: c_int, argv:*const*const c_char) -> Result<(String,St
}
/// 若开启调试模式,就将信息追加到日志文件中
fn wirte_log(msg: &str) {
if DEBUG.load(SeqCst) {
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> {
"user": user,
"host": &ips,
}).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);
} else {
wirte_log(format!("=== login fail, user: {}, post return: {}", user, query_res).as_str());
return Ok(false);
}
}
......@@ -176,10 +183,11 @@ fn totp() {
#[test]
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 {
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