diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-07-12 18:26:36 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2007-07-12 18:26:36 +0000 |
commit | 0ecb606cb6cf65de1d9fc8a919bceb4be476c602 (patch) | |
tree | 2ea1f8305970753e4a657acb2ccc15ca3eec8e2c /sunrpc/key_call.c | |
parent | 7d58530341304d403a6626d7f7a1913165fe2f32 (diff) | |
download | glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.zip glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.tar.gz glibc-0ecb606cb6cf65de1d9fc8a919bceb4be476c602.tar.bz2 |
2.5-18.1
Diffstat (limited to 'sunrpc/key_call.c')
-rw-r--r-- | sunrpc/key_call.c | 91 |
1 files changed, 6 insertions, 85 deletions
diff --git a/sunrpc/key_call.c b/sunrpc/key_call.c index 211f61d..611c372 100644 --- a/sunrpc/key_call.c +++ b/sunrpc/key_call.c @@ -51,10 +51,6 @@ #include <rpc/key_prot.h> #include <bits/libc-lock.h> -#ifdef HAVE_DOORS -# include "door/door.h" -#endif - #define KEY_TIMEOUT 5 /* per-try timeout in seconds */ #define KEY_NRETRY 12 /* number of retries */ @@ -386,7 +382,7 @@ getkeyserv_handle (int vers) struct timeval wait_time; int fd; struct sockaddr_un name; - int namelen = sizeof(struct sockaddr_un); + socklen_t namelen = sizeof(struct sockaddr_un); #define TOTAL_TIMEOUT 30 /* total timeout talking to keyserver */ #define TOTAL_TRIES 5 /* Number of tries */ @@ -404,6 +400,7 @@ getkeyserv_handle (int vers) /* if pid has changed, destroy client and rebuild */ if (kcp->client != NULL && kcp->pid != __getpid ()) { + auth_destroy (kcp->client->cl_auth); clnt_destroy (kcp->client); kcp->client = NULL; } @@ -503,73 +500,6 @@ key_call_socket (u_long proc, xdrproc_t xdr_arg, char *arg, return result; } -#ifdef HAVE_DOORS -/* returns 0 on failure, 1 on success */ -static int -internal_function -key_call_door (u_long proc, xdrproc_t xdr_arg, char *arg, - xdrproc_t xdr_rslt, char *rslt) -{ - XDR xdrs; - int fd, ret; - door_arg_t args; - char *data_ptr; - u_long data_len = 0; - char res[255]; - - if ((fd = open("/var/run/keyservdoor", O_RDONLY)) < 0) - return 0; - res[0] = 0; - - data_len = xdr_sizeof (xdr_arg, arg); - data_ptr = calloc (1, data_len + 2 * sizeof (u_long)); - if (data_ptr == NULL) - return 0; - - INTUSE(xdrmem_create) (&xdrs, &data_ptr[2 * sizeof (u_long)], data_len, - XDR_ENCODE); - if (!xdr_arg (&xdrs, arg)) - { - xdr_destroy (&xdrs); - free (data_ptr); - return 0; - } - xdr_destroy (&xdrs); - - memcpy (data_ptr, &proc, sizeof (u_long)); - memcpy (&data_ptr[sizeof (proc)], &data_len, sizeof (u_long)); - - args.data_ptr = data_ptr; - args.data_size = data_len + 2 * sizeof (u_long); - args.desc_ptr = NULL; - args.desc_num = 0; - args.rbuf = res; - args.rsize = sizeof (res); - - ret = __door_call (fd, &args); - free (data_ptr); - close (fd); - - if (ret < 0) - return 0; - - memcpy (&data_len, args.data_ptr, sizeof (u_long)); - if (data_len != 0) - return 0; - - memcpy (&data_len, &args.data_ptr[sizeof (u_long)], sizeof (u_long)); - INTUSE(xdrmem_create) (&xdrs, &args.data_ptr[2 * sizeof (u_long)], - data_len, XDR_DECODE); - if (!xdr_rslt (&xdrs, rslt)) - { - xdr_destroy (&xdrs); - return 0; - } - xdr_destroy (&xdrs); - - return 1; -} -#endif /* returns 0 on failure, 1 on success */ static int @@ -580,9 +510,6 @@ key_call (u_long proc, xdrproc_t xdr_arg, char *arg, #ifndef SO_PASSCRED static int use_keyenvoy; #endif -#ifdef HAVE_DOORS - static int not_use_doors; -#endif if (proc == KEY_ENCRYPT_PK && __key_encryptsession_pk_LOCAL) { @@ -606,15 +533,6 @@ key_call (u_long proc, xdrproc_t xdr_arg, char *arg, return 1; } -#ifdef HAVE_DOORS - if (!not_use_doors) - { - if (key_call_door (proc, xdr_arg, arg, xdr_rslt, rslt)) - return 1; - not_use_doors = 1; - } -#endif - #ifdef SO_PASSCRED return key_call_socket (proc, xdr_arg, arg, xdr_rslt, rslt); #else @@ -635,8 +553,11 @@ __rpc_thread_key_cleanup (void) struct key_call_private *kcp = RPC_THREAD_VARIABLE(key_call_private_s); if (kcp) { - if (kcp->client) + if (kcp->client) { + if (kcp->client->cl_auth) + auth_destroy (kcp->client->cl_auth); clnt_destroy(kcp->client); + } free (kcp); } } |