X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fgssd%2Fgssd_proc.c;h=4c3d85da766ebdef5f1352ada8c0c6f8f2fbd9b9;hp=78919b8ea9532bfc094fd8478adaab36a0a39ecd;hb=a6037e23a8c9d649bf5946ac9d23114f9097b997;hpb=62c4197d5b41b66af58c34a4cc79c023599f0f72 diff --git a/utils/gssd/gssd_proc.c b/utils/gssd/gssd_proc.c index 78919b8..4c3d85d 100644 --- a/utils/gssd/gssd_proc.c +++ b/utils/gssd/gssd_proc.c @@ -436,6 +436,8 @@ int create_auth_rpc_client(struct clnt_info *clp, int sockp = RPC_ANYSOCK; int sendsz = 32768, recvsz = 32768; struct addrinfo ai_hints, *a = NULL; + char service[64]; + char *at_sign; sec.qop = GSS_C_QOP_DEFAULT; sec.svc = RPCSEC_GSS_SVC_NONE; @@ -505,8 +507,21 @@ int create_auth_rpc_client(struct clnt_info *clp, goto out_fail; } - errcode = getaddrinfo(clp->servername, "nfs", - &ai_hints, &a); + /* extract the service name from clp->servicename */ + if ((at_sign = strchr(clp->servicename, '@')) == NULL) { + printerr(0, "WARNING: servicename (%s) not formatted as " + "expected with service@host", clp->servicename); + goto out_fail; + } + if ((at_sign - clp->servicename) >= sizeof(service)) { + printerr(0, "WARNING: service portion of servicename (%s) " + "is too long!", clp->servicename); + goto out_fail; + } + strncpy(service, clp->servicename, at_sign - clp->servicename); + service[at_sign - clp->servicename] = '\0'; + + errcode = getaddrinfo(clp->servername, service, &ai_hints, &a); if (errcode) { printerr(0, "WARNING: Error from getaddrinfo for server " "'%s': %s", clp->servername, gai_strerror(errcode)); @@ -673,7 +688,7 @@ handle_krb5_upcall(struct clnt_info *clp) goto out_return_error; } - if (serialize_context_for_kernel(pd.pd_ctx, &token)) { + if (serialize_context_for_kernel(pd.pd_ctx, &token, &krb5oid)) { printerr(0, "WARNING: Failed to serialize krb5 context for " "user with uid %d for server %s\n", uid, clp->servername); @@ -728,7 +743,7 @@ handle_spkm3_upcall(struct clnt_info *clp) goto out_return_error; } - if (serialize_context_for_kernel(pd.pd_ctx, &token)) { + if (serialize_context_for_kernel(pd.pd_ctx, &token, &spkm3oid)) { printerr(0, "WARNING: Failed to serialize spkm3 context for " "user with uid %d for server\n", uid, clp->servername);