Files
bongo/include/connmgr.h
T
2007-01-22 23:37:12 +00:00

182 lines
7.4 KiB
C

/****************************************************************************
* <Novell-copyright>
* Copyright (c) 2001 Novell, Inc. All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 2 of the GNU General Public License
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, contact Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail, you
* may find current contact information at www.novell.com.
* </Novell-copyright>
****************************************************************************/
#ifndef _BONGO_CONNECTION_MANAGER_H
#define _BONGO_CONNECTION_MANAGER_H
#define CM_HASH_SIZE 128
#define CM_PORT 689 /* Shared with NMAP, since Connection Manager uses UDP */
/*
* Events that require verification
*/
#define CM_EVENT_CONNECT "CONNECT" /* Is this address allowed to connect? */
#define CM_EVENT_RELAY "RELAY" /* Is this address allowed to relay? User will be *
* filled out if a user is allowed to relay. */
/*
* Events that are notifications only
*/
#define CM_EVENT_DISCONNECTED "DISCONNECTED" /* Inform the connection manager of a disconnect */
#define CM_EVENT_AUTHENTICATED "AUTHENTICATED" /* Inform the connection manager that a user has *
* authenticated. detail.user should contain the *
* name of the user. */
#define CM_EVENT_DELIVERED "DELIVERED" /* Inform the connection manager that a message has *
* been delivered. detail.delivered should be *
* filled out. */
#define CM_EVENT_RECEIVED "RECEIVED" /* Inform the connection manager that a message has *
* been received. detail.received should be filled *
* out. */
#define CM_EVENT_VIRUS_FOUND "VIRUS FOUND" /* Inform the connection manager that a virus has *
* been found. detail.virus can be filled out with *
* the recipient count, and an optional name of the *
* virus. */
#define CM_EVENT_SPAM_FOUND "SPAM FOUND" /* Inform the connection manager that a spam *
* message has been found. detail.spam can be *
* filled to show the recipient count. */
#define CM_EVENT_DOS_DETECTED "DOS DETECTED" /* Inform the connection manager that a DOS attack *
* has been detected. detail.dos.description can *
* be given. */
typedef struct _ConnMgrCommand {
unsigned char pass[32 + 1]; /* If left out, or incorrect the result will provide a salt for authentication. */
unsigned long command; /* The ID of the command. */
unsigned long address; /* The address of the connection. */
unsigned char identity[16 + 1]; /* The identity of the calling agent. */
unsigned char event[16 + 1]; /* A short text description of the event */
union { /* The arguments for the given event. If it is a non standard event use data */
struct {
unsigned char user[MAXEMAILNAMESIZE + 1];
} authenticated;
struct {
unsigned long recipients;
} delivered;
struct {
unsigned long local;
unsigned long invalid;
unsigned long remote;
} received;
struct {
unsigned long recipients;
unsigned char name[256 + 1];
} virus;
struct {
unsigned long recipients;
} spam;
struct {
unsigned char description[256 + 1];
} dos;
unsigned char data[256];
struct {
/* what should the answer default to? should be a CM_RESULT */
unsigned long default_result;
} policy;
} detail;
} ConnMgrCommand;
typedef struct _ConnMgrResult {
unsigned long result;
unsigned char comment[128 + 1];
union {
unsigned char user[MAXEMAILNAMESIZE + 1];
unsigned char salt[256 + 1];
struct {
BOOL requireAuth;
} connect;
} detail;
} ConnMgrResult;
#define CM_COMMAND_VERIFY 1
#define CM_COMMAND_NOTIFY 2
#define CM_RESULT_OK 0
#define CM_RESULT_DENY_TEMPORARY 1
#define CM_RESULT_DENY_PERMANENT 2
#define CM_RESULT_ALLOWED 3
#define CM_RESULT_MUST_AUTH 4
#define CM_RESULT_FIRST_ERROR 100 /* All CM_RESULT errors must be >= CM_RESULT_FIRST_ERROR */
#define CM_RESULT_INVALID_AUTH 100
#define CM_RESULT_UNKNOWN_COMMAND 101
#define CM_RESULT_DBERR 102
#define CM_RESULT_SHUTTING_DOWN 103
#define CM_RESULT_RECEIVER_DISABLED 104
#define CM_RESULT_CONNECTION_LIMIT 105
#define CM_RESULT_NO_MEMORY 106
#define CM_RESULT_UNKNOWN_ERROR 200
/*
Module Callback Results
-----------------------
The result of a module's verify function should be a combination of the following
bits or'ed together. A result of 0 means the module does not care about the
request.
CM_MODULE_ACCEPT - Accept the verify request
CM_MODULE_DENY - Deny the verify request
CM_MODULE_FORCE - Do not allow other modules to change the result
CM_MODULE_PERMANENT - Inform the calling agent that the result is permananent
*/
#define CM_MODULE_ACCEPT (1 << 0)
#define CM_MODULE_DENY (1 << 1)
#define CM_MODULE_FORCE (1 << 2)
#define CM_MODULE_PERMANENT (1 << 3)
typedef BOOL (*CMShutdownFunc)();
typedef BOOL (*CMNotifyFunc)(ConnMgrCommand *command);
typedef int (*CMVerifyFunc)(ConnMgrCommand *command, ConnMgrResult *result);
typedef struct _CMModuleRegistrationStruct {
int priority;
CMShutdownFunc Shutdown;
CMNotifyFunc Notify;
CMVerifyFunc Verify;
} CMModuleRegistrationStruct;
/*
Each module must implement this function, with a name of MODULEInit where
MODULE is the all upper case name of the module.
*/
typedef BOOL (*CMInitFunc)(CMModuleRegistrationStruct *registration, unsigned char *dataDirectory);
#endif /* _BONGO_CONNECTION_MANAGER_H */