Path: blob/main/crypto/krb5/src/plugins/kdb/db2/pol_xdr.c
34914 views
#include <sys/types.h>1#include <krb5.h>2#include <gssrpc/rpc.h>3#include <kdb.h>4#include <kadm5/admin_xdr.h>5#include "policy_db.h"6#ifdef HAVE_MEMORY_H7#include <memory.h>8#endif9#include <string.h>1011static int12osa_policy_min_vers(osa_policy_ent_t objp)13{14if (objp->attributes ||15objp->max_life ||16objp->max_renewable_life ||17objp->allowed_keysalts ||18objp->n_tl_data)19return OSA_ADB_POLICY_VERSION_3;2021if (objp->pw_max_fail ||22objp->pw_failcnt_interval ||23objp->pw_lockout_duration)24return OSA_ADB_POLICY_VERSION_2;2526return OSA_ADB_POLICY_VERSION_1;27}2829bool_t30xdr_osa_policy_ent_rec(XDR *xdrs, osa_policy_ent_t objp)31{32switch (xdrs->x_op) {33case XDR_ENCODE:34objp->version = osa_policy_min_vers(objp);35/* fall through */36case XDR_FREE:37if (!xdr_int(xdrs, &objp->version))38return FALSE;39break;40case XDR_DECODE:41if (!xdr_int(xdrs, &objp->version))42return FALSE;43if (objp->version != OSA_ADB_POLICY_VERSION_1 &&44objp->version != OSA_ADB_POLICY_VERSION_2 &&45objp->version != OSA_ADB_POLICY_VERSION_3)46return FALSE;47break;48}4950if(!xdr_nullstring(xdrs, &objp->name))51return (FALSE);52if (!xdr_u_int32(xdrs, &objp->pw_min_life))53return (FALSE);54if (!xdr_u_int32(xdrs, &objp->pw_max_life))55return (FALSE);56if (!xdr_u_int32(xdrs, &objp->pw_min_length))57return (FALSE);58if (!xdr_u_int32(xdrs, &objp->pw_min_classes))59return (FALSE);60if (!xdr_u_int32(xdrs, &objp->pw_history_num))61return (FALSE);62if (!xdr_u_int32(xdrs, &objp->policy_refcnt))63return (FALSE);64if (objp->version > OSA_ADB_POLICY_VERSION_1) {65if (!xdr_u_int32(xdrs, &objp->pw_max_fail))66return (FALSE);67if (!xdr_u_int32(xdrs, &objp->pw_failcnt_interval))68return (FALSE);69if (!xdr_u_int32(xdrs, &objp->pw_lockout_duration))70return (FALSE);71}72if (objp->version > OSA_ADB_POLICY_VERSION_2) {73if (!xdr_u_int32(xdrs, &objp->attributes))74return (FALSE);75if (!xdr_u_int32(xdrs, &objp->max_life))76return (FALSE);77if (!xdr_u_int32(xdrs, &objp->max_renewable_life))78return (FALSE);79if (!xdr_nullstring(xdrs, &objp->allowed_keysalts))80return (FALSE);81if (!xdr_short(xdrs, &objp->n_tl_data))82return (FALSE);83if (!xdr_nulltype(xdrs, (void **) &objp->tl_data,84(xdrproc_t)xdr_krb5_tl_data))85return FALSE;86}87return (TRUE);88}899091