summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-11-11 19:02:58 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2007-11-11 19:02:58 +0000
commit81951dafc1f89ce4b52275a8b0c2a7eca9643fe5 (patch)
treed62f8772180435d8cfd8590e8cc1079c125c04ca
parente525fb7b740aceccaf83576d330f95568c68ba02 (diff)
We need to initialize the user twice, and we need to initialize the uid AFTER the config is read
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8573 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--src/inspircd.cpp61
1 files changed, 35 insertions, 26 deletions
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index e8a7d85dc..12a9bf756 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -428,33 +428,11 @@ InspIRCd::InspIRCd(int argc, char** argv)
Config->ClearStack();
this->Modes = new ModeParser(this);
- this->AddServerName(Config->ServerName);
- /*
- * Initialise SID/UID.
- * For an explanation as to exactly how this works, and why it works this way, see GetUID().
- * -- w00t
- */
- /* Generate SID */
- size_t sid = 0;
- if (Config->sid)
- {
- sid = Config->sid;
- }
- else
- {
- for (const char* x = Config->ServerName; *x; ++x)
- sid = 5 * sid + *x;
- for (const char* y = Config->ServerDesc; *y; ++y)
- sid = 5 * sid + *y;
- sid = sid % 999;
-
- Config->sid = sid;
- }
-
- this->InitialiseUID();
-
- /* set up fake client */
+ /* set up fake client (uid is incorrect at this point,
+ * until after config is read. we set up the user again
+ * at that point
+ */
this->FakeClient = new User(this);
this->FakeClient->SetFd(FD_MAGIC_NUMBER);
@@ -527,6 +505,37 @@ InspIRCd::InspIRCd(int argc, char** argv)
/* We have all the files we can get, initiate pass 1 */
Config->Read(true, NULL, 1);
+ this->AddServerName(Config->ServerName);
+
+ /* set up fake client again this time with the correct uid */
+ delete FakeClient;
+ this->FakeClient = new User(this);
+ this->FakeClient->SetFd(FD_MAGIC_NUMBER);
+
+ /*
+ * Initialise SID/UID.
+ * For an explanation as to exactly how this works, and why it works this way, see GetUID().
+ * -- w00t
+ */
+ /* Generate SID */
+ size_t sid = 0;
+ if (Config->sid)
+ {
+ sid = Config->sid;
+ }
+ else
+ {
+ for (const char* x = Config->ServerName; *x; ++x)
+ sid = 5 * sid + *x;
+ for (const char* y = Config->ServerDesc; *y; ++y)
+ sid = 5 * sid + *y;
+ sid = sid % 999;
+
+ Config->sid = sid;
+ }
+
+ this->InitialiseUID();
+
// Get XLine to do it's thing.
this->XLines->CheckELines();
this->XLines->ApplyLines();