]> jfr.im git - irc/quakenet/snircd.git/blobdiff - ircd/m_account.c
Update my e-mail address.
[irc/quakenet/snircd.git] / ircd / m_account.c
index 07349bb742261d44eec2859cd30a1054f5c99a15..9ceae55dd0a264801169e144f1f0c6cd6ae61c65 100644 (file)
@@ -119,11 +119,27 @@ int ms_account(struct Client* cptr, struct Client* sptr, int parc,
   if (!(acptr = findNUser(parv[1])))
     return 0; /* Ignore ACCOUNT for a user that QUIT; probably crossed */
 
-  if (IsAccount(acptr))
+  if (IsAccount(acptr) && ((parc < 5) || (parc >= 5 && cli_user(acptr)->acc_id)))
     return protocol_violation(cptr, "ACCOUNT for already registered user %s "
                              "(%s -> %s)", cli_name(acptr),
                              cli_user(acptr)->account, parv[2]);
 
+  /* special case for current snircd release only */
+  if (parc >= 5 && cli_user(acptr)->account[0]) {
+    if (strcmp(cli_user(acptr)->account, parv[2])) {
+      return protocol_violation(cptr, "ACCOUNT change for already registered user %s "
+                                "(%s -> %s)", cli_name(acptr),
+                                cli_user(acptr)->account, parv[2]);
+    }
+    cli_user(acptr)->acc_create = atoi(parv[3]);
+    cli_user(acptr)->acc_id = strtoul(parv[4], NULL, 10);      
+    sendcmdto_serv_butone(sptr, CMD_ACCOUNT, cptr, "%C %s %Tu %lu",
+                              acptr, cli_user(acptr)->account,
+                              cli_user(acptr)->acc_create,
+                              cli_user(acptr)->acc_id);
+    return 0;
+  }
+
   assert(0 == cli_user(acptr)->account[0]);
 
   if (strlen(parv[2]) > ACCOUNTLEN)
@@ -137,8 +153,8 @@ int ms_account(struct Client* cptr, struct Client* sptr, int parc,
     Debug((DEBUG_DEBUG, "Received timestamped account: account \"%s\", "
            "timestamp %Tu", parv[2], cli_user(acptr)->acc_create));
     if (parc > 4) {
-      cli_user(acptr)->acc_id = atoi(parv[4]); 
-      Debug((DEBUG_DEBUG, "Received account id for account \"%s\": id %d", parv[2], parv[4]));
+      cli_user(acptr)->acc_id = strtoul(parv[4], NULL, 10); 
+      Debug((DEBUG_DEBUG, "Received account id for account \"%s\": id %lu", parv[2], cli_user(acptr)->acc_id));
     }
   }