tidied up devnull management and prepared functions for coming "dynamic devnull"...
[srvx.git] / src / proto-p10.c
index dc0829d07e9ca6dc8776bf924441e38e0c979fed..91247e251606f974d96be9bbb3755d4de2ed645b 100644 (file)
@@ -1786,41 +1786,41 @@ static CMD_FUNC(cmd_relay)
         //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);
+                //login ok
+                struct devnull_class th = devnull_user_get_class(hi);
+                char devnull[MAXLEN];
+                
+                if(th.modes) {
+                    const char *devnull_modes = DEVNULL_MODES;
+                    int ii, flen = 0;
+                    char flags[50];
+                    for (ii = 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.name : "custom"), (DEVNULL_HAS_PRIV(&th, CHANLIMIT) ? th.maxchan : 0), (DEVNULL_HAS_PRIV(&th, MAXSENDQ) ? th.maxsendq : 0));
+                } 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);
+                //login rejected
+                sprintf(tmp,"%s LR\n",argv[3]);
+                irc_relay(tmp);
             }
         } else if(strcmp("UC", argv[2]) == 0) {
             char tmp[MAXLEN];