#include "snprintf.h"
#endif
-struct LogFunctionHook *LogHookTable = NULL;
struct CleanupFunctionHook *CleanupHookTable = NULL;
struct SessionFunctionHook *SessionHookTable = NULL;
struct UserFunctionHook *UserHookTable = NULL;
struct NetprocFunctionHook *NetprocHookTable = NULL;
struct DeleteFunctionHook *DeleteHookTable = NULL;
struct ServiceFunctionHook *ServiceHookTable = NULL;
+struct FixedOutputHook *FixedOutputTable = NULL;
struct ProtoFunctionHook {
void (*handler) (char *cmdbuf);
void initialize_server_extensions(void)
{
- serv_bio_init();
- serv_calendar_init();
- serv_ldap_init();
- serv_chat_init();
- serv_expire_init();
- serv_imap_init();
- serv_inetcfg_init();
- serv_listsub_init();
- serv_mrtg_init();
- serv_netfilter_init();
- serv_network_init();
- serv_newuser_init();
- serv_pas2_init();
- serv_pop3_init();
- serv_rwho_init();
- serv_smtp_init();
- serv_spam_init();
- /* serv_test_init(); */
- serv_upgrade_init();
- serv_vandelay_init();
- serv_vcard_init();
+ lprintf(CTDL_INFO, "%s\n", serv_bio_init());
+ lprintf(CTDL_INFO, "%s\n", serv_calendar_init());
+ lprintf(CTDL_INFO, "%s\n", serv_notes_init());
+ lprintf(CTDL_INFO, "%s\n", serv_ldap_init());
+ lprintf(CTDL_INFO, "%s\n", serv_chat_init());
+ lprintf(CTDL_INFO, "%s\n", serv_expire_init());
+ lprintf(CTDL_INFO, "%s\n", serv_imap_init());
+ lprintf(CTDL_INFO, "%s\n", serv_upgrade_init());
+ lprintf(CTDL_INFO, "%s\n", serv_inetcfg_init());
+ lprintf(CTDL_INFO, "%s\n", serv_listsub_init());
+ lprintf(CTDL_INFO, "%s\n", serv_mrtg_init());
+ lprintf(CTDL_INFO, "%s\n", serv_netfilter_init());
+ lprintf(CTDL_INFO, "%s\n", serv_network_init());
+ lprintf(CTDL_INFO, "%s\n", serv_newuser_init());
+ lprintf(CTDL_INFO, "%s\n", serv_pas2_init());
+ lprintf(CTDL_INFO, "%s\n", serv_pop3_init());
+ lprintf(CTDL_INFO, "%s\n", serv_rwho_init());
+ lprintf(CTDL_INFO, "%s\n", serv_smtp_init());
+ lprintf(CTDL_INFO, "%s\n", serv_spam_init());
+ /* lprintf(CTDL_INFO, "%s\n", serv_test_init()); */
+ lprintf(CTDL_INFO, "%s\n", serv_vandelay_init());
+ lprintf(CTDL_INFO, "%s\n", serv_vcard_init());
+ lprintf(CTDL_INFO, "%s\n", serv_fulltext_init());
+ lprintf(CTDL_INFO, "%s\n", serv_autocompletion_init());
+ lprintf(CTDL_INFO, "%s\n", serv_postfix_tcpdict());
+ lprintf(CTDL_INFO, "%s\n", serv_managesieve_init());
}
-void CtdlRegisterLogHook(void (*fcn_ptr) (char *), int loglevel)
-{
-
- struct LogFunctionHook *newfcn;
-
- newfcn = (struct LogFunctionHook *)
- malloc(sizeof(struct LogFunctionHook));
- newfcn->next = LogHookTable;
- newfcn->h_function_pointer = fcn_ptr;
- newfcn->loglevel = loglevel;
- LogHookTable = newfcn;
-
- lprintf(CTDL_INFO, "Registered a new logging function\n");
-}
-
-
-void CtdlUnregisterLogHook(void (*fcn_ptr) (char *), int loglevel)
-{
- struct LogFunctionHook *cur, *p;
-
- for (cur = LogHookTable; cur != NULL; cur = cur->next) {
- /* This will also remove duplicates if any */
- while (cur != NULL &&
- fcn_ptr == cur->h_function_pointer &&
- loglevel == cur->loglevel) {
- lprintf(CTDL_INFO, "Unregistered logging function\n");
- p = cur->next;
- if (cur == LogHookTable) {
- LogHookTable = p;
- }
- free(cur);
- cur = p;
- }
- }
-}
-
-
void CtdlRegisterCleanupHook(void (*fcn_ptr) (void))
{
}
+
+
+void CtdlRegisterFixedOutputHook(char *content_type, void (*handler)(char *, int) )
+{
+ struct FixedOutputHook *newfcn;
+
+ newfcn = (struct FixedOutputHook *)
+ malloc(sizeof(struct FixedOutputHook));
+ newfcn->next = FixedOutputTable;
+ newfcn->h_function_pointer = handler;
+ safestrncpy(newfcn->content_type, content_type, sizeof newfcn->content_type);
+ FixedOutputTable = newfcn;
+
+ lprintf(CTDL_INFO, "Registered a new fixed output function for %s\n", newfcn->content_type);
+}
+
+
+void CtdlUnregisterFixedOutputHook(char *content_type)
+{
+ struct FixedOutputHook *cur, *p;
+
+ for (cur = FixedOutputTable; cur != NULL; cur = cur->next) {
+ /* This will also remove duplicates if any */
+ while (cur != NULL && (!strcasecmp(content_type, cur->content_type))) {
+ lprintf(CTDL_INFO, "Unregistered fixed output function for %s\n", content_type);
+ p = cur->next;
+ if (cur == FixedOutputTable) {
+ FixedOutputTable = p;
+ }
+ free(cur);
+ cur = p;
+ }
+ }
+}
+
+/* returns nonzero if we found a hook and used it */
+int PerformFixedOutputHooks(char *content_type, char *content, int content_length)
+{
+ struct FixedOutputHook *fcn;
+
+ for (fcn = FixedOutputTable; fcn != NULL; fcn = fcn->next) {
+ if (!strcasecmp(content_type, fcn->content_type)) {
+ (*fcn->h_function_pointer) (content, content_length);
+ return(1);
+ }
+ }
+ return(0);
+}
+
+
+
+
+
void CtdlRegisterXmsgHook(int (*fcn_ptr) (char *, char *, char *), int order)
{
return;
}
else {
- newfcn->msock = ig_tcp_server(NULL, tcp_port,
+ newfcn->msock = ig_tcp_server(config.c_ip_addr,
+ tcp_port,
config.c_maxsessions);
snprintf(message, sizeof message, "TCP port %d: ", tcp_port);
}
}
}
-void PerformLogHooks(int loglevel, char *logmsg)
-{
- struct LogFunctionHook *fcn;
-
- for (fcn = LogHookTable; fcn != NULL; fcn = fcn->next) {
- if (fcn->loglevel >= loglevel) {
- (*fcn->h_function_pointer) (logmsg);
- }
- }
-}
-
void PerformUserHooks(struct ctdluser *usbuf, int EventType)
{
struct UserFunctionHook *fcn;
+
+
int PerformXmsgHooks(char *sender, char *recp, char *msg)
{
struct XmsgFunctionHook *fcn;