- char tmp[MAXLEN];
- sprintf(tmp, "*!%s@%s",argv[7],argv[5]);
- if((hi = checklogin(argv[4],argv[argc-1],&argv[3][1],tmp))) {
- //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(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);
+ 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 = 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);