To write a module using the CVM module library, you must provide the following items:
If authentication fails, the module must return CVME_PERMFAIL (value 100). If there was a temporary error, return any other non-zero number error code. Otherwise, return zero after setting cvm_fact_username, cvm_fact_userid, cvm_fact_groupid, cvm_fact_directory, and cvm_fact_shell, which will be automatically sent to the client when authenticate() completes. cvm_fact_realname, cvm_fact_groupname, cvm_fact_sys_username, cvm_fact_sys_directory, and cvm_fact_domain will also be sent if they are set. If any other facts are to be returned to the client, send them with cvm_fact_str(int number, const char* data) or cvm_fact_uint(int number, unsigned data).
NOTE: cvm_authenticate() must never exit except on fatal errors. If it allocates any memory, it must either be freed or reallocated on the next invocation.