Changeset: 0299a8888992 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0299a8888992
Modified Files:
        tools/merovingian/daemon/connections.c
        tools/merovingian/daemon/connections.h
        tools/merovingian/daemon/merovingian.c
Branch: default
Log Message:

monetdbd binds to localhost by default, new settable property listenaddr for 
dbfarm
Bug 2407


diffs (125 lines):

diff --git a/tools/merovingian/daemon/connections.c 
b/tools/merovingian/daemon/connections.c
--- a/tools/merovingian/daemon/connections.c
+++ b/tools/merovingian/daemon/connections.c
@@ -27,7 +27,7 @@
 
 
 err
-openConnectionTCP(int *ret, unsigned short port, FILE *log)
+openConnectionTCP(int *ret, char* bindaddr, unsigned short port, FILE *log)
 {
        struct sockaddr_in server;
        int sock = -1;
@@ -37,9 +37,6 @@ openConnectionTCP(int *ret, unsigned sho
        struct hostent *hoste;
        char *host;
        char hostip[24];
-#ifdef CONTROL_BINDADDR
-       char bindaddr[512];   /* eligable for configuration */
-#endif
 
        sock = socket(AF_INET, SOCK_STREAM, 0);
        if (sock == -1)
@@ -53,14 +50,13 @@ openConnectionTCP(int *ret, unsigned sho
        }
 
        server.sin_family = AF_INET;
-#ifdef CONTROL_BINDADDR
-       gethostname(bindaddr, 512);
-       hoste = gethostbyname(bindaddr);
-       memcpy(&server.sin_addr.s_addr, *(hoste->h_addr_list),
-                       sizeof(server.sin_addr.s_addr));
-#else
-       server.sin_addr.s_addr = htonl(INADDR_ANY);
-#endif
+       if (bindaddr) {
+               hoste = gethostbyname(bindaddr);
+               memcpy(&server.sin_addr.s_addr, *(hoste->h_addr_list),
+                               sizeof(server.sin_addr.s_addr));
+       } else {
+               server.sin_addr.s_addr = htonl(INADDR_ANY);
+       }
        for (i = 0; i < 8; i++)
                server.sin_zero[i] = 0;
        length = (socklen_t) sizeof(server);
@@ -99,7 +95,7 @@ openConnectionTCP(int *ret, unsigned sho
 }
 
 err
-openConnectionUDP(int *ret, unsigned short port)
+openConnectionUDP(int *ret, char* bindaddr, unsigned short port)
 {
        struct addrinfo hints;
        struct addrinfo *result, *rp;
@@ -118,7 +114,7 @@ openConnectionUDP(int *ret, unsigned sho
        hints.ai_next = NULL;
 
        snprintf(sport, 10, "%hu", port);
-       sock = getaddrinfo(NULL, sport, &hints, &result);
+       sock = getaddrinfo(bindaddr, sport, &hints, &result);
        if (sock != 0)
                return(newErr("failed getting address info: %s", 
gai_strerror(sock)));
 
diff --git a/tools/merovingian/daemon/connections.h 
b/tools/merovingian/daemon/connections.h
--- a/tools/merovingian/daemon/connections.h
+++ b/tools/merovingian/daemon/connections.h
@@ -12,8 +12,8 @@
 #include <stdio.h>
 #include "merovingian.h"
 
-err openConnectionTCP(int *ret, unsigned short port, FILE *log);
-err openConnectionUDP(int *ret, unsigned short port);
+err openConnectionTCP(int *ret, char* bindaddr, unsigned short port, FILE 
*log);
+err openConnectionUDP(int *ret, char* bindaddr, unsigned short port);
 err openConnectionUNIX(int *ret, char *path, int mode, FILE *log);
 
 #endif
diff --git a/tools/merovingian/daemon/merovingian.c 
b/tools/merovingian/daemon/merovingian.c
--- a/tools/merovingian/daemon/merovingian.c
+++ b/tools/merovingian/daemon/merovingian.c
@@ -407,6 +407,7 @@ main(int argc, char *argv[])
        int usock = -1;
        int unsock = -1;
        int socku = -1;
+       char* host = NULL;
        unsigned short port = 0;
        char discovery = 0;
        struct stat sb;
@@ -419,6 +420,7 @@ main(int argc, char *argv[])
                {"pidfile",       strdup("merovingian.pid"), 0,                
STR},
 
                {"sockdir",       strdup("/tmp"),          0,                  
STR},
+               {"listenaddr",    strdup("localhost"),     0,                  
STR},
                {"port",          strdup(MERO_PORT),       atoi(MERO_PORT),    
INT},
 
                {"exittimeout",   strdup("60"),            60,                 
INT},
@@ -678,6 +680,15 @@ main(int argc, char *argv[])
                writeProps(_mero_props, ".");
        }
 
+       kv = findConfKey(_mero_props, "listenaddr");
+       if (!kv->val <= 0 || strlen(kv->val) < 1) {
+               Mfprintf(stderr, "invalid host name: %s, defaulting to 
localhost\n",
+                               kv->val);
+               setConfVal(kv, "localhost");
+               writeProps(_mero_props, ".");
+       }
+       host = kv->val;
+
        kv = findConfKey(_mero_props, "port");
        if (kv->ival <= 0 || kv->ival > 65535) {
                Mfprintf(stderr, "invalid port number: %s, defaulting to %s\n",
@@ -901,11 +912,11 @@ main(int argc, char *argv[])
 
        /* open up connections */
        if (
-                       (e = openConnectionTCP(&sock, port, stdout)) == NO_ERR 
&&
+                       (e = openConnectionTCP(&sock, host, port, stdout)) == 
NO_ERR &&
                        /* coverity[operator_confusion] */
                        (unlink(control_usock) | unlink(mapi_usock) | 1) &&
                        (e = openConnectionUNIX(&socku, mapi_usock, 0, stdout)) 
== NO_ERR &&
-                       (discovery == 0 || (e = openConnectionUDP(&usock, 
port)) == NO_ERR) &&
+                       (discovery == 0 || (e = openConnectionUDP(&usock, host, 
port)) == NO_ERR) &&
                        (e = openConnectionUNIX(&unsock, control_usock, 
S_IRWXO, _mero_ctlout)) == NO_ERR
           )
        {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to