1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30: #include <rpcsvc/yp.h>
31: #include <rpcsvc/ypclnt.h>
32:
33: bool_t
34: xdr_ypstat (XDR *xdrs, ypstat *objp)
35: {
36: return xdr_enum (xdrs, (enum_t *) objp);
37: }
38: libnsl_hidden_def (xdr_ypstat)
39:
40: bool_t
41: xdr_ypxfrstat (XDR *xdrs, ypxfrstat *objp)
42: {
43: return xdr_enum (xdrs, (enum_t *) objp);
44: }
45: libnsl_hidden_def (xdr_ypxfrstat)
46:
47: bool_t
48: xdr_domainname (XDR *xdrs, domainname *objp)
49: {
50: return xdr_string (xdrs, objp, ~0);
51: }
52: libnsl_hidden_def (xdr_domainname)
53:
54: bool_t
55: xdr_mapname (XDR *xdrs, mapname *objp)
56: {
57: return xdr_string (xdrs, objp, ~0);
58: }
59: libnsl_hidden_def (xdr_mapname)
60:
61: bool_t
62: xdr_peername (XDR *xdrs, peername *objp)
63: {
64: return xdr_string (xdrs, objp, ~0);
65: }
66: libnsl_hidden_def (xdr_peername)
67:
68: bool_t
69: xdr_keydat (XDR *xdrs, keydat *objp)
70: {
71: return xdr_bytes (xdrs, (char **) &objp->keydat_val,
72: (u_int *) &objp->keydat_len, ~0);
73: }
74: libnsl_hidden_def (xdr_keydat)
75:
76: bool_t
77: xdr_valdat (XDR *xdrs, valdat *objp)
78: {
79: return xdr_bytes (xdrs, (char **) &objp->valdat_val,
80: (u_int *) &objp->valdat_len, ~0);
81: }
82: libnsl_hidden_def (xdr_valdat)
83:
84: bool_t
85: xdr_ypmap_parms (XDR *xdrs, ypmap_parms *objp)
86: {
87: if (!xdr_domainname (xdrs, &objp->domain))
88: return FALSE;
89: if (!xdr_mapname (xdrs, &objp->map))
90: return FALSE;
91: if (!xdr_u_int (xdrs, &objp->ordernum))
92: return FALSE;
93: return xdr_peername (xdrs, &objp->peer);
94: }
95: libnsl_hidden_def (xdr_ypmap_parms)
96:
97: bool_t
98: xdr_ypreq_key (XDR *xdrs, ypreq_key *objp)
99: {
100: if (!xdr_domainname (xdrs, &objp->domain))
101: return FALSE;
102: if (!xdr_mapname (xdrs, &objp->map))
103: return FALSE;
104: return xdr_keydat (xdrs, &objp->key);
105: }
106: libnsl_hidden_def (xdr_ypreq_key)
107:
108: bool_t
109: xdr_ypreq_nokey (XDR *xdrs, ypreq_nokey *objp)
110: {
111: if (!xdr_domainname (xdrs, &objp->domain))
112: return FALSE;
113: return xdr_mapname (xdrs, &objp->map);
114: }
115: libnsl_hidden_def (xdr_ypreq_nokey)
116:
117: bool_t
118: xdr_ypreq_xfr (XDR *xdrs, ypreq_xfr *objp)
119: {
120: if (!xdr_ypmap_parms (xdrs, &objp->map_parms))
121: return FALSE;
122: if (!xdr_u_int (xdrs, &objp->transid))
123: return FALSE;
124: if (!xdr_u_int (xdrs, &objp->prog))
125: return FALSE;
126: return xdr_u_int (xdrs, &objp->port);
127: }
128:
129: bool_t
130: xdr_ypresp_val (XDR *xdrs, ypresp_val *objp)
131: {
132: if (!xdr_ypstat (xdrs, &objp->stat))
133: return FALSE;
134: return xdr_valdat (xdrs, &objp->val);
135: }
136: libnsl_hidden_def (xdr_ypresp_val)
137:
138: bool_t
139: xdr_ypresp_key_val (XDR *xdrs, ypresp_key_val *objp)
140: {
141: if (!xdr_ypstat (xdrs, &objp->stat))
142: return FALSE;
143: if (!xdr_valdat (xdrs, &objp->val))
144: return FALSE;
145: return xdr_keydat (xdrs, &objp->key);
146: }
147: libnsl_hidden_def (xdr_ypresp_key_val)
148:
149: bool_t
150: xdr_ypresp_master (XDR *xdrs, ypresp_master *objp)
151: {
152: if (!xdr_ypstat (xdrs, &objp->stat))
153: return FALSE;
154: return xdr_peername (xdrs, &objp->peer);
155: }
156: libnsl_hidden_def (xdr_ypresp_master)
157:
158: bool_t
159: xdr_ypresp_order (XDR *xdrs, ypresp_order *objp)
160: {
161: if (!xdr_ypstat (xdrs, &objp->stat))
162: return FALSE;
163: return xdr_u_int (xdrs, &objp->ordernum);
164: }
165: libnsl_hidden_def (xdr_ypresp_order)
166:
167: bool_t
168: xdr_ypresp_all (XDR *xdrs, ypresp_all *objp)
169: {
170: if (!xdr_bool (xdrs, &objp->more))
171: return FALSE;
172: switch (objp->more)
173: {
174: case TRUE:
175: return xdr_ypresp_key_val (xdrs, &objp->ypresp_all_u.val);
176: case FALSE:
177: break;
178: default:
179: return FALSE;
180: }
181: return TRUE;
182: }
183: libnsl_hidden_def (xdr_ypresp_all)
184:
185: bool_t
186: xdr_ypresp_xfr (XDR *xdrs, ypresp_xfr *objp)
187: {
188: if (!xdr_u_int (xdrs, &objp->transid))
189: return FALSE;
190: return xdr_ypxfrstat (xdrs, &objp->xfrstat);
191: }
192:
193: bool_t
194: xdr_ypmaplist (XDR *xdrs, ypmaplist *objp)
195: {
196: if (!xdr_mapname (xdrs, &objp->map))
197: return FALSE;
198:
199: char **tp = (void *) &objp->next;
200: return xdr_pointer (xdrs, tp, sizeof (ypmaplist), (xdrproc_t) xdr_ypmaplist);
201: }
202: libnsl_hidden_def (xdr_ypmaplist)
203:
204: bool_t
205: xdr_ypresp_maplist (XDR *xdrs, ypresp_maplist *objp)
206: {
207: if (!xdr_ypstat (xdrs, &objp->stat))
208: return FALSE;
209:
210: char **tp = (void *) &objp->maps;
211: return xdr_pointer (xdrs, tp, sizeof (ypmaplist), (xdrproc_t) xdr_ypmaplist);
212: }
213: libnsl_hidden_def (xdr_ypresp_maplist)
214:
215: bool_t
216: xdr_yppush_status (XDR *xdrs, yppush_status *objp)
217: {
218: return xdr_enum (xdrs, (enum_t *) objp);
219: }
220: libnsl_hidden_def (xdr_yppush_status)
221:
222: bool_t
223: xdr_yppushresp_xfr (XDR *xdrs, yppushresp_xfr *objp)
224: {
225: if (!xdr_u_int (xdrs, &objp->transid))
226: return FALSE;
227: return xdr_yppush_status (xdrs, &objp->status);
228: }
229:
230: bool_t
231: xdr_ypbind_resptype (XDR *xdrs, ypbind_resptype *objp)
232: {
233: return xdr_enum (xdrs, (enum_t *) objp);
234: }
235: libnsl_hidden_def (xdr_ypbind_resptype)
236:
237: bool_t
238: xdr_ypbind_binding (XDR *xdrs, ypbind_binding *objp)
239: {
240: if (!xdr_opaque (xdrs, objp->ypbind_binding_addr, 4))
241: return FALSE;
242: return xdr_opaque (xdrs, objp->ypbind_binding_port, 2);
243: }
244: libnsl_hidden_def (xdr_ypbind_binding)
245:
246: bool_t
247: xdr_ypbind_resp (XDR *xdrs, ypbind_resp *objp)
248: {
249: if (!xdr_ypbind_resptype (xdrs, &objp->ypbind_status))
250: return FALSE;
251: switch (objp->ypbind_status)
252: {
253: case YPBIND_FAIL_VAL:
254: return xdr_u_int (xdrs, &objp->ypbind_resp_u.ypbind_error);
255: case YPBIND_SUCC_VAL:
256: return xdr_ypbind_binding (xdrs, &objp->ypbind_resp_u.ypbind_bindinfo);
257: }
258: return FALSE;
259: }
260: libnsl_hidden_def (xdr_ypbind_resp)
261:
262: bool_t
263: xdr_ypbind_setdom (XDR *xdrs, ypbind_setdom *objp)
264: {
265: if (!xdr_domainname (xdrs, &objp->ypsetdom_domain))
266: return FALSE;
267: if (!xdr_ypbind_binding (xdrs, &objp->ypsetdom_binding))
268: return FALSE;
269: return xdr_u_int (xdrs, &objp->ypsetdom_vers);
270: }
271:
272: bool_t
273: xdr_ypall(XDR *xdrs, struct ypall_callback *incallback)
274: {
275: struct ypresp_key_val out;
276: char key[YPMAXRECORD], val[YPMAXRECORD];
277:
278:
279:
280:
281: memset(&out, 0, sizeof out);
282: out.key.keydat_val = key;
283: out.key.keydat_len = sizeof(key);
284: out.val.valdat_val = val;
285: out.val.valdat_len = sizeof(val);
286:
287: for (;;) {
288: bool_t more, status;
289:
290:
291: if (!xdr_bool(xdrs, &more))
292: return FALSE;
293: if (!more)
294: return TRUE;
295:
296:
297: status = xdr_ypresp_key_val(xdrs, &out);
298:
299:
300:
301:
302:
303:
304:
305: if (status) {
306: if ((*incallback->foreach)(out.stat,
307: (char *)out.key.keydat_val, out.key.keydat_len,
308: (char *)out.val.valdat_val, out.val.valdat_len,
309: incallback->data))
310: return TRUE;
311: } else
312: return FALSE;
313: }
314: }