I have been running ejabberd on a Linux machine happily for some time now but recently moved to a FreeBSD box. I cannot seem to get ejabberd up and running with external auth. The auth script runs and has the exact same output as on the Linux machine - it seems to be working properly. But ejabberd is still complaining with the following cryptic message:
** Reason for termination = ** {{badmatch,{aborted,{no_exists,passwd}}}, [{ejabberd_auth_internal,set_password,3}, {ejabberd_auth_external,check_password_external_cache,3}, {ejabberd_auth,check_password_loop,2}, {cyrsasl_plain,mech_step,2}, {cyrsasl,server_step,2}, {ejabberd_c2s,wait_for_feature_request,2}, {p1_fsm,handle_msg,10}, {proc_lib,init_p_do_apply,3}]}
This, to me, seems to indicate that there's something weird about the passwd file?
ejabberd:*:543:543:ejabberd pseudo user:/var/spool/ejabberd:/bin/sh
That doesn't seem unusual to me.
So what is this error message really saying? Any help would be appreciated.
Linux was running ejabberd 2.1.2 while FreeBSD is from 2.1.5
internal first, then external
I have no idea what the internal problem was, but running ejabberd once with 'internal' auth and then switching it back to 'external' auth fixed everything. Maybe it needed to initialize something first... no clue.
I can confirm that.
I can confirm that.
Your solution was right: the
Your solution was right: the 'passwd' table must exist for external to work. And it is created the first time ejabberd runs with internal enabled.