$Log$
+ Revision 590.102 2002/02/07 04:42:49 ajc
+ * Silently refuse to add directory entries for Internet addresses already
+ belonging to other users.
+ * cdb_trunc() for CtdlDirectoryInit: implemented for GDBM, stubbed for DB
+
Revision 590.101 2002/02/05 05:05:53 ajc
* Don't crash when posting if the user doesn't have an Internet directory address
Fri Jul 10 1998 Art Cancro <ajc@uncensored.citadel.org>
* Initial CVS import
+
}
+/*
+ * Truncate (delete every record)
+ */
+void cdb_trunc(int cdb) {
+ datum key;
+
+ begin_critical_section(S_DATABASE);
+ key = gdbm_firstkey ( dbf );
+ while (key = gdbm_firstkey(gdbms[cdb], key.dptr != NULL) {
+ gdbm_delete(gdbms[cdb], key);
+ }
+ end_critical_section(S_DATABASE);
+}
+
+
+
/*
* empty functions because GDBM doesn't have transaction support
*/
* A server-side module for Citadel which supports address book information
* using the standard vCard format.
*
- * Copyright (c) 1999-2001 / released under the GNU General Public License
+ * Copyright (c) 1999-2002 / released under the GNU General Public License
*/
/*
vcard_free(v);
}
+
+
+/*
+ * Callback for vcard_add_to_directory()
+ * (Lotsa ugly nested callbacks. Oh well.)
+ * This little shim function makes sure we're not
+ */
+void vcard_directory_add_user(char *internet_addr, char *citadel_addr) {
+ char buf[SIZ];
+
+ /* We have to validate that we're not stepping on someone else's
+ * email address ... but only if we're logged in. Otherwise it's
+ * probably just the networker or something.
+ */
+ if (CC->logged_in) {
+ lprintf(9, "Checking for <%s>...\n", internet_addr);
+ if (CtdlDirectoryLookup(buf, internet_addr) == 0) {
+ if (strcasecmp(buf, citadel_addr)) {
+ /* This address belongs to someone else.
+ * Bail out silently without saving.
+ */
+ lprintf(9, "DOOP!\n");
+ return;
+ }
+ }
+ }
+ lprintf(9, "ADDING!\n");
+ CtdlDirectoryAddUser(internet_addr, citadel_addr);
+}
+
+
/*
* Back end function for cmd_igab()
*/
msg = CtdlFetchMessage(msgnum);
if (msg != NULL) {
- vcard_extract_internet_addresses(msg, CtdlDirectoryAddUser);
+ vcard_extract_internet_addresses(msg, vcard_directory_add_user);
}
CtdlFreeMessage(msg);