]> code.citadel.org Git - citadel.git/blobdiff - citadel/internet_addressing.c
minor style cleanups
[citadel.git] / citadel / internet_addressing.c
index 7730e8794e3039c99b051120959f7f8adb855d0f..a9c1b6481521b626bb113f4873fb0338710999b1 100644 (file)
@@ -13,7 +13,6 @@
  * GNU General Public License for more details.
  */
 
-
 #include "sysdep.h"
 #include <stdlib.h>
 #include <unistd.h>
@@ -94,10 +93,10 @@ void utf8ify_rfc822_string(char *buf) {
        int illegal_non_rfc2047_encoding = 0;
 
        /* Sometimes, badly formed messages contain strings which were simply
-        *  written out directly in some foreign character set instead of
-        *  using RFC2047 encoding.  This is illegal but we will attempt to
-        *  handle it anyway by converting from a user-specified default
-        *  charset to UTF-8 if we see any nonprintable characters.
+        * written out directly in some foreign character set instead of
+        * using RFC2047 encoding.  This is illegal but we will attempt to
+        * handle it anyway by converting from a user-specified default
+        * charset to UTF-8 if we see any nonprintable characters.
         */
        len = strlen(buf);
        for (i=0; i<len; ++i) {
@@ -1718,3 +1717,36 @@ void CtdlRebuildDirectoryIndex(void) {
        ForEachUser(CtdlRebuildDirectoryIndex_backend, NULL);
        CtdlRebuildDirectoryIndex_backend(NULL, NULL);
 }
+
+
+/*
+ * Configure Internet email addresses for a user account, updating the Directory Index in the process
+ */
+void CtdlSetEmailAddressesForUser(char *requested_user, char *new_emailaddrs)
+{
+       struct ctdluser usbuf;
+       int i;
+       char buf[SIZ];
+
+       if (CtdlGetUserLock(&usbuf, requested_user) != 0) {     // We are relying on the fact that the DirectoryIndex functions don't lock.
+               return;                                         // Silently fail here if we can't acquire a lock on the user record.
+       }
+
+       syslog(LOG_DEBUG, "internet_addressing: setting email addresses for <%s> to <%s>", usbuf.fullname, new_emailaddrs);
+
+       /* Delete all of the existing directory index records for the user (easier this way) */
+       for (i=0; i<num_tokens(usbuf.emailaddrs, '|'); ++i) {
+               extract_token(buf, usbuf.emailaddrs, i, '|', sizeof buf);
+               CtdlDirectoryDelUser(buf, requested_user);
+       }
+
+       strcpy(usbuf.emailaddrs, new_emailaddrs);               // make it official.
+
+       /* Index all of the new email addresses (they've already been sanitized) */
+       for (i=0; i<num_tokens(usbuf.emailaddrs, '|'); ++i) {
+               extract_token(buf, usbuf.emailaddrs, i, '|', sizeof buf);
+               CtdlDirectoryAddUser(buf, requested_user);
+       }
+
+       CtdlPutUserLock(&usbuf);
+}