diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-11-11 19:02:58 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2007-11-11 19:02:58 +0000 |
commit | 81951dafc1f89ce4b52275a8b0c2a7eca9643fe5 (patch) | |
tree | d62f8772180435d8cfd8590e8cc1079c125c04ca | |
parent | e525fb7b740aceccaf83576d330f95568c68ba02 (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.cpp | 61 |
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(); |