When using host auth mode the user is given a default email address
authorDave West <davew@uncensored.citadel.org>
Wed, 13 Feb 2008 22:47:42 +0000 (22:47 +0000)
committerDave West <davew@uncensored.citadel.org>
Wed, 13 Feb 2008 22:47:42 +0000 (22:47 +0000)
based on the gecos field from the passwd file which is usually
"firstname_lastname" this results in the user not being able to receive
mail to their default username address.
To rememdy this when the user logs in for the first time we now create
the users vCard as normal and then add an alias to the vCard.
The alias is username@domain as opposed to firstname_lastname@domain.
We only add the alias if it would differ from the original address.
We only do this in host auth mode.

citadel/modules/vcard/serv_vcard.c
citadel/serv_vcard.h
citadel/user_ops.c

index d4ab858b9407d8fb45695801648228dac5fad73b..a3b0fc46c60a9168e6972050669854f659ac6882 100644 (file)
@@ -968,6 +968,25 @@ void cmd_greg(char *argbuf)
 
 
 
+
+
+/*
+ * Add an email alias to a users vcard
+ */
+
+void vcard_add_alias(struct ctdluser *usbuf, char *addr)
+{
+       struct vCard *v;
+       
+       v = vcard_get_user(usbuf);
+       vcard_add_prop(v, "email;internet", addr);
+       vcard_write_user(usbuf, v);
+       vcard_free(v);
+}
+
+
+
+
 /*
  * When a user is being created, create his/her vCard.
  */
index 003b8d3d7accbeca5b5aa27fc2cfc691caf19c8f..22077653e1f6e55757499e3f3b160ea483314adc 100644 (file)
@@ -9,3 +9,4 @@ enum {
        V2L_DELETE
 };
 
+void vcard_add_alias(struct ctdluser *usbuf, char *addr);
index 7f84fa21eadb893c5bbd51cfe5bc6b8533616702..79bbb9a0773bf83eda25bc774380e14a79f34666 100644 (file)
@@ -50,6 +50,7 @@
 #include "citadel_dirs.h"
 #include "genstamp.h"
 #include "threads.h"
+#include "serv_vcard.h"        /* FIXME: Get this dependancy out. Needed for vcard_add_alias */
 
 /* These pipes are used to talk to the chkpwd daemon, which is forked during startup */
 int chkpwd_write_pipe[2];
@@ -873,6 +874,8 @@ int purge_user(char pname[])
 }
 
 
+
+
 /*
  * create_user()  -  back end processing to create a new user
  *
@@ -977,6 +980,23 @@ int create_user(char *newusername, int become_user)
        /* Perform any create functions registered by server extensions */
        PerformUserHooks(&usbuf, EVT_NEWUSER);
 
+       /* In host auth mode the user was created with an email address of the users
+        * full name from the passwd gecos field.
+        * Not sure what would have happened if that wasn't set to something
+        * but thats another story
+        * We need to add an email alias to the users vCard for the proper username
+        */
+       if (config.c_auth_mode == AUTHMODE_HOST)
+       {
+               char user_alias[SIZ];
+               
+               if (strcmp(username, newusername))
+               {
+                       sprintf(user_alias, "%s@%s", newusername, config.c_fqdn);
+                       vcard_add_alias(&usbuf, user_alias);
+               }
+       }
+
        /* Everything below this line can be bypassed if administratively
         * creating a user, instead of doing self-service account creation
         */