* added message subject to all those tiny messages
[citadel.git] / citadel / serv_vcard.c
index 51f7b29f56c810e4e3cbb08324923bf07eb74b26..f2205b687b6d26177f05f621ccc39a32c6d8bd24 100644 (file)
@@ -189,7 +189,7 @@ void cmd_igab(char *argbuf) {
        CtdlDirectoryInit();
 
        /* We want *all* vCards in this room */
-       CtdlForEachMessage(MSGS_ALL, 0, "text/x-vcard",
+       CtdlForEachMessage(MSGS_ALL, 0, NULL, "text/x-vcard",
                NULL, vcard_add_to_directory, NULL);
 
        getroom(&CC->room, hold_rm);    /* return to saved room */
@@ -522,7 +522,7 @@ struct vCard *vcard_get_user(struct ctdluser *u) {
 
        /* We want the last (and probably only) vcard in this room */
        VCmsgnum = (-1);
-       CtdlForEachMessage(MSGS_LAST, 1, "text/x-vcard",
+       CtdlForEachMessage(MSGS_LAST, 1, NULL, "text/x-vcard",
                NULL, vcard_gu_backend, (void *)&VCmsgnum );
        getroom(&CC->room, hold_rm);    /* return to saved room */
 
@@ -876,6 +876,56 @@ void cmd_qdir(char *argbuf) {
        cprintf("%d %s\n", CIT_OK, citadel_addr);
 }
 
+/*
+ * Query Directory, in fact an alias to match postfix tcp auth.
+ */
+void check_get(void) {
+       char internet_addr[256];
+
+       char cmdbuf[SIZ];
+
+       time(&CC->lastcmd);
+       memset(cmdbuf, 0, sizeof cmdbuf); /* Clear it, just in case */
+       if (client_getln(cmdbuf, sizeof cmdbuf) < 1) {
+               lprintf(CTDL_CRIT, "Client disconnected: ending session.\n");
+               CC->kill_me = 1;
+               return;
+       }
+       lprintf(CTDL_INFO, ": %s\n", cmdbuf);
+       while (strlen(cmdbuf) < 3) strcat(cmdbuf, " ");
+
+       if (strcasecmp(cmdbuf, "GET "));
+       {
+               struct recptypes *rcpt;
+               char *argbuf = &cmdbuf[4];
+               
+               extract_token(internet_addr, argbuf, 0, '|', sizeof internet_addr);
+               rcpt = validate_recipients(internet_addr);
+               if ((rcpt != NULL)&&
+                       (
+                        (*rcpt->recp_local != '\0')||
+                        (*rcpt->recp_room != '\0')||
+                        (*rcpt->recp_ignet != '\0')))
+               {
+
+                       cprintf("200 OK %s\n", internet_addr);
+                       lprintf(CTDL_INFO, "sending 200 OK for the room %s\n", rcpt->display_recp);
+               }
+               else 
+               {
+                       cprintf("500 REJECT noone here by that name.\n");
+                       
+                       lprintf(CTDL_INFO, "sending 500 REJECT noone here by that name: %s\n", internet_addr);
+               }
+               if (rcpt != NULL) free (rcpt);
+       }
+///    CC->kill_me = 1;
+}
+
+void check_get_greeting(void) {
+/* dummy function, we have no greeting in this verry simple protocol. */
+}
+
 
 /*
  * We don't know if the Contacts room exists so we just create it at login
@@ -1009,7 +1059,7 @@ void store_this_ha(struct addresses_to_be_filed *aptr) {
 
        /* First remove any addresses we already have in the address book */
        usergoto(aptr->roomname, 0, 0, NULL, NULL);
-       CtdlForEachMessage(MSGS_ALL, 0, "text/x-vcard", NULL,
+       CtdlForEachMessage(MSGS_ALL, 0, NULL, "text/x-vcard", NULL,
                strip_addresses_already_have, aptr->collected_addresses);
 
        if (strlen(aptr->collected_addresses) > 0)
@@ -1142,3 +1192,14 @@ char *serv_vcard_init(void)
 
        return "$Id$";
 }
+
+
+char *serv_postfix_tcpdict(void)
+{
+       CtdlRegisterServiceHook(config.c_pftcpdict_port,        /* Postfix */
+                               NULL,
+                               check_get_greeting,
+                               check_get,
+                               NULL);
+       return "$Id$";
+}