diff options
Diffstat (limited to 'nis/nis_callback.c')
-rw-r--r-- | nis/nis_callback.c | 67 |
1 files changed, 18 insertions, 49 deletions
diff --git a/nis/nis_callback.c b/nis/nis_callback.c index 9d138fde60..4c5693a3b5 100644 --- a/nis/nis_callback.c +++ b/nis/nis_callback.c @@ -31,8 +31,10 @@ #include <arpa/inet.h> #include <rpc/key_prot.h> #include <rpcsvc/nis.h> +#include <rpcsvc/nis_callback.h> #include <bits/libc-lock.h> +#include "nis_xdr.h" #include "nis_intern.h" /* Sorry, we are not able to make this threadsafe. Stupid. But some @@ -40,30 +42,12 @@ cookie. Maybe we could use keys for threads ? Have to learn more about pthreads -- kukuk@vt.uni-paderborn.de */ -#define CB_PROG ((u_long)100302) -#define CB_VERS ((u_long)1) -#define CBPROC_RECEIVE ((u_long)1) -#define CBPROC_FINISH ((u_long)2) -#define CBPROC_ERROR ((u_long)3) - -typedef nis_object *obj_p; - -struct cback_data - { - struct - { - u_int entries_len; - obj_p *entries_val; - } - entries; - }; -typedef struct cback_data cback_data; - static nis_cb *data; __libc_lock_define_initialized (static, callback) +#if 0 static char * __nis_getpkey(const char *sname) { @@ -91,7 +75,7 @@ __nis_getpkey(const char *sname) if (res == NULL) return NULL; - if (res->status != NIS_SUCCESS) + if (NIS_RES_STATUS (res) != NIS_SUCCESS) { nis_freeresult (res); return NULL; @@ -108,9 +92,7 @@ __nis_getpkey(const char *sname) return strdup (pkey); } - - -static bool_t xdr_cback_data (XDR *, cback_data *); +#endif static void cb_prog_1 (struct svc_req *rqstp, SVCXPRT *transp) @@ -181,7 +163,7 @@ cb_prog_1 (struct svc_req *rqstp, SVCXPRT *transp) result = (char *) &bool_result; break; case CBPROC_ERROR: - xdr_argument = (xdrproc_t) xdr_nis_error; + xdr_argument = (xdrproc_t) _xdr_nis_error; xdr_result = (xdrproc_t) xdr_void; memset (&argument, 0, sizeof (argument)); if (!svc_getargs (transp, xdr_argument, (caddr_t) & argument)) @@ -208,25 +190,6 @@ cb_prog_1 (struct svc_req *rqstp, SVCXPRT *transp) return; } -static bool_t -xdr_obj_p (XDR * xdrs, obj_p *objp) -{ - if (!xdr_pointer (xdrs, (char **) objp, sizeof (nis_object), - (xdrproc_t) xdr_nis_object)) - return FALSE; - return TRUE; -} - -static bool_t -xdr_cback_data (XDR *xdrs, cback_data *objp) -{ - if (!xdr_array (xdrs, (char **) &objp->entries.entries_val, - (u_int *) & objp->entries.entries_len, ~0, sizeof (obj_p), - (xdrproc_t) xdr_obj_p)) - return FALSE; - return TRUE; -} - static nis_error internal_nis_do_callback (struct dir_binding *bptr, netobj *cookie, struct nis_cb *cb) @@ -319,7 +282,7 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *, { free (cb); syslog (LOG_ERR, "NIS+: out of memory allocating callback"); - return (NULL); + return NULL; } cb->serv->name = strdup (nis_local_principal ()); cb->serv->ep.ep_val = (endpoint *) calloc (2, sizeof (endpoint)); @@ -328,7 +291,7 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *, cb->callback = callback; cb->userdata = userdata; - if ((flags & NO_AUTHINFO) && key_secretkey_is_set ()) + if ((flags & NO_AUTHINFO) || !key_secretkey_is_set ()) { cb->serv->key_type = NIS_PK_NONE; cb->serv->pkey.n_bytes = NULL; @@ -336,6 +299,7 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *, } else { +#if 0 if ((cb->serv->pkey.n_bytes = __nis_getpkey (cb->serv->name)) == NULL) { cb->serv->pkey.n_len = 0; @@ -346,6 +310,11 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *, cb->serv->key_type = NIS_PK_DH; cb->serv->pkey.n_len = strlen(cb->serv->pkey.n_bytes); } +#else + cb->serv->pkey.n_len =0; + cb->serv->pkey.n_bytes = NULL; + cb->serv->key_type = NIS_PK_DH; +#endif } if (flags & USE_DGRAM) @@ -363,7 +332,7 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *, { xprt_unregister (cb->xprt); svc_destroy (cb->xprt); - xdr_free ((xdrproc_t) xdr_nis_server, (char *) cb->serv); + xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv); free (cb->serv); free (cb); syslog (LOG_ERR, "NIS+: failed to register callback dispatcher"); @@ -374,11 +343,11 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *, { xprt_unregister (cb->xprt); svc_destroy (cb->xprt); - xdr_free ((xdrproc_t) xdr_nis_server, (char *) cb->serv); + xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv); free (cb->serv); free (cb); syslog (LOG_ERR, "NIS+: failed to read local socket info"); - return (NULL); + return NULL; } port = sin.sin_port; get_myaddress (&sin); @@ -395,7 +364,7 @@ __nis_destroy_callback (struct nis_cb *cb) xprt_unregister (cb->xprt); svc_destroy (cb->xprt); close (cb->sock); - xdr_free ((xdrproc_t) xdr_nis_server, (char *) cb->serv); + xdr_free ((xdrproc_t) _xdr_nis_server, (char *) cb->serv); free (cb->serv); free (cb); |