Count_unknownbecomesclient(sptr, UserStats);
+ /*
+ * Set user's initial modes
+ */
+ tmpstr = (char*)client_get_default_umode(sptr);
+ if (tmpstr) {
+ char *umodev[] = { NULL, NULL, NULL, NULL };
+ umodev[2] = tmpstr;
+ set_user_mode(cptr, sptr, 3, umodev, ALLOWMODES_ANY);
+ }
+
SetUser(sptr);
cli_handler(sptr) = CLIENT_HANDLER;
SetLocalNumNick(sptr);
cli_info(sptr), NumNick(cptr) /* two %s's */);
IPcheck_connect_succeeded(sptr);
- /*
- * Set user's initial modes
- */
- tmpstr = (char*)client_get_default_umode(sptr);
- if (tmpstr) {
- char *umodev[] = { NULL, NULL, NULL, NULL };
- umodev[2] = tmpstr;
- set_user_mode(cptr, sptr, 1, umodev, ALLOWMODES_ANY);
- }
-
}
else {
struct Client *acptr = user->server;
*/
if (HasHiddenHost(sptr))
hide_hostmask(sptr, FLAG_HIDDENHOST);
+ if (IsInvisible(sptr))
+ ++UserStats.inv_clients;
+ if (IsOper(sptr))
+ ++UserStats.opers;
tmpstr = umode_str(sptr);
/* Send full IP address to IPv6-grokking servers. */
FlagSet(&flags, FLAG_ACCOUNT);
else
FlagClr(&flags, FLAG_ACCOUNT);
+ client_set_privs(sptr, NULL);
send_umode(cptr, sptr, &flags, ALL_UMODES);
if ((cli_snomask(sptr) != SNO_DEFAULT) && HasFlag(sptr, FLAG_SERVNOTICE))
send_reply(sptr, RPL_SNOMASK, cli_snomask(sptr), cli_snomask(sptr));
cli_hopcount(new_client) = atoi(parv[2]);
cli_lastnick(new_client) = atoi(parv[3]);
- client_set_privs(new_client, NULL); /* set privs on user */
/*
* Set new nick name.
*/
assert(cli_local(sptr));
targets = cli_targets(sptr);
- /* If user is invited to channel, give him/her a free target */
- if (IsChannelName(name) && IsInvited(sptr, target))
- return 0;
-
/*
* Same target as last time?
*/
*/
if (!created) {
if (CurrentTime < cli_nexttarget(sptr)) {
+ /* If user is invited to channel, give him/her a free target */
+ if (IsChannelName(name) && IsInvited(sptr, target))
+ return 0;
+
if (cli_nexttarget(sptr) - CurrentTime < TARGET_DELAY + 8) {
/*
* No server flooding
do_host_hiding = 1;
break;
case 'r':
- if (what == MODE_ADD) {
+ if (*(p + 1) && (what == MODE_ADD)) {
account = *(++p);
SetAccount(sptr);
}
{
if ((FlagHas(&setflags, FLAG_OPER) || FlagHas(&setflags, FLAG_LOCOP)) &&
!IsAnOper(sptr))
+ {
det_confs_butmask(sptr, CONF_CLIENT & ~CONF_OPERATOR);
+ client_set_privs(sptr, NULL);
+ }
if (SendServNotice(sptr))
{
* Compare new flags with old flags and send string which
* will cause servers to update correctly.
*/
- if (!FlagHas(&setflags, FLAG_OPER) && IsOper(sptr))
- {
- /* user now oper */
- ++UserStats.opers;
- client_set_privs(sptr, NULL); /* may set propagate privilege */
- }
- /* remember propagate privilege setting */
- if (HasPriv(sptr, PRIV_PROPAGATE))
- prop = 1;
- if (FlagHas(&setflags, FLAG_OPER) && !IsOper(sptr))
- {
- /* user no longer oper */
- assert(UserStats.opers > 0);
- --UserStats.opers;
- client_set_privs(sptr, NULL); /* will clear propagate privilege */
- }
- if (FlagHas(&setflags, FLAG_INVISIBLE) && !IsInvisible(sptr)) {
- assert(UserStats.inv_clients > 0);
- --UserStats.inv_clients;
- }
- if (!FlagHas(&setflags, FLAG_INVISIBLE) && IsInvisible(sptr))
- ++UserStats.inv_clients;
if (!FlagHas(&setflags, FLAG_ACCOUNT) && IsAccount(sptr)) {
int len = ACCOUNTLEN;
char *ts;
}
if (!FlagHas(&setflags, FLAG_HIDDENHOST) && do_host_hiding && allow_modes != ALLOWMODES_DEFAULT)
hide_hostmask(sptr, FLAG_HIDDENHOST);
- if (IsRegistered(sptr))
+
+ if (IsRegistered(sptr)) {
+ if (!FlagHas(&setflags, FLAG_OPER) && IsOper(sptr)) {
+ /* user now oper */
+ ++UserStats.opers;
+ client_set_privs(sptr, NULL); /* may set propagate privilege */
+ }
+ /* remember propagate privilege setting */
+ if (HasPriv(sptr, PRIV_PROPAGATE)) {
+ prop = 1;
+ }
+ if (FlagHas(&setflags, FLAG_OPER) && !IsOper(sptr)) {
+ /* user no longer oper */
+ assert(UserStats.opers > 0);
+ --UserStats.opers;
+ client_set_privs(sptr, NULL); /* will clear propagate privilege */
+ }
+ if (FlagHas(&setflags, FLAG_INVISIBLE) && !IsInvisible(sptr)) {
+ assert(UserStats.inv_clients > 0);
+ --UserStats.inv_clients;
+ }
+ if (!FlagHas(&setflags, FLAG_INVISIBLE) && IsInvisible(sptr)) {
+ ++UserStats.inv_clients;
+ }
+ assert(UserStats.opers <= UserStats.clients + UserStats.unknowns);
+ assert(UserStats.inv_clients <= UserStats.clients + UserStats.unknowns);
send_umode_out(cptr, sptr, &setflags, prop);
+ }
- assert(UserStats.opers <= UserStats.clients + UserStats.unknowns);
- assert(UserStats.inv_clients <= UserStats.clients + UserStats.unknowns);
return 0;
}