else if (
(XMPP->bind_requested)
&& (!IsEmptyStr(XMPP->iq_id))
- && (!IsEmptyStr(XMPP->iq_client_resource))
&& (CC->logged_in)
- ) {
+ ) {
+
+ /* If the client has not specified a client resource, generate one */
+
+ if (IsEmptyStr(XMPP->iq_client_resource)) {
+ generate_uuid(XMPP->iq_client_resource);
+ }
/* Generate the "full JID" of the client resource */
- snprintf(XMPP->client_jid, sizeof XMPP->client_jid,
- "%s/%s",
- CC->cs_inet_email,
- XMPP->iq_client_resource
- );
+ if (IsEmptyStr(CC->cs_inet_email)) { // synthetic user@host if no email is set
+ snprintf(XMPP->client_jid, sizeof XMPP->client_jid,
+ "%ld@%s/%s", CC->user.usernum, CtdlGetConfigStr("c_fqdn"), XMPP->iq_client_resource
+ );
+ }
+ else { // use the email address if we have it
+ snprintf(XMPP->client_jid, sizeof XMPP->client_jid,
+ "%s/%s", CC->cs_inet_email, XMPP->iq_client_resource
+ );
+ }
/* Tell the client what its JID is */