ReactOS 0.4.15-dev-7906-g1b85a5f
svc_auth_unix.c
Go to the documentation of this file.
1/*
2 * Copyright (c) 2009, Sun Microsystems, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * - Redistributions of source code must retain the above copyright notice,
8 * this list of conditions and the following disclaimer.
9 * - Redistributions in binary form must reproduce the above copyright notice,
10 * this list of conditions and the following disclaimer in the documentation
11 * and/or other materials provided with the distribution.
12 * - Neither the name of Sun Microsystems, Inc. nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/*
30 * svc_auth_unix.c
31 * Handles UNIX flavor authentication parameters on the service side of rpc.
32 * There are two svc auth implementations here: AUTH_UNIX and AUTH_SHORT.
33 * _svcauth_unix does full blown unix style uid,gid+gids auth,
34 * _svcauth_short uses a shorthand auth to index into a cache of longhand auths.
35 * Note: the shorthand has been gutted for efficiency.
36 *
37 * Copyright (C) 1984, Sun Microsystems, Inc.
38 */
39#include <wintirpc.h>
40//#include <pthread.h>
41#include <assert.h>
42#include <stdio.h>
43#include <string.h>
44
45#include <rpc/rpc.h>
46
47/*
48 * Unix longhand authenticator
49 */
50enum auth_stat
52 struct svc_req *rqst;
53 struct rpc_msg *msg;
54{
55 enum auth_stat stat;
56 XDR xdrs;
57 struct authunix_parms *aup;
58 int32_t *buf;
59 struct area {
60 struct authunix_parms area_aup;
61 char area_machname[MAX_MACHINE_NAME+1];
62 gid_t area_gids[NGRPS];
63 } *area;
64 u_int auth_len;
65 size_t str_len, gid_len;
66 u_int i;
67
68 assert(rqst != NULL);
69 assert(msg != NULL);
70
71 area = (struct area *) rqst->rq_clntcred;
72 aup = &area->area_aup;
73 aup->aup_machname = area->area_machname;
74 aup->aup_gids = area->area_gids;
75 auth_len = (u_int)msg->rm_call.cb_cred.oa_length;
76 xdrmem_create(&xdrs, msg->rm_call.cb_cred.oa_base, auth_len,XDR_DECODE);
77 buf = XDR_INLINE(&xdrs, auth_len);
78 if (buf != NULL) {
83 goto done;
84 }
86 aup->aup_machname[str_len] = 0;
88 buf += str_len / sizeof (int32_t);
91 gid_len = (size_t)IXDR_GET_U_INT32(buf);
92 if (gid_len > NGRPS) {
94 goto done;
95 }
96 aup->aup_len = gid_len;
97 for (i = 0; i < gid_len; i++) {
99 }
100 /*
101 * five is the smallest unix credentials structure -
102 * timestamp, hostname len (0), uid, gid, and gids len (0).
103 */
104 if ((5 + gid_len) * BYTES_PER_XDR_UNIT + str_len > auth_len) {
105 (void) printf("bad auth_len gid %ld str %ld auth %u\n",
106 (long)gid_len, (long)str_len, auth_len);
108 goto done;
109 }
110 } else if (! xdr_authunix_parms(&xdrs, aup)) {
111 xdrs.x_op = XDR_FREE;
112 (void)xdr_authunix_parms(&xdrs, aup);
114 goto done;
115 }
116
117 /* get the verifier */
118 if ((u_int)msg->rm_call.cb_verf.oa_length) {
119 rqst->rq_xprt->xp_verf.oa_flavor =
120 msg->rm_call.cb_verf.oa_flavor;
121 rqst->rq_xprt->xp_verf.oa_base =
122 msg->rm_call.cb_verf.oa_base;
123 rqst->rq_xprt->xp_verf.oa_length =
124 msg->rm_call.cb_verf.oa_length;
125 } else {
126 rqst->rq_xprt->xp_verf.oa_flavor = AUTH_NULL;
127 rqst->rq_xprt->xp_verf.oa_length = 0;
128 }
129 stat = AUTH_OK;
130done:
131 XDR_DESTROY(&xdrs);
132 return (stat);
133}
134
135
136/*
137 * Shorthand unix authenticator
138 * Looks up longhand in a cache.
139 */
140/*ARGSUSED*/
141enum auth_stat
143 struct svc_req *rqst;
144 struct rpc_msg *msg;
145{
146 return (AUTH_REJECTEDCRED);
147}
#define stat
Definition: acwin.h:99
#define msg(x)
Definition: auth_time.c:54
#define MAX_MACHINE_NAME
Definition: auth_unix.h:51
#define NGRPS
Definition: auth_unix.h:54
bool_t xdr_authunix_parms(XDR *xdrs, struct authunix_parms *p)
Definition: authunix_prot.c:50
auth_stat
Definition: auth.h:144
@ AUTH_BADCRED
Definition: auth.h:149
@ AUTH_OK
Definition: auth.h:145
@ AUTH_REJECTEDCRED
Definition: auth.h:150
#define AUTH_NULL
Definition: auth.h:402
UINT32 u_int
Definition: types.h:82
#define NULL
Definition: types.h:112
INT32 int32_t
Definition: types.h:71
UINT gid_t
Definition: types.h:89
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
#define assert(x)
Definition: debug.h:53
__kernel_size_t size_t
Definition: linux.h:237
#define printf
Definition: freeldr.h:93
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define memmove(s1, s2, n)
Definition: mkisofs.h:881
#define int32_t
Definition: nsiface.idl:56
static Real area(Real A[2], Real B[2], Real C[2])
Definition: polyDBG.cc:50
#define long
Definition: qsort.c:33
#define IXDR_GET_U_INT32(buf)
Definition: rpcb_prot.h:18
#define IXDR_GET_INT32(buf)
Definition: rpcb_prot.h:12
struct opaque_auth xp_verf
Definition: svc.h:121
Definition: xdr.h:103
enum xdr_op x_op
Definition: xdr.h:104
gid_t * aup_gids
Definition: auth_unix.h:65
uid_t aup_uid
Definition: auth_unix.h:62
char * aup_machname
Definition: auth_unix.h:61
u_long aup_time
Definition: auth_unix.h:60
gid_t aup_gid
Definition: auth_unix.h:63
u_int aup_len
Definition: auth_unix.h:64
Definition: stat.h:55
Definition: svc.h:132
void * rq_clntcred
Definition: svc.h:138
SVCXPRT * rq_xprt
Definition: svc.h:139
enum auth_stat _svcauth_unix(struct svc_req *rqst, struct rpc_msg *msg)
Definition: svc_auth_unix.c:51
enum auth_stat _svcauth_short(struct svc_req *rqst, struct rpc_msg *msg)
#define str_len
Definition: treelist.c:89
#define XDR_INLINE(xdrs, len)
Definition: xdr.h:209
@ XDR_DECODE
Definition: xdr.h:86
@ XDR_FREE
Definition: xdr.h:87
#define XDR_DESTROY(xdrs)
Definition: xdr.h:214
#define BYTES_PER_XDR_UNIT
Definition: xdr.h:93
#define RNDUP(x)
Definition: xdr.h:94
void xdrmem_create(XDR *xdrs, char *addr, u_int size, enum xdr_op op)
Definition: xdr_mem.c:94