comparison pam/src/conv.rs @ 29:c16564971c05

conv: fix segfault when decoding response of PAM_TEXT_INFO et al.
author holycleugh <holycleugh>
date Sun, 30 Dec 2018 03:40:41 -0500
parents 81a9f0479e50
children 1f4ef4c7e555
comparison
equal deleted inserted replaced
28:81a9f0479e50 29:c16564971c05
62 }; 62 };
63 63
64 let ret = (self.conv)(1, &&msg, &mut resp_ptr, self.appdata_ptr); 64 let ret = (self.conv)(1, &&msg, &mut resp_ptr, self.appdata_ptr);
65 65
66 if PamResultCode::PAM_SUCCESS == ret { 66 if PamResultCode::PAM_SUCCESS == ret {
67 if resp_ptr.is_null() { 67 // PamResponse.resp is null for styles that don't return user input like PAM_TEXT_INFO
68 let response = unsafe { (*resp_ptr).resp };
69 if response.is_null() {
68 Ok(None) 70 Ok(None)
69 } else { 71 } else {
70 let bytes = unsafe { CStr::from_ptr((*resp_ptr).resp).to_bytes() }; 72 let bytes = unsafe { CStr::from_ptr(response).to_bytes() };
71 Ok(String::from_utf8(bytes.to_vec()).ok()) 73 Ok(String::from_utf8(bytes.to_vec()).ok())
72 } 74 }
73 } else { 75 } else {
74 Err(ret) 76 Err(ret)
75 } 77 }