Fix SourceForge bug #2816618 (default user modes in connection class do not work).
[ircu2.10.12-pk.git] / ircd / s_user.c
index a2de84f876ed7082fac055601f11ea5edc073f89..97d3517a4b0f2ab3af63ed49755eb9bf72301488 100644 (file)
@@ -392,9 +392,8 @@ int register_user(struct Client *cptr, struct Client *sptr)
     if (tmpstr) {
       char *umodev[] = { NULL, NULL, NULL, NULL };
       umodev[2] = tmpstr;
-      set_user_mode(cptr, sptr, 1, umodev, ALLOWMODES_ANY);
+      set_user_mode(cptr, sptr, 3, umodev, ALLOWMODES_ANY);
     }
-
   }
   else {
     struct Client *acptr = user->server;
@@ -439,10 +438,6 @@ int register_user(struct Client *cptr, struct Client *sptr)
    */
   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. */
@@ -702,10 +697,6 @@ int check_target_limit(struct Client *sptr, void *target, const char *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?
    */
@@ -723,6 +714,10 @@ int check_target_limit(struct Client *sptr, void *target, const char *name,
    */
   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
@@ -1078,7 +1073,7 @@ int set_user_mode(struct Client *cptr, struct Client *sptr, int parc,
          do_host_hiding = 1;
        break;
       case 'r':
-       if (what == MODE_ADD) {
+       if (*(p + 1) && (what == MODE_ADD)) {
          account = *(++p);
          SetAccount(sptr);
        }