diff options
| author | shishir gowda <shishirng@gluster.com> | 2010-08-30 03:54:32 +0000 | 
|---|---|---|
| committer | Vijay Bellur <vijay@dev.gluster.com> | 2010-08-30 03:23:57 -0700 | 
| commit | 55bbf23b3a608f67b7a05939f4205049e92d081a (patch) | |
| tree | b264f2b270b5bd2eb8ea302a29e87db5878548ad /rpc | |
| parent | 8e4d735b67c78f10fd752f2b48981843595e67b5 (diff) | |
Only admin should be able to run gluster command
Checking for port number to fail any requests coming in
from client. if port is >1024, then fail the requests
Signed-off-by: shishir gowda <shishirng@gluster.com>
Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>
BUG: 1403 (only admin (uid 0) should be able to run 'gluster' command)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1403
Diffstat (limited to 'rpc')
| -rw-r--r-- | rpc/rpc-lib/src/rpcsvc.c | 29 | 
1 files changed, 29 insertions, 0 deletions
diff --git a/rpc/rpc-lib/src/rpcsvc.c b/rpc/rpc-lib/src/rpcsvc.c index ee3d674c2eb..f76a34e3f54 100644 --- a/rpc/rpc-lib/src/rpcsvc.c +++ b/rpc/rpc-lib/src/rpcsvc.c @@ -925,10 +925,39 @@ rpcsvc_handle_rpc_call (rpcsvc_t *svc, rpc_transport_t *trans,          rpcsvc_actor_t          *actor = NULL;          rpcsvc_request_t        *req = NULL;          int                     ret = -1; +        uint16_t                port = 0;          if (!trans || !svc)                  return -1; +        switch (trans->peerinfo.sockaddr.ss_family) { +        case AF_INET: +                port = ((struct sockaddr_in *)&trans->peerinfo.sockaddr)->sin_port; +                break; + +        case AF_INET6: +                port = ((struct sockaddr_in6 *)&trans->peerinfo.sockaddr)->sin6_port; +                break; + +        default: +                gf_log (GF_RPCSVC, GF_LOG_DEBUG, +                        "invalid address family (%d)", +                        trans->peerinfo.sockaddr.ss_family); +                return -1; +        } + + + +        port = ntohs (port); + +        gf_log ("rpcsvc", GF_LOG_TRACE, "Client port: %d", (int)port); + +        if (port > 1024) {  //Non-privilaged user, fail request +                gf_log ("glusterd", GF_LOG_ERROR, "Request received from non-" +                        "privileged port. Failing request"); +                return -1; +        } +          req = rpcsvc_request_create (svc, trans, msg);          if (!req)                  goto err;  | 
