Generate a synthetic user@host for XMPP JID if the user does not have an Internet...
authorArt Cancro <ajc@citadel.org>
Tue, 18 Dec 2018 23:49:37 +0000 (18:49 -0500)
committerArt Cancro <ajc@citadel.org>
Tue, 18 Dec 2018 23:49:37 +0000 (18:49 -0500)
citadel/modules/xmpp/serv_xmpp.c
citadel/user_ops.c

index cc75f6dd190751d88f112fa6c91035277d28c2d2..e0b61af64413e38b7978d4b42d0f5388cd2ef71a 100644 (file)
@@ -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 */
 
index 8548f823420e665d488a5194757d6f25d264970d..9b4ee0d4f42666270662c6535783fc074f71455b 100644 (file)
@@ -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.