Previous patch

Home

Next patch

./src/common.h

Patch: Additional logging in NTP

+/***************************************
+    This is part of frox: A simple transparent FTP proxy
+    Copyright (C) 2000 James Hollingshead
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    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, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+    common.h -- miscellaneous definitions.
+          
+***************************************/
+
+#ifndef COMMON_H
+#define COMMON_H    /*+ To stop multiple inclusions. + */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <sys/types.h>
+
+#ifndef HAVE_U_INT16_T
+typedef unsigned short u_int16_t;
+#endif
+#ifndef HAVE_U_INT32_T
+typedef unsigned long u_int32_t;
+#endif
+
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#elif HAVE_STRINGS_H
+# include <strings.h>
+#endif /* STDC_HEADERS */
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <errno.h>
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif  /* HAVE_SYS_TIME_H */
+#endif /* TIME_WITH_SYS_TIME */
+
+#include "sstr.h"
+
+/* Defines */
+#ifdef DEBUG
+#define debug(S) fprintf(stderr,S)
+#define debug2(S,T) fprintf(stderr,S,T)
+#else
+#define debug(S)
+#define debug2(S,T)
+#endif
+
+#define debug_err(S)  fprintf(stderr, "ERROR: \"%s\" at line %d of %s\n", S, \
+                      __LINE__, __FILE__);
+#define debug_perr(S) fprintf(stderr, \
+                      "ERROR: \"%s: %s\" at line %d of %s\n", S, \
+                      strerror(errno), __LINE__, __FILE__);
+
+#define TRUE 1
+#define FALSE 0
+
+#define DM    242
+#define IP    244
+#define WILL  251
+#define WONT  252
+#define DO    253
+#define DONT  254
+#define IAC   255
+
+#define BUF_LEN 4096
+#define DATA_BUF_LEN 65536
+#define MAX_LINE_LEN 256  /* For control connections */
+
+#define GET_CLNT 1
+#define GET_SRVR 2
+#define GET_BOTH 3
+
+/*Log levels */
+#define VERBOSE 25
+#define INFO    20    /* Who connects, etc. */
+#define IMPORT  15    /* Startup messages as well. */
+#define ERROR   10    /* Non critical errors */
+#define ATTACK   5    /* Suspicious stuff */
+
+#define CACHE_CMDS 0
+#define FTP_CMDS 1
+#define NUM_CMD_ARRAYS 2
+
+typedef enum _socketuse {
+  ACTV,
+  PASV,
+  CTRL
+} socketuse;
+
+/* Details of a file transfer - for logging purposes only at
+ * the moment */
+
+typedef struct _connection {
+  struct sockaddr_in address;
+  int fd;
+
+  sstr *buf;
+} connection;
+
+/* Confusingly there are three different addresses for the server
+ * stored here.
+ *
+ * apparent_server_address is the address that the client believes it
+ * is connected to, and is used to initiate transparent data
+ * connections to the client. For a client using NTP this will
+ * generally be the address of frox.
+ *
+ * The one in server_control is the address that frox physically
+ * connects to, and from which it expects to receive the data
+ * connection if "SameAddress" is set. This may be different from above
+ * if frox is connecting via another proxy ("FTPProxy" is set), or if
+ * a ccp script has redirected frox.
+ * 
+ * final_server_address is the address of the ftp server we are
+ * downloading from. It is used for caching and to send a modified
+ * user command to an intermediary proxy. */
+
+typedef struct _session_info {
+  connection client_control;
+  connection server_control;
+  connection client_data;
+  connection server_data;
+  sstr *server_name;
+
+  sstr *last_command;  /*Added to support APConv */
+  sstr *username, *passwd;
+
+  struct sockaddr_in apparent_server_address;
+  struct sockaddr_in final_server_address;
+
+  enum { ACTIVE, PASSIVE, APCONV, PACONV } mode;
+  enum { UPLOAD, DOWNLOAD, NEITHER } state;
+  enum { SUPPRESSED, FAKED, AWAITED, DONE } greeting;  /*220 greeting */
+  sstr *greetingmsg;
+  int server_listen;  /*fd we are listening on */
+  int client_listen;
+
+  struct cmd_struct *cmd_arrays[NUM_CMD_ARRAYS];
+
+/*Details related to the current transfer. Mainly for logging*/
+  int needs_logging;
+  sstr *strictpath;  /*URI style path, built from cwd commands */
+  sstr *filename;
+
+  int virus;    /* -1=not checked, 0=clear, 1=infected */
+  int cached;    /* 0=cache miss, 1=cache hit */
+  int upload;
+  int anonymous;
+  void *ssl_sc, *ssl_sd;  /*SSL handles for server control and data */
+
+} session_info;
+
+#include "configs.h"
+#include "misc.h"
+
+/*******************
+**Global Variables**
+********************/
+session_info *info;
+extern pid_t cmgrpid, tdatapid;
+
+#endif /* COMMON_H */
+-