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