nis_error nis_stats (const nis_server *serv, const nis_tag *tags, const int numtags, nis_tag **result) { nis_taglist taglist; nis_taglist tagres; *result = NULL; tagres.tags.tags_len = 0; tagres.tags.tags_val = NULL; taglist.tags.tags_len = numtags; taglist.tags.tags_val = (nis_tag *) tags; if (serv == NULL) return NIS_BADOBJECT; if (__do_niscall2 (serv, 1, NIS_STATUS, (xdrproc_t) _xdr_nis_taglist, (caddr_t) &taglist, (xdrproc_t) _xdr_nis_taglist, (caddr_t) &tagres, 0, NULL) != NIS_SUCCESS) return NIS_RPCERROR; *result = tagres.tags.tags_val; return NIS_SUCCESS; }
nis_result * nis_checkpoint (const_nis_name dirname) { nis_result *res; res = calloc (1, sizeof (nis_result)); if (res == NULL) return NULL; if (dirname != NULL) { nis_result *res2; u_int i; res2 = nis_lookup (dirname, EXPAND_NAME); if (NIS_RES_STATUS (res2) != NIS_SUCCESS) { free (res); return res2; } /* Check if obj is really a diryectory object */ if (__type_of (NIS_RES_OBJECT (res2)) != NIS_DIRECTORY_OBJ) { nis_freeresult (res2); NIS_RES_STATUS (res) = NIS_INVALIDOBJ; return res; } for (i = 0; i < NIS_RES_OBJECT (res2)->DI_data.do_servers.do_servers_len; ++i) { cp_result cpres; memset (&cpres, '\0', sizeof (cp_result)); if (__do_niscall2 (&NIS_RES_OBJECT(res2)->DI_data.do_servers.do_servers_val[i], 1, NIS_CHECKPOINT, (xdrproc_t) _xdr_nis_name, (caddr_t) &dirname, (xdrproc_t) _xdr_cp_result, (caddr_t) &cpres, 0, NULL) != NIS_SUCCESS) NIS_RES_STATUS (res) = NIS_RPCERROR; else { NIS_RES_STATUS (res) = cpres.cp_status; res->zticks += cpres.cp_zticks; res->dticks += cpres.cp_dticks; } } nis_freeresult (res2); } else NIS_RES_STATUS (res) = NIS_NOSUCHNAME; return res; }
nis_error nis_rmdir (const_nis_name dir, const nis_server *server) { nis_error res, res2; if (server == NULL) return NIS_SYSTEMERROR; res2 = __do_niscall2 (server, 1, NIS_RMDIR, (xdrproc_t) _xdr_nis_name, (caddr_t) &dir, (xdrproc_t) _xdr_nis_error, (caddr_t) &res, 0, NULL); if (res2 != NIS_SUCCESS) return res2; return res; }
void nis_ping (const_nis_name dirname, unsigned int utime, const nis_object *dirobj) { nis_result *res = NULL; nis_object *obj; ping_args args; unsigned int i; if (dirname == NULL && dirobj == NULL) abort (); if (dirobj == NULL) { res = nis_lookup (dirname, MASTER_ONLY); if (res == NULL || NIS_RES_STATUS (res) != NIS_SUCCESS) { nis_freeresult (res); return; } obj = res->objects.objects_val; } else obj = (nis_object *) dirobj; /* Check if obj is really a diryectory object */ if (__type_of (obj) != NIS_DIRECTORY_OBJ) { nis_freeresult (res); return; } if (dirname == NULL) args.dir = obj->DI_data.do_name; else args.dir = (char *) dirname; args.stamp = utime; /* Send the ping only to replicas */ for (i = 1; i < obj->DI_data.do_servers.do_servers_len; ++i) __do_niscall2 (&obj->DI_data.do_servers.do_servers_val[i], 1, NIS_PING, (xdrproc_t) _xdr_ping_args, (caddr_t) &args, (xdrproc_t) xdr_void, (caddr_t) NULL, 0, NULL); nis_freeresult (res); }
nis_error nis_mkdir (const_nis_name dir, const nis_server *server) { nis_error res, res2; if (server == NULL) res2 = __do_niscall (dir, NIS_MKDIR, (xdrproc_t) _xdr_nis_name, (caddr_t) &dir, (xdrproc_t) _xdr_nis_error, (caddr_t) &res, 0, NULL); else res2 = __do_niscall2 (server, 1, NIS_MKDIR, (xdrproc_t) _xdr_nis_name, (caddr_t) &dir, (xdrproc_t) _xdr_nis_error, (caddr_t) &res, 0, NULL); if (res2 != NIS_SUCCESS) return res2; return res; }
fd_result * __nis_finddirectory (directory_obj *dir, const_nis_name name) { nis_error status; fd_args fd_args; fd_result *fd_res; fd_args.dir_name = (char *)name; fd_args.requester = nis_local_host(); fd_res = calloc (1, sizeof (fd_result)); if (fd_res == NULL) return NULL; status = __do_niscall2 (dir->do_servers.do_servers_val, dir->do_servers.do_servers_len, NIS_FINDDIRECTORY, (xdrproc_t) _xdr_fd_args, (caddr_t) &fd_args, (xdrproc_t) _xdr_fd_result, (caddr_t) fd_res, NO_AUTHINFO|USE_DGRAM, NULL); if (status != NIS_SUCCESS) fd_res->status = status; return fd_res; }