summaryrefslogtreecommitdiffstats
path: root/rpc
diff options
context:
space:
mode:
authorshishir gowda <shishirng@gluster.com>2011-05-02 03:47:39 +0000
committerAnand Avati <avati@gluster.com>2011-05-12 09:29:21 -0700
commit357df32e16dd21e7aedb699c7bd99cac9b95a040 (patch)
treee2d7c7d553a527396790742f1209ff9121dc4477 /rpc
parentafad4e2d64c6bb01ff5dceb29b20ebcc02c1747b (diff)
Introduce client-allow-insecure xlator-option.
Allows glusterfs clients to bind to any port and does not restrict it to 1024. This is a xlator-option only, and is not supported in volume set cmd. The reason is, few clients may choose this, and few may not. Hence only supported as a xlator-option during mount time. For this to work with glusterfs, server.allow-insecure should be set to on Signed-off-by: shishir gowda <shishirng@gluster.com> Signed-off-by: Anand Avati <avati@gluster.com> BUG: 2868 (Add xlator-option to support insecure-bind for clients) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2868
Diffstat (limited to 'rpc')
-rw-r--r--rpc/rpc-lib/src/rpc-transport.c16
-rw-r--r--rpc/rpc-lib/src/rpc-transport.h1
-rw-r--r--rpc/rpc-transport/socket/src/name.c6
3 files changed, 22 insertions, 1 deletions
diff --git a/rpc/rpc-lib/src/rpc-transport.c b/rpc/rpc-lib/src/rpc-transport.c
index 87011470b..3db73f652 100644
--- a/rpc/rpc-lib/src/rpc-transport.c
+++ b/rpc/rpc-lib/src/rpc-transport.c
@@ -575,6 +575,7 @@ rpc_transport_load (glusterfs_ctx_t *ctx, dict_t *options, char *trans_name)
int32_t ret = -1;
int8_t is_tcp = 0, is_unix = 0, is_ibsdp = 0;
volume_opt_list_t *vol_opt = NULL;
+ gf_boolean_t client_bind_insecure = _gf_false;
GF_VALIDATE_OR_GOTO("rpc-transport", options, fail);
GF_VALIDATE_OR_GOTO("rpc-transport", ctx, fail);
@@ -639,6 +640,21 @@ rpc_transport_load (glusterfs_ctx_t *ctx, dict_t *options, char *trans_name)
}
}
+ ret = dict_get_str (options, "client-bind-insecure", &type);
+ if (ret == 0) {
+ ret = gf_string2boolean (type, &client_bind_insecure);
+ if (ret < 0) {
+ gf_log ("rcp-transport", GF_LOG_WARNING,
+ "client-bind-insecure option %s is not a"
+ " valid bool option", type);
+ goto fail;
+ }
+ if (_gf_true == client_bind_insecure)
+ trans->client_bind_insecure = 1;
+ } else {
+ trans->client_bind_insecure = 0;
+ }
+
ret = dict_get_str (options, "transport-type", &type);
if (ret < 0) {
gf_log ("rpc-transport", GF_LOG_ERROR,
diff --git a/rpc/rpc-lib/src/rpc-transport.h b/rpc/rpc-lib/src/rpc-transport.h
index e68838857..59bec99fd 100644
--- a/rpc/rpc-lib/src/rpc-transport.h
+++ b/rpc/rpc-lib/src/rpc-transport.h
@@ -211,6 +211,7 @@ struct rpc_transport {
uint64_t total_bytes_write;
struct list_head list;
+ int client_bind_insecure;
};
struct rpc_transport_ops {
diff --git a/rpc/rpc-transport/socket/src/name.c b/rpc/rpc-transport/socket/src/name.c
index 3bbf31010..45d01111e 100644
--- a/rpc/rpc-transport/socket/src/name.c
+++ b/rpc/rpc-transport/socket/src/name.c
@@ -437,8 +437,12 @@ client_bind (rpc_transport_t *this,
*sockaddr_len = sizeof (struct sockaddr_in);
case AF_INET6:
- ret = af_inet_bind_to_port_lt_ceiling (sock, sockaddr,
+ if (this->client_bind_insecure) {
+ ret = bind (sock, sockaddr, *sockaddr_len);
+ } else {
+ ret = af_inet_bind_to_port_lt_ceiling (sock, sockaddr,
*sockaddr_len, CLIENT_PORT_CEILING);
+ }
if (ret == -1) {
gf_log (this->name, GF_LOG_DEBUG,
"cannot bind inet socket (%d) to port less than %d (%s)",