bool_t _xdr_nis_object (XDR *xdrs, nis_object *objp) { bool_t res = xdr_nis_oid (xdrs, &objp->zo_oid); if (__builtin_expect (res, TRUE)) { res = xdr_nis_name (xdrs, &objp->zo_name); if (__builtin_expect (res, TRUE)) { res = xdr_nis_name (xdrs, &objp->zo_owner); if (__builtin_expect (res, TRUE)) { res = xdr_nis_name (xdrs, &objp->zo_group); if (__builtin_expect (res, TRUE)) { res = xdr_nis_name (xdrs, &objp->zo_domain); if (__builtin_expect (res, TRUE)) { res = xdr_u_int (xdrs, &objp->zo_access); if (__builtin_expect (res, TRUE)) { res = xdr_uint32_t (xdrs, &objp->zo_ttl); if (__builtin_expect (res, TRUE)) res = xdr_objdata (xdrs, &objp->zo_data); } } } } } } return res; }
bool_t _xdr_fd_args (XDR *xdrs, fd_args *objp) { bool_t res = xdr_nis_name (xdrs, &objp->dir_name); if (__builtin_expect (res, TRUE)) res = xdr_nis_name (xdrs, &objp->requester); return res; }
bool_t _xdr_directory_obj (XDR *xdrs, directory_obj *objp) { bool_t res = xdr_nis_name (xdrs, &objp->do_name); if (__builtin_expect (res, TRUE)) { res = xdr_nstype (xdrs, &objp->do_type); if (__builtin_expect (res, TRUE)) { res = xdr_array (xdrs, (void *) &objp->do_servers.do_servers_val, &objp->do_servers.do_servers_len, ~0, sizeof (nis_server), (xdrproc_t) _xdr_nis_server); if (__builtin_expect (res, TRUE)) { res = xdr_uint32_t (xdrs, &objp->do_ttl); if (__builtin_expect (res, TRUE)) res = xdr_array (xdrs, (void *) &objp->do_armask.do_armask_val, &objp->do_armask.do_armask_len, ~0, sizeof (oar_mask), (xdrproc_t) xdr_oar_mask); } } } return res; }
bool_t _xdr_ping_args (XDR *xdrs, ping_args *objp) { bool_t res = xdr_nis_name (xdrs, &objp->dir); if (__builtin_expect (res, TRUE)) res = xdr_uint32_t (xdrs, &objp->stamp); return res; }
bool_t xdr_nis_object(XDR *xdrs, nis_object *objp) { if (!xdr_nis_oid(xdrs, &objp->zo_oid)) return (FALSE); if (!xdr_nis_name(xdrs, &objp->zo_name)) return (FALSE); if (!xdr_nis_name(xdrs, &objp->zo_owner)) return (FALSE); if (!xdr_nis_name(xdrs, &objp->zo_group)) return (FALSE); if (!xdr_nis_name(xdrs, &objp->zo_domain)) return (FALSE); if (!xdr_u_int(xdrs, &objp->zo_access)) return (FALSE); if (!xdr_uint32_t(xdrs, &objp->zo_ttl)) return (FALSE); return (xdr_objdata(xdrs, &objp->zo_data)); }
bool_t _xdr_ns_request (XDR *xdrs, ns_request *objp) { bool_t res = xdr_nis_name (xdrs, &objp->ns_name); if (__builtin_expect (res, TRUE)) res = xdr_array (xdrs, (void *) &objp->ns_object.ns_object_val, &objp->ns_object.ns_object_len, 1, sizeof (nis_object), (xdrproc_t) _xdr_nis_object); return res; }
bool_t xdr_link_obj(XDR *xdrs, link_obj *objp) { if (!xdr_zotypes(xdrs, &objp->li_rtype)) return (FALSE); if (!xdr_array(xdrs, (char **)&objp->li_attrs.li_attrs_val, (uint_t *)&objp->li_attrs.li_attrs_len, ~0, sizeof (nis_attr), (xdrproc_t)xdr_nis_attr)) return (FALSE); return (xdr_nis_name(xdrs, &objp->li_name)); }
bool_t xdr_nis_server(XDR *xdrs, nis_server *objp) { if (!xdr_nis_name(xdrs, &objp->name)) return (FALSE); if (!xdr_array(xdrs, (char **)&objp->ep.ep_val, (uint_t *)&objp->ep.ep_len, ~0, sizeof (endpoint), (xdrproc_t)xdr_endpoint)) return (FALSE); if (!xdr_u_int(xdrs, &objp->key_type)) return (FALSE); return (xdr_netobj(xdrs, &objp->pkey)); }
static bool_t xdr_link_obj (XDR *xdrs, link_obj *objp) { bool_t res = xdr_zotypes (xdrs, &objp->li_rtype); if (__builtin_expect (res, TRUE)) { res = xdr_array (xdrs, (void *) &objp->li_attrs.li_attrs_val, &objp->li_attrs.li_attrs_len, ~0, sizeof (nis_attr), (xdrproc_t) xdr_nis_attr); if (__builtin_expect (res, TRUE)) res = xdr_nis_name (xdrs, &objp->li_name); } return res; }
bool_t xdr_directory_obj(XDR *xdrs, directory_obj *objp) { if (!xdr_nis_name(xdrs, &objp->do_name)) return (FALSE); if (!xdr_nstype(xdrs, &objp->do_type)) return (FALSE); if (!xdr_array(xdrs, (char **)&objp->do_servers.do_servers_val, (uint_t *)&objp->do_servers.do_servers_len, ~0, sizeof (nis_server), (xdrproc_t)xdr_nis_server)) return (FALSE); if (!xdr_uint32_t(xdrs, &objp->do_ttl)) return (FALSE); return (xdr_array(xdrs, (char **)&objp->do_armask.do_armask_val, (uint_t *)&objp->do_armask.do_armask_len, ~0, sizeof (oar_mask), (xdrproc_t)xdr_oar_mask)); }
bool_t _xdr_nis_server (XDR *xdrs, nis_server *objp) { bool_t res = xdr_nis_name (xdrs, &objp->name); if (__builtin_expect (res, TRUE)) { res = xdr_array (xdrs, (void *) &objp->ep.ep_val, &objp->ep.ep_len, ~0, sizeof (endpoint), (xdrproc_t) xdr_endpoint); if (__builtin_expect (res, TRUE)) { res = xdr_u_int (xdrs, &objp->key_type); if (__builtin_expect (res, TRUE)) res = xdr_netobj (xdrs, &objp->pkey); } } return res; }
bool_t _xdr_fd_result (XDR *xdrs, fd_result *objp) { bool_t res = xdr_nis_error (xdrs, &objp->status); if (__builtin_expect (res, TRUE)) { res = xdr_nis_name (xdrs, &objp->source); if (__builtin_expect (res, TRUE)) { res = xdr_bytes (xdrs, (char **) &objp->dir_data.dir_data_val, &objp->dir_data.dir_data_len, ~0); if (__builtin_expect (res, TRUE)) res = xdr_bytes (xdrs, (char **) &objp->signature.signature_val, &objp->signature.signature_len, ~0); } } return res; }
bool_t _xdr_ib_request (XDR *xdrs, ib_request *objp) { bool_t res = xdr_nis_name (xdrs, &objp->ibr_name); if (__builtin_expect (res, TRUE)) { res = xdr_array (xdrs, (void *) &objp->ibr_srch.ibr_srch_val, &objp->ibr_srch.ibr_srch_len, ~0, sizeof (nis_attr), (xdrproc_t) xdr_nis_attr); if (__builtin_expect (res, TRUE)) { res = xdr_u_int (xdrs, &objp->ibr_flags); if (__builtin_expect (res, TRUE)) { res = xdr_array (xdrs, (void *) &objp->ibr_obj.ibr_obj_val, &objp->ibr_obj.ibr_obj_len, 1, sizeof (nis_object), (xdrproc_t) _xdr_nis_object); if (__builtin_expect (res, TRUE)) { res = xdr_array (xdrs, (void *) &objp->ibr_cbhost.ibr_cbhost_val, &objp->ibr_cbhost.ibr_cbhost_len, 1, sizeof (nis_server), (xdrproc_t) _xdr_nis_server); if (__builtin_expect (res, TRUE)) { res = xdr_u_int (xdrs, &objp->ibr_bufsize); if (__builtin_expect (res, TRUE)) res = xdr_netobj (xdrs, &objp->ibr_cookie); } } } } } return res; }
/* * Imported from rpc.nisd/nis_db.c * * Special abbreviated XDR string which knows that the namep parameter (mainly * owner and group) has a trailing end which matches the last 'n' characters * in the domainname part. It makes use of those common characters to * encode/decode this information. We append an integer string to the * name to be encoded which denotes the place in the domainname from where the * common string starts. For example, if the name was "foo.my.domain." and the * domainname was "my.domain.", the name would be encoded as "foo.10" because * the length of the common part "my.domain." is 10. */ bool_t xdr_nis_name_abbrev( XDR *xdrs, nis_name *namep, nis_name domainname) /* domainname field from the table */ { size_t name_len, dom_len, min_len; char buf[NIS_MAXNAMELEN]; char *name; char *lenstr, *tmp; int i; switch (xdrs->x_op) { case XDR_ENCODE: /* Get the start of the common part */ name = *namep; name_len = strlen(name); if (name_len == 0) return (xdr_nis_name(xdrs, namep)); dom_len = strlen(domainname); min_len = (name_len < dom_len) ? name_len : dom_len; for (i = 1; i <= min_len; i++) { if (name[name_len - i] != domainname[dom_len - i]) break; } i--; memcpy(buf, name, name_len - i); sprintf(buf + name_len - i, ".%d", dom_len - i); tmp = buf; return (xdr_nis_name(xdrs, &tmp)); case XDR_DECODE: tmp = buf; if (!xdr_nis_name(xdrs, &tmp)) return (FALSE); if ((buf[0] == NULL) || buf[strlen(buf) - 1] == '.') { /* It is either a FQN or a NULL string */ if (*namep) { strcpy(*namep, buf); return (TRUE); } else { if ((*namep = strdup(buf)) == NULL) return (FALSE); else return (TRUE); } } /* Now concoct the new name */ if ((lenstr = strrchr(buf, '.')) == NULL) { /* something went wrong here */ syslog(LOG_ERR, "xdr_nis_name_abbrev: no dot found in %s", buf); return (FALSE); } i = atoi(lenstr + 1); strcpy(lenstr, domainname + i); if (*namep) { strcpy(*namep, buf); } else { if ((*namep = strdup(buf)) == NULL) return (FALSE); } return (TRUE); default: return (xdr_nis_name(xdrs, namep)); } }
bool_t _xdr_nis_name (XDR *xdrs, nis_name *objp) { return xdr_nis_name (xdrs, objp); }