]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspircd.cpp
Fixed a permissions error, was doing work as root!
[user/henk/code/inspircd.git] / src / inspircd.cpp
index 4250bdc75e9147a8bb1e40a0cca079fa1d4f2550..a71cf08ab83b5ba48b2ae44b4eadfbef2e153989 100644 (file)
@@ -174,7 +174,7 @@ address_cache IP;
 ClassVector Classes;
 
 struct linger linger = { 0 };
-char bannerBuffer[MAXBUF];
+char MyExecutable[1024];
 int boundPortCount = 0;
 int portCount = 0, UDPportCount = 0, ports[MAXSOCKS];
 int defaultRoute = 0;
@@ -959,7 +959,7 @@ void WriteWallOps(userrec *source, bool local_only, char* text, ...)
                {
                        if (strchr(i->second->modes,'w'))
                        {
-                               WriteTo(source,i->second,"WALLOPS %s",textbuffer);
+                               WriteTo(source,i->second,"WALLOPS :%s",textbuffer);
                        }
                 }
        }
@@ -2000,7 +2000,7 @@ void Error(int status)
 }
 
 
-int main(int argc, char *argv[])
+int main(int argc, char **argv)
 {
        Start();
        srand(time(NULL));
@@ -2013,10 +2013,18 @@ int main(int argc, char *argv[])
                Exit(ERROR);
        }
        if (argc > 1) {
-               if (!strcmp(argv[1],"-nofork")) {
-                       nofork = true;
+               for (int i = 1; i < argc; i++)
+               {
+                       if (!strcmp(argv[i],"-nofork")) {
+                               nofork = true;
+                       }
+                       if (!strcmp(argv[i],"-wait")) {
+                               sleep(6);
+                       }
                }
        }
+       strcpy(MyExecutable,argv[0]);
+       
        if (InspIRCd() == ERROR)
        {
                log(DEBUG,"main: daemon function bailed");
@@ -2953,6 +2961,11 @@ void DoSync(serverrec* serv, char* tcp_host)
        {
                snprintf(data,MAXBUF,"N %d %s %s %s %s +%s %s %s :%s",u->second->age,u->second->nick,u->second->host,u->second->dhost,u->second->ident,u->second->modes,u->second->ip,u->second->server,u->second->fullname);
                serv->SendPacket(data,tcp_host);
+               if (strchr(u->second->modes,'o'))
+               {
+                       snprintf(data,MAXBUF,"| %s %s",u->second->nick,u->second->oper);
+                       serv->SendPacket(data,tcp_host);
+               }
                for (int i = 0; i <= MODCOUNT; i++)
                {
                        string_list l = modules[i]->OnUserSync(u->second);
@@ -3114,11 +3127,11 @@ int reap_counter = 0;
 
 int InspIRCd(void)
 {
-       struct sockaddr_in client, server;
+       struct sockaddr_in client,server;
        char addrs[MAXBUF][255];
        int openSockfd[MAXSOCKS], incomingSockfd, result = TRUE;
        socklen_t length;
-       int count = 0, scanDetectTrigger = TRUE, showBanner = FALSE;
+       int count = 0;
        int selectResult = 0, selectResult2 = 0;
        char *temp, configToken[MAXBUF], stuff[MAXBUF], Addr[MAXBUF], Type[MAXBUF];
        char resolvedHost[MAXBUF];
@@ -3169,8 +3182,14 @@ int InspIRCd(void)
                                log(DEBUG,"InspIRCd: startup: binding '%s:%s' is default server route",Addr,configToken);
                        }
                        me[count3] = new serverrec(ServerName,100L,false);
-                       me[count3]->CreateListener(Addr,atoi(configToken));
-                       count3++;
+                       if (!me[count3]->CreateListener(Addr,atoi(configToken)))
+                       {
+                               log(DEFAULT,"Error! Failed to bind port %d",atoi(configToken));
+                       }
+                       else
+                       {
+                               count3++;
+                       }
                }
                else
                {
@@ -3328,7 +3347,8 @@ int InspIRCd(void)
                
                for (int x = 0; x != UDPportCount; x++)
                {
-                       FD_SET(me[x]->fd, &serverfds);
+                       if (me[x])
+                               FD_SET(me[x]->fd, &serverfds);
                }
                
                tvs.tv_usec = 0;                
@@ -3339,7 +3359,7 @@ int InspIRCd(void)
                {
                        for (int x = 0; x != UDPportCount; x++)
                        {
-                               if (FD_ISSET (me[x]->fd, &serverfds))
+                               if ((me[x]) && (FD_ISSET (me[x]->fd, &serverfds)))
                                {
                                        char remotehost[MAXBUF],resolved[MAXBUF];
                                        length = sizeof (client);
@@ -3360,7 +3380,7 @@ int InspIRCd(void)
                {
                        std::deque<std::string> msgs;
                        msgs.clear();
-                       if (me[x]->RecvPacket(msgs, tcp_host))
+                       if ((me[x]) && (me[x]->RecvPacket(msgs, tcp_host)))
                        {
                                for (int ctr = 0; ctr < msgs.size(); ctr++)
                                {