(root)/
glibc-2.38/
sunrpc/
key_prot.c
       1  /* Copyright (c) 2010, Oracle America, Inc.
       2   *
       3   * Redistribution and use in source and binary forms, with or without
       4   * modification, are permitted provided that the following conditions are
       5   * met:
       6   *
       7   *     * Redistributions of source code must retain the above copyright
       8   *       notice, this list of conditions and the following disclaimer.
       9   *     * Redistributions in binary form must reproduce the above
      10   *       copyright notice, this list of conditions and the following
      11   *       disclaimer in the documentation and/or other materials
      12   *       provided with the distribution.
      13   *     * Neither the name of the "Oracle America, Inc." nor the names of its
      14   *       contributors may be used to endorse or promote products derived
      15   *       from this software without specific prior written permission.
      16   *
      17   *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
      18   *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
      19   *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
      20   *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
      21   *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
      22   *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      23   *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
      24   *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
      25   *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
      26   *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
      27   *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
      28   *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
      29   */
      30  
      31  #include <rpc/key_prot.h>
      32  #include <shlib-compat.h>
      33  
      34  bool_t
      35  xdr_keystatus (XDR * xdrs, keystatus * objp)
      36  {
      37    if (!xdr_enum (xdrs, (enum_t *) objp))
      38      return FALSE;
      39  
      40    return TRUE;
      41  }
      42  libc_hidden_nolink_sunrpc (xdr_keystatus, GLIBC_2_0)
      43  
      44  bool_t
      45  xdr_keybuf (XDR * xdrs, keybuf objp)
      46  {
      47    if (!xdr_opaque (xdrs, objp, HEXKEYBYTES))
      48      return FALSE;
      49  
      50    return TRUE;
      51  }
      52  libc_hidden_nolink_sunrpc (xdr_keybuf, GLIBC_2_0)
      53  
      54  bool_t
      55  xdr_netnamestr (XDR * xdrs, netnamestr * objp)
      56  {
      57    if (!xdr_string (xdrs, objp, MAXNETNAMELEN))
      58      return FALSE;
      59  
      60    return TRUE;
      61  }
      62  libc_hidden_nolink_sunrpc (xdr_netnamestr, GLIBC_2_1)
      63  
      64  bool_t
      65  xdr_cryptkeyarg (XDR * xdrs, cryptkeyarg * objp)
      66  {
      67    if (!xdr_netnamestr (xdrs, &objp->remotename))
      68      return FALSE;
      69  
      70    if (!xdr_des_block (xdrs, &objp->deskey))
      71      return FALSE;
      72  
      73    return TRUE;
      74  }
      75  libc_hidden_nolink_sunrpc (xdr_cryptkeyarg, GLIBC_2_0)
      76  
      77  bool_t
      78  xdr_cryptkeyarg2 (XDR * xdrs, cryptkeyarg2 * objp)
      79  {
      80    if (!xdr_netnamestr (xdrs, &objp->remotename))
      81      return FALSE;
      82    if (!xdr_netobj (xdrs, &objp->remotekey))
      83      return FALSE;
      84    if (!xdr_des_block (xdrs, &objp->deskey))
      85      return FALSE;
      86    return TRUE;
      87  }
      88  libc_hidden_nolink_sunrpc (xdr_cryptkeyarg2, GLIBC_2_0)
      89  
      90  bool_t
      91  xdr_cryptkeyres (XDR * xdrs, cryptkeyres * objp)
      92  {
      93    if (!xdr_keystatus (xdrs, &objp->status))
      94      return FALSE;
      95    switch (objp->status)
      96      {
      97      case KEY_SUCCESS:
      98        if (!xdr_des_block (xdrs, &objp->cryptkeyres_u.deskey))
      99  	return FALSE;
     100        break;
     101      default:
     102        break;
     103      }
     104    return TRUE;
     105  }
     106  libc_hidden_nolink_sunrpc (xdr_cryptkeyres, GLIBC_2_0)
     107  
     108  bool_t
     109  xdr_unixcred (XDR * xdrs, unixcred * objp)
     110  {
     111    if (!xdr_u_int (xdrs, &objp->uid))
     112      return FALSE;
     113    if (!xdr_u_int (xdrs, &objp->gid))
     114      return FALSE;
     115    if (!xdr_array (xdrs, (void *) &objp->gids.gids_val,
     116  		  (u_int *) & objp->gids.gids_len, MAXGIDS,
     117  		  sizeof (u_int), (xdrproc_t) xdr_u_int))
     118      return FALSE;
     119    return TRUE;
     120  }
     121  libc_hidden_nolink_sunrpc (xdr_unixcred, GLIBC_2_1)
     122  
     123  bool_t
     124  xdr_getcredres (XDR * xdrs, getcredres * objp)
     125  {
     126    if (!xdr_keystatus (xdrs, &objp->status))
     127      return FALSE;
     128    switch (objp->status)
     129      {
     130      case KEY_SUCCESS:
     131        if (!xdr_unixcred (xdrs, &objp->getcredres_u.cred))
     132  	return FALSE;
     133        break;
     134      default:
     135        break;
     136      }
     137    return TRUE;
     138  }
     139  libc_hidden_nolink_sunrpc (xdr_getcredres, GLIBC_2_1)
     140  
     141  bool_t
     142  xdr_key_netstarg (XDR * xdrs, key_netstarg * objp)
     143  {
     144    if (!xdr_keybuf (xdrs, objp->st_priv_key))
     145      return FALSE;
     146    if (!xdr_keybuf (xdrs, objp->st_pub_key))
     147      return FALSE;
     148    if (!xdr_netnamestr (xdrs, &objp->st_netname))
     149      return FALSE;
     150    return TRUE;
     151  }
     152  libc_hidden_nolink_sunrpc (xdr_key_netstarg, GLIBC_2_0)
     153  
     154  bool_t
     155  xdr_key_netstres (XDR * xdrs, key_netstres * objp)
     156  {
     157    if (!xdr_keystatus (xdrs, &objp->status))
     158      return FALSE;
     159    switch (objp->status)
     160      {
     161      case KEY_SUCCESS:
     162        if (!xdr_key_netstarg (xdrs, &objp->key_netstres_u.knet))
     163  	return FALSE;
     164        break;
     165      default:
     166        break;
     167      }
     168    return TRUE;
     169  }
     170  libc_hidden_nolink_sunrpc (xdr_key_netstres, GLIBC_2_0)