func NewHandle(pamh unsafe.Pointer) (*Handle, error) {
	var err error
	h := &Handle{
		handle: (*C.pam_handle_t)(pamh),
		status: C.PAM_SUCCESS,
	}

	var pamUsername *C.char
	h.status = C.pam_get_user(h.handle, &pamUsername, nil)
	if err = h.err(); err != nil {
		return nil, err
	}

	h.PamUser, err = user.Lookup(C.GoString(pamUsername))
	return h, err
}