+
+ if (oldver < 650) {
+ CtdlSetConfigInt("c_enable_fulltext", 1);
+ }
+
+ if (oldver < 652) {
+ CtdlSetConfigInt("c_auto_cull", 1);
+ }
+
+ if (oldver < 725) {
+ CtdlSetConfigInt("c_xmpp_c2s_port", 5222);
+ CtdlSetConfigInt("c_xmpp_s2s_port", 5269);
+ }
+
+ if (oldver < 830) {
+ CtdlSetConfigInt("c_nntp_port", 119);
+ CtdlSetConfigInt("c_nntps_port", 563);
+ }
+
+ if (IsEmptyStr(CtdlGetConfigStr("c_default_cal_zone"))) {
+ guess_time_zone();
+ }
+}
+
+
+/*
+ * Helper function for move_inet_addrs_from_vcards_to_user_records()
+ *
+ * Call this function as a ForEachUser backend in order to queue up
+ * user names, or call it with a null user to make it do the processing.
+ * This allows us to maintain the list as a static instead of passing
+ * pointers around.
+ */
+void miafvtur_backend(struct ctdluser *usbuf, void *data) {
+
+ struct miafvtur {
+ char name[64];
+ char emails[512];
+ };
+
+ static struct miafvtur *m = NULL;
+ static int num_m = 0;
+ static int alloc_m = 0;
+
+ /* this is the calling mode where we add a user */
+
+ if (usbuf != NULL) {
+ char primary_inet_email[512] = { 0 };
+ char other_inet_emails[512] = { 0 };
+ struct vCard *v = vcard_get_user(usbuf);
+ if (!v) return;
+ extract_inet_email_addrs(primary_inet_email, sizeof primary_inet_email, other_inet_emails, sizeof other_inet_emails, v, 1);
+ vcard_free(v);
+
+ if ( (IsEmptyStr(primary_inet_email)) && (IsEmptyStr(other_inet_emails)) ) {
+ return;
+ }
+
+ if (num_m >= alloc_m) {
+ if (alloc_m == 0) {
+ alloc_m = 100;
+ m = malloc(sizeof(struct miafvtur) * alloc_m);
+ }
+ else {
+ alloc_m *= 2;
+ m = realloc(m, (sizeof(struct miafvtur) * alloc_m));
+ }
+ }
+
+ strcpy(m[num_m].name, usbuf->fullname);
+ snprintf(m[num_m].emails, 512, "%s%s%s",
+ (!IsEmptyStr(primary_inet_email) ? primary_inet_email : ""),
+ ((!IsEmptyStr(primary_inet_email)&&(!IsEmptyStr(other_inet_emails))) ? "|" : ""),
+ (!IsEmptyStr(other_inet_emails) ? other_inet_emails : "")
+ );
+ ++num_m;