mirror of
https://github.com/samhocevar/rinetd.git
synced 2024-12-26 21:00:33 +08:00
c92c0cf4bb
Also fix a possible file descriptor leak when reloading configuration, and ensure we no longer reference freed objects after reloading.
70 lines
1.3 KiB
C
70 lines
1.3 KiB
C
/* Constants */
|
|
|
|
static int const RINETD_BUFFER_SIZE = 16384;
|
|
static int const RINETD_LISTEN_BACKLOG = 128;
|
|
|
|
#define RINETD_CONFIG_FILE "/etc/rinetd.conf"
|
|
#define RINETD_PID_FILE "/var/run/rinetd.pid"
|
|
|
|
/* Program state */
|
|
|
|
enum ruleType {
|
|
allowRule,
|
|
denyRule,
|
|
};
|
|
|
|
typedef struct _rule Rule;
|
|
struct _rule
|
|
{
|
|
char *pattern;
|
|
int type;
|
|
};
|
|
|
|
typedef struct _server_info ServerInfo;
|
|
struct _server_info {
|
|
SOCKET fd;
|
|
|
|
/* In network order, for network purposes */
|
|
struct in_addr localAddr;
|
|
unsigned short localPort;
|
|
|
|
/* In ASCII and local byte order, for logging purposes */
|
|
char *fromHost, *toHost;
|
|
int fromPort, toPort;
|
|
|
|
/* Offset and count into list of allow and deny rules. Any rules
|
|
prior to globalAllowRules and globalDenyRules are global rules. */
|
|
int rulesStart, rulesCount;
|
|
};
|
|
|
|
typedef struct _socket Socket;
|
|
struct _socket
|
|
{
|
|
SOCKET fd;
|
|
/* recv: received on this socket
|
|
sent: sent to this socket from the other buffer */
|
|
int recvPos, sentPos;
|
|
int recvBytes, sentBytes;
|
|
char *buffer;
|
|
};
|
|
|
|
typedef struct _connection_info ConnectionInfo;
|
|
struct _connection_info
|
|
{
|
|
Socket remote, local;
|
|
struct in_addr reAddresses;
|
|
int coClosing;
|
|
int coLog;
|
|
ServerInfo const *server; // only useful for logEvent
|
|
};
|
|
|
|
/* Option parsing */
|
|
|
|
typedef struct _rinetd_options RinetdOptions;
|
|
struct _rinetd_options
|
|
{
|
|
char const *conf_file;
|
|
int foreground;
|
|
};
|
|
|