Abstract out the actual RPC client creation functions. This will allow us to create a new TI-RPC enabled client creation function in a later patch. Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx> --- utils/gssd/gssd_proc.c | 80 +++++++++++++++++++++++++++++------------------ 1 files changed, 49 insertions(+), 31 deletions(-) diff --git a/utils/gssd/gssd_proc.c b/utils/gssd/gssd_proc.c index 349ed99..5cf2445 100644 --- a/utils/gssd/gssd_proc.c +++ b/utils/gssd/gssd_proc.c @@ -552,6 +552,52 @@ out_err: return -1; } +static CLIENT * +create_rpc_client(struct clnt_info *clp, int protocol, uid_t uid) +{ + CLIENT *rpc_clnt = NULL; + char rpc_errmsg[1024]; + int sockp = RPC_ANYSOCK; + int sendsz = 32768, recvsz = 32768; + const struct timeval timeout = {5, 0}; + + switch(protocol) { + case IPPROTO_TCP: + if ((rpc_clnt = clnttcp_create( + (struct sockaddr_in *) clp->addr, + clp->prog, clp->vers, &sockp, + sendsz, recvsz)) == NULL) { + snprintf(rpc_errmsg, sizeof(rpc_errmsg), + "WARNING: can't create tcp rpc_clnt " + "for server %s for user with uid %d", + clp->servername, uid); + printerr(0, "%s\n", + clnt_spcreateerror(rpc_errmsg)); + } + break; + case IPPROTO_UDP: + if ((rpc_clnt = clntudp_bufcreate( + (struct sockaddr_in *) clp->addr, + clp->prog, clp->vers, timeout, + &sockp, sendsz, recvsz)) == NULL) { + snprintf(rpc_errmsg, sizeof(rpc_errmsg), + "WARNING: can't create udp rpc_clnt " + "for server %s for user with uid %d", + clp->servername, uid); + printerr(0, "%s\n", + clnt_spcreateerror(rpc_errmsg)); + } + break; + default: + /* Shouldn't happen! */ + printerr(0, "ERROR: requested protocol '%s', but " + "got addrinfo with protocol %d\n", + clp->protocol, protocol); + } + + return rpc_clnt; +} + /* * Determine the port from the servicename and set the right field in the * sockaddr. This is mostly a no-op with newer kernels that send the port @@ -642,9 +688,6 @@ int create_auth_rpc_client(struct clnt_info *clp, uid_t save_uid = -1; int retval = -1; OM_uint32 min_stat; - char rpc_errmsg[1024]; - int sockp = RPC_ANYSOCK; - int sendsz = 32768, recvsz = 32768; int socktype, protocol; /* Create the context as the user (not as root) */ @@ -715,34 +758,9 @@ int create_auth_rpc_client(struct clnt_info *clp, if (!populate_port(clp->addr, clp->servicename, socktype, protocol)) goto out_fail; - if (protocol == IPPROTO_TCP) { - if ((rpc_clnt = clnttcp_create( - (struct sockaddr_in *) clp->addr, - clp->prog, clp->vers, &sockp, - sendsz, recvsz)) == NULL) { - snprintf(rpc_errmsg, sizeof(rpc_errmsg), - "WARNING: can't create tcp rpc_clnt " - "for server %s for user with uid %d", - clp->servername, uid); - printerr(0, "%s\n", - clnt_spcreateerror(rpc_errmsg)); - goto out_fail; - } - } else if (protocol == IPPROTO_UDP) { - const struct timeval timeout = {5, 0}; - if ((rpc_clnt = clntudp_bufcreate( - (struct sockaddr_in *) clp->addr, - clp->prog, clp->vers, timeout, - &sockp, sendsz, recvsz)) == NULL) { - snprintf(rpc_errmsg, sizeof(rpc_errmsg), - "WARNING: can't create udp rpc_clnt " - "for server %s for user with uid %d", - clp->servername, uid); - printerr(0, "%s\n", - clnt_spcreateerror(rpc_errmsg)); - goto out_fail; - } - } + rpc_clnt = create_rpc_client(clp, protocol, uid); + if (!rpc_clnt) + goto out_fail; printerr(2, "creating context with server %s\n", clp->servicename); auth = authgss_create_default(rpc_clnt, clp->servicename, &sec); -- 1.6.0.6 -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html