Browse Source

* Auth cmds now recognize bind flags correctly
* Added LOGC("cmd")
* Auth msgc_test now links to dcc
* Fixed Auth flag matching


svn: 1025

Bryan Drewery 22 years ago
parent
commit
e19573585f
8 changed files with 102 additions and 69 deletions
  1. 1 0
      src/auth.h
  2. 1 0
      src/dcc.h
  3. 11 2
      src/dccutil.c
  4. 1 0
      src/main.c
  5. 1 3
      src/mod/irc.mod/chan.c
  6. 6 3
      src/mod/irc.mod/irc.c
  7. 77 58
      src/mod/irc.mod/msgcmds.c
  8. 4 3
      src/mod/server.mod/servmsg.c

+ 1 - 0
src/auth.h

@@ -14,6 +14,7 @@ struct auth_t {
   char hash[MD5_HASH_LENGTH + 1];       /* used for dcc authing */
   char hash[MD5_HASH_LENGTH + 1];       /* used for dcc authing */
 #    endif                      /* S_AUTHHASH */
 #    endif                      /* S_AUTHHASH */
   char nick[NICKLEN];
   char nick[NICKLEN];
+  char hand[NICKLEN];
   char host[UHOSTLEN];
   char host[UHOSTLEN];
 };
 };
 #  endif
 #  endif

+ 1 - 0
src/dcc.h

@@ -51,6 +51,7 @@ struct dcc_t {
                                    machines sane                         */
                                    machines sane                         */
   int ssl;                      /* use ssl on this dcc? */
   int ssl;                      /* use ssl on this dcc? */
   int simul;                    /* this will hold the idx on the remote bot to return result. */
   int simul;                    /* this will hold the idx on the remote bot to return result. */
+  int msgc;			/* forward the output back to irc? */
   port_t port;
   port_t port;
 #ifdef USE_IPV6
 #ifdef USE_IPV6
   char addr6[121];              /* easier.. ipv6 address in regular notation (3ffe:80c0:225::) */
   char addr6[121];              /* easier.. ipv6 address in regular notation (3ffe:80c0:225::) */

+ 11 - 2
src/dccutil.c

@@ -160,8 +160,17 @@ void dprintf(int idx, const char *format, ...)
       strcat(buf, "\n");
       strcat(buf, "\n");
       len = 1001;
       len = 1001;
     }
     }
-    if (dcc[idx].simul > 0) {
+    if (dcc[idx].simul > 0 && !dcc[idx].msgc) {
       bounce_simul(idx, buf);
       bounce_simul(idx, buf);
+    } else if (dcc[idx].msgc > 0) {
+      char *ircbuf = NULL;
+      size_t size = 0;
+      
+      size = strlen(dcc[idx].simulbot) + strlen(buf) + 20;
+      ircbuf = calloc(1, size);
+      egg_snprintf(ircbuf, size, "PRIVMSG %s :%s", dcc[idx].simulbot, buf);
+      tputs(dcc[idx].sock, ircbuf, strlen(ircbuf));
+      free(ircbuf);
     } else {
     } else {
       if (dcc[idx].type && ((long) (dcc[idx].type->output) == 1)) {
       if (dcc[idx].type && ((long) (dcc[idx].type->output) == 1)) {
         char *p = add_cr(buf);
         char *p = add_cr(buf);
@@ -691,7 +700,7 @@ void identd_open()
   identd_hack = 0;
   identd_hack = 0;
   if (i > 0) {
   if (i > 0) {
     idx = new_dcc(&DCC_IDENTD_CONNECT, 0);
     idx = new_dcc(&DCC_IDENTD_CONNECT, 0);
-    if (idx > 0) {
+    if (idx >= 0) {
       egg_timeval_t howlong;
       egg_timeval_t howlong;
 
 
       dcc[idx].addr = iptolong(getmyip());
       dcc[idx].addr = iptolong(getmyip());

+ 1 - 0
src/main.c

@@ -175,6 +175,7 @@ static void check_expired_dcc()
     }
     }
 }
 }
 
 
+/* this also expires irc dcc_cmd auths */
 static void expire_simuls() {
 static void expire_simuls() {
   int idx = 0;
   int idx = 0;
 
 

+ 1 - 3
src/mod/irc.mod/chan.c

@@ -2723,7 +2723,6 @@ static int gotmsg(char *from, char *msg)
     int dolog = 1, botmatch = 0;
     int dolog = 1, botmatch = 0;
 #ifdef S_AUTHCMDS
 #ifdef S_AUTHCMDS
     int i = 0;
     int i = 0;
-    struct userrec *my_u = NULL;
     char *my_msg = NULL, *my_ptr = NULL, *fword = NULL;
     char *my_msg = NULL, *my_ptr = NULL, *fword = NULL;
 #endif /* S_AUTHCMDS */
 #endif /* S_AUTHCMDS */
     /* Check even if we're ignoring the host. (modified by Eule 17.7.99) */
     /* Check even if we're ignoring the host. (modified by Eule 17.7.99) */
@@ -2747,8 +2746,7 @@ static int gotmsg(char *from, char *msg)
       if (i > -1 && auth[i].authed) {
       if (i > -1 && auth[i].authed) {
         if (fword[0] == cmdprefix)
         if (fword[0] == cmdprefix)
           fword++;
           fword++;
-        my_u = auth[i].user;
-        if (check_bind_pubc(fword, nick, uhost, my_u, my_msg, chan->dname)) {
+        if (check_bind_pubc(fword, nick, uhost, auth[i].user, my_msg, chan->dname)) {
           auth[i].atime = now;
           auth[i].atime = now;
           dolog--; 		/* don't log */
           dolog--; 		/* don't log */
         }
         }

+ 6 - 3
src/mod/irc.mod/irc.c

@@ -1267,13 +1267,16 @@ static void check_expired_chanstuff()
 }
 }
 
 
 #ifdef S_AUTHCMDS
 #ifdef S_AUTHCMDS
-static int check_bind_pubc(char *cmd, char *nick, char *from, struct userrec *u, char *args, char *chan)
+static int check_bind_pubc(char *cmd, char *nick, char *from, struct userrec *u, char *args, char *chname)
 {
 {
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
-  int x = check_bind(BT_msgc, cmd, &fr, nick, from, u, args, chan);
+  int x = 0;
+
+  get_user_flagrec(u, &fr, chname);
+  x = check_bind(BT_msgc, cmd, &fr, nick, from, u, chname, args);
 
 
   if (x & BIND_RET_LOG)
   if (x & BIND_RET_LOG)
-    putlog(LOG_CMDS, "*", "(%s!%s) !%s! %s %c%s %s", nick, from, u ? u->handle : "*", chan, cmdprefix, cmd, args);
+    putlog(LOG_CMDS, "*", "(%s!%s) !%s! %s %c%s %s", nick, from, u ? u->handle : "*", chname, cmdprefix, cmd, args);
   if (x & BIND_RET_BREAK) return(1);
   if (x & BIND_RET_BREAK) return(1);
   return(0);
   return(0);
 }
 }

+ 77 - 58
src/mod/irc.mod/msgcmds.c

@@ -5,6 +5,8 @@
  *
  *
  */
  */
 
 
+#include "src/core_binds.h"
+
 #ifdef S_MSGCMDS
 #ifdef S_MSGCMDS
 static int msg_pass(char *nick, char *host, struct userrec *u, char *par)
 static int msg_pass(char *nick, char *host, struct userrec *u, char *par)
 {
 {
@@ -192,7 +194,6 @@ static int msg_invite(char *nick, char *host, struct userrec *u, char *par)
 #endif /* S_MSGCMDS */
 #endif /* S_MSGCMDS */
 
 
 #ifdef S_AUTHCMDS
 #ifdef S_AUTHCMDS
-
 static void reply(char *, struct chanset_t *, char *, ...) __attribute__((format(printf, 3, 4)));
 static void reply(char *, struct chanset_t *, char *, ...) __attribute__((format(printf, 3, 4)));
 
 
 static void reply(char *nick, struct chanset_t *chan, char *format, ...)
 static void reply(char *nick, struct chanset_t *chan, char *format, ...)
@@ -210,6 +211,15 @@ static void reply(char *nick, struct chanset_t *chan, char *format, ...)
     dprintf(DP_HELP, "NOTICE %s :%s", nick, buf);
     dprintf(DP_HELP, "NOTICE %s :%s", nick, buf);
 }
 }
 
 
+static void logc(const char *cmd, char *nick, char *host, char *hand, char *chname, char *par)
+{
+  if (chname && chname[0])
+    putlog(LOG_CMDS, "*", "(%s!%s) !%s! %s %c%s %s", nick, host, hand, chname, cmdprefix, cmd, par ? par : "");
+  else
+    putlog(LOG_CMDS, "*", "(%s!%s) !%s! %c%s %s", nick, host, hand, cmdprefix, cmd, par ? par : "");
+}
+#define LOGC(cmd) logc(cmd, nick, host, u->handle, chname, par)
+
 static int msg_authstart(char *nick, char *host, struct userrec *u, char *par)
 static int msg_authstart(char *nick, char *host, struct userrec *u, char *par)
 {
 {
   int i = 0;
   int i = 0;
@@ -240,8 +250,10 @@ static int msg_authstart(char *nick, char *host, struct userrec *u, char *par)
   auth[i].authed = 0;
   auth[i].authed = 0;
   strcpy(auth[i].nick, nick);
   strcpy(auth[i].nick, nick);
   strcpy(auth[i].host, host);
   strcpy(auth[i].host, host);
-  if (u)
+  if (u) {
     auth[i].user = u;
     auth[i].user = u;
+    strcpy(auth[i].hand, u->handle);
+  }
 
 
   dprintf(DP_HELP, "PRIVMSG %s :auth%s %s\n", nick, u ? "." : "!", conf.bot->nick);
   dprintf(DP_HELP, "PRIVMSG %s :auth%s %s\n", nick, u ? "." : "!", conf.bot->nick);
 
 
@@ -274,6 +286,7 @@ static int msg_auth(char *nick, char *host, struct userrec *u, char *par)
 
 
   if (u_pass_match(u, pass) && !u_pass_match(u, "-")) {
   if (u_pass_match(u, pass) && !u_pass_match(u, "-")) {
       auth[i].user = u;
       auth[i].user = u;
+      strcpy(auth[i].hand, u->handle);
 #ifdef S_AUTHHASH
 #ifdef S_AUTHHASH
       putlog(LOG_CMDS, "*", "(%s!%s) !%s! -AUTH", nick, host, u->handle);
       putlog(LOG_CMDS, "*", "(%s!%s) !%s! -AUTH", nick, host, u->handle);
 
 
@@ -441,29 +454,52 @@ static cmd_t C_msg[] =
 };
 };
 
 
 #ifdef S_AUTHCMDS
 #ifdef S_AUTHCMDS
-/*
-static int msgc_test(char *nick, char *host, struct userrec *u, char *par, char *chname)
+static int msgc_test(char *nick, char *host, struct userrec *u, char *chname, char *par)
 {
 {
-  char *chn, *hand;
-  struct chanset_t *chan;
-  struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
-  struct userrec *user;
-  
-  hand = newsplit(&par);
-  user = get_user_by_handle(userlist, hand);
-  chn = newsplit(&par);
-  chan = findchan_by_dname(chn);
-  get_user_flagrec(user, &fr, chan->dname);
-
-  dprintf(DP_HELP, "PRIVMSG %s :Private-o: %d Private-v: %d canop: %d canvoice: %d deop: %d devoice: %d\n", nick, 
-  private(fr, chan, 1), private(fr, chan, 2), 
-  chk_op(fr, chan), chk_voice(fr, chan), chk_deop(fr, chan), chk_devoice(fr, chan));
-
-  dprintf(DP_HELP, "NOTICE %s :Works :)\n", nick);
-  return 0;
+  char *cmd = NULL;
+  int idx = -1, i = 0, chan = 0;
+
+  LOGC("TEST");
+
+  cmd = newsplit(&par);
+  if (chname)
+    chan++;
+
+  for (i = 0; i < dcc_total; i++) {
+   if (dcc[i].msgc && ((chan && !strcmp(dcc[i].simulbot, chname) && !strcmp(dcc[i].nick, u->handle)) || 
+      (!chan && !strcmp(dcc[i].simulbot, nick)))) {
+     putlog(LOG_MISC, "*", "Simul found old idx for %s/%s: %d", nick, chname, i);
+     dcc[i].simultime = now;
+     idx = i;
+     break;
+   }
+  }
+
+  if (idx < 0) {
+    idx = new_dcc(&DCC_CHAT, sizeof(struct chat_info));
+    dcc[idx].sock = serv;
+    dcc[idx].timeval = now;
+    dcc[idx].msgc = 1;
+    dcc[idx].simultime = now;
+    dcc[idx].simul = 1;
+    dcc[idx].status = STAT_COLOR;
+    strcpy(dcc[idx].simulbot, chname ? chname : nick);
+    dcc[idx].u.chat->con_flags = 0;
+    strcpy(dcc[idx].u.chat->con_chan, chname ? chname : "*");
+    dcc[idx].u.chat->strip_flags = STRIP_ALL;
+    strcpy(dcc[idx].nick, u->handle);
+    strcpy(dcc[idx].host, host);
+    dcc[idx].addr = 0L;
+    dcc[idx].user = u;
+  }
+//  rmspace(par);
+
+  check_bind_dcc(cmd, idx, par);
+
+  return BIND_RET_BREAK;
 }
 }
-*/
-static int msgc_op(char *nick, char *host, struct userrec *u, char *par, char *chname)
+
+static int msgc_op(char *nick, char *host, struct userrec *u, char *chname, char *par)
 {
 {
   struct chanset_t *chan = NULL;
   struct chanset_t *chan = NULL;
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
@@ -476,7 +512,7 @@ static int msgc_op(char *nick, char *host, struct userrec *u, char *par, char *c
       m = ismember(chan, nick);
       m = ismember(chan, nick);
   }
   }
 
 
-  putlog(LOG_CMDS, "*", "(%s!%s) !%s! %s %cOP %s", nick, host, u->handle, chname ? chname : "", cmdprefix, par ? par : "");
+  LOGC("OP");
 
 
   if (par[0] == '-') { /* we have an option! */
   if (par[0] == '-') { /* we have an option! */
     char *tmp = NULL;
     char *tmp = NULL;
@@ -513,7 +549,7 @@ static int msgc_op(char *nick, char *host, struct userrec *u, char *par, char *c
   return BIND_RET_BREAK;
   return BIND_RET_BREAK;
 }
 }
 
 
-static int msgc_voice(char *nick, char *host, struct userrec *u, char *par, char *chname)
+static int msgc_voice(char *nick, char *host, struct userrec *u, char *chname, char *par)
 {
 {
   struct chanset_t *chan = NULL;
   struct chanset_t *chan = NULL;
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
@@ -525,8 +561,7 @@ static int msgc_voice(char *nick, char *host, struct userrec *u, char *par, char
     if (chan) 
     if (chan) 
       m = ismember(chan, nick);
       m = ismember(chan, nick);
   }
   }
-
-  putlog(LOG_CMDS, "*", "(%s!%s) !%s! %s %cVOICE %s", nick, host, u->handle, chname ? chname : "", cmdprefix, par ? par : "");
+  LOGC("VOICE");
 
 
   if (par[0] == '-') { /* we have an option! */
   if (par[0] == '-') { /* we have an option! */
     char *tmp = NULL;
     char *tmp = NULL;
@@ -561,13 +596,13 @@ static int msgc_voice(char *nick, char *host, struct userrec *u, char *par, char
   return BIND_RET_BREAK;
   return BIND_RET_BREAK;
 }
 }
 
 
-static int msgc_channels(char *nick, char *host, struct userrec *u, char *par, char *chname)
+static int msgc_channels(char *nick, char *host, struct userrec *u, char *chname, char *par)
 {
 {
   struct chanset_t *chan = NULL;
   struct chanset_t *chan = NULL;
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
   char list[1024] = "";
   char list[1024] = "";
 
 
-  putlog(LOG_CMDS, "*", "(%s!%s) !%s! %s %cCHANNELS %s", nick, host, u->handle, chname ? chname : "", cmdprefix, par ? par : "");
+  LOGC("CHANNELS");
   for (chan = chanset; chan; chan = chan->next) {
   for (chan = chanset; chan; chan = chan->next) {
     get_user_flagrec(u, &fr, chan->dname);
     get_user_flagrec(u, &fr, chan->dname);
     if (chk_op(fr, chan)) {
     if (chk_op(fr, chan)) {
@@ -586,7 +621,7 @@ static int msgc_channels(char *nick, char *host, struct userrec *u, char *par, c
   return BIND_RET_BREAK;
   return BIND_RET_BREAK;
 }
 }
 
 
-static int msgc_getkey(char *nick, char *host, struct userrec *u, char *par, char *chname)
+static int msgc_getkey(char *nick, char *host, struct userrec *u, char *chname, char *par)
 {
 {
   struct chanset_t *chan = NULL;
   struct chanset_t *chan = NULL;
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
@@ -597,8 +632,7 @@ static int msgc_getkey(char *nick, char *host, struct userrec *u, char *par, cha
   if (!par[0])
   if (!par[0])
     return 0;
     return 0;
 
 
-  putlog(LOG_CMDS, "*", "(%s!%s) !%s! %cGETKEY %s", nick, host, u->handle, cmdprefix, par);
-
+  LOGC("GETKEY");
   chan = findchan_by_dname(par);
   chan = findchan_by_dname(par);
   if (chan && channel_active(chan) && !channel_pending(chan)) {
   if (chan && channel_active(chan) && !channel_pending(chan)) {
     get_user_flagrec(u, &fr, chan->dname);
     get_user_flagrec(u, &fr, chan->dname);
@@ -613,33 +647,19 @@ static int msgc_getkey(char *nick, char *host, struct userrec *u, char *par, cha
   return BIND_RET_BREAK;
   return BIND_RET_BREAK;
 }
 }
 
 
-static int msgc_help(char *nick, char *host, struct userrec *u, char *par, char *chname)
+static int msgc_help(char *nick, char *host, struct userrec *u, char *chname, char *par)
 {
 {
-  bind_entry_t *entry = NULL;
-  bind_table_t *table = NULL;
-  struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
+  LOGC("HELP");
 
 
-  putlog(LOG_CMDS, "*", "(%s!%s) !%s! %cHELP %s", nick, host, u->handle, cmdprefix, par ? par : "");
-
-
-  get_user_flagrec(u, &fr, chname);
-  /* build_flags(flg, &fr, NULL); */
-
-
-  table = bind_table_lookup("msgc");
-  for (entry = table->entries; entry && entry->next; entry = entry->next) {
-  }
-  
-  dprintf(DP_HELP, "NOTICE %s :op invite getkey voice test\n", nick);
+  reply(nick, NULL, "op invite getkey voice test\n");
   return BIND_RET_BREAK;
   return BIND_RET_BREAK;
 }
 }
 
 
-static int msgc_md5(char *nick, char *host, struct userrec *u, char *par, char *chname)
+static int msgc_md5(char *nick, char *host, struct userrec *u, char *chname, char *par)
 {
 {
   struct chanset_t *chan = NULL;
   struct chanset_t *chan = NULL;
 
 
-  putlog(LOG_CMDS, "*", "(%s!%s) !%s! %s %cMD5 %s", nick, host, u->handle, chname ? chname : "", cmdprefix, par ? par : "");
-  
+  LOGC("MD5");
   if (chname && chname[0])
   if (chname && chname[0])
     chan = findchan_by_dname(chname);  
     chan = findchan_by_dname(chname);  
 
 
@@ -647,12 +667,12 @@ static int msgc_md5(char *nick, char *host, struct userrec *u, char *par, char *
   return BIND_RET_BREAK;
   return BIND_RET_BREAK;
 }
 }
 
 
-static int msgc_sha1(char *nick, char *host, struct userrec *u, char *par, char *chname)
+static int msgc_sha1(char *nick, char *host, struct userrec *u, char *chname, char *par)
 {
 {
   struct chanset_t *chan = NULL;
   struct chanset_t *chan = NULL;
 
 
-  putlog(LOG_CMDS, "*", "(%s!%s) !%s! %s %cSHA1 %s", nick, host, u->handle, chname ? chname : "", cmdprefix, par ? par : "");
-  
+  LOGC("SHA1");  
+
   if (chname && chname[0])
   if (chname && chname[0])
     chan = findchan_by_dname(chname);  
     chan = findchan_by_dname(chname);  
 
 
@@ -660,7 +680,7 @@ static int msgc_sha1(char *nick, char *host, struct userrec *u, char *par, char
   return BIND_RET_BREAK;
   return BIND_RET_BREAK;
 }
 }
 
 
-static int msgc_invite(char *nick, char *host, struct userrec *u, char *par, char *chname)
+static int msgc_invite(char *nick, char *host, struct userrec *u, char *chname, char *par)
 {
 {
   struct chanset_t *chan = NULL;
   struct chanset_t *chan = NULL;
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
   struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
@@ -669,8 +689,7 @@ static int msgc_invite(char *nick, char *host, struct userrec *u, char *par, cha
   if (chname && chname[0])
   if (chname && chname[0])
     return 0;
     return 0;
  
  
-  putlog(LOG_CMDS, "*", "(%s!%s) !%s! %cINVITE %s", nick, host, u->handle, cmdprefix, par ? par : "");
-
+  LOGC("INVITE");
   if (par[0] == '-') {
   if (par[0] == '-') {
     char *tmp = NULL;
     char *tmp = NULL;
 
 
@@ -712,7 +731,7 @@ static int msgc_invite(char *nick, char *host, struct userrec *u, char *par, cha
 
 
 static cmd_t C_msgc[] =
 static cmd_t C_msgc[] =
 {
 {
-/*  {"test",		"a",	(Function) msgc_test,		NULL}, */
+  {"test",		"a",	(Function) msgc_test,		NULL},
   {"channels",		"",	(Function) msgc_channels,	NULL},
   {"channels",		"",	(Function) msgc_channels,	NULL},
   {"getkey",		"",	(Function) msgc_getkey,		NULL},
   {"getkey",		"",	(Function) msgc_getkey,		NULL},
   {"help",		"",	(Function) msgc_help,		NULL},
   {"help",		"",	(Function) msgc_help,		NULL},

+ 4 - 3
src/mod/server.mod/servmsg.c

@@ -119,10 +119,11 @@ static void check_bind_msg(char *cmd, char *nick, char *uhost, struct userrec *u
 #ifdef S_AUTHCMDS
 #ifdef S_AUTHCMDS
 static int check_bind_msgc(char *cmd, char *nick, char *from, struct userrec *u, char *args)
 static int check_bind_msgc(char *cmd, char *nick, char *from, struct userrec *u, char *args)
 {
 {
-  struct flag_record fr = {FR_GLOBAL | FR_CHAN, 0, 0};
-  int x;
+  struct flag_record fr = {FR_GLOBAL | FR_CHAN | FR_ANYWH, 0, 0};
+  int x = 0;
 
 
-  x = check_bind(BT_msgc, cmd, &fr, nick, from, u, args, NULL);
+  get_user_flagrec(u, &fr, NULL);
+  x = check_bind(BT_msgc, cmd, &fr, nick, from, u, NULL, args);
 
 
   if (x & BIND_RET_LOG)
   if (x & BIND_RET_LOG)
     putlog(LOG_CMDS, "*", "(%s!%s) !%s! %c%s %s", nick, from, u ? u->handle : "*", cmdprefix, cmd, args);
     putlog(LOG_CMDS, "*", "(%s!%s) !%s! %c%s %s", nick, from, u ? u->handle : "*", cmdprefix, cmd, args);