The fix to Bug 311 didn't work. Applied a cleaner fix.
authorArt Cancro <ajc@citadel.org>
Sun, 17 Feb 2008 02:00:15 +0000 (02:00 +0000)
committerArt Cancro <ajc@citadel.org>
Sun, 17 Feb 2008 02:00:15 +0000 (02:00 +0000)
citadel/modules/vcard/serv_vcard.c
citadel/serv_vcard.h
citadel/user_ops.c

index a3b0fc46c60a9168e6972050669854f659ac6882..00411d6d77346df5ca663755976cd12db53aa194 100644 (file)
@@ -968,25 +968,6 @@ 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.
  */
@@ -1002,14 +983,30 @@ void vcard_newuser(struct ctdluser *usbuf) {
        /* Create and save the vCard */
        v = vcard_new();
        if (v == NULL) return;
-       sprintf(buf, "%s@%s", usbuf->fullname, config.c_fqdn);
-       for (i=0; buf[i]; ++i) {
-               if (buf[i] == ' ') buf[i] = '_';
-       }
        vcard_add_prop(v, "fn", usbuf->fullname);
        vcard_add_prop(v, "n", vname);
        vcard_add_prop(v, "adr", "adr:;;_;_;_;00000;__");
+
+       /* If using host auth mode, we add an email address based on the login */
+       if (config.c_auth_mode == AUTHMODE_HOST) {
+               struct passwd pwd;
+               struct passwd **result;
+               char pwd_buffer[SIZ];
+
+               if (getpwuid_r(usbuf->uid, &pwd, pwd_buffer, sizeof pwd_buffer, result) == 0) {
+                       snprintf(buf, sizeof buf, "%s@%s", pwd.pw_name, config.c_fqdn);
+                       vcard_add_prop(v, "email;internet", buf);
+               }
+       }
+
+       /* Everyone gets an email address based on their display name */
+       snprintf(buf, sizeof buf, "%s@%s", usbuf->fullname, config.c_fqdn);
+       for (i=0; buf[i]; ++i) {
+               if (buf[i] == ' ') buf[i] = '_';
+       }
        vcard_add_prop(v, "email;internet", buf);
+
+
        vcard_write_user(usbuf, v);
        vcard_free(v);
 }
index 22077653e1f6e55757499e3f3b160ea483314adc..003b8d3d7accbeca5b5aa27fc2cfc691caf19c8f 100644 (file)
@@ -9,4 +9,3 @@ enum {
        V2L_DELETE
 };
 
-void vcard_add_alias(struct ctdluser *usbuf, char *addr);
index 79bbb9a0773bf83eda25bc774380e14a79f34666..7f84fa21eadb893c5bbd51cfe5bc6b8533616702 100644 (file)
@@ -50,7 +50,6 @@
 #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];
@@ -874,8 +873,6 @@ int purge_user(char pname[])
 }
 
 
-
-
 /*
  * create_user()  -  back end processing to create a new user
  *
@@ -980,23 +977,6 @@ 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
         */