Merge remote branch 'upstream/master'
authorroot <root@localhost>
Thu, 2 Feb 2012 21:44:45 +0000 (22:44 +0100)
committerroot <root@localhost>
Thu, 2 Feb 2012 21:44:45 +0000 (22:44 +0100)
Conflicts:
src/proto-p10.c

1  2 
configure.in
src/proto-bahamut.c
src/proto-common.c
src/proto-p10.c
src/proto.h

diff --cc configure.in
Simple merge
Simple merge
Simple merge
diff --cc src/proto-p10.c
index c48d21b45125fc6431c1d3413e7b1c2f3c3c60f3,71f6d3766acd5f2ef97de6a6f155b5d1ec31038a..d08fb1804fd82c48aaf5a3f9ffcd624d1a48d05a
@@@ -1723,105 -1678,16 +1735,115 @@@ static CMD_FUNC(cmd_time
      return 1;
  }
  
 +static CMD_FUNC(cmd_relay)
 +{
 +    struct server *sNode;
 +    unsigned int len;
 +    char buf[3];
 +    //<sender> RELAY <destination> <command>
 +    len = strlen(argv[1]);
 +    buf[2] = 0;
 +    switch(len) {
 +        case 2:
 +            sNode = GetServerN(argv[1]);
 +            break;
 +        case 5:
 +            buf[0] = argv[1][0];
 +            buf[1] = argv[1][1];
 +            sNode = GetServerN(buf);
 +            break;
 +        case 6:
 +            buf[0] = argv[1][1];
 +            buf[1] = argv[1][2];
 +            sNode = GetServerN(buf);
 +            break;
 +        default:
 +            /* Invalid destination. Ignore. */
 +            return 0;
 +    }
 +    if(sNode->numeric == self->numeric) {
 +        //ok  someone relayed something to us!
 +        if(strcmp("LQ", argv[2]) == 0) {
 +            //oooh thats exciting - we've got a LOC Query! :D
 +            //LQ !ABADE pk910 80.153.5.212 server.zoelle1.de ~watchcat :test
 +            //ok  let's check the login datas
 +            struct handle_info *hi;
 +            char tmp[MAXLEN], tmp2[MAXLEN];
 +            sprintf(tmp, "%s@%s",argv[7],argv[6]);
 +            sprintf(tmp2, "%s@%s",argv[7],argv[5]);
 +            if((hi = checklogin(argv[4],argv[argc-1],&argv[3][1],tmp,tmp2))) {
 +             //login ok
 +             struct devnull_class *th;
 +             char devnull[512];
 +             if(hi->devnull && (th = devnull_get(hi->devnull))) {
 +                const char *devnull_modes = DEVNULL_MODES;
 +                int ii, flen;
 +                char flags[50];
 +                for (ii=flen=0; devnull_modes[ii]; ++ii)
 +                    if (th->modes & (1 << ii))
 +                        flags[flen++] = devnull_modes[ii];
 +                flags[flen] = 0;
 +                sprintf(devnull, "+%s %s %lu %lu",flags,th->name,th->maxchan,th->maxsendq);
 +             } else {
 +                devnull[0] = 0;
 +             }
 +             if(!HANDLE_FLAGGED(hi, AUTOHIDE)) {
 +                sprintf(tmp,"%s LA %s 0 %s\n",argv[3],hi->handle,devnull);
 +             } else if(getfakehost(argv[4])) {
 +                sprintf(tmp,"%s LA %s %s %s\n",argv[3],hi->handle,getfakehost(argv[4]),devnull);
 +             } else {
 +                extern const char *hidden_host_suffix;
 +                sprintf(tmp,"%s LA %s %s.%s %s\n",argv[3],hi->handle,hi->handle,hidden_host_suffix,devnull);
 +             }
 +             irc_relay(tmp);
 +            } else {
 +             //login rejected
 +             sprintf(tmp,"%s LR\n",argv[3]);
 +             irc_relay(tmp);
 +            }
 +        } else if(strcmp("UC", argv[2]) == 0) {
 +            char tmp[MAXLEN];
 +            sprintf(tmp,"%s UC %s %s",argv[3],argv[3],argv[4]);
 +            irc_relay(tmp);
 +        } else if(strcmp("JA", argv[2]) == 0) {
 +            struct userData *uData;
 +            struct chanNode *cn;
 +            struct userNode *user;
 +            char tmp[MAXLEN];
 +            cn = GetChannel(argv[4]);
 +            if (!cn) return 0;
 +            if (!(user = GetUserN(argv[3]))) return 0;
 +            if(!cn->channel_info) {
 +                //channel not registered
 +                sprintf(tmp,"%s JAA %s %s\n",argv[3],cn->name,argv[6]);
 +            } else if((uData = GetChannelUser(cn->channel_info, user->handle_info))) {
 +                if(uData->access >= atoi(argv[5])) {
 +                    //we can join
 +                    sprintf(tmp,"%s JAA %s %s\n",argv[3],cn->name,argv[6]);
 +                } else {
 +                    //access too low
 +                    sprintf(tmp,"%s JAR %s %i %i\n",argv[3],cn->name,uData->access,uData->access);
 +                }
 +            } else {
 +                //0 access
 +                sprintf(tmp,"%s JAR %s %s %s\n",argv[3],cn->name,"0","0");
 +            }
 +            irc_relay(tmp);
 +        }
 +    }
 +    return 1;
 +}
 +
+ static CMD_FUNC(cmd_xquery)
+ {
+     struct server *source;
+     if ((argc < 4)
+         || !(source = GetServerH(origin)))
+         return 0;
+     call_xquery_funcs(source, argv[2], argv[3]);
+     return 1;
+ }
  void
  free_user(struct userNode *user)
  {
diff --cc src/proto.h
Simple merge