1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20: #include <string.h>
21: #include <rpcsvc/nis.h>
22:
23: #include "nis_xdr.h"
24: #include "nis_intern.h"
25:
26: nis_result *
27: nis_checkpoint (const_nis_name dirname)
28: {
29: nis_result *res;
30:
31: res = calloc (1, sizeof (nis_result));
32: if (res == NULL)
33: return NULL;
34:
35: if (dirname != NULL)
36: {
37: nis_result *res2;
38: u_int i;
39:
40: res2 = nis_lookup (dirname, EXPAND_NAME);
41: if (NIS_RES_STATUS (res2) != NIS_SUCCESS)
42: {
43: free (res);
44: return res2;
45: }
46:
47:
48: if (__type_of (NIS_RES_OBJECT (res2)) != NIS_DIRECTORY_OBJ)
49: {
50: nis_freeresult (res2);
51: NIS_RES_STATUS (res) = NIS_INVALIDOBJ;
52: return res;
53: }
54:
55: for (i = 0;
56: i < NIS_RES_OBJECT (res2)->DI_data.do_servers.do_servers_len; ++i)
57: {
58: cp_result cpres;
59:
60: memset (&cpres, '\0', sizeof (cp_result));
61: if (__do_niscall2 (&NIS_RES_OBJECT(res2)->DI_data.do_servers.do_servers_val[i],
62: 1, NIS_CHECKPOINT, (xdrproc_t) _xdr_nis_name,
63: (caddr_t) &dirname, (xdrproc_t) _xdr_cp_result,
64: (caddr_t) &cpres, 0, NULL) != NIS_SUCCESS)
65: NIS_RES_STATUS (res) = NIS_RPCERROR;
66: else
67: {
68: NIS_RES_STATUS (res) = cpres.cp_status;
69: res->zticks += cpres.cp_zticks;
70: res->dticks += cpres.cp_dticks;
71: }
72: }
73: nis_freeresult (res2);
74: }
75: else
76: NIS_RES_STATUS (res) = NIS_NOSUCHNAME;
77:
78: return res;
79: }