diff options
author | Robin Burchell <viroteck@viroteck.net> | 2012-05-28 04:23:29 -0700 |
---|---|---|
committer | Robin Burchell <viroteck@viroteck.net> | 2012-05-28 04:23:29 -0700 |
commit | 20a91b6bc458a9f5c531a93dbe6b8d5083a3fd0d (patch) | |
tree | 301df4396157da0479864bf08f1ec6d48f222b55 /src/server.cpp | |
parent | a441c1b1be087a9974dad211aa3706e1909d6ab3 (diff) | |
parent | e3e7cb89e112bbeed2b3e43798a16fe557a3992a (diff) |
Merge pull request #150 from attilamolnar/insp20+incrementuidfix
[2.0] Fix generating invalid UIDs after current_uid is 000Z99999
Diffstat (limited to 'src/server.cpp')
-rw-r--r-- | src/server.cpp | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/src/server.cpp b/src/server.cpp index dab920bb6..adaaa7d2c 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -101,20 +101,12 @@ void InspIRCd::IncrementUID(int pos) * A again, in an iterative fashion.. so.. * AAA9 -> AABA, and so on. -- w00t */ - if (pos == 3) + if ((pos == 3) && (current_uid[3] == '9')) { // At pos 3, if we hit '9', we've run out of available UIDs, and need to reset to AAA..AAA. - if (current_uid[pos] == '9') + for (int i = 3; i < UUID_LENGTH-1; i++) { - for (int i = 3; i < (UUID_LENGTH - 1); i++) - { - current_uid[i] = 'A'; - } - } - else - { - // Buf if we haven't, just keep incrementing merrily. - current_uid[pos]++; + current_uid[i] = 'A'; } } else @@ -146,17 +138,18 @@ void InspIRCd::IncrementUID(int pos) */ std::string InspIRCd::GetUID() { - static int curindex = -1; + static bool inited = false; /* - * If -1, we're setting up. Copy SID into the first three digits, 9's to the rest, null term at the end + * If we're setting up, copy SID into the first three digits, 9's to the rest, null term at the end * Why 9? Well, we increment before we find, otherwise we have an unnecessary copy, and I want UID to start at AAA..AA * and not AA..AB. So by initialising to 99999, we force it to rollover to AAAAA on the first IncrementUID call. * Kind of silly, but I like how it looks. * -- w */ - if (curindex == -1) + if (!inited) { + inited = true; current_uid[0] = Config->sid[0]; current_uid[1] = Config->sid[1]; current_uid[2] = Config->sid[2]; @@ -164,8 +157,6 @@ std::string InspIRCd::GetUID() for (int i = 3; i < (UUID_LENGTH - 1); i++) current_uid[i] = '9'; - curindex = UUID_LENGTH - 2; // look at the end of the string now kthx, ignore null - // Null terminator. Important. current_uid[UUID_LENGTH - 1] = '\0'; } @@ -173,7 +164,7 @@ std::string InspIRCd::GetUID() while (1) { // Add one to the last UID - this->IncrementUID(curindex); + this->IncrementUID(UUID_LENGTH - 2); if (this->FindUUID(current_uid)) { |