diff options
-rw-r--r-- | configure.ac (renamed from configure.in) | 1 | ||||
-rw-r--r-- | src/authgss_prot.c | 20 | ||||
-rw-r--r-- | src/svc.c | 10 | ||||
-rw-r--r-- | src/svc_auth_gss.c | 2 |
4 files changed, 19 insertions, 14 deletions
diff --git a/configure.in b/configure.ac index bacb265..df50e94 100644 --- a/configure.in +++ b/configure.ac @@ -10,6 +10,7 @@ AC_ARG_ENABLE(gss,[ --enable-gss Turn on gss api], [case "${enableva esac],[gss=false]) AM_CONDITIONAL(GSS, test x$gss = xtrue) if test x$gss = xtrue; then + AC_DEFINE(HAVE_LIBGSSAPI, 1, []) PKG_CHECK_MODULES(GSSGLUE, libgssglue, [], AC_MSG_ERROR([Unable to locate information required to use libgssglue.])) fi diff --git a/src/authgss_prot.c b/src/authgss_prot.c index be0d1a6..ab72d91 100644 --- a/src/authgss_prot.c +++ b/src/authgss_prot.c @@ -54,7 +54,7 @@ xdr_rpc_gss_cred(XDR *xdrs, struct rpc_gss_cred *p) xdr_u_int(xdrs, &p->gc_seq) && xdr_enum(xdrs, (enum_t *)&p->gc_svc) && xdr_bytes(xdrs, (char **)&p->gc_ctx.value, - &p->gc_ctx.length, MAX_AUTH_BYTES)); + (u_int *)&p->gc_ctx.length, MAX_AUTH_BYTES)); log_debug("xdr_rpc_gss_cred: %s %s " "(v %d, proc %d, seq %d, svc %d, ctx %p:%d)", @@ -72,7 +72,7 @@ xdr_rpc_gss_init_args(XDR *xdrs, gss_buffer_desc *p) bool_t xdr_stat; xdr_stat = xdr_bytes(xdrs, (char **)&p->value, - &p->length, MAX_NETOBJ_SZ); + (u_int *)&p->length, MAX_NETOBJ_SZ); log_debug("xdr_rpc_gss_init_args: %s %s (token %p:%d)", (xdrs->x_op == XDR_ENCODE) ? "encode" : "decode", @@ -88,12 +88,12 @@ xdr_rpc_gss_init_res(XDR *xdrs, struct rpc_gss_init_res *p) bool_t xdr_stat; xdr_stat = (xdr_bytes(xdrs, (char **)&p->gr_ctx.value, - &p->gr_ctx.length, MAX_NETOBJ_SZ) && + (u_int *)&p->gr_ctx.length, MAX_NETOBJ_SZ) && xdr_u_int(xdrs, &p->gr_major) && xdr_u_int(xdrs, &p->gr_minor) && xdr_u_int(xdrs, &p->gr_win) && xdr_bytes(xdrs, (char **)&p->gr_token.value, - &p->gr_token.length, MAX_NETOBJ_SZ)); + (u_int *)&p->gr_token.length, MAX_NETOBJ_SZ)); log_debug("xdr_rpc_gss_init_res %s %s " "(ctx %p:%d, maj %d, min %d, win %d, token %p:%d)", @@ -135,7 +135,7 @@ xdr_rpc_gss_wrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, if (svc == RPCSEC_GSS_SVC_INTEGRITY) { /* Marshal databody_integ length. */ XDR_SETPOS(xdrs, start); - if (!xdr_u_int(xdrs, &databuf.length)) + if (!xdr_u_int(xdrs, (u_int *)&databuf.length)) return (FALSE); /* Checksum rpc_gss_data_t. */ @@ -148,7 +148,7 @@ xdr_rpc_gss_wrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, /* Marshal checksum. */ XDR_SETPOS(xdrs, end); xdr_stat = xdr_bytes(xdrs, (char **)&wrapbuf.value, - &wrapbuf.length, MAX_NETOBJ_SZ); + (u_int *)&wrapbuf.length, MAX_NETOBJ_SZ); gss_release_buffer(&min_stat, &wrapbuf); } else if (svc == RPCSEC_GSS_SVC_PRIVACY) { @@ -162,7 +162,7 @@ xdr_rpc_gss_wrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, /* Marshal databody_priv. */ XDR_SETPOS(xdrs, start); xdr_stat = xdr_bytes(xdrs, (char **)&wrapbuf.value, - &wrapbuf.length, MAX_NETOBJ_SZ); + (u_int *)&wrapbuf.length, MAX_NETOBJ_SZ); gss_release_buffer(&min_stat, &wrapbuf); } return (xdr_stat); @@ -188,13 +188,13 @@ xdr_rpc_gss_unwrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, if (svc == RPCSEC_GSS_SVC_INTEGRITY) { /* Decode databody_integ. */ - if (!xdr_bytes(xdrs, (char **)&databuf.value, &databuf.length, + if (!xdr_bytes(xdrs, (char **)&databuf.value, (u_int *)&databuf.length, MAX_NETOBJ_SZ)) { log_debug("xdr decode databody_integ failed"); return (FALSE); } /* Decode checksum. */ - if (!xdr_bytes(xdrs, (char **)&wrapbuf.value, &wrapbuf.length, + if (!xdr_bytes(xdrs, (char **)&wrapbuf.value, (u_int *)&wrapbuf.length, MAX_NETOBJ_SZ)) { gss_release_buffer(&min_stat, &databuf); log_debug("xdr decode checksum failed"); @@ -213,7 +213,7 @@ xdr_rpc_gss_unwrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, } else if (svc == RPCSEC_GSS_SVC_PRIVACY) { /* Decode databody_priv. */ - if (!xdr_bytes(xdrs, (char **)&wrapbuf.value, &wrapbuf.length, + if (!xdr_bytes(xdrs, (char **)&wrapbuf.value, (u_int *)&wrapbuf.length, MAX_NETOBJ_SZ)) { log_debug("xdr decode databody_priv failed"); return (FALSE); @@ -77,7 +77,9 @@ static struct svc_callout extern rwlock_t svc_lock; extern rwlock_t svc_fd_lock; +#ifdef HAVE_LIBGSSAPI extern struct svc_auth_ops svc_auth_gss_ops; +#endif static struct svc_callout *svc_find (rpcprog_t, rpcvers_t, struct svc_callout **, char *); @@ -715,9 +717,11 @@ svc_getreq_common (fd) SVC_DESTROY (xprt); break; } - else if ((xprt->xp_auth != NULL) && - (xprt->xp_auth->svc_ah_ops != &svc_auth_gss_ops)) - { + else if ((xprt->xp_auth != NULL) +#ifdef HAVE_LIBGSSAPI + && (xprt->xp_auth->svc_ah_ops != &svc_auth_gss_ops) +#endif + ) { xprt->xp_auth = NULL; } } diff --git a/src/svc_auth_gss.c b/src/svc_auth_gss.c index 9e9ff81..54b23b1 100644 --- a/src/svc_auth_gss.c +++ b/src/svc_auth_gss.c @@ -121,7 +121,7 @@ svcauth_gss_import_name(char *service) namebuf.length = strlen(service); maj_stat = gss_import_name(&min_stat, &namebuf, - GSS_C_NT_HOSTBASED_SERVICE, &name); + (gss_OID)GSS_C_NT_HOSTBASED_SERVICE, &name); if (maj_stat != GSS_S_COMPLETE) { log_status("gss_import_name", maj_stat, min_stat); |