openbsd-ports/net/tircproxy/patches/patch-aa
brad a5843cd140 add tircproxy port; garath@ntplx.net
-
Transparent IRC proxy. Supports DCC CHAT, SEND, RESEND, and TSEND.
1999-06-21 00:33:58 +00:00

279 lines
7.8 KiB
Plaintext

--- tircproxy.c.orig Wed Dec 30 20:23:13 1998
+++ tircproxy.c Sun Jun 20 20:15:26 1999
@@ -107,7 +107,7 @@
# include <net/if.h>
# include <netinet/in_systm.h>
# include <netinet/tcp.h>
-# include <netinet/ip_compat.h>
+# include <netinet/ip_fil_compat.h>
# include <netinet/ip_fil.h>
# include <netinet/ip_proxy.h>
# include <netinet/ip_nat.h>
@@ -164,7 +164,7 @@
/* Macros & definitions.
*/
#define FD_MAX(a,b) ((a) > (b) ? (a) : (b))
-#define MIN 60
+#define MINUTE 60
#define DEBUG_FEATURES 1
#define DEBUG_BASIC 2
@@ -227,8 +227,8 @@
/* These make useful global variables..
*/
-char user_nick[LENGTH_NICKNAME * 2], user_name[512], alarm_in[64];
-char user_ident_file[64];
+char user_nick[LENGTH_NICKNAME * 2], user_name[MAXLOGNAME], alarm_in[64];
+char user_ident_file[PATH_MAX];
char server_tag[50];
ipaddr_t clients_ip = INADDR_NONE;
char clients_ip_s[64];
@@ -256,7 +256,7 @@
char **from_cli_last = NULL;
char *to_cli_first = NULL;
char **to_cli_last = NULL;
-char quizfile[64], quiz[512];
+char quizfile[PATH_MAX], quiz[512];
int use_unix_passwd = QUIZ_OFF;
int use_quiz_mode = QUIZ_OFF;
#endif
@@ -353,7 +353,7 @@
case 'q':
#ifdef QUIZ_MODE
use_quiz_mode = QUIZ_ON;
- sprintf(quizfile, "%.63s", optarg);
+ snprintf(quizfile, sizeof(quizfile), "%.63s", optarg);
#else
usage(argv[0],"Feature QUIZ_MODE not active.");
#endif
@@ -482,9 +482,9 @@
** loops, while allowing proxy-to-proxy operation.
*/
{
- char hostname[128];
- gethostname(hostname, 127);
- sprintf(server_tag,"X-tircproxy[%d/%.10s]\n",
+ char hostname[MAXHOSTNAMELEN];
+ gethostname(hostname, sizeof(hostname));
+ snprintf(server_tag, sizeof(server_tag), "X-tircproxy[%d/%.10s]\n",
getpid(), hostname );
}
@@ -1027,13 +1027,9 @@
/* Give this thing 10 minutes to get started (paranoia).
*/
signal(SIGALRM, alarm_signal);
- alarm(10*MIN);
+ alarm(10*MINUTE);
strcpy(alarm_in, "trans_proxy");
- /* Check who the client is, and drop root privs if we have them.
- */
- change_uid(from_addr);
-
#ifdef TCP_WRAPPERS
if (use_tcp_wrappers)
{
@@ -1132,6 +1128,10 @@
to_addr.sin_addr.s_addr = server_ip;
}
+ /* Check who the client is, and drop root privs if we have them.
+ */
+ change_uid(from_addr);
+
signal(SIGHUP, hup_signal);
debug_msg(0, LOG_DEBUG,
@@ -1171,7 +1171,7 @@
/* Allow 3 minutes for things to get properly started.
*/
signal(SIGALRM, alarm_signal);
- alarm(3*MIN);
+ alarm(3*MINUTE);
strcpy(alarm_in, "copy_loop: starting");
/* Lookup an ASCII representation of the host's IP address.
@@ -1268,7 +1268,7 @@
/* Allow 30 minutes for the loop to complete.
*/
signal(SIGALRM, alarm_signal);
- alarm(30*MIN);
+ alarm(30*MINUTE);
strcpy(alarm_in, "copy_loop: waiting");
#ifdef DEBUG
debug_msg(DEBUG_TRIVIA, LOG_DEBUG,"copy_loop: waiting");
@@ -1573,7 +1573,7 @@
{
if (!allow_dcc_chat)
#ifdef DISALLOW_DCC_CHAT
- sprintf(replace,
+ snprintf(replace, sizeof(replace),
DISALLOW_DCC_CHAT,
type, arg_1);
#else
@@ -1587,7 +1587,7 @@
{
if (!allow_dcc_send)
#ifdef DISALLOW_DCC_SEND
- sprintf(replace,
+ snprintf(replace, sizeof(replace),
DISALLOW_DCC_SEND,
type, arg_1);
#else
@@ -1595,7 +1595,7 @@
#endif
else if (!dcc_mangle_filename(arg_1))
#ifdef MANGLE_DCC_SEND
- sprintf(replace,
+ snprintf(replace, sizeof(replace),
MANGLE_DCC_SEND,
type, arg_1);
#else
@@ -1604,7 +1604,7 @@
}
else if (!strcasecmp(type, "RESUME"))
{
- sprintf(replace,
+ snprintf(replace, sizeof(replace),
"%cDCC %s %s %d %d%s%c",
CTRL_A,
type, arg_1,
@@ -1613,7 +1613,7 @@
}
else if (!strcasecmp(type, "ACCEPT"))
{
- sprintf(replace,
+ snprintf(replace, sizeof(replace),
"%cDCC %s %s %d %d%s%c",
CTRL_A,
type, arg_1,
@@ -1624,7 +1624,7 @@
*/
else if (!allow_dcc_unknown)
#ifdef DISALLOW_DCC_SEND
- sprintf(replace,
+ snprintf(replace, sizeof(replace),
DISALLOW_DCC_FUNK,
type, arg_1);
#else
@@ -1636,7 +1636,7 @@
/* No replacement has been set, so
** proxy this connection. :-)
*/
- sprintf(replace,
+ snprintf(replace, sizeof(replace),
"%c%s %s %s %s%s%c",
CTRL_A, ctcp_type,
type, arg_1,
@@ -1730,7 +1730,7 @@
else if (!strncasecmp(line, "USER", 4))
{
int cip = ANON_USERID;
- sprintf(line, "USER t%x anon anon :%s\n", cip, ANON_IRCNAME);
+ snprintf(line, sizeof(line), "USER t%x anon anon :%s\n", cip, ANON_IRCNAME);
}
}
else if (!strncasecmp(line, "NOTICE", 6)) /* Fix mIRC junk */
@@ -1782,9 +1782,9 @@
*/
case 1: quiz_delay_line(line, QUIZ_S);
fuid = getpid() * visible_ip_o;
- sprintf(user_nick, "}%x", fuid);
- sprintf(line, "NICK :%s\n", user_nick);
- sprintf(out, ":%.32s %.256s", r, line);
+ snprintf(user_nick, sizeof(user_nick), "}%x", fuid);
+ snprintf(line, sizeof(line), "NICK :%s\n", user_nick);
+ snprintf(out, sizeof(out), ":%.32s %.256s", r, line);
quiz_delay_line(out, QUIZ_C);
quiz_greet();
@@ -2007,7 +2007,7 @@
sprintf(retvalue,"%lu %u",
(unsigned long int) ntohl(vip), ntohs(to_addr.sin_port));
#else
- sprintf(retvalue,"%u %u",
+ snprintf(retvalue, sizeof(retvalue), "%u %u",
(unsigned int) ntohl(vip), ntohs(to_addr.sin_port));
#endif
return(retvalue);
@@ -2016,7 +2016,7 @@
/* Give people five minutes to accept the call..
*/
signal(SIGALRM, alarm_signal);
- alarm(5*MIN);
+ alarm(5*MINUTE);
strcpy(alarm_in,"proxy_dcc: accept");
/* No silly broadcasts shall mess up our DCC stuff!
@@ -2075,17 +2075,17 @@
#ifdef IP_TO_UID_PREFIX
int fd;
int tries;
- char ipfile[512];
+ char ipfile[PATH_MAX];
char *cp;
struct passwd *pw;
#ifdef CDIR
if (use_cdir)
- sprintf(ipfile, "%s%s-%s", CDIR, CDIR_MAP,
+ snprintf(ipfile, sizeof(ipfile), "%s%s-%s", CDIR, CDIR_MAP,
inet_ntoa(addr->sin_addr));
else
#endif
- sprintf(ipfile, "%s%s", IP_TO_UID_PREFIX,
+ snprintf(ipfile, sizeof(ipfile), "%s%s", IP_TO_UID_PREFIX,
inet_ntoa(addr->sin_addr));
/* Repeat until whe lose the ident race.. :-)
@@ -2154,7 +2154,7 @@
*/
if ((!*user_name) && (!use_anonymity)) return;
- sprintf(user_ident_file, "%s%s:%d-%s:%d", CDIR, CDIR_IDENT,
+ snprintf(user_ident_file, sizeof(user_ident_file), "%s%s:%d-%s:%d", CDIR, CDIR_IDENT,
ntohs(us->sin_port),
inet_ntoa(them->sin_addr),
ntohs(them->sin_port));
@@ -2172,7 +2172,7 @@
{
int cip = ANON_USERID;
- sprintf(fakeid, "t%x", cip);
+ snprintf(fakeid, sizeof(fakeid), "t%x", cip);
debug_msg(0, LOG_INFO, "Anonymized connection as %s", fakeid);
u = fakeid;
@@ -2451,7 +2451,7 @@
{
char out[512];
- sprintf(out,":%.32s!irc@proxy PRIVMSG %.32s :%.256s\n",
+ snprintf(out, sizeof(out), ":%.32s!irc@proxy PRIVMSG %.32s :%.256s\n",
QUIZ_NICK, user_nick, message);
quiz_delay_line(out, QUIZ_C);
@@ -2461,8 +2461,8 @@
*/
static void quiz_greet(void)
{
- FILE *fd;
- int i, r;
+ FILE *fd;
+ int i, r, d;
char question[512], buff[512], *p;
if (use_unix_passwd)
@@ -2475,7 +2475,8 @@
srand(time((time_t) NULL));
- if ((fd = fopen(quizfile,"r")) == NULL)
+ d = open(quizfile, O_RDONLY|O_CREAT|O_EXCL, 0400);
+ if ((fd = fdopen(d,"r")) == NULL)
{
debug_msg(0, LOG_DEBUG,
"Error (%.128s) reading quiz-file: %.128s",