The first time that Aaron Robinson saw a horrible hack prefaced with a light-hearted apology (or, a "hackpology"), he was understanding. C'mon, I don't think there is any one among us hasn't had to patch up a ugly bug with an equally bad kludge. The second and third time Aaron saw a hackpology, he was still understanding. C'mon, we all have had a bad streak of luck here and there. By the eleventh hackpology, Aaron realized that the original developer of the system should have just added "I'm really, really sorry" to the header of every code file. I'm not sure what number today's hackpology is, but it was uncovered when Aaron thought he'd save a few hundred megabytes/day in diskspace and disable session debugging. Whoops ...

/* This is bad. Reaaly bad. It's a really, really bad hack. If you're an employee of 
 * Intertrode Communication, then I'm really, really sorry that you have to maintain
 * this. I was honestly planning on removing this tomorrow, but I've been known to 
 * forget things like this. It happens.
 *
 * So here's the thing. I can't seem to figure out why the AccountId variable isn't 
 * set. I've looked and looked, but I gotta leave now. Anyway, I've found that I can
 * just grab the AccountID from the debugging logs.  I suppose that to fix it, you'd
 * have to locate where it's clearing out the ID.
 *
 * Again, I'm sorry.
 */

if ( (AccountId == NULL) || (AccountId == "") ||
     (ServerSesion["AccountId"] == NULL) || (ServerSesion["AccountId"] == "") )
{
  //open session logs
  FileHandle file = f_open(LOG_PATH + "\sessionlog-" + LOG_FILE_DATE + ".log", 1);
  while (file != NULL)
  {
    
    TString line = f_readline(file);

    //look for IP and changereg
    if ( (sfind(line,REMOTE_ADDR) != -1) && (sfind(line,"changereg") != -1) )
    {
      //0000-00-00 00:00 /accountmaint/changereg/?AccountId=123456 255.255.255.255 ...
      //                                                    *
      AccountId = substr(line, 52, 6);
    }

    if (f_EOF(file)) { f_close(file); file = NULL; }
  }

}
[Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!