X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=ircd%2Fm_user.c;h=2ef132058735e44ffa1a1284f3cd829310c748f7;hb=refs%2Fheads%2Fupstream;hp=babbd34d88641fcc237dec4889994c00feb8a3a1;hpb=f1acbdf96cb8c8094df4aaf8011b20c7332ba2d6;p=ircu2.10.12-pk.git diff --git a/ircd/m_user.c b/ircd/m_user.c index babbd34..2ef1320 100644 --- a/ircd/m_user.c +++ b/ircd/m_user.c @@ -113,7 +113,9 @@ int m_user(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) { char* username; + char* term; const char* info; + unsigned int mode_request; assert(0 != cptr); assert(cptr == sptr); @@ -137,8 +139,31 @@ int m_user(struct Client *cptr, struct Client *sptr, int parc, char *parv[]) else username = "NoUser"; + if ((mode_request = strtoul(parv[2], &term, 10)) != 0 + && term != NULL && *term == '\0') + { + char *invisible[4] = { NULL, NULL, "+i", NULL }; + char *wallops[4] = { NULL, NULL, "+w" , NULL }; + /* These bitmask values are codified in RFC 2812, showing + * ... well, something that is probably best not said. + */ + if (mode_request & 8) + set_user_mode(cptr, sptr, 3, invisible, ALLOWMODES_ANY); + if (mode_request & 4) + set_user_mode(cptr, sptr, 3, wallops, ALLOWMODES_ANY); + } + else if (parv[2][0] == '+') + { + char *user_modes[4]; + user_modes[0] = NULL; + user_modes[1] = NULL; + user_modes[2] = parv[2]; + user_modes[3] = NULL; + set_user_mode(cptr, sptr, 3, user_modes, ALLOWMODES_ANY); + } + info = (EmptyString(parv[4])) ? "No Info" : parv[4]; - return auth_set_user(cli_auth(cptr), username, info); + return auth_set_user(cli_auth(cptr), username, parv[2], parv[3], info); }