xref: /onnv-gate/usr/src/lib/krb5/plugins/kdb/db2/pol_xdr.c (revision 7934:6aeeafc994de)
14960Swillf #include <sys/types.h>
24960Swillf /* Solaris Kerberos: gssrpc not supported */
34960Swillf #if 0 /************** Begin IFDEF'ed OUT *******************************/
44960Swillf #include <gssrpc/rpc.h>
54960Swillf #else
64960Swillf #include <rpc/rpc.h>
74960Swillf #include <kadm5/kadm_rpc.h>
84960Swillf #endif /**************** END IFDEF'ed OUT *******************************/
94960Swillf #include <kdb.h>
104960Swillf #include "policy_db.h"
114960Swillf #ifdef HAVE_MEMORY_H
124960Swillf #include <memory.h>
134960Swillf #endif
14*7934SMark.Phalan@Sun.COM #include <krb5.h>
154960Swillf #include <strings.h>
164960Swillf 
174960Swillf /* Solaris Kerberos: this function taken from MIT's src/lib/rpc/xdr.c */
184960Swillf bool_t
xdr_u_int32(XDR * xdrs,uint32_t * up)194960Swillf xdr_u_int32(XDR *xdrs, uint32_t *up)
204960Swillf {
214960Swillf 	u_long ul;
224960Swillf 
234960Swillf 	switch (xdrs->x_op) {
244960Swillf 
254960Swillf 	case XDR_ENCODE:
264960Swillf 		ul = *up;
274960Swillf 		return (xdr_u_long(xdrs, &ul));
284960Swillf 
294960Swillf 	case XDR_DECODE:
304960Swillf 		if (!xdr_u_long(xdrs, &ul)) {
314960Swillf 			return (FALSE);
324960Swillf 		}
334960Swillf 		*up = ul;
344960Swillf 		return (TRUE);
354960Swillf 
364960Swillf 	case XDR_FREE:
374960Swillf 		return (TRUE);
384960Swillf 	}
394960Swillf 	return (FALSE);
404960Swillf }
414960Swillf 
424960Swillf static
xdr_nullstring(XDR * xdrs,char ** objp)434960Swillf bool_t xdr_nullstring(XDR *xdrs, char **objp)
444960Swillf {
454960Swillf      u_int size;
464960Swillf 
474960Swillf      if (xdrs->x_op == XDR_ENCODE) {
484960Swillf           if (*objp == NULL)
494960Swillf                size = 0;
504960Swillf           else
514960Swillf                size = strlen(*objp) + 1;
524960Swillf      }
534960Swillf      if (! xdr_u_int(xdrs, &size)) {
544960Swillf           return FALSE;
554960Swillf         }
564960Swillf      switch (xdrs->x_op) {
574960Swillf      case XDR_DECODE:
584960Swillf           if (size == 0) {
594960Swillf                *objp = NULL;
604960Swillf                return TRUE;
614960Swillf           } else if (*objp == NULL) {
624960Swillf                *objp = (char *) mem_alloc(size);
634960Swillf                if (*objp == NULL) {
644960Swillf                     errno = ENOMEM;
654960Swillf                     return FALSE;
664960Swillf                }
674960Swillf           }
684960Swillf           return (xdr_opaque(xdrs, *objp, size));
694960Swillf 
704960Swillf      case XDR_ENCODE:
714960Swillf           if (size != 0)
724960Swillf                return (xdr_opaque(xdrs, *objp, size));
734960Swillf           return TRUE;
744960Swillf 
754960Swillf      case XDR_FREE:
764960Swillf           if (*objp != NULL)
774960Swillf                mem_free(*objp, size);
784960Swillf           *objp = NULL;
794960Swillf           return TRUE;
804960Swillf      }
814960Swillf 
824960Swillf      return FALSE;
834960Swillf }
844960Swillf 
854960Swillf 
864960Swillf 
874960Swillf bool_t
xdr_osa_policy_ent_rec(XDR * xdrs,osa_policy_ent_t objp)884960Swillf xdr_osa_policy_ent_rec(XDR *xdrs, osa_policy_ent_t objp)
894960Swillf {
904960Swillf     switch (xdrs->x_op) {
914960Swillf     case XDR_ENCODE:
924960Swillf 	 objp->version = OSA_ADB_POLICY_VERSION_1;
934960Swillf 	 /* fall through */
944960Swillf     case XDR_FREE:
954960Swillf 	 if (!xdr_int(xdrs, &objp->version))
964960Swillf 	      return FALSE;
974960Swillf 	 break;
984960Swillf     case XDR_DECODE:
994960Swillf 	 if (!xdr_int(xdrs, &objp->version))
1004960Swillf 	      return FALSE;
1014960Swillf 	 if (objp->version != OSA_ADB_POLICY_VERSION_1)
1024960Swillf 	      return FALSE;
1034960Swillf 	 break;
1044960Swillf     }
1054960Swillf 
1064960Swillf     if(!xdr_nullstring(xdrs, &objp->name))
1074960Swillf 	return (FALSE);
1084960Swillf     if (!xdr_u_int32(xdrs, &objp->pw_min_life))
1094960Swillf 	return (FALSE);
1104960Swillf     if (!xdr_u_int32(xdrs, &objp->pw_max_life))
1114960Swillf 	return (FALSE);
1124960Swillf     if (!xdr_u_int32(xdrs, &objp->pw_min_length))
1134960Swillf 	return (FALSE);
1144960Swillf     if (!xdr_u_int32(xdrs, &objp->pw_min_classes))
1154960Swillf 	return (FALSE);
1164960Swillf     if (!xdr_u_int32(xdrs, &objp->pw_history_num))
1174960Swillf 	return (FALSE);
1184960Swillf     if (!xdr_u_int32(xdrs, &objp->policy_refcnt))
1194960Swillf 	return (FALSE);
1204960Swillf     return (TRUE);
1214960Swillf }
122