From df8fe1be788cd4193b9e213009b665b47f1ed385 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Tue, 18 Dec 2018 18:49:37 -0500 Subject: [PATCH] Generate a synthetic user@host for XMPP JID if the user does not have an Internet email address. --- citadel/modules/xmpp/serv_xmpp.c | 19 ++++++++------- citadel/user_ops.c | 40 +++++++++++++++----------------- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/citadel/modules/xmpp/serv_xmpp.c b/citadel/modules/xmpp/serv_xmpp.c index cc75f6dd1..e0b61af64 100644 --- a/citadel/modules/xmpp/serv_xmpp.c +++ b/citadel/modules/xmpp/serv_xmpp.c @@ -414,15 +414,16 @@ void xmpp_xml_end(void *data, const char *supplied_el) { /* 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 - ); - - /* FIXME look here ... there's nothing before the slash ... wtf? - syslog(LOG_DEBUG, "\033[31m client resource = '%s' \033[0m", XMPP->client_jid); - */ + 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 */ diff --git a/citadel/user_ops.c b/citadel/user_ops.c index 8548f8234..9b4ee0d4f 100644 --- a/citadel/user_ops.c +++ b/citadel/user_ops.c @@ -619,32 +619,30 @@ int CtdlLoginExistingUser(char *authname, const char *trythisname) */ void do_login(void) { - struct CitContext *CCC = CC; + CC->logged_in = 1; + syslog(LOG_NOTICE, "user_ops: <%s> logged in", CC->curr_user); - CCC->logged_in = 1; - syslog(LOG_NOTICE, "user_ops: <%s> logged in", CCC->curr_user); - - CtdlGetUserLock(&CCC->user, CCC->curr_user); - ++(CCC->user.timescalled); - CCC->previous_login = CCC->user.lastcall; - time(&CCC->user.lastcall); + CtdlGetUserLock(&CC->user, CC->curr_user); + ++(CC->user.timescalled); + CC->previous_login = CC->user.lastcall; + time(&CC->user.lastcall); /* If this user's name is the name of the system administrator * (as specified in setup), automatically assign access level 6. */ - if ( (!IsEmptyStr(CtdlGetConfigStr("c_sysadm"))) && (!strcasecmp(CCC->user.fullname, CtdlGetConfigStr("c_sysadm"))) ) { - CCC->user.axlevel = AxAideU; + if ( (!IsEmptyStr(CtdlGetConfigStr("c_sysadm"))) && (!strcasecmp(CC->user.fullname, CtdlGetConfigStr("c_sysadm"))) ) { + CC->user.axlevel = AxAideU; } /* If we're authenticating off the host system, automatically give * root the highest level of access. */ if (CtdlGetConfigInt("c_auth_mode") == AUTHMODE_HOST) { - if (CCC->user.uid == 0) { - CCC->user.axlevel = AxAideU; + if (CC->user.uid == 0) { + CC->user.axlevel = AxAideU; } } - CtdlPutUserLock(&CCC->user); + CtdlPutUserLock(&CC->user); /* * If we are using LDAP authentication, extract the user's email addresses from the directory. @@ -653,8 +651,8 @@ void do_login(void) if ((CtdlGetConfigInt("c_auth_mode") == AUTHMODE_LDAP) || (CtdlGetConfigInt("c_auth_mode") == AUTHMODE_LDAP_AD)) { char new_emailaddrs[512]; if (CtdlGetConfigInt("c_ldap_sync_email_addrs") > 0) { - if (extract_email_addresses_from_ldap(CCC->ldap_dn, new_emailaddrs) == 0) { - CtdlSetEmailAddressesForUser(CCC->user.fullname, new_emailaddrs); + if (extract_email_addresses_from_ldap(CC->ldap_dn, new_emailaddrs) == 0) { + CtdlSetEmailAddressesForUser(CC->user.fullname, new_emailaddrs); } } } @@ -662,8 +660,8 @@ void do_login(void) /* * No email address for user? Make one up. (commented out because it appears to break things) - if (IsEmptyStr(CCC->user.emailaddrs)) { - sprintf(CCC->user.emailaddrs, "cit%ld@%s", CCC->user.usernum, CtdlGetConfigStr("c_fqdn")); + if (IsEmptyStr(CC->user.emailaddrs)) { + sprintf(CC->user.emailaddrs, "cit%ld@%s", CC->user.usernum, CtdlGetConfigStr("c_fqdn")); } */ @@ -671,14 +669,14 @@ void do_login(void) /* * Populate cs_inet_email and cs_inet_other_emails with valid email addresses from the user record */ - strcpy(CCC->cs_inet_email, CCC->user.emailaddrs); - char *firstsep = strstr(CCC->cs_inet_email, "|"); + strcpy(CC->cs_inet_email, CC->user.emailaddrs); + char *firstsep = strstr(CC->cs_inet_email, "|"); if (firstsep) { - strcpy(CCC->cs_inet_other_emails, firstsep+1); + strcpy(CC->cs_inet_other_emails, firstsep+1); *firstsep = 0; } else { - CCC->cs_inet_other_emails[0] = 0; + CC->cs_inet_other_emails[0] = 0; } /* Create any personal rooms required by the system. -- 2.30.2