| 54 |
|
* - parv[1] = nickname |
| 55 |
|
* - parv[2] = TS |
| 56 |
|
* - parv[3] = mode |
| 57 |
< |
* - parv[4] = optional argument (services id) |
| 57 |
> |
* - parv[4] = optional argument (services id, hostname) |
| 58 |
|
*/ |
| 59 |
|
static void |
| 60 |
|
ms_svsmode(struct Client *client_p, struct Client *source_p, |
| 63 |
|
struct Client *target_p = NULL; |
| 64 |
|
const char *m = NULL, *extarg = NULL; |
| 65 |
|
int what = MODE_ADD; |
| 66 |
< |
unsigned int flag = 0, setmodes = 0; |
| 66 |
> |
unsigned int flag = 0, setflags = 0; |
| 67 |
|
time_t ts = 0; |
| 68 |
|
|
| 69 |
|
if (!HasFlag(source_p, FLAGS_SERVICE)) |
| 78 |
|
if (parc > 4 && !EmptyString(parv[4])) |
| 79 |
|
extarg = parv[4]; |
| 80 |
|
|
| 81 |
< |
setmodes = target_p->umodes; |
| 81 |
> |
setflags = target_p->umodes; |
| 82 |
|
|
| 83 |
|
for (m = parv[3]; *m; ++m) |
| 84 |
|
{ |
| 96 |
|
strlcpy(target_p->svid, extarg, sizeof(target_p->svid)); |
| 97 |
|
break; |
| 98 |
|
|
| 99 |
+ |
case 'x': |
| 100 |
+ |
if (what == MODE_ADD && extarg) |
| 101 |
+ |
user_set_hostmask(target_p, extarg); |
| 102 |
+ |
break; |
| 103 |
+ |
|
| 104 |
|
case 'o': |
| 105 |
|
if (what == MODE_DEL && HasUMode(target_p, UMODE_OPER)) |
| 106 |
|
{ |
| 144 |
|
break; |
| 145 |
|
default: |
| 146 |
|
if ((flag = user_modes[(unsigned char)*m])) |
| 147 |
< |
execute_callback(umode_cb, client_p, target_p, what, flag); |
| 147 |
> |
{ |
| 148 |
> |
if (what == MODE_ADD) |
| 149 |
> |
AddUMode(target_p, flag); |
| 150 |
> |
else |
| 151 |
> |
DelUMode(target_p, flag); |
| 152 |
> |
} |
| 153 |
> |
|
| 154 |
|
break; |
| 155 |
|
} |
| 156 |
|
} |
| 174 |
|
target_p->name, (unsigned long)target_p->tsinfo, parv[3]); |
| 175 |
|
} |
| 176 |
|
|
| 177 |
< |
if (MyConnect(target_p) && (setmodes != target_p->umodes)) |
| 177 |
> |
if (MyConnect(target_p) && (setflags != target_p->umodes)) |
| 178 |
|
{ |
| 179 |
|
char modebuf[IRCD_BUFSIZE]; |
| 180 |
|
|
| 181 |
< |
send_umode(target_p, target_p, setmodes, 0xffffffff, modebuf); |
| 181 |
> |
send_umode(target_p, target_p, setflags, 0xffffffff, modebuf); |
| 182 |
|
} |
| 183 |
|
} |
| 184 |
|
|