コード例 #1
0
ファイル: nis_remove.c プロジェクト: Xilinx/eglibc
nis_result *
nis_remove (const_nis_name name, const nis_object *obj)
{
  nis_result *res;
  nis_error status;
  struct ns_request req;

  res = calloc (1, sizeof (nis_result));
  if (res == NULL)
    return NULL;

  req.ns_name = (char *)name;

  if (obj != NULL)
    {
      req.ns_object.ns_object_len = 1;
      req.ns_object.ns_object_val = nis_clone_object (obj, NULL);
    }
  else
    {
      req.ns_object.ns_object_len = 0;
      req.ns_object.ns_object_val = NULL;
    }

  if ((status = __do_niscall (name, NIS_REMOVE, (xdrproc_t) _xdr_ns_request,
			      (caddr_t) &req, (xdrproc_t) _xdr_nis_result,
			      (caddr_t) res, MASTER_ONLY,
			      NULL)) != NIS_SUCCESS)
    NIS_RES_STATUS (res) = status;

  nis_destroy_object (req.ns_object.ns_object_val);

  return res;
}
コード例 #2
0
nis_result *
nis_add_entry (const_nis_name name, const nis_object *obj2, unsigned int flags)
{
  nis_object obj;
  nis_result *res;
  nis_error status;
  ib_request *ibreq;
  size_t namelen = strlen (name);
  char buf1[namelen + 20];
  char buf4[namelen + 20];

  res = calloc (1, sizeof (nis_result));
  if (res == NULL)
    return NULL;

  if (name == NULL)
    {
      NIS_RES_STATUS (res) = NIS_BADNAME;
      return res;
    }

  if ((ibreq = __create_ib_request (name, flags)) == NULL)
    {
      NIS_RES_STATUS (res) = NIS_BADNAME;
      return res;
    }

  memcpy (&obj, obj2, sizeof (nis_object));

  if (obj.zo_name == NULL || strlen (obj.zo_name) == 0)
    obj.zo_name = nis_leaf_of_r (name, buf1, sizeof (buf1));

  if (obj.zo_owner == NULL || strlen (obj.zo_owner) == 0)
    obj.zo_owner = nis_local_principal ();

  if (obj.zo_group == NULL || strlen (obj.zo_group) == 0)
    obj.zo_group = nis_local_group ();

  obj.zo_domain = nis_domain_of_r (name, buf4, sizeof (buf4));

  ibreq->ibr_obj.ibr_obj_val = nis_clone_object (&obj, NULL);
  if (ibreq->ibr_obj.ibr_obj_val == NULL)
    {
      nis_free_request (ibreq);
      NIS_RES_STATUS (res) = NIS_NOMEMORY;
      return res;
    }
  ibreq->ibr_obj.ibr_obj_len = 1;

  if ((status = __do_niscall (ibreq->ibr_name, NIS_IBADD,
			      (xdrproc_t) _xdr_ib_request,
			      (caddr_t) ibreq,
			      (xdrproc_t) _xdr_nis_result,
			      (caddr_t) res, 0, NULL)) != NIS_SUCCESS)
    NIS_RES_STATUS (res) = status;

  nis_free_request (ibreq);

  return res;
}
コード例 #3
0
ファイル: nis_add.c プロジェクト: Xilinx/eglibc
nis_result *
nis_add (const_nis_name name, const nis_object *obj2)
{
  nis_object obj;
  nis_result *res;
  nis_error status;
  struct ns_request req;
  size_t namelen = strlen (name);
  char buf1 [namelen + 20];
  char buf4 [namelen + 20];

  res = calloc (1, sizeof (nis_result));
  if (res == NULL)
    return NULL;

  req.ns_name = (char *)name;

  memcpy (&obj, obj2, sizeof (nis_object));

  if (obj.zo_name == NULL || obj.zo_name[0] == '\0')
    obj.zo_name = nis_leaf_of_r (name, buf1, sizeof (buf1));

  if (obj.zo_owner == NULL || obj.zo_owner[0] == '\0')
    obj.zo_owner = nis_local_principal ();

  if (obj.zo_group == NULL || obj.zo_group[0] == '\0')
    obj.zo_group = nis_local_group ();

  obj.zo_domain = nis_domain_of_r (name, buf4, sizeof (buf4));

  req.ns_object.ns_object_val = nis_clone_object (&obj, NULL);
  if (req.ns_object.ns_object_val == NULL)
    {
      NIS_RES_STATUS (res) = NIS_NOMEMORY;
      return res;
    }
  req.ns_object.ns_object_len = 1;

  status = __do_niscall (req.ns_object.ns_object_val[0].zo_domain,
			 NIS_ADD, (xdrproc_t) _xdr_ns_request,
			 (caddr_t) &req, (xdrproc_t) _xdr_nis_result,
			 (caddr_t) res, MASTER_ONLY, NULL);
  if (status != NIS_SUCCESS)
    NIS_RES_STATUS (res) = status;

  nis_destroy_object (req.ns_object.ns_object_val);

  return res;
}
コード例 #4
0
ファイル: nis_table.c プロジェクト: thkukuk/libnsl
nis_result *
nis_next_entry (const_nis_name name, const netobj *cookie)
{
    nis_result *res;
    ib_request *ibreq;
    nis_error status;

    res = calloc (1, sizeof (nis_result));
    if (res == NULL)
        return NULL;

    if (name == NULL)
    {
        NIS_RES_STATUS (res) = NIS_BADNAME;
        return res;
    }

    ibreq = __create_ib_request (name, 0);
    if (ibreq == NULL)
    {
        NIS_RES_STATUS (res) = NIS_BADNAME;
        return res;
    }

    if (cookie != NULL)
    {
        ibreq->ibr_cookie.n_bytes = cookie->n_bytes;
        ibreq->ibr_cookie.n_len = cookie->n_len;
    }

    status = __do_niscall (ibreq->ibr_name, NIS_IBNEXT,
                           (xdrproc_t) _xdr_ib_request,
                           (caddr_t) ibreq, (xdrproc_t) _xdr_nis_result,
                           (caddr_t) res, 0, NULL);

    if (status != NIS_SUCCESS)
        NIS_RES_STATUS (res) = status;

    if (cookie != NULL)
    {
        /* Don't give cookie free, it is not from us */
        ibreq->ibr_cookie.n_bytes = NULL;
        ibreq->ibr_cookie.n_len = 0;
    }

    nis_free_request (ibreq);

    return res;
}
コード例 #5
0
ファイル: nis_table.c プロジェクト: thkukuk/libnsl
nis_result *
nis_remove_entry (const_nis_name name, const nis_object *obj,
                  unsigned int flags)
{
    nis_result *res;
    ib_request *ibreq;
    nis_error status;

    res = calloc (1, sizeof (nis_result));
    if (res == NULL)
        return NULL;

    if (name == NULL)
    {
        NIS_RES_STATUS (res) = NIS_BADNAME;
        return res;
    }

    ibreq = __create_ib_request (name, flags);
    if (ibreq == NULL)
    {
        NIS_RES_STATUS (res) = NIS_BADNAME;
        return res;
    }

    if (obj != NULL)
    {
        ibreq->ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL);
        if (ibreq->ibr_obj.ibr_obj_val == NULL)
        {
            nis_free_request (ibreq);
            NIS_RES_STATUS (res) = NIS_NOMEMORY;
            return res;
        }
        ibreq->ibr_obj.ibr_obj_len = 1;
    }

    if ((status = __do_niscall (ibreq->ibr_name, NIS_IBREMOVE,
                                (xdrproc_t) _xdr_ib_request,
                                (caddr_t) ibreq, (xdrproc_t) _xdr_nis_result,
                                (caddr_t) res, 0, NULL)) != NIS_SUCCESS)
        NIS_RES_STATUS (res) = status;

    nis_free_request (ibreq);

    return res;
}
コード例 #6
0
ファイル: nis_mkdir.c プロジェクト: AdvancedC/glibc
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;
}
コード例 #7
0
ファイル: nis_table.c プロジェクト: thkukuk/libnsl
nis_result *
nis_first_entry (const_nis_name name)
{
    nis_result *res;
    ib_request *ibreq;
    nis_error status;

    res = calloc (1, sizeof (nis_result));
    if (res == NULL)
        return NULL;

    if (name == NULL)
    {
        NIS_RES_STATUS (res) = NIS_BADNAME;
        return res;
    }

    ibreq = __create_ib_request (name, 0);
    if (ibreq == NULL)
    {
        NIS_RES_STATUS (res) = NIS_BADNAME;
        return res;
    }

    status = __do_niscall (ibreq->ibr_name, NIS_IBFIRST,
                           (xdrproc_t) _xdr_ib_request,
                           (caddr_t) ibreq, (xdrproc_t) _xdr_nis_result,
                           (caddr_t) res, 0, NULL);

    if (status != NIS_SUCCESS)
        NIS_RES_STATUS (res) = status;

    nis_free_request (ibreq);

    return res;
}