c9279b85a5352930da6d6aa6e080de2b5b82ab15
ctypes auto-converts c_char_p return values to Python bytes, losing the original malloc'd pointer from strdup(). When PAM called free() on the response, it hit a ctypes-internal buffer instead — segfault. Use c_void_p for PamResponse.resp and strdup restype to preserve raw pointers. Also use calloc/strdup for proper malloc'd memory that PAM can safely free(). Add try/except in auth thread so UI stays interactive on PAM errors.
Languages
Rust
97.5%
CSS
2.5%