]> code.citadel.org Git - citadel.git/blobdiff - citadel/user_ops.c
New config option 'c_smtpclient_try_starttls' if nonzero outbound SMTP attempts START...
[citadel.git] / citadel / user_ops.c
index e19f238b0359fddac35def6586ae2dca5bd98cd1..b78cc592fbdc84410569b7e242517707acbcc716 100644 (file)
@@ -666,13 +666,24 @@ void do_login(void)
        CtdlPutUserLock(&CCC->user);
 
        /*
-        * Populate CCC->cs_inet_email with a default address.  This will be
-        * overwritten with the user's directory address, if one exists, when
-        * the vCard module's login hook runs.
+        * No email address for user?  Make one up.
         */
-       snprintf(CCC->cs_inet_email, sizeof CCC->cs_inet_email, "%s@%s",
-               CCC->user.fullname, CtdlGetConfigStr("c_fqdn"));
-       convert_spaces_to_underscores(CCC->cs_inet_email);
+       if (IsEmptyStr(CCC->user.emailaddrs)) {
+               sprintf(CCC->user.emailaddrs, "cit%ld@%s", CCC->user.usernum, CtdlGetConfigStr("c_fqdn"));
+       }
+       
+       /*
+        * 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, "|");
+       if (firstsep) {
+               strcpy(CCC->cs_inet_other_emails, firstsep+1);
+               *firstsep = 0;
+       }
+       else {
+               CCC->cs_inet_other_emails[0] = 0;
+       }
 
        /* Create any personal rooms required by the system.
         * (Technically, MAILROOM should be there already, but just in case...)
@@ -760,19 +771,19 @@ static int validpw(uid_t uid, const char *pass)
        begin_critical_section(S_CHKPWD);
        rv = write(chkpwd_write_pipe[1], &uid, sizeof(uid_t));
        if (rv == -1) {
-               syslog(LOG_EMERG, "user_ops: communication with chkpwd broken: %s", strerror(errno));
+               syslog(LOG_ERR, "user_ops: communication with chkpwd broken: %m");
                end_critical_section(S_CHKPWD);
                return 0;
        }
        rv = write(chkpwd_write_pipe[1], pass, 256);
        if (rv == -1) {
-               syslog(LOG_EMERG, "user_ops: communication with chkpwd broken: %s", strerror(errno));
+               syslog(LOG_ERR, "user_ops: communication with chkpwd broken: %m");
                end_critical_section(S_CHKPWD);
                return 0;
        }
        rv = read(chkpwd_read_pipe[0], buf, 4);
        if (rv == -1) {
-               syslog(LOG_EMERG, "user_ops: ommunication with chkpwd broken: %s", strerror(errno));
+               syslog(LOG_ERR, "user_ops: ommunication with chkpwd broken: %m");
                end_critical_section(S_CHKPWD);
                return 0;
        }
@@ -799,21 +810,21 @@ void start_chkpwd_daemon(void) {
        syslog(LOG_DEBUG, "user_ops: starting chkpwd daemon for host authentication mode");
 
        if ((stat(file_chkpwd, &filestats)==-1) || (filestats.st_size==0)) {
-               syslog(LOG_ERR, "user_ops: %s: %s", file_chkpwd, strerror(errno));
+               syslog(LOG_ERR, "user_ops: %s: %m", file_chkpwd);
                abort();
        }
        if (pipe(chkpwd_write_pipe) != 0) {
-               syslog(LOG_ERR, "user_ops: unable to create pipe for chkpwd daemon: %s", strerror(errno));
+               syslog(LOG_ERR, "user_ops: unable to create pipe for chkpwd daemon: %m");
                abort();
        }
        if (pipe(chkpwd_read_pipe) != 0) {
-               syslog(LOG_ERR, "user_ops: unable to create pipe for chkpwd daemon: %s", strerror(errno));
+               syslog(LOG_ERR, "user_ops: unable to create pipe for chkpwd daemon: %m");
                abort();
        }
 
        chkpwd_pid = fork();
        if (chkpwd_pid < 0) {
-               syslog(LOG_ERR, "user_ops: unable to fork chkpwd daemon: %s", strerror(errno));
+               syslog(LOG_ERR, "user_ops: unable to fork chkpwd daemon: %m");
                abort();
        }
        if (chkpwd_pid == 0) {
@@ -821,7 +832,7 @@ void start_chkpwd_daemon(void) {
                dup2(chkpwd_read_pipe[1], 1);
                for (i=2; i<256; ++i) close(i);
                execl(file_chkpwd, file_chkpwd, NULL);
-               syslog(LOG_ERR, "user_ops: unable to exec chkpwd daemon: %s", strerror(errno));
+               syslog(LOG_ERR, "user_ops: unable to exec chkpwd daemon: %m");
                abort();
                exit(errno);
        }