diff options
Diffstat (limited to 'rpc/rpc-lib/src')
| -rw-r--r-- | rpc/rpc-lib/src/rpc-clnt.c | 40 | ||||
| -rw-r--r-- | rpc/rpc-lib/src/rpc-clnt.h | 6 | ||||
| -rw-r--r-- | rpc/rpc-lib/src/rpcsvc.h | 1 | 
3 files changed, 31 insertions, 16 deletions
diff --git a/rpc/rpc-lib/src/rpc-clnt.c b/rpc/rpc-lib/src/rpc-clnt.c index adf6fd876..ec73631d4 100644 --- a/rpc/rpc-lib/src/rpc-clnt.c +++ b/rpc/rpc-lib/src/rpc-clnt.c @@ -1056,6 +1056,8 @@ rpc_clnt_new (dict_t *options,                  goto out;          } +        rpc->auth_null = dict_get_str_boolean (options, "auth-null", 0); +          rpc = rpc_clnt_ref (rpc);          INIT_LIST_HEAD (&rpc->programs); @@ -1136,19 +1138,26 @@ rpc_clnt_fill_request (int prognum, int progver, int procnum,          request->rm_call.cb_vers = progver;          request->rm_call.cb_proc = procnum; -        /* TODO: Using AUTH_GLUSTERFS for time-being. Make it modular in -         * future so it is easy to plug-in new authentication schemes. +        /* TODO: Using AUTH_(GLUSTERFS/NULL) in a kludgy way for time-being. +         * Make it modular in future so it is easy to plug-in new +         * authentication schemes.           */ -        ret = xdr_serialize_glusterfs_auth (auth_data, au); -        if (ret == -1) { -                gf_log ("rpc-clnt", GF_LOG_DEBUG, "cannot encode credentials"); -                goto out; -        } - -        request->rm_call.cb_cred.oa_flavor = AUTH_GLUSTERFS_v2; -        request->rm_call.cb_cred.oa_base   = auth_data; -        request->rm_call.cb_cred.oa_length = ret; +        if (auth_data) { +                ret = xdr_serialize_glusterfs_auth (auth_data, au); +                if (ret == -1) { +                        gf_log ("rpc-clnt", GF_LOG_DEBUG, +                                "cannot encode credentials"); +                        goto out; +                } +                request->rm_call.cb_cred.oa_flavor = AUTH_GLUSTERFS_v2; +                request->rm_call.cb_cred.oa_base   = auth_data; +                request->rm_call.cb_cred.oa_length = ret; +        } else { +                request->rm_call.cb_cred.oa_flavor = AUTH_NULL; +                request->rm_call.cb_cred.oa_base   = NULL; +                request->rm_call.cb_cred.oa_length = 0; +        }          request->rm_call.cb_verf.oa_flavor = AUTH_NONE;          request->rm_call.cb_verf.oa_base = NULL;          request->rm_call.cb_verf.oa_length = 0; @@ -1228,8 +1237,13 @@ rpc_clnt_record_build_record (struct rpc_clnt *clnt, int prognum, int progver,          record = iobuf_ptr (request_iob);  /* Now we have it. */          /* Fill the rpc structure and XDR it into the buffer got above. */ -        ret = rpc_clnt_fill_request (prognum, progver, procnum, xid, -                                     au, &request, auth_data); +        if (clnt->auth_null) +                ret = rpc_clnt_fill_request (prognum, progver, procnum, +                                             xid, NULL, &request, NULL); +        else +                ret = rpc_clnt_fill_request (prognum, progver, procnum, +                                             xid, au, &request, auth_data); +          if (ret == -1) {                  gf_log (clnt->conn.trans->name, GF_LOG_WARNING,                          "cannot build a rpc-request xid (%"PRIu64")", xid); diff --git a/rpc/rpc-lib/src/rpc-clnt.h b/rpc/rpc-lib/src/rpc-clnt.h index 7034da705..dcd926da9 100644 --- a/rpc/rpc-lib/src/rpc-clnt.h +++ b/rpc/rpc-lib/src/rpc-clnt.h @@ -169,7 +169,7 @@ struct rpc_req {          void                  *conn_private;  }; -struct rpc_clnt { +typedef struct rpc_clnt {          pthread_mutex_t        lock;          rpc_clnt_notify_t      notifyfn;          rpc_clnt_connection_t  conn; @@ -186,7 +186,8 @@ struct rpc_clnt {          glusterfs_ctx_t       *ctx;          int                   refcount; -}; +        int                   auth_null; +} rpc_clnt_t;  struct rpc_clnt *rpc_clnt_new (dict_t *options, glusterfs_ctx_t *ctx, @@ -229,7 +230,6 @@ rpc_clnt_unref (struct rpc_clnt *rpc);  void rpc_clnt_set_connected (rpc_clnt_connection_t *conn);  void rpc_clnt_unset_connected (rpc_clnt_connection_t *conn); -  void rpc_clnt_reconnect (void *trans_ptr);  void rpc_clnt_reconfig (struct rpc_clnt *rpc, struct rpc_clnt_config *config); diff --git a/rpc/rpc-lib/src/rpcsvc.h b/rpc/rpc-lib/src/rpcsvc.h index b15476704..5b297d8cf 100644 --- a/rpc/rpc-lib/src/rpcsvc.h +++ b/rpc/rpc-lib/src/rpcsvc.h @@ -265,6 +265,7 @@ struct rpcsvc_request {  #define rpcsvc_request_set_vecstate(req, state)  ((req)->vecstate = state)  #define rpcsvc_request_vecstate(req) ((req)->vecstate)  #define rpcsvc_request_transport(req) ((req)->trans) +#define rpcsvc_request_transport_ref(req) (rpc_transport_ref((req)->trans))  #define RPCSVC_ACTOR_SUCCESS    0  | 
