Server: Set waiting for server listening before setting UID/GID
authorDarren <darren@darrenwhitlen.com>
Thu, 8 Nov 2012 21:52:06 +0000 (21:52 +0000)
committerDarren <darren@darrenwhitlen.com>
Thu, 8 Nov 2012 21:52:06 +0000 (21:52 +0000)
server/kiwi.js
server/weblistener.js

index 0de98a51db9e260f1aaddf1bbe993a4a0b225572..1acb7d0186256b5a6fd6ad2817fe6e326ca2abe5 100755 (executable)
@@ -107,8 +107,18 @@ _.each(global.config.servers, function (server) {
     wl.on('destroy', function (client) {
         clients.remove(client);
     });
+
+    wl.on('listening', webListenerRunning);
 });
 
+// Once all the listeners are listening, set the processes UID/GID
+var num_listening = 0;
+function webListenerRunning() {
+    num_listening++;
+    if (num_listening === global.config.servers.length) {
+        setProcessUid();
+    }
+}
 
 
 
@@ -121,11 +131,13 @@ _.each(global.config.servers, function (server) {
 process.title = 'kiwiirc';
 
 // Change UID/GID
-if ((global.config.group) && (global.config.group !== '')) {
-    process.setgid(global.config.group);
-}
-if ((global.config.user) && (global.config.user !== '')) {
-    process.setuid(global.config.user);
+function setProcessUid() {
+    if ((global.config.group) && (global.config.group !== '')) {
+        process.setgid(global.config.group);
+    }
+    if ((global.config.user) && (global.config.user !== '')) {
+        process.setuid(global.config.user);
+    }
 }
 
 
index 1c610365ae888d813dbbf8fcbe2969ca13db939c..08536fc7f8a671b316ce4922a798f0b39b13f3ae 100644 (file)
@@ -56,7 +56,9 @@ var WebListener = function (web_config, transports) {
         
         // Start socket.io listening on this weblistener
         this.ws = ws.listen(hs, _.extend({ssl: true}, ws_opts));
-        hs.listen(web_config.port, web_config.address);
+        hs.listen(web_config.port, web_config.address, function () {
+            that.emit('listening');
+        });
 
         console.log('Listening on ' + web_config.address + ':' + web_config.port.toString() + ' with SSL');
     } else {
@@ -66,7 +68,9 @@ var WebListener = function (web_config, transports) {
 
         // Start socket.io listening on this weblistener
         this.ws = ws.listen(hs, _.extend({ssl: false}, ws_opts));
-        hs.listen(web_config.port, web_config.address);
+        hs.listen(web_config.port, web_config.address, function () {
+            that.emit('listening');
+        });
 
         console.log('Listening on ' + web_config.address + ':' + web_config.port.toString() + ' without SSL');
     }