code: func readCallback(index C.int, e C.int) *C.char {
  	handle, err := lookupHandler(int(index))
  	if err != nil {
  		log.Errorf("Unable to read from input stream: %v", err)
  		return nil
  	}
  
  	var echo bool
  	if e == 1 {
  		echo = true
  	}
  
  	// Read from the stream (typically stdin or equivalent).
  	s, err := handle.readStream(echo)
  	if err != nil {
  		log.Errorf("Unable to read from input stream: %v", err)
  		return nil
  	}
  
  	// Return one less than PAM_MAX_RESP_SIZE to prevent a Teleport user from
  	// sending more than a PAM module can handle and to allow space for \0.
  	//
  	// Note: The function C.CString allocates memory using malloc. The memory is
  	// not released in Go code because the caller of the callback function (PAM
  	// module) will release it. C.CString will null terminate s.
  	n := int(C.PAM_MAX_RESP_SIZE)
  	if len(s) > n-1 {
  		return C.CString(s[:n-1])
  	}
  	return C.CString(s)
  }
docs: //export readCallback