1 #include <sys/types.h> 2 #include <krb5.h> 3 #include <gssrpc/rpc.h> 4 #include <kdb.h> 5 #include <kadm5/admin_xdr.h> 6 #include "policy_db.h" 7 #ifdef HAVE_MEMORY_H 8 #include <memory.h> 9 #endif 10 #include <string.h> 11 12 static int 13 osa_policy_min_vers(osa_policy_ent_t objp) 14 { 15 if (objp->attributes || 16 objp->max_life || 17 objp->max_renewable_life || 18 objp->allowed_keysalts || 19 objp->n_tl_data) 20 return OSA_ADB_POLICY_VERSION_3; 21 22 if (objp->pw_max_fail || 23 objp->pw_failcnt_interval || 24 objp->pw_lockout_duration) 25 return OSA_ADB_POLICY_VERSION_2; 26 27 return OSA_ADB_POLICY_VERSION_1; 28 } 29 30 bool_t 31 xdr_osa_policy_ent_rec(XDR *xdrs, osa_policy_ent_t objp) 32 { 33 switch (xdrs->x_op) { 34 case XDR_ENCODE: 35 objp->version = osa_policy_min_vers(objp); 36 /* fall through */ 37 case XDR_FREE: 38 if (!xdr_int(xdrs, &objp->version)) 39 return FALSE; 40 break; 41 case XDR_DECODE: 42 if (!xdr_int(xdrs, &objp->version)) 43 return FALSE; 44 if (objp->version != OSA_ADB_POLICY_VERSION_1 && 45 objp->version != OSA_ADB_POLICY_VERSION_2 && 46 objp->version != OSA_ADB_POLICY_VERSION_3) 47 return FALSE; 48 break; 49 } 50 51 if(!xdr_nullstring(xdrs, &objp->name)) 52 return (FALSE); 53 if (!xdr_u_int32(xdrs, &objp->pw_min_life)) 54 return (FALSE); 55 if (!xdr_u_int32(xdrs, &objp->pw_max_life)) 56 return (FALSE); 57 if (!xdr_u_int32(xdrs, &objp->pw_min_length)) 58 return (FALSE); 59 if (!xdr_u_int32(xdrs, &objp->pw_min_classes)) 60 return (FALSE); 61 if (!xdr_u_int32(xdrs, &objp->pw_history_num)) 62 return (FALSE); 63 if (!xdr_u_int32(xdrs, &objp->policy_refcnt)) 64 return (FALSE); 65 if (objp->version > OSA_ADB_POLICY_VERSION_1) { 66 if (!xdr_u_int32(xdrs, &objp->pw_max_fail)) 67 return (FALSE); 68 if (!xdr_u_int32(xdrs, &objp->pw_failcnt_interval)) 69 return (FALSE); 70 if (!xdr_u_int32(xdrs, &objp->pw_lockout_duration)) 71 return (FALSE); 72 } 73 if (objp->version > OSA_ADB_POLICY_VERSION_2) { 74 if (!xdr_u_int32(xdrs, &objp->attributes)) 75 return (FALSE); 76 if (!xdr_u_int32(xdrs, &objp->max_life)) 77 return (FALSE); 78 if (!xdr_u_int32(xdrs, &objp->max_renewable_life)) 79 return (FALSE); 80 if (!xdr_nullstring(xdrs, &objp->allowed_keysalts)) 81 return (FALSE); 82 if (!xdr_short(xdrs, &objp->n_tl_data)) 83 return (FALSE); 84 if (!xdr_nulltype(xdrs, (void **) &objp->tl_data, 85 xdr_krb5_tl_data)) 86 return FALSE; 87 } 88 return (TRUE); 89 } 90