summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/inspircd.h4
-rw-r--r--src/inspircd.cpp23
-rw-r--r--src/server.cpp8
3 files changed, 25 insertions, 10 deletions
diff --git a/include/inspircd.h b/include/inspircd.h
index 2e5531567..d5d0c9ae4 100644
--- a/include/inspircd.h
+++ b/include/inspircd.h
@@ -273,6 +273,10 @@ class CoreExport InspIRCd : public classbase
*/
void DoSocketTimeouts(time_t TIME);
+ /** Sets up UID subsystem
+ */
+ void InitialiseUID();
+
/** Perform background user events such as PING checks
* @param TIME the current time
*/
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index fe36208d1..949d8a3ae 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -435,7 +435,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
this->Modules->handles.resize(255);
/*
- * Initialise UID. XXX, we need to read SID from config, and use it instead of 000.
+ * Initialise SID/UID.
* For an explanation as to exactly how this works, and why it works this way, see GetUID().
* -- w00t
*/
@@ -457,13 +457,8 @@ InspIRCd::InspIRCd(int argc, char** argv)
Config->sid = sid;
}
- current_uid[0] = sid / 100 + 48;
- current_uid[1] = ((sid / 10) % 10) + 48;
- current_uid[2] = sid % 10 + 48;
- /* Initialise UID */
- for(i = 3; i < UUID_LENGTH - 1; i++)
- current_uid[i] = 'A';
+ this->InitialiseUID();
/* set up fake client */
this->FakeClient = new userrec(this);
@@ -577,6 +572,20 @@ InspIRCd::InspIRCd(int argc, char** argv)
this->WritePID(Config->PID);
}
+/* moved to a function, as UID generation can call this also */
+void InspIRCd::InitialiseUID()
+{
+ size_t sid = Config->sid;
+
+ current_uid[0] = sid / 100 + 48;
+ current_uid[1] = ((sid / 10) % 10) + 48;
+ current_uid[2] = sid % 10 + 48;
+
+ /* Initialise UID */
+ for(i = 3; i < UUID_LENGTH - 1; i++)
+ current_uid[i] = 'A';
+}
+
void InspIRCd::DoOneIteration(bool process_module_sockets)
{
#ifndef WIN32
diff --git a/src/server.cpp b/src/server.cpp
index ea2ec4928..2722c6831 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -173,9 +173,11 @@ std::string InspIRCd::GetUID()
if (current_uid[3] == 'Z')
{
- /* If we get to here, we need to wrap around to AAAA. */
- for(int j = 3; j < UUID_LENGTH - 1; j++)
- current_uid[j] = 'A';
+ /*
+ * Ugh. We have run out of room.. roll back around to the
+ * start of the UUID namespace. -- w00t
+ */
+ this->InitialiseUID();
/*
* and now we need to break the inner for () to continue the while (),