You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1358 lines
41 KiB
1358 lines
41 KiB
7 years ago
|
diff --git a/src/Makefile.am b/src/Makefile.am
|
||
|
index 3029b78..de57c8f 100644
|
||
|
--- a/src/Makefile.am
|
||
|
+++ b/src/Makefile.am
|
||
|
@@ -5,7 +5,7 @@
|
||
|
## program built. We also don't bother trying to assemble code, or
|
||
|
## anything like that.
|
||
|
|
||
|
-noinst_HEADERS = rpc_com.h
|
||
|
+noinst_HEADERS = rpc_com.h debug.h
|
||
|
|
||
|
AM_CPPFLAGS = -I$(top_srcdir)/tirpc -DPORTMAP -DINET6 \
|
||
|
-D_GNU_SOURCE -Wall -pipe
|
||
|
@@ -51,7 +51,7 @@ libtirpc_la_SOURCES = auth_none.c auth_unix.c authunix_prot.c bindresvport.c cln
|
||
|
rpc_callmsg.c rpc_generic.c rpc_soc.c rpcb_clnt.c rpcb_prot.c \
|
||
|
rpcb_st_xdr.c svc.c svc_auth.c svc_dg.c svc_auth_unix.c svc_auth_none.c \
|
||
|
svc_generic.c svc_raw.c svc_run.c svc_simple.c svc_vc.c getpeereid.c \
|
||
|
- auth_time.c auth_des.c authdes_prot.c
|
||
|
+ auth_time.c auth_des.c authdes_prot.c debug.c
|
||
|
|
||
|
## XDR
|
||
|
libtirpc_la_SOURCES += xdr.c xdr_rec.c xdr_array.c xdr_float.c xdr_mem.c xdr_reference.c xdr_stdio.c
|
||
|
diff --git a/src/auth_des.c b/src/auth_des.c
|
||
|
index f0c8b8c..cff777c 100644
|
||
|
--- a/src/auth_des.c
|
||
|
+++ b/src/auth_des.c
|
||
|
@@ -54,6 +54,8 @@
|
||
|
#endif
|
||
|
#include <sys/cdefs.h>
|
||
|
|
||
|
+#include "debug.h"
|
||
|
+
|
||
|
#define USEC_PER_SEC 1000000
|
||
|
#define RTIME_TIMEOUT 5 /* seconds to wait for sync */
|
||
|
|
||
|
@@ -399,7 +401,7 @@ authdes_validate(AUTH *auth, struct opaque_auth *rverf)
|
||
|
*/
|
||
|
if (bcmp((char *)&ad->ad_timestamp, (char *)&verf.adv_timestamp,
|
||
|
sizeof(struct timeval)) != 0) {
|
||
|
- syslog(LOG_DEBUG, "authdes_validate: verifier mismatch");
|
||
|
+ LIBTIRPC_DEBUG(1, ("authdes_validate: verifier mismatch"));
|
||
|
return (FALSE);
|
||
|
}
|
||
|
|
||
|
@@ -433,16 +435,15 @@ authdes_refresh(AUTH *auth, void *dummy)
|
||
|
* Hope the clocks are synced!
|
||
|
*/
|
||
|
ad->ad_dosync = 0;
|
||
|
- syslog(LOG_DEBUG,
|
||
|
- "authdes_refresh: unable to synchronize clock");
|
||
|
+ LIBTIRPC_DEBUG(1, ("authdes_refresh: unable to synchronize clock"));
|
||
|
}
|
||
|
}
|
||
|
ad->ad_xkey = auth->ah_key;
|
||
|
pkey.n_bytes = (char *)(ad->ad_pkey);
|
||
|
pkey.n_len = (u_int)strlen((char *)ad->ad_pkey) + 1;
|
||
|
if (key_encryptsession_pk(ad->ad_servername, &pkey, &ad->ad_xkey) < 0) {
|
||
|
- syslog(LOG_INFO,
|
||
|
- "authdes_refresh: keyserv(1m) is unable to encrypt session key");
|
||
|
+ LIBTIRPC_DEBUG(1,
|
||
|
+ ("authdes_refresh: keyserv(1m) is unable to encrypt session key"));
|
||
|
return (FALSE);
|
||
|
}
|
||
|
cred->adc_fullname.key = ad->ad_xkey;
|
||
|
diff --git a/src/auth_gss.c b/src/auth_gss.c
|
||
|
index 703bc3f..6db6a82 100644
|
||
|
--- a/src/auth_gss.c
|
||
|
+++ b/src/auth_gss.c
|
||
|
@@ -49,14 +49,16 @@
|
||
|
#include <netinet/in.h>
|
||
|
#include <gssapi/gssapi.h>
|
||
|
|
||
|
-static void authgss_nextverf();
|
||
|
-static bool_t authgss_marshal();
|
||
|
-static bool_t authgss_refresh();
|
||
|
-static bool_t authgss_validate();
|
||
|
-static void authgss_destroy();
|
||
|
-static void authgss_destroy_context();
|
||
|
-static bool_t authgss_wrap();
|
||
|
-static bool_t authgss_unwrap();
|
||
|
+#include "debug.h"
|
||
|
+
|
||
|
+static void authgss_nextverf(AUTH *);
|
||
|
+static bool_t authgss_marshal(AUTH *, XDR *);
|
||
|
+static bool_t authgss_refresh(AUTH *, void *);
|
||
|
+static bool_t authgss_validate(AUTH *, struct opaque_auth *);
|
||
|
+static void authgss_destroy(AUTH *);
|
||
|
+static void authgss_destroy_context(AUTH *);
|
||
|
+static bool_t authgss_wrap(AUTH *, XDR *, xdrproc_t, caddr_t);
|
||
|
+static bool_t authgss_unwrap(AUTH *, XDR *, xdrproc_t, caddr_t);
|
||
|
|
||
|
|
||
|
/*
|
||
|
@@ -78,7 +80,6 @@ static struct auth_ops authgss_ops = {
|
||
|
authgss_unwrap
|
||
|
};
|
||
|
|
||
|
-#ifdef DEBUG
|
||
|
|
||
|
/* useful as i add more mechanisms */
|
||
|
void
|
||
|
@@ -87,6 +88,9 @@ print_rpc_gss_sec(struct rpc_gss_sec *ptr)
|
||
|
int i;
|
||
|
char *p;
|
||
|
|
||
|
+ if (libtirpc_debug_level < 4 || log_stderr == 0)
|
||
|
+ return;
|
||
|
+
|
||
|
gss_log_debug("rpc_gss_sec:");
|
||
|
if(ptr->mech == NULL)
|
||
|
gss_log_debug("NULL gss_OID mech");
|
||
|
@@ -126,7 +130,6 @@ char *p;
|
||
|
fprintf(stderr, " service: %d\n", ptr->svc);
|
||
|
fprintf(stderr, " cred: %p\n", ptr->cred);
|
||
|
}
|
||
|
-#endif /*DEBUG*/
|
||
|
|
||
|
struct rpc_gss_data {
|
||
|
bool_t established; /* context established */
|
||
|
@@ -166,9 +169,7 @@ authgss_create(CLIENT *clnt, gss_name_t name, struct rpc_gss_sec *sec)
|
||
|
free(auth);
|
||
|
return (NULL);
|
||
|
}
|
||
|
-#ifdef DEBUG
|
||
|
- fprintf(stderr, "authgss_create: name is %p\n", name);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("authgss_create: name is %p", name));
|
||
|
if (name != GSS_C_NO_NAME) {
|
||
|
if (gss_duplicate_name(&min_stat, name, &gd->name)
|
||
|
!= GSS_S_COMPLETE) {
|
||
|
@@ -181,9 +182,7 @@ authgss_create(CLIENT *clnt, gss_name_t name, struct rpc_gss_sec *sec)
|
||
|
else
|
||
|
gd->name = name;
|
||
|
|
||
|
-#ifdef DEBUG
|
||
|
- fprintf(stderr, "authgss_create: gd->name is %p\n", gd->name);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("authgss_create: gd->name is %p", gd->name));
|
||
|
gd->clnt = clnt;
|
||
|
gd->ctx = GSS_C_NO_CONTEXT;
|
||
|
gd->sec = *sec;
|
||
|
@@ -198,7 +197,7 @@ authgss_create(CLIENT *clnt, gss_name_t name, struct rpc_gss_sec *sec)
|
||
|
save_auth = clnt->cl_auth;
|
||
|
clnt->cl_auth = auth;
|
||
|
|
||
|
- if (!authgss_refresh(auth))
|
||
|
+ if (!authgss_refresh(auth, NULL))
|
||
|
auth = NULL;
|
||
|
else
|
||
|
auth_get(auth); /* Reference for caller */
|
||
|
@@ -227,7 +226,8 @@ authgss_create_default(CLIENT *clnt, char *service, struct rpc_gss_sec *sec)
|
||
|
&name);
|
||
|
|
||
|
if (maj_stat != GSS_S_COMPLETE) {
|
||
|
- gss_log_status("gss_import_name", maj_stat, min_stat);
|
||
|
+ gss_log_status("authgss_create_default: gss_import_name",
|
||
|
+ maj_stat, min_stat);
|
||
|
rpc_createerr.cf_stat = RPC_AUTHERROR;
|
||
|
return (NULL);
|
||
|
}
|
||
|
@@ -235,9 +235,7 @@ authgss_create_default(CLIENT *clnt, char *service, struct rpc_gss_sec *sec)
|
||
|
auth = authgss_create(clnt, name, sec);
|
||
|
|
||
|
if (name != GSS_C_NO_NAME) {
|
||
|
-#ifdef DEBUG
|
||
|
- fprintf(stderr, "authgss_create_default: freeing name %p\n", name);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("authgss_create_default: freeing name %p", name));
|
||
|
gss_release_name(&min_stat, &name);
|
||
|
}
|
||
|
|
||
|
@@ -346,7 +344,8 @@ authgss_marshal(AUTH *auth, XDR *xdrs)
|
||
|
&rpcbuf, &checksum);
|
||
|
|
||
|
if (maj_stat != GSS_S_COMPLETE) {
|
||
|
- gss_log_status("gss_get_mic", maj_stat, min_stat);
|
||
|
+ gss_log_status("authgss_marshal: gss_get_mic",
|
||
|
+ maj_stat, min_stat);
|
||
|
if (maj_stat == GSS_S_CONTEXT_EXPIRED) {
|
||
|
gd->established = FALSE;
|
||
|
authgss_destroy_context(auth);
|
||
|
@@ -406,8 +405,10 @@ authgss_validate(AUTH *auth, struct opaque_auth *verf)
|
||
|
|
||
|
maj_stat = gss_verify_mic(&min_stat, gd->ctx, &signbuf,
|
||
|
&checksum, &qop_state);
|
||
|
+
|
||
|
if (maj_stat != GSS_S_COMPLETE || qop_state != gd->sec.qop) {
|
||
|
- gss_log_status("gss_verify_mic", maj_stat, min_stat);
|
||
|
+ gss_log_status("authgss_validate: gss_verify_mic",
|
||
|
+ maj_stat, min_stat);
|
||
|
if (maj_stat == GSS_S_CONTEXT_EXPIRED) {
|
||
|
gd->established = FALSE;
|
||
|
authgss_destroy_context(auth);
|
||
|
@@ -418,7 +419,7 @@ authgss_validate(AUTH *auth, struct opaque_auth *verf)
|
||
|
}
|
||
|
|
||
|
static bool_t
|
||
|
-authgss_refresh(AUTH *auth)
|
||
|
+authgss_refresh(AUTH *auth, void *dummy)
|
||
|
{
|
||
|
struct rpc_gss_data *gd;
|
||
|
struct rpc_gss_init_res gr;
|
||
|
@@ -436,19 +437,15 @@ authgss_refresh(AUTH *auth)
|
||
|
memset(&gr, 0, sizeof(gr));
|
||
|
recv_tokenp = GSS_C_NO_BUFFER;
|
||
|
|
||
|
-#ifdef DEBUG
|
||
|
print_rpc_gss_sec(&gd->sec);
|
||
|
-#endif /*DEBUG*/
|
||
|
|
||
|
for (;;) {
|
||
|
-#ifdef DEBUG
|
||
|
/* print the token we just received */
|
||
|
if (recv_tokenp != GSS_C_NO_BUFFER) {
|
||
|
gss_log_debug("The token we just received (length %d):",
|
||
|
recv_tokenp->length);
|
||
|
gss_log_hexdump(recv_tokenp->value, recv_tokenp->length, 0);
|
||
|
}
|
||
|
-#endif
|
||
|
maj_stat = gss_init_sec_context(&min_stat,
|
||
|
gd->sec.cred,
|
||
|
&gd->ctx,
|
||
|
@@ -469,18 +466,17 @@ authgss_refresh(AUTH *auth)
|
||
|
}
|
||
|
if (maj_stat != GSS_S_COMPLETE &&
|
||
|
maj_stat != GSS_S_CONTINUE_NEEDED) {
|
||
|
- gss_log_status("gss_init_sec_context", maj_stat, min_stat);
|
||
|
+ gss_log_status("authgss_refresh: gss_init_sec_context",
|
||
|
+ maj_stat, min_stat);
|
||
|
break;
|
||
|
}
|
||
|
if (send_token.length != 0) {
|
||
|
memset(&gr, 0, sizeof(gr));
|
||
|
|
||
|
-#ifdef DEBUG
|
||
|
/* print the token we are about to send */
|
||
|
gss_log_debug("The token being sent (length %d):",
|
||
|
send_token.length);
|
||
|
gss_log_hexdump(send_token.value, send_token.length, 0);
|
||
|
-#endif
|
||
|
|
||
|
call_stat = clnt_call(gd->clnt, NULLPROC,
|
||
|
(xdrproc_t)xdr_rpc_gss_init_args,
|
||
|
@@ -492,8 +488,17 @@ authgss_refresh(AUTH *auth)
|
||
|
|
||
|
if (call_stat != RPC_SUCCESS ||
|
||
|
(gr.gr_major != GSS_S_COMPLETE &&
|
||
|
- gr.gr_major != GSS_S_CONTINUE_NEEDED))
|
||
|
+ gr.gr_major != GSS_S_CONTINUE_NEEDED)) {
|
||
|
+ if (call_stat != RPC_SUCCESS) {
|
||
|
+ struct rpc_err err;
|
||
|
+ clnt_geterr(gd->clnt, &err);
|
||
|
+ LIBTIRPC_DEBUG(1, ("authgss_refresh: %s errno: %s",
|
||
|
+ clnt_sperrno(call_stat), strerror(err.re_errno)));
|
||
|
+ } else
|
||
|
+ gss_log_status("authgss_refresh:",
|
||
|
+ gr.gr_major, gr.gr_minor);
|
||
|
return FALSE;
|
||
|
+ }
|
||
|
|
||
|
if (gr.gr_ctx.length != 0) {
|
||
|
if (gd->gc.gc_ctx.value)
|
||
|
@@ -528,7 +533,8 @@ authgss_refresh(AUTH *auth)
|
||
|
|
||
|
if (maj_stat != GSS_S_COMPLETE
|
||
|
|| qop_state != gd->sec.qop) {
|
||
|
- gss_log_status("gss_verify_mic", maj_stat, min_stat);
|
||
|
+ gss_log_status("authgss_refresh: gss_verify_mic",
|
||
|
+ maj_stat, min_stat);
|
||
|
if (maj_stat == GSS_S_CONTEXT_EXPIRED) {
|
||
|
gd->established = FALSE;
|
||
|
authgss_destroy_context(auth);
|
||
|
@@ -629,9 +635,7 @@ authgss_destroy(AUTH *auth)
|
||
|
|
||
|
authgss_destroy_context(auth);
|
||
|
|
||
|
-#ifdef DEBUG
|
||
|
- fprintf(stderr, "authgss_destroy: freeing name %p\n", gd->name);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("authgss_destroy: freeing name %p", gd->name));
|
||
|
if (gd->name != GSS_C_NO_NAME)
|
||
|
gss_release_name(&min_stat, &gd->name);
|
||
|
|
||
|
@@ -639,7 +643,7 @@ authgss_destroy(AUTH *auth)
|
||
|
free(auth);
|
||
|
}
|
||
|
|
||
|
-bool_t
|
||
|
+static bool_t
|
||
|
authgss_wrap(AUTH *auth, XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr)
|
||
|
{
|
||
|
struct rpc_gss_data *gd;
|
||
|
@@ -656,7 +660,7 @@ authgss_wrap(AUTH *auth, XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr)
|
||
|
gd->sec.svc, gd->gc.gc_seq));
|
||
|
}
|
||
|
|
||
|
-bool_t
|
||
|
+static bool_t
|
||
|
authgss_unwrap(AUTH *auth, XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr)
|
||
|
{
|
||
|
struct rpc_gss_data *gd;
|
||
|
diff --git a/src/authgss_prot.c b/src/authgss_prot.c
|
||
|
index a3c93c9..669eab7 100644
|
||
|
--- a/src/authgss_prot.c
|
||
|
+++ b/src/authgss_prot.c
|
||
|
@@ -42,8 +42,11 @@
|
||
|
#include <rpc/auth.h>
|
||
|
#include <rpc/auth_gss.h>
|
||
|
#include <rpc/rpc.h>
|
||
|
+#include <ctype.h>
|
||
|
#include <gssapi/gssapi.h>
|
||
|
|
||
|
+#include "debug.h"
|
||
|
+
|
||
|
/* additional space needed for encoding */
|
||
|
#define RPC_SLACK_SPACE 1024
|
||
|
|
||
|
@@ -175,7 +178,8 @@ xdr_rpc_gss_wrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr,
|
||
|
maj_stat = gss_get_mic(&min_stat, ctx, qop,
|
||
|
&databuf, &wrapbuf);
|
||
|
if (maj_stat != GSS_S_COMPLETE) {
|
||
|
- gss_log_debug("gss_get_mic failed");
|
||
|
+ gss_log_status("xdr_rpc_gss_wrap_data: gss_get_mic",
|
||
|
+ maj_stat, min_stat);
|
||
|
return (FALSE);
|
||
|
}
|
||
|
/* Marshal checksum. */
|
||
|
@@ -189,7 +193,8 @@ xdr_rpc_gss_wrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr,
|
||
|
maj_stat = gss_wrap(&min_stat, ctx, TRUE, qop, &databuf,
|
||
|
&conf_state, &wrapbuf);
|
||
|
if (maj_stat != GSS_S_COMPLETE) {
|
||
|
- gss_log_status("gss_wrap", maj_stat, min_stat);
|
||
|
+ gss_log_status("xdr_rpc_gss_wrap_data: gss_wrap",
|
||
|
+ maj_stat, min_stat);
|
||
|
return (FALSE);
|
||
|
}
|
||
|
/* Marshal databody_priv. */
|
||
|
@@ -222,13 +227,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_rpc_gss_buf(xdrs, &databuf, (u_int)-1)) {
|
||
|
- gss_log_debug("xdr decode databody_integ failed");
|
||
|
+ LIBTIRPC_DEBUG(1, ("xdr_rpc_gss_unwrap_data: decode databody_integ failed"));
|
||
|
return (FALSE);
|
||
|
}
|
||
|
/* Decode checksum. */
|
||
|
if (!xdr_rpc_gss_buf(xdrs, &wrapbuf, (u_int)-1)) {
|
||
|
gss_release_buffer(&min_stat, &databuf);
|
||
|
- gss_log_debug("xdr decode checksum failed");
|
||
|
+ LIBTIRPC_DEBUG(1, ("xdr_rpc_gss_unwrap_data: decode checksum failed"));
|
||
|
return (FALSE);
|
||
|
}
|
||
|
/* Verify checksum and QOP. */
|
||
|
@@ -238,14 +243,15 @@ xdr_rpc_gss_unwrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr,
|
||
|
|
||
|
if (maj_stat != GSS_S_COMPLETE || qop_state != qop) {
|
||
|
gss_release_buffer(&min_stat, &databuf);
|
||
|
- gss_log_status("gss_verify_mic", maj_stat, min_stat);
|
||
|
+ gss_log_status("xdr_rpc_gss_unwrap_data: gss_verify_mic",
|
||
|
+ maj_stat, min_stat);
|
||
|
return (FALSE);
|
||
|
}
|
||
|
}
|
||
|
else if (svc == RPCSEC_GSS_SVC_PRIVACY) {
|
||
|
/* Decode databody_priv. */
|
||
|
if (!xdr_rpc_gss_buf(xdrs, &wrapbuf, (u_int)-1)) {
|
||
|
- gss_log_debug("xdr decode databody_priv failed");
|
||
|
+ LIBTIRPC_DEBUG(1, ("xdr_rpc_gss_unwrap_data: decode databody_priv failed"));
|
||
|
return (FALSE);
|
||
|
}
|
||
|
/* Decrypt databody. */
|
||
|
@@ -258,7 +264,8 @@ xdr_rpc_gss_unwrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr,
|
||
|
if (maj_stat != GSS_S_COMPLETE || qop_state != qop ||
|
||
|
conf_state != TRUE) {
|
||
|
gss_release_buffer(&min_stat, &databuf);
|
||
|
- gss_log_status("gss_unwrap", maj_stat, min_stat);
|
||
|
+ gss_log_status("xdr_rpc_gss_unwrap_data: gss_unwrap",
|
||
|
+ maj_stat, min_stat);
|
||
|
return (FALSE);
|
||
|
}
|
||
|
}
|
||
|
@@ -271,7 +278,8 @@ xdr_rpc_gss_unwrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr,
|
||
|
|
||
|
/* Verify sequence number. */
|
||
|
if (xdr_stat == TRUE && seq_num != seq) {
|
||
|
- gss_log_debug("wrong sequence number in databody");
|
||
|
+ LIBTIRPC_DEBUG(1,
|
||
|
+ ("xdr_rpc_gss_unwrap_data: wrong sequence number in databody"));
|
||
|
return (FALSE);
|
||
|
}
|
||
|
return (xdr_stat);
|
||
|
@@ -296,39 +304,32 @@ xdr_rpc_gss_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr,
|
||
|
return (FALSE);
|
||
|
}
|
||
|
|
||
|
-#ifdef DEBUG
|
||
|
-#include <ctype.h>
|
||
|
-
|
||
|
void
|
||
|
gss_log_debug(const char *fmt, ...)
|
||
|
{
|
||
|
va_list ap;
|
||
|
|
||
|
va_start(ap, fmt);
|
||
|
- fprintf(stderr, "rpcsec_gss: ");
|
||
|
- vfprintf(stderr, fmt, ap);
|
||
|
- fprintf(stderr, "\n");
|
||
|
+ vlibtirpc_log_dbg(2, fmt, ap);
|
||
|
va_end(ap);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
gss_log_status(char *m, OM_uint32 maj_stat, OM_uint32 min_stat)
|
||
|
{
|
||
|
- OM_uint32 min;
|
||
|
- gss_buffer_desc msg;
|
||
|
- int msg_ctx = 0;
|
||
|
+ OM_uint32 min, maj;
|
||
|
+ gss_buffer_desc maj_msg, min_msg;
|
||
|
+ u_int32_t msg_ctx = 0;
|
||
|
|
||
|
- fprintf(stderr, "rpcsec_gss: %s: ", m);
|
||
|
+ gss_display_status(&maj, maj_stat, GSS_C_GSS_CODE, GSS_C_NULL_OID,
|
||
|
+ &msg_ctx, &maj_msg);
|
||
|
+ gss_display_status(&min, min_stat, GSS_C_MECH_CODE, GSS_C_NULL_OID,
|
||
|
+ &msg_ctx, &min_msg);
|
||
|
|
||
|
- gss_display_status(&min, maj_stat, GSS_C_GSS_CODE, GSS_C_NULL_OID,
|
||
|
- &msg_ctx, &msg);
|
||
|
- fprintf(stderr, "%s - ", (char *)msg.value);
|
||
|
- gss_release_buffer(&min, &msg);
|
||
|
+ LIBTIRPC_DEBUG(1, ("%s: %s - %s", m, (char *)maj_msg.value, (char *)min_msg.value));
|
||
|
|
||
|
- gss_display_status(&min, min_stat, GSS_C_MECH_CODE, GSS_C_NULL_OID,
|
||
|
- &msg_ctx, &msg);
|
||
|
- fprintf(stderr, "%s\n", (char *)msg.value);
|
||
|
- gss_release_buffer(&min, &msg);
|
||
|
+ gss_release_buffer(&maj, &maj_msg);
|
||
|
+ gss_release_buffer(&min, &min_msg);
|
||
|
}
|
||
|
|
||
|
void
|
||
|
@@ -337,6 +338,9 @@ gss_log_hexdump(const u_char *buf, int len, int offset)
|
||
|
u_int i, j, jm;
|
||
|
int c;
|
||
|
|
||
|
+ if (libtirpc_debug_level < 4 || log_stderr == 0)
|
||
|
+ return;
|
||
|
+
|
||
|
fprintf(stderr, "\n");
|
||
|
for (i = 0; i < len; i += 0x10) {
|
||
|
fprintf(stderr, " %04x: ", (u_int)(i + offset));
|
||
|
@@ -364,23 +368,3 @@ gss_log_hexdump(const u_char *buf, int len, int offset)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
-#else
|
||
|
-
|
||
|
-void
|
||
|
-gss_log_debug(const char *fmt, ...)
|
||
|
-{
|
||
|
-}
|
||
|
-
|
||
|
-void
|
||
|
-gss_log_status(char *m, OM_uint32 maj_stat, OM_uint32 min_stat)
|
||
|
-{
|
||
|
-}
|
||
|
-
|
||
|
-void
|
||
|
-gss_log_hexdump(const u_char *buf, int len, int offset)
|
||
|
-{
|
||
|
-}
|
||
|
-
|
||
|
-#endif
|
||
|
-
|
||
|
-
|
||
|
diff --git a/src/clnt_bcast.c b/src/clnt_bcast.c
|
||
|
index 1055545..373d8a5 100644
|
||
|
--- a/src/clnt_bcast.c
|
||
|
+++ b/src/clnt_bcast.c
|
||
|
@@ -55,9 +55,7 @@
|
||
|
#endif /* PORTMAP */
|
||
|
#include <rpc/nettype.h>
|
||
|
#include <arpa/inet.h>
|
||
|
-#ifdef RPC_DEBUG
|
||
|
#include <stdio.h>
|
||
|
-#endif
|
||
|
#include <errno.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <unistd.h>
|
||
|
@@ -66,6 +64,7 @@
|
||
|
#include <string.h>
|
||
|
|
||
|
#include "rpc_com.h"
|
||
|
+#include "debug.h"
|
||
|
|
||
|
#define MAXBCAST 20 /* Max no of broadcasting transports */
|
||
|
#define INITTIME 4000 /* Time to wait initially */
|
||
|
@@ -454,20 +453,15 @@ rpc_broadcast_exp(prog, vers, proc, xargs, argsp, xresults, resultsp,
|
||
|
outlen, 0, (struct sockaddr*)addr,
|
||
|
(size_t)fdlist[i].asize) !=
|
||
|
outlen) {
|
||
|
-#ifdef RPC_DEBUG
|
||
|
- perror("sendto");
|
||
|
-#endif
|
||
|
- warnx("clnt_bcast: cannot send"
|
||
|
- "broadcast packet");
|
||
|
+ LIBTIRPC_DEBUG(1,
|
||
|
+ ("rpc_broadcast_exp: sendto failed: errno %d", errno));
|
||
|
+ warnx("rpc_broadcast_exp: cannot send broadcast packet");
|
||
|
stat = RPC_CANTSEND;
|
||
|
continue;
|
||
|
};
|
||
|
-#ifdef RPC_DEBUG
|
||
|
if (!__rpc_lowvers)
|
||
|
- fprintf(stderr, "Broadcast packet sent "
|
||
|
- "for %s\n",
|
||
|
- fdlist[i].nconf->nc_netid);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("rpc_broadcast_exp: Broadcast packet sent for %s\n",
|
||
|
+ fdlist[i].nconf->nc_netid));
|
||
|
#ifdef PORTMAP
|
||
|
/*
|
||
|
* Send the version 2 packet also
|
||
|
@@ -485,11 +479,8 @@ rpc_broadcast_exp(prog, vers, proc, xargs, argsp, xresults, resultsp,
|
||
|
continue;
|
||
|
}
|
||
|
}
|
||
|
-#ifdef RPC_DEBUG
|
||
|
- fprintf(stderr, "PMAP Broadcast packet "
|
||
|
- "sent for %s\n",
|
||
|
- fdlist[i].nconf->nc_netid);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("rpc_broadcast_exp: PMAP Broadcast packet sent for %s\n",
|
||
|
+ fdlist[i].nconf->nc_netid));
|
||
|
#endif /* PORTMAP */
|
||
|
}
|
||
|
/* End for sending all packets on this transport */
|
||
|
@@ -532,10 +523,8 @@ rpc_broadcast_exp(prog, vers, proc, xargs, argsp, xresults, resultsp,
|
||
|
continue;
|
||
|
} else
|
||
|
fds_found++;
|
||
|
-#ifdef RPC_DEBUG
|
||
|
- fprintf(stderr, "response for %s\n",
|
||
|
- fdlist[i].nconf->nc_netid);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("rpc_broadcast_exp: response for %s\n",
|
||
|
+ fdlist[i].nconf->nc_netid));
|
||
|
try_again:
|
||
|
inlen = recvfrom(fdlist[i].fd, inbuf, fdlist[i].dsize,
|
||
|
0, (struct sockaddr *)(void *)&fdlist[i].raddr,
|
||
|
@@ -596,10 +585,7 @@ rpc_broadcast_exp(prog, vers, proc, xargs, argsp, xresults, resultsp,
|
||
|
&taddr, fdlist[i].nconf);
|
||
|
} else {
|
||
|
#endif /* PORTMAP */
|
||
|
-#ifdef RPC_DEBUG
|
||
|
- fprintf(stderr, "uaddr %s\n",
|
||
|
- uaddrp);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("rpc_broadcast_exp: uaddr %s\n", uaddrp));
|
||
|
np = uaddr2taddr(
|
||
|
fdlist[i].nconf, uaddrp);
|
||
|
done = (*eachresult)(resultsp,
|
||
|
diff --git a/src/debug.c b/src/debug.c
|
||
|
new file mode 100644
|
||
|
index 0000000..b40ff37
|
||
|
--- /dev/null
|
||
|
+++ b/src/debug.c
|
||
|
@@ -0,0 +1,65 @@
|
||
|
+/*
|
||
|
+ * debug.c -- debugging routines for libtirpc
|
||
|
+ *
|
||
|
+ * Copyright (C) 2014 Red Hat, Steve Dickson <steved@redhat.com>
|
||
|
+ *
|
||
|
+ * This program is free software; you can redistribute it and/or
|
||
|
+ * modify it under the terms of the GNU General Public License
|
||
|
+ * as published by the Free Software Foundation; either version 2
|
||
|
+ * of the License, or (at your option) any later version.
|
||
|
+ *
|
||
|
+ * This program is distributed in the hope that it will be useful,
|
||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+ * GNU General Public License for more details.
|
||
|
+ *
|
||
|
+ * You should have received a copy of the GNU General Public License
|
||
|
+ * along with this program; if not, write to the Free Software
|
||
|
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||
|
+ * Boston, MA 02110-1301, USA.
|
||
|
+ */
|
||
|
+#include <sys/types.h>
|
||
|
+#include <stdio.h>
|
||
|
+#include <stdarg.h>
|
||
|
+#include <unistd.h>
|
||
|
+#include <syslog.h>
|
||
|
+#include <string.h>
|
||
|
+
|
||
|
+#include "debug.h"
|
||
|
+
|
||
|
+/* library global debug level */
|
||
|
+int libtirpc_debug_level = 0;
|
||
|
+int log_stderr = 1; /* log to stderr instead of systlog */
|
||
|
+
|
||
|
+/*
|
||
|
+ * Set the debug level for the entire library.
|
||
|
+ * Different area will used the value to determin
|
||
|
+ * the verbosity of the debugging output.
|
||
|
+ */
|
||
|
+void
|
||
|
+libtirpc_set_debug(char *name, int level, int use_stderr)
|
||
|
+{
|
||
|
+ if (level < 0)
|
||
|
+ level = 0;
|
||
|
+
|
||
|
+ log_stderr = use_stderr;
|
||
|
+ if (!use_stderr)
|
||
|
+ openlog(name, LOG_PID, LOG_DAEMON);
|
||
|
+
|
||
|
+ libtirpc_debug_level = level;
|
||
|
+ LIBTIRPC_DEBUG(1, ("libtirpc: debug level %d", libtirpc_debug_level));
|
||
|
+}
|
||
|
+
|
||
|
+void
|
||
|
+libtirpc_log_dbg(char *fmt, ...)
|
||
|
+{
|
||
|
+ va_list args;
|
||
|
+
|
||
|
+ va_start(args, fmt);
|
||
|
+ if (log_stderr) {
|
||
|
+ vfprintf(stderr, fmt, args);
|
||
|
+ fprintf(stderr, "\n");
|
||
|
+ } else
|
||
|
+ vsyslog(LOG_NOTICE, fmt, args);
|
||
|
+ va_end(args);
|
||
|
+}
|
||
|
diff --git a/src/debug.h b/src/debug.h
|
||
|
new file mode 100644
|
||
|
index 0000000..c971ac3
|
||
|
--- /dev/null
|
||
|
+++ b/src/debug.h
|
||
|
@@ -0,0 +1,51 @@
|
||
|
+/*
|
||
|
+ * debug.h -- debugging routines for libtirpc
|
||
|
+ *
|
||
|
+ * Copyright (C) 2014 Red Hat, Steve Dickson <steved@redhat.com>
|
||
|
+ *
|
||
|
+ * This program is free software; you can redistribute it and/or
|
||
|
+ * modify it under the terms of the GNU General Public License
|
||
|
+ * as published by the Free Software Foundation; either version 2
|
||
|
+ * of the License, or (at your option) any later version.
|
||
|
+ *
|
||
|
+ * This program is distributed in the hope that it will be useful,
|
||
|
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
+ * GNU General Public License for more details.
|
||
|
+ *
|
||
|
+ * You should have received a copy of the GNU General Public License
|
||
|
+ * along with this program; if not, write to the Free Software
|
||
|
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||
|
+ * Boston, MA 02110-1301, USA.
|
||
|
+ */
|
||
|
+
|
||
|
+#ifndef _DEBUG_H
|
||
|
+#define _DEBUG_H
|
||
|
+
|
||
|
+#include <stdarg.h>
|
||
|
+#include <syslog.h>
|
||
|
+
|
||
|
+extern int libtirpc_debug_level;
|
||
|
+extern int log_stderr;
|
||
|
+
|
||
|
+void libtirpc_log_dbg(char *format, ...);
|
||
|
+void libtirpc_set_debug(char *name, int level, int use_stderr);
|
||
|
+
|
||
|
+#define LIBTIRPC_DEBUG(level, msg) \
|
||
|
+ do { \
|
||
|
+ if (level <= libtirpc_debug_level) \
|
||
|
+ libtirpc_log_dbg msg; \
|
||
|
+ } while (0)
|
||
|
+
|
||
|
+static inline void
|
||
|
+vlibtirpc_log_dbg(int level, const char *fmt, va_list args)
|
||
|
+{
|
||
|
+ if (level <= libtirpc_debug_level) {
|
||
|
+ if (log_stderr) {
|
||
|
+ vfprintf(stderr, fmt, args);
|
||
|
+ fprintf(stderr, "\n");
|
||
|
+ } else
|
||
|
+ vsyslog(LOG_NOTICE, fmt, args);
|
||
|
+ }
|
||
|
+}
|
||
|
+#endif /* _DEBUG_H */
|
||
|
diff --git a/src/getpublickey.c b/src/getpublickey.c
|
||
|
index 332c725..85935d8 100644
|
||
|
--- a/src/getpublickey.c
|
||
|
+++ b/src/getpublickey.c
|
||
|
@@ -46,6 +46,8 @@
|
||
|
#include <string.h>
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
+#include "debug.h"
|
||
|
+
|
||
|
#define PKFILE "/etc/publickey"
|
||
|
|
||
|
/*
|
||
|
@@ -120,9 +122,8 @@ getpublicandprivatekey(key, ret)
|
||
|
lookup = NULL;
|
||
|
err = yp_match(domain, PKMAP, key, strlen(key), &lookup, &len);
|
||
|
if (err) {
|
||
|
-#ifdef DEBUG
|
||
|
- fprintf(stderr, "match failed error %d\n", err);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(1,
|
||
|
+ ("getpublicandprivatekey: match failed error %d\n", err));
|
||
|
continue;
|
||
|
}
|
||
|
lookup[len] = 0;
|
||
|
@@ -131,10 +132,8 @@ getpublicandprivatekey(key, ret)
|
||
|
free(lookup);
|
||
|
return (2);
|
||
|
#else /* YP */
|
||
|
-#ifdef DEBUG
|
||
|
- fprintf(stderr,
|
||
|
-"Bad record in %s '+' -- NIS not supported in this library copy\n", PKFILE);
|
||
|
-#endif /* DEBUG */
|
||
|
+ LIBTIRPC_DEBUG(1,
|
||
|
+("Bad record in %s '+' -- NIS not supported in this library copy\n", PKFILE));
|
||
|
continue;
|
||
|
#endif /* YP */
|
||
|
} else {
|
||
|
diff --git a/src/key_call.c b/src/key_call.c
|
||
|
index 906b2f6..8b9f388 100644
|
||
|
--- a/src/key_call.c
|
||
|
+++ b/src/key_call.c
|
||
|
@@ -59,16 +59,11 @@
|
||
|
#include <sys/wait.h>
|
||
|
#include <sys/fcntl.h>
|
||
|
|
||
|
+#include "dump.h"
|
||
|
|
||
|
#define KEY_TIMEOUT 5 /* per-try timeout in seconds */
|
||
|
#define KEY_NRETRY 12 /* number of retries */
|
||
|
|
||
|
-#ifdef DEBUG
|
||
|
-#define debug(msg) (void) fprintf(stderr, "%s\n", msg);
|
||
|
-#else
|
||
|
-#define debug(msg)
|
||
|
-#endif /* DEBUG */
|
||
|
-
|
||
|
/*
|
||
|
* Hack to allow the keyserver to use AUTH_DES (for authenticated
|
||
|
* NIS+ calls, for example). The only functions that get called
|
||
|
@@ -96,7 +91,7 @@ key_setsecret(secretkey)
|
||
|
return (-1);
|
||
|
}
|
||
|
if (status != KEY_SUCCESS) {
|
||
|
- debug("set status is nonzero");
|
||
|
+ LIBTIRPC_DEBUG(1, ("key_setsecret: set status is nonzero"));
|
||
|
return (-1);
|
||
|
}
|
||
|
return (0);
|
||
|
@@ -144,7 +139,7 @@ key_encryptsession_pk(remotename, remotekey, deskey)
|
||
|
return (-1);
|
||
|
}
|
||
|
if (res.status != KEY_SUCCESS) {
|
||
|
- debug("encrypt status is nonzero");
|
||
|
+ LIBTIRPC_DEBUG(1, ("key_encryptsession_pk: encrypt status is nonzero"));
|
||
|
return (-1);
|
||
|
}
|
||
|
*deskey = res.cryptkeyres_u.deskey;
|
||
|
@@ -168,7 +163,7 @@ key_decryptsession_pk(remotename, remotekey, deskey)
|
||
|
return (-1);
|
||
|
}
|
||
|
if (res.status != KEY_SUCCESS) {
|
||
|
- debug("decrypt status is nonzero");
|
||
|
+ LIBTIRPC_DEBUG(1, ("key_decryptsession_pk: decrypt status is nonzero"));
|
||
|
return (-1);
|
||
|
}
|
||
|
*deskey = res.cryptkeyres_u.deskey;
|
||
|
@@ -190,7 +185,7 @@ key_encryptsession(remotename, deskey)
|
||
|
return (-1);
|
||
|
}
|
||
|
if (res.status != KEY_SUCCESS) {
|
||
|
- debug("encrypt status is nonzero");
|
||
|
+ LIBTIRPC_DEBUG(1, ("key_encryptsession: encrypt status is nonzero"));
|
||
|
return (-1);
|
||
|
}
|
||
|
*deskey = res.cryptkeyres_u.deskey;
|
||
|
@@ -212,7 +207,7 @@ key_decryptsession(remotename, deskey)
|
||
|
return (-1);
|
||
|
}
|
||
|
if (res.status != KEY_SUCCESS) {
|
||
|
- debug("decrypt status is nonzero");
|
||
|
+ LIBTIRPC_DEBUG(1, ("key_decryptsession: decrypt status is nonzero"));
|
||
|
return (-1);
|
||
|
}
|
||
|
*deskey = res.cryptkeyres_u.deskey;
|
||
|
@@ -243,7 +238,7 @@ struct key_netstarg *arg;
|
||
|
}
|
||
|
|
||
|
if (status != KEY_SUCCESS) {
|
||
|
- debug("key_setnet status is nonzero");
|
||
|
+ LIBTIRPC_DEBUG(1, ("key_setnet: key_setnet status is nonzero"));
|
||
|
return (-1);
|
||
|
}
|
||
|
return (1);
|
||
|
@@ -262,7 +257,7 @@ key_get_conv(pkey, deskey)
|
||
|
return (-1);
|
||
|
}
|
||
|
if (res.status != KEY_SUCCESS) {
|
||
|
- debug("get_conv status is nonzero");
|
||
|
+ LIBTIRPC_DEBUG(1, ("key_get_conv: get_conv status is nonzero"));
|
||
|
return (-1);
|
||
|
}
|
||
|
*deskey = res.cryptkeyres_u.deskey;
|
||
|
diff --git a/src/netnamer.c b/src/netnamer.c
|
||
|
index 9b3b7dc..53ba73b 100644
|
||
|
--- a/src/netnamer.c
|
||
|
+++ b/src/netnamer.c
|
||
|
@@ -47,6 +47,8 @@
|
||
|
#include <stdlib.h>
|
||
|
#include <unistd.h>
|
||
|
|
||
|
+#include "debug.h"
|
||
|
+
|
||
|
static char *OPSYS = "unix";
|
||
|
static char *NETID = "netid.byname";
|
||
|
static char *NETIDFILE = "/etc/netid";
|
||
|
@@ -159,10 +161,8 @@ _getgroups(uname, groups)
|
||
|
for (i = 0; grp->gr_mem[i]; i++)
|
||
|
if (!strcmp(grp->gr_mem[i], uname)) {
|
||
|
if (ngroups == NGROUPS) {
|
||
|
-#ifdef DEBUG
|
||
|
- fprintf(stderr,
|
||
|
- "initgroups: %s is in too many groups\n", uname);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(1,
|
||
|
+ ("_getgroups: %s is in too many groups\n", uname));
|
||
|
goto toomany;
|
||
|
}
|
||
|
/* filter out duplicate group entries */
|
||
|
@@ -279,9 +279,7 @@ getnetid(key, ret)
|
||
|
err = yp_match(domain, NETID, key,
|
||
|
strlen(key), &lookup, &len);
|
||
|
if (err) {
|
||
|
-#ifdef DEBUG
|
||
|
- fprintf(stderr, "match failed error %d\n", err);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(1, ("getnetid: match failed error %d", err));
|
||
|
continue;
|
||
|
}
|
||
|
lookup[len] = 0;
|
||
|
@@ -291,11 +289,9 @@ getnetid(key, ret)
|
||
|
fclose(fd);
|
||
|
return (2);
|
||
|
#else /* YP */
|
||
|
-#ifdef DEBUG
|
||
|
- fprintf(stderr,
|
||
|
-"Bad record in %s '+' -- NIS not supported in this library copy\n",
|
||
|
- NETIDFILE);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(1,
|
||
|
+("Bad record in %s '+' -- NIS not supported in this library copy\n",
|
||
|
+ NETIDFILE));
|
||
|
continue;
|
||
|
#endif /* YP */
|
||
|
} else {
|
||
|
diff --git a/src/rpcb_clnt.c b/src/rpcb_clnt.c
|
||
|
index e9b7b5d..a796593 100644
|
||
|
--- a/src/rpcb_clnt.c
|
||
|
+++ b/src/rpcb_clnt.c
|
||
|
@@ -54,6 +54,7 @@
|
||
|
#include <assert.h>
|
||
|
|
||
|
#include "rpc_com.h"
|
||
|
+#include "debug.h"
|
||
|
|
||
|
static struct timeval tottimeout = { 60, 0 };
|
||
|
static const struct timeval rmttimeout = { 3, 0 };
|
||
|
@@ -152,10 +153,8 @@ check_cache(host, netid)
|
||
|
for (cptr = front; cptr != NULL; cptr = cptr->ac_next) {
|
||
|
if (!strcmp(cptr->ac_host, host) &&
|
||
|
!strcmp(cptr->ac_netid, netid)) {
|
||
|
-#ifdef ND_DEBUG
|
||
|
- fprintf(stderr, "Found cache entry for %s: %s\n",
|
||
|
- host, netid);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("check_cache: Found cache entry for %s: %s\n",
|
||
|
+ host, netid));
|
||
|
return (cptr);
|
||
|
}
|
||
|
}
|
||
|
@@ -214,9 +213,7 @@ add_cache(host, netid, taddr, uaddr)
|
||
|
if (ad_cache->ac_taddr->buf == NULL)
|
||
|
goto out_free;
|
||
|
memcpy(ad_cache->ac_taddr->buf, taddr->buf, taddr->len);
|
||
|
-#ifdef ND_DEBUG
|
||
|
- fprintf(stderr, "Added to cache: %s : %s\n", host, netid);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("add_cache: Added to cache: %s : %s\n", host, netid));
|
||
|
|
||
|
/* VARIABLES PROTECTED BY rpcbaddr_cache_lock: cptr */
|
||
|
|
||
|
@@ -234,10 +231,8 @@ add_cache(host, netid, taddr, uaddr)
|
||
|
cptr = cptr->ac_next;
|
||
|
}
|
||
|
|
||
|
-#ifdef ND_DEBUG
|
||
|
- fprintf(stderr, "Deleted from cache: %s : %s\n",
|
||
|
- cptr->ac_host, cptr->ac_netid);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("add_cache: Deleted from cache: %s : %s\n",
|
||
|
+ cptr->ac_host, cptr->ac_netid));
|
||
|
free(cptr->ac_host);
|
||
|
free(cptr->ac_netid);
|
||
|
free(cptr->ac_taddr->buf);
|
||
|
@@ -338,17 +333,14 @@ getclnthandle(host, nconf, targaddr)
|
||
|
hints.ai_socktype = si.si_socktype;
|
||
|
hints.ai_protocol = si.si_proto;
|
||
|
|
||
|
-#ifdef CLNT_DEBUG
|
||
|
- printf("trying netid %s family %d proto %d socktype %d\n",
|
||
|
- nconf->nc_netid, si.si_af, si.si_proto, si.si_socktype);
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("getclnthandle: trying netid %s family %d proto %d socktype %d\n",
|
||
|
+ nconf->nc_netid, si.si_af, si.si_proto, si.si_socktype));
|
||
|
|
||
|
if (nconf->nc_protofmly != NULL && strcmp(nconf->nc_protofmly, NC_LOOPBACK) == 0) {
|
||
|
client = local_rpcb();
|
||
|
if (! client) {
|
||
|
-#ifdef ND_DEBUG
|
||
|
- clnt_pcreateerror("rpcbind clnt interface");
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(1, ("getclnthandle: %s",
|
||
|
+ clnt_spcreateerror("local_rpcb failed")));
|
||
|
goto out_err;
|
||
|
} else {
|
||
|
struct sockaddr_un sun;
|
||
|
@@ -370,19 +362,13 @@ getclnthandle(host, nconf, targaddr)
|
||
|
taddr.buf = tres->ai_addr;
|
||
|
taddr.len = taddr.maxlen = tres->ai_addrlen;
|
||
|
|
||
|
-#ifdef ND_DEBUG
|
||
|
- {
|
||
|
+ if (libtirpc_debug_level > 3 && log_stderr) {
|
||
|
char *ua;
|
||
|
+ int i;
|
||
|
|
||
|
ua = taddr2uaddr(nconf, &taddr);
|
||
|
- fprintf(stderr, "Got it [%s]\n", ua);
|
||
|
+ fprintf(stderr, "Got it [%s]\n", ua);
|
||
|
free(ua);
|
||
|
- }
|
||
|
-#endif
|
||
|
-
|
||
|
-#ifdef ND_DEBUG
|
||
|
- {
|
||
|
- int i;
|
||
|
|
||
|
fprintf(stderr, "\tnetbuf len = %d, maxlen = %d\n",
|
||
|
taddr.len, taddr.maxlen);
|
||
|
@@ -391,14 +377,13 @@ getclnthandle(host, nconf, targaddr)
|
||
|
fprintf(stderr, "%u.", ((char *)(taddr.buf))[i]);
|
||
|
fprintf(stderr, "\n");
|
||
|
}
|
||
|
-#endif
|
||
|
+
|
||
|
client = clnt_tli_create(RPC_ANYFD, nconf, &taddr,
|
||
|
(rpcprog_t)RPCBPROG, (rpcvers_t)RPCBVERS4, 0, 0);
|
||
|
-#ifdef ND_DEBUG
|
||
|
if (! client) {
|
||
|
- clnt_pcreateerror("rpcbind clnt interface");
|
||
|
+ LIBTIRPC_DEBUG(1, ("getclnthandle: %s",
|
||
|
+ clnt_spcreateerror("clnt_tli_create failed")));
|
||
|
}
|
||
|
-#endif
|
||
|
|
||
|
if (client) {
|
||
|
tmpaddr = targaddr ? taddr2uaddr(nconf, &taddr) : NULL;
|
||
|
@@ -641,13 +626,8 @@ got_entry(relp, nconf)
|
||
|
(nconf->nc_semantics == rmap->r_nc_semantics) &&
|
||
|
(rmap->r_maddr != NULL) && (rmap->r_maddr[0] != 0)) {
|
||
|
na = uaddr2taddr(nconf, rmap->r_maddr);
|
||
|
-#ifdef ND_DEBUG
|
||
|
- fprintf(stderr, "\tRemote address is [%s].\n",
|
||
|
- rmap->r_maddr);
|
||
|
- if (!na)
|
||
|
- fprintf(stderr,
|
||
|
- "\tCouldn't resolve remote address!\n");
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("got_entry: Remote address is [%s] %s",
|
||
|
+ rmap->r_maddr, (na ? "Resolvable" : "Not Resolvable")));
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
@@ -875,12 +855,9 @@ try_rpcbind:
|
||
|
goto error;
|
||
|
}
|
||
|
address = uaddr2taddr(nconf, ua);
|
||
|
-#ifdef ND_DEBUG
|
||
|
- fprintf(stderr, "\tRemote address is [%s]\n", ua);
|
||
|
- if (!address)
|
||
|
- fprintf(stderr,
|
||
|
- "\tCouldn't resolve remote address!\n");
|
||
|
-#endif
|
||
|
+ LIBTIRPC_DEBUG(3, ("__rpcb_findaddr_timed: Remote address is [%s] %s",
|
||
|
+ ua, (address ? "Resolvable" : "Not Resolvable")));
|
||
|
+
|
||
|
xdr_free((xdrproc_t)xdr_wrapstring,
|
||
|
(char *)(void *)&ua);
|
||
|
|
||
|
diff --git a/src/svc_auth_des.c b/src/svc_auth_des.c
|
||
|
index e0ff6cb..08e2bee 100644
|
||
|
--- a/src/svc_auth_des.c
|
||
|
+++ b/src/svc_auth_des.c
|
||
|
@@ -64,9 +64,9 @@
|
||
|
#include <libc_private.h>
|
||
|
#endif
|
||
|
|
||
|
-extern int key_decryptsession_pk(const char *, netobj *, des_block *);
|
||
|
+#include "debug.h"
|
||
|
|
||
|
-#define debug(msg) printf("svcauth_des: %s\n", msg)
|
||
|
+extern int key_decryptsession_pk(const char *, netobj *, des_block *);
|
||
|
|
||
|
#define USEC_PER_SEC ((u_long) 1000000L)
|
||
|
#define BEFORE(t1, t2) timercmp(t1, t2, <)
|
||
|
@@ -178,20 +178,20 @@ _svcauth_des(rqst, msg)
|
||
|
|
||
|
sessionkey = &cred->adc_fullname.key;
|
||
|
if (! getpublickey(cred->adc_fullname.name, pkey_data)) {
|
||
|
- debug("getpublickey");
|
||
|
+ LIBTIRPC_DEBUG(1, ("_svcauth_des: getpublickey failed"));
|
||
|
return(AUTH_BADCRED);
|
||
|
}
|
||
|
pkey.n_bytes = pkey_data;
|
||
|
pkey.n_len = strlen(pkey_data) + 1;
|
||
|
if (key_decryptsession_pk(cred->adc_fullname.name, &pkey,
|
||
|
sessionkey) < 0) {
|
||
|
- debug("decryptsessionkey");
|
||
|
+ LIBTIRPC_DEBUG(1, ("_svcauth_des: key_decryptsessionkey failed"));
|
||
|
return (AUTH_BADCRED); /* key not found */
|
||
|
}
|
||
|
} else { /* ADN_NICKNAME */
|
||
|
sid = (short)cred->adc_nickname;
|
||
|
if (sid < 0 || sid >= AUTHDES_CACHESZ) {
|
||
|
- debug("bad nickname");
|
||
|
+ LIBTIRPC_DEBUG(1, ("_svcauth_des: bad nickname"));
|
||
|
return (AUTH_BADCRED); /* garbled credential */
|
||
|
}
|
||
|
sessionkey = &authdes_cache[sid].key;
|
||
|
@@ -214,7 +214,7 @@ _svcauth_des(rqst, msg)
|
||
|
sizeof(des_block), DES_DECRYPT | DES_HW);
|
||
|
}
|
||
|
if (DES_FAILED(status)) {
|
||
|
- debug("decryption failure");
|
||
|
+ LIBTIRPC_DEBUG(1, ("_svcauth_des: decryption failure"));
|
||
|
return (AUTH_FAILED); /* system error */
|
||
|
}
|
||
|
|
||
|
@@ -240,13 +240,13 @@ _svcauth_des(rqst, msg)
|
||
|
window = IXDR_GET_U_LONG(ixdr);
|
||
|
winverf = IXDR_GET_U_LONG(ixdr);
|
||
|
if (winverf != window - 1) {
|
||
|
- debug("window verifier mismatch");
|
||
|
+ LIBTIRPC_DEBUG(1, ("_svcauth_des: window verifier mismatch"));
|
||
|
return (AUTH_BADCRED); /* garbled credential */
|
||
|
}
|
||
|
sid = cache_spot(sessionkey, cred->adc_fullname.name,
|
||
|
×tamp);
|
||
|
if (sid < 0) {
|
||
|
- debug("replayed credential");
|
||
|
+ LIBTIRPC_DEBUG(1, ("_svcauth_des: replayed credential"));
|
||
|
return (AUTH_REJECTEDCRED); /* replay */
|
||
|
}
|
||
|
nick = 0;
|
||
|
@@ -256,19 +256,19 @@ _svcauth_des(rqst, msg)
|
||
|
}
|
||
|
|
||
|
if ((u_long)timestamp.tv_usec >= USEC_PER_SEC) {
|
||
|
- debug("invalid usecs");
|
||
|
+ LIBTIRPC_DEBUG(1, ("_svcauth_des: invalid usecs"));
|
||
|
/* cached out (bad key), or garbled verifier */
|
||
|
return (nick ? AUTH_REJECTEDVERF : AUTH_BADVERF);
|
||
|
}
|
||
|
if (nick && BEFORE(×tamp,
|
||
|
&authdes_cache[sid].laststamp)) {
|
||
|
- debug("timestamp before last seen");
|
||
|
+ LIBTIRPC_DEBUG(1, ("_svcauth_des: timestamp before last seen"));
|
||
|
return (AUTH_REJECTEDVERF); /* replay */
|
||
|
}
|
||
|
(void) gettimeofday(¤t, (struct timezone *)NULL);
|
||
|
current.tv_sec -= window; /* allow for expiration */
|
||
|
if (!BEFORE(¤t, ×tamp)) {
|
||
|
- debug("timestamp expired");
|
||
|
+ LIBTIRPC_DEBUG(1, ("_svcauth_des: timestamp expired"));
|
||
|
/* replay, or garbled credential */
|
||
|
return (nick ? AUTH_REJECTEDVERF : AUTH_BADCRED);
|
||
|
}
|
||
|
@@ -292,7 +292,7 @@ _svcauth_des(rqst, msg)
|
||
|
status = ecb_crypt((char *)sessionkey, (char *)cryptbuf,
|
||
|
sizeof(des_block), DES_ENCRYPT | DES_HW);
|
||
|
if (DES_FAILED(status)) {
|
||
|
- debug("encryption failure");
|
||
|
+ LIBTIRPC_DEBUG(1, ("_svcauth_des: encryption failure"));
|
||
|
return (AUTH_FAILED); /* system error */
|
||
|
}
|
||
|
verf.adv_xtimestamp = cryptbuf[0];
|
||
|
@@ -328,7 +328,7 @@ _svcauth_des(rqst, msg)
|
||
|
if (entry->rname != NULL) {
|
||
|
(void) strcpy(entry->rname, cred->adc_fullname.name);
|
||
|
} else {
|
||
|
- debug("out of memory");
|
||
|
+ LIBTIRPC_DEBUG(1, ("_svcauth_des: out of memory"));
|
||
|
}
|
||
|
entry->key = *sessionkey;
|
||
|
entry->window = window;
|
||
|
@@ -472,7 +472,7 @@ authdes_getucred(adc, uid, gid, grouplen, groups)
|
||
|
|
||
|
sid = adc->adc_nickname;
|
||
|
if (sid >= AUTHDES_CACHESZ) {
|
||
|
- debug("invalid nickname");
|
||
|
+ LIBTIRPC_DEBUG(1, ("authdes_getucred: invalid nickname"));
|
||
|
return (0);
|
||
|
}
|
||
|
cred = (struct bsdcred *)authdes_cache[sid].localcred;
|
||
|
@@ -488,11 +488,11 @@ authdes_getucred(adc, uid, gid, grouplen, groups)
|
||
|
if (!netname2user(adc->adc_fullname.name, &i_uid, &i_gid,
|
||
|
&i_grouplen, groups))
|
||
|
{
|
||
|
- debug("unknown netname");
|
||
|
+ LIBTIRPC_DEBUG(1, ("authdes_getucred: unknown netname"));
|
||
|
cred->grouplen = UNKNOWN; /* mark as lookup up, but not found */
|
||
|
return (0);
|
||
|
}
|
||
|
- debug("missed ucred cache");
|
||
|
+ LIBTIRPC_DEBUG(1, ("authdes_getucred: missed ucred cache"));
|
||
|
*uid = cred->uid = i_uid;
|
||
|
*gid = cred->gid = i_gid;
|
||
|
*grouplen = cred->grouplen = i_grouplen;
|
||
|
diff --git a/src/svc_auth_gss.c b/src/svc_auth_gss.c
|
||
|
index 0aa712a..3a3c980 100644
|
||
|
--- a/src/svc_auth_gss.c
|
||
|
+++ b/src/svc_auth_gss.c
|
||
|
@@ -93,7 +93,8 @@ svcauth_gss_set_svc_name(gss_name_t name)
|
||
|
maj_stat = gss_release_name(&min_stat, &_svcauth_gss_name);
|
||
|
|
||
|
if (maj_stat != GSS_S_COMPLETE) {
|
||
|
- gss_log_status("gss_release_name", maj_stat, min_stat);
|
||
|
+ gss_log_status("svcauth_gss_set_svc_name: gss_release_name",
|
||
|
+ maj_stat, min_stat);
|
||
|
return (FALSE);
|
||
|
}
|
||
|
_svcauth_gss_name = NULL;
|
||
|
@@ -101,7 +102,8 @@ svcauth_gss_set_svc_name(gss_name_t name)
|
||
|
maj_stat = gss_duplicate_name(&min_stat, name, &_svcauth_gss_name);
|
||
|
|
||
|
if (maj_stat != GSS_S_COMPLETE) {
|
||
|
- gss_log_status("gss_duplicate_name", maj_stat, min_stat);
|
||
|
+ gss_log_status("svcauth_gss_set_svc_name: gss_duplicate_name",
|
||
|
+ maj_stat, min_stat);
|
||
|
return (FALSE);
|
||
|
}
|
||
|
|
||
|
@@ -124,7 +126,8 @@ svcauth_gss_import_name(char *service)
|
||
|
(gss_OID)GSS_C_NT_HOSTBASED_SERVICE, &name);
|
||
|
|
||
|
if (maj_stat != GSS_S_COMPLETE) {
|
||
|
- gss_log_status("gss_import_name", maj_stat, min_stat);
|
||
|
+ gss_log_status("svcauth_gss_import_name: gss_import_name",
|
||
|
+ maj_stat, min_stat);
|
||
|
return (FALSE);
|
||
|
}
|
||
|
if (svcauth_gss_set_svc_name(name) != TRUE) {
|
||
|
@@ -146,7 +149,8 @@ svcauth_gss_acquire_cred(void)
|
||
|
&_svcauth_gss_creds, NULL, NULL);
|
||
|
|
||
|
if (maj_stat != GSS_S_COMPLETE) {
|
||
|
- gss_log_status("gss_acquire_cred", maj_stat, min_stat);
|
||
|
+ gss_log_status("svcauth_gss_acquire_cred: gss_acquire_cred",
|
||
|
+ maj_stat, min_stat);
|
||
|
return (FALSE);
|
||
|
}
|
||
|
return (TRUE);
|
||
|
@@ -162,7 +166,8 @@ svcauth_gss_release_cred(void)
|
||
|
maj_stat = gss_release_cred(&min_stat, &_svcauth_gss_creds);
|
||
|
|
||
|
if (maj_stat != GSS_S_COMPLETE) {
|
||
|
- gss_log_status("gss_release_cred", maj_stat, min_stat);
|
||
|
+ gss_log_status("svcauth_gss_release_cred: gss_release_cred",
|
||
|
+ maj_stat, min_stat);
|
||
|
return (FALSE);
|
||
|
}
|
||
|
|
||
|
@@ -208,7 +213,8 @@ svcauth_gss_accept_sec_context(struct svc_req *rqst,
|
||
|
|
||
|
if (gr->gr_major != GSS_S_COMPLETE &&
|
||
|
gr->gr_major != GSS_S_CONTINUE_NEEDED) {
|
||
|
- gss_log_status("accept_sec_context", gr->gr_major, gr->gr_minor);
|
||
|
+ gss_log_status("svcauth_gss_accept_sec_context: accept_sec_context",
|
||
|
+ gr->gr_major, gr->gr_minor);
|
||
|
gd->ctx = GSS_C_NO_CONTEXT;
|
||
|
gss_release_buffer(&min_stat, &gr->gr_token);
|
||
|
return (FALSE);
|
||
|
@@ -238,10 +244,10 @@ svcauth_gss_accept_sec_context(struct svc_req *rqst,
|
||
|
maj_stat = gss_display_name(&min_stat, gd->client_name,
|
||
|
&gd->cname, &gd->sec.mech);
|
||
|
if (maj_stat != GSS_S_COMPLETE) {
|
||
|
- gss_log_status("display_name", maj_stat, min_stat);
|
||
|
+ gss_log_status("svcauth_gss_accept_sec_context: display_name",
|
||
|
+ maj_stat, min_stat);
|
||
|
return (FALSE);
|
||
|
}
|
||
|
-#ifdef DEBUG
|
||
|
#ifdef HAVE_KRB5
|
||
|
{
|
||
|
gss_buffer_desc mechname;
|
||
|
@@ -262,7 +268,6 @@ svcauth_gss_accept_sec_context(struct svc_req *rqst,
|
||
|
gd->cname.length, (char *)gd->cname.value,
|
||
|
gd->sec.qop, gd->sec.svc);
|
||
|
#endif
|
||
|
-#endif /* DEBUG */
|
||
|
seq = htonl(gr->gr_win);
|
||
|
seqbuf.value = &seq;
|
||
|
seqbuf.length = sizeof(seq);
|
||
|
@@ -326,7 +331,8 @@ svcauth_gss_validate(struct svc_rpc_gss_data *gd, struct rpc_msg *msg)
|
||
|
free(rpchdr);
|
||
|
|
||
|
if (maj_stat != GSS_S_COMPLETE) {
|
||
|
- gss_log_status("gss_verify_mic", maj_stat, min_stat);
|
||
|
+ gss_log_status("svcauth_gss_validate: gss_verify_mic",
|
||
|
+ maj_stat, min_stat);
|
||
|
return (FALSE);
|
||
|
}
|
||
|
return (TRUE);
|
||
|
@@ -353,7 +359,8 @@ svcauth_gss_nextverf(struct svc_req *rqst, u_int num)
|
||
|
&signbuf, &checksum);
|
||
|
|
||
|
if (maj_stat != GSS_S_COMPLETE) {
|
||
|
- gss_log_status("gss_get_mic", maj_stat, min_stat);
|
||
|
+ gss_log_status("svcauth_gss_nextverf: gss_get_mic",
|
||
|
+ maj_stat, min_stat);
|
||
|
return (FALSE);
|
||
|
}
|
||
|
rqst->rq_xprt->xp_verf.oa_flavor = RPCSEC_GSS;
|
||
|
diff --git a/src/svc_dg.c b/src/svc_dg.c
|
||
|
index 6e00191..f8255cc 100644
|
||
|
--- a/src/svc_dg.c
|
||
|
+++ b/src/svc_dg.c
|
||
|
@@ -49,13 +49,11 @@
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
-#ifdef RPC_CACHE_DEBUG
|
||
|
#include <netconfig.h>
|
||
|
-#include <netdir.h>
|
||
|
-#endif
|
||
|
#include <err.h>
|
||
|
|
||
|
#include "rpc_com.h"
|
||
|
+#include "debug.h"
|
||
|
|
||
|
#define su_data(xprt) ((struct svc_dg_data *)(xprt->xp_p2))
|
||
|
#define rpc_buffer(xprt) ((xprt)->xp_p1)
|
||
|
@@ -506,10 +504,8 @@ cache_set(xprt, replylen)
|
||
|
struct cl_cache *uc = (struct cl_cache *) su->su_cache;
|
||
|
u_int loc;
|
||
|
char *newbuf;
|
||
|
-#ifdef RPC_CACHE_DEBUG
|
||
|
struct netconfig *nconf;
|
||
|
char *uaddr;
|
||
|
-#endif
|
||
|
|
||
|
mutex_lock(&dupreq_lock);
|
||
|
/*
|
||
|
@@ -549,17 +545,17 @@ cache_set(xprt, replylen)
|
||
|
/*
|
||
|
* Store it away
|
||
|
*/
|
||
|
-#ifdef RPC_CACHE_DEBUG
|
||
|
- if (nconf = getnetconfigent(xprt->xp_netid)) {
|
||
|
- uaddr = taddr2uaddr(nconf, &xprt->xp_rtaddr);
|
||
|
- freenetconfigent(nconf);
|
||
|
- printf(
|
||
|
- "cache set for xid= %x prog=%d vers=%d proc=%d for rmtaddr=%s\n",
|
||
|
- su->su_xid, uc->uc_prog, uc->uc_vers,
|
||
|
- uc->uc_proc, uaddr);
|
||
|
- free(uaddr);
|
||
|
+ if (libtirpc_debug_level > 3) {
|
||
|
+ if ((nconf = getnetconfigent(xprt->xp_netid))) {
|
||
|
+ uaddr = taddr2uaddr(nconf, &xprt->xp_rtaddr);
|
||
|
+ freenetconfigent(nconf);
|
||
|
+ LIBTIRPC_DEBUG(4,
|
||
|
+ ("cache set for xid= %x prog=%d vers=%d proc=%d for rmtaddr=%s\n",
|
||
|
+ su->su_xid, uc->uc_prog, uc->uc_vers,
|
||
|
+ uc->uc_proc, uaddr));
|
||
|
+ free(uaddr);
|
||
|
+ }
|
||
|
}
|
||
|
-#endif
|
||
|
victim->cache_replylen = replylen;
|
||
|
victim->cache_reply = rpc_buffer(xprt);
|
||
|
rpc_buffer(xprt) = newbuf;
|
||
|
@@ -596,10 +592,8 @@ cache_get(xprt, msg, replyp, replylenp)
|
||
|
cache_ptr ent;
|
||
|
struct svc_dg_data *su = su_data(xprt);
|
||
|
struct cl_cache *uc = (struct cl_cache *) su->su_cache;
|
||
|
-#ifdef RPC_CACHE_DEBUG
|
||
|
struct netconfig *nconf;
|
||
|
char *uaddr;
|
||
|
-#endif
|
||
|
|
||
|
mutex_lock(&dupreq_lock);
|
||
|
loc = CACHE_LOC(xprt, su->su_xid);
|
||
|
@@ -611,18 +605,19 @@ cache_get(xprt, msg, replyp, replylenp)
|
||
|
ent->cache_addr.len == xprt->xp_rtaddr.len &&
|
||
|
(memcmp(ent->cache_addr.buf, xprt->xp_rtaddr.buf,
|
||
|
xprt->xp_rtaddr.len) == 0)) {
|
||
|
-#ifdef RPC_CACHE_DEBUG
|
||
|
- if (nconf = getnetconfigent(xprt->xp_netid)) {
|
||
|
- uaddr = taddr2uaddr(nconf, &xprt->xp_rtaddr);
|
||
|
- freenetconfigent(nconf);
|
||
|
- printf(
|
||
|
- "cache entry found for xid=%x prog=%d vers=%d proc=%d for rmtaddr=%s\n",
|
||
|
- su->su_xid, msg->rm_call.cb_prog,
|
||
|
- msg->rm_call.cb_vers,
|
||
|
- msg->rm_call.cb_proc, uaddr);
|
||
|
- free(uaddr);
|
||
|
+ if (libtirpc_debug_level > 3) {
|
||
|
+ if ((nconf = getnetconfigent(xprt->xp_netid))) {
|
||
|
+ uaddr = taddr2uaddr(nconf, &xprt->xp_rtaddr);
|
||
|
+ freenetconfigent(nconf);
|
||
|
+ LIBTIRPC_DEBUG(4,
|
||
|
+ ("cache entry found for xid=%x prog=%d"
|
||
|
+ "vers=%d proc=%d for rmtaddr=%s\n",
|
||
|
+ su->su_xid, msg->rm_call.cb_prog,
|
||
|
+ msg->rm_call.cb_vers,
|
||
|
+ msg->rm_call.cb_proc, uaddr));
|
||
|
+ free(uaddr);
|
||
|
+ }
|
||
|
}
|
||
|
-#endif
|
||
|
*replyp = ent->cache_reply;
|
||
|
*replylenp = ent->cache_replylen;
|
||
|
mutex_unlock(&dupreq_lock);
|
||
|
diff --git a/src/svc_vc.c b/src/svc_vc.c
|
||
|
index 14bc2af..884294e 100644
|
||
|
--- a/src/svc_vc.c
|
||
|
+++ b/src/svc_vc.c
|
||
|
@@ -275,7 +275,7 @@ makefd_xprt(fd, sendsize, recvsize)
|
||
|
memset(xprt, 0, sizeof *xprt);
|
||
|
cd = mem_alloc(sizeof(struct cf_conn));
|
||
|
if (cd == NULL) {
|
||
|
- warnx("svc_tcp: makefd_xprt: out of memory");
|
||
|
+ warnx("svc_vc: makefd_xprt: out of memory");
|
||
|
mem_free(xprt, sizeof(SVCXPRT));
|
||
|
xprt = NULL;
|
||
|
goto done;
|