# PaCkAgE DaTaStReAm krb5 1 19538 # end of header 070701000a251c000081a40000000000000000000000015125a07f00000105000000b500010002ffffffffffffffff0000000d00000000krb5/pkginfoPKG=krb5 NAME=MIT krb5 1.11 i86pc Solaris 10 VERSION=1.11 PSTAMP=20th February 2013 VENDOR=MIT EMAIL=http://web.mit.edu/kerberos DESC=MIT krb5 network authentication protocol ARCH=i386 CATEGORY=utility CLASSES=none BASEDIR=/ ISTATES=S s 1 2 3 RSTATES=S s 1 2 3 070701000a251b000081a40000000000000000000000015125a07f0000300f000000b500010002ffffffffffffffff0000000c00000000krb5/pkgmap: 1 19538 1 d none /usr ? ? ? 1 d none /usr/local ? ? ? 1 d none /usr/local/bin 0755 root root 1 f none /usr/local/bin/compile_et 0755 root root 824 60178 1361420404 1 f none /usr/local/bin/gss-client 0755 root root 28296 55237 1361420406 1 f none /usr/local/bin/k5srvutil 0755 root root 1914 17044 1361420405 1 f none /usr/local/bin/kadmin 0755 root root 149404 32659 1361420405 1 f none /usr/local/bin/kdestroy 0755 root root 14440 51273 1361420405 1 f none /usr/local/bin/kinit 0755 root root 38644 11323 1361420405 1 f none /usr/local/bin/klist 0755 root root 32860 55913 1361420405 1 f none /usr/local/bin/kpasswd 0755 root root 16112 17061 1361420405 1 f none /usr/local/bin/krb5-config 0755 root root 6745 65112 1361420406 1 f none /usr/local/bin/ksu 4755 root root 99840 34310 1361420405 1 f none /usr/local/bin/kswitch 0755 root root 16792 15969 1361420405 1 f none /usr/local/bin/ktutil 0755 root root 92016 10996 1361420405 1 f none /usr/local/bin/kvno 0755 root root 22052 21023 1361420405 1 f none /usr/local/bin/sclient 0755 root root 18268 7298 1361420405 1 f none /usr/local/bin/sim_client 0755 root root 21500 36220 1361420406 1 f none /usr/local/bin/uuclient 0755 root root 21488 31056 1361420406 1 d none /usr/local/include 0755 root root 1 f none /usr/local/include/com_err.h 0644 root root 1979 35224 1361420404 1 d none /usr/local/include/gssapi 0755 root root 1 f none /usr/local/include/gssapi.h 0644 root root 181 14872 1361420404 1 f none /usr/local/include/gssapi/gssapi.h 0644 root root 29887 49845 1361420404 1 f none /usr/local/include/gssapi/gssapi_ext.h 0644 root root 17193 57829 1361420404 1 f none /usr/local/include/gssapi/gssapi_generic.h 0644 root root 2217 45227 1361420404 1 f none /usr/local/include/gssapi/gssapi_krb5.h 0644 root root 11098 48460 1361420404 1 f none /usr/local/include/gssapi/mechglue.h 0644 root root 1652 65481 1361420405 1 d none /usr/local/include/gssrpc 0755 root root 1 f none /usr/local/include/gssrpc/auth.h 0644 root root 6789 4356 1361420405 1 f none /usr/local/include/gssrpc/auth_gss.h 0644 root root 4840 6 1361420405 1 f none /usr/local/include/gssrpc/auth_gssapi.h 0644 root root 3883 3027 1361420405 1 f none /usr/local/include/gssrpc/auth_unix.h 0644 root root 2896 32075 1361420405 1 f none /usr/local/include/gssrpc/clnt.h 0644 root root 9660 40162 1361420405 1 f none /usr/local/include/gssrpc/netdb.h 0644 root root 2442 58123 1361420405 1 f none /usr/local/include/gssrpc/pmap_clnt.h 0644 root root 3429 13443 1361420405 1 f none /usr/local/include/gssrpc/pmap_prot.h 0644 root root 3841 43647 1361420405 1 f none /usr/local/include/gssrpc/pmap_rmt.h 0644 root root 2303 49546 1361420405 1 f none /usr/local/include/gssrpc/rename.h 0644 root root 10746 25298 1361420405 1 f none /usr/local/include/gssrpc/rpc.h 0644 root root 3861 50111 1361420405 1 f none /usr/local/include/gssrpc/rpc_msg.h 0644 root root 5106 16637 1361420405 1 f none /usr/local/include/gssrpc/svc.h 0644 root root 11595 45932 1361420405 1 f none /usr/local/include/gssrpc/svc_auth.h 0644 root root 3976 58265 1361420405 1 f none /usr/local/include/gssrpc/types.h 0644 root root 4989 62601 1361420405 1 f none /usr/local/include/gssrpc/xdr.h 0644 root root 11779 45410 1361420405 1 d none /usr/local/include/kadm5 0755 root root 1 f none /usr/local/include/kadm5/admin.h 0644 root root 22813 25998 1361420405 1 f none /usr/local/include/kadm5/chpass_util_strings.h 0644 root root 1572 49623 1361420405 1 f none /usr/local/include/kadm5/kadm_err.h 0644 root root 4125 52143 1361420405 1 f none /usr/local/include/kdb.h 0644 root root 58657 7704 1361420404 1 d none /usr/local/include/krb5 0755 root root 1 f none /usr/local/include/krb5.h 0644 root root 402 33860 1361420404 1 f none /usr/local/include/krb5/kadm5_hook_plugin.h 0644 root root 5763 14436 1361420404 1 f none /usr/local/include/krb5/krb5.h 0644 root root 321736 59544 1361420404 1 f none /usr/local/include/krb5/locate_plugin.h 0644 root root 2624 25195 1361420404 1 f none /usr/local/include/krb5/plugin.h 0644 root root 2090 53195 1361420404 1 f none /usr/local/include/krb5/preauth_plugin.h 0644 root root 26445 15616 1361420404 1 f none /usr/local/include/krb5/pwqual_plugin.h 0644 root root 4426 54436 1361420404 1 f none /usr/local/include/profile.h 0644 root root 12178 57934 1361420404 1 f none /usr/local/include/verto-module.h 0644 root root 6640 12421 1361420404 1 f none /usr/local/include/verto.h 0644 root root 19012 41735 1361420404 1 d none /usr/local/lib 0755 root root 1 d none /usr/local/lib/krb5 0755 root root 1 d none /usr/local/lib/krb5/plugins 0755 root root 1 d none /usr/local/lib/krb5/plugins/authdata 0755 root root 1 d none /usr/local/lib/krb5/plugins/kdb 0755 root root 1 f none /usr/local/lib/krb5/plugins/kdb/db2.so 0644 root root 98712 19795 1361420405 1 f none /usr/local/lib/krb5/plugins/kdb/kldap.so 0644 root root 15880 16695 1361420405 1 d none /usr/local/lib/krb5/plugins/libkrb5 0755 root root 1 d none /usr/local/lib/krb5/plugins/preauth 0755 root root 1 f none /usr/local/lib/krb5/plugins/preauth/pkinit.so 0644 root root 246136 5808 1361420405 1 s none /usr/local/lib/libcom_err.so=libcom_err.so.3.0 1 s none /usr/local/lib/libcom_err.so.3=libcom_err.so.3.0 1 f none /usr/local/lib/libcom_err.so.3.0 0644 root root 21560 1696 1361420404 1 s none /usr/local/lib/libgssapi_krb5.so=libgssapi_krb5.so.2.2 1 s none /usr/local/lib/libgssapi_krb5.so.2=libgssapi_krb5.so.2.2 1 f none /usr/local/lib/libgssapi_krb5.so.2.2 0644 root root 1286156 32805 1361420405 1 s none /usr/local/lib/libgssrpc.so=libgssrpc.so.4.1 1 s none /usr/local/lib/libgssrpc.so.4=libgssrpc.so.4.1 1 f none /usr/local/lib/libgssrpc.so.4.1 0644 root root 292196 36250 1361420405 1 s none /usr/local/lib/libk5crypto.so=libk5crypto.so.3.1 1 s none /usr/local/lib/libk5crypto.so.3=libk5crypto.so.3.1 1 f none /usr/local/lib/libk5crypto.so.3.1 0644 root root 1186948 16643 1361420404 1 s none /usr/local/lib/libkadm5clnt.so=libkadm5clnt_mit.so 1 s none /usr/local/lib/libkadm5clnt_mit.so=libkadm5clnt_mit.so.8.0 1 s none /usr/local/lib/libkadm5clnt_mit.so.8=libkadm5clnt_mit.so.8.0 1 f none /usr/local/lib/libkadm5clnt_mit.so.8.0 0644 root root 166880 55419 1361420405 1 s none /usr/local/lib/libkadm5srv.so=libkadm5srv_mit.so 1 s none /usr/local/lib/libkadm5srv_mit.so=libkadm5srv_mit.so.8.0 1 s none /usr/local/lib/libkadm5srv_mit.so.8=libkadm5srv_mit.so.8.0 1 f none /usr/local/lib/libkadm5srv_mit.so.8.0 0644 root root 286804 50629 1361420405 1 s none /usr/local/lib/libkdb5.so=libkdb5.so.7.0 1 s none /usr/local/lib/libkdb5.so.7=libkdb5.so.7.0 1 f none /usr/local/lib/libkdb5.so.7.0 0644 root root 157288 37389 1361420405 1 s none /usr/local/lib/libkdb_ldap.so=libkdb_ldap.so.1.0 1 s none /usr/local/lib/libkdb_ldap.so.1=libkdb_ldap.so.1.0 1 f none /usr/local/lib/libkdb_ldap.so.1.0 0644 root root 268916 14075 1361420405 1 s none /usr/local/lib/libkrb5.so=libkrb5.so.3.3 1 s none /usr/local/lib/libkrb5.so.3=libkrb5.so.3.3 1 f none /usr/local/lib/libkrb5.so.3.3 0644 root root 2685656 15170 1361420404 1 s none /usr/local/lib/libkrb5support.so=libkrb5support.so.0.1 1 s none /usr/local/lib/libkrb5support.so.0=libkrb5support.so.0.1 1 f none /usr/local/lib/libkrb5support.so.0.1 0644 root root 126624 32892 1361420404 1 s none /usr/local/lib/libverto.so=libverto.so.0.0 1 s none /usr/local/lib/libverto.so.0=libverto.so.0.0 1 f none /usr/local/lib/libverto.so.0.0 0644 root root 71060 10498 1361420404 1 d none /usr/local/sbin 0755 root root 1 f none /usr/local/sbin/gss-server 0755 root root 26588 10070 1361420406 1 f none /usr/local/sbin/kadmin.local 0755 root root 149920 64664 1361420405 1 f none /usr/local/sbin/kadmind 0755 root root 150224 29628 1361420405 1 f none /usr/local/sbin/kdb5_ldap_util 0755 root root 111128 43540 1361420405 1 f none /usr/local/sbin/kdb5_util 0755 root root 166000 35787 1361420405 1 f none /usr/local/sbin/kprop 0755 root root 37580 46483 1361420405 1 f none /usr/local/sbin/kpropd 0755 root root 58688 34762 1361420405 1 f none /usr/local/sbin/kproplog 0755 root root 24664 42799 1361420405 1 f none /usr/local/sbin/krb5-send-pr 0755 root root 14360 20762 1361420404 1 f none /usr/local/sbin/krb5kdc 0755 root root 267776 32716 1361420405 1 f none /usr/local/sbin/sim_server 0755 root root 13932 65389 1361420406 1 f none /usr/local/sbin/sserver 0755 root root 19420 39061 1361420405 1 f none /usr/local/sbin/uuserver 0755 root root 20032 32388 1361420406 1 d none /usr/local/share 0755 root root 1 d none /usr/local/share/et 0755 root root 1 f none /usr/local/share/et/et_c.awk 0644 root root 5212 10976 1361420404 1 f none /usr/local/share/et/et_h.awk 0644 root root 3918 42808 1361420404 1 d none /usr/local/share/examples 0755 root root 1 d none /usr/local/share/examples/krb5 0755 root root 1 f none /usr/local/share/examples/krb5/kdc.conf 0644 root root 304 24220 1361420406 1 f none /usr/local/share/examples/krb5/krb5.conf 0644 root root 546 41836 1361420406 1 f none /usr/local/share/examples/krb5/services.append 0644 root root 1493 61100 1361420406 1 d none /usr/local/share/gnats 0755 root root 1 f none /usr/local/share/gnats/mit 0644 root root 99 8597 1361420404 1 d none /usr/local/share/locale 0755 root root 1 d none /usr/local/share/locale/en_US 0755 root root 1 d none /usr/local/share/locale/en_US/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/en_US/LC_MESSAGES/mit-krb5.mo 0644 root root 402 29594 1361420406 1 d none /usr/local/share/man 0755 root root 1 d none /usr/local/share/man/cat1 0755 root root 1 d none /usr/local/share/man/cat5 0755 root root 1 d none /usr/local/share/man/cat8 0755 root root 1 d none /usr/local/share/man/man1 0755 root root 1 f none /usr/local/share/man/man1/compile_et.1 0644 root root 2549 26824 1361420404 1 f none /usr/local/share/man/man1/k5srvutil.1 0644 root root 2464 20383 1361420406 1 f none /usr/local/share/man/man1/kadmin.1 0644 root root 27125 33503 1361420406 1 f none /usr/local/share/man/man1/kdestroy.1 0644 root root 2640 32992 1361420406 1 f none /usr/local/share/man/man1/kinit.1 0644 root root 8024 55125 1361420406 1 f none /usr/local/share/man/man1/klist.1 0644 root root 4230 36456 1361420406 1 f none /usr/local/share/man/man1/kpasswd.1 0644 root root 1769 23725 1361420406 1 f none /usr/local/share/man/man1/krb5-send-pr.1 0644 root root 8205 45897 1361420404 1 f none /usr/local/share/man/man1/ksu.1 0644 root root 16670 32649 1361420406 1 f none /usr/local/share/man/man1/kswitch.1 0644 root root 2075 47057 1361420406 1 f none /usr/local/share/man/man1/ktutil.1 0644 root root 3179 1058 1361420406 1 f none /usr/local/share/man/man1/kvno.1 0644 root root 2924 58779 1361420406 1 f none /usr/local/share/man/man1/sclient.1 0644 root root 1193 37180 1361420406 1 d none /usr/local/share/man/man5 0755 root root 1 f none /usr/local/share/man/man5/.k5identity.5 0644 root root 22 1863 1361420406 1 f none /usr/local/share/man/man5/.k5login.5 0644 root root 19 1526 1361420406 1 f none /usr/local/share/man/man5/k5identity.5 0644 root root 3084 7150 1361420406 1 f none /usr/local/share/man/man5/k5login.5 0644 root root 2408 12446 1361420406 1 f none /usr/local/share/man/man5/kadm5.acl.5 0644 root root 6052 57824 1361420406 1 f none /usr/local/share/man/man5/kdc.conf.5 0644 root root 27936 36874 1361420406 1 f none /usr/local/share/man/man5/krb5.conf.5 0644 root root 41323 22695 1361420406 1 d none /usr/local/share/man/man8 0755 root root 1 f none /usr/local/share/man/man8/kadmin.local.8 0644 root root 18 1449 1361420406 1 f none /usr/local/share/man/man8/kadmind.8 0644 root root 5479 27640 1361420406 1 f none /usr/local/share/man/man8/kdb5_ldap_util.8 0644 root root 12864 50519 1361420406 1 f none /usr/local/share/man/man8/kdb5_util.8 0644 root root 12268 27968 1361420406 1 f none /usr/local/share/man/man8/kprop.8 0644 root root 2025 42240 1361420406 1 f none /usr/local/share/man/man8/kpropd.8 0644 root root 5017 46364 1361420406 1 f none /usr/local/share/man/man8/kproplog.8 0644 root root 3405 30511 1361420406 1 f none /usr/local/share/man/man8/krb5kdc.8 0644 root root 5743 44556 1361420406 1 f none /usr/local/share/man/man8/sserver.8 0644 root root 4449 51720 1361420406 1 d none /usr/local/var 0755 root root 1 d none /usr/local/var/krb5kdc 0755 root root 1 i checkinstall 790 2504 1361420415 1 i pkginfo 261 19956 1361420415 07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000b00000000TRAILER!!!070701000a251c000081a40000000000000000000000015125a07f00000105000000b500010002ffffffffffffffff0000000800000000pkginfoPKG=krb5 NAME=MIT krb5 1.11 i86pc Solaris 10 VERSION=1.11 PSTAMP=20th February 2013 VENDOR=MIT EMAIL=http://web.mit.edu/kerberos DESC=MIT krb5 network authentication protocol ARCH=i386 CATEGORY=utility CLASSES=none BASEDIR=/ ISTATES=S s 1 2 3 RSTATES=S s 1 2 3 070701000a251b000081a40000000000000000000000015125a07f0000300f000000b500010002ffffffffffffffff0000000700000000pkgmap: 1 19538 1 d none /usr ? ? ? 1 d none /usr/local ? ? ? 1 d none /usr/local/bin 0755 root root 1 f none /usr/local/bin/compile_et 0755 root root 824 60178 1361420404 1 f none /usr/local/bin/gss-client 0755 root root 28296 55237 1361420406 1 f none /usr/local/bin/k5srvutil 0755 root root 1914 17044 1361420405 1 f none /usr/local/bin/kadmin 0755 root root 149404 32659 1361420405 1 f none /usr/local/bin/kdestroy 0755 root root 14440 51273 1361420405 1 f none /usr/local/bin/kinit 0755 root root 38644 11323 1361420405 1 f none /usr/local/bin/klist 0755 root root 32860 55913 1361420405 1 f none /usr/local/bin/kpasswd 0755 root root 16112 17061 1361420405 1 f none /usr/local/bin/krb5-config 0755 root root 6745 65112 1361420406 1 f none /usr/local/bin/ksu 4755 root root 99840 34310 1361420405 1 f none /usr/local/bin/kswitch 0755 root root 16792 15969 1361420405 1 f none /usr/local/bin/ktutil 0755 root root 92016 10996 1361420405 1 f none /usr/local/bin/kvno 0755 root root 22052 21023 1361420405 1 f none /usr/local/bin/sclient 0755 root root 18268 7298 1361420405 1 f none /usr/local/bin/sim_client 0755 root root 21500 36220 1361420406 1 f none /usr/local/bin/uuclient 0755 root root 21488 31056 1361420406 1 d none /usr/local/include 0755 root root 1 f none /usr/local/include/com_err.h 0644 root root 1979 35224 1361420404 1 d none /usr/local/include/gssapi 0755 root root 1 f none /usr/local/include/gssapi.h 0644 root root 181 14872 1361420404 1 f none /usr/local/include/gssapi/gssapi.h 0644 root root 29887 49845 1361420404 1 f none /usr/local/include/gssapi/gssapi_ext.h 0644 root root 17193 57829 1361420404 1 f none /usr/local/include/gssapi/gssapi_generic.h 0644 root root 2217 45227 1361420404 1 f none /usr/local/include/gssapi/gssapi_krb5.h 0644 root root 11098 48460 1361420404 1 f none /usr/local/include/gssapi/mechglue.h 0644 root root 1652 65481 1361420405 1 d none /usr/local/include/gssrpc 0755 root root 1 f none /usr/local/include/gssrpc/auth.h 0644 root root 6789 4356 1361420405 1 f none /usr/local/include/gssrpc/auth_gss.h 0644 root root 4840 6 1361420405 1 f none /usr/local/include/gssrpc/auth_gssapi.h 0644 root root 3883 3027 1361420405 1 f none /usr/local/include/gssrpc/auth_unix.h 0644 root root 2896 32075 1361420405 1 f none /usr/local/include/gssrpc/clnt.h 0644 root root 9660 40162 1361420405 1 f none /usr/local/include/gssrpc/netdb.h 0644 root root 2442 58123 1361420405 1 f none /usr/local/include/gssrpc/pmap_clnt.h 0644 root root 3429 13443 1361420405 1 f none /usr/local/include/gssrpc/pmap_prot.h 0644 root root 3841 43647 1361420405 1 f none /usr/local/include/gssrpc/pmap_rmt.h 0644 root root 2303 49546 1361420405 1 f none /usr/local/include/gssrpc/rename.h 0644 root root 10746 25298 1361420405 1 f none /usr/local/include/gssrpc/rpc.h 0644 root root 3861 50111 1361420405 1 f none /usr/local/include/gssrpc/rpc_msg.h 0644 root root 5106 16637 1361420405 1 f none /usr/local/include/gssrpc/svc.h 0644 root root 11595 45932 1361420405 1 f none /usr/local/include/gssrpc/svc_auth.h 0644 root root 3976 58265 1361420405 1 f none /usr/local/include/gssrpc/types.h 0644 root root 4989 62601 1361420405 1 f none /usr/local/include/gssrpc/xdr.h 0644 root root 11779 45410 1361420405 1 d none /usr/local/include/kadm5 0755 root root 1 f none /usr/local/include/kadm5/admin.h 0644 root root 22813 25998 1361420405 1 f none /usr/local/include/kadm5/chpass_util_strings.h 0644 root root 1572 49623 1361420405 1 f none /usr/local/include/kadm5/kadm_err.h 0644 root root 4125 52143 1361420405 1 f none /usr/local/include/kdb.h 0644 root root 58657 7704 1361420404 1 d none /usr/local/include/krb5 0755 root root 1 f none /usr/local/include/krb5.h 0644 root root 402 33860 1361420404 1 f none /usr/local/include/krb5/kadm5_hook_plugin.h 0644 root root 5763 14436 1361420404 1 f none /usr/local/include/krb5/krb5.h 0644 root root 321736 59544 1361420404 1 f none /usr/local/include/krb5/locate_plugin.h 0644 root root 2624 25195 1361420404 1 f none /usr/local/include/krb5/plugin.h 0644 root root 2090 53195 1361420404 1 f none /usr/local/include/krb5/preauth_plugin.h 0644 root root 26445 15616 1361420404 1 f none /usr/local/include/krb5/pwqual_plugin.h 0644 root root 4426 54436 1361420404 1 f none /usr/local/include/profile.h 0644 root root 12178 57934 1361420404 1 f none /usr/local/include/verto-module.h 0644 root root 6640 12421 1361420404 1 f none /usr/local/include/verto.h 0644 root root 19012 41735 1361420404 1 d none /usr/local/lib 0755 root root 1 d none /usr/local/lib/krb5 0755 root root 1 d none /usr/local/lib/krb5/plugins 0755 root root 1 d none /usr/local/lib/krb5/plugins/authdata 0755 root root 1 d none /usr/local/lib/krb5/plugins/kdb 0755 root root 1 f none /usr/local/lib/krb5/plugins/kdb/db2.so 0644 root root 98712 19795 1361420405 1 f none /usr/local/lib/krb5/plugins/kdb/kldap.so 0644 root root 15880 16695 1361420405 1 d none /usr/local/lib/krb5/plugins/libkrb5 0755 root root 1 d none /usr/local/lib/krb5/plugins/preauth 0755 root root 1 f none /usr/local/lib/krb5/plugins/preauth/pkinit.so 0644 root root 246136 5808 1361420405 1 s none /usr/local/lib/libcom_err.so=libcom_err.so.3.0 1 s none /usr/local/lib/libcom_err.so.3=libcom_err.so.3.0 1 f none /usr/local/lib/libcom_err.so.3.0 0644 root root 21560 1696 1361420404 1 s none /usr/local/lib/libgssapi_krb5.so=libgssapi_krb5.so.2.2 1 s none /usr/local/lib/libgssapi_krb5.so.2=libgssapi_krb5.so.2.2 1 f none /usr/local/lib/libgssapi_krb5.so.2.2 0644 root root 1286156 32805 1361420405 1 s none /usr/local/lib/libgssrpc.so=libgssrpc.so.4.1 1 s none /usr/local/lib/libgssrpc.so.4=libgssrpc.so.4.1 1 f none /usr/local/lib/libgssrpc.so.4.1 0644 root root 292196 36250 1361420405 1 s none /usr/local/lib/libk5crypto.so=libk5crypto.so.3.1 1 s none /usr/local/lib/libk5crypto.so.3=libk5crypto.so.3.1 1 f none /usr/local/lib/libk5crypto.so.3.1 0644 root root 1186948 16643 1361420404 1 s none /usr/local/lib/libkadm5clnt.so=libkadm5clnt_mit.so 1 s none /usr/local/lib/libkadm5clnt_mit.so=libkadm5clnt_mit.so.8.0 1 s none /usr/local/lib/libkadm5clnt_mit.so.8=libkadm5clnt_mit.so.8.0 1 f none /usr/local/lib/libkadm5clnt_mit.so.8.0 0644 root root 166880 55419 1361420405 1 s none /usr/local/lib/libkadm5srv.so=libkadm5srv_mit.so 1 s none /usr/local/lib/libkadm5srv_mit.so=libkadm5srv_mit.so.8.0 1 s none /usr/local/lib/libkadm5srv_mit.so.8=libkadm5srv_mit.so.8.0 1 f none /usr/local/lib/libkadm5srv_mit.so.8.0 0644 root root 286804 50629 1361420405 1 s none /usr/local/lib/libkdb5.so=libkdb5.so.7.0 1 s none /usr/local/lib/libkdb5.so.7=libkdb5.so.7.0 1 f none /usr/local/lib/libkdb5.so.7.0 0644 root root 157288 37389 1361420405 1 s none /usr/local/lib/libkdb_ldap.so=libkdb_ldap.so.1.0 1 s none /usr/local/lib/libkdb_ldap.so.1=libkdb_ldap.so.1.0 1 f none /usr/local/lib/libkdb_ldap.so.1.0 0644 root root 268916 14075 1361420405 1 s none /usr/local/lib/libkrb5.so=libkrb5.so.3.3 1 s none /usr/local/lib/libkrb5.so.3=libkrb5.so.3.3 1 f none /usr/local/lib/libkrb5.so.3.3 0644 root root 2685656 15170 1361420404 1 s none /usr/local/lib/libkrb5support.so=libkrb5support.so.0.1 1 s none /usr/local/lib/libkrb5support.so.0=libkrb5support.so.0.1 1 f none /usr/local/lib/libkrb5support.so.0.1 0644 root root 126624 32892 1361420404 1 s none /usr/local/lib/libverto.so=libverto.so.0.0 1 s none /usr/local/lib/libverto.so.0=libverto.so.0.0 1 f none /usr/local/lib/libverto.so.0.0 0644 root root 71060 10498 1361420404 1 d none /usr/local/sbin 0755 root root 1 f none /usr/local/sbin/gss-server 0755 root root 26588 10070 1361420406 1 f none /usr/local/sbin/kadmin.local 0755 root root 149920 64664 1361420405 1 f none /usr/local/sbin/kadmind 0755 root root 150224 29628 1361420405 1 f none /usr/local/sbin/kdb5_ldap_util 0755 root root 111128 43540 1361420405 1 f none /usr/local/sbin/kdb5_util 0755 root root 166000 35787 1361420405 1 f none /usr/local/sbin/kprop 0755 root root 37580 46483 1361420405 1 f none /usr/local/sbin/kpropd 0755 root root 58688 34762 1361420405 1 f none /usr/local/sbin/kproplog 0755 root root 24664 42799 1361420405 1 f none /usr/local/sbin/krb5-send-pr 0755 root root 14360 20762 1361420404 1 f none /usr/local/sbin/krb5kdc 0755 root root 267776 32716 1361420405 1 f none /usr/local/sbin/sim_server 0755 root root 13932 65389 1361420406 1 f none /usr/local/sbin/sserver 0755 root root 19420 39061 1361420405 1 f none /usr/local/sbin/uuserver 0755 root root 20032 32388 1361420406 1 d none /usr/local/share 0755 root root 1 d none /usr/local/share/et 0755 root root 1 f none /usr/local/share/et/et_c.awk 0644 root root 5212 10976 1361420404 1 f none /usr/local/share/et/et_h.awk 0644 root root 3918 42808 1361420404 1 d none /usr/local/share/examples 0755 root root 1 d none /usr/local/share/examples/krb5 0755 root root 1 f none /usr/local/share/examples/krb5/kdc.conf 0644 root root 304 24220 1361420406 1 f none /usr/local/share/examples/krb5/krb5.conf 0644 root root 546 41836 1361420406 1 f none /usr/local/share/examples/krb5/services.append 0644 root root 1493 61100 1361420406 1 d none /usr/local/share/gnats 0755 root root 1 f none /usr/local/share/gnats/mit 0644 root root 99 8597 1361420404 1 d none /usr/local/share/locale 0755 root root 1 d none /usr/local/share/locale/en_US 0755 root root 1 d none /usr/local/share/locale/en_US/LC_MESSAGES 0755 root root 1 f none /usr/local/share/locale/en_US/LC_MESSAGES/mit-krb5.mo 0644 root root 402 29594 1361420406 1 d none /usr/local/share/man 0755 root root 1 d none /usr/local/share/man/cat1 0755 root root 1 d none /usr/local/share/man/cat5 0755 root root 1 d none /usr/local/share/man/cat8 0755 root root 1 d none /usr/local/share/man/man1 0755 root root 1 f none /usr/local/share/man/man1/compile_et.1 0644 root root 2549 26824 1361420404 1 f none /usr/local/share/man/man1/k5srvutil.1 0644 root root 2464 20383 1361420406 1 f none /usr/local/share/man/man1/kadmin.1 0644 root root 27125 33503 1361420406 1 f none /usr/local/share/man/man1/kdestroy.1 0644 root root 2640 32992 1361420406 1 f none /usr/local/share/man/man1/kinit.1 0644 root root 8024 55125 1361420406 1 f none /usr/local/share/man/man1/klist.1 0644 root root 4230 36456 1361420406 1 f none /usr/local/share/man/man1/kpasswd.1 0644 root root 1769 23725 1361420406 1 f none /usr/local/share/man/man1/krb5-send-pr.1 0644 root root 8205 45897 1361420404 1 f none /usr/local/share/man/man1/ksu.1 0644 root root 16670 32649 1361420406 1 f none /usr/local/share/man/man1/kswitch.1 0644 root root 2075 47057 1361420406 1 f none /usr/local/share/man/man1/ktutil.1 0644 root root 3179 1058 1361420406 1 f none /usr/local/share/man/man1/kvno.1 0644 root root 2924 58779 1361420406 1 f none /usr/local/share/man/man1/sclient.1 0644 root root 1193 37180 1361420406 1 d none /usr/local/share/man/man5 0755 root root 1 f none /usr/local/share/man/man5/.k5identity.5 0644 root root 22 1863 1361420406 1 f none /usr/local/share/man/man5/.k5login.5 0644 root root 19 1526 1361420406 1 f none /usr/local/share/man/man5/k5identity.5 0644 root root 3084 7150 1361420406 1 f none /usr/local/share/man/man5/k5login.5 0644 root root 2408 12446 1361420406 1 f none /usr/local/share/man/man5/kadm5.acl.5 0644 root root 6052 57824 1361420406 1 f none /usr/local/share/man/man5/kdc.conf.5 0644 root root 27936 36874 1361420406 1 f none /usr/local/share/man/man5/krb5.conf.5 0644 root root 41323 22695 1361420406 1 d none /usr/local/share/man/man8 0755 root root 1 f none /usr/local/share/man/man8/kadmin.local.8 0644 root root 18 1449 1361420406 1 f none /usr/local/share/man/man8/kadmind.8 0644 root root 5479 27640 1361420406 1 f none /usr/local/share/man/man8/kdb5_ldap_util.8 0644 root root 12864 50519 1361420406 1 f none /usr/local/share/man/man8/kdb5_util.8 0644 root root 12268 27968 1361420406 1 f none /usr/local/share/man/man8/kprop.8 0644 root root 2025 42240 1361420406 1 f none /usr/local/share/man/man8/kpropd.8 0644 root root 5017 46364 1361420406 1 f none /usr/local/share/man/man8/kproplog.8 0644 root root 3405 30511 1361420406 1 f none /usr/local/share/man/man8/krb5kdc.8 0644 root root 5743 44556 1361420406 1 f none /usr/local/share/man/man8/sserver.8 0644 root root 4449 51720 1361420406 1 d none /usr/local/var 0755 root root 1 d none /usr/local/var/krb5kdc 0755 root root 1 i checkinstall 790 2504 1361420415 1 i pkginfo 261 19956 1361420415 070701000a25ac000041ed0000000000000000000000025125a07f00000000000000b500010002ffffffffffffffff0000000800000000install070701000a25ad000081ed0000000000000000000000015125a07f00000316000000b500010002ffffffffffffffff0000001500000000install/checkinstall#!/bin/sh # expected_bits="64" expected_release="5.10" expected_platform="i386" # release=`uname -r` platform=`uname -p` bits=`isainfo -b` # if [ ${platform} != ${expected_platform} ]; then echo "\n\n\n\tThis package must be installed on a ${expected_platform} architecture\n" echo "\tAborting installation.\n\n\n" exit 1 fi if [ ${release} != ${expected_release} ]; then echo "\n\n\n\tThis package must be installed on a ${expected_release} machine\n" echo "\tAborting installation.\n\n\n" exit 1 fi #if [ ${bits} != ${expected_bits} ]; then # echo "\n\n\n\tThis package must be installed on a ${expected_bits} bit machine\n" # echo "\tYour machine is running a ${bits} bit O.S. currently\n" # echo "\tAborting installation.\n\n\n" # exit 1 #fi exit 0 070701000a251d000041ed0000000000000000000000035125a07f00000000000000b500010002ffffffffffffffff0000000500000000root070701000a251e000041ed0000000000000000000000035125a07f00000000000000b500010002ffffffffffffffff0000000900000000root/usr070701000a251f000041ed0000000000000000000000075125a07f00000000000000b500010002ffffffffffffffff0000000f00000000root/usr/local070701000a2531000041ed0000000000000000000000065125a07f00000000000000b500010002ffffffffffffffff0000001700000000root/usr/local/include070701000a2533000081a40000000000000000000000015125a074000000b5000000b500010002ffffffffffffffff0000002000000000root/usr/local/include/gssapi.h/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* * Wrapper so that #include will work without special include * paths. */ #include 070701000a255a000081a40000000000000000000000015125a07400004a44000000b500010002ffffffffffffffff0000001f00000000root/usr/local/include/verto.h/* * Copyright 2011 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation files * (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #ifndef VERTO_H_ #define VERTO_H_ #include /* For time_t */ #include /* For pid_t */ #ifdef WIN32 #include typedef HANDLE verto_proc; typedef DWORD verto_proc_status; #else typedef pid_t verto_proc; typedef int verto_proc_status; #endif #define VERTO_SIG_IGN ((verto_callback *) 1) #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef struct verto_ctx verto_ctx; typedef struct verto_ev verto_ev; typedef enum { VERTO_EV_TYPE_NONE = 0, VERTO_EV_TYPE_IO = 1, VERTO_EV_TYPE_TIMEOUT = 1 << 1, VERTO_EV_TYPE_IDLE = 1 << 2, VERTO_EV_TYPE_SIGNAL = 1 << 3, VERTO_EV_TYPE_CHILD = 1 << 4 } verto_ev_type; typedef enum { VERTO_EV_FLAG_NONE = 0, VERTO_EV_FLAG_PERSIST = 1, VERTO_EV_FLAG_PRIORITY_LOW = 1 << 1, VERTO_EV_FLAG_PRIORITY_MEDIUM = 1 << 2, VERTO_EV_FLAG_PRIORITY_HIGH = 1 << 3, VERTO_EV_FLAG_IO_READ = 1 << 4, VERTO_EV_FLAG_IO_WRITE = 1 << 5, VERTO_EV_FLAG_IO_ERROR = 1 << 7, VERTO_EV_FLAG_IO_CLOSE_FD = 1 << 8, VERTO_EV_FLAG_REINITIABLE = 1 << 6, _VERTO_EV_FLAG_MUTABLE_MASK = VERTO_EV_FLAG_PRIORITY_LOW | VERTO_EV_FLAG_PRIORITY_MEDIUM | VERTO_EV_FLAG_PRIORITY_HIGH | VERTO_EV_FLAG_IO_READ | VERTO_EV_FLAG_IO_WRITE, _VERTO_EV_FLAG_MAX = VERTO_EV_FLAG_IO_CLOSE_FD } verto_ev_flag; typedef void (verto_callback)(verto_ctx *ctx, verto_ev *ev); /** * Creates a new event context using an optionally specified implementation * and/or optionally specified required features. * * If you are an application that has already decided on using a particular * event loop implementation, you should not call this function, but instead * import the verto-NAME.h header and link against the verto-NAME.so, where * NAME is the implementation you wish to use. * * If you are a library, you should generally avoid creating event contexts * on your own but allow applications to pass in a verto_ctx you can use. * * There are two cases where you should use this function. The first is * where you have a need to choose an implementation at run time, usually * for testing purposes. The second and more common is when you simply * wish to remain implementation agnostic. In this later case, you should * always call like this: verto_new(NULL, ...). This lets verto choose the best * implementation to use. * * If impl is not NULL, a new context is returned which is backed by the * implementation specified. If the implementation specified is not * available or if the required types (reqtypes) are not provided by the * named implementation, NULL is returned. The parameter 'impl' can specify: * * The full path to an implementation library * * The name of the implementation library (i.e. - "glib" or "libev") * * If impl is NULL, verto will attempt to automatically determine the * best implementation to use. * * First, verto will attempt to use an existing, previously loaded * implementation. This is handled automatically by internal caching of either * the first implementation loaded or the one specified by verto_set_default(). * * Second, verto will attempt to discern if you are already linked to any * of the supported implementations (to avoid wasting memory by loading * extra unnecessary libraries). If you are linked to one supported * implementation, that implementation will be chosen. If you are linked * to more than one supported implementation one of the ones linked to * will be chosen, but the order of the particular choice is undefined. * * Third, verto will attempt to load the compile-time default, if defined at * build time and available at runtime. * * Last, verto will attempt to load any implementation installed. The specific * order of this step is undefined. * * In all cases above, if the implementation does not support all the specified * features (reqtypes), it will be skipped and processing will continue from * where it left off. This means that if verto_new() returns non-NULL it is * guaranteed to support the features you specified. * * @see verto_set_default() * @param impl The implementation to use, or NULL. * @param reqtypes A bitwise or'd list of required event type features. * @return A new verto_ctx, or NULL on error. Call verto_free() when done. */ verto_ctx * verto_new(const char *impl, verto_ev_type reqtypes); /** * Gets the default event context using an optionally specified implementation. * * This function is essentially a singleton version of verto_new(). However, * since this function must return the same loop as the *_default() call of * the underlying implementation (if such a function exists), it is NOT a * global singleton, but a per-implementation singleton. For this reason, you * must call verto_free() when you are done with this loop. Even after calling * verto_free() on the default verto_ctx, you can safely call verto_default() * again and receive a new reference to the same (internally default) loop. * * In all other respects, verto_default() acts exactly like verto_new(). * * @see verto_new() * @see verto_free() * @param impl The implementation to use, or NULL. * @param reqtypes A bitwise or'd list of required event type features. * @return The default verto_ctx, or NULL on error. Call verto_free() when done. */ verto_ctx * verto_default(const char *impl, verto_ev_type reqtypes); /** * Sets the default implementation to use by its name. * * This function returns 1 on success and 0 on failure. It can fail for the * following reasons: * 1. The default implementation was already set via verto_set_default(). * 2. The implementation specified could not be found. * 3. The implementation specified didn't support the features specified. * 4. The impl argument was NULL. * 5. verto_new() was already called. * 6. verto_default() was already called. * 7. verto_new_NAME() was already called. * 8. verto_default_NAME() was already called. * 9. verto_convert_NAME() was already called. * * @see verto_new() * @see verto_default() * @param impl The implementation to use. * @param reqtypes A bitwise or'd list of required event type features. * @return The default verto_ctx, or NULL on error. Call verto_free() when done. */ int verto_set_default(const char *impl, verto_ev_type reqtypes); /** * Sets the allocator to use for verto_ctx and verto_ev objects. * * If you plan to set the allocator, you MUST call this function before any * other verto_*() calls. * * @see verto_new() * @see verto_default() * @see verto_add_io() * @see verto_add_timeout() * @see verto_add_idle() * @see verto_add_signal() * @see verto_add_child() * @param resize The allocator to use (behaves like realloc()) * @param hierarchical Zero if the allocator is not hierarchical */ int verto_set_allocator(void *(*resize)(void *mem, size_t size), int hierarchical); /** * Frees a verto_ctx. * * When called on a default verto_ctx, the reference will be freed but the * internal default loop will still be available via another call to * verto_default(). * * @see verto_new() * @see verto_default() * @param ctx The verto_ctx to free. */ void verto_free(verto_ctx *ctx); /** * Run the verto_ctx forever, or at least until verto_break() is called. * * @see verto_break() * @param ctx The verto_ctx to run. */ void verto_run(verto_ctx *ctx); /** * Run the verto_ctx once. May block. * * @param ctx The verto_ctx to run once. */ void verto_run_once(verto_ctx *ctx); /** * Exits the currently running verto_ctx. * * @see verto_run() * @param ctx The verto_ctx to exit. */ void verto_break(verto_ctx *ctx); /** * Re-initializes the verto_ctx. * * This function deletes all events, except those which have set the * VERTO_EV_FLAG_REINITIABLE flag. If you fork(), you MUST call this in the * child process after the fork! * * If this function fails it indicates that at least one * VERTO_EV_FLAG_REINITIABLE event was not rearmed or that ctx was NULL. * * @see verto_new() * @see verto_default() * @param ctx The verto_ctx to re-initialize. * @return Non-zero on success, 0 on error. */ int verto_reinitialize(verto_ctx *ctx); /** * Adds a callback executed when a file descriptor is ready to be read/written. * * All verto_ev events are automatically freed when their parent verto_ctx is * freed. You do not need to free them manually. If VERTO_EV_FLAG_PERSIST is * provided, the event will repeat until verto_del() is called. If * VERTO_EV_FLAG_PERSIST is not provided, the event will be freed automatically * after its execution. In either case, you may call verto_del() at any time * to prevent the event from executing. * If VERTO_EV_FLAG_IO_CLOSE_FD is provided the passed in fd is automatically * closed when the event is freed with verto_del() * * NOTE: On Windows, the underlying select() only works with sockets. As such, * any attempt to add a non-socket io event on Windows will produce undefined * results and may even crash. * * @see verto_del() * @param ctx The verto_ctx which will fire the callback. * @param flags The flags to set (at least one VERTO_EV_FLAG_IO* required). * @param callback The callback to fire. * @param fd The file descriptor to watch for reads. * @return The verto_ev registered with the event context or NULL on error. */ verto_ev * verto_add_io(verto_ctx *ctx, verto_ev_flag flags, verto_callback *callback, int fd); /** * Adds a callback executed after a period of time. * * All verto_ev events are automatically freed when their parent verto_ctx is * freed. You do not need to free them manually. If VERTO_EV_FLAG_PERSIST is * provided, the event will repeat until verto_del() is called. If * VERTO_EV_FLAG_PERSIST is not provided, the event will be freed automatically * after its execution. In either case, you may call verto_del() at any time * to prevent the event from executing. * * @see verto_del() * @param ctx The verto_ctx which will fire the callback. * @param flags The flags to set. * @param callback The callback to fire. * @param interval Time period to wait before firing (in milliseconds). * @return The verto_ev registered with the event context. */ verto_ev * verto_add_timeout(verto_ctx *ctx, verto_ev_flag flags, verto_callback *callback, time_t interval); /** * Adds a callback executed when there is nothing else to do. * * All verto_ev events are automatically freed when their parent verto_ctx is * freed. You do not need to free them manually. If VERTO_EV_FLAG_PERSIST is * provided, the event will repeat until verto_del() is called. If * VERTO_EV_FLAG_PERSIST is not provided, the event will be freed automatically * after its execution. In either case, you may call verto_del() at any time * to prevent the event from executing. * * @see verto_del() * @param ctx The verto_ctx which will fire the callback. * @param flags The flags to set. * @param callback The callback to fire. * @return The verto_ev registered with the event context. */ verto_ev * verto_add_idle(verto_ctx *ctx, verto_ev_flag flags, verto_callback *callback); /** * Adds a callback executed when a signal is received. * * All verto_ev events are automatically freed when their parent verto_ctx is * freed. You do not need to free them manually. If VERTO_EV_FLAG_PERSIST is * provided, the event will repeat until verto_del() is called. If * VERTO_EV_FLAG_PERSIST is not provided, the event will be freed automatically * after its execution. In either case, you may call verto_del() at any time * to prevent the event from executing. * * NOTE: If you attempt to ignore a signal without the VERTO_EV_FLAG_PERSIST * flag, this function fails. * * NOTE: SIGCHLD is expressly not supported. If you want this notification, * please use verto_add_child(). * * WARNNIG: Signal events can only be reliably received in the default verto_ctx * in some implementations. Attempting to receive signal events in non-default * loops may result in assert() failures. * * WARNING: While verto does its best to protect you from crashes, there is * essentially no way to do signal events if you mix multiple implementations in * a single process. Attempting to do so will result in undefined behavior, * and potentially even a crash. You have been warned. * * @see verto_add_child() * @see verto_repeat() * @see verto_del() * @param ctx The verto_ctx which will fire the callback. * @param flags The flags to set. * @param callback The callback to fire. * @param signal The signal to watch for. * @return The verto_ev registered with the event context. */ verto_ev * verto_add_signal(verto_ctx *ctx, verto_ev_flag flags, verto_callback *callback, int signal); /** * Adds a callback executed when a child process exits. * * This event will be freed automatically after its execution. Due to the * nature of a process' life-cycle, child events cannot persist (processes only * exit once). This function returns NULL if you attempt to use * VERTO_EV_FLAG_PERSIST. You may, of course, call verto_del() at any time to * prevent the callback from firing. * * @see verto_del() * @param ctx The verto_ctx which will fire the callback. * @param flags The flags to set. * @param callback The callback to fire. * @param child The pid (POSIX) or handle (Win32) of the child to watch for. * @return The verto_ev registered with the event context. */ verto_ev * verto_add_child(verto_ctx *ctx, verto_ev_flag flags, verto_callback *callback, verto_proc proc); /** * Sets the private pointer of the verto_ev. * * The free callback will be called in two cases: * 1. When the event is deleted (manually or automatically) * 2. When verto_set_private() is called again, unless * free is NULL. * * @see verto_get_private() * @param ev The verto_ev * @param priv The private value to store * @param free The callback used to free the data or NULL */ void verto_set_private(verto_ev *ev, void *priv, verto_callback *free); /** * Gets the private pointer of the verto_ev. * * @see verto_set_private() * @param ev The verto_ev * @return The verto_ev private pointer */ void * verto_get_private(const verto_ev *ev); /** * Gets the type of the verto_ev. * * @see verto_add_io() * @see verto_add_timeout() * @see verto_add_idle() * @see verto_add_signal() * @see verto_add_child() * @param ev The verto_ev * @return The verto_ev type */ verto_ev_type verto_get_type(const verto_ev *ev); /** * Gets the flags associated with the given verto_ev. * * @see verto_add_io() * @see verto_add_timeout() * @see verto_add_idle() * @see verto_add_signal() * @see verto_add_child() * @see verto_set_flags() * @param ev The verto_ev * @return The verto_ev type */ verto_ev_flag verto_get_flags(const verto_ev *ev); /** * Sets the flags associated with the given verto_ev. * * See _VERTO_EV_FLAG_MUTABLE_MASK for the flags that can be changed * with this function. All others will be ignored. * * @see verto_add_io() * @see verto_add_timeout() * @see verto_add_idle() * @see verto_add_signal() * @see verto_add_child() * @see verto_get_flags() * @param ev The verto_ev * @param flags The flags for the event */ void verto_set_flags(verto_ev *ev, verto_ev_flag flags); /** * Gets the file descriptor associated with a read/write verto_ev. * * @see verto_add_io() * @param ev The verto_ev to retrieve the file descriptor from. * @return The file descriptor, or -1 if not a read/write event. */ int verto_get_fd(const verto_ev *ev); /** * Gets the file descriptor state from when the event fires. * * @see verto_add_io() * @param ev The verto_ev to retrieve the fd state from. * @return The fd state. */ verto_ev_flag verto_get_fd_state(const verto_ev *ev); /** * Gets the interval associated with a timeout verto_ev. * * @see verto_add_timeout() * @param ev The verto_ev to retrieve the interval from. * @return The interval, or 0 if not a timeout event. */ time_t verto_get_interval(const verto_ev *ev); /** * Gets the signal associated with a signal verto_ev. * * @see verto_add_signal() * @param ev The verto_ev to retrieve the signal from. * @return The signal, or -1 if not a signal event. */ int verto_get_signal(const verto_ev *ev); /** * Gets the process associated with a child verto_ev. * * @see verto_add_child() * @param ev The verto_ev to retrieve the process from. * @return The pid/handle, or 0/NULL if not a child event (POSIX/Win32). */ verto_proc verto_get_proc(const verto_ev *ev); /** * Gets the status of the process which caused this event to fire. * * @see verto_add_child() * @param ev The verto_ev to retrieve the status from. * @return The pid/handle status. */ verto_proc_status verto_get_proc_status(const verto_ev *ev); /** * Gets the verto_ctx associated with a verto_ev. * * This is a borrowed reference, don't attempt to free it! * * @param ev The verto_ev to retrieve the verto_ctx from. * @return The verto_ctx. */ verto_ctx * verto_get_ctx(const verto_ev *ev); /** * Removes an event from from the event context and frees it. * * The event and its contents cannot be used after this call. * * @see verto_add_io() * @see verto_add_timeout() * @see verto_add_idle() * @see verto_add_signal() * @see verto_add_child() * @param ev The event to delete. */ void verto_del(verto_ev *ev); /** * Returns the event types supported by this implementation. * * @param ctx The verto_ctx to query. * @return The event types supported. */ verto_ev_type verto_get_supported_types(verto_ctx *ctx); #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ #endif /* VERTO_H_ */ 070701000a2551000041ed0000000000000000000000025125a07f00000000000000b500010002ffffffffffffffff0000001c00000000root/usr/local/include/krb5070701000a2555000081a40000000000000000000000015125a0740000082a000000b500010002ffffffffffffffff0000002500000000root/usr/local/include/krb5/plugin.h/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* * Copyright (C) 2010 by the Massachusetts Institute of Technology. * All rights reserved. * * Export of this software from the United States of America may * require a specific license from the United States Government. * It is the responsibility of any person or organization contemplating * export to obtain such a license before exporting. * * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and * distribute this software and its documentation for any purpose and * without fee is hereby granted, provided that the above copyright * notice appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity pertaining * to distribution of the software without specific, written prior * permission. Furthermore if you modify this software you must label * your software as modified software and not distribute it in such a * fashion that it might be confused with the original M.I.T. software. * M.I.T. makes no representations about the suitability of * this software for any purpose. It is provided "as is" without express * or implied warranty. */ /* Generic declarations for dynamic modules implementing krb5 plugin * modules. */ #ifndef KRB5_PLUGIN_H #define KRB5_PLUGIN_H /* krb5_plugin_vtable is an abstract type. Module initvt functions will cast * it to the appropriate interface-specific vtable type. */ typedef struct krb5_plugin_vtable_st *krb5_plugin_vtable; /* * krb5_plugin_initvt_fn is the type of all module initvt functions. Based on * the maj_ver argument, the initvt function should cast vtable to the * appropriate type and then fill it in. If a vtable has been expanded, * min_ver indicates which version of the vtable is being filled in. */ typedef krb5_error_code (*krb5_plugin_initvt_fn)(krb5_context context, int maj_ver, int min_ver, krb5_plugin_vtable vtable); #endif /* KRB5_PLUGIN_H */ 070701000a2557000081a40000000000000000000000015125a0740000114a000000b500010002ffffffffffffffff0000002c00000000root/usr/local/include/krb5/pwqual_plugin.h/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* * Copyright (C) 2010 by the Massachusetts Institute of Technology. * All rights reserved. * * Export of this software from the United States of America may * require a specific license from the United States Government. * It is the responsibility of any person or organization contemplating * export to obtain such a license before exporting. * * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and * distribute this software and its documentation for any purpose and * without fee is hereby granted, provided that the above copyright * notice appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity pertaining * to distribution of the software without specific, written prior * permission. Furthermore if you modify this software you must label * your software as modified software and not distribute it in such a * fashion that it might be confused with the original M.I.T. software. * M.I.T. makes no representations about the suitability of * this software for any purpose. It is provided "as is" without express * or implied warranty. */ /* * Declarations for password quality plugin module implementors. * * The password quality pluggable interface currently has only one supported * major version, which is 1. Major version 1 has a current minor version * number of 1. * * Password quality plugin modules should define a function named * pwqual__initvt, matching the signature: * * krb5_error_code * pwqual_modname_initvt(krb5_context context, int maj_ver, int min_ver, * krb5_plugin_vtable vtable); * * The initvt function should: * * - Check that the supplied maj_ver number is supported by the module, or * return KRB5_PLUGIN_VER_NOTSUPP if it is not. * * - Cast the vtable pointer as appropriate for maj_ver: * maj_ver == 1: Cast to krb5_pwqual_vtable * * - Initialize the methods of the vtable, stopping as appropriate for the * supplied min_ver. Optional methods may be left uninitialized. * * Memory for the vtable is allocated by the caller, not by the module. */ #ifndef KRB5_PWQUAL_PLUGIN_H #define KRB5_PWQUAL_PLUGIN_H #include #include #include /* An abstract type for password quality module data. */ typedef struct krb5_pwqual_moddata_st *krb5_pwqual_moddata; /*** Method type declarations ***/ /* Optional: Initialize module data. dictfile is the realm's configured * dictionary filename. */ typedef krb5_error_code (*krb5_pwqual_open_fn)(krb5_context context, const char *dict_file, krb5_pwqual_moddata *data); /* * Mandatory: Check a password for the principal princ, which has an associated * password policy named policy_name (or no associated policy if policy_name is * NULL). The parameter languages, if not NULL, contains a null-terminated * list of client-specified language tags as defined in RFC 5646. The method * should return one of the following errors if the password fails quality * standards: * * - KADM5_PASS_Q_TOOSHORT: password should be longer * - KADM5_PASS_Q_CLASS: password must have more character classes * - KADM5_PASS_Q_DICT: password contains dictionary words * - KADM5_PASS_Q_GENERIC: unspecified quality failure * * The module should also set an extended error message with * krb5_set_error_message(). The message may be localized according to one of * the language tags in languages. */ typedef krb5_error_code (*krb5_pwqual_check_fn)(krb5_context context, krb5_pwqual_moddata data, const char *password, const char *policy_name, krb5_principal princ, const char **languages); /* Optional: Release resources used by module data. */ typedef void (*krb5_pwqual_close_fn)(krb5_context context, krb5_pwqual_moddata data); /*** vtable declarations **/ /* Password quality plugin vtable for major version 1. */ typedef struct krb5_pwqual_vtable_st { const char *name; /* Mandatory: name of module. */ krb5_pwqual_open_fn open; krb5_pwqual_check_fn check; krb5_pwqual_close_fn close; /* Minor version 1 ends here. */ } *krb5_pwqual_vtable; #endif /* KRB5_PWQUAL_PLUGIN_H */ 070701000a2556000081a40000000000000000000000015125a0740000674d000000b500010002ffffffffffffffff0000002d00000000root/usr/local/include/krb5/preauth_plugin.h/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* * Copyright (c) 2006 Red Hat, Inc. * Portions copyright (c) 2006, 2011 Massachusetts Institute of Technology * All Rights Reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * Neither the name of Red Hat, Inc., nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * Declarations for preauth plugin module implementors. * * This header defines two preauth interfaces, clpreauth and kdcpreauth. A * shared object can implement both interfaces or it can implement just one. * * * The clpreauth interface has a single supported major version, which is * 1. Major version 1 has a current minor version of 2. clpreauth modules * should define a function named clpreauth__initvt, matching * the signature: * * krb5_error_code * clpreauth_modname_initvt(krb5_context context, int maj_ver, * int min_ver, krb5_plugin_vtable vtable); * * The kdcpreauth interface has a single supported major version, which is 1. * Major version 1 has a current minor version of 2. kdcpreauth modules should * define a function named kdcpreauth__initvt, matching the * signature: * * krb5_error_code * kdcpreauth_modname_initvt(krb5_context context, int maj_ver, int min_ver, * krb5_plugin_vtable vtable); * * For both interfaces, the initvt function should: * * - Check that the supplied maj_ver number is supported by the module, or * return KRB5_PLUGIN_VER_NOTSUPP if it is not. * * - Cast the vtable pointer as appropriate for the interface and maj_ver: * clpreauth, maj_ver == 1: Cast to krb5_clpreauth_vtable * kdcpreauth, maj_ver == 1: Cast to krb5_kdcpreauth_vtable * * - Initialize the methods of the vtable, stopping as appropriate for the * supplied min_ver. Optional methods may be left uninitialized. * * Memory for the vtable is allocated by the caller, not by the module. */ #ifndef KRB5_PREAUTH_PLUGIN_H_INCLUDED #define KRB5_PREAUTH_PLUGIN_H_INCLUDED #include #include /* * Preauth mechanism property flags, unified from previous definitions in the * KDC and libkrb5 sources. */ /* Provides a real answer which we can send back to the KDC (client-only). The * client assumes that one real answer will be enough. */ #define PA_REAL 0x00000001 /* Doesn't provide a real answer, but must be given a chance to run before any * REAL mechanism callbacks (client-only). */ #define PA_INFO 0x00000002 /* * Causes the KDC to include this mechanism in a list of supported preauth * types if the user's DB entry flags the user as requiring hardware-based * preauthentication (KDC-only). */ #define PA_HARDWARE 0x00000004 /* * Causes the KDC to include this mechanism in a list of supported preauth * types if the user's DB entry flags the user as requiring preauthentication, * and to fail preauthentication if we can't verify the client data. The * flipside of PA_SUFFICIENT (KDC-only). */ #define PA_REQUIRED 0x00000008 /* * Causes the KDC to include this mechanism in a list of supported preauth * types if the user's DB entry flags the user as requiring preauthentication, * and to mark preauthentication as successful if we can verify the client * data. The flipside of PA_REQUIRED (KDC-only). */ #define PA_SUFFICIENT 0x00000010 /* * Marks this preauthentication mechanism as one which changes the key which is * used for encrypting the response to the client. Modules which have this * flag have their server_return_fn called before modules which do not, and are * passed over if a previously-called module has modified the encrypting key * (KDC-only). */ #define PA_REPLACES_KEY 0x00000020 /* * Not really a padata type, so don't include it in any list of preauth types * which gets sent over the wire. */ #define PA_PSEUDO 0x00000080 /* * For kdcpreauth mechanisms, indicates that e_data in non-FAST errors should * be encoded as typed data instead of padata. */ #define PA_TYPED_E_DATA 0x00000100 /* * clpreauth plugin interface definition. */ /* Abstract type for a client request information handle. */ typedef struct krb5_clpreauth_rock_st *krb5_clpreauth_rock; /* Abstract types for module data and per-request module data. */ typedef struct krb5_clpreauth_moddata_st *krb5_clpreauth_moddata; typedef struct krb5_clpreauth_modreq_st *krb5_clpreauth_modreq; /* Before using a callback after version 1, modules must check the vers * field of the callback structure. */ typedef struct krb5_clpreauth_callbacks_st { int vers; /* * Get the enctype expected to be used to encrypt the encrypted portion of * the AS_REP packet. When handling a PREAUTH_REQUIRED error, this * typically comes from etype-info2. When handling an AS reply, it is * initialized from the AS reply itself. */ krb5_enctype (*get_etype)(krb5_context context, krb5_clpreauth_rock rock); /* Get a pointer to the FAST armor key, or NULL if the client is not using * FAST. The returned pointer is an alias and should not be freed. */ krb5_keyblock *(*fast_armor)(krb5_context context, krb5_clpreauth_rock rock); /* * Get a pointer to the client-supplied reply key, possibly invoking the * prompter to ask for a password if this has not already been done. The * returned pointer is an alias and should not be freed. */ krb5_error_code (*get_as_key)(krb5_context context, krb5_clpreauth_rock rock, krb5_keyblock **keyblock); /* Replace the reply key to be used to decrypt the AS response. */ krb5_error_code (*set_as_key)(krb5_context context, krb5_clpreauth_rock rock, const krb5_keyblock *keyblock); /* End of version 1 clpreauth callbacks. */ /* * Get the current time for use in a preauth response. If * allow_unauth_time is true and the library has been configured to allow * it, the current time will be offset using unauthenticated timestamp * information received from the KDC in the preauth-required error, if one * has been received. Otherwise, the timestamp in a preauth-required error * will only be used if it is protected by a FAST channel. Only set * allow_unauth_time if using an unauthenticated time offset would not * create a security issue. */ krb5_error_code (*get_preauth_time)(krb5_context context, krb5_clpreauth_rock rock, krb5_boolean allow_unauth_time, krb5_timestamp *time_out, krb5_int32 *usec_out); /* Set a question to be answered by the responder and optionally provide * a challenge. */ krb5_error_code (*ask_responder_question)(krb5_context context, krb5_clpreauth_rock rock, const char *question, const char *challenge); /* Get an answer from the responder, or NULL if the question was * unanswered. */ const char *(*get_responder_answer)(krb5_context context, krb5_clpreauth_rock rock, const char *question); /* Indicate interest in the AS key through the responder interface. */ void (*need_as_key)(krb5_context context, krb5_clpreauth_rock rock); /* * Get a configuration/state item from an input ccache, which may allow it * to retrace the steps it took last time. The returned data string is an * alias and should not be freed. */ const char *(*get_cc_config)(krb5_context context, krb5_clpreauth_rock rock, const char *key); /* * Set a configuration/state item which will be recorded to an output * ccache, if the calling application supplied one. Both key and data * should be valid UTF-8 text. */ krb5_error_code (*set_cc_config)(krb5_context context, krb5_clpreauth_rock rock, const char *key, const char *data); /* End of version 2 clpreauth callbacks (added in 1.11). */ } *krb5_clpreauth_callbacks; /* * Optional: per-plugin initialization/cleanup. The init function is called by * libkrb5 when the plugin is loaded, and the fini function is called before * the plugin is unloaded. These may be called multiple times in case the * plugin is used in multiple contexts. The returned context lives the * lifetime of the krb5_context. */ typedef krb5_error_code (*krb5_clpreauth_init_fn)(krb5_context context, krb5_clpreauth_moddata *moddata_out); typedef void (*krb5_clpreauth_fini_fn)(krb5_context context, krb5_clpreauth_moddata moddata); /* * Mandatory: Return flags indicating if the module is a "real" or an "info" * mechanism, and so on. This function is called for each entry in the * client_pa_type_list. */ typedef int (*krb5_clpreauth_get_flags_fn)(krb5_context context, krb5_preauthtype pa_type); /* * Optional: per-request initialization/cleanup. The request_init function is * called when beginning to process a get_init_creds request and the * request_fini function is called when processing of the request is complete. * This is optional. It may be called multiple times in the lifetime of a * krb5_context. */ typedef void (*krb5_clpreauth_request_init_fn)(krb5_context context, krb5_clpreauth_moddata moddata, krb5_clpreauth_modreq *modreq_out); typedef void (*krb5_clpreauth_request_fini_fn)(krb5_context context, krb5_clpreauth_moddata moddata, krb5_clpreauth_modreq modreq); /* * Optional: process server-supplied data in pa_data and set responder * questions. * * encoded_previous_request may be NULL if there has been no previous request * in the AS exchange. */ typedef krb5_error_code (*krb5_clpreauth_prep_questions_fn)(krb5_context context, krb5_clpreauth_moddata moddata, krb5_clpreauth_modreq modreq, krb5_get_init_creds_opt *opt, krb5_clpreauth_callbacks cb, krb5_clpreauth_rock rock, krb5_kdc_req *request, krb5_data *encoded_request_body, krb5_data *encoded_previous_request, krb5_pa_data *pa_data); /* * Mandatory: process server-supplied data in pa_data and return created data * in pa_data_out. Also called after the AS-REP is received if the AS-REP * includes preauthentication data of the associated type. * * as_key contains the client-supplied key if known, or an empty keyblock if * not. If it is empty, the module may use gak_fct to fill it in. * * encoded_previous_request may be NULL if there has been no previous request * in the AS exchange. */ typedef krb5_error_code (*krb5_clpreauth_process_fn)(krb5_context context, krb5_clpreauth_moddata moddata, krb5_clpreauth_modreq modreq, krb5_get_init_creds_opt *opt, krb5_clpreauth_callbacks cb, krb5_clpreauth_rock rock, krb5_kdc_req *request, krb5_data *encoded_request_body, krb5_data *encoded_previous_request, krb5_pa_data *pa_data, krb5_prompter_fct prompter, void *prompter_data, krb5_pa_data ***pa_data_out); /* * Optional: Attempt to use error and error_padata to try to recover from the * given error. To work with both FAST and non-FAST errors, an implementation * should generally consult error_padata rather than decoding error->e_data. * For non-FAST errors, it contains the e_data decoded as either pa-data or * typed-data. * * If this function is provided, and it returns 0 and stores data in * pa_data_out, then the client library will retransmit the request. */ typedef krb5_error_code (*krb5_clpreauth_tryagain_fn)(krb5_context context, krb5_clpreauth_moddata moddata, krb5_clpreauth_modreq modreq, krb5_get_init_creds_opt *opt, krb5_clpreauth_callbacks cb, krb5_clpreauth_rock rock, krb5_kdc_req *request, krb5_data *encoded_request_body, krb5_data *encoded_previous_request, krb5_preauthtype pa_type, krb5_error *error, krb5_pa_data **error_padata, krb5_prompter_fct prompter, void *prompter_data, krb5_pa_data ***pa_data_out); /* * Optional: receive krb5_get_init_creds_opt information. The attr and value * information supplied should be copied into moddata by the module if it * wishes to reference it after returning from this call. */ typedef krb5_error_code (*krb5_clpreauth_supply_gic_opts_fn)(krb5_context context, krb5_clpreauth_moddata moddata, krb5_get_init_creds_opt *opt, const char *attr, const char *value); typedef struct krb5_clpreauth_vtable_st { /* Mandatory: name of module. */ char *name; /* Mandatory: pointer to zero-terminated list of pa_types which this module * can provide services for. */ krb5_preauthtype *pa_type_list; /* Optional: pointer to zero-terminated list of enc_types which this module * claims to add support for. */ krb5_enctype *enctype_list; krb5_clpreauth_init_fn init; krb5_clpreauth_fini_fn fini; krb5_clpreauth_get_flags_fn flags; krb5_clpreauth_request_init_fn request_init; krb5_clpreauth_request_fini_fn request_fini; krb5_clpreauth_process_fn process; krb5_clpreauth_tryagain_fn tryagain; krb5_clpreauth_supply_gic_opts_fn gic_opts; /* Minor version 1 ends here. */ krb5_clpreauth_prep_questions_fn prep_questions; /* Minor version 2 ends here. */ } *krb5_clpreauth_vtable; /* * This function allows a clpreauth plugin to obtain preauth options. The * preauth_data returned from this function should be freed by calling * krb5_get_init_creds_opt_free_pa(). */ krb5_error_code KRB5_CALLCONV krb5_get_init_creds_opt_get_pa(krb5_context context, krb5_get_init_creds_opt *opt, int *num_preauth_data, krb5_gic_opt_pa_data **preauth_data); /* * This function frees the preauth_data that was returned by * krb5_get_init_creds_opt_get_pa(). */ void KRB5_CALLCONV krb5_get_init_creds_opt_free_pa(krb5_context context, int num_preauth_data, krb5_gic_opt_pa_data *preauth_data); /* * kdcpreauth plugin interface definition. */ /* Abstract type for a KDC callback data handle. */ typedef struct krb5_kdcpreauth_rock_st *krb5_kdcpreauth_rock; /* Abstract type for module data and per-request module data. */ typedef struct krb5_kdcpreauth_moddata_st *krb5_kdcpreauth_moddata; typedef struct krb5_kdcpreauth_modreq_st *krb5_kdcpreauth_modreq; /* The verto context structure type (typedef is in verto.h; we want to avoid a * header dependency for the moment). */ struct verto_ctx; /* Before using a callback after version 1, modules must check the vers * field of the callback structure. */ typedef struct krb5_kdcpreauth_callbacks_st { int vers; krb5_deltat (*max_time_skew)(krb5_context context, krb5_kdcpreauth_rock rock); /* * Get an array of krb5_keyblock structures containing the client keys * matching the request enctypes, terminated by an entry with key type = 0. * Returns ENOENT if no keys are available for the request enctypes. Free * the resulting object with the free_keys callback. */ krb5_error_code (*client_keys)(krb5_context context, krb5_kdcpreauth_rock rock, krb5_keyblock **keys_out); /* Free the result of client_keys. */ void (*free_keys)(krb5_context context, krb5_kdcpreauth_rock rock, krb5_keyblock *keys); /* * Get the encoded request body, which is sometimes needed for checksums. * For a FAST request this is the encoded inner request body. The returned * pointer is an alias and should not be freed. */ krb5_data *(*request_body)(krb5_context context, krb5_kdcpreauth_rock rock); /* Get a pointer to the FAST armor key, or NULL if the request did not use * FAST. The returned pointer is an alias and should not be freed. */ krb5_keyblock *(*fast_armor)(krb5_context context, krb5_kdcpreauth_rock rock); /* Retrieve a string attribute from the client DB entry, or NULL if no such * attribute is set. Free the result with the free_string callback. */ krb5_error_code (*get_string)(krb5_context context, krb5_kdcpreauth_rock rock, const char *key, char **value_out); /* Free the result of get_string. */ void (*free_string)(krb5_context context, krb5_kdcpreauth_rock rock, char *string); /* Get a pointer to the client DB entry (returned as a void pointer to * avoid a dependency on a libkdb5 type). */ void *(*client_entry)(krb5_context context, krb5_kdcpreauth_rock rock); /* Get a pointer to the verto context which should be used by an * asynchronous edata or verify method. */ struct verto_ctx *(*event_context)(krb5_context context, krb5_kdcpreauth_rock rock); /* End of version 1 kdcpreauth callbacks. */ } *krb5_kdcpreauth_callbacks; /* Optional: preauth plugin initialization function. */ typedef krb5_error_code (*krb5_kdcpreauth_init_fn)(krb5_context context, krb5_kdcpreauth_moddata *moddata_out, const char **realmnames); /* Optional: preauth plugin cleanup function. */ typedef void (*krb5_kdcpreauth_fini_fn)(krb5_context context, krb5_kdcpreauth_moddata moddata); /* * Optional: return the flags which the KDC should use for this module. This * is a callback instead of a static value because the module may or may not * wish to count itself as a hardware preauthentication module (in other words, * the flags may be affected by the configuration, for example if a site * administrator can force a particular preauthentication type to be supported * using only hardware). This function is called for each entry entry in the * server_pa_type_list. */ typedef int (*krb5_kdcpreauth_flags_fn)(krb5_context context, krb5_preauthtype pa_type); /* * Responder for krb5_kdcpreauth_edata_fn. If invoked with a non-zero code, pa * will be ignored and the padata type will not be included in the hint list. * If invoked with a zero code and a null pa value, the padata type will be * included in the list with an empty value. If invoked with a zero code and a * non-null pa value, pa will be included in the hint list and will later be * freed by the KDC. */ typedef void (*krb5_kdcpreauth_edata_respond_fn)(void *arg, krb5_error_code code, krb5_pa_data *pa); /* * Optional: provide pa_data to send to the client as part of the "you need to * use preauthentication" error. The implementation must invoke the respond * when complete, whether successful or not, either before returning or * asynchronously using the verto context returned by cb->event_context(). * * This function is not allowed to create a modreq object because we have no * guarantee that the client will ever make a follow-up request, or that it * will hit this KDC if it does. */ typedef void (*krb5_kdcpreauth_edata_fn)(krb5_context context, krb5_kdc_req *request, krb5_kdcpreauth_callbacks cb, krb5_kdcpreauth_rock rock, krb5_kdcpreauth_moddata moddata, krb5_preauthtype pa_type, krb5_kdcpreauth_edata_respond_fn respond, void *arg); /* * Responder for krb5_kdcpreauth_verify_fn. Invoke with the arg parameter * supplied to verify, the error code (0 for success), an optional module * request state object to be consumed by return_fn or free_modreq_fn, optional * e_data to be passed to the caller if code is nonzero, and optional * authorization data to be included in the ticket. In non-FAST replies, * e_data will be encoded as typed-data if the module sets the PA_TYPED_E_DATA * flag, and as pa-data otherwise. e_data and authz_data will be freed by the * KDC. */ typedef void (*krb5_kdcpreauth_verify_respond_fn)(void *arg, krb5_error_code code, krb5_kdcpreauth_modreq modreq, krb5_pa_data **e_data, krb5_authdata **authz_data); /* * Optional: verify preauthentication data sent by the client, setting the * TKT_FLG_PRE_AUTH or TKT_FLG_HW_AUTH flag in the enc_tkt_reply's "flags" * field as appropriate. The implementation must invoke the respond function * when complete, whether successful or not, either before returning or * asynchronously using the verto context returned by cb->event_context(). */ typedef void (*krb5_kdcpreauth_verify_fn)(krb5_context context, krb5_data *req_pkt, krb5_kdc_req *request, krb5_enc_tkt_part *enc_tkt_reply, krb5_pa_data *data, krb5_kdcpreauth_callbacks cb, krb5_kdcpreauth_rock rock, krb5_kdcpreauth_moddata moddata, krb5_kdcpreauth_verify_respond_fn respond, void *arg); /* * Optional: generate preauthentication response data to send to the client as * part of the AS-REP. If it needs to override the key which is used to * encrypt the response, it can do so. */ typedef krb5_error_code (*krb5_kdcpreauth_return_fn)(krb5_context context, krb5_pa_data *padata, krb5_data *req_pkt, krb5_kdc_req *request, krb5_kdc_rep *reply, krb5_keyblock *encrypting_key, krb5_pa_data **send_pa_out, krb5_kdcpreauth_callbacks cb, krb5_kdcpreauth_rock rock, krb5_kdcpreauth_moddata moddata, krb5_kdcpreauth_modreq modreq); /* Optional: free a per-request context. */ typedef void (*krb5_kdcpreauth_free_modreq_fn)(krb5_context, krb5_kdcpreauth_moddata moddata, krb5_kdcpreauth_modreq modreq); /* Optional: invoked after init_fn to provide the module with a pointer to the * verto main loop. */ typedef krb5_error_code (*krb5_kdcpreauth_loop_fn)(krb5_context context, krb5_kdcpreauth_moddata moddata, struct verto_ctx *ctx); typedef struct krb5_kdcpreauth_vtable_st { /* Mandatory: name of module. */ char *name; /* Mandatory: pointer to zero-terminated list of pa_types which this module * can provide services for. */ krb5_preauthtype *pa_type_list; krb5_kdcpreauth_init_fn init; krb5_kdcpreauth_fini_fn fini; krb5_kdcpreauth_flags_fn flags; krb5_kdcpreauth_edata_fn edata; krb5_kdcpreauth_verify_fn verify; krb5_kdcpreauth_return_fn return_padata; krb5_kdcpreauth_free_modreq_fn free_modreq; /* Minor 1 ends here. */ krb5_kdcpreauth_loop_fn loop; /* Minor 2 ends here. */ } *krb5_kdcpreauth_vtable; #endif /* KRB5_PREAUTH_PLUGIN_H_INCLUDED */ 070701000a2553000081a40000000000000000000000015125a0740004e8c8000000b500010002ffffffffffffffff0000002300000000root/usr/local/include/krb5/krb5.h/* This file is generated, please don't edit it directly. */ #ifndef KRB5_KRB5_H_INCLUDED #define KRB5_KRB5_H_INCLUDED /* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* General definitions for Kerberos version 5. */ /* * Copyright 1989, 1990, 1995, 2001, 2003, 2007, 2011 by the Massachusetts * Institute of Technology. All Rights Reserved. * * Export of this software from the United States of America may * require a specific license from the United States Government. * It is the responsibility of any person or organization contemplating * export to obtain such a license before exporting. * * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and * distribute this software and its documentation for any purpose and * without fee is hereby granted, provided that the above copyright * notice appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity pertaining * to distribution of the software without specific, written prior * permission. Furthermore if you modify this software you must label * your software as modified software and not distribute it in such a * fashion that it might be confused with the original M.I.T. software. * M.I.T. makes no representations about the suitability of * this software for any purpose. It is provided "as is" without express * or implied warranty. */ /* * Copyright (C) 1998 by the FundsXpress, INC. * * All rights reserved. * * Export of this software from the United States of America may require * a specific license from the United States Government. It is the * responsibility of any person or organization contemplating export to * obtain such a license before exporting. * * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and * distribute this software and its documentation for any purpose and * without fee is hereby granted, provided that the above copyright * notice appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, and that * the name of FundsXpress. not be used in advertising or publicity pertaining * to distribution of the software without specific, written prior * permission. FundsXpress makes no representations about the suitability of * this software for any purpose. It is provided "as is" without express * or implied warranty. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ #ifndef KRB5_GENERAL__ #define KRB5_GENERAL__ /** @defgroup KRB5_H krb5 library API * @{ */ /* By default, do not expose deprecated interfaces. */ #ifndef KRB5_DEPRECATED #define KRB5_DEPRECATED 0 #endif #if defined(__MACH__) && defined(__APPLE__) # include # if TARGET_RT_MAC_CFM # error "Use KfM 4.0 SDK headers for CFM compilation." # endif #endif #if defined(_MSDOS) || defined(_WIN32) #include #endif #ifndef KRB5_CONFIG__ #ifndef KRB5_CALLCONV #define KRB5_CALLCONV #define KRB5_CALLCONV_C #endif /* !KRB5_CALLCONV */ #endif /* !KRB5_CONFIG__ */ #ifndef KRB5_CALLCONV_WRONG #define KRB5_CALLCONV_WRONG #endif #ifndef THREEPARAMOPEN #define THREEPARAMOPEN(x,y,z) open(x,y,z) #endif #define KRB5_OLD_CRYPTO #include #include /* for *_MAX */ #include #ifndef KRB5INT_BEGIN_DECLS #if defined(__cplusplus) #define KRB5INT_BEGIN_DECLS extern "C" { #define KRB5INT_END_DECLS } #else #define KRB5INT_BEGIN_DECLS #define KRB5INT_END_DECLS #endif #endif KRB5INT_BEGIN_DECLS #if TARGET_OS_MAC # pragma pack(push,2) #endif #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 30203 # define KRB5_ATTR_DEPRECATED __attribute__((deprecated)) #elif defined _WIN32 # define KRB5_ATTR_DEPRECATED __declspec(deprecated) #else # define KRB5_ATTR_DEPRECATED #endif /* from profile.h */ struct _profile_t; /* typedef struct _profile_t *profile_t; */ /* * begin wordsize.h */ /* * Word-size related definition. */ typedef unsigned char krb5_octet; #if INT_MAX == 0x7fff typedef int krb5_int16; typedef unsigned int krb5_ui_2; #elif SHRT_MAX == 0x7fff typedef short krb5_int16; typedef unsigned short krb5_ui_2; #else #error undefined 16 bit type #endif #if INT_MAX == 0x7fffffffL typedef int krb5_int32; typedef unsigned int krb5_ui_4; #elif LONG_MAX == 0x7fffffffL typedef long krb5_int32; typedef unsigned long krb5_ui_4; #elif SHRT_MAX == 0x7fffffffL typedef short krb5_int32; typedef unsigned short krb5_ui_4; #else #error: undefined 32 bit type #endif #define VALID_INT_BITS INT_MAX #define VALID_UINT_BITS UINT_MAX #define KRB5_INT32_MAX 2147483647 /* this strange form is necessary since - is a unary operator, not a sign indicator */ #define KRB5_INT32_MIN (-KRB5_INT32_MAX-1) #define KRB5_INT16_MAX 65535 /* this strange form is necessary since - is a unary operator, not a sign indicator */ #define KRB5_INT16_MIN (-KRB5_INT16_MAX-1) /* * end wordsize.h */ /* * begin "base-defs.h" */ /* * Basic definitions for Kerberos V5 library */ #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif typedef unsigned int krb5_boolean; typedef unsigned int krb5_msgtype; typedef unsigned int krb5_kvno; typedef krb5_int32 krb5_addrtype; typedef krb5_int32 krb5_enctype; typedef krb5_int32 krb5_cksumtype; typedef krb5_int32 krb5_authdatatype; typedef krb5_int32 krb5_keyusage; typedef krb5_int32 krb5_cryptotype; typedef krb5_int32 krb5_preauthtype; /* This may change, later on */ typedef krb5_int32 krb5_flags; typedef krb5_int32 krb5_timestamp; typedef krb5_int32 krb5_error_code; typedef krb5_int32 krb5_deltat; typedef krb5_error_code krb5_magic; typedef struct _krb5_data { krb5_magic magic; unsigned int length; char *data; } krb5_data; /* Originally introduced for PKINIT; now unused. Do not use this. */ typedef struct _krb5_octet_data { krb5_magic magic; unsigned int length; krb5_octet *data; } krb5_octet_data; /* Originally used to recognize AFS and default salts. No longer used. */ #define SALT_TYPE_AFS_LENGTH UINT_MAX #define SALT_TYPE_NO_LENGTH UINT_MAX typedef void * krb5_pointer; typedef void const * krb5_const_pointer; typedef struct krb5_principal_data { krb5_magic magic; krb5_data realm; krb5_data *data; /**< An array of strings */ krb5_int32 length; krb5_int32 type; } krb5_principal_data; typedef krb5_principal_data * krb5_principal; /* * Per V5 spec on definition of principal types */ #define KRB5_NT_UNKNOWN 0 /**< Name type not known */ #define KRB5_NT_PRINCIPAL 1 /**< Just the name of the principal as in DCE, or for users */ #define KRB5_NT_SRV_INST 2 /**< Service and other unique instance (krbtgt) */ #define KRB5_NT_SRV_HST 3 /**< Service with host name as instance (telnet, rcommands) */ #define KRB5_NT_SRV_XHST 4 /**< Service with host as remaining components */ #define KRB5_NT_UID 5 /**< Unique ID */ #define KRB5_NT_X500_PRINCIPAL 6 /**< PKINIT */ #define KRB5_NT_SMTP_NAME 7 /**< Name in form of SMTP email name */ #define KRB5_NT_ENTERPRISE_PRINCIPAL 10 /**< Windows 2000 UPN */ #define KRB5_NT_WELLKNOWN 11 /**< Well-known (special) principal */ #define KRB5_WELLKNOWN_NAMESTR "WELLKNOWN" /**< First component of NT_WELLKNOWN principals */ #define KRB5_NT_MS_PRINCIPAL -128 /**< Windows 2000 UPN and SID */ #define KRB5_NT_MS_PRINCIPAL_AND_ID -129 /**< NT 4 style name */ #define KRB5_NT_ENT_PRINCIPAL_AND_ID -130 /**< NT 4 style name and SID */ /** Constant version of krb5_principal_data */ typedef const krb5_principal_data *krb5_const_principal; #define krb5_princ_realm(context, princ) (&(princ)->realm) #define krb5_princ_set_realm(context, princ,value) ((princ)->realm = *(value)) #define krb5_princ_set_realm_length(context, princ,value) (princ)->realm.length = (value) #define krb5_princ_set_realm_data(context, princ,value) (princ)->realm.data = (value) #define krb5_princ_size(context, princ) (princ)->length #define krb5_princ_type(context, princ) (princ)->type #define krb5_princ_name(context, princ) (princ)->data #define krb5_princ_component(context, princ,i) \ (((i) < krb5_princ_size(context, princ)) \ ? (princ)->data + (i) \ : NULL) /** Constant for realm referrals. */ #define KRB5_REFERRAL_REALM "" /* * Referral-specific functions. */ /** * Check for a match with KRB5_REFERRAL_REALM. * * @param [in] r Realm to check * * @return @c TRUE if @a r is zero-length, @c FALSE otherwise */ krb5_boolean KRB5_CALLCONV krb5_is_referral_realm(const krb5_data *r); /** * Return an anonymous realm data. * * This function returns constant storage that must not be freed. * * @sa #KRB5_ANONYMOUS_REALMSTR */ const krb5_data *KRB5_CALLCONV krb5_anonymous_realm(void); /** * Build an anonymous principal. * * This function returns constant storage that must not be freed. * * @sa #KRB5_ANONYMOUS_PRINCSTR */ krb5_const_principal KRB5_CALLCONV krb5_anonymous_principal(void); #define KRB5_ANONYMOUS_REALMSTR "WELLKNOWN:ANONYMOUS" /**< Anonymous realm */ #define KRB5_ANONYMOUS_PRINCSTR "ANONYMOUS" /**< Anonymous principal name */ /* * end "base-defs.h" */ /* * begin "hostaddr.h" */ /** Structure for address */ typedef struct _krb5_address { krb5_magic magic; krb5_addrtype addrtype; unsigned int length; krb5_octet *contents; } krb5_address; /* per Kerberos v5 protocol spec */ #define ADDRTYPE_INET 0x0002 #define ADDRTYPE_CHAOS 0x0005 #define ADDRTYPE_XNS 0x0006 #define ADDRTYPE_ISO 0x0007 #define ADDRTYPE_DDP 0x0010 #define ADDRTYPE_NETBIOS 0x0014 #define ADDRTYPE_INET6 0x0018 /* not yet in the spec... */ #define ADDRTYPE_ADDRPORT 0x0100 #define ADDRTYPE_IPPORT 0x0101 /* macros to determine if a type is a local type */ #define ADDRTYPE_IS_LOCAL(addrtype) (addrtype & 0x8000) /* * end "hostaddr.h" */ struct _krb5_context; typedef struct _krb5_context * krb5_context; struct _krb5_auth_context; typedef struct _krb5_auth_context * krb5_auth_context; struct _krb5_cryptosystem_entry; /* * begin "encryption.h" */ /** Exposed contents of a key. */ typedef struct _krb5_keyblock { krb5_magic magic; krb5_enctype enctype; unsigned int length; krb5_octet *contents; } krb5_keyblock; struct krb5_key_st; /** * Opaque identifier for a key. * * Use with the krb5_k APIs for better performance for repeated operations with * the same key and usage. Key identifiers must not be used simultaneously * within multiple threads, as they may contain mutable internal state and are * not mutex-protected. */ typedef struct krb5_key_st *krb5_key; #ifdef KRB5_OLD_CRYPTO typedef struct _krb5_encrypt_block { krb5_magic magic; krb5_enctype crypto_entry; /* to call krb5_encrypt_size, you need this. it was a pointer, but it doesn't have to be. gross. */ krb5_keyblock *key; } krb5_encrypt_block; #endif typedef struct _krb5_checksum { krb5_magic magic; krb5_cksumtype checksum_type; /* checksum type */ unsigned int length; krb5_octet *contents; } krb5_checksum; typedef struct _krb5_enc_data { krb5_magic magic; krb5_enctype enctype; krb5_kvno kvno; krb5_data ciphertext; } krb5_enc_data; /** * Structure to describe a region of text to be encrypted or decrypted. * * The @a flags member describes the type of the iov. * The @a data member points to the memory that will be manipulated. * All iov APIs take a pointer to the first element of an array of krb5_crypto_iov's * along with the size of that array. Buffer contents are manipulated in-place; * data is overwritten. Callers must allocate the right number of krb5_crypto_iov * structures before calling into an iov API. */ typedef struct _krb5_crypto_iov { krb5_cryptotype flags; /**< @ref KRB5_CRYPTO_TYPE type of the iov */ krb5_data data; } krb5_crypto_iov; /* per Kerberos v5 protocol spec */ #define ENCTYPE_NULL 0x0000 #define ENCTYPE_DES_CBC_CRC 0x0001 /**< DES cbc mode with CRC-32 */ #define ENCTYPE_DES_CBC_MD4 0x0002 /**< DES cbc mode with RSA-MD4 */ #define ENCTYPE_DES_CBC_MD5 0x0003 /**< DES cbc mode with RSA-MD5 */ #define ENCTYPE_DES_CBC_RAW 0x0004 /**< @deprecated DES cbc mode raw */ #define ENCTYPE_DES3_CBC_SHA 0x0005 /**< @deprecated DES-3 cbc with SHA1 */ #define ENCTYPE_DES3_CBC_RAW 0x0006 /**< @deprecated DES-3 cbc mode raw */ #define ENCTYPE_DES_HMAC_SHA1 0x0008 /**< @deprecated */ /* PKINIT */ #define ENCTYPE_DSA_SHA1_CMS 0x0009 /**< DSA with SHA1, CMS signature */ #define ENCTYPE_MD5_RSA_CMS 0x000a /**< MD5 with RSA, CMS signature */ #define ENCTYPE_SHA1_RSA_CMS 0x000b /**< SHA1 with RSA, CMS signature */ #define ENCTYPE_RC2_CBC_ENV 0x000c /**< RC2 cbc mode, CMS enveloped data */ #define ENCTYPE_RSA_ENV 0x000d /**< RSA encryption, CMS enveloped data */ #define ENCTYPE_RSA_ES_OAEP_ENV 0x000e /**< RSA w/OEAP encryption, CMS enveloped data */ #define ENCTYPE_DES3_CBC_ENV 0x000f /**< DES-3 cbc mode, CMS enveloped data */ #define ENCTYPE_DES3_CBC_SHA1 0x0010 #define ENCTYPE_AES128_CTS_HMAC_SHA1_96 0x0011 /**< RFC 3962 */ #define ENCTYPE_AES256_CTS_HMAC_SHA1_96 0x0012 /**< RFC 3962 */ #define ENCTYPE_ARCFOUR_HMAC 0x0017 #define ENCTYPE_ARCFOUR_HMAC_EXP 0x0018 #define ENCTYPE_CAMELLIA128_CTS_CMAC 0x0019 #define ENCTYPE_CAMELLIA256_CTS_CMAC 0x001a #define ENCTYPE_UNKNOWN 0x01ff #define CKSUMTYPE_CRC32 0x0001 #define CKSUMTYPE_RSA_MD4 0x0002 #define CKSUMTYPE_RSA_MD4_DES 0x0003 #define CKSUMTYPE_DESCBC 0x0004 /* des-mac-k */ /* rsa-md4-des-k */ #define CKSUMTYPE_RSA_MD5 0x0007 #define CKSUMTYPE_RSA_MD5_DES 0x0008 #define CKSUMTYPE_NIST_SHA 0x0009 #define CKSUMTYPE_HMAC_SHA1_DES3 0x000c #define CKSUMTYPE_HMAC_SHA1_96_AES128 0x000f /**< RFC 3962. Used with ENCTYPE_AES128_CTS_HMAC_SHA1_96 */ #define CKSUMTYPE_HMAC_SHA1_96_AES256 0x0010 /**< RFC 3962. Used with ENCTYPE_AES256_CTS_HMAC_SHA1_96 */ #define CKSUMTYPE_CMAC_CAMELLIA128 0x0011 #define CKSUMTYPE_CMAC_CAMELLIA256 0x0012 #define CKSUMTYPE_MD5_HMAC_ARCFOUR -137 /*Microsoft netlogon cksumtype*/ #define CKSUMTYPE_HMAC_MD5_ARCFOUR -138 /*Microsoft md5 hmac cksumtype*/ /* * The following are entropy source designations. Whenever * krb5_C_random_add_entropy is called, one of these source ids is passed in. * This allows the library to better estimate bits of entropy in the sample and * to keep track of what sources of entropy have contributed enough entropy. * Sources marked internal MUST NOT be used by applications outside the * Kerberos library */ enum { KRB5_C_RANDSOURCE_OLDAPI = 0, /*calls to krb5_C_RANDOM_SEED (INTERNAL)*/ KRB5_C_RANDSOURCE_OSRAND = 1, /* /dev/random or equivalent (internal)*/ KRB5_C_RANDSOURCE_TRUSTEDPARTY = 2, /* From KDC or other trusted party*/ /* * This source should be used carefully; data in this category * should be from a third party trusted to give random bits * For example keys issued by the KDC in the application server. */ KRB5_C_RANDSOURCE_TIMING = 3, /* Timing of operations*/ KRB5_C_RANDSOURCE_EXTERNAL_PROTOCOL = 4, /*Protocol data possibly from attacker*/ KRB5_C_RANDSOURCE_MAX = 5 /*Do not use; maximum source ID*/ }; #ifndef krb5_roundup /* round x up to nearest multiple of y */ #define krb5_roundup(x, y) ((((x) + (y) - 1)/(y))*(y)) #endif /* roundup */ /* macro function definitions to help clean up code */ #if 1 #define krb5_x(ptr,args) ((ptr)?((*(ptr)) args):(abort(),1)) #define krb5_xc(ptr,args) ((ptr)?((*(ptr)) args):(abort(),(char*)0)) #else #define krb5_x(ptr,args) ((*(ptr)) args) #define krb5_xc(ptr,args) ((*(ptr)) args) #endif /** * Encrypt data using a key (operates on keyblock). * * @param [in] context Library context * @param [in] key Encryption key * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in,out] cipher_state Cipher state; specify NULL if not needed * @param [in] input Data to be encrypted * @param [out] output Encrypted data * * This function encrypts the data block @a input and stores the output into @a * output. The actual encryption key will be derived from @a key and @a usage * if key derivation is specified for the encryption type. If non-null, @a * cipher_state specifies the beginning state for the encryption operation, and * is updated with the state to be passed as input to the next operation. * * @note The caller must initialize @a output and allocate at least enough * space for the result (using krb5_c_encrypt_length() to determine the amount * of space needed). @a output->length will be set to the actual length of the * ciphertext. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_encrypt(krb5_context context, const krb5_keyblock *key, krb5_keyusage usage, const krb5_data *cipher_state, const krb5_data *input, krb5_enc_data *output); /** * Decrypt data using a key (operates on keyblock). * * @param [in] context Library context * @param [in] key Encryption key * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in,out] cipher_state Cipher state; specify NULL if not needed * @param [in] input Encrypted data * @param [out] output Decrypted data * * This function decrypts the data block @a input and stores the output into @a * output. The actual decryption key will be derived from @a key and @a usage * if key derivation is specified for the encryption type. If non-null, @a * cipher_state specifies the beginning state for the decryption operation, and * is updated with the state to be passed as input to the next operation. * * @note The caller must initialize @a output and allocate at least enough * space for the result. The usual practice is to allocate an output buffer as * long as the ciphertext, and let krb5_c_decrypt() trim @a output->length. * For some enctypes, the resulting @a output->length may include padding * bytes. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_decrypt(krb5_context context, const krb5_keyblock *key, krb5_keyusage usage, const krb5_data *cipher_state, const krb5_enc_data *input, krb5_data *output); /** * Compute encrypted data length. * * @param [in] context Library context * @param [in] enctype Encryption type * @param [in] inputlen Length of the data to be encrypted * @param [out] length Length of the encrypted data * * This function computes the length of the ciphertext produced by encrypting * @a inputlen bytes including padding, confounder, and checksum. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_encrypt_length(krb5_context context, krb5_enctype enctype, size_t inputlen, size_t *length); /** * Return cipher block size. * * @param [in] context Library context * @param [in] enctype Encryption type * @param [out] blocksize Block size for @a enctype * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_block_size(krb5_context context, krb5_enctype enctype, size_t *blocksize); /** * Return length of the specified key in bytes. * * @param [in] context Library context * @param [in] enctype Encryption type * @param [out] keybytes Number of bytes required to make a key * @param [out] keylength Length of final key * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_keylengths(krb5_context context, krb5_enctype enctype, size_t *keybytes, size_t *keylength); /** * Initialize a new cipher state. * * @param [in] context Library context * @param [in] key Key * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [out] new_state New cipher state * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_init_state(krb5_context context, const krb5_keyblock *key, krb5_keyusage usage, krb5_data *new_state); /** * Free a cipher state previously allocated by krb5_c_init_state(). * * @param [in] context Library context * @param [in] key Key * @param [in] state Cipher state to be freed * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_free_state(krb5_context context, const krb5_keyblock *key, krb5_data *state); /** * Generate enctype-specific pseudo-random bytes. * * @param [in] context Library context * @param [in] keyblock Key * @param [in] input Input data * @param [out] output Output data * * This function selects a pseudo-random function based on @a keyblock and * computes its value over @a input, placing the result into @a output. * The caller must preinitialize @a output and allocate space for the * result, using krb5_c_prf_length() to determine the required length. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_prf(krb5_context context, const krb5_keyblock *keyblock, krb5_data *input, krb5_data *output); /** * Get the output length of pseudo-random functions for an encryption type. * * @param [in] context Library context * @param [in] enctype Encryption type * @param [out] len Length of PRF output * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_prf_length(krb5_context context, krb5_enctype enctype, size_t *len); /** * Compute the KRB-FX-CF2 combination of two keys and pepper strings. * * @param [in] context Library context * @param [in] k1 KDC contribution key * @param [in] pepper1 String "PKINIT" * @param [in] k2 Reply key * @param [in] pepper2 String "KeyExchange" * @param [out] out Output key * * This function computes the KRB-FX-CF2 function over its inputs and places * the results in a newly allocated keyblock. This function is simple in that * it assumes that @a pepper1 and @a pepper2 are C strings with no internal * nulls and that the enctype of the result will be the same as that of @a k1. * @a k1 and @a k2 may be of different enctypes. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_fx_cf2_simple(krb5_context context, krb5_keyblock *k1, const char *pepper1, krb5_keyblock *k2, const char *pepper2, krb5_keyblock **out); /** * Generate an enctype-specific random encryption key. * * @param [in] context Library context * @param [in] enctype Encryption type of the generated key * @param [out] k5_random_key An allocated and initialized keyblock * * Use krb5_free_keyblock_contents() to free @a k5_random_key when * no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_make_random_key(krb5_context context, krb5_enctype enctype, krb5_keyblock *k5_random_key); /** * Generate an enctype-specific key from random data. * * @param [in] context Library context * @param [in] enctype Encryption type * @param [in] random_data Random input data * @param [out] k5_random_key Resulting key * * This function takes random input data @a random_data and produces a valid * key @a k5_random_key for a given @a enctype. * * @note It is assumed that @a k5_random_key has already been initialized and * @a k5_random_key->contents has been allocated with the correct length. * * @sa krb5_c_keylengths() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_random_to_key(krb5_context context, krb5_enctype enctype, krb5_data *random_data, krb5_keyblock *k5_random_key); /** * Add entropy to the pseudo-random number generator. * * @param [in] context Library context * @param [in] randsource Entropy source (see KRB5_RANDSOURCE types) * @param [in] data Data * * Contribute entropy to the PRNG used by krb5 crypto operations. This may or * may not affect the output of the next crypto operation requiring random * data. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_random_add_entropy(krb5_context context, unsigned int randsource, const krb5_data *data); /** * Generate pseudo-random bytes. * * @param [in] context Library context * @param [out] data Random data * * Fills in @a data with bytes from the PRNG used by krb5 crypto operations. * The caller must preinitialize @a data and allocate the desired amount of * space. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_random_make_octets(krb5_context context, krb5_data *data); /** * Collect entropy from the OS if possible. * * @param [in] context Library context * @param [in] strong Strongest available source of entropy * @param [out] success 1 if OS provides entropy, 0 otherwise * * If @a strong is non-zero, this function attempts to use the strongest * available source of entropy. Setting this flag may cause the function to * block on some operating systems. Good uses include seeding the PRNG for * kadmind and realm setup. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_random_os_entropy(krb5_context context, int strong, int *success); /** @deprecated Replaced by krb5_c_* API family. */ krb5_error_code KRB5_CALLCONV krb5_c_random_seed(krb5_context context, krb5_data *data); /** * Convert a string (such a password) to a key. * * @param [in] context Library context * @param [in] enctype Encryption type * @param [in] string String to be converted * @param [in] salt Salt value * @param [out] key Generated key * * This function converts @a string to a @a key of encryption type @a enctype, * using the specified @a salt. The newly created @a key must be released by * calling krb5_free_keyblock_contents() when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_string_to_key(krb5_context context, krb5_enctype enctype, const krb5_data *string, const krb5_data *salt, krb5_keyblock *key); /** * Convert a string (such as a password) to a key with additional parameters. * * @param [in] context Library context * @param [in] enctype Encryption type * @param [in] string String to be converted * @param [in] salt Salt value * @param [in] params Parameters * @param [out] key Generated key * * This function is similar to krb5_c_string_to_key(), but also takes * parameters which may affect the algorithm in an enctype-dependent way. The * newly created @a key must be released by calling * krb5_free_keyblock_contents() when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_string_to_key_with_params(krb5_context context, krb5_enctype enctype, const krb5_data *string, const krb5_data *salt, const krb5_data *params, krb5_keyblock *key); /** * Compare two encryption types. * * @param [in] context Library context * @param [in] e1 First encryption type * @param [in] e2 Second encryption type * @param [out] similar @c TRUE if types are similar, @c FALSE if not * * This function determines whether two encryption types use the same kind of * keys. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_enctype_compare(krb5_context context, krb5_enctype e1, krb5_enctype e2, krb5_boolean *similar); /** * Compute a checksum (operates on keyblock). * * @param [in] context Library context * @param [in] cksumtype Checksum type (0 for mandatory type) * @param [in] key Encryption key for a keyed checksum * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in] input Input data * @param [out] cksum Generated checksum * * This function computes a checksum of type @a cksumtype over @a input, using * @a key if the checksum type is a keyed checksum. If @a cksumtype is 0 and * @a key is non-null, the checksum type will be the mandatory-to-implement * checksum type for the key's encryption type. The actual checksum key will * be derived from @a key and @a usage if key derivation is specified for the * checksum type. The newly created @a cksum must be released by calling * krb5_free_checksum_contents() when it is no longer needed. * * @note This function is similar to krb5_k_make_checksum(), but operates * on keyblock @a key. * * @sa krb5_c_verify_checksum() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_make_checksum(krb5_context context, krb5_cksumtype cksumtype, const krb5_keyblock *key, krb5_keyusage usage, const krb5_data *input, krb5_checksum *cksum); /** * Verify a checksum (operates on keyblock). * * @param [in] context Library context * @param [in] key Encryption key for a keyed checksum * @param [in] usage @a key usage * @param [in] data Data to be used to compute a new checksum * using @a key to compare @a cksum against * @param [in] cksum Checksum to be verified * @param [out] valid Non-zero for success, zero for failure * * This function verifies that @a cksum is a valid checksum for @a data. If * the checksum type of @a cksum is a keyed checksum, @a key is used to verify * the checksum. The actual checksum key will be derived from @a key and @a * usage if key derivation is specified for the checksum type. * * @note This function is similar to krb5_k_verify_checksum(), but operates * on keyblock @a key. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_verify_checksum(krb5_context context, const krb5_keyblock *key, krb5_keyusage usage, const krb5_data *data, const krb5_checksum *cksum, krb5_boolean *valid); /** * Return the length of checksums for a checksum type. * * @param [in] context Library context * @param [in] cksumtype Checksum type * @param [out] length Checksum length * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_checksum_length(krb5_context context, krb5_cksumtype cksumtype, size_t *length); /** * Return a list of keyed checksum types usable with an encryption type. * * @param [in] context Library context * @param [in] enctype Encryption type * @param [out] count Count of allowable checksum types * @param [out] cksumtypes Array of allowable checksum types * * Use krb5_free_cksumtypes() to free @a cksumtypes when it is no longer * needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_keyed_checksum_types(krb5_context context, krb5_enctype enctype, unsigned int *count, krb5_cksumtype **cksumtypes); /** @defgroup KRB5_KEYUSAGE KRB5_KEYUSAGE * @{ */ #define KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS 1 #define KRB5_KEYUSAGE_KDC_REP_TICKET 2 #define KRB5_KEYUSAGE_AS_REP_ENCPART 3 #define KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY 4 #define KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY 5 #define KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM 6 #define KRB5_KEYUSAGE_TGS_REQ_AUTH 7 #define KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY 8 #define KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY 9 #define KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM 10 #define KRB5_KEYUSAGE_AP_REQ_AUTH 11 #define KRB5_KEYUSAGE_AP_REP_ENCPART 12 #define KRB5_KEYUSAGE_KRB_PRIV_ENCPART 13 #define KRB5_KEYUSAGE_KRB_CRED_ENCPART 14 #define KRB5_KEYUSAGE_KRB_SAFE_CKSUM 15 #define KRB5_KEYUSAGE_APP_DATA_ENCRYPT 16 #define KRB5_KEYUSAGE_APP_DATA_CKSUM 17 #define KRB5_KEYUSAGE_KRB_ERROR_CKSUM 18 #define KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM 19 #define KRB5_KEYUSAGE_AD_MTE 20 #define KRB5_KEYUSAGE_AD_ITE 21 /* XXX need to register these */ #define KRB5_KEYUSAGE_GSS_TOK_MIC 22 #define KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG 23 #define KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV 24 /* Defined in Integrating SAM Mechanisms with Kerberos draft */ #define KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM 25 /** Note conflict with @ref KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST */ #define KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID 26 /** Note conflict with @ref KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY */ #define KRB5_KEYUSAGE_PA_SAM_RESPONSE 27 /* Defined in [MS-SFU] */ /** Note conflict with @ref KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID */ #define KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST 26 /** Note conflict with @ref KRB5_KEYUSAGE_PA_SAM_RESPONSE */ #define KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY 27 /* unused */ #define KRB5_KEYUSAGE_PA_REFERRAL 26 #define KRB5_KEYUSAGE_AD_SIGNEDPATH -21 #define KRB5_KEYUSAGE_IAKERB_FINISHED 42 #define KRB5_KEYUSAGE_PA_PKINIT_KX 44 #define KRB5_KEYUSAGE_PA_OTP_REQUEST 45 /**< See RFC 6560 section 4.2 */ /* define in draft-ietf-krb-wg-preauth-framework*/ #define KRB5_KEYUSAGE_FAST_REQ_CHKSUM 50 #define KRB5_KEYUSAGE_FAST_ENC 51 #define KRB5_KEYUSAGE_FAST_REP 52 #define KRB5_KEYUSAGE_FAST_FINISHED 53 #define KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT 54 #define KRB5_KEYUSAGE_ENC_CHALLENGE_KDC 55 #define KRB5_KEYUSAGE_AS_REQ 56 /** @} */ /* end of KRB5_KEYUSAGE group */ /** * Verify that a specified encryption type is a valid Kerberos encryption type. * * @param [in] ktype Encryption type * * @return @c TRUE if @a ktype is valid, @c FALSE if not */ krb5_boolean KRB5_CALLCONV krb5_c_valid_enctype(krb5_enctype ktype); /** * Verify that specified checksum type is a valid Kerberos checksum type. * * @param [in] ctype Checksum type * * @return @c TRUE if @a ctype is valid, @c FALSE if not */ krb5_boolean KRB5_CALLCONV krb5_c_valid_cksumtype(krb5_cksumtype ctype); /** * Test whether a checksum type is collision-proof. * * @param [in] ctype Checksum type * * @return @c TRUE if @a ctype is collision-proof, @c FALSE if it is not * collision-proof or not a valid checksum type. */ krb5_boolean KRB5_CALLCONV krb5_c_is_coll_proof_cksum(krb5_cksumtype ctype); /** * Test whether a checksum type is keyed. * * @param [in] ctype Checksum type * * @return @c TRUE if @a ctype is a keyed checksum type, @c FALSE otherwise. */ krb5_boolean KRB5_CALLCONV krb5_c_is_keyed_cksum(krb5_cksumtype ctype); /* AEAD APIs */ /** @defgroup KRB5_CRYPTO_TYPE KRB5_CRYPTO_TYPE * @{ */ #define KRB5_CRYPTO_TYPE_EMPTY 0 /**< [in] ignored */ #define KRB5_CRYPTO_TYPE_HEADER 1 /**< [out] header */ #define KRB5_CRYPTO_TYPE_DATA 2 /**< [in, out] plaintext */ #define KRB5_CRYPTO_TYPE_SIGN_ONLY 3 /**< [in] associated data */ #define KRB5_CRYPTO_TYPE_PADDING 4 /**< [out] padding */ #define KRB5_CRYPTO_TYPE_TRAILER 5 /**< [out] checksum for encrypt */ #define KRB5_CRYPTO_TYPE_CHECKSUM 6 /**< [out] checksum for MIC */ #define KRB5_CRYPTO_TYPE_STREAM 7 /**< [in] entire message without decomposing the structure into header, data and trailer buffers */ /** @} */ /* end of KRB5_CRYPTO_TYPE group */ /** * Fill in a checksum element in IOV array (operates on keyblock) * * @param [in] context Library context * @param [in] cksumtype Checksum type (0 for mandatory type) * @param [in] key Encryption key for a keyed checksum * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in,out] data IOV array * @param [in] num_data Size of @a data * * Create a checksum in the #KRB5_CRYPTO_TYPE_CHECKSUM element over * #KRB5_CRYPTO_TYPE_DATA and #KRB5_CRYPTO_TYPE_SIGN_ONLY chunks in @a data. * Only the #KRB5_CRYPTO_TYPE_CHECKSUM region is modified. * * @note This function is similar to krb5_k_make_checksum_iov(), but operates * on keyblock @a key. * * @sa krb5_c_verify_checksum_iov() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_make_checksum_iov(krb5_context context, krb5_cksumtype cksumtype, const krb5_keyblock *key, krb5_keyusage usage, krb5_crypto_iov *data, size_t num_data); /** * Validate a checksum element in IOV array (operates on keyblock). * * @param [in] context Library context * @param [in] cksumtype Checksum type (0 for mandatory type) * @param [in] key Encryption key for a keyed checksum * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in] data IOV array * @param [in] num_data Size of @a data * @param [out] valid Non-zero for success, zero for failure * * Confirm that the checksum in the #KRB5_CRYPTO_TYPE_CHECKSUM element is a * valid checksum of the #KRB5_CRYPTO_TYPE_DATA and #KRB5_CRYPTO_TYPE_SIGN_ONLY * regions in the iov. * * @note This function is similar to krb5_k_verify_checksum_iov(), but operates * on keyblock @a key. * * @sa krb5_c_make_checksum_iov() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_verify_checksum_iov(krb5_context context, krb5_cksumtype cksumtype, const krb5_keyblock *key, krb5_keyusage usage, const krb5_crypto_iov *data, size_t num_data, krb5_boolean *valid); /** * Encrypt data in place supporting AEAD (operates on keyblock). * * @param [in] context Library context * @param [in] keyblock Encryption key * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in] cipher_state Cipher state; specify NULL if not needed * @param [in,out] data IOV array. Modified in-place. * @param [in] num_data Size of @a data * * This function encrypts the data block @a data and stores the output in-place. * The actual encryption key will be derived from @a keyblock and @a usage * if key derivation is specified for the encryption type. If non-null, @a * cipher_state specifies the beginning state for the encryption operation, and * is updated with the state to be passed as input to the next operation. * The caller must allocate the right number of krb5_crypto_iov * structures before calling into this API. * * @note On return from a krb5_c_encrypt_iov() call, the @a data->length in the * iov structure are adjusted to reflect actual lengths of the ciphertext used. * For example, if the padding length is too large, the length will be reduced. * Lengths are never increased. * * @note This function is similar to krb5_k_encrypt_iov(), but operates * on keyblock @a keyblock. * * @sa krb5_c_decrypt_iov() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_encrypt_iov(krb5_context context, const krb5_keyblock *keyblock, krb5_keyusage usage, const krb5_data *cipher_state, krb5_crypto_iov *data, size_t num_data); /** * Decrypt data in place supporting AEAD (operates on keyblock). * * @param [in] context Library context * @param [in] keyblock Encryption key * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in] cipher_state Cipher state; specify NULL if not needed * @param [in,out] data IOV array. Modified in-place. * @param [in] num_data Size of @a data * * This function decrypts the data block @a data and stores the output in-place. * The actual decryption key will be derived from @a keyblock and @a usage * if key derivation is specified for the encryption type. If non-null, @a * cipher_state specifies the beginning state for the decryption operation, and * is updated with the state to be passed as input to the next operation. * The caller must allocate the right number of krb5_crypto_iov * structures before calling into this API. * * @note On return from a krb5_c_decrypt_iov() call, the @a data->length in the * iov structure are adjusted to reflect actual lengths of the ciphertext used. * For example, if the padding length is too large, the length will be reduced. * Lengths are never increased. * * @note This function is similar to krb5_k_decrypt_iov(), but operates * on keyblock @a keyblock. * * @sa krb5_c_decrypt_iov() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_decrypt_iov(krb5_context context, const krb5_keyblock *keyblock, krb5_keyusage usage, const krb5_data *cipher_state, krb5_crypto_iov *data, size_t num_data); /** * Return a length of a message field specific to the encryption type. * * @param [in] context Library context * @param [in] enctype Encryption type * @param [in] type Type field (See @ref KRB5_CRYPTO_TYPE types) * @param [out] size Length of the @a type specific to @a enctype * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_crypto_length(krb5_context context, krb5_enctype enctype, krb5_cryptotype type, unsigned int *size); /** * Fill in lengths for header, trailer and padding in a IOV array. * * @param [in] context Library context * @param [in] enctype Encryption type * @param [in,out] data IOV array * @param [in] num_data Size of @a data * * Padding is set to the actual padding required based on the provided * @a data buffers. Typically this API is used after setting up the data * buffers and #KRB5_CRYPTO_TYPE_SIGN_ONLY buffers, but before actually * allocating header, trailer and padding. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_c_crypto_length_iov(krb5_context context, krb5_enctype enctype, krb5_crypto_iov *data, size_t num_data); /** * Return a number of padding octets. * * @param [in] context Library context * @param [in] enctype Encryption type * @param [in] data_length Length of the plaintext to pad * @param [out] size Number of padding octets * * This function returns the number of the padding octets required to pad * @a data_length octets of plaintext. * * @retval 0 Success; otherwise - KRB5_BAD_ENCTYPE */ krb5_error_code KRB5_CALLCONV krb5_c_padding_length(krb5_context context, krb5_enctype enctype, size_t data_length, unsigned int *size); /** * Create a krb5_key from the enctype and key data in a keyblock. * * @param [in] context Library context * @param [in] key_data Keyblock * @param [out] out Opaque key * * The reference count on a key @a out is set to 1. * Use krb5_k_free_key() to free @a out when it is no longer needed. * * @retval 0 Success; otherwise - KRB5_BAD_ENCTYPE */ krb5_error_code KRB5_CALLCONV krb5_k_create_key(krb5_context context, const krb5_keyblock *key_data, krb5_key *out); /** Increment the reference count on a key. */ void KRB5_CALLCONV krb5_k_reference_key(krb5_context context, krb5_key key); /** Decrement the reference count on a key and free it if it hits zero. */ void KRB5_CALLCONV krb5_k_free_key(krb5_context context, krb5_key key); /** Retrieve a copy of the keyblock from a krb5_key structure. */ krb5_error_code KRB5_CALLCONV krb5_k_key_keyblock(krb5_context context, krb5_key key, krb5_keyblock **key_data); /** Retrieve the enctype of a krb5_key structure. */ krb5_enctype KRB5_CALLCONV krb5_k_key_enctype(krb5_context context, krb5_key key); /** * Encrypt data using a key (operates on opaque key). * * @param [in] context Library context * @param [in] key Encryption key * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in,out] cipher_state Cipher state; specify NULL if not needed * @param [in] input Data to be encrypted * @param [out] output Encrypted data * * This function encrypts the data block @a input and stores the output into @a * output. The actual encryption key will be derived from @a key and @a usage * if key derivation is specified for the encryption type. If non-null, @a * cipher_state specifies the beginning state for the encryption operation, and * is updated with the state to be passed as input to the next operation. * * @note The caller must initialize @a output and allocate at least enough * space for the result (using krb5_c_encrypt_length() to determine the amount * of space needed). @a output->length will be set to the actual length of the * ciphertext. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_k_encrypt(krb5_context context, krb5_key key, krb5_keyusage usage, const krb5_data *cipher_state, const krb5_data *input, krb5_enc_data *output); /** * Encrypt data in place supporting AEAD (operates on opaque key). * * @param [in] context Library context * @param [in] key Encryption key * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in] cipher_state Cipher state; specify NULL if not needed * @param [in,out] data IOV array. Modified in-place. * @param [in] num_data Size of @a data * * This function encrypts the data block @a data and stores the output in-place. * The actual encryption key will be derived from @a key and @a usage * if key derivation is specified for the encryption type. If non-null, @a * cipher_state specifies the beginning state for the encryption operation, and * is updated with the state to be passed as input to the next operation. * The caller must allocate the right number of krb5_crypto_iov * structures before calling into this API. * * @note On return from a krb5_c_encrypt_iov() call, the @a data->length in the * iov structure are adjusted to reflect actual lengths of the ciphertext used. * For example, if the padding length is too large, the length will be reduced. * Lengths are never increased. * * @note This function is similar to krb5_c_encrypt_iov(), but operates * on opaque key @a key. * * @sa krb5_k_decrypt_iov() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_k_encrypt_iov(krb5_context context, krb5_key key, krb5_keyusage usage, const krb5_data *cipher_state, krb5_crypto_iov *data, size_t num_data); /** * Decrypt data using a key (operates on opaque key). * * @param [in] context Library context * @param [in] key Encryption key * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in,out] cipher_state Cipher state; specify NULL if not needed * @param [in] input Encrypted data * @param [out] output Decrypted data * * This function decrypts the data block @a input and stores the output into @a * output. The actual decryption key will be derived from @a key and @a usage * if key derivation is specified for the encryption type. If non-null, @a * cipher_state specifies the beginning state for the decryption operation, and * is updated with the state to be passed as input to the next operation. * * @note The caller must initialize @a output and allocate at least enough * space for the result. The usual practice is to allocate an output buffer as * long as the ciphertext, and let krb5_c_decrypt() trim @a output->length. * For some enctypes, the resulting @a output->length may include padding * bytes. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_k_decrypt(krb5_context context, krb5_key key, krb5_keyusage usage, const krb5_data *cipher_state, const krb5_enc_data *input, krb5_data *output); /** * Decrypt data in place supporting AEAD (operates on opaque key). * * @param [in] context Library context * @param [in] key Encryption key * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in] cipher_state Cipher state; specify NULL if not needed * @param [in,out] data IOV array. Modified in-place. * @param [in] num_data Size of @a data * * This function decrypts the data block @a data and stores the output in-place. * The actual decryption key will be derived from @a key and @a usage * if key derivation is specified for the encryption type. If non-null, @a * cipher_state specifies the beginning state for the decryption operation, and * is updated with the state to be passed as input to the next operation. * The caller must allocate the right number of krb5_crypto_iov * structures before calling into this API. * * @note On return from a krb5_c_decrypt_iov() call, the @a data->length in the * iov structure are adjusted to reflect actual lengths of the ciphertext used. * For example, if the padding length is too large, the length will be reduced. * Lengths are never increased. * * @note This function is similar to krb5_c_decrypt_iov(), but operates * on opaque key @a key. * * @sa krb5_k_encrypt_iov() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_k_decrypt_iov(krb5_context context, krb5_key key, krb5_keyusage usage, const krb5_data *cipher_state, krb5_crypto_iov *data, size_t num_data); /** * Compute a checksum (operates on opaque key). * * @param [in] context Library context * @param [in] cksumtype Checksum type (0 for mandatory type) * @param [in] key Encryption key for a keyed checksum * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in] input Input data * @param [out] cksum Generated checksum * * This function computes a checksum of type @a cksumtype over @a input, using * @a key if the checksum type is a keyed checksum. If @a cksumtype is 0 and * @a key is non-null, the checksum type will be the mandatory-to-implement * checksum type for the key's encryption type. The actual checksum key will * be derived from @a key and @a usage if key derivation is specified for the * checksum type. The newly created @a cksum must be released by calling * krb5_free_checksum_contents() when it is no longer needed. * * @note This function is similar to krb5_c_make_checksum(), but operates * on opaque @a key. * * @sa krb5_c_verify_checksum() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_k_make_checksum(krb5_context context, krb5_cksumtype cksumtype, krb5_key key, krb5_keyusage usage, const krb5_data *input, krb5_checksum *cksum); /** * Fill in a checksum element in IOV array (operates on opaque key) * * @param [in] context Library context * @param [in] cksumtype Checksum type (0 for mandatory type) * @param [in] key Encryption key for a keyed checksum * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in,out] data IOV array * @param [in] num_data Size of @a data * * Create a checksum in the #KRB5_CRYPTO_TYPE_CHECKSUM element over * #KRB5_CRYPTO_TYPE_DATA and #KRB5_CRYPTO_TYPE_SIGN_ONLY chunks in @a data. * Only the #KRB5_CRYPTO_TYPE_CHECKSUM region is modified. * * @note This function is similar to krb5_c_make_checksum_iov(), but operates * on opaque @a key. * * @sa krb5_k_verify_checksum_iov() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_k_make_checksum_iov(krb5_context context, krb5_cksumtype cksumtype, krb5_key key, krb5_keyusage usage, krb5_crypto_iov *data, size_t num_data); /** * Verify a checksum (operates on opaque key). * * @param [in] context Library context * @param [in] key Encryption key for a keyed checksum * @param [in] usage @a key usage * @param [in] data Data to be used to compute a new checksum * using @a key to compare @a cksum against * @param [in] cksum Checksum to be verified * @param [out] valid Non-zero for success, zero for failure * * This function verifies that @a cksum is a valid checksum for @a data. If * the checksum type of @a cksum is a keyed checksum, @a key is used to verify * the checksum. The actual checksum key will be derived from @a key and @a * usage if key derivation is specified for the checksum type. * * @note This function is similar to krb5_c_verify_checksum(), but operates * on opaque @a key. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_k_verify_checksum(krb5_context context, krb5_key key, krb5_keyusage usage, const krb5_data *data, const krb5_checksum *cksum, krb5_boolean *valid); /** * Validate a checksum element in IOV array (operates on opaque key). * * @param [in] context Library context * @param [in] cksumtype Checksum type (0 for mandatory type) * @param [in] key Encryption key for a keyed checksum * @param [in] usage Key usage (see @ref KRB5_KEYUSAGE types) * @param [in] data IOV array * @param [in] num_data Size of @a data * @param [out] valid Non-zero for success, zero for failure * * Confirm that the checksum in the #KRB5_CRYPTO_TYPE_CHECKSUM element is a * valid checksum of the #KRB5_CRYPTO_TYPE_DATA and #KRB5_CRYPTO_TYPE_SIGN_ONLY * regions in the iov. * * @note This function is similar to krb5_c_verify_checksum_iov(), but operates * on opaque @a key. * * @sa krb5_k_make_checksum_iov() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_k_verify_checksum_iov(krb5_context context, krb5_cksumtype cksumtype, krb5_key key, krb5_keyusage usage, const krb5_crypto_iov *data, size_t num_data, krb5_boolean *valid); /** * Generate enctype-specific pseudo-random bytes (operates on opaque key). * * @param [in] context Library context * @param [in] key Key * @param [in] input Input data * @param [out] output Output data * * This function selects a pseudo-random function based on @a key and * computes its value over @a input, placing the result into @a output. * The caller must preinitialize @a output and allocate space for the * result. * * @note This function is similar to krb5_c_prf(), but operates * on opaque @a key. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_k_prf(krb5_context context, krb5_key key, krb5_data *input, krb5_data *output); #ifdef KRB5_OLD_CRYPTO /* * old cryptosystem routine prototypes. These are now layered * on top of the functions above. */ /** @deprecated Replaced by krb5_c_* API family.*/ krb5_error_code KRB5_CALLCONV krb5_encrypt(krb5_context context, krb5_const_pointer inptr, krb5_pointer outptr, size_t size, krb5_encrypt_block *eblock, krb5_pointer ivec); /** @deprecated Replaced by krb5_c_* API family. */ krb5_error_code KRB5_CALLCONV krb5_decrypt(krb5_context context, krb5_const_pointer inptr, krb5_pointer outptr, size_t size, krb5_encrypt_block *eblock, krb5_pointer ivec); /** @deprecated Replaced by krb5_c_* API family. */ krb5_error_code KRB5_CALLCONV krb5_process_key(krb5_context context, krb5_encrypt_block *eblock, const krb5_keyblock * key); /** @deprecated Replaced by krb5_c_* API family. */ krb5_error_code KRB5_CALLCONV krb5_finish_key(krb5_context context, krb5_encrypt_block * eblock); /** @deprecated See krb5_c_string_to_key() */ krb5_error_code KRB5_CALLCONV krb5_string_to_key(krb5_context context, const krb5_encrypt_block *eblock, krb5_keyblock * keyblock, const krb5_data *data, const krb5_data *salt); /** @deprecated Replaced by krb5_c_* API family. */ krb5_error_code KRB5_CALLCONV krb5_init_random_key(krb5_context context, const krb5_encrypt_block *eblock, const krb5_keyblock *keyblock, krb5_pointer *ptr); /** @deprecated Replaced by krb5_c_* API family. */ krb5_error_code KRB5_CALLCONV krb5_finish_random_key(krb5_context context, const krb5_encrypt_block *eblock, krb5_pointer *ptr); /** @deprecated Replaced by krb5_c_* API family. */ krb5_error_code KRB5_CALLCONV krb5_random_key(krb5_context context, const krb5_encrypt_block *eblock, krb5_pointer ptr, krb5_keyblock **keyblock); /** @deprecated Replaced by krb5_c_* API family. */ krb5_enctype KRB5_CALLCONV krb5_eblock_enctype(krb5_context context, const krb5_encrypt_block *eblock); /** @deprecated Replaced by krb5_c_* API family. */ krb5_error_code KRB5_CALLCONV krb5_use_enctype(krb5_context context, krb5_encrypt_block *eblock, krb5_enctype enctype); /** @deprecated Replaced by krb5_c_* API family. */ size_t KRB5_CALLCONV krb5_encrypt_size(size_t length, krb5_enctype crypto); /** @deprecated See krb5_c_checksum_length() */ size_t KRB5_CALLCONV krb5_checksum_size(krb5_context context, krb5_cksumtype ctype); /** @deprecated See krb5_c_make_checksum() */ krb5_error_code KRB5_CALLCONV krb5_calculate_checksum(krb5_context context, krb5_cksumtype ctype, krb5_const_pointer in, size_t in_length, krb5_const_pointer seed, size_t seed_length, krb5_checksum * outcksum); /** @deprecated See krb5_c_verify_checksum() */ krb5_error_code KRB5_CALLCONV krb5_verify_checksum(krb5_context context, krb5_cksumtype ctype, const krb5_checksum * cksum, krb5_const_pointer in, size_t in_length, krb5_const_pointer seed, size_t seed_length); #endif /* KRB5_OLD_CRYPTO */ /* * end "encryption.h" */ /* * begin "fieldbits.h" */ /* kdc_options for kdc_request */ /* options is 32 bits; each host is responsible to put the 4 bytes representing these bits into net order before transmission */ /* #define KDC_OPT_RESERVED 0x80000000 */ #define KDC_OPT_FORWARDABLE 0x40000000 #define KDC_OPT_FORWARDED 0x20000000 #define KDC_OPT_PROXIABLE 0x10000000 #define KDC_OPT_PROXY 0x08000000 #define KDC_OPT_ALLOW_POSTDATE 0x04000000 #define KDC_OPT_POSTDATED 0x02000000 /* #define KDC_OPT_UNUSED 0x01000000 */ #define KDC_OPT_RENEWABLE 0x00800000 /* #define KDC_OPT_UNUSED 0x00400000 */ /* #define KDC_OPT_RESERVED 0x00200000 */ /* #define KDC_OPT_RESERVED 0x00100000 */ /* #define KDC_OPT_RESERVED 0x00080000 */ /* #define KDC_OPT_RESERVED 0x00040000 */ #define KDC_OPT_CNAME_IN_ADDL_TKT 0x00020000 #define KDC_OPT_CANONICALIZE 0x00010000 #define KDC_OPT_REQUEST_ANONYMOUS 0x00008000 /* #define KDC_OPT_RESERVED 0x00004000 */ /* #define KDC_OPT_RESERVED 0x00002000 */ /* #define KDC_OPT_RESERVED 0x00001000 */ /* #define KDC_OPT_RESERVED 0x00000800 */ /* #define KDC_OPT_RESERVED 0x00000400 */ /* #define KDC_OPT_RESERVED 0x00000200 */ /* #define KDC_OPT_RESERVED 0x00000100 */ /* #define KDC_OPT_RESERVED 0x00000080 */ /* #define KDC_OPT_RESERVED 0x00000040 */ #define KDC_OPT_DISABLE_TRANSITED_CHECK 0x00000020 #define KDC_OPT_RENEWABLE_OK 0x00000010 #define KDC_OPT_ENC_TKT_IN_SKEY 0x00000008 /* #define KDC_OPT_UNUSED 0x00000004 */ #define KDC_OPT_RENEW 0x00000002 #define KDC_OPT_VALIDATE 0x00000001 /* * Mask of ticket flags in the TGT which should be converted into KDC * options when using the TGT to get derivitive tickets. * * New mask = KDC_OPT_FORWARDABLE | KDC_OPT_PROXIABLE | * KDC_OPT_ALLOW_POSTDATE | KDC_OPT_RENEWABLE */ #define KDC_TKT_COMMON_MASK 0x54800000 /* definitions for ap_options fields */ /** @defgroup AP_OPTS AP_OPTS * * ap_options are 32 bits; each host is responsible to put the 4 bytes * representing these bits into net order before transmission * @{ */ #define AP_OPTS_RESERVED 0x80000000 #define AP_OPTS_USE_SESSION_KEY 0x40000000 /**< Use session key */ #define AP_OPTS_MUTUAL_REQUIRED 0x20000000 /**< Perform a mutual authentication exchange */ #define AP_OPTS_ETYPE_NEGOTIATION 0x00000002 #define AP_OPTS_USE_SUBKEY 0x00000001 /**< Generate a subsession key from the current session key obtained from the credentials */ /* #define AP_OPTS_RESERVED 0x10000000 */ /* #define AP_OPTS_RESERVED 0x08000000 */ /* #define AP_OPTS_RESERVED 0x04000000 */ /* #define AP_OPTS_RESERVED 0x02000000 */ /* #define AP_OPTS_RESERVED 0x01000000 */ /* #define AP_OPTS_RESERVED 0x00800000 */ /* #define AP_OPTS_RESERVED 0x00400000 */ /* #define AP_OPTS_RESERVED 0x00200000 */ /* #define AP_OPTS_RESERVED 0x00100000 */ /* #define AP_OPTS_RESERVED 0x00080000 */ /* #define AP_OPTS_RESERVED 0x00040000 */ /* #define AP_OPTS_RESERVED 0x00020000 */ /* #define AP_OPTS_RESERVED 0x00010000 */ /* #define AP_OPTS_RESERVED 0x00008000 */ /* #define AP_OPTS_RESERVED 0x00004000 */ /* #define AP_OPTS_RESERVED 0x00002000 */ /* #define AP_OPTS_RESERVED 0x00001000 */ /* #define AP_OPTS_RESERVED 0x00000800 */ /* #define AP_OPTS_RESERVED 0x00000400 */ /* #define AP_OPTS_RESERVED 0x00000200 */ /* #define AP_OPTS_RESERVED 0x00000100 */ /* #define AP_OPTS_RESERVED 0x00000080 */ /* #define AP_OPTS_RESERVED 0x00000040 */ /* #define AP_OPTS_RESERVED 0x00000020 */ /* #define AP_OPTS_RESERVED 0x00000010 */ /* #define AP_OPTS_RESERVED 0x00000008 */ /* #define AP_OPTS_RESERVED 0x00000004 */ #define AP_OPTS_WIRE_MASK 0xfffffff0 /** @} */ /* end of AP_OPTS group */ /* definitions for ad_type fields. */ #define AD_TYPE_RESERVED 0x8000 #define AD_TYPE_EXTERNAL 0x4000 #define AD_TYPE_REGISTERED 0x2000 #define AD_TYPE_FIELD_TYPE_MASK 0x1fff /* Ticket flags */ /* flags are 32 bits; each host is responsible to put the 4 bytes representing these bits into net order before transmission */ /* #define TKT_FLG_RESERVED 0x80000000 */ #define TKT_FLG_FORWARDABLE 0x40000000 #define TKT_FLG_FORWARDED 0x20000000 #define TKT_FLG_PROXIABLE 0x10000000 #define TKT_FLG_PROXY 0x08000000 #define TKT_FLG_MAY_POSTDATE 0x04000000 #define TKT_FLG_POSTDATED 0x02000000 #define TKT_FLG_INVALID 0x01000000 #define TKT_FLG_RENEWABLE 0x00800000 #define TKT_FLG_INITIAL 0x00400000 #define TKT_FLG_PRE_AUTH 0x00200000 #define TKT_FLG_HW_AUTH 0x00100000 #define TKT_FLG_TRANSIT_POLICY_CHECKED 0x00080000 #define TKT_FLG_OK_AS_DELEGATE 0x00040000 #define TKT_FLG_ENC_PA_REP 0x00010000 #define TKT_FLG_ANONYMOUS 0x00008000 /* #define TKT_FLG_RESERVED 0x00004000 */ /* #define TKT_FLG_RESERVED 0x00002000 */ /* #define TKT_FLG_RESERVED 0x00001000 */ /* #define TKT_FLG_RESERVED 0x00000800 */ /* #define TKT_FLG_RESERVED 0x00000400 */ /* #define TKT_FLG_RESERVED 0x00000200 */ /* #define TKT_FLG_RESERVED 0x00000100 */ /* #define TKT_FLG_RESERVED 0x00000080 */ /* #define TKT_FLG_RESERVED 0x00000040 */ /* #define TKT_FLG_RESERVED 0x00000020 */ /* #define TKT_FLG_RESERVED 0x00000010 */ /* #define TKT_FLG_RESERVED 0x00000008 */ /* #define TKT_FLG_RESERVED 0x00000004 */ /* #define TKT_FLG_RESERVED 0x00000002 */ /* #define TKT_FLG_RESERVED 0x00000001 */ /* definitions for lr_type fields. */ #define LR_TYPE_THIS_SERVER_ONLY 0x8000 #define LR_TYPE_INTERPRETATION_MASK 0x7fff /* definitions for msec direction bit for KRB_SAFE, KRB_PRIV */ #define MSEC_DIRBIT 0x8000 #define MSEC_VAL_MASK 0x7fff /* * end "fieldbits.h" */ /* * begin "proto.h" */ /** Protocol version number */ #define KRB5_PVNO 5 /* Message types */ #define KRB5_AS_REQ ((krb5_msgtype)10) /**< Initial authentication request */ #define KRB5_AS_REP ((krb5_msgtype)11) /**< Response to AS request */ #define KRB5_TGS_REQ ((krb5_msgtype)12) /**< Ticket granting server request */ #define KRB5_TGS_REP ((krb5_msgtype)13) /**< Response to TGS request */ #define KRB5_AP_REQ ((krb5_msgtype)14) /**< Auth req to application server */ #define KRB5_AP_REP ((krb5_msgtype)15) /**< Response to mutual AP request */ #define KRB5_SAFE ((krb5_msgtype)20) /**< Safe application message */ #define KRB5_PRIV ((krb5_msgtype)21) /**< Private application message */ #define KRB5_CRED ((krb5_msgtype)22) /**< Cred forwarding message */ #define KRB5_ERROR ((krb5_msgtype)30) /**< Error response */ /* LastReq types */ #define KRB5_LRQ_NONE 0 #define KRB5_LRQ_ALL_LAST_TGT 1 #define KRB5_LRQ_ONE_LAST_TGT (-1) #define KRB5_LRQ_ALL_LAST_INITIAL 2 #define KRB5_LRQ_ONE_LAST_INITIAL (-2) #define KRB5_LRQ_ALL_LAST_TGT_ISSUED 3 #define KRB5_LRQ_ONE_LAST_TGT_ISSUED (-3) #define KRB5_LRQ_ALL_LAST_RENEWAL 4 #define KRB5_LRQ_ONE_LAST_RENEWAL (-4) #define KRB5_LRQ_ALL_LAST_REQ 5 #define KRB5_LRQ_ONE_LAST_REQ (-5) #define KRB5_LRQ_ALL_PW_EXPTIME 6 #define KRB5_LRQ_ONE_PW_EXPTIME (-6) #define KRB5_LRQ_ALL_ACCT_EXPTIME 7 #define KRB5_LRQ_ONE_ACCT_EXPTIME (-7) /* PADATA types */ #define KRB5_PADATA_NONE 0 #define KRB5_PADATA_AP_REQ 1 #define KRB5_PADATA_TGS_REQ KRB5_PADATA_AP_REQ #define KRB5_PADATA_ENC_TIMESTAMP 2 #define KRB5_PADATA_PW_SALT 3 #if 0 /* Not used */ #define KRB5_PADATA_ENC_ENCKEY 4 /* Key encrypted within itself */ #endif #define KRB5_PADATA_ENC_UNIX_TIME 5 /**< timestamp encrypted in key */ #define KRB5_PADATA_ENC_SANDIA_SECURID 6 /**< SecurId passcode */ #define KRB5_PADATA_SESAME 7 /**< Sesame project */ #define KRB5_PADATA_OSF_DCE 8 /**< OSF DCE */ #define KRB5_CYBERSAFE_SECUREID 9 /**< Cybersafe */ #define KRB5_PADATA_AFS3_SALT 10 /**< Cygnus */ #define KRB5_PADATA_ETYPE_INFO 11 /**< Etype info for preauth */ #define KRB5_PADATA_SAM_CHALLENGE 12 /**< draft challenge system */ #define KRB5_PADATA_SAM_RESPONSE 13 /**< draft challenge system response */ #define KRB5_PADATA_PK_AS_REQ_OLD 14 /**< PKINIT */ #define KRB5_PADATA_PK_AS_REP_OLD 15 /**< PKINIT */ #define KRB5_PADATA_PK_AS_REQ 16 /**< PKINIT */ #define KRB5_PADATA_PK_AS_REP 17 /**< PKINIT */ #define KRB5_PADATA_ETYPE_INFO2 19 #define KRB5_PADATA_USE_SPECIFIED_KVNO 20 #define KRB5_PADATA_SVR_REFERRAL_INFO 20 /**< Windows 2000 referrals */ #define KRB5_PADATA_SAM_REDIRECT 21 #define KRB5_PADATA_GET_FROM_TYPED_DATA 22 #define KRB5_PADATA_REFERRAL 25 /**< draft referral system */ #define KRB5_PADATA_SAM_CHALLENGE_2 30 /**< draft challenge system, updated */ #define KRB5_PADATA_SAM_RESPONSE_2 31 /**< draft challenge system, updated */ #define KRB5_PADATA_PAC_REQUEST 128 /**< include Windows PAC */ #define KRB5_PADATA_FOR_USER 129 /**< username protocol transition request */ #define KRB5_PADATA_S4U_X509_USER 130 /**< certificate protocol transition request */ #define KRB5_PADATA_FX_COOKIE 133 #define KRB5_PADATA_FX_FAST 136 #define KRB5_PADATA_FX_ERROR 137 #define KRB5_PADATA_ENCRYPTED_CHALLENGE 138 #define KRB5_PADATA_OTP_CHALLENGE 141 /**< See RFC 6560 section 4.1 */ #define KRB5_PADATA_OTP_REQUEST 142 /**< See RFC 6560 section 4.2 */ #define KRB5_PADATA_OTP_PIN_CHANGE 144 /**< See RFC 6560 section 4.3 */ #define KRB5_PADATA_PKINIT_KX 147 #define KRB5_ENCPADATA_REQ_ENC_PA_REP 149 #define KRB5_SAM_USE_SAD_AS_KEY 0x80000000 #define KRB5_SAM_SEND_ENCRYPTED_SAD 0x40000000 #define KRB5_SAM_MUST_PK_ENCRYPT_SAD 0x20000000 /**< currently must be zero */ /** Transited encoding types */ #define KRB5_DOMAIN_X500_COMPRESS 1 /** alternate authentication types */ #define KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE 64 /* authorization data types. See RFC 4120 section 5.2.6 */ /** @defgroup KRB5_AUTHDATA KRB5_AUTHDATA * @{ */ #define KRB5_AUTHDATA_IF_RELEVANT 1 #define KRB5_AUTHDATA_KDC_ISSUED 4 #define KRB5_AUTHDATA_AND_OR 5 #define KRB5_AUTHDATA_MANDATORY_FOR_KDC 8 #define KRB5_AUTHDATA_INITIAL_VERIFIED_CAS 9 #define KRB5_AUTHDATA_OSF_DCE 64 #define KRB5_AUTHDATA_SESAME 65 #define KRB5_AUTHDATA_WIN2K_PAC 128 #define KRB5_AUTHDATA_ETYPE_NEGOTIATION 129 /**< RFC 4537 */ #define KRB5_AUTHDATA_SIGNTICKET 512 /**< formerly 142 in krb5 1.8 */ #define KRB5_AUTHDATA_FX_ARMOR 71 /** @} */ /* end of KRB5_AUTHDATA group */ /* password change constants */ #define KRB5_KPASSWD_SUCCESS 0 /**< Success */ #define KRB5_KPASSWD_MALFORMED 1 /**< Malformed request */ #define KRB5_KPASSWD_HARDERROR 2 /**< Server error */ #define KRB5_KPASSWD_AUTHERROR 3 /**< Authentication error */ #define KRB5_KPASSWD_SOFTERROR 4 /**< Password change rejected */ /* These are Microsoft's extensions in RFC 3244, and it looks like they'll become standardized, possibly with other additions. */ #define KRB5_KPASSWD_ACCESSDENIED 5 /**< Not authorized */ #define KRB5_KPASSWD_BAD_VERSION 6 /**< Unknown RPC version */ /** The presented credentials were not obtained using a password directly */ #define KRB5_KPASSWD_INITIAL_FLAG_NEEDED 7 /* * end "proto.h" */ /* Time set */ /** Ticket start time, end time, and renewal duration. */ typedef struct _krb5_ticket_times { krb5_timestamp authtime; /**< Time at which KDC issued the initial ticket that corresponds to this ticket */ /* XXX ? should ktime in KDC_REP == authtime in ticket? otherwise client can't get this */ krb5_timestamp starttime; /**< optional in ticket, if not present, use @a authtime */ krb5_timestamp endtime; /**< Ticket expiration time */ krb5_timestamp renew_till; /**< Latest time at which renewal of ticket can be valid */ } krb5_ticket_times; /** Structure for auth data */ typedef struct _krb5_authdata { krb5_magic magic; krb5_authdatatype ad_type; /**< ADTYPE */ unsigned int length; /**< Length of data */ krb5_octet *contents; /**< Data */ } krb5_authdata; /** Structure for transited encoding */ typedef struct _krb5_transited { krb5_magic magic; krb5_octet tr_type; /**< Transited encoding type */ krb5_data tr_contents; /**< Contents */ } krb5_transited; /** Encrypted part of ticket. */ typedef struct _krb5_enc_tkt_part { krb5_magic magic; /* to-be-encrypted portion */ krb5_flags flags; /**< flags */ krb5_keyblock *session; /**< session key: includes enctype */ krb5_principal client; /**< client name/realm */ krb5_transited transited; /**< list of transited realms */ krb5_ticket_times times; /**< auth, start, end, renew_till */ krb5_address **caddrs; /**< array of ptrs to addresses */ krb5_authdata **authorization_data; /**< auth data */ } krb5_enc_tkt_part; /** * Ticket structure. * * The C representation of the ticket message, with a pointer to the * C representation of the encrypted part. */ typedef struct _krb5_ticket { krb5_magic magic; /* cleartext portion */ krb5_principal server; /**< server name/realm */ krb5_enc_data enc_part; /**< encryption type, kvno, encrypted encoding */ krb5_enc_tkt_part *enc_part2; /**< ptr to decrypted version, if available */ } krb5_ticket; /* the unencrypted version */ /** * Ticket authenticator. * * The C representation of an unencrypted authenticator. */ typedef struct _krb5_authenticator { krb5_magic magic; krb5_principal client; /**< client name/realm */ krb5_checksum *checksum; /**< checksum, includes type, optional */ krb5_int32 cusec; /**< client usec portion */ krb5_timestamp ctime; /**< client sec portion */ krb5_keyblock *subkey; /**< true session key, optional */ krb5_ui_4 seq_number; /**< sequence #, optional */ krb5_authdata **authorization_data; /**< authoriazation data */ } krb5_authenticator; /** Ticket authentication data. */ typedef struct _krb5_tkt_authent { krb5_magic magic; krb5_ticket *ticket; krb5_authenticator *authenticator; krb5_flags ap_options; } krb5_tkt_authent; /** Credentials structure including ticket, session key, and lifetime info. */ typedef struct _krb5_creds { krb5_magic magic; krb5_principal client; /**< client's principal identifier */ krb5_principal server; /**< server's principal identifier */ krb5_keyblock keyblock; /**< session encryption key info */ krb5_ticket_times times; /**< lifetime info */ krb5_boolean is_skey; /**< true if ticket is encrypted in another ticket's skey */ krb5_flags ticket_flags; /**< flags in ticket */ krb5_address **addresses; /**< addrs in ticket */ krb5_data ticket; /**< ticket string itself */ krb5_data second_ticket; /**< second ticket, if related to ticket (via DUPLICATE-SKEY or ENC-TKT-IN-SKEY) */ krb5_authdata **authdata; /**< authorization data */ } krb5_creds; /** Last request entry */ typedef struct _krb5_last_req_entry { krb5_magic magic; krb5_int32 lr_type; /**< LR type */ krb5_timestamp value; /**< Timestamp */ } krb5_last_req_entry; /** Pre-authentication data */ typedef struct _krb5_pa_data { krb5_magic magic; krb5_preauthtype pa_type; /**< Preauthentication data type */ unsigned int length; /**< Length of data */ krb5_octet *contents; /**< Data */ } krb5_pa_data; /* Don't use this; use krb5_pa_data instead. */ typedef struct _krb5_typed_data { krb5_magic magic; krb5_int32 type; unsigned int length; krb5_octet *data; } krb5_typed_data; /** C representation of KDC-REQ protocol message, including KDC-REQ-BODY */ typedef struct _krb5_kdc_req { krb5_magic magic; krb5_msgtype msg_type; /**< KRB5_AS_REQ or KRB5_TGS_REQ */ krb5_pa_data **padata; /**< Preauthentication data */ /* real body */ krb5_flags kdc_options; /**< Requested options */ krb5_principal client; /**< Client principal and realm */ krb5_principal server; /**< Server principal and realm */ krb5_timestamp from; /**< Requested start time */ krb5_timestamp till; /**< Requested end time */ krb5_timestamp rtime; /**< Requested renewable end time */ krb5_int32 nonce; /**< Nonce to match request and response */ int nktypes; /**< Number of enctypes */ krb5_enctype *ktype; /**< Requested enctypes */ krb5_address **addresses; /**< Requested addresses (optional) */ krb5_enc_data authorization_data; /**< Encrypted authz data (optional) */ krb5_authdata **unenc_authdata; /**< Unencrypted authz data */ krb5_ticket **second_ticket; /**< Second ticket array (optional) */ } krb5_kdc_req; /** * C representation of @c EncKDCRepPart protocol message. * * This is the cleartext message that is encrypted and inserted in @c KDC-REP. */ typedef struct _krb5_enc_kdc_rep_part { krb5_magic magic; /* encrypted part: */ krb5_msgtype msg_type; /**< krb5 message type */ krb5_keyblock *session; /**< Session key */ krb5_last_req_entry **last_req; /**< Array of pointers to entries */ krb5_int32 nonce; /**< Nonce from request */ krb5_timestamp key_exp; /**< Expiration date */ krb5_flags flags; /**< Ticket flags */ krb5_ticket_times times; /**< Lifetime info */ krb5_principal server; /**< Server's principal identifier */ krb5_address **caddrs; /**< Array of ptrs to addrs, optional */ krb5_pa_data **enc_padata; /**< Encrypted preauthentication data */ } krb5_enc_kdc_rep_part; /** Representation of the @c KDC-REP protocol message. */ typedef struct _krb5_kdc_rep { krb5_magic magic; /* cleartext part: */ krb5_msgtype msg_type; /**< KRB5_AS_REP or KRB5_KDC_REP */ krb5_pa_data **padata; /**< Preauthentication data from KDC */ krb5_principal client; /**< Client principal and realm */ krb5_ticket *ticket; /**< Ticket */ krb5_enc_data enc_part; /**< Encrypted part of reply */ krb5_enc_kdc_rep_part *enc_part2; /**< Unencrypted version, if available */ } krb5_kdc_rep; /** Error message structure */ typedef struct _krb5_error { krb5_magic magic; /* some of these may be meaningless in certain contexts */ krb5_timestamp ctime; /**< Client sec portion; optional */ krb5_int32 cusec; /**< Client usec portion; optional */ krb5_int32 susec; /**< Server usec portion */ krb5_timestamp stime; /**< Server sec portion */ krb5_ui_4 error; /**< Error code (protocol error #'s) */ krb5_principal client; /**< Client principal and realm */ krb5_principal server; /**< Server principal and realm */ krb5_data text; /**< Descriptive text */ krb5_data e_data; /**< Additional error-describing data */ } krb5_error; /** Authentication header. */ typedef struct _krb5_ap_req { krb5_magic magic; krb5_flags ap_options; /**< Requested options */ krb5_ticket *ticket; /**< Ticket */ krb5_enc_data authenticator; /**< Encrypted authenticator */ } krb5_ap_req; /** * C representaton of AP-REP message. * * The server's response to a client's request for mutual authentication. */ typedef struct _krb5_ap_rep { krb5_magic magic; krb5_enc_data enc_part; /**< Ciphertext of ApRepEncPart */ } krb5_ap_rep; /** Cleartext that is encrypted and put into @c _krb5_ap_rep. */ typedef struct _krb5_ap_rep_enc_part { krb5_magic magic; krb5_timestamp ctime; /**< Client time, seconds portion */ krb5_int32 cusec; /**< Client time, microseconds portion */ krb5_keyblock *subkey; /**< Subkey (optional) */ krb5_ui_4 seq_number; /**< Sequence number */ } krb5_ap_rep_enc_part; /* Unused */ typedef struct _krb5_response { krb5_magic magic; krb5_octet message_type; krb5_data response; krb5_int32 expected_nonce; krb5_timestamp request_time; } krb5_response; /** Credentials information inserted into @c EncKrbCredPart. */ typedef struct _krb5_cred_info { krb5_magic magic; krb5_keyblock *session; /**< Session key used to encrypt ticket */ krb5_principal client; /**< Client principal and realm */ krb5_principal server; /**< Server principal and realm */ krb5_flags flags; /**< Ticket flags */ krb5_ticket_times times; /**< Auth, start, end, renew_till */ krb5_address **caddrs; /**< Array of pointers to addrs (optional) */ } krb5_cred_info; /** Cleartext credentials information. */ typedef struct _krb5_cred_enc_part { krb5_magic magic; krb5_int32 nonce; /**< Nonce (optional) */ krb5_timestamp timestamp; /**< Generation time, seconds portion */ krb5_int32 usec; /**< Generation time, microseconds portion */ krb5_address *s_address; /**< Sender address (optional) */ krb5_address *r_address; /**< Recipient address (optional) */ krb5_cred_info **ticket_info; } krb5_cred_enc_part; /** Credentials data structure.*/ typedef struct _krb5_cred { krb5_magic magic; krb5_ticket **tickets; /**< Tickets */ krb5_enc_data enc_part; /**< Encrypted part */ krb5_cred_enc_part *enc_part2; /**< Unencrypted version, if available */ } krb5_cred; /* Unused, but here for API compatibility. */ typedef struct _passwd_phrase_element { krb5_magic magic; krb5_data *passwd; krb5_data *phrase; } passwd_phrase_element; /* Unused, but here for API compatibility. */ typedef struct _krb5_pwd_data { krb5_magic magic; int sequence_count; passwd_phrase_element **element; } krb5_pwd_data; /* Unused, but here for API compatibility. */ typedef struct _krb5_pa_svr_referral_data { /** Referred name, only realm is required */ krb5_principal principal; } krb5_pa_svr_referral_data; /* Unused, but here for API compatibility. */ typedef struct _krb5_pa_server_referral_data { krb5_data *referred_realm; krb5_principal true_principal_name; krb5_principal requested_principal_name; krb5_timestamp referral_valid_until; krb5_checksum rep_cksum; } krb5_pa_server_referral_data; typedef struct _krb5_pa_pac_req { /** TRUE if a PAC should be included in TGS-REP */ krb5_boolean include_pac; } krb5_pa_pac_req; /* * begin "safepriv.h" */ /** @defgroup KRB5_AUTH_CONTEXT KRB5_AUTH_CONTEXT * @{ */ /** Prevent replays with timestamps and replay cache. */ #define KRB5_AUTH_CONTEXT_DO_TIME 0x00000001 /** Save timestamps for application. */ #define KRB5_AUTH_CONTEXT_RET_TIME 0x00000002 /** Prevent replays with sequence numbers. */ #define KRB5_AUTH_CONTEXT_DO_SEQUENCE 0x00000004 /** Save sequence numbers for application. */ #define KRB5_AUTH_CONTEXT_RET_SEQUENCE 0x00000008 #define KRB5_AUTH_CONTEXT_PERMIT_ALL 0x00000010 #define KRB5_AUTH_CONTEXT_USE_SUBKEY 0x00000020 /** @} */ /* end of KRB5_AUTH_CONTEXT group */ /** * Replay data. * * Sequence number and timestamp information output by krb5_rd_priv() and * krb5_rd_safe(). */ typedef struct krb5_replay_data { krb5_timestamp timestamp; /**< Timestamp, seconds portion */ krb5_int32 usec; /**< Timestamp, microseconds portion */ krb5_ui_4 seq; /**< Sequence number */ } krb5_replay_data; /* Flags for krb5_auth_con_genaddrs(). */ /** Generate the local network address. */ #define KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR 0x00000001 /** Generate the remote network address. */ #define KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR 0x00000002 /** Generate the local network address and the local port. */ #define KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR 0x00000004 /** Generate the remote network address and the remote port. */ #define KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR 0x00000008 /** Type of function used as a callback to generate checksum data for mk_req */ typedef krb5_error_code (KRB5_CALLCONV * krb5_mk_req_checksum_func)(krb5_context, krb5_auth_context, void *, krb5_data **); /* * end "safepriv.h" */ /* * begin "ccache.h" */ /** Cursor for sequential lookup */ typedef krb5_pointer krb5_cc_cursor; struct _krb5_ccache; typedef struct _krb5_ccache *krb5_ccache; struct _krb5_cc_ops; typedef struct _krb5_cc_ops krb5_cc_ops; struct _krb5_cccol_cursor; /** Cursor for iterating over all ccaches */ typedef struct _krb5_cccol_cursor *krb5_cccol_cursor; /* Flags for krb5_cc_retrieve_cred. */ /** The requested lifetime must be at least as great as the time specified. */ #define KRB5_TC_MATCH_TIMES 0x00000001 /** The is_skey field must match exactly. */ #define KRB5_TC_MATCH_IS_SKEY 0x00000002 /** All the flags set in the match credentials must be set. */ #define KRB5_TC_MATCH_FLAGS 0x00000004 /** All the time fields must match exactly. */ #define KRB5_TC_MATCH_TIMES_EXACT 0x00000008 /** All the flags must match exactly. */ #define KRB5_TC_MATCH_FLAGS_EXACT 0x00000010 /** The authorization data must match. */ #define KRB5_TC_MATCH_AUTHDATA 0x00000020 /** Only the name portion of the principal name must match. */ #define KRB5_TC_MATCH_SRV_NAMEONLY 0x00000040 /** The second ticket must match. */ #define KRB5_TC_MATCH_2ND_TKT 0x00000080 /** The encryption key type must match. */ #define KRB5_TC_MATCH_KTYPE 0x00000100 /** The supported key types must match. */ #define KRB5_TC_SUPPORTED_KTYPES 0x00000200 /* Flags for krb5_cc_set_flags and similar. */ /** Open and close the file for each cache operation. */ #define KRB5_TC_OPENCLOSE 0x00000001 #define KRB5_TC_NOTICKET 0x00000002 /** * Retrieve the name, but not type of a credential cache. * * @param [in] context Library context * @param [in] cache Credential cache handle * * @warning Returns the name of the credential cache. The result is an alias * into @a cache and should not be freed or modified by the caller. This name * does not include the cache type, so should not be used as input to * krb5_cc_resolve(). * * @return * On success - the name of the credential cache. */ const char * KRB5_CALLCONV krb5_cc_get_name(krb5_context context, krb5_ccache cache); /** * Retrieve the full name of a credential cache. * * @param [in] context Library context * @param [in] cache Credential cache handle * @param [out] fullname_out Full name of cache * * Use krb5_free_string() to free @a fullname_out when it is no longer needed. * * @version First introduced in 1.10 */ krb5_error_code KRB5_CALLCONV krb5_cc_get_full_name(krb5_context context, krb5_ccache cache, char **fullname_out); #if KRB5_DEPRECATED krb5_error_code KRB5_CALLCONV krb5_cc_gen_new(krb5_context context, krb5_ccache *cache); #endif /* KRB5_DEPRECATED */ /** * Initialize a credential cache. * * @param [in] context Library context * @param [in] cache Credential cache handle * @param [in] principal Default principal name * * Destroy any existing contents of @a cache and initialize it for the default * principal @a principal. * * @retval * 0 Success * @return * System errors; Permission errors; Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_initialize(krb5_context context, krb5_ccache cache, krb5_principal principal); /** * Destroy a credential cache. * * @param [in] context Library context * @param [in] cache Credential cache handle * * This function destroys any existing contents of @a cache and closes the * handle to it. * * @retval * 0 Success * @return * Permission errors */ krb5_error_code KRB5_CALLCONV krb5_cc_destroy(krb5_context context, krb5_ccache cache); /** * Close a credential cache handle. * * @param [in] context Library context * @param [in] cache Credential cache handle * * This function closes a credential cache handle @a cache without affecting * the contents of the cache. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_close(krb5_context context, krb5_ccache cache); /** * Store credentials in a credential cache. * * @param [in] context Library context * @param [in,out] cache Credential cache handle * @param [in] creds Credentials to be stored in cache * * This function stores @a creds into @a cache. If @a creds->server and the * server in the decoded ticket @a creds->ticket differ, the credentials will * be stored under both server principal names. * * @retval * 0 Success * @return Permission errors; storage failure errors; Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_store_cred(krb5_context context, krb5_ccache cache, krb5_creds *creds); /** * Retrieve a specified credentials from a credential cache. * * @param [in] context Library context * @param [in] cache Credential cache handle * @param [in] flags Flags bit mask * @param [in] mcreds Credentials to match * @param [out] creds Credentials matching the requested value * * This function searches a credential cache for credentials matching @a mcreds * and returns it if found. * * Valid values for @a flags are: * * @li #KRB5_TC_MATCH_TIMES The requested lifetime must be at least as * great as in @a mcreds . * @li #KRB5_TC_MATCH_IS_SKEY The @a is_skey field much match exactly. * @li #KRB5_TC_MATCH_FLAGS Flags set in @a mcreds must be set. * @li #KRB5_TC_MATCH_TIMES_EXACT The requested lifetime must match exactly. * @li #KRB5_TC_MATCH_FLAGS_EXACT Flags must match exactly. * @li #KRB5_TC_MATCH_AUTHDATA The authorization data must match. * @li #KRB5_TC_MATCH_SRV_NAMEONLY Only the name portion of the principal * name must match, not the realm. * @li #KRB5_TC_MATCH_2ND_TKT The second tickets must match. * @li #KRB5_TC_MATCH_KTYPE The encryption key types must match. * @li #KRB5_TC_SUPPORTED_KTYPES Check all matching entries that have any * supported encryption type and return the * one with the encryption type listed earliest. * * Use krb5_free_cred_contents() to free @a creds when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_retrieve_cred(krb5_context context, krb5_ccache cache, krb5_flags flags, krb5_creds *mcreds, krb5_creds *creds); /** * Get the default principal of a credential cache. * * @param [in] context Library context * @param [in] cache Credential cache handle * @param [out] principal Primary principal * * Returns the default client principal of a credential cache as set by * krb5_cc_initialize(). * * Use krb5_free_principal() to free @a principal when it is no longer needed. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_get_principal(krb5_context context, krb5_ccache cache, krb5_principal *principal); /** * Prepare to sequentially read every credential in a credential cache. * * @param [in] context Library context * @param [in] cache Credential cache handle * @param [out] cursor Cursor * * krb5_cc_end_seq_get() must be called to complete the retrieve operation. * * @note If @a cache is modified between the time of the call to this function * and the time of the final krb5_cc_end_seq_get(), the results are undefined. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_start_seq_get(krb5_context context, krb5_ccache cache, krb5_cc_cursor *cursor); /** * Retrieve the next entry from the credential cache. * * @param [in] context Library context * @param [in] cache Credential cache handle * @param [in,out] cursor Cursor * @param [out] creds Next credential cache entry * * This function fills in @a creds with the next entry in @a cache and advances * @a cursor. * * Use krb5_free_cred_contents() to free @a creds when it is no longer needed. * * @sa krb5_cc_start_seq_get(), krb5_end_seq_get() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_next_cred(krb5_context context, krb5_ccache cache, krb5_cc_cursor *cursor, krb5_creds *creds); /** * Finish a series of sequential processing credential cache entries. * * @param [in] context Library context * @param [in] cache Credential cache handle * @param [in,out] cursor Cursor * * This function finishes processing credential cache entries and invalidates * @a cursor. * * @sa krb5_cc_start_seq_get(), krb5_cc_next_cred() * * @retval 0 (always) */ krb5_error_code KRB5_CALLCONV krb5_cc_end_seq_get(krb5_context context, krb5_ccache cache, krb5_cc_cursor *cursor); /** * Remove credentials from a credential cache. * * @param [in] context Library context * @param [in] cache Credential cache handle * @param [in] flags Bitwise-ORed search flags * @param [in] creds Credentials to be matched * * @warning This function is not implemented for some cache types. * * This function accepts the same flag values as krb5_cc_retrieve_cred(). * * @retval KRB5_CC_NOSUPP Not implemented for this cache type * @return No matches found; Data cannot be deleted; Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_remove_cred(krb5_context context, krb5_ccache cache, krb5_flags flags, krb5_creds *creds); /** * Set options flags on a credential cache. * * @param [in] context Library context * @param [in,out] cache Credential cache handle * @param [in] flags Flag bit mask * * This function resets @a cache flags to @a flags. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_set_flags(krb5_context context, krb5_ccache cache, krb5_flags flags); /** * Retrieve flags from a credential cache structure. * * @param [in] context Library context * @param [in] cache Credential cache handle * @param [out] flags Flag bit mask * * @warning For memory credential cache always returns a flag mask of 0. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_get_flags(krb5_context context, krb5_ccache cache, krb5_flags *flags); /** * Retrieve the type of a credential cache. * * @param [in] context Library context * @param [in] cache Credential cache handle * * @return The type of a credential cache as an alias that must not be modified * or freed by the caller. */ const char * KRB5_CALLCONV krb5_cc_get_type(krb5_context context, krb5_ccache cache); /** * Move a credential cache. * * @param [in] context Library context * @param [in] src The credential cache to move the content from * @param [in] dst The credential cache to move the content to * * This function reinitializes @a dst and populates it with the credentials and * default principal of @a src; then, if successful, destroys @a src. * * @retval * 0 Success; @a src is closed. * @return * Kerberos error codes; @a src is still allocated. */ krb5_error_code KRB5_CALLCONV krb5_cc_move(krb5_context context, krb5_ccache src, krb5_ccache dst); /** * Return a timestamp of the last modification to a credential cache. * * @param [in] context Library context * @param [in] ccache Credential cache handle * @param [out] change_time The last change time of @a ccache * * If an error occurs, @a change_time is set to 0. */ krb5_error_code KRB5_CALLCONV krb5_cc_last_change_time(krb5_context context, krb5_ccache ccache, krb5_timestamp *change_time); /** * Lock a credential cache. * * @param [in] context Library context * @param [in] ccache Credential cache handle * * Use krb5_cc_unlock() to unlock the lock. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_lock(krb5_context context, krb5_ccache ccache); /** * Unlock a credential cache. * * @param [in] context Library context * @param [in] ccache Credential cache handle * * This function unlocks the @a ccache locked by krb5_cc_lock(). * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_unlock(krb5_context context, krb5_ccache ccache); /** * Prepare to iterate over the collection of known credential caches. * * @param [in] context Library context * @param [in,out] cursor Cursor * * Get a new cache iteration @a cursor that will iterate over all known * credential caches independent of type. * * Use krb5_cccol_cursor_free() to release @a cursor when it is no longer * needed. * * @sa krb5_cccol_cursor_next() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cccol_cursor_new(krb5_context context, krb5_cccol_cursor *cursor); /** * Get the next credential cache in the collection. * * @param [in] context Library context * @param [in,out] cursor Cursor * @param [out] ccache Credential cache handle * * @note When all caches are iterated over and the end of the list is reached, * @a ccache is set to NULL. * * Use krb5_cc_close() to close @a ccache when it is no longer needed. * * @sa krb5_cccol_cursor_new(), krb5_cccol_cursor_free() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cccol_cursor_next(krb5_context context, krb5_cccol_cursor cursor, krb5_ccache *ccache); /** * Free a credential cache collection cursor. * * @param [in] context Library context * @param [in] cursor Cursor * * @sa krb5_cccol_cursor_new(), krb5_cccol_cursor_next() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cccol_cursor_free(krb5_context context, krb5_cccol_cursor *cursor); /** * Check if the credential cache collection contains any credentials. * * @param [in] context Library context * * @version First introduced in 1.11 * * @retval 0 Credentials are available in the collection * @retval KRB5_CC_NOTFOUND The collection contains no credentials */ krb5_error_code KRB5_CALLCONV krb5_cccol_have_content(krb5_context context); /** * Return a timestamp of the last modification of any known credential cache. * * @param [in] context Library context * @param [out] change_time Last modification timestamp * * This function returns the most recent modification time of any known * credential cache, ignoring any caches which cannot supply a last * modification time. * * If there are no known credential caches, @a change_time is set to 0. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cccol_last_change_time(krb5_context context, krb5_timestamp *change_time); /** * Acquire a global lock for credential caches. * * @param [in] context Library context * * This function locks the global credential cache collection, ensuring * that no ccaches are added to or removed from it until the collection * lock is released. * * Use krb5_cccol_unlock() to unlock the lock. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cccol_lock(krb5_context context); /** * Release a global lock for credential caches. * * @param [in] context Library context * * This function unlocks the lock from krb5_cccol_lock(). * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cccol_unlock(krb5_context context); /** * Create a new credential cache of the specified type with a unique name. * * @param [in] context Library context * @param [in] type Credential cache type name * @param [in] hint Unused * @param [out] id Credential cache handle * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_new_unique(krb5_context context, const char *type, const char *hint, krb5_ccache *id); /* * end "ccache.h" */ /* * begin "rcache.h" */ struct krb5_rc_st; typedef struct krb5_rc_st *krb5_rcache; /* * end "rcache.h" */ /* * begin "keytab.h" */ /* XXX */ #define MAX_KEYTAB_NAME_LEN 1100 /**< Long enough for MAXPATHLEN + some extra */ typedef krb5_pointer krb5_kt_cursor; /** A key table entry. */ typedef struct krb5_keytab_entry_st { krb5_magic magic; krb5_principal principal; /**< Principal of this key */ krb5_timestamp timestamp; /**< Time entry written to keytable */ krb5_kvno vno; /**< Key version number */ krb5_keyblock key; /**< The secret key */ } krb5_keytab_entry; struct _krb5_kt; typedef struct _krb5_kt *krb5_keytab; /** * Return the type of a key table. * * @param [in] context Library context * @param [in] keytab Key table handle * * @return The type of a key table as an alias that must not be modified or * freed by the caller. */ const char * KRB5_CALLCONV krb5_kt_get_type(krb5_context context, krb5_keytab keytab); /** * Get a key table name. * * @param [in] context Library context * @param [in] keytab Key table handle * @param [out] name Key table name * @param [in] namelen Maximum length to fill in name * * Fill @a name with the name of @a keytab including the type and delimiter. * * @sa MAX_KEYTAB_NAME_LEN * * @retval * 0 Success * @retval * KRB5_KT_NAME_TOOLONG Key table name does not fit in @a namelen bytes * * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_kt_get_name(krb5_context context, krb5_keytab keytab, char *name, unsigned int namelen); /** * Close a key table handle. * * @param [in] context Library context * @param [in] keytab Key table handle * * @retval 0 */ krb5_error_code KRB5_CALLCONV krb5_kt_close(krb5_context context, krb5_keytab keytab); /** * Get an entry from a key table. * * @param [in] context Library context * @param [in] keytab Key table handle * @param [in] principal Principal name * @param [in] vno Key version number (0 for highest available) * @param [in] enctype Encryption type (0 zero for any enctype) * @param [out] entry Returned entry from key table * * Retrieve an entry from a key table which matches the @a keytab, @a * principal, @a vno, and @a enctype. If @a vno is zero, retrieve the * highest-numbered kvno matching the other fields. If @a enctype is 0, match * any enctype. * * Use krb5_free_keytab_entry_contents() to free @a entry when it is no longer * needed. * * @note If @a vno is zero, the function retrieves the highest-numbered-kvno * entry that matches the specified principal. * * @retval * 0 Success * @retval * Kerberos error codes on failure */ krb5_error_code KRB5_CALLCONV krb5_kt_get_entry(krb5_context context, krb5_keytab keytab, krb5_const_principal principal, krb5_kvno vno, krb5_enctype enctype, krb5_keytab_entry *entry); /** * Start a sequential retrieval of key table entries. * * @param [in] context Library context * @param [in] keytab Key table handle * @param [out] cursor Cursor * * Prepare to read sequentially every key in the specified key table. Use * krb5_kt_end_seq_get() to release the cursor when it is no longer needed. * * @sa krb5_kt_next_entry(), krb5_kt_end_seq_get() * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_kt_start_seq_get(krb5_context context, krb5_keytab keytab, krb5_kt_cursor *cursor); /** * Retrieve the next entry from the key table. * * @param [in] context Library context * @param [in] keytab Key table handle * @param [out] entry Returned key table entry * @param [in,out] cursor Key table cursor * * Return the next sequential entry in @a keytab and advance @a cursor. * * @sa krb5_kt_start_seq_get(), krb5_kt_end_seq_get() * * @retval * 0 Success * @retval * KRB5_KT_END - if the last entry was reached * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_kt_next_entry(krb5_context context, krb5_keytab keytab, krb5_keytab_entry *entry, krb5_kt_cursor *cursor); /** * Release a keytab cursor. * * @param [in] context Library context * @param [in] keytab Key table handle * @param [out] cursor Cursor * * This function should be called to release the cursor created by * krb5_kt_start_seq_get(). * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_kt_end_seq_get(krb5_context context, krb5_keytab keytab, krb5_kt_cursor *cursor); /** * Check if a keytab exists and contains entries. * * @param [in] context Library context * @param [in] keytab Key table handle * * @version First introduced in 1.11 * * @retval 0 Keytab exists and contains entries * @retval KRB5_KT_NOTFOUND Keytab does not contain entries */ krb5_error_code KRB5_CALLCONV krb5_kt_have_content(krb5_context context, krb5_keytab keytab); /* * end "keytab.h" */ /* * begin "func-proto.h" */ #define KRB5_INIT_CONTEXT_SECURE 0x1 /**< Use secure context configuration */ #define KRB5_INIT_CONTEXT_KDC 0x2 /**< Use KDC configuration if available */ /** * Create a krb5 library context. * * @param [out] context Library context * * The @a context must be released by calling krb5_free_context() when * it is no longer needed. * * @warning Any program or module that needs the Kerberos code to not trust the * environment must use krb5_init_secure_context(), or clean out the * environment. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_init_context(krb5_context *context); /** * Create a krb5 library context using only configuration files. * * @param [out] context Library context * * Create a context structure, using only system configuration files. All * information passed through the environment variables is ignored. * * The @a context must be released by calling krb5_free_context() when * it is no longer needed. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_init_secure_context(krb5_context *context); /** * Create a krb5 library context using a specified profile. * * @param [in] profile Profile object (NULL to create default profile) * @param [in] flags Context initialization flags * @param [out] context Library context * * Create a context structure, optionally using a specified profile and * initialization flags. If @a profile is NULL, the default profile will be * created from config files. If @a profile is non-null, a copy of it will be * made for the new context; the caller should still clean up its copy. Valid * flag values are: * * @li #KRB5_INIT_CONTEXT_SECURE Ignore environment variables * @li #KRB5_INIT_CONTEXT_KDC Use KDC configuration if creating profile */ krb5_error_code KRB5_CALLCONV krb5_init_context_profile(struct _profile_t *profile, krb5_flags flags, krb5_context *context); /** * Free a krb5 library context. * * @param [in] context Library context * * This function frees a @a context that was created by krb5_init_context() * or krb5_init_secure_context(). */ void KRB5_CALLCONV krb5_free_context(krb5_context context); /** * Copy a krb5_context structure. * * @param [in] ctx Library context * @param [out] nctx_out New context structure * * The newly created context must be released by calling krb5_free_context() * when it is no longer needed. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_copy_context(krb5_context ctx, krb5_context *nctx_out); /** * Set default TGS encryption types in a krb5_context structure. * * @param [in,out] context Library context * @param [in] etypes Encryption type(s) to set * * This function sets the default enctype list for TGS requests * made using @a context to @a etypes. * * @note This overrides the default list (from config file or built-in). * * @retval * 0 Success * @retval * KRB5_PROG_ETYPE_NOSUPP Program lacks support for encryption type * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_set_default_tgs_enctypes(krb5_context context, const krb5_enctype *etypes); /** * Return a list of encryption types permitted for session keys. * * @param [in] context Library context * @param [out] ktypes Zero-terminated list of encryption types * * This function returns the list of encryption types permitted for session * keys within @a context, as determined by configuration or by a previous call * to krb5_set_default_tgs_enctypes(). * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_get_permitted_enctypes(krb5_context context, krb5_enctype **ktypes); /** * Test whether the Kerberos library was built with multithread support. * * @retval * TRUE if the library is threadsafe; FALSE otherwise */ krb5_boolean KRB5_CALLCONV krb5_is_thread_safe(void); /* libkrb.spec */ /** * Decrypt a ticket using the specified key table. * * @param [in] context Library context * @param [in] kt Key table * @param [in,out] ticket Ticket to be decrypted * * This function takes a @a ticket as input and decrypts it using * key data from @a kt. The result is placed into @a ticket->enc_part2. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_server_decrypt_ticket_keytab(krb5_context context, const krb5_keytab kt, krb5_ticket *ticket); /** * Free an array of credential structures. * * @param [in] context Library context * @param [in] tgts Null-terminated array of credentials to free * * @note The last entry in the array @a tgts must be a NULL pointer. */ void KRB5_CALLCONV krb5_free_tgt_creds(krb5_context context, krb5_creds **tgts); /** @defgroup KRB5_GC KRB5_GC * @{ */ #define KRB5_GC_USER_USER 1 /**< Want user-user ticket */ #define KRB5_GC_CACHED 2 /**< Want cached ticket only */ #define KRB5_GC_CANONICALIZE 4 /**< Set canonicalize KDC option */ #define KRB5_GC_NO_STORE 8 /**< Do not store in credential cache */ #define KRB5_GC_FORWARDABLE 16 /**< Acquire forwardable tickets */ #define KRB5_GC_NO_TRANSIT_CHECK 32 /**< Disable transited check */ #define KRB5_GC_CONSTRAINED_DELEGATION 64 /**< Constrained delegation */ /** @} */ /* end of KRB5_GC group */ /** * Get an additional ticket. * * @param [in] context Library context * @param [in] options Options * @param [in,out] ccache Credential cache handle * @param [in] in_creds Input credentials * @param [out] out_creds Output updated credentials * * Use @a ccache or a TGS exchange to get a service ticket matching @a * in_creds. * * Valid values for @a options are: * @li #KRB5_GC_CACHED Search only credential cache for the ticket * @li #KRB5_GC_USER_USER Return a user to user authentication ticket * * @a in_creds must be non-null. @a in_creds->client and @a in_creds->server * must be filled in to specify the client and the server respectively. If any * authorization data needs to be requested for the service ticket (such as * restrictions on how the ticket can be used), specify it in @a * in_creds->authdata; otherwise set @a in_creds->authdata to NULL. The * session key type is specified in @a in_creds->keyblock.enctype, if it is * nonzero. * * The expiration date is specified in @a in_creds->times.endtime. * The KDC may return tickets with an earlier expiration date. * If @a in_creds->times.endtime is set to 0, the latest possible * expiration date will be requested. * * Any returned ticket and intermediate ticket-granting tickets are stored * in @a ccache. * * Use krb5_free_creds() to free @a out_creds when it is no longer needed. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_get_credentials(krb5_context context, krb5_flags options, krb5_ccache ccache, krb5_creds *in_creds, krb5_creds **out_creds); /** @deprecated Replaced by krb5_get_validated_creds. */ krb5_error_code KRB5_CALLCONV krb5_get_credentials_validate(krb5_context context, krb5_flags options, krb5_ccache ccache, krb5_creds *in_creds, krb5_creds **out_creds); /** @deprecated Replaced by krb5_get_renewed_creds. */ krb5_error_code KRB5_CALLCONV krb5_get_credentials_renew(krb5_context context, krb5_flags options, krb5_ccache ccache, krb5_creds *in_creds, krb5_creds **out_creds); /** * Create a @c KRB_AP_REQ message. * * @param [in] context Library context * @param [in,out] auth_context Pre-existing or newly created auth context * @param [in] ap_req_options @ref AP_OPTS options * @param [in] service Service name, or NULL to use @c "host" * @param [in] hostname Host name, or NULL to use local hostname * @param [in] in_data Application data to be checksummed in the * authenticator, or NULL * @param [in] ccache Credential cache used to obtain credentials * for the desired service. * @param [out] outbuf @c AP-REQ message * * This function is similar to krb5_mk_req_extended() except that it uses a * given @a hostname, @a service, and @a ccache to construct a service * principal name and obtain credentials. * * Use krb5_free_data_contents() to free @a outbuf when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_mk_req(krb5_context context, krb5_auth_context *auth_context, krb5_flags ap_req_options, char *service, char *hostname, krb5_data *in_data, krb5_ccache ccache, krb5_data *outbuf); /** * Create a @c KRB_AP_REQ message using supplied credentials. * * @param [in] context Library context * @param [in,out] auth_context Pre-existing or newly created auth context * @param [in] ap_req_options @ref AP_OPTS options * @param [in] in_data Application data to be checksummed in the * authenticator, or NULL * @param [in] in_creds Credentials for the service with valid ticket * and key * @param [out] outbuf @c AP-REQ message * * Valid @a ap_req_options are: * @li #AP_OPTS_USE_SESSION_KEY - Use the session key when creating the * request used for user to user * authentication. * @li #AP_OPTS_MUTUAL_REQUIRED - Request a mutual authentication packet from * the reciever. * @li #AP_OPTS_USE_SUBKEY - Generate a subsession key from the current * session key obtained from the credentials. * * This function creates a KRB_AP_REQ message using supplied credentials @a * in_creds. @a auth_context may point to an existing auth context or to NULL, * in which case a new one will be created. If @a in_data is non-null, a * checksum of it will be included in the authenticator contained in the * KRB_AP_REQ message. Use krb5_free_data_contents() to free @a outbuf when it * is no longer needed. * * On successful return, the authenticator is stored in @a auth_context with * the @a client and @a checksum fields nulled out. (This is to prevent * pointer-sharing problems; the caller should not need these fields anyway, * since the caller supplied them.) * * @sa krb5_mk_req() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_mk_req_extended(krb5_context context, krb5_auth_context *auth_context, krb5_flags ap_req_options, krb5_data *in_data, krb5_creds *in_creds, krb5_data *outbuf); /** * Format and encrypt a @c KRB_AP_REP message. * * @param [in] context Library context * @param [in,out] auth_context Authentication context * @param [out] outbuf @c AP-REP message * * This function fills in @a outbuf with an AP-REP message using information * from @a auth_context. * * If the flags in @a auth_context indicate that a sequence number should be * used (either #KRB5_AUTH_CONTEXT_DO_SEQUENCE or * #KRB5_AUTH_CONTEXT_RET_SEQUENCE) and the local sequence number in @a * auth_context is 0, a new number will be generated with * krb5_generate_seq_number(). * * Use krb5_free_data_contents() to free @a outbuf when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_mk_rep(krb5_context context, krb5_auth_context auth_context, krb5_data *outbuf); /** * Format and encrypt a @c KRB_AP_REP message for DCE RPC. * * @param [in] context Library context * @param [in,out] auth_context Authentication context * @param [out] outbuf @c AP-REP message * * Use krb5_free_data_contents() to free @a outbuf when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_mk_rep_dce(krb5_context context, krb5_auth_context auth_context, krb5_data *outbuf); /** * Parse and decrypt a @c KRB_AP_REP message. * * @param [in] context Library context * @param [in,out] auth_context Authentication context * @param [in] inbuf AP-REP message * @param [out] repl Decrypted reply message * * This function parses, decrypts and verifies a message from @a inbuf and * fills in @a repl with a pointer to allocated memory containing the fields * from the encrypted response. * * Use krb5_free_ap_rep_enc_part() to free @a repl when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_rd_rep(krb5_context context, krb5_auth_context auth_context, const krb5_data *inbuf, krb5_ap_rep_enc_part **repl); /** * Parse and decrypt a @c KRB_AP_REP message for DCE RPC. * * @param [in] context Library context * @param [in,out] auth_context Authentication context * @param [in] inbuf AP-REP message * @param [out] nonce Sequence number from the decrypted reply * * This function parses, decrypts and verifies a message from @a inbuf and * fills in @a nonce with a decrypted reply sequence number. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_rd_rep_dce(krb5_context context, krb5_auth_context auth_context, const krb5_data *inbuf, krb5_ui_4 *nonce); /** * Format and encode a @c KRB_ERROR message. * * @param [in] context Library context * @param [in] dec_err Error structure to be encoded * @param [out] enc_err Encoded error structure * * This function creates a @c KRB_ERROR message in @a enc_err. Use * krb5_free_data_contents() to free @a enc_err when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_mk_error(krb5_context context, const krb5_error *dec_err, krb5_data *enc_err); /** * Decode a @c KRB-ERROR message. * * @param [in] context Library context * @param [in] enc_errbuf Encoded error message * @param [out] dec_error Decoded error message * * This function processes @c KRB-ERROR message @a enc_errbuf and returns * an allocated structure @a dec_error containing the error message. * Use krb5_free_error() to free @a dec_error when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_rd_error(krb5_context context, const krb5_data *enc_errbuf, krb5_error **dec_error); /** * Process @c KRB-SAFE message. * * @param [in] context Library context * @param [in,out] auth_context Authentication structure * @param [in] inbuf @c KRB-SAFE message to be parsed * @param [out] outbuf Data parsed from @c KRB-SAFE message * @param [out] outdata Replay data. Specify NULL if not needed * * This function parses a @c KRB-SAFE message, verifies its integrity, and * stores its data into @a outbuf. * * @note The @a outdata argument is required if #KRB5_AUTH_CONTEXT_RET_TIME or * #KRB5_AUTH_CONTEXT_RET_SEQUENCE flag is set in the @a auth_context. * * @note @a auth_context must have a remote address set. This address will be * used to verify the sender address in the KRB-SAFE message. If @a * auth_context has a local address set, it will be used to verify the * receiver address in the KRB-SAFE message if the message contains one. * Both addresses must use type @c ADDRTYPE_ADDRPORT. * * If the #KRB5_AUTH_CONTEXT_DO_SEQUENCE flag is set in @a auth_context, the * sequence number of the KRB-SAFE message is checked against the remote * sequence number field of @a auth_context. Otherwise, the sequence number is * not used. * * If the #KRB5_AUTH_CONTEXT_DO_TIME flag is set in @a auth_context, * then two additional checks are performed: * @li The timestamp in the message must be within the permitted clock skew * (which is usually five minutes). * @li The message must not be a replayed message field in @a auth_context. * * Use krb5_free_data_contents() to free @a outbuf when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_rd_safe(krb5_context context, krb5_auth_context auth_context, const krb5_data *inbuf, krb5_data *outbuf, krb5_replay_data *outdata); /** * Process a @c KRB-PRIV message. * * @param [in] context Library context * @param [in,out] auth_context Authentication structure * @param [in] inbuf @c KRB-PRIV message to be parsed * @param [out] outbuf Data parsed from @c KRB-PRIV message * @param [out] outdata Replay data. Specify NULL if not needed * * This function parses a @c KRB-PRIV message, verifies its integrity, and * stores its unencrypted data into @a outbuf. * * @note If the #KRB5_AUTH_CONTEXT_RET_TIME or * #KRB5_AUTH_CONTEXT_RET_SEQUENCE flag is set in @a auth_context, @a * outdata is required. * * @note @a auth_context must have a remote address set. This address will be * used to verify the sender address in the KRB-PRIV message. If @a * auth_context has a local address set, it will be used to verify the * receiver address in the KRB-PRIV message if the message contains one. * Both addresses must use type @c ADDRTYPE_ADDRPORT. * * If the #KRB5_AUTH_CONTEXT_DO_SEQUENCE flag is set in @a auth_context, the * sequence number of the KRB-SAFE message is checked against the remote * sequence number field of @a auth_context. Otherwise, the sequence number is * not used. * * If the #KRB5_AUTH_CONTEXT_DO_TIME flag is set in @a auth_context, * then two additional checks are performed: * @li The timestamp in the message must be within the permitted clock skew * (which is usually five minutes). * @li The message must not be a replayed message field in @a auth_context. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_rd_priv(krb5_context context, krb5_auth_context auth_context, const krb5_data *inbuf, krb5_data *outbuf, krb5_replay_data *outdata); /** * Convert a string principal name to a krb5_principal structure. * * @param [in] context Library context * @param [in] name String representation of a principal name * @param [out] principal_out New principal * * Convert a string representation of a principal name to a krb5_principal * structure. * * A string representation of a Kerberos name consists of one or more principal * name components, separated by slashes, optionally followed by the \@ * character and a realm name. If the realm name is not specified, the local * realm is used. * * To use the slash and \@ symbols as part of a component (quoted) instead of * using them as a component separator or as a realm prefix), put a backslash * (\) character in front of the symbol. Similarly, newline, tab, backspace, * and NULL characters can be included in a component by using @c n, @c t, @c b * or @c 0, respectively. * * @note The realm in a Kerberos @a name cannot contain slash, colon, * or NULL characters. * * Use krb5_free_principal() to free @a principal_out when it is no longer * needed. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_parse_name(krb5_context context, const char *name, krb5_principal *principal_out); #define KRB5_PRINCIPAL_PARSE_NO_REALM 0x1 /**< Error if realm is present */ #define KRB5_PRINCIPAL_PARSE_REQUIRE_REALM 0x2 /**< Error if realm is not present */ #define KRB5_PRINCIPAL_PARSE_ENTERPRISE 0x4 /**< Create single-component enterprise principle */ #define KRB5_PRINCIPAL_PARSE_IGNORE_REALM 0x8 /**< Ignore realm if present */ /** * Convert a string principal name to a krb5_principal with flags. * * @param [in] context Library context * @param [in] name String representation of a principal name * @param [in] flags Flag * @param [out] principal_out New principal * * Similar to krb5_parse_name(), this function converts a single-string * representation of a principal name to a krb5_principal structure. * * The following flags are valid: * @li #KRB5_PRINCIPAL_PARSE_NO_REALM - no realm must be present in @a name * @li #KRB5_PRINCIPAL_PARSE_REQUIRE_REALM - realm must be present in @a name * @li #KRB5_PRINCIPAL_PARSE_ENTERPRISE - create single-component enterprise * principal * @li #KRB5_PRINCIPAL_PARSE_IGNORE_REALM - ignore realm if present in @a name * * If @c KRB5_PRINCIPAL_PARSE_NO_REALM or @c KRB5_PRINCIPAL_PARSE_IGNORE_REALM * is specified in @a flags, the realm of the new principal will be empty. * Otherwise, the default realm for @a context will be used if @a name does not * specify a realm. * * Use krb5_free_principal() to free @a principal_out when it is no longer * needed. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_parse_name_flags(krb5_context context, const char *name, int flags, krb5_principal *principal_out); /** * Convert a krb5_principal structure to a string representation. * * @param [in] context Library context * @param [in] principal Principal * @param [out] name String representation of principal name * * The resulting string representation uses the format and quoting conventions * described for krb5_parse_name(). * * Use krb5_free_unparsed_name() to free @a name when it is no longer needed. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_unparse_name(krb5_context context, krb5_const_principal principal, register char **name); /** * Convert krb5_principal structure to string and length. * * @param [in] context Library context * @param [in] principal Principal * @param [in,out] name String representation of principal name * @param [in,out] size Size of unparsed name * * This function is similar to krb5_unparse_name(), but allows the use of an * existing buffer for the result. If size is not NULL, then @a name must * point to either NULL or an existing buffer of at least the size pointed to * by @a size. The buffer will be allocated or resized if necessary, with the * new pointer stored into @a name. Whether or not the buffer is resized, the * necessary space for the result, including null terminator, will be stored * into @a size. * * If size is NULL, this function behaves exactly as krb5_unparse_name(). * * @retval * 0 Success * @return * Kerberos error codes. On failure @a name is set to NULL */ krb5_error_code KRB5_CALLCONV krb5_unparse_name_ext(krb5_context context, krb5_const_principal principal, char **name, unsigned int *size); #define KRB5_PRINCIPAL_UNPARSE_SHORT 0x1 /**< Omit realm if it is the local realm */ #define KRB5_PRINCIPAL_UNPARSE_NO_REALM 0x2 /**< Omit realm always */ #define KRB5_PRINCIPAL_UNPARSE_DISPLAY 0x4 /**< Don't escape special characters */ /** * Convert krb5_principal structure to a string with flags. * * @param [in] context Library context * @param [in] principal Principal * @param [in] flags Flags * @param [out] name String representation of principal name * * Similar to krb5_unparse_name(), this function converts a krb5_principal * structure to a string representation. * * The following flags are valid: * @li #KRB5_PRINCIPAL_UNPARSE_SHORT - omit realm if it is the local realm * @li #KRB5_PRINCIPAL_UNPARSE_NO_REALM - omit realm * @li #KRB5_PRINCIPAL_UNPARSE_DISPLAY - do not quote special characters * * Use krb5_free_unparsed_name() to free @a name when it is no longer needed. * * @retval * 0 Success * @return * Kerberos error codes. On failure @a name is set to NULL */ krb5_error_code KRB5_CALLCONV krb5_unparse_name_flags(krb5_context context, krb5_const_principal principal, int flags, char **name); /** * Convert krb5_principal structure to string format with flags. * * @param [in] context Library context * @param [in] principal Principal * @param [in] flags Flags * @param [out] name Single string format of principal name * @param [out] size Size of unparsed name buffer * * @sa krb5_unparse_name() krb5_unparse_name_flags() krb5_unparse_name_ext() * * @retval * 0 Success * @return * Kerberos error codes. On failure @a name is set to NULL */ krb5_error_code KRB5_CALLCONV krb5_unparse_name_flags_ext(krb5_context context, krb5_const_principal principal, int flags, char **name, unsigned int *size); /** * Set the realm field of a principal * * @param [in,out] context Library context * @param [in] principal Principal name * @param [in] realm Realm name * * Set the realm name part of @a principal to @a realm, overwriting the * previous realm. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_set_principal_realm(krb5_context context, krb5_principal principal, const char *realm); /** * Search a list of addresses for a specified address. * * @param [in] context Library context * @param [in] addr Address to search for * @param [in] addrlist Address list to be searched (or NULL) * * @note If @a addrlist contains only a NetBIOS addresses, it will be treated * as a null list. * * @return * TRUE if @a addr is listed in @a addrlist, or @c addrlist is NULL; FALSE * otherwise */ krb5_boolean KRB5_CALLCONV_WRONG krb5_address_search(krb5_context context, const krb5_address *addr, krb5_address *const *addrlist); /** * Compare two Kerberos addresses. * * @param [in] context Library context * @param [in] addr1 First address to be compared * @param [in] addr2 Second address to be compared * * @return * TRUE if the addresses are the same, FALSE otherwise */ krb5_boolean KRB5_CALLCONV krb5_address_compare(krb5_context context, const krb5_address *addr1, const krb5_address *addr2); /** * Return an ordering of the specified addresses. * * @param [in] context Library context * @param [in] addr1 First address * @param [in] addr2 Second address * * @retval * 0 The two addresses are the same * @retval * \< 0 First address is less than second * @retval * \> 0 First address is greater than second */ int KRB5_CALLCONV krb5_address_order(krb5_context context, const krb5_address *addr1, const krb5_address *addr2); /** * Compare the realms of two principals. * * @param [in] context Library context * @param [in] princ1 First principal * @param [in] princ2 Second principal * * @retval * TRUE if the realm names are the same; FALSE otherwise */ krb5_boolean KRB5_CALLCONV krb5_realm_compare(krb5_context context, krb5_const_principal princ1, krb5_const_principal princ2); /** * Compare two principals. * * @param [in] context Library context * @param [in] princ1 First principal * @param [in] princ2 Second principal * * @retval * TRUE if the principals are the same; FALSE otherwise */ krb5_boolean KRB5_CALLCONV krb5_principal_compare(krb5_context context, krb5_const_principal princ1, krb5_const_principal princ2); /** * Compare two principals ignoring realm components. * * @param [in] context Library context * @param [in] princ1 First principal * @param [in] princ2 Second principal * * Similar to krb5_principal_compare(), but do not compare the realm * components of the principals. * * @retval * TRUE if the principals are the same; FALSE otherwise */ krb5_boolean KRB5_CALLCONV krb5_principal_compare_any_realm(krb5_context context, krb5_const_principal princ1, krb5_const_principal princ2); #define KRB5_PRINCIPAL_COMPARE_IGNORE_REALM 1 /**< ignore realm component */ #define KRB5_PRINCIPAL_COMPARE_ENTERPRISE 2 /**< UPNs as real principals */ #define KRB5_PRINCIPAL_COMPARE_CASEFOLD 4 /**< case-insensitive */ #define KRB5_PRINCIPAL_COMPARE_UTF8 8 /**< treat principals as UTF-8 */ /** * Compare two principals with additional flags. * * @param [in] context Library context * @param [in] princ1 First principal * @param [in] princ2 Second principal * @param [in] flags Flags * * Valid flags are: * @li #KRB5_PRINCIPAL_COMPARE_IGNORE_REALM - ignore realm component * @li #KRB5_PRINCIPAL_COMPARE_ENTERPRISE - UPNs as real principals * @li #KRB5_PRINCIPAL_COMPARE_CASEFOLD case-insensitive * @li #KRB5_PRINCIPAL_COMPARE_UTF8 - treat principals as UTF-8 * * @sa krb5_principal_compare() * * @retval * TRUE if the principal names are the same; FALSE otherwise */ krb5_boolean KRB5_CALLCONV krb5_principal_compare_flags(krb5_context context, krb5_const_principal princ1, krb5_const_principal princ2, int flags); /** * Initialize an empty @c krb5_keyblock. * * @param [in] context Library context * @param [in] enctype Encryption type * @param [in] length Length of keyblock (or 0) * @param [out] out New keyblock structure * * Initialize a new keyblock and allocate storage for the contents of the key. * It is legal to pass in a length of 0, in which case contents are left * unallocated. Use krb5_free_keyblock() to free @a out when it is no longer * needed. * * @note If @a length is set to 0, contents are left unallocated. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_init_keyblock(krb5_context context, krb5_enctype enctype, size_t length, krb5_keyblock **out); /** * Copy a keyblock. * * @param [in] context Library context * @param [in] from Keyblock to be copied * @param [out] to Copy of keyblock @a from * * This function creates a new keyblock with the same contents as @a from. Use * krb5_free_keyblock() to free @a to when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_copy_keyblock(krb5_context context, const krb5_keyblock *from, krb5_keyblock **to); /** * Copy the contents of a keyblock. * * @param [in] context Library context * @param [in] from Key to be copied * @param [out] to Output key * * This function copies the contents of @a from to @a to. Use * krb5_free_keyblock_contents() to free @a to when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_copy_keyblock_contents(krb5_context context, const krb5_keyblock *from, krb5_keyblock *to); /** * Copy a krb5_creds structure. * * @param [in] context Library context * @param [in] incred Credentials structure to be copied * @param [out] outcred Copy of @a incred * * This function creates a new credential with the contents of @a incred. Use * krb5_free_creds() to free @a outcred when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_copy_creds(krb5_context context, const krb5_creds *incred, krb5_creds **outcred); /** * Copy a krb5_data object. * * @param [in] context Library context * @param [in] indata Data object to be copied * @param [out] outdata Copy of @a indata * * This function creates a new krb5_data object with the contents of @a indata. * Use krb5_free_data() to free @a outdata when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_copy_data(krb5_context context, const krb5_data *indata, krb5_data **outdata); /** * Copy a principal. * * @param [in] context Library context * @param [in] inprinc Principal to be copied * @param [out] outprinc Copy of @a inprinc * * This function creates a new principal structure with the contents of @a * inprinc. Use krb5_free_principal() to free @a outprinc when it is no longer * needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_copy_principal(krb5_context context, krb5_const_principal inprinc, krb5_principal *outprinc); /** * Copy an array of addresses. * * @param [in] context Library context * @param [in] inaddr Array of addresses to be copied * @param [out] outaddr Copy of array of addresses * * This function creates a new address array containing a copy of @a inaddr. * Use krb5_free_addresses() to free @a outaddr when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_copy_addresses(krb5_context context, krb5_address *const *inaddr, krb5_address ***outaddr); /** * Copy a krb5_ticket structure. * * @param [in] context Library context * @param [in] from Ticket to be copied * @param [out] pto Copy of ticket * * This function creates a new krb5_ticket structure containing the contents of * @a from. Use krb5_free_ticket() to free @a pto when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_copy_ticket(krb5_context context, const krb5_ticket *from, krb5_ticket **pto); /** * Copy an authorization data list. * * @param [in] context Library context * @param [in] in_authdat List of @a krb5_authdata structures * @param [out] out New array of @a krb5_authdata structures * * This function creates a new authorization data list containing a copy of @a * in_authdat, which must be null-terminated. Use krb5_free_authdata() to free * @a out when it is no longer needed. * * @note The last array entry in @a in_authdat must be a NULL pointer. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_copy_authdata(krb5_context context, krb5_authdata *const *in_authdat, krb5_authdata ***out); /** * Find authorization data elements. * * @param [in] context Library context * @param [in] ticket_authdata Authorization data list from ticket * @param [in] ap_req_authdata Authorization data list from AP request * @param [in] ad_type Authorization data type to find * @param [out] results List of matching entries * * This function searches @a ticket_authdata and @a ap_req_authdata for * elements of type @a ad_type. Either input list may be NULL, in which case * it will not be searched; otherwise, the input lists must be terminated by * NULL entries. This function will search inside AD-IF-RELEVANT containers if * found in either list. Use krb5_free_authdata() to free @a results when it * is no longer needed. * * @version First introduced in 1.10 */ krb5_error_code KRB5_CALLCONV krb5_find_authdata(krb5_context context, krb5_authdata *const *ticket_authdata, krb5_authdata *const *ap_req_authdata, krb5_authdatatype ad_type, krb5_authdata ***results); /** * Merge two authorization data lists into a new list. * * @param [in] context Library context * @param [in] inauthdat1 First list of @a krb5_authdata structures * @param [in] inauthdat2 Second list of @a krb5_authdata structures * @param [out] outauthdat Merged list of @a krb5_authdata structures * * Merge two authdata arrays, such as the array from a ticket * and authenticator. * Use krb5_free_authdata() to free @a outauthdat when it is no longer needed. * * @note The last array entry in @a inauthdat1 and @a inauthdat2 * must be a NULL pointer. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_merge_authdata(krb5_context context, krb5_authdata *const *inauthdat1, krb5_authdata * const *inauthdat2, krb5_authdata ***outauthdat); /** * Copy a krb5_authenticator structure. * * @param [in] context Library context * @param [in] authfrom krb5_authenticator structure to be copied * @param [out] authto Copy of krb5_authenticator structure * * This function creates a new krb5_authenticator structure with the content of * @a authfrom. Use krb5_free_authenticator() to free @a authto when it is no * longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_copy_authenticator(krb5_context context, const krb5_authenticator *authfrom, krb5_authenticator **authto); /** * Copy a krb5_checksum structure. * * @param [in] context Library context * @param [in] ckfrom Checksum to be copied * @param [out] ckto Copy of krb5_checksum structure * * This function creates a new krb5_checksum structure with the contents of @a * ckfrom. Use krb5_free_checksum() to free @a ckto when it is no longer * needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_copy_checksum(krb5_context context, const krb5_checksum *ckfrom, krb5_checksum **ckto); /** * Generate a replay cache object for server use and open it. * * @param [in] context Library context * @param [in] piece Unique identifier for replay cache * @param [out] rcptr Handle to an open rcache * * This function generates a replay cache name based on @a piece and opens a * handle to it. Typically @a piece is the first component of the service * principal name. Use krb5_rc_close() to close @a rcptr when it is no longer * needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_get_server_rcache(krb5_context context, const krb5_data *piece, krb5_rcache *rcptr); /** * Build a principal name using length-counted strings. * * @param [in] context Library context * @param [out] princ Principal name * @param [in] rlen Realm name length * @param [in] realm Realm name * @param [in] ... List of unsigned int/char * components, followed by 0 * * This function creates a principal from a length-counted string and a * variable-length list of length-counted components. The list of components * ends with the first 0 length argument (so it is not possible to specify an * empty component with this function). Call krb5_free_principal() to free * allocated memory for principal when it is no longer needed. * * @code * Example of how to build principal WELLKNOWN/ANONYMOUS@R * krb5_build_principal_ext(context, &principal, strlen("R"), "R", * (unsigned int)strlen(KRB5_WELLKNOWN_NAMESTR), * KRB5_WELLKNOWN_NAMESTR, * (unsigned int)strlen(KRB5_ANONYMOUS_PRINCSTR), * KRB5_ANONYMOUS_PRINCSTR, 0); * @endcode * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV_C krb5_build_principal_ext(krb5_context context, krb5_principal * princ, unsigned int rlen, const char * realm, ...); /** * Build a principal name using null-terminated strings. * * @param [in] context Library context * @param [out] princ Principal name * @param [in] rlen Realm name length * @param [in] realm Realm name * @param [in] ... List of char * components, ending with NULL * * Call krb5_free_principal() to free @a princ when it is no longer needed. * * @note krb5_build_principal() and krb5_build_principal_alloc_va() perform the * same task. krb5_build_principal() takes variadic arguments. * krb5_build_principal_alloc_va() takes a pre-computed @a varargs pointer. * * @code * Example of how to build principal H/S@R * krb5_build_principal(context, &principal, * strlen("R"), "R", "H", "S", (char*)NULL); * @endcode * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV_C krb5_build_principal(krb5_context context, krb5_principal * princ, unsigned int rlen, const char * realm, ...) #if __GNUC__ >= 4 __attribute__ ((sentinel)) #endif ; #if KRB5_DEPRECATED /** @deprecated Replaced by krb5_build_principal_alloc_va(). */ KRB5_ATTR_DEPRECATED krb5_error_code KRB5_CALLCONV krb5_build_principal_va(krb5_context context, krb5_principal princ, unsigned int rlen, const char *realm, va_list ap); #endif /** * Build a principal name, using a precomputed variable argument list * * @param [in] context Library context * @param [out] princ Principal structure * @param [in] rlen Realm name length * @param [in] realm Realm name * @param [in] ap List of char * components, ending with NULL * * Similar to krb5_build_principal(), this function builds a principal name, * but its name components are specified as a va_list. * * Use krb5_free_principal() to deallocate @a princ when it is no longer * needed. * * @code * Function usage example: * va_list ap; * va_start(ap, realm); * krb5_build_principal_alloc_va(context, princ, rlen, realm, ap); * va_end(ap); * @endcode * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_build_principal_alloc_va(krb5_context context, krb5_principal *princ, unsigned int rlen, const char *realm, va_list ap); /** * Convert a Kerberos V4 principal to a Kerberos V5 principal. * * @param [in] context Library context * @param [in] name V4 name * @param [in] instance V4 instance * @param [in] realm Realm * @param [out] princ V5 principal * * This function builds a @a princ from V4 specification based on given input * @a name.instance\@realm. * * Use krb5_free_principal() to free @a princ when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_425_conv_principal(krb5_context context, const char *name, const char *instance, const char *realm, krb5_principal *princ); /** * Convert a Kerberos V5 principal to a Kerberos V4 principal. * * @param [in] context Library context * @param [in] princ V5 Principal * @param [out] name V4 principal's name to be filled in * @param [out] inst V4 principal's instance name to be filled in * @param [out] realm Principal's realm name to be filled in * * This function separates a V5 principal @a princ into @a name, @a instance, * and @a realm. * * @retval * 0 Success * @retval * KRB5_INVALID_PRINCIPAL Invalid principal name * @retval * KRB5_CONFIG_CANTOPEN Can't open or find Kerberos configuration file * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_524_conv_principal(krb5_context context, krb5_const_principal princ, char *name, char *inst, char *realm); /** *@deprecated */ struct credentials; /** * Convert a Kerberos V5 credentials to a Kerberos V4 credentials * * @note Not implemented * * @retval KRB524_KRB4_DISABLED (always) */ int KRB5_CALLCONV krb5_524_convert_creds(krb5_context context, krb5_creds *v5creds, struct credentials *v4creds); #if KRB5_DEPRECATED #define krb524_convert_creds_kdc krb5_524_convert_creds #define krb524_init_ets(x) (0) #endif /* libkt.spec */ /** * Get a handle for a key table. * * @param [in] context Library context * @param [in] name Name of the key table * @param [out] ktid Key table handle * * Resolve the key table name @a name and set @a ktid to a handle identifying * the key table. The key table is not opened. * * @note @a name must be of the form @c type:residual, where @a type must be a * type known to the library and @a residual portion should be specific to the * particular keytab type. * * @sa krb5_kt_close() * * @code * Example: krb5_kt_resolve(context, "FILE:/tmp/filename", &ktid); * @endcode * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_kt_resolve(krb5_context context, const char *name, krb5_keytab *ktid); /** * Get the default key table name. * * @param [in] context Library context * @param [out] name Default key table name * @param [in] name_size Space available in @a name * * Fill @a name with the name of the default key table for @a context. * * @sa MAX_KEYTAB_NAME_LEN * * @retval * 0 Success * @retval * KRB5_CONFIG_NOTENUFSPACE Buffer is too short * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_kt_default_name(krb5_context context, char *name, int name_size); /** * Resolve the default key table. * * @param [in] context Library context * @param [out] id Key table handle * * Set @a id to a handle to the default key table. The key table is not * opened. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_kt_default(krb5_context context, krb5_keytab *id); /** * Resolve the default client key table. * * @param [in] context Library context * @param [out] keytab_out Key table handle * * Fill @a keytab_out with a handle to the default client key table. * * @version First introduced in 1.11 * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_kt_client_default(krb5_context context, krb5_keytab *keytab_out); /** * Free the contents of a key table entry. * * @param [in] context Library context * @param [in] entry Key table entry whose contents are to be freed * * @note The pointer is not freed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_free_keytab_entry_contents(krb5_context context, krb5_keytab_entry *entry); /** @deprecated Use krb5_free_keytab_entry_contents instead. */ krb5_error_code KRB5_CALLCONV krb5_kt_free_entry(krb5_context context, krb5_keytab_entry *entry); /* remove and add are functions, so that they can return NOWRITE if not a writable keytab */ /** * Remove an entry from a key table. * * @param [in] context Library context * @param [in] id Key table handle * @param [in] entry Entry to remove from key table * * @retval * 0 Success * @retval * KRB5_KT_NOWRITE Key table is not writable * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_kt_remove_entry(krb5_context context, krb5_keytab id, krb5_keytab_entry *entry); /** * Add a new entry to a key table. * * @param [in] context Library context * @param [in] id Key table handle * @param [in] entry Entry to be added * * @retval * 0 Success * @retval * ENOMEM Insufficient memory * @retval * KRB5_KT_NOWRITE Key table is not writeable * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_kt_add_entry(krb5_context context, krb5_keytab id, krb5_keytab_entry *entry); /** * Convert a principal name into the default salt for that principal. * * @param [in] context Library context * @param [in] pr Principal name * @param [out] ret Default salt for @a pr to be filled in * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV_WRONG krb5_principal2salt(krb5_context context, register krb5_const_principal pr, krb5_data *ret); /* librc.spec--see rcache.h */ /* libcc.spec */ /** * Resolve a credential cache name. * * @param [in] context Library context * @param [in] name Credential cache name to be resolved * @param [out] cache Credential cache handle * * Fills in @a cache with a @a cache handle that corresponds to the name in @a * name. @a name should be of the form @c type:residual, and @a type must be a * type known to the library. If the @a name does not contain a colon, * interpret it as a file name. * * @code * Example: krb5_cc_resolve(context, "MEMORY:C_", &cache); * @endcode * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_resolve(krb5_context context, const char *name, krb5_ccache *cache); /** * Duplicate ccache handle. * * @param [in] context Library context * @param [in] in Credential cache handle to be duplicated * @param [out] out Credential cache handle * * Create a new handle referring to the same cache as @a in. * The new handle and @a in can be closed independently. */ krb5_error_code KRB5_CALLCONV krb5_cc_dup(krb5_context context, krb5_ccache in, krb5_ccache *out); /** * Return the name of the default credential cache. * * @param [in] context Library context * * Try the environment variable @a KRB5CCNAME first then, if it is not set, * fall back on the default ccache name for the OS. * * @return * Name of default credential cache for the current user. */ const char *KRB5_CALLCONV krb5_cc_default_name(krb5_context context); /** * Set the default credential cache name. * * @param [in,out] context Library context * @param [in] name Default credential cache name * * This function frees the old default credential cache name and then sets it * to @a name. * * @retval * 0 Success * @retval * KV5M_CONTEXT Bad magic number for @c _krb5_context structure * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_set_default_name(krb5_context context, const char *name); /** * Resolve the default crendentials cache name. * * @param [in,out] context Library context * @param [out] ccache Pointer to credential cache name * * @retval * 0 Success * @retval * KV5M_CONTEXT Bad magic number for @c _krb5_context structure * @retval * KRB5_FCC_INTERNAL The name of the default credential cache cannot be * obtained * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_default(krb5_context context, krb5_ccache *ccache); /** * Copy a credential cache. * * @param [in] context Library context * @param [in] incc Credential cache to be copied * @param [out] outcc Copy of credential cache to be filled in * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_copy_creds(krb5_context context, krb5_ccache incc, krb5_ccache outcc); /** * Get a configuration value from a credential cache. * * @param [in] context Library context * @param [in] id Credential cache handle * @param [in] principal Configuration for this principal; * if NULL, global for the whole cache * @param [in] key Name of config variable * @param [out] data Data to be fetched * * Use krb5_free_data_contents() to free @a data when it is no longer needed. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_get_config(krb5_context context, krb5_ccache id, krb5_const_principal principal, const char *key, krb5_data *data); /** * Store a configuration value in a credential cache. * * @param [in] context Library context * @param [in] id Credential cache handle * @param [in] principal Configuration for a specific principal; * if NULL, global for the whole cache * @param [in] key Name of config variable * @param [in] data Data to store, or NULL to remove * * @note Existing configuration under the same key is over-written. * * @warning Before version 1.10 @a data was assumed to be always non-null. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_set_config(krb5_context context, krb5_ccache id, krb5_const_principal principal, const char *key, krb5_data *data); /** * Test whether a principal is a configuration principal. * * @param [in] context Library context * @param [in] principal Principal to check * * @return * @c TRUE if the principal is a configuration principal (generated part of * krb5_cc_set_config()); @c FALSE otherwise. */ krb5_boolean KRB5_CALLCONV krb5_is_config_principal(krb5_context context, krb5_const_principal principal); /** * Make a credential cache the primary cache for its collection. * * @param [in] context Library context * @param [in] cache Credential cache handle * * If the type of @a cache supports it, set @a cache to be the primary * credential cache for the collection it belongs to. * * @retval * 0 Success, or the type of @a cache doesn't support switching * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cc_switch(krb5_context context, krb5_ccache cache); /** * Determine whether a credential cache type supports switching. * * @param [in] context Library context * @param [in] type Credential cache type * * @version First introduced in 1.10 * * @retval TRUE if @a type supports switching * @retval FALSE if it does not or is not a valid credential cache type. */ krb5_boolean KRB5_CALLCONV krb5_cc_support_switch(krb5_context context, const char *type); /** * Find a credential cache with a specified client principal. * * @param [in] context Library context * @param [in] client Client principal * @param [out] cache_out Credential cache handle * * Find a cache within the collection whose default principal is @a client. * Use @a krb5_cc_close to close @a ccache when it is no longer needed. * * @retval 0 Success * @retval KRB5_CC_NOTFOUND * * @sa krb5_cccol_cursor_new * * @version First introduced in 1.10 */ krb5_error_code KRB5_CALLCONV krb5_cc_cache_match(krb5_context context, krb5_principal client, krb5_ccache *cache_out); /** * Select a credential cache to use with a server principal. * * @param [in] context Library context * @param [in] server Server principal * @param [out] cache_out Credential cache handle * @param [out] princ_out Client principal * * Select a cache within the collection containing credentials most appropriate * for use with @a server, according to configured rules and heuristics. * * Use krb5_cc_close() to release @a cache_out when it is no longer needed. * Use krb5_free_principal() to release @a princ_out when it is no longer * needed. Note that @a princ_out is set in some error conditions. * * @return * If an appropriate cache is found, 0 is returned, @a cache_out is set to the * selected cache, and @a princ_out is set to the default principal of that * cache. * * If the appropriate client principal can be authoritatively determined but * the cache collection contains no credentials for that principal, then * KRB5_CC_NOTFOUND is returned, @a cache_out is set to NULL, and @a princ_out * is set to the appropriate client principal. * * If no configured mechanism can determine the appropriate cache or principal, * KRB5_CC_NOTFOUND is returned and @a cache_out and @a princ_out are set to * NULL. * * Any other error code indicates a fatal error in the processing of a cache * selection mechanism. * * @version First introduced in 1.10 */ krb5_error_code KRB5_CALLCONV krb5_cc_select(krb5_context context, krb5_principal server, krb5_ccache *cache_out, krb5_principal *princ_out); /* krb5_free.c */ /** * Free the storage assigned to a principal. * * @param [in] context Library context * @param [in] val Principal to be freed */ void KRB5_CALLCONV krb5_free_principal(krb5_context context, krb5_principal val); /** * Free a krb5_authenticator structure. * * @param [in] context Library context * @param [in] val Authenticator structure to be freed * * This function frees the contents of @a val and the structure itself. */ void KRB5_CALLCONV krb5_free_authenticator(krb5_context context, krb5_authenticator *val); /** * Free the data stored in array of addresses. * * @param [in] context Library context * @param [in] val Array of addresses to be freed * * This function frees the contents of @a val and the array itself. * * @note The last entry in the array must be a NULL pointer. */ void KRB5_CALLCONV krb5_free_addresses(krb5_context context, krb5_address **val); /** * Free the storage assigned to array of authentication data. * * @param [in] context Library context * @param [in] val Array of authentication data to be freed * * This function frees the contents of @a val and the array itself. * * @note The last entry in the array must be a NULL pointer. */ void KRB5_CALLCONV krb5_free_authdata(krb5_context context, krb5_authdata **val); /** * Free a ticket. * * @param [in] context Library context * @param [in] val Ticket to be freed * * This function frees the contents of @a val and the structure itself. */ void KRB5_CALLCONV krb5_free_ticket(krb5_context context, krb5_ticket *val); /** * Free an error allocated by krb5_read_error() or krb5_sendauth(). * * @param [in] context Library context * @param [in] val Error data structure to be freed * * This function frees the contents of @a val and the structure itself. */ void KRB5_CALLCONV krb5_free_error(krb5_context context, register krb5_error *val); /** * Free a krb5_creds structure. * * @param [in] context Library context * @param [in] val Credential structure to be freed. * * This function frees the contents of @a val and the structure itself. */ void KRB5_CALLCONV krb5_free_creds(krb5_context context, krb5_creds *val); /** * Free the contents of a krb5_creds structure. * * @param [in] context Library context * @param [in] val Credential structure to free contents of * * This function frees the contents of @a val, but not the structure itself. */ void KRB5_CALLCONV krb5_free_cred_contents(krb5_context context, krb5_creds *val); /** * Free a krb5_checksum structure. * * @param [in] context Library context * @param [in] val Checksum structure to be freed * * This function frees the contents of @a val and the structure itself. */ void KRB5_CALLCONV krb5_free_checksum(krb5_context context, register krb5_checksum *val); /** * Free the contents of a krb5_checksum structure. * * @param [in] context Library context * @param [in] val Checksum structure to free contents of * * This function frees the contents of @a val, but not the structure itself. */ void KRB5_CALLCONV krb5_free_checksum_contents(krb5_context context, register krb5_checksum *val); /** * Free a krb5_keyblock structure. * * @param [in] context Library context * @param [in] val Keyblock to be freed * * This function frees the contents of @a val and the structure itself. */ void KRB5_CALLCONV krb5_free_keyblock(krb5_context context, register krb5_keyblock *val); /** * Free the contents of a krb5_keyblock structure. * * @param [in] context Library context * @param [in] key Keyblock to be freed * * This function frees the contents of @a key, but not the structure itself. */ void KRB5_CALLCONV krb5_free_keyblock_contents(krb5_context context, register krb5_keyblock *key); /** * Free a krb5_ap_rep_enc_part structure. * * @param [in] context Library context * @param [in] val AP-REP enc part to be freed * * This function frees the contents of @a val and the structure itself. */ void KRB5_CALLCONV krb5_free_ap_rep_enc_part(krb5_context context, krb5_ap_rep_enc_part *val); /** * Free a krb5_data structure. * * @param [in] context Library context * @param [in] val Data structure to be freed * * This function frees the contents of @a val and the structure itself. */ void KRB5_CALLCONV krb5_free_data(krb5_context context, krb5_data *val); /* Free a krb5_octet_data structure (should be unused). */ void KRB5_CALLCONV krb5_free_octet_data(krb5_context context, krb5_octet_data *val); /** * Free the contents of a krb5_data structure and zero the data field. * * @param [in] context Library context * @param [in] val Data structure to free contents of * * This function frees the contents of @a val, but not the structure itself. */ void KRB5_CALLCONV krb5_free_data_contents(krb5_context context, krb5_data *val); /** * Free a string representation of a principal. * * @param [in] context Library context * @param [in] val Name string to be freed */ void KRB5_CALLCONV krb5_free_unparsed_name(krb5_context context, char *val); /** * Free a string allocated by a krb5 function. * * @param [in] context Library context * @param [in] val String to be freed * * @version First introduced in 1.10 */ void KRB5_CALLCONV krb5_free_string(krb5_context context, char *val); /** * Free an array of checksum types. * * @param [in] context Library context * @param [in] val Array of checksum types to be freed */ void KRB5_CALLCONV krb5_free_cksumtypes(krb5_context context, krb5_cksumtype *val); /* From krb5/os, but needed by the outside world */ /** * Retrieve the system time of day, in sec and ms, since the epoch. * * @param [in] context Library context * @param [out] seconds System timeofday, seconds portion * @param [out] microseconds System timeofday, microseconds portion * * This function retrieves the system time of day with the context * specific time offset adjustment. * * @sa krb5_crypto_us_timeofday() * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_us_timeofday(krb5_context context, krb5_timestamp *seconds, krb5_int32 *microseconds); /** * Retrieve the current time with context specific time offset adjustment. * * @param [in] context Library context * @param [in,out] timeret Timestamp to fill in * * This function retrieves the system time of day with the context specific * time offset adjustment. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_timeofday(krb5_context context, register krb5_timestamp *timeret); /** * Check if a timestamp is within the allowed clock skew of the current time. * * @param [in] context Library context * @param [in] date Timestamp to check * * This function checks if @a date is close enough to the current time * according to the configured allowable clock skew. * * @version First introduced in 1.10 * * @retval 0 Success * @retval KRB5KRB_AP_ERR_SKEW @a date is not within allowable clock skew */ krb5_error_code KRB5_CALLCONV krb5_check_clockskew(krb5_context context, krb5_timestamp date); /** * Return all interface addresses for this host. * * @param [in] context Library context * @param [out] addr Array of krb5_address pointers, ending with * NULL * * Use krb5_free_addresses() to free @a addr when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_os_localaddr(krb5_context context, krb5_address ***addr); /** * Retrieve the default realm. * * @param [in] context Library context * @param [out] lrealm Default realm name * * Retrieves the default realm to be used if no user-specified realm is * available. * * Use krb5_free_default_realm() to free @a lrealm when it is no longer needed. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_get_default_realm(krb5_context context, char **lrealm); /** * Override the default realm for the specified context. * * @param [in] context Library context * @param [in] lrealm Realm name for the default realm * * If @a lrealm is NULL, clear the default realm setting. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_set_default_realm(krb5_context context, const char *lrealm); /** * Free a default realm string returned by krb5_get_default_realm(). * * @param [in] context Library context * @param [in] lrealm Realm to be freed */ void KRB5_CALLCONV krb5_free_default_realm(krb5_context context, char *lrealm); /** * Generate a full principal name from a service name. * * @param [in] context Library context * @param [in] hostname Host name, or NULL to use local host * @param [in] sname Service name, or NULL to use @c "host" * @param [in] type Principal type * @param [out] ret_princ Generated principal * * This function converts a @a hostname and @a sname into @a krb5_principal * structure @a ret_princ. The returned principal will be of the form @a * sname\/hostname\@REALM where REALM is determined by krb5_get_host_realm(). * In some cases this may be the referral (empty) realm. * * The @a type can be one of the following: * * @li #KRB5_NT_SRV_HST canonicalizes the host name before looking up the * realm and generating the principal. * * @li #KRB5_NT_UNKNOWN accepts the hostname as given, and does not * canonicalize it. * * Use krb5_free_principal to free @a ret_princ when it is no longer needed. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_sname_to_principal(krb5_context context, const char *hostname, const char *sname, krb5_int32 type, krb5_principal *ret_princ); /** * Test whether a principal matches a matching principal. * * @param [in] context Library context * @param [in] matching Matching principal * @param [in] princ Principal to test * * @note A matching principal is a host-based principal with an empty realm * and/or second data component (hostname). Profile configuration may cause * the hostname to be ignored even if it is present. A principal matches a * matching principal if the former has the same non-empty (and non-ignored) * components of the latter. * * If @a matching is NULL, return TRUE. If @a matching is not a matching * principal, return the value of krb5_principal_compare(context, matching, * princ). * * @return * TRUE if @a princ matches @a matching, FALSE otherwise. */ krb5_boolean KRB5_CALLCONV krb5_sname_match(krb5_context context, krb5_const_principal matching, krb5_const_principal princ); /** * Change a password for an existing Kerberos account. * * @param [in] context Library context * @param [in] creds Credentials for kadmin/changepw service * @param [in] newpw New password * @param [out] result_code Numeric error code from server * @param [out] result_code_string String equivalent to @a result_code * @param [out] result_string Change password response from the KDC * * Change the password for the existing principal identified by @a creds. * * The possible values of the output @a result_code are: * * @li #KRB5_KPASSWD_SUCCESS (0) - success * @li #KRB5_KPASSWD_MALFORMED (1) - Malformed request error * @li #KRB5_KPASSWD_HARDERROR (2) - Server error * @li #KRB5_KPASSWD_AUTHERROR (3) - Authentication error * @li #KRB5_KPASSWD_SOFTERROR (4) - Password change rejected * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_change_password(krb5_context context, krb5_creds *creds, char *newpw, int *result_code, krb5_data *result_code_string, krb5_data *result_string); /** * Set a password for a principal using specified credentials. * * @param [in] context Library context * @param [in] creds Credentials for kadmin/changepw service * @param [in] newpw New password * @param [in] change_password_for Change the password for this principal * @param [out] result_code Numeric error code from server * @param [out] result_code_string String equivalent to @a result_code * @param [out] result_string Data returned from the remote system * * This function uses the credentials @a creds to set the password @a newpw for * the principal @a change_password_for. It implements the set password * operation of RFC 3244, for interoperability with Microsoft Windows * implementations. * * @note If @a change_password_for is NULL, the change is performed on the * current principal. If @a change_password_for is non-null, the change is * performed on the principal name passed in @a change_password_for. * * The error code and strings are returned in @a result_code, * @a result_code_string and @a result_string. * * @sa krb5_set_password_using_ccache() * * @retval * 0 Success and result_code is set to #KRB5_KPASSWD_SUCCESS. * @return * Kerberos error codes. */ krb5_error_code KRB5_CALLCONV krb5_set_password(krb5_context context, krb5_creds *creds, char *newpw, krb5_principal change_password_for, int *result_code, krb5_data *result_code_string, krb5_data *result_string); /** * Set a password for a principal using cached credentials. * * @param [in] context Library context * @param [in] ccache Credential cache * @param [in] newpw New password * @param [in] change_password_for Change the password for this principal * @param [out] result_code Numeric error code from server * @param [out] result_code_string String equivalent to @a result_code * @param [out] result_string Data returned from the remote system * * This function uses the cached credentials from @a ccache to set the password * @a newpw for the principal @a change_password_for. It implements RFC 3244 * set password operation (interoperable with MS Windows implementations) using * the credential cache. * * The error code and strings are returned in @a result_code, * @a result_code_string and @a result_string. * * @note If @a change_password_for is set to NULL, the change is performed on * the default principal in @a ccache. If @a change_password_for is non null, * the change is performed on the specified principal. * * @sa krb5_set_password() * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_set_password_using_ccache(krb5_context context, krb5_ccache ccache, char *newpw, krb5_principal change_password_for, int *result_code, krb5_data *result_code_string, krb5_data *result_string); /** * Get a result message for changing or setting a password. * * @param [in] context Library context * @param [in] server_string Data returned from the remote system * @param [out] message_out A message displayable to the user * * This function processes the @a server_string returned in the @a * result_string parameter of krb5_change_password(), krb5_set_password(), and * related functions, and returns a displayable string. If @a server_string * contains Active Directory structured policy information, it will be * converted into human-readable text. * * Use krb5_free_string() to free @a message_out when it is no longer needed. * * @retval * 0 Success * @return * Kerberos error codes * * @version First introduced in 1.11 */ krb5_error_code KRB5_CALLCONV krb5_chpw_message(krb5_context context, const krb5_data *server_string, char **message_out); /** * Retrieve configuration profile from the context. * * @param [in] context Library context * @param [out] profile Pointer to data read from a configuration file * * This function creates a new @a profile object that reflects profile * in the supplied @a context. * * The @a profile object may be freed with profile_release() function. * See profile.h and profile API for more details. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_get_profile(krb5_context context, struct _profile_t ** profile); #if KRB5_DEPRECATED /** @deprecated Replaced by krb5_get_init_creds_password().*/ KRB5_ATTR_DEPRECATED krb5_error_code KRB5_CALLCONV krb5_get_in_tkt_with_password(krb5_context context, krb5_flags options, krb5_address *const *addrs, krb5_enctype *ktypes, krb5_preauthtype *pre_auth_types, const char *password, krb5_ccache ccache, krb5_creds *creds, krb5_kdc_rep **ret_as_reply); /** @deprecated Replaced by krb5_get_init_creds(). */ KRB5_ATTR_DEPRECATED krb5_error_code KRB5_CALLCONV krb5_get_in_tkt_with_skey(krb5_context context, krb5_flags options, krb5_address *const *addrs, krb5_enctype *ktypes, krb5_preauthtype *pre_auth_types, const krb5_keyblock *key, krb5_ccache ccache, krb5_creds *creds, krb5_kdc_rep **ret_as_reply); /** @deprecated Replaced by krb5_get_init_creds_keytab(). */ KRB5_ATTR_DEPRECATED krb5_error_code KRB5_CALLCONV krb5_get_in_tkt_with_keytab(krb5_context context, krb5_flags options, krb5_address *const *addrs, krb5_enctype *ktypes, krb5_preauthtype *pre_auth_types, krb5_keytab arg_keytab, krb5_ccache ccache, krb5_creds *creds, krb5_kdc_rep **ret_as_reply); #endif /* KRB5_DEPRECATED */ /** * Parse and decrypt a @c KRB_AP_REQ message. * * @param [in] context Library context * @param [in,out] auth_context Pre-existing or newly created auth context * @param [in] inbuf AP-REQ message to be parsed * @param [in] server Matching principal for server, or NULL to * allow any principal in keytab * @param [in] keytab Key table, or NULL to use the default * @param [out] ap_req_options If non-null, the AP-REQ flags on output * @param [out] ticket If non-null, ticket from the AP-REQ message * * This function parses, decrypts and verifies a AP-REQ message from @a inbuf * and stores the authenticator in @a auth_context. * * If a keyblock is present in the @a auth_context, it is used to decrypt the * ticket in AP-REQ message. (This is useful for user-to-user authentication.) * Otherwise, the decryption key is obtained from the @a keytab. If @a keytab * is iterable, all of its key entries it will be tried against the ticket; * otherwise, the server principal in the ticket will be looked up in the * keytab and that key will be tried. * * The client specified in the decrypted authenticator must match the client * specified in the decrypted ticket. If @a server is non-null, the key in * which the ticket is encrypted must correspond to a principal in @a keytab * matching @a server according to the rules of krb5_sname_match(). * * If the @a remote_addr field of @a auth_context is set, the request must come * from that address. * * If a replay cache handle is provided in the @a auth_context, the * authenticator and ticket are verified against it. If no conflict is found, * the new authenticator is then stored in the replay cache of @a auth_context. * * Various other checks are performed on the decoded data, including * cross-realm policy, clockskew, and ticket validation times. * * On success the authenticator, subkey, and remote sequence number of the * request are stored in @a auth_context. If the #AP_OPTS_MUTUAL_REQUIRED * bit is set, the local sequence number is XORed with the remote sequence * number in the request. * * Use krb5_free_ticket() to free @a ticket when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_rd_req(krb5_context context, krb5_auth_context *auth_context, const krb5_data *inbuf, krb5_const_principal server, krb5_keytab keytab, krb5_flags *ap_req_options, krb5_ticket **ticket); /** * Retrieve a service key from a key table. * * @param [in] context Library context * @param [in] keyprocarg Name of a key table (NULL to use default name) * @param [in] principal Service principal * @param [in] vno Key version number (0 for highest available) * @param [in] enctype Encryption type (0 for any type) * @param [out] key Service key from key table * * Open and search the specified key table for the entry identified by @a * principal, @a enctype, and @a vno. If no key is found, return an error code. * * The default key table is used, unless @a keyprocarg is non-null. * @a keyprocarg designates a specific key table. * * Use krb5_free_keyblock() to free @a key when it is no longer needed. * * @retval * 0 Success * @return Kerberos error code if not found or @a keyprocarg is invalid. */ krb5_error_code KRB5_CALLCONV krb5_kt_read_service_key(krb5_context context, krb5_pointer keyprocarg, krb5_principal principal, krb5_kvno vno, krb5_enctype enctype, krb5_keyblock **key); /** * Format a @c KRB-SAFE message. * * @param [in] context Library context * @param [in,out] auth_context Authentication context * @param [in] userdata User data in the message * @param [out] outbuf Formatted @c KRB-SAFE buffer * @param [out] outdata Replay data. Specify NULL if not needed * * This function creates an integrity protected @c KRB-SAFE message * using data supplied by the application. * * Fields in @a auth_context specify the checksum type, the keyblock that * can be used to seed the checksum, full addresses (host and port) for * the sender and receiver, and @ref KRB5_AUTH_CONTEXT flags. * * The local address in @a auth_context must be set, and is used to form the * sender address used in the KRB-SAFE message. The remote address is * optional; if specified, it will be used to form the receiver address used in * the message. * * If #KRB5_AUTH_CONTEXT_DO_TIME flag is set in the @a auth_context, an entry * describing the message is entered in the replay cache @a * auth_context->rcache which enables the caller to detect if this message is * reflected by an attacker. If #KRB5_AUTH_CONTEXT_DO_TIME is not set, the * replay cache is not used. * * If either #KRB5_AUTH_CONTEXT_DO_SEQUENCE or * #KRB5_AUTH_CONTEXT_RET_SEQUENCE is set, the @a auth_context local sequence * number will be placed in @a outdata as its sequence number. * * @note The @a outdata argument is required if #KRB5_AUTH_CONTEXT_RET_TIME or * #KRB5_AUTH_CONTEXT_RET_SEQUENCE flag is set in the @a auth_context. * * Use krb5_free_data_contents() to free @a outbuf when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_mk_safe(krb5_context context, krb5_auth_context auth_context, const krb5_data *userdata, krb5_data *outbuf, krb5_replay_data *outdata); /** * Format a @c KRB-PRIV message. * * @param [in] context Library context * @param [in,out] auth_context Authentication context * @param [in] userdata User data for @c KRB-PRIV message * @param [out] outbuf Formatted @c KRB-PRIV message * @param [out] outdata Replay cache handle (NULL if not needed) * * This function is similar to krb5_mk_safe(), but the message is encrypted and * integrity-protected, not just integrity-protected. * * The local address in @a auth_context must be set, and is used to form the * sender address used in the KRB-SAFE message. The remote address is * optional; if specified, it will be used to form the receiver address used in * the message. * * @note If the #KRB5_AUTH_CONTEXT_RET_TIME or * #KRB5_AUTH_CONTEXT_RET_SEQUENCE flag is set in @a auth_context, the @a * outdata is required. * * @note The flags from @a auth_context specify whether sequence numbers or * timestamps will be used to identify the message. Valid values are: * * @li #KRB5_AUTH_CONTEXT_DO_TIME - Use timestamps in @a outdata * @li #KRB5_AUTH_CONTEXT_RET_TIME - Copy timestamp to @a outdata. * @li #KRB5_AUTH_CONTEXT_DO_SEQUENCE - Use local sequence numbers from * @a auth_context in replay cache. * @li #KRB5_AUTH_CONTEXT_RET_SEQUENCE - Use local sequence numbers from * @a auth_context as a sequence number * in the encrypted message @a outbuf. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_mk_priv(krb5_context context, krb5_auth_context auth_context, const krb5_data *userdata, krb5_data *outbuf, krb5_replay_data *outdata); /** * Client function for @c sendauth protocol. * * @param [in] context Library context * @param [in,out] auth_context Authentication context * @param [in] fd File descriptor that describes network socket * @param [in] appl_version Application protocol version to be matched * with the receiver's application version * @param [in] client Client principal * @param [in] server Server principal * @param [in] ap_req_options @ref AP_OPTS options * @param [in] in_data Data to be sent to the server * @param [in] in_creds Input credentials, or NULL to use @a ccache * @param [in] ccache Credential cache * @param [out] error If non-null, contains KRB_ERROR message * returned from server * @param [out] rep_result If non-null and @a ap_req_options is * #AP_OPTS_MUTUAL_REQUIRED, contains the result * of mutual authentication exchange * @param [out] out_creds If non-null, the retrieved credentials * * This function performs the client side of a sendauth/recvauth exchange by * sending and receiving messages over @a fd. * * Credentials may be specified in three ways: * * @li If @a in_creds is NULL, credentials are obtained with * krb5_get_credentials() using the principals @a client and @a server. @a * server must be non-null; @a client may NULL to use the default principal of * @a ccache. * * @li If @a in_creds is non-null, but does not contain a ticket, credentials * for the exchange are obtained with krb5_get_credentials() using @a in_creds. * In this case, the values of @a client and @a server are unused. * * @li If @a in_creds is a complete credentials structure, it used directly. * In this case, the values of @a client, @a server, and @a ccache are unused. * * If the server is using a different application protocol than that specified * in @a appl_version, an error will be returned. * * Use krb5_free_creds() to free @a out_creds, krb5_free_ap_rep_enc_part() to * free @a rep_result, and krb5_free_error() to free @a error when they are no * longer needed. * * @sa krb5_recvauth() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_sendauth(krb5_context context, krb5_auth_context *auth_context, krb5_pointer fd, char *appl_version, krb5_principal client, krb5_principal server, krb5_flags ap_req_options, krb5_data *in_data, krb5_creds *in_creds, krb5_ccache ccache, krb5_error **error, krb5_ap_rep_enc_part **rep_result, krb5_creds **out_creds); /** * Server function for @a sendauth protocol. * * @param [in] context Library context * @param [in,out] auth_context Authentication context * @param [in] fd File descriptor * @param [in] appl_version Application protocol version to be matched * against the client's application version * @param [in] server Server principal (NULL for any in @a keytab) * @param [in] flags Additional specifications * @param [in] keytab Key table containing service keys * @param [out] ticket Ticket (NULL if not needed) * * This function performs the srever side of a sendauth/recvauth exchange by * sending and receiving messages over @a fd. * * Use krb5_free_ticket() to free @a ticket when it is no longer needed. * * @sa krb5_sendauth() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_recvauth(krb5_context context, krb5_auth_context *auth_context, krb5_pointer fd, char *appl_version, krb5_principal server, krb5_int32 flags, krb5_keytab keytab, krb5_ticket **ticket); /** * Server function for @a sendauth protocol with version parameter. * * @param [in] context Library context * @param [in,out] auth_context Authentication context * @param [in] fd File descriptor * @param [in] server Server principal (NULL for any in @a keytab) * @param [in] flags Additional specifications * @param [in] keytab Decryption key * @param [out] ticket Ticket (NULL if not needed) * @param [out] version sendauth protocol version (NULL if not needed) * * This function is similar to krb5_recvauth() with the additional output * information place into @a version. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_recvauth_version(krb5_context context, krb5_auth_context *auth_context, krb5_pointer fd, krb5_principal server, krb5_int32 flags, krb5_keytab keytab, krb5_ticket **ticket, krb5_data *version); /** * Format a @c KRB-CRED message for an array of credentials. * * @param [in] context Library context * @param [in,out] auth_context Authentication context * @param [in] ppcreds Null-terminated array of credentials * @param [out] ppdata Encoded credentials * @param [out] outdata Replay cache information (NULL if not needed) * * This function takes an array of credentials @a ppcreds and formats * a @c KRB-CRED message @a ppdata to pass to krb5_rd_cred(). * * @note If the #KRB5_AUTH_CONTEXT_RET_TIME or #KRB5_AUTH_CONTEXT_RET_SEQUENCE * flag is set in @a auth_context, @a outdata is required. * * The message will be encrypted using the send subkey of @a auth_context if it * is present, or the session key otherwise. * * @retval * 0 Success * @retval * ENOMEM Insufficient memory * @retval * KRB5_RC_REQUIRED Message replay detection requires @a rcache parameter * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_mk_ncred(krb5_context context, krb5_auth_context auth_context, krb5_creds **ppcreds, krb5_data **ppdata, krb5_replay_data *outdata); /** * Format a @c KRB-CRED message for a single set of credentials. * * @param [in] context Library context * @param [in,out] auth_context Authentication context * @param [in] pcreds Pointer to credentials * @param [out] ppdata Encoded credentials * @param [out] outdata Replay cache data (NULL if not needed) * * This is a convenience function that calls krb5_mk_ncred() with a single set * of credentials. * * @retval * 0 Success * @retval * ENOMEM Insufficient memory * @retval * KRB5_RC_REQUIRED Message replay detection requires @a rcache parameter * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_mk_1cred(krb5_context context, krb5_auth_context auth_context, krb5_creds *pcreds, krb5_data **ppdata, krb5_replay_data *outdata); /** * Read and validate a @c KRB-CRED message. * * @param [in] context Library context * @param [in,out] auth_context Authentication context * @param [in] pcreddata @c KRB-CRED message * @param [out] pppcreds Null-terminated array of forwarded credentials * @param [out] outdata Replay data (NULL if not needed) * * @note The @a outdata argument is required if #KRB5_AUTH_CONTEXT_RET_TIME or * #KRB5_AUTH_CONTEXT_RET_SEQUENCE flag is set in the @a auth_context.` * * @a pcreddata will be decrypted using the receiving subkey if it is present * in @a auth_context, or the session key if the receiving subkey is not * present or fails to decrypt the message. * * Use krb5_free_tgt_creds() to free @a pppcreds when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_rd_cred(krb5_context context, krb5_auth_context auth_context, krb5_data *pcreddata, krb5_creds ***pppcreds, krb5_replay_data *outdata); /** * Get a forwarded TGT and format a @c KRB-CRED message. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [in] rhost Remote host * @param [in] client Client principal of TGT * @param [in] server Principal of server to receive TGT * @param [in] cc Credential cache handle (NULL to use default) * @param [in] forwardable Whether TGT should be forwardable * @param [out] outbuf KRB-CRED message * * Get a TGT for use at the remote host @a rhost and format it into a KRB-CRED * message. If @a rhost is NULL and @a server is of type #KRB5_NT_SRV_HST, * the second component of @a server will be used. * * @retval * 0 Success * @retval * ENOMEM Insufficient memory * @retval * KRB5_PRINC_NOMATCH Requested principal and ticket do not match * @retval * KRB5_NO_TKT_SUPPLIED Request did not supply a ticket * @retval * KRB5_CC_BADNAME Credential cache name or principal name malformed * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_fwd_tgt_creds(krb5_context context, krb5_auth_context auth_context, char *rhost, krb5_principal client, krb5_principal server, krb5_ccache cc, int forwardable, krb5_data *outbuf); /** * Create and initialize an authentication context. * * @param [in] context Library context * @param [out] auth_context Authentication context * * This function creates an authentication context to hold configuration and * state relevant to krb5 functions for authenticating principals and * protecting messages once authentication has occurred. * * By default, flags for the context are set to enable the use of the replay * cache (#KRB5_AUTH_CONTEXT_DO_TIME), but not sequence numbers. Use * krb5_auth_con_setflags() to change the flags. * * The allocated @a auth_context must be freed with krb5_auth_con_free() when * it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_init(krb5_context context, krb5_auth_context *auth_context); /** * Free a krb5_auth_context structure. * * @param [in] context Library context * @param [in] auth_context Authentication context to be freed * * This function frees an auth context allocated by krb5_auth_con_init(). * * @retval 0 (always) */ krb5_error_code KRB5_CALLCONV krb5_auth_con_free(krb5_context context, krb5_auth_context auth_context); /** * Set a flags field in a krb5_auth_context structure. * * @param [in] context Library context * @param [in,out] auth_context Authentication context * @param [in] flags Flags bit mask * * Valid values for @a flags are: * @li #KRB5_AUTH_CONTEXT_DO_TIME Use timestamps * @li #KRB5_AUTH_CONTEXT_RET_TIME Save timestamps * @li #KRB5_AUTH_CONTEXT_DO_SEQUENCE Use sequence numbers * @li #KRB5_AUTH_CONTEXT_RET_SEQUENCE Save sequence numbers * * @retval 0 (always) */ krb5_error_code KRB5_CALLCONV krb5_auth_con_setflags(krb5_context context, krb5_auth_context auth_context, krb5_int32 flags); /** * Retrieve flags from a krb5_auth_context structure. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [out] flags Flags bit mask * * Valid values for @a flags are: * @li #KRB5_AUTH_CONTEXT_DO_TIME Use timestamps * @li #KRB5_AUTH_CONTEXT_RET_TIME Save timestamps * @li #KRB5_AUTH_CONTEXT_DO_SEQUENCE Use sequence numbers * @li #KRB5_AUTH_CONTEXT_RET_SEQUENCE Save sequence numbers * * @retval 0 (always) */ krb5_error_code KRB5_CALLCONV krb5_auth_con_getflags(krb5_context context, krb5_auth_context auth_context, krb5_int32 *flags); /** * Set a checksum callback in an auth context. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [in] func Checksum callback * @param [in] data Callback argument * * Set a callback to obtain checksum data in krb5_mk_req(). The callback will * be invoked after the subkey and local sequence number are stored in @a * auth_context. * * @retval 0 (always) */ krb5_error_code KRB5_CALLCONV krb5_auth_con_set_checksum_func( krb5_context context, krb5_auth_context auth_context, krb5_mk_req_checksum_func func, void *data); /** * Get the checksum callback from an auth context. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [out] func Checksum callback * @param [out] data Callback argument * * @retval 0 (always) */ krb5_error_code KRB5_CALLCONV krb5_auth_con_get_checksum_func( krb5_context context, krb5_auth_context auth_context, krb5_mk_req_checksum_func *func, void **data); /** * Set the local and remote addresses in an auth context. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [in] local_addr Local address * @param [in] remote_addr Remote address * * This function releases the storage assigned to the contents of the local and * remote addresses of @a auth_context and then sets them to @a local_addr and * @a remote_addr respectively. * * @sa krb5_auth_con_genaddrs() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV_WRONG krb5_auth_con_setaddrs(krb5_context context, krb5_auth_context auth_context, krb5_address *local_addr, krb5_address *remote_addr); /** * Retrieve address fields from an auth context. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [out] local_addr Local address (NULL if not needed) * @param [out] remote_addr Remote address (NULL if not needed) * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_getaddrs(krb5_context context, krb5_auth_context auth_context, krb5_address **local_addr, krb5_address **remote_addr); /** * Set local and remote port fields in an auth context. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [in] local_port Local port * @param [in] remote_port Remote port * * This function releases the storage assigned to the contents of the local and * remote ports of @a auth_context and then sets them to @a local_port and @a * remote_port respectively. * * @sa krb5_auth_con_genaddrs() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_setports(krb5_context context, krb5_auth_context auth_context, krb5_address *local_port, krb5_address *remote_port); /** * Set the session key in an auth context. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [in] keyblock User key * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_setuseruserkey(krb5_context context, krb5_auth_context auth_context, krb5_keyblock *keyblock); /** * Retrieve the session key from an auth context as a keyblock. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [out] keyblock Session key * * This function creates a keyblock containing the session key from @a * auth_context. Use krb5_free_keyblock() to free @a keyblock when it is no * longer needed * * @retval 0 Success. Otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_getkey(krb5_context context, krb5_auth_context auth_context, krb5_keyblock **keyblock); /** * Retrieve the session key from an auth context. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [out] key Session key * * This function sets @a key to the session key from @a auth_context. Use * krb5_k_free_key() to release @a key when it is no longer needed. * * @retval 0 (always) */ krb5_error_code KRB5_CALLCONV krb5_auth_con_getkey_k(krb5_context context, krb5_auth_context auth_context, krb5_key *key); /** * Retrieve the send subkey from an auth context as a keyblock. * * @param [in] ctx Library context * @param [in] ac Authentication context * @param [out] keyblock Send subkey * * This function creates a keyblock containing the send subkey from @a * auth_context. Use krb5_free_keyblock() to free @a keyblock when it is no * longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_getsendsubkey(krb5_context ctx, krb5_auth_context ac, krb5_keyblock **keyblock); /** * Retrieve the send subkey from an auth context. * * @param [in] ctx Library context * @param [in] ac Authentication context * @param [out] key Send subkey * * This function sets @a key to the send subkey from @a auth_context. Use * krb5_k_free_key() to release @a key when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_getsendsubkey_k(krb5_context ctx, krb5_auth_context ac, krb5_key *key); /** * Retrieve the receiving subkey from an auth context as a keyblock. * * @param [in] ctx Library context * @param [in] ac Authentication context * @param [out] keyblock Receiving subkey * * This function creates a keyblock containing the receiving subkey from @a * auth_context. Use krb5_free_keyblock() to free @a keyblock when it is no * longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_getrecvsubkey(krb5_context ctx, krb5_auth_context ac, krb5_keyblock **keyblock); /** * Retrieve the receiving subkey from an auth context as a keyblock. * * @param [in] ctx Library context * @param [in] ac Authentication context * @param [out] key Receiving subkey * * This function sets @a key to the receiving subkey from @a auth_context. Use * krb5_k_free_key() to release @a key when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_getrecvsubkey_k(krb5_context ctx, krb5_auth_context ac, krb5_key *key); /** * Set the send subkey in an auth context with a keyblock. * * @param [in] ctx Library context * @param [in] ac Authentication context * @param [in] keyblock Send subkey * * This function sets the send subkey in @a ac to a copy of @a keyblock. * * @retval 0 Success. Otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_setsendsubkey(krb5_context ctx, krb5_auth_context ac, krb5_keyblock *keyblock); /** * Set the send subkey in an auth context. * * @param [in] ctx Library context * @param [in] ac Authentication context * @param [out] key Send subkey * * This function sets the send subkey in @a ac to @a key, incrementing its * reference count. * * @version First introduced in 1.9 * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_setsendsubkey_k(krb5_context ctx, krb5_auth_context ac, krb5_key key); /** * Set the receiving subkey in an auth context with a keyblock. * * @param [in] ctx Library context * @param [in] ac Authentication context * @param [in] keyblock Receiving subkey * * This function sets the receiving subkey in @a ac to a copy of @a keyblock. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_setrecvsubkey(krb5_context ctx, krb5_auth_context ac, krb5_keyblock *keyblock); /** * Set the receiving subkey in an auth context. * * @param [in] ctx Library context * @param [in] ac Authentication context * @param [in] key Receiving subkey * * This function sets the receiving subkey in @a ac to @a key, incrementing its * reference count. * * @version First introduced in 1.9 * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_setrecvsubkey_k(krb5_context ctx, krb5_auth_context ac, krb5_key key); #if KRB5_DEPRECATED /** @deprecated Replaced by krb5_auth_con_getsendsubkey(). */ KRB5_ATTR_DEPRECATED krb5_error_code KRB5_CALLCONV krb5_auth_con_getlocalsubkey(krb5_context context, krb5_auth_context auth_context, krb5_keyblock **keyblock); /** @deprecated Replaced by krb5_auth_con_getrecvsubkey(). */ KRB5_ATTR_DEPRECATED krb5_error_code KRB5_CALLCONV krb5_auth_con_getremotesubkey(krb5_context context, krb5_auth_context auth_context, krb5_keyblock **keyblock); #endif /** * Retrieve the local sequence number from an auth context. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [out] seqnumber Local sequence number * * Retrieve the local sequence number from @a auth_context and return it in @a * seqnumber. The #KRB5_AUTH_CONTEXT_DO_SEQUENCE flag must be set in @a * auth_context for this function to be useful. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_getlocalseqnumber(krb5_context context, krb5_auth_context auth_context, krb5_int32 *seqnumber); /** * Retrieve the remote sequence number from an auth context. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [out] seqnumber Remote sequence number * * Retrieve the remote sequence number from @a auth_context and return it in @a * seqnumber. The #KRB5_AUTH_CONTEXT_DO_SEQUENCE flag must be set in @a * auth_context for this function to be useful. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_getremoteseqnumber(krb5_context context, krb5_auth_context auth_context, krb5_int32 *seqnumber); #if KRB5_DEPRECATED /** @deprecated Not replaced. * * RFC 4120 doesn't have anything like the initvector concept; * only really old protocols may need this API. */ KRB5_ATTR_DEPRECATED krb5_error_code KRB5_CALLCONV krb5_auth_con_initivector(krb5_context context, krb5_auth_context auth_context); #endif /** * Set the replay cache in an auth context. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [in] rcache Replay cache haddle * * This function sets the replay cache in @a auth_context to @a rcache. @a * rcache will be closed when @a auth_context is freed, so the caller should * relinguish that responsibility. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_setrcache(krb5_context context, krb5_auth_context auth_context, krb5_rcache rcache); /** * Retrieve the replay cache from an auth context. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [out] rcache Replay cache handle * * This function fetches the replay cache from @a auth_context. The caller * should not close @a rcache. * * @retval 0 (always) */ krb5_error_code KRB5_CALLCONV_WRONG krb5_auth_con_getrcache(krb5_context context, krb5_auth_context auth_context, krb5_rcache *rcache); /** * Retrieve the authenticator from an auth context. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [out] authenticator Authenticator * * Use krb5_free_authenticator() to free @a authenticator when it is no longer * needed. * * @retval 0 Success. Otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_getauthenticator(krb5_context context, krb5_auth_context auth_context, krb5_authenticator **authenticator); /** * Set checksum type in an an auth context. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [in] cksumtype Checksum type * * This function sets the checksum type in @a auth_context to be used by * krb5_mk_req() for the authenticator checksum. * * @retval 0 Success. Otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_set_req_cksumtype(krb5_context context, krb5_auth_context auth_context, krb5_cksumtype cksumtype); #define KRB5_REALM_BRANCH_CHAR '.' /* * end "func-proto.h" */ /* * begin stuff from libos.h */ /** * @brief Read a password from keyboard input. * * @param [in] context Library context * @param [in] prompt First user prompt when reading password * @param [in] prompt2 Second user prompt (NULL to prompt only once) * @param [out] return_pwd Returned password * @param [in,out] size_return On input, maximum size of password; on output, * size of password read * * This function reads a password from keyboard input and stores it in @a * return_pwd. @a size_return should be set by the caller to the amount of * storage space available in @a return_pwd; on successful return, it will be * set to the length of the password read. * * @a prompt is printed to the terminal, followed by ": ", and then a password * is read from the keyboard. * * If @a prompt2 is NULL, the password is read only once. Otherwise, @a * prompt2 is printed to the terminal and a second password is read. If the * two passwords entered are not identical, KRB5_LIBOS_BADPWDMATCH is returned. * * Echoing is turned off when the password is read. * * @retval * 0 Success * @return * Error in reading or verifying the password * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_read_password(krb5_context context, const char *prompt, const char *prompt2, char *return_pwd, unsigned int *size_return); /** * Convert a principal name to a local name. * * @param [in] context Library context * @param [in] aname Principal name * @param [in] lnsize_in Space available in @a lname * @param [out] lname Local name buffer to be filled in * * If @a aname does not correspond to any local account, KRB5_LNAME_NOTRANS is * returned. If @a lnsize_in is too small for the local name, * KRB5_CONFIG_NOTENUFSPACE is returned. * * Local names, rather than principal names, can be used by programs that * translate to an environment-specific name (for example, a user account * name). * * @retval * 0 Success * @retval * System errors * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_aname_to_localname(krb5_context context, krb5_const_principal aname, int lnsize_in, char *lname); /** * Get the Kerberos realm names for a host. * * @param [in] context Library context * @param [in] host Host name (or NULL) * @param [out] realmsp Null-terminated list of realm names * * Fill in @a realmsp with a pointer to a null-terminated list of realm names. * If there are no known realms for the host, a list containing the referral * (empty) realm is returned. * * If @a host is NULL, the local host's realms are determined. * * Use krb5_free_host_realm() to release @a realmsp when it is no longer * needed. * * @retval * 0 Success * @retval * ENOMEM Insufficient memory * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_get_host_realm(krb5_context context, const char *host, char ***realmsp); /** * * @param [in] context Library context * @param [in] hdata Host name (or NULL) * @param [out] realmsp Null-terminated list of realm names * * Fill in @a realmsp with a pointer to a null-terminated list of realm names * obtained through heuristics or insecure resolution methods which have lower * priority than KDC referrals. * * If @a host is NULL, the local host's realms are determined. * * Use krb5_free_host_realm() to release @a realmsp when it is no longer * needed. */ krb5_error_code KRB5_CALLCONV krb5_get_fallback_host_realm(krb5_context context, krb5_data *hdata, char ***realmsp); /** * Free the memory allocated by krb5_get_host_realm(). * * @param [in] context Library context * @param [in] realmlist List of realm names to be released * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_free_host_realm(krb5_context context, char *const *realmlist); /** * Determine if a principal is authorized to log in as a local user. * * @param [in] context Library context * @param [in] principal Principal name * @param [in] luser Local username * * Determine whether @a principal is authorized to log in as a local user @a * luser. * * @retval * TRUE Principal is authorized to log in as user; FALSE otherwise. */ krb5_boolean KRB5_CALLCONV krb5_kuserok(krb5_context context, krb5_principal principal, const char *luser); /** * Generate auth context addresses from a connected socket. * * @param [in] context Library context * @param [in] auth_context Authentication context * @param [in] infd Connected socket descriptor * @param [in] flags Flags * * This function sets the local and/or remote addresses in @a auth_context * based on the local and remote endpoints of the socket @a infd. The * following flags determine the operations performed: * * @li #KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR Generate local address. * @li #KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR Generate remote address. * @li #KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR Generate local address and port. * @li #KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR Generate remote address and port. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_auth_con_genaddrs(krb5_context context, krb5_auth_context auth_context, int infd, int flags); /** * Set time offset field in a krb5_context structure. * * @param [in] context Library context * @param [in] seconds Real time, seconds portion * @param [in] microseconds Real time, microseconds portion * * This function sets the time offset in @a context to the difference between * the system time and the real time as determined by @a seconds and @a * microseconds. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_set_real_time(krb5_context context, krb5_timestamp seconds, krb5_int32 microseconds); /** * Return the time offsets from the os context. * * @param [in] context Library context * @param [out] seconds Time offset, seconds portion * @param [out] microseconds Time offset, microseconds portion * * This function returns the time offsets in @a context. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_get_time_offsets(krb5_context context, krb5_timestamp *seconds, krb5_int32 *microseconds); /* str_conv.c */ /** * Convert a string to an encryption type. * * @param [in] string String to convert to an encryption type * @param [out] enctypep Encryption type * * @retval 0 Success; otherwise - EINVAL */ krb5_error_code KRB5_CALLCONV krb5_string_to_enctype(char *string, krb5_enctype *enctypep); /** * Convert a string to a salt type. * * @param [in] string String to convert to an encryption type * @param [out] salttypep Salt type to be filled in * * @retval 0 Success; otherwise - EINVAL */ krb5_error_code KRB5_CALLCONV krb5_string_to_salttype(char *string, krb5_int32 *salttypep); /** * Convert a string to a checksum type. * * @param [in] string String to be converted * @param [out] cksumtypep Checksum type to be filled in * * @retval 0 Success; otherwise - EINVAL */ krb5_error_code KRB5_CALLCONV krb5_string_to_cksumtype(char *string, krb5_cksumtype *cksumtypep); /** * Convert a string to a timestamp. * * @param [in] string String to be converted * @param [out] timestampp Pointer to timestamp * * @retval 0 Success; otherwise - EINVAL */ krb5_error_code KRB5_CALLCONV krb5_string_to_timestamp(char *string, krb5_timestamp *timestampp); /** * Convert a string to a delta time value. * * @param [in] string String to be converted * @param [out] deltatp Delta time to be filled in * * @retval 0 Success; otherwise - KRB5_DELTAT_BADFORMAT */ krb5_error_code KRB5_CALLCONV krb5_string_to_deltat(char *string, krb5_deltat *deltatp); /** * Convert an encryption type to a string. * * @param [in] enctype Encryption type * @param [out] buffer Buffer to hold encryption type string * @param [in] buflen Storage available in @a buffer * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_enctype_to_string(krb5_enctype enctype, char *buffer, size_t buflen); /** * Convert an encryption type to a name or alias. * * @param [in] enctype Encryption type * @param [in] shortest Flag * @param [out] buffer Buffer to hold encryption type string * @param [in] buflen Storage available in @a buffer * * If @a shortest is FALSE, this function returns the enctype's canonical name * (like "aes128-cts-hmac-sha1-96"). If @a shortest is TRUE, it return the * enctype's shortest alias (like "aes128-cts"). * * @version First introduced in 1.9 * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_enctype_to_name(krb5_enctype enctype, krb5_boolean shortest, char *buffer, size_t buflen); /** * Convert a salt type to a string. * * @param [in] salttype Salttype to convert * @param [out] buffer Buffer to receive the converted string * @param [in] buflen Storage available in @a buffer * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_salttype_to_string(krb5_int32 salttype, char *buffer, size_t buflen); /** * Convert a checksum type to a string. * * @param [in] cksumtype Checksum type * @param [out] buffer Buffer to hold converted checksum type * @param [in] buflen Storage available in @a buffer * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_cksumtype_to_string(krb5_cksumtype cksumtype, char *buffer, size_t buflen); /** * Convert a timestamp to a string. * * @param [in] timestamp Timestamp to convert * @param [out] buffer Buffer to hold converted timestamp * @param [in] buflen Storage available in @a buffer * * The string is returned in the locale's appropriate date and time * representation. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_timestamp_to_string(krb5_timestamp timestamp, char *buffer, size_t buflen); /** * Convert a timestamp to a string, with optional output padding * * @param [in] timestamp Timestamp to convert * @param [out] buffer Buffer to hold the converted timestamp * @param [in] buflen Length of buffer * @param [in] pad Optional value to pad @a buffer if converted * timestamp does not fill it * * If @a pad is not NULL, @a buffer is padded out to @a buflen - 1 characters * with the value of *@a pad. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_timestamp_to_sfstring(krb5_timestamp timestamp, char *buffer, size_t buflen, char *pad); /** * Convert a relative time value to a string. * * @param [in] deltat Relative time value to convert * @param [out] buffer Buffer to hold time string * @param [in] buflen Storage available in @a buffer * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_deltat_to_string(krb5_deltat deltat, char *buffer, size_t buflen); /* The name of the Kerberos ticket granting service... and its size */ #define KRB5_TGS_NAME "krbtgt" #define KRB5_TGS_NAME_SIZE 6 /* flags for recvauth */ #define KRB5_RECVAUTH_SKIP_VERSION 0x0001 #define KRB5_RECVAUTH_BADAUTHVERS 0x0002 /* initial ticket api functions */ /** Text for prompt used in prompter callback function. */ typedef struct _krb5_prompt { char *prompt; /**< The prompt to show to the user */ int hidden; /**< Boolean; informative prompt or hidden (e.g. PIN) */ krb5_data *reply; /**< Must be allocated before call to prompt routine */ } krb5_prompt; /** Pointer to a prompter callback function. */ typedef krb5_error_code (KRB5_CALLCONV *krb5_prompter_fct)(krb5_context context, void *data, const char *name, const char *banner, int num_prompts, krb5_prompt prompts[]); /** * Prompt user for password. * * @param [in] context Library context * @param data Unused (callback argument) * @param [in] name Name to output during prompt * @param [in] banner Banner to output during prompt * @param [in] num_prompts Number of prompts in @a prompts * @param [in,out] prompts Array of output prompts and replies * * This function is intended to be used as a prompter callback for * krb5_get_init_creds_password() or krb5_init_creds_init(). * * Writes @a name and @a banner to stdout, each followed by a newline, then * writes each prompt field in the @a prompts array, followed by ": ", and sets * the reply field of the entry to a line of input read from stdin. If the * hidden flag is set for a prompt, then terminal echoing is turned off when * input is read. * * @retval * 0 Success * @return * Kerberos error codes * */ krb5_error_code KRB5_CALLCONV krb5_prompter_posix(krb5_context context, void *data, const char *name, const char *banner, int num_prompts, krb5_prompt prompts[]); /** * Long-term password responder question * * This question is asked when the long-term password is needed. It has no * challenge and the response is simply the password string. * * @version First introduced in 1.11 */ #define KRB5_RESPONDER_QUESTION_PASSWORD "password" /** * OTP responder question * * The OTP responder question is asked when the KDC indicates that an OTP * value is required in order to complete the authentication. The JSON format * of the challenge is: * { * "service": , * "tokenInfo": [ * { * "flags": , * "vendor": , * "challenge": , * "length": , * "format": , * "tokenID": , * "algID": , * }, * ... * ] * } * * The answer to the question MUST be JSON formatted: * { * "tokeninfo": , * "value": , * "pin": , * } * * For more detail, please see RFC 6560. * * @version First introduced in 1.11 */ #define KRB5_RESPONDER_QUESTION_OTP "otp" /** * These format constants identify the format of the token value. */ #define KRB5_RESPONDER_OTP_FORMAT_DECIMAL 0 #define KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL 1 #define KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC 2 /** * This flag indicates that the token value MUST be collected. */ #define KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN 0x0001 /** * This flag indicates that the PIN value MUST be collected. */ #define KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN 0x0002 /** * This flag indicates that the token is now in re-synchronization mode with * the server. The user is expected to reply with the next code displayed on * the token. */ #define KRB5_RESPONDER_OTP_FLAGS_NEXTOTP 0x0004 /** * This flag indicates that the PIN MUST be returned as a separate item. This * flag only takes effect if KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN is set. If * this flag is not set, the responder may either concatenate PIN + token value * and store it as "value" in the answer or it may return them separately. If * they are returned separately, they will be concatenated internally. */ #define KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN 0x0008 typedef struct krb5_responder_context_st *krb5_responder_context; /** * List the question names contained in the responder context. * * @param [in] ctx Library context * @param [in] rctx Responder context * * @version First introduced in 1.11 */ const char * const * KRB5_CALLCONV krb5_responder_list_questions(krb5_context ctx, krb5_responder_context rctx); /** * Retrieve the challenge data for a given question in the responder context. * * @param [in] ctx Library context * @param [in] rctx Responder context * @param [in] question Question name * * @version First introduced in 1.11 */ const char * KRB5_CALLCONV krb5_responder_get_challenge(krb5_context ctx, krb5_responder_context rctx, const char *question); /** * Answer a named question in the responder context. * * @param [in] ctx Library context * @param [in] rctx Responder context * @param [in] question Question name * @param [in] answer The string to set (MUST be printable UTF-8) * * @version First introduced in 1.11 */ krb5_error_code KRB5_CALLCONV krb5_responder_set_answer(krb5_context ctx, krb5_responder_context rctx, const char *question, const char *answer); /** * Responder function for an initial credential exchange. * * @param [in] ctx Library context * @param [in] data Callback data * @param [in] rctx Responder context * * A responder function is like a prompter function, but is used for handling * questions and answers as potentially complex data types. Client * preauthentication modules will insert a set of named "questions" into * the responder context. Each question may optionally contain a challenge. * This challenge is printable UTF-8, but may be an encoded value. The * precise encoding and contents of the challenge are specific to the question * asked. When the responder is called, it should answer all the questions it * understands. Like the challenge, the answer MUST be printable UTF-8, but * may contain structured/encoded data formatted to the expected answer format * of the question. * * If a required question is unanswered, the prompter may be called. */ typedef krb5_error_code (KRB5_CALLCONV *krb5_responder_fn)(krb5_context ctx, void *data, krb5_responder_context rctx); typedef struct _krb5_responder_otp_tokeninfo { krb5_flags flags; krb5_int32 format; /* -1 when not specified. */ krb5_int32 length; /* -1 when not specified. */ char *vendor; char *challenge; char *token_id; char *alg_id; } krb5_responder_otp_tokeninfo; typedef struct _krb5_responder_otp_challenge { char *service; krb5_responder_otp_tokeninfo **tokeninfo; } krb5_responder_otp_challenge; /** * Decode the KRB5_RESPONDER_QUESTION_OTP to a C struct. * * A convenience function which parses the KRB5_RESPONDER_QUESTION_OTP * question challenge data, making it available in native C. The main feature * of this function is the ability to interact with OTP tokens without parsing * the JSON. * * The returned value must be passed to krb5_responder_otp_challenge_free() to * be freed. * * @param [in] ctx Library context * @param [in] rctx Responder context * @param [out] chl Challenge structure * * @version First introduced in 1.11 */ krb5_error_code KRB5_CALLCONV krb5_responder_otp_get_challenge(krb5_context ctx, krb5_responder_context rctx, krb5_responder_otp_challenge **chl); /** * Answer the KRB5_RESPONDER_QUESTION_OTP question. * * @param [in] ctx Library context * @param [in] rctx Responder context * @param [in] ti The index of the tokeninfo selected * @param [in] value The value to set, or NULL for none * @param [in] pin The pin to set, or NULL for none * * @version First introduced in 1.11 */ krb5_error_code KRB5_CALLCONV krb5_responder_otp_set_answer(krb5_context ctx, krb5_responder_context rctx, size_t ti, const char *value, const char *pin); /** * Free the value returned by krb5_responder_otp_get_challenge(). * * @param [in] ctx Library context * @param [in] rctx Responder context * @param [in] chl The challenge to free * * @version First introduced in 1.11 */ void KRB5_CALLCONV krb5_responder_otp_challenge_free(krb5_context ctx, krb5_responder_context rctx, krb5_responder_otp_challenge *chl); /** Store options for @c _krb5_get_init_creds */ typedef struct _krb5_get_init_creds_opt { krb5_flags flags; krb5_deltat tkt_life; krb5_deltat renew_life; int forwardable; int proxiable; krb5_enctype *etype_list; int etype_list_length; krb5_address **address_list; krb5_preauthtype *preauth_list; int preauth_list_length; krb5_data *salt; } krb5_get_init_creds_opt; #define KRB5_GET_INIT_CREDS_OPT_TKT_LIFE 0x0001 #define KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE 0x0002 #define KRB5_GET_INIT_CREDS_OPT_FORWARDABLE 0x0004 #define KRB5_GET_INIT_CREDS_OPT_PROXIABLE 0x0008 #define KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST 0x0010 #define KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST 0x0020 #define KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST 0x0040 #define KRB5_GET_INIT_CREDS_OPT_SALT 0x0080 #define KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT 0x0100 #define KRB5_GET_INIT_CREDS_OPT_CANONICALIZE 0x0200 #define KRB5_GET_INIT_CREDS_OPT_ANONYMOUS 0x0400 /** * Allocate a new initial credential options structure. * * @param [in] context Library context * @param [out] opt New options structure * * This function is the preferred way to create an options structure for * getting initial credentials, and is required to make use of certain options. * Use krb5_get_init_creds_opt_free() to free @a opt when it is no longer * needed. * * @retval 0 - Success; Kerberos errors otherwise. */ krb5_error_code KRB5_CALLCONV krb5_get_init_creds_opt_alloc(krb5_context context, krb5_get_init_creds_opt **opt); /** * Free initial credential options. * * @param [in] context Library context * @param [in] opt Options structure to free * * @sa krb5_get_init_creds_opt_alloc() */ void KRB5_CALLCONV krb5_get_init_creds_opt_free(krb5_context context, krb5_get_init_creds_opt *opt); /** @deprecated Use krb5_get_init_creds_opt_alloc() instead. */ void KRB5_CALLCONV krb5_get_init_creds_opt_init(krb5_get_init_creds_opt *opt); /** * Set the ticket lifetime in initial credential options. * * @param [in] opt Options structure * @param [in] tkt_life Ticket lifetime */ void KRB5_CALLCONV krb5_get_init_creds_opt_set_tkt_life(krb5_get_init_creds_opt *opt, krb5_deltat tkt_life); /** * Set the ticket renewal lifetime in initial credential options. * * @param [in] opt Pointer to @a options field * @param [in] renew_life Ticket renewal lifetime */ void KRB5_CALLCONV krb5_get_init_creds_opt_set_renew_life(krb5_get_init_creds_opt *opt, krb5_deltat renew_life); /** * Set or unset the forwardable flag in initial credential options. * * @param [in] opt Options structure * @param [in] forwardable Whether credentials should be forwardable */ void KRB5_CALLCONV krb5_get_init_creds_opt_set_forwardable(krb5_get_init_creds_opt *opt, int forwardable); /** * Set or unset the proxiable flag in initial credential options. * * @param [in] opt Options structure * @param [in] proxiable Whether credentials should be proxiable */ void KRB5_CALLCONV krb5_get_init_creds_opt_set_proxiable(krb5_get_init_creds_opt *opt, int proxiable); /** * Set or unset the canonicalize flag in initial credential options. * * @param [in] opt Options structure * @param [in] canonicalize Whether to canonicalize client principal */ void KRB5_CALLCONV krb5_get_init_creds_opt_set_canonicalize(krb5_get_init_creds_opt *opt, int canonicalize); /** * Set or unset the anonymous flag in initial credential options. * * @param [in] opt Options structure * @param [in] anonymous Whether to make an anonymous request * * This function may be used to request anonymous credentials from the KDC by * setting @a anonymous to non-zero. Note that anonymous credentials are only * a request; clients must verify that credentials are anonymous if that is a * requirement. */ void KRB5_CALLCONV krb5_get_init_creds_opt_set_anonymous(krb5_get_init_creds_opt *opt, int anonymous); /** * Set allowable encryption types in initial credential options. * * @param [in] opt Options structure * @param [in] etype_list Array of encryption types * @param [in] etype_list_length Length of @a etype_list */ void KRB5_CALLCONV krb5_get_init_creds_opt_set_etype_list(krb5_get_init_creds_opt *opt, krb5_enctype *etype_list, int etype_list_length); /** * Set address restrictions in initial credential options. * * @param [in] opt Options structure * @param [in] addresses Null-terminated array of addresses */ void KRB5_CALLCONV krb5_get_init_creds_opt_set_address_list(krb5_get_init_creds_opt *opt, krb5_address **addresses); /** * Set preauthentication types in initial credential options. * * @param [in] opt Options structure * @param [in] preauth_list Array of preauthentication types * @param [in] preauth_list_length Length of @a preauth_list * * This function can be used to perform optimistic preauthentication when * getting initial credentials, in combination with * krb5_get_init_creds_opt_set_salt() and krb5_get_init_creds_opt_set_pa(). */ void KRB5_CALLCONV krb5_get_init_creds_opt_set_preauth_list(krb5_get_init_creds_opt *opt, krb5_preauthtype *preauth_list, int preauth_list_length); /** * Set salt for optimistic preauthentication in initial credential options. * * @param [in] opt Options structure * @param [in] salt Salt data * * When getting initial credentials with a password, a salt string it used to * convert the password to a key. Normally this salt is obtained from the * first KDC reply, but when performing optimistic preauthentication, the * client may need to supply the salt string with this function. */ void KRB5_CALLCONV krb5_get_init_creds_opt_set_salt(krb5_get_init_creds_opt *opt, krb5_data *salt); /** * Set or unset change-password-prompt flag in initial credential options. * * @param [in] opt Options structure * @param [in] prompt Whether to prompt to change password * * This flag is on by default. It controls whether * krb5_get_init_creds_password() will react to an expired-password error by * prompting for a new password and attempting to change the old one. */ void KRB5_CALLCONV krb5_get_init_creds_opt_set_change_password_prompt(krb5_get_init_creds_opt *opt, int prompt); /** Generic preauth option attribute/value pairs */ typedef struct _krb5_gic_opt_pa_data { char *attr; char *value; } krb5_gic_opt_pa_data; /** * Supply options for preauthentication in initial credential options. * * @param [in] context Library context * @param [in] opt Options structure * @param [in] attr Preauthentication option name * @param [in] value Preauthentication option value * * This function allows the caller to supply options for preauthentication. * The values of @a attr and @a value are supplied to each preauthentication * module available within @a context. */ krb5_error_code KRB5_CALLCONV krb5_get_init_creds_opt_set_pa(krb5_context context, krb5_get_init_creds_opt *opt, const char *attr, const char *value); /** * Set location of FAST armor ccache in initial credential options. * * @param [in] context Library context * @param [in] opt Options * @param [in] fast_ccache_name Credential cache name * * Sets the location of a credential cache containing an armor ticket to * protect an initial credential exchange using the FAST protocol extension. * * In version 1.7, setting an armor ccache requires that FAST be used for the * exchange. In version 1.8 or later, setting the armor ccache causes FAST to * be used if the KDC supports it; krb5_get_init_creds_opt_set_fast_flags() * must be used to require that FAST be used. */ krb5_error_code KRB5_CALLCONV krb5_get_init_creds_opt_set_fast_ccache_name(krb5_context context, krb5_get_init_creds_opt *opt, const char *fast_ccache_name); /** * Set FAST armor cache in initial credential options. * * @param [in] context Library context * @param [in] opt Options * @param [in] ccache Credential cache handle * * This function is similar to krb5_get_init_creds_opt_set_fast_ccache_name(), * but uses a credential cache handle instead of a name. * * @version First introduced in 1.9 */ krb5_error_code KRB5_CALLCONV krb5_get_init_creds_opt_set_fast_ccache(krb5_context context, krb5_get_init_creds_opt *opt, krb5_ccache ccache); /** * Set an input credential cache in initial credential options. * * @param [in] context Library context * @param [in] opt Options * @param [in] ccache Credential cache handle * * If an input credential cache is set, then the krb5_get_init_creds family of * APIs will read settings from it. Setting an input ccache is desirable when * the application wishes to perform authentication in the same way (using the * same preauthentication mechanisms, and making the same non-security- * sensitive choices) as the previous authentication attempt, which stored * information in the passed-in ccache. * * @version First introduced in 1.11 */ krb5_error_code KRB5_CALLCONV krb5_get_init_creds_opt_set_in_ccache(krb5_context context, krb5_get_init_creds_opt *opt, krb5_ccache ccache); /** * Set an output credential cache in initial credential options. * * @param [in] context Library context * @param [in] opt Options * @param [in] ccache Credential cache handle * * If an output credential cache is set, then the krb5_get_init_creds family of * APIs will write credentials to it. Setting an output ccache is desirable * both because it simplifies calling code and because it permits the * krb5_get_init_creds APIs to write out configuration information about the * realm to the ccache. */ krb5_error_code KRB5_CALLCONV krb5_get_init_creds_opt_set_out_ccache(krb5_context context, krb5_get_init_creds_opt *opt, krb5_ccache ccache); /** * Set FAST flags in initial credential options. * * @param [in] context Library context * @param [in] opt Options * @param [in] flags FAST flags * * The following flag values are valid: * @li #KRB5_FAST_REQUIRED - Require FAST to be used * * @retval * 0 - Success; Kerberos errors otherwise. */ krb5_error_code KRB5_CALLCONV krb5_get_init_creds_opt_set_fast_flags(krb5_context context, krb5_get_init_creds_opt *opt, krb5_flags flags); /** * Retrieve FAST flags from initial credential options. * * @param [in] context Library context * @param [in] opt Options * @param [out] out_flags FAST flags * * @retval * 0 - Success; Kerberos errors otherwise. */ krb5_error_code KRB5_CALLCONV krb5_get_init_creds_opt_get_fast_flags(krb5_context context, krb5_get_init_creds_opt *opt, krb5_flags *out_flags); /* Fast flags*/ #define KRB5_FAST_REQUIRED 0x0001 /**< Require KDC to support FAST*/ typedef void (KRB5_CALLCONV *krb5_expire_callback_func)(krb5_context context, void *data, krb5_timestamp password_expiration, krb5_timestamp account_expiration, krb5_boolean is_last_req); /** * Set an expiration callback in initial credential options. * * @param [in] context Library context * @param [in] opt Options structure * @param [in] cb Callback function * @param [in] data Callback argument * * Set a callback to receive password and account expiration times. * * This option only applies to krb5_get_init_creds_password(). @a cb will be * invoked if and only if credentials are successfully acquired. The callback * will receive the @a context from the krb5_get_init_creds_password() call and * the @a data argument supplied with this API. The remaining arguments should * be interpreted as follows: * * If @a is_last_req is true, then the KDC reply contained last-req entries * which unambiguously indicated the password expiration, account expiration, * or both. (If either value was not present, the corresponding argument will * be 0.) Furthermore, a non-zero @a password_expiration should be taken as a * suggestion from the KDC that a warning be displayed. * * If @a is_last_req is false, then @a account_expiration will be 0 and @a * password_expiration will contain the expiration time of either the password * or account, or 0 if no expiration time was indicated in the KDC reply. The * callback should independently decide whether to display a password * expiration warning. * * Note that @a cb may be invoked even if credentials are being acquired for * the kadmin/changepw service in order to change the password. It is the * caller's responsibility to avoid displaying a password expiry warning in * this case. * * @warning Setting an expire callback with this API will cause * krb5_get_init_creds_password() not to send password expiry warnings to the * prompter, as it ordinarily may. * * @version First introduced in 1.9 */ krb5_error_code KRB5_CALLCONV krb5_get_init_creds_opt_set_expire_callback(krb5_context context, krb5_get_init_creds_opt *opt, krb5_expire_callback_func cb, void *data); /** * Set the responder function in initial credential options. * * @param [in] context Library context * @param [in] opt Options structure * @param [in] responder Responder function * @param [in] data Responder data argument * * @version First introduced in 1.11 */ krb5_error_code KRB5_CALLCONV krb5_get_init_creds_opt_set_responder(krb5_context context, krb5_get_init_creds_opt *opt, krb5_responder_fn responder, void *data); /** * Get initial credentials using a password. * * @param [in] context Library context * @param [out] creds New credentials * @param [in] client Client principal * @param [in] password Password (or NULL) * @param [in] prompter Prompter function * @param [in] data Prompter callback data * @param [in] start_time Time when ticket becomes valid (0 for now) * @param [in] in_tkt_service Service name of initial credentials (or NULL) * @param [in] k5_gic_options Initial credential options * * This function requests KDC for an initial credentials for @a client using @a * password. If @a password is NULL, a password will be prompted for using @a * prompter if necessary. If @a in_tkt_service is specified, it is parsed as a * principal name (with the realm ignored) and used as the service principal * for the request; otherwise the ticket-granting service is used. * * @sa krb5_verify_init_creds() * * @retval * 0 Success * @retval * EINVAL Invalid argument * @retval * KRB5_KDC_UNREACH Cannot contact any KDC for requested realm * @retval * KRB5_PREAUTH_FAILED Generic Pre-athentication failure * @retval * KRB5_LIBOS_PWDINTR Password read interrupted * @retval * KRB5_REALM_CANT_RESOLVE Cannot resolve network address for KDC in requested realm * @retval * KRB5KDC_ERR_KEY_EXP Password has expired * @retval * KRB5_LIBOS_BADPWDMATCH Password mismatch * @retval * KRB5_CHPW_PWDNULL New password cannot be zero length * @retval * KRB5_CHPW_FAIL Password change failed * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_get_init_creds_password(krb5_context context, krb5_creds *creds, krb5_principal client, const char *password, krb5_prompter_fct prompter, void *data, krb5_deltat start_time, const char *in_tkt_service, krb5_get_init_creds_opt *k5_gic_options); struct _krb5_init_creds_context; typedef struct _krb5_init_creds_context *krb5_init_creds_context; #define KRB5_INIT_CREDS_STEP_FLAG_CONTINUE 0x1 /**< More responses needed */ /** * Free an initial credentials context. * * @param [in] context Library context * @param [in] ctx Initial credentials context */ void KRB5_CALLCONV krb5_init_creds_free(krb5_context context, krb5_init_creds_context ctx); /** * Acquire credentials using an initial credentials context. * * @param [in] context Library context * @param [in] ctx Initial credentials context * * This function synchronously obtains credentials using a context created by * krb5_init_creds_init(). On successful return, the credentials can be * retrieved with krb5_init_creds_get_creds(). * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_init_creds_get(krb5_context context, krb5_init_creds_context ctx); /** * Retrieve acquired credentials from an initial credentials context. * * @param [in] context Library context * @param [in] ctx Initial credentials context * @param [out] creds Acquired credentials * * This function copies the acquired initial credentials from @a ctx into @a * creds, after the successful completion of krb5_init_creds_get() or * krb5_init_creds_step(). Use krb5_free_cred_contents() to free @a creds when * it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_init_creds_get_creds(krb5_context context, krb5_init_creds_context ctx, krb5_creds *creds); /** * Get the last error from KDC from an initial credentials context. * * @param [in] context Library context * @param [in] ctx Initial credentials context * @param [out] error Error from KDC, or NULL if none was received * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_init_creds_get_error(krb5_context context, krb5_init_creds_context ctx, krb5_error **error); /** * Create a context for acquiring initial credentials. * * @param [in] context Library context * @param [in] client Client principal to get initial creds for * @param [in] prompter Prompter callback * @param [in] data Prompter callback argument * @param [in] start_time Time when credentials become valid (0 for now) * @param [in] options Options structure (NULL for default) * @param [out] ctx New initial credentials context * * This function creates a new context for acquiring initial credentials. Use * krb5_init_creds_free() to free @a ctx when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_init_creds_init(krb5_context context, krb5_principal client, krb5_prompter_fct prompter, void *data, krb5_deltat start_time, krb5_get_init_creds_opt *options, krb5_init_creds_context *ctx); /** * Specify a keytab to use for acquiring initial credentials. * * @param [in] context Library context * @param [in] ctx Initial credentials context * @param [in] keytab Key table handle * * This function supplies a keytab containing the client key for an initial * credentials request. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_init_creds_set_keytab(krb5_context context, krb5_init_creds_context ctx, krb5_keytab keytab); /** * Get the next KDC request for acquiring initial credentials. * * @param [in] context Library context * @param [in] ctx Initial credentials context * @param [in] in KDC response (empty on the first call) * @param [out] out Next KDC request * @param [out] realm Realm for next KDC request * @param [out] flags Output flags * * This function constructs the next KDC request in an initial credential * exchange, allowing the caller to control the transport of KDC requests and * replies. On the first call, @a in should be set to an empty buffer; on * subsequent calls, it should be set to the KDC's reply to the previous * request. * * If more requests are needed, @a flags will be set to * #KRB5_INIT_CREDS_STEP_FLAG_CONTINUE and the next request will be placed in * @a out. If no more requests are needed, @a flags will not contain * #KRB5_INIT_CREDS_STEP_FLAG_CONTINUE and @a out will be empty. * * If this function returns @c KRB5KRB_ERR_RESPONSE_TOO_BIG, the caller should * transmit the next request using TCP rather than UDP. If this function * returns any other error, the initial credential exchange has failed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_init_creds_step(krb5_context context, krb5_init_creds_context ctx, krb5_data *in, krb5_data *out, krb5_data *realm, unsigned int *flags); /** * Set a password for acquiring initial credentials. * * @param [in] context Library context * @param [in] ctx Initial credentials context * @param [in] password Password * * This function supplies a password to be used to construct the client key for * an initial credentials request. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_init_creds_set_password(krb5_context context, krb5_init_creds_context ctx, const char *password); /** * Specify a service principal for acquiring initial credentials. * * @param [in] context Library context * @param [in] ctx Initial credentials context * @param [in] service Service principal string * * This function supplies a service principal string to acquire initial * credentials for instead of the default krbtgt service. @a service is parsed * as a principal name; any realm part is ignored. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_init_creds_set_service(krb5_context context, krb5_init_creds_context ctx, const char *service); /** * Retrieve ticket times from an initial credentials context. * * @param [in] context Library context * @param [in] ctx Initial credentials context * @param [out] times Ticket times for acquired credentials * * The initial credentials context must have completed obtaining credentials * via either krb5_init_creds_get() or krb5_init_creds_step(). * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_init_creds_get_times(krb5_context context, krb5_init_creds_context ctx, krb5_ticket_times *times); struct _krb5_tkt_creds_context; typedef struct _krb5_tkt_creds_context *krb5_tkt_creds_context; /** * Create a context to get credentials from a KDC's Ticket Granting Service. * * @param[in] context Library context * @param[in] ccache Credential cache handle * @param[in] creds Input credentials * @param[in] options @ref KRB5_GC options for this request. * @param[out] ctx New TGS request context * * This function prepares to obtain credentials matching @a creds, either by * retrieving them from @a ccache or by making requests to ticket-granting * services beginning with a ticket-granting ticket for the client principal's * realm. * * The resulting TGS acquisition context can be used asynchronously with * krb5_tkt_creds_step() or synchronously with krb5_tkt_creds_get(). See also * krb5_get_credentials() for synchronous use. * * Use krb5_tkt_creds_free() to free @a ctx when it is no longer needed. * * @version First introduced in 1.9 * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_tkt_creds_init(krb5_context context, krb5_ccache ccache, krb5_creds *creds, krb5_flags options, krb5_tkt_creds_context *ctx); /** * Synchronously obtain credentials using a TGS request context. * * @param[in] context Library context * @param[in] ctx TGS request context * * This function synchronously obtains credentials using a context created by * krb5_tkt_creds_init(). On successful return, the credentials can be * retrieved with krb5_tkt_creds_get_creds(). * * @version First introduced in 1.9 * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_tkt_creds_get(krb5_context context, krb5_tkt_creds_context ctx); /** * Retrieve acquired credentials from a TGS request context. * * @param[in] context Library context * @param[in] ctx TGS request context * @param[out] creds Acquired credentials * * This function copies the acquired initial credentials from @a ctx into @a * creds, after the successful completion of krb5_tkt_creds_get() or * krb5_tkt_creds_step(). Use krb5_free_cred_contents() to free @a creds when * it is no longer needed. * * @version First introduced in 1.9 * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_tkt_creds_get_creds(krb5_context context, krb5_tkt_creds_context ctx, krb5_creds *creds); /** * Free a TGS request context. * * @param[in] context Library context * @param[in] ctx TGS request context * * @version First introduced in 1.9 */ void KRB5_CALLCONV krb5_tkt_creds_free(krb5_context context, krb5_tkt_creds_context ctx); #define KRB5_TKT_CREDS_STEP_FLAG_CONTINUE 0x1 /**< More responses needed */ /** * Get the next KDC request in a TGS exchange. * * @param[in] context Library context * @param[in] ctx TGS request context * @param[in] in KDC response (empty on the first call) * @param[out] out Next KDC request * @param[out] realm Realm for next KDC request * @param[out] flags Output flags * * This function constructs the next KDC request for a TGS exchange, allowing * the caller to control the transport of KDC requests and replies. On the * first call, @a in should be set to an empty buffer; on subsequent calls, it * should be set to the KDC's reply to the previous request. * * If more requests are needed, @a flags will be set to * #KRB5_TKT_CREDS_STEP_FLAG_CONTINUE and the next request will be placed in @a * out. If no more requests are needed, @a flags will not contain * #KRB5_TKT_CREDS_STEP_FLAG_CONTINUE and @a out will be empty. * * If this function returns @c KRB5KRB_ERR_RESPONSE_TOO_BIG, the caller should * transmit the next request using TCP rather than UDP. If this function * returns any other error, the TGS exchange has failed. * * @version First introduced in 1.9 * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_tkt_creds_step(krb5_context context, krb5_tkt_creds_context ctx, krb5_data *in, krb5_data *out, krb5_data *realm, unsigned int *flags); /** * Retrieve ticket times from a TGS request context. * * @param[in] context Library context * @param[in] ctx TGS request context * @param[out] times Ticket times for acquired credentials * * The TGS request context must have completed obtaining credentials via either * krb5_tkt_creds_get() or krb5_tkt_creds_step(). * * @version First introduced in 1.9 * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_tkt_creds_get_times(krb5_context context, krb5_tkt_creds_context ctx, krb5_ticket_times *times); /** * Get initial credentials using a key table. * * @param [in] context Library context * @param [out] creds New credentials * @param [in] client Client principal * @param [in] arg_keytab Key table handle * @param [in] start_time Time when ticket becomes valid (0 for now) * @param [in] in_tkt_service Service name of initial credentials (or NLUL) * @param [in] k5_gic_options Initial credential options * * This function requests KDC for an initial credentials for @a client using a * client key stored in @a arg_keytab. If @a in_tkt_service is specified, it * is parsed as a principal name (with the realm ignored) and used as the * service principal for the request; otherwise the ticket-granting service is * used. * * @sa krb5_verify_init_creds() * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_get_init_creds_keytab(krb5_context context, krb5_creds *creds, krb5_principal client, krb5_keytab arg_keytab, krb5_deltat start_time, const char *in_tkt_service, krb5_get_init_creds_opt *k5_gic_options); typedef struct _krb5_verify_init_creds_opt { krb5_flags flags; int ap_req_nofail; /**< boolean */ } krb5_verify_init_creds_opt; #define KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL 0x0001 /** * Initialize a credential verification options structure. * * @param [in] k5_vic_options Verification options structure */ void KRB5_CALLCONV krb5_verify_init_creds_opt_init(krb5_verify_init_creds_opt *k5_vic_options); /** * Set whether credential verification is required. * * @param [in] k5_vic_options Verification options structure * @param [in] ap_req_nofail Whether to require successful verification * * This function determines how krb5_verify_init_creds() behaves if no keytab * information is available. If @a ap_req_nofail is @c FALSE, verification * will be skipped in this case and krb5_verify_init_creds() will return * successfully. If @a ap_req_nofail is @c TRUE, krb5_verify_init_creds() will * not return successfully unless verification can be performed. * * If this function is not used, the behavior of krb5_verify_init_creds() is * determined through configuration. */ void KRB5_CALLCONV krb5_verify_init_creds_opt_set_ap_req_nofail(krb5_verify_init_creds_opt * k5_vic_options, int ap_req_nofail); /** * Verify initial credentials against a keytab. * * @param [in] context Library context * @param [in] creds Initial credentials to be verified * @param [in] server Server principal (or NULL) * @param [in] keytab Key table (NULL to use default keytab) * @param [in,out] ccache Credential cache for fetched creds (or NULL) * @param [in] options Verification options (NULL for default options) * * This function attempts to verify that @a creds were obtained from a KDC with * knowledge of a key in @a keytab, or the default keytab if @a keytab is NULL. * If @a server is provided, the highest-kvno key entry for that principal name * is used to verify the credentials; otherwise, all unique "host" service * principals in the keytab are tried. * * If the specified keytab does not exist, or is empty, or cannot be read, or * does not contain an entry for @a server, then credential verification may be * skipped unless configuration demands that it succeed. The caller can * control this behavior by providing a verification options structure; see * krb5_verify_init_creds_opt_init() and * krb5_verify_init_creds_opt_set_ap_req_nofail(). * * If @a ccache is NULL, any additional credentials fetched during the * verification process will be destroyed. If @a ccache points to NULL, a * memory ccache will be created for the additional credentials and returned in * @a ccache. If @a ccache points to a valid credential cache handle, the * additional credentials will be stored in that cache. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_verify_init_creds(krb5_context context, krb5_creds *creds, krb5_principal server, krb5_keytab keytab, krb5_ccache *ccache, krb5_verify_init_creds_opt *options); /** * Get validated credentials from the KDC. * * @param [in] context Library context * @param [out] creds Validated credentials * @param [in] client Client principal name * @param [in] ccache Credential cache * @param [in] in_tkt_service Server principal string (or NULL) * * This function gets a validated credential using a postdated credential from * @a ccache. If @a in_tkt_service is specified, it is parsed (with the realm * part ignored) and used as the server principal of the credential; * otherwise, the ticket-granting service is used. * * If successful, the validated credential is placed in @a creds. * * @sa krb5_get_renewed_creds() * * @retval * 0 Success * @retval * KRB5_NO_2ND_TKT Request missing second ticket * @retval * KRB5_NO_TKT_SUPPLIED Request did not supply a ticket * @retval * KRB5_PRINC_NOMATCH Requested principal and ticket do not match * @retval * KRB5_KDCREP_MODIFIED KDC reply did not match expectations * @retval * KRB5_KDCREP_SKEW Clock skew too great in KDC reply * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_get_validated_creds(krb5_context context, krb5_creds *creds, krb5_principal client, krb5_ccache ccache, const char *in_tkt_service); /** * Get renewed credential from KDC using an existing credential. * * @param [in] context Library context * @param [out] creds Renewed credentials * @param [in] client Client principal name * @param [in] ccache Credential cache * @param [in] in_tkt_service Server principal string (or NULL) * * This function gets a renewed credential using an existing one from @a * ccache. If @a in_tkt_service is specified, it is parsed (with the realm * part ignored) and used as the server principal of the credential; otherwise, * the ticket-granting service is used. * * If successful, the renewed credential is placed in @a creds. * * @retval * 0 Success * @return * Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_get_renewed_creds(krb5_context context, krb5_creds *creds, krb5_principal client, krb5_ccache ccache, const char *in_tkt_service); /** * Decode an ASN.1-formatted ticket. * * @param [in] code ASN.1-formatted ticket * @param [out] rep Decoded ticket information * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_decode_ticket(const krb5_data *code, krb5_ticket **rep); /** * Retrieve a string value from the appdefaults section of krb5.conf. * * @param [in] context Library context * @param [in] appname Application name * @param [in] realm Realm name * @param [in] option Option to be checked * @param [in] default_value Default value to return if no match is found * @param [out] ret_value String value of @a option * * This function gets the application defaults for @a option based on the given * @a appname and/or @a realm. * * @sa krb5_appdefault_boolean() */ void KRB5_CALLCONV krb5_appdefault_string(krb5_context context, const char *appname, const krb5_data *realm, const char *option, const char *default_value, char ** ret_value); /** * Retrieve a boolean value from the appdefaults section of krb5.conf. * * @param [in] context Library context * @param [in] appname Application name * @param [in] realm Realm name * @param [in] option Option to be checked * @param [in] default_value Default value to return if no match is found * @param [out] ret_value Boolean value of @a option * * This function gets the application defaults for @a option based on the given * @a appname and/or @a realm. * * @sa krb5_appdefault_string() */ void KRB5_CALLCONV krb5_appdefault_boolean(krb5_context context, const char *appname, const krb5_data *realm, const char *option, int default_value, int *ret_value); /* * Prompter enhancements */ /** Prompt for password */ #define KRB5_PROMPT_TYPE_PASSWORD 0x1 /** Prompt for new password (during password change) */ #define KRB5_PROMPT_TYPE_NEW_PASSWORD 0x2 /** Prompt for new password again */ #define KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN 0x3 /** Prompt for preauthentication data (such as an OTP value) */ #define KRB5_PROMPT_TYPE_PREAUTH 0x4 typedef krb5_int32 krb5_prompt_type; /** * Get prompt types array from a context. * * @param [in] context Library context * * @return * Pointer to an array of prompt types corresponding to the prompter's @a * prompts arguments. Each type has one of the following values: * @li #KRB5_PROMPT_TYPE_PASSWORD * @li #KRB5_PROMPT_TYPE_NEW_PASSWORD * @li #KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN * @li #KRB5_PROMPT_TYPE_PREAUTH */ krb5_prompt_type* KRB5_CALLCONV krb5_get_prompt_types(krb5_context context); /* Error reporting */ /** * Set an extended error message for an error code. * * @param [in] ctx Library context * @param [in] code Error code * @param [in] fmt Error string for the error code * @param [in] ... printf(3) style parameters */ void KRB5_CALLCONV_C krb5_set_error_message(krb5_context ctx, krb5_error_code code, const char *fmt, ...) #if !defined(__cplusplus) && (__GNUC__ > 2) __attribute__((__format__(__printf__, 3, 4))) #endif ; /** * Set an extended error message for an error code using a va_list. * * @param [in] ctx Library context * @param [in] code Error code * @param [in] fmt Error string for the error code * @param [in] args List of vprintf(3) style arguments */ void KRB5_CALLCONV krb5_vset_error_message(krb5_context ctx, krb5_error_code code, const char *fmt, va_list args) #if !defined(__cplusplus) && (__GNUC__ > 2) __attribute__((__format__(__printf__, 3, 0))) #endif ; /** * Copy the most recent extended error message from one context to another. * * @param [in] dest_ctx Library context to copy message to * @param [in] src_ctx Library context with current message */ void KRB5_CALLCONV krb5_copy_error_message(krb5_context dest_ctx, krb5_context src_ctx); /** * Get the (possibly extended) error message for a code. * * @param [in] ctx Library context * @param [in] code Error code * * The behavior of krb5_get_error_message() is only defined the first time it * is called after a failed call to a krb5 function using the same context, and * only when the error code passed in is the same as that returned by the krb5 * function. * * This function never returns NULL, so its result may be used unconditionally * as a C string. * * The string returned by this function must be freed using * krb5_free_error_message() * * @note Future versions may return the same string for the second * and following calls. */ const char * KRB5_CALLCONV krb5_get_error_message(krb5_context ctx, krb5_error_code code); /** * Free an error message generated by krb5_get_error_message(). * * @param [in] ctx Library context * @param [in] msg Pointer to error message */ void KRB5_CALLCONV krb5_free_error_message(krb5_context ctx, const char *msg); /** * Clear the extended error message in a context. * * @param [in] ctx Library context * * This function unsets the extended error message in a context, to ensure that * it is not mistakenly applied to another occurrence of the same error code. */ void KRB5_CALLCONV krb5_clear_error_message(krb5_context ctx); /** * Unwrap authorization data. * * @param [in] context Library context * @param [in] type @ref KRB5_AUTHDATA type of @a container * @param [in] container Authorization data to be decoded * @param [out] authdata List of decoded authorization data * * @sa krb5_encode_authdata_container() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_decode_authdata_container(krb5_context context, krb5_authdatatype type, const krb5_authdata *container, krb5_authdata ***authdata); /** * Wrap authorization data in a container. * * @param [in] context Library context * @param [in] type @ref KRB5_AUTHDATA type of @a container * @param [in] authdata List of authorization data to be encoded * @param [out] container List of encoded authorization data * * The result is returned in @a container as a single-element list. * * @sa krb5_decode_authdata_container() * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_encode_authdata_container(krb5_context context, krb5_authdatatype type, krb5_authdata * const*authdata, krb5_authdata ***container); /* * AD-KDCIssued */ /** * Encode and sign AD-KDCIssued authorization data. * * @param [in] context Library context * @param [in] key Session key * @param [in] issuer The name of the issuing principal * @param [in] authdata List of authorization data to be signed * @param [out] ad_kdcissued List containing AD-KDCIssued authdata * * This function wraps a list of authorization data entries @a authdata in an * AD-KDCIssued container (see RFC 4120 section 5.2.6.2) signed with @a key. * The result is returned in @a ad_kdcissued as a single-element list. */ krb5_error_code KRB5_CALLCONV krb5_make_authdata_kdc_issued(krb5_context context, const krb5_keyblock *key, krb5_const_principal issuer, krb5_authdata *const *authdata, krb5_authdata ***ad_kdcissued); /** * Unwrap and verify AD-KDCIssued authorization data. * * @param [in] context Library context * @param [in] key Session key * @param [in] ad_kdcissued AD-KDCIssued authorization data to be unwrapped * @param [out] issuer Name of issuing principal (or NULL) * @param [out] authdata Unwrapped list of authorization data * * This function unwraps an AD-KDCIssued authdatum (see RFC 4120 section * 5.2.6.2) and verifies its signature against @a key. The issuer field of the * authdatum element is returned in @a issuer, and the unwrapped list of * authdata is returned in @a authdata. */ krb5_error_code KRB5_CALLCONV krb5_verify_authdata_kdc_issued(krb5_context context, const krb5_keyblock *key, const krb5_authdata *ad_kdcissued, krb5_principal *issuer, krb5_authdata ***authdata); /* * Windows PAC */ /* Microsoft defined types of data */ #define KRB5_PAC_LOGON_INFO 1 /**< Logon information */ #define KRB5_PAC_CREDENTIALS_INFO 2 /**< Credentials information */ #define KRB5_PAC_SERVER_CHECKSUM 6 /**< Server checksum */ #define KRB5_PAC_PRIVSVR_CHECKSUM 7 /**< KDC checksum */ #define KRB5_PAC_CLIENT_INFO 10 /**< Client name and ticket info */ #define KRB5_PAC_DELEGATION_INFO 11 /**< Constrained delegation info */ #define KRB5_PAC_UPN_DNS_INFO 12 /**< User principal name and DNS info */ struct krb5_pac_data; /** PAC data structure to convey authorization information */ typedef struct krb5_pac_data *krb5_pac; /** * Add a buffer to a PAC handle. * * @param [in] context Library context * @param [in] pac PAC handle * @param [in] type Buffer type * @param [in] data contents * * This function adds a buffer of type @a type and contents @a data to @a pac * if there isn't already a buffer of this type present. * * The valid values of @a type is one of the following: * @li #KRB5_PAC_LOGON_INFO - Logon information * @li #KRB5_PAC_CREDENTIALS_INFO - Credentials information * @li #KRB5_PAC_SERVER_CHECKSUM - Server checksum * @li #KRB5_PAC_PRIVSVR_CHECKSUM - KDC checksum * @li #KRB5_PAC_CLIENT_INFO - Client name and ticket information * @li #KRB5_PAC_DELEGATION_INFO - Constrained delegation information * @li #KRB5_PAC_UPN_DNS_INFO - User principal name and DNS information * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_pac_add_buffer(krb5_context context, krb5_pac pac, krb5_ui_4 type, const krb5_data *data); /** * Free a PAC handle. * * @param [in] context Library context * @param [in] pac PAC to be freed * * This function frees the contents of @a pac and the structure itself. */ void KRB5_CALLCONV krb5_pac_free(krb5_context context, krb5_pac pac); /** * Retrieve a buffer value from a PAC. * * @param [in] context Library context * @param [in] pac PAC handle * @param [in] type Type of buffer to retrieve * @param [out] data Buffer value * * Use krb5_free_data_contents() to free @a data when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_pac_get_buffer(krb5_context context, krb5_pac pac, krb5_ui_4 type, krb5_data *data); /** * Return an array of buffer types in a PAC handle. * * @param [in] context Library context * @param [in] pac PAC handle * @param [out] len Number of entries in @a types * @param [out] types Array of buffer types * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_pac_get_types(krb5_context context, krb5_pac pac, size_t *len, krb5_ui_4 **types); /** * Create an empty Privilege Attribute Certificate (PAC) handle. * * @param [in] context Library context * @param [out] pac New PAC handle * * Use krb5_pac_free() to free @a pac when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_pac_init(krb5_context context, krb5_pac *pac); /** * Unparse an encoded PAC into a new handle. * * @param [in] context Library context * @param [in] ptr PAC buffer * @param [in] len Length of @a ptr * @param [out] pac PAC handle * * Use krb5_pac_free() to free @a pac when it is no longer needed. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_pac_parse(krb5_context context, const void *ptr, size_t len, krb5_pac *pac); /** * Verify a PAC. * * @param [in] context Library context * @param [in] pac PAC handle * @param [in] authtime Expected timestamp * @param [in] principal Expected principal name (or NULL) * @param [in] server Key to validate server checksum (or NULL) * @param [in] privsvr Key to validate KDC checksum (or NULL) * * This function validates @a pac against the supplied @a server, @a privsvr, * @a principal and @a authtime. If @a principal is NULL, the principal and * authtime are not verified. If @a server or @a privsvr is NULL, the * corresponding checksum is not verified. * * If successful, @a pac is marked as verified. * * @note A checksum mismatch can occur if the PAC was copied from a cross-realm * TGT by an ignorant KDC; also Apple Mac OS X Server Open Directory (as of * 10.6) generates PACs with no server checksum at all. One should consider * not failing the whole authentication because of this reason, but, instead, * treating the ticket as if it did not contain a PAC or marking the PAC * information as non-verified. * * @retval 0 Success; otherwise - Kerberos error codes */ krb5_error_code KRB5_CALLCONV krb5_pac_verify(krb5_context context, const krb5_pac pac, krb5_timestamp authtime, krb5_const_principal principal, const krb5_keyblock *server, const krb5_keyblock *privsvr); /** * Sign a PAC. * * @param [in] context Library context * @param [in] pac PAC handle * @param [in] authtime Expected timestamp * @param [in] principal Expected principal name (or NULL) * @param [in] server_key Key for server checksum * @param [in] privsvr_key Key for KDC checksum * @param [out] data Signed PAC encoding * * This function signs @a pac using the keys @a server_key and @a privsvr_key * and returns the signed encoding in @a data. @a pac is modified to include * the server and KDC checksum buffers. Use krb5_free_data_contents() to free * @a data when it is no longer needed. * * @version First introduced in 1.10 */ krb5_error_code KRB5_CALLCONV krb5_pac_sign(krb5_context context, krb5_pac pac, krb5_timestamp authtime, krb5_const_principal principal, const krb5_keyblock *server_key, const krb5_keyblock *privsvr_key, krb5_data *data); /** * Allow the appplication to override the profile's allow_weak_crypto setting. * * @param [in] context Library context * @param [in] enable Boolean flag * * This function allows an application to override the allow_weak_crypto * setting. It is primarily for use by aklog. * * @retval 0 (always) */ krb5_error_code KRB5_CALLCONV krb5_allow_weak_crypto(krb5_context context, krb5_boolean enable); /** * A wrapper for passing information to a @c krb5_trace_callback. * * Currently, it only contains the formatted message as determined * the the format string and arguments of the tracing macro, but it * may be extended to contain more fields in the future. */ typedef struct _krb5_trace_info { const char *message; } krb5_trace_info; typedef void (KRB5_CALLCONV *krb5_trace_callback)(krb5_context context, const krb5_trace_info *info, void *cb_data); /** * Specify a callback function for trace events. * * @param [in] context Library context * @param [in] fn Callback function * @param [in] cb_data Callback data * * Specify a callback for trace events occurring in krb5 operations performed * within @a context. @a fn will be invoked with @a context as the first * argument, @a cb_data as the last argument, and a pointer to a * krb5_trace_info as the second argument. If the trace callback is reset via * this function or @a context is destroyed, @a fn will be invoked with a NULL * second argument so it can clean up @a cb_data. Supply a NULL value for @a * fn to disable trace callbacks within @a context. * * @note This function overrides the information passed through the * @a KRB5_TRACE environment variable. * * @version First introduced in 1.9 * * @return Returns KRB5_TRACE_NOSUPP if tracing is not supported in the library * (unless @a fn is NULL). */ krb5_error_code KRB5_CALLCONV krb5_set_trace_callback(krb5_context context, krb5_trace_callback fn, void *cb_data); /** * Specify a file name for directing trace events. * * @param [in] context Library context * @param [in] filename File name * * Open @a filename for appending (creating it, if necessary) and set up a * callback to write trace events to it. * * @note This function overrides the information passed through the * @a KRB5_TRACE environment variable. * * @version First introduced in 1.9 * * @retval KRB5_TRACE_NOSUPP Tracing is not supported in the library. */ krb5_error_code KRB5_CALLCONV krb5_set_trace_filename(krb5_context context, const char *filename); #if TARGET_OS_MAC # pragma pack(pop) #endif KRB5INT_END_DECLS /* Don't use this! We're going to phase it out. It's just here to keep applications from breaking right away. */ #define krb5_const const #undef KRB5_ATTR_DEPRECATED /** @} */ /* end of KRB5_H group */ #endif /* KRB5_GENERAL__ */ /* * et-h-krb5_err.h: * This file is automatically generated; please do not edit it. */ #include #define KRB5KDC_ERR_NONE (-1765328384L) #define KRB5KDC_ERR_NAME_EXP (-1765328383L) #define KRB5KDC_ERR_SERVICE_EXP (-1765328382L) #define KRB5KDC_ERR_BAD_PVNO (-1765328381L) #define KRB5KDC_ERR_C_OLD_MAST_KVNO (-1765328380L) #define KRB5KDC_ERR_S_OLD_MAST_KVNO (-1765328379L) #define KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN (-1765328378L) #define KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN (-1765328377L) #define KRB5KDC_ERR_PRINCIPAL_NOT_UNIQUE (-1765328376L) #define KRB5KDC_ERR_NULL_KEY (-1765328375L) #define KRB5KDC_ERR_CANNOT_POSTDATE (-1765328374L) #define KRB5KDC_ERR_NEVER_VALID (-1765328373L) #define KRB5KDC_ERR_POLICY (-1765328372L) #define KRB5KDC_ERR_BADOPTION (-1765328371L) #define KRB5KDC_ERR_ETYPE_NOSUPP (-1765328370L) #define KRB5KDC_ERR_SUMTYPE_NOSUPP (-1765328369L) #define KRB5KDC_ERR_PADATA_TYPE_NOSUPP (-1765328368L) #define KRB5KDC_ERR_TRTYPE_NOSUPP (-1765328367L) #define KRB5KDC_ERR_CLIENT_REVOKED (-1765328366L) #define KRB5KDC_ERR_SERVICE_REVOKED (-1765328365L) #define KRB5KDC_ERR_TGT_REVOKED (-1765328364L) #define KRB5KDC_ERR_CLIENT_NOTYET (-1765328363L) #define KRB5KDC_ERR_SERVICE_NOTYET (-1765328362L) #define KRB5KDC_ERR_KEY_EXP (-1765328361L) #define KRB5KDC_ERR_PREAUTH_FAILED (-1765328360L) #define KRB5KDC_ERR_PREAUTH_REQUIRED (-1765328359L) #define KRB5KDC_ERR_SERVER_NOMATCH (-1765328358L) #define KRB5KDC_ERR_MUST_USE_USER2USER (-1765328357L) #define KRB5KDC_ERR_PATH_NOT_ACCEPTED (-1765328356L) #define KRB5KDC_ERR_SVC_UNAVAILABLE (-1765328355L) #define KRB5PLACEHOLD_30 (-1765328354L) #define KRB5KRB_AP_ERR_BAD_INTEGRITY (-1765328353L) #define KRB5KRB_AP_ERR_TKT_EXPIRED (-1765328352L) #define KRB5KRB_AP_ERR_TKT_NYV (-1765328351L) #define KRB5KRB_AP_ERR_REPEAT (-1765328350L) #define KRB5KRB_AP_ERR_NOT_US (-1765328349L) #define KRB5KRB_AP_ERR_BADMATCH (-1765328348L) #define KRB5KRB_AP_ERR_SKEW (-1765328347L) #define KRB5KRB_AP_ERR_BADADDR (-1765328346L) #define KRB5KRB_AP_ERR_BADVERSION (-1765328345L) #define KRB5KRB_AP_ERR_MSG_TYPE (-1765328344L) #define KRB5KRB_AP_ERR_MODIFIED (-1765328343L) #define KRB5KRB_AP_ERR_BADORDER (-1765328342L) #define KRB5KRB_AP_ERR_ILL_CR_TKT (-1765328341L) #define KRB5KRB_AP_ERR_BADKEYVER (-1765328340L) #define KRB5KRB_AP_ERR_NOKEY (-1765328339L) #define KRB5KRB_AP_ERR_MUT_FAIL (-1765328338L) #define KRB5KRB_AP_ERR_BADDIRECTION (-1765328337L) #define KRB5KRB_AP_ERR_METHOD (-1765328336L) #define KRB5KRB_AP_ERR_BADSEQ (-1765328335L) #define KRB5KRB_AP_ERR_INAPP_CKSUM (-1765328334L) #define KRB5KRB_AP_PATH_NOT_ACCEPTED (-1765328333L) #define KRB5KRB_ERR_RESPONSE_TOO_BIG (-1765328332L) #define KRB5PLACEHOLD_53 (-1765328331L) #define KRB5PLACEHOLD_54 (-1765328330L) #define KRB5PLACEHOLD_55 (-1765328329L) #define KRB5PLACEHOLD_56 (-1765328328L) #define KRB5PLACEHOLD_57 (-1765328327L) #define KRB5PLACEHOLD_58 (-1765328326L) #define KRB5PLACEHOLD_59 (-1765328325L) #define KRB5KRB_ERR_GENERIC (-1765328324L) #define KRB5KRB_ERR_FIELD_TOOLONG (-1765328323L) #define KRB5KDC_ERR_CLIENT_NOT_TRUSTED (-1765328322L) #define KRB5KDC_ERR_KDC_NOT_TRUSTED (-1765328321L) #define KRB5KDC_ERR_INVALID_SIG (-1765328320L) #define KRB5KDC_ERR_DH_KEY_PARAMETERS_NOT_ACCEPTED (-1765328319L) #define KRB5KDC_ERR_CERTIFICATE_MISMATCH (-1765328318L) #define KRB5KRB_AP_ERR_NO_TGT (-1765328317L) #define KRB5KDC_ERR_WRONG_REALM (-1765328316L) #define KRB5KRB_AP_ERR_USER_TO_USER_REQUIRED (-1765328315L) #define KRB5KDC_ERR_CANT_VERIFY_CERTIFICATE (-1765328314L) #define KRB5KDC_ERR_INVALID_CERTIFICATE (-1765328313L) #define KRB5KDC_ERR_REVOKED_CERTIFICATE (-1765328312L) #define KRB5KDC_ERR_REVOCATION_STATUS_UNKNOWN (-1765328311L) #define KRB5KDC_ERR_REVOCATION_STATUS_UNAVAILABLE (-1765328310L) #define KRB5KDC_ERR_CLIENT_NAME_MISMATCH (-1765328309L) #define KRB5KDC_ERR_KDC_NAME_MISMATCH (-1765328308L) #define KRB5KDC_ERR_INCONSISTENT_KEY_PURPOSE (-1765328307L) #define KRB5KDC_ERR_DIGEST_IN_CERT_NOT_ACCEPTED (-1765328306L) #define KRB5KDC_ERR_PA_CHECKSUM_MUST_BE_INCLUDED (-1765328305L) #define KRB5KDC_ERR_DIGEST_IN_SIGNED_DATA_NOT_ACCEPTED (-1765328304L) #define KRB5KDC_ERR_PUBLIC_KEY_ENCRYPTION_NOT_SUPPORTED (-1765328303L) #define KRB5KDC_ERR_NO_ACCEPTABLE_KDF (-1765328302L) #define KRB5PLACEHOLD_83 (-1765328301L) #define KRB5PLACEHOLD_84 (-1765328300L) #define KRB5KRB_AP_ERR_IAKERB_KDC_NOT_FOUND (-1765328299L) #define KRB5KRB_AP_ERR_IAKERB_KDC_NO_RESPONSE (-1765328298L) #define KRB5PLACEHOLD_87 (-1765328297L) #define KRB5PLACEHOLD_88 (-1765328296L) #define KRB5PLACEHOLD_89 (-1765328295L) #define KRB5PLACEHOLD_90 (-1765328294L) #define KRB5PLACEHOLD_91 (-1765328293L) #define KRB5PLACEHOLD_92 (-1765328292L) #define KRB5KDC_ERR_UNKNOWN_CRITICAL_FAST_OPTION (-1765328291L) #define KRB5PLACEHOLD_94 (-1765328290L) #define KRB5PLACEHOLD_95 (-1765328289L) #define KRB5PLACEHOLD_96 (-1765328288L) #define KRB5PLACEHOLD_97 (-1765328287L) #define KRB5PLACEHOLD_98 (-1765328286L) #define KRB5PLACEHOLD_99 (-1765328285L) #define KRB5PLACEHOLD_100 (-1765328284L) #define KRB5PLACEHOLD_101 (-1765328283L) #define KRB5PLACEHOLD_102 (-1765328282L) #define KRB5PLACEHOLD_103 (-1765328281L) #define KRB5PLACEHOLD_104 (-1765328280L) #define KRB5PLACEHOLD_105 (-1765328279L) #define KRB5PLACEHOLD_106 (-1765328278L) #define KRB5PLACEHOLD_107 (-1765328277L) #define KRB5PLACEHOLD_108 (-1765328276L) #define KRB5PLACEHOLD_109 (-1765328275L) #define KRB5PLACEHOLD_110 (-1765328274L) #define KRB5PLACEHOLD_111 (-1765328273L) #define KRB5PLACEHOLD_112 (-1765328272L) #define KRB5PLACEHOLD_113 (-1765328271L) #define KRB5PLACEHOLD_114 (-1765328270L) #define KRB5PLACEHOLD_115 (-1765328269L) #define KRB5PLACEHOLD_116 (-1765328268L) #define KRB5PLACEHOLD_117 (-1765328267L) #define KRB5PLACEHOLD_118 (-1765328266L) #define KRB5PLACEHOLD_119 (-1765328265L) #define KRB5PLACEHOLD_120 (-1765328264L) #define KRB5PLACEHOLD_121 (-1765328263L) #define KRB5PLACEHOLD_122 (-1765328262L) #define KRB5PLACEHOLD_123 (-1765328261L) #define KRB5PLACEHOLD_124 (-1765328260L) #define KRB5PLACEHOLD_125 (-1765328259L) #define KRB5PLACEHOLD_126 (-1765328258L) #define KRB5PLACEHOLD_127 (-1765328257L) #define KRB5_ERR_RCSID (-1765328256L) #define KRB5_LIBOS_BADLOCKFLAG (-1765328255L) #define KRB5_LIBOS_CANTREADPWD (-1765328254L) #define KRB5_LIBOS_BADPWDMATCH (-1765328253L) #define KRB5_LIBOS_PWDINTR (-1765328252L) #define KRB5_PARSE_ILLCHAR (-1765328251L) #define KRB5_PARSE_MALFORMED (-1765328250L) #define KRB5_CONFIG_CANTOPEN (-1765328249L) #define KRB5_CONFIG_BADFORMAT (-1765328248L) #define KRB5_CONFIG_NOTENUFSPACE (-1765328247L) #define KRB5_BADMSGTYPE (-1765328246L) #define KRB5_CC_BADNAME (-1765328245L) #define KRB5_CC_UNKNOWN_TYPE (-1765328244L) #define KRB5_CC_NOTFOUND (-1765328243L) #define KRB5_CC_END (-1765328242L) #define KRB5_NO_TKT_SUPPLIED (-1765328241L) #define KRB5KRB_AP_WRONG_PRINC (-1765328240L) #define KRB5KRB_AP_ERR_TKT_INVALID (-1765328239L) #define KRB5_PRINC_NOMATCH (-1765328238L) #define KRB5_KDCREP_MODIFIED (-1765328237L) #define KRB5_KDCREP_SKEW (-1765328236L) #define KRB5_IN_TKT_REALM_MISMATCH (-1765328235L) #define KRB5_PROG_ETYPE_NOSUPP (-1765328234L) #define KRB5_PROG_KEYTYPE_NOSUPP (-1765328233L) #define KRB5_WRONG_ETYPE (-1765328232L) #define KRB5_PROG_SUMTYPE_NOSUPP (-1765328231L) #define KRB5_REALM_UNKNOWN (-1765328230L) #define KRB5_SERVICE_UNKNOWN (-1765328229L) #define KRB5_KDC_UNREACH (-1765328228L) #define KRB5_NO_LOCALNAME (-1765328227L) #define KRB5_MUTUAL_FAILED (-1765328226L) #define KRB5_RC_TYPE_EXISTS (-1765328225L) #define KRB5_RC_MALLOC (-1765328224L) #define KRB5_RC_TYPE_NOTFOUND (-1765328223L) #define KRB5_RC_UNKNOWN (-1765328222L) #define KRB5_RC_REPLAY (-1765328221L) #define KRB5_RC_IO (-1765328220L) #define KRB5_RC_NOIO (-1765328219L) #define KRB5_RC_PARSE (-1765328218L) #define KRB5_RC_IO_EOF (-1765328217L) #define KRB5_RC_IO_MALLOC (-1765328216L) #define KRB5_RC_IO_PERM (-1765328215L) #define KRB5_RC_IO_IO (-1765328214L) #define KRB5_RC_IO_UNKNOWN (-1765328213L) #define KRB5_RC_IO_SPACE (-1765328212L) #define KRB5_TRANS_CANTOPEN (-1765328211L) #define KRB5_TRANS_BADFORMAT (-1765328210L) #define KRB5_LNAME_CANTOPEN (-1765328209L) #define KRB5_LNAME_NOTRANS (-1765328208L) #define KRB5_LNAME_BADFORMAT (-1765328207L) #define KRB5_CRYPTO_INTERNAL (-1765328206L) #define KRB5_KT_BADNAME (-1765328205L) #define KRB5_KT_UNKNOWN_TYPE (-1765328204L) #define KRB5_KT_NOTFOUND (-1765328203L) #define KRB5_KT_END (-1765328202L) #define KRB5_KT_NOWRITE (-1765328201L) #define KRB5_KT_IOERR (-1765328200L) #define KRB5_NO_TKT_IN_RLM (-1765328199L) #define KRB5DES_BAD_KEYPAR (-1765328198L) #define KRB5DES_WEAK_KEY (-1765328197L) #define KRB5_BAD_ENCTYPE (-1765328196L) #define KRB5_BAD_KEYSIZE (-1765328195L) #define KRB5_BAD_MSIZE (-1765328194L) #define KRB5_CC_TYPE_EXISTS (-1765328193L) #define KRB5_KT_TYPE_EXISTS (-1765328192L) #define KRB5_CC_IO (-1765328191L) #define KRB5_FCC_PERM (-1765328190L) #define KRB5_FCC_NOFILE (-1765328189L) #define KRB5_FCC_INTERNAL (-1765328188L) #define KRB5_CC_WRITE (-1765328187L) #define KRB5_CC_NOMEM (-1765328186L) #define KRB5_CC_FORMAT (-1765328185L) #define KRB5_CC_NOT_KTYPE (-1765328184L) #define KRB5_INVALID_FLAGS (-1765328183L) #define KRB5_NO_2ND_TKT (-1765328182L) #define KRB5_NOCREDS_SUPPLIED (-1765328181L) #define KRB5_SENDAUTH_BADAUTHVERS (-1765328180L) #define KRB5_SENDAUTH_BADAPPLVERS (-1765328179L) #define KRB5_SENDAUTH_BADRESPONSE (-1765328178L) #define KRB5_SENDAUTH_REJECTED (-1765328177L) #define KRB5_PREAUTH_BAD_TYPE (-1765328176L) #define KRB5_PREAUTH_NO_KEY (-1765328175L) #define KRB5_PREAUTH_FAILED (-1765328174L) #define KRB5_RCACHE_BADVNO (-1765328173L) #define KRB5_CCACHE_BADVNO (-1765328172L) #define KRB5_KEYTAB_BADVNO (-1765328171L) #define KRB5_PROG_ATYPE_NOSUPP (-1765328170L) #define KRB5_RC_REQUIRED (-1765328169L) #define KRB5_ERR_BAD_HOSTNAME (-1765328168L) #define KRB5_ERR_HOST_REALM_UNKNOWN (-1765328167L) #define KRB5_SNAME_UNSUPP_NAMETYPE (-1765328166L) #define KRB5KRB_AP_ERR_V4_REPLY (-1765328165L) #define KRB5_REALM_CANT_RESOLVE (-1765328164L) #define KRB5_TKT_NOT_FORWARDABLE (-1765328163L) #define KRB5_FWD_BAD_PRINCIPAL (-1765328162L) #define KRB5_GET_IN_TKT_LOOP (-1765328161L) #define KRB5_CONFIG_NODEFREALM (-1765328160L) #define KRB5_SAM_UNSUPPORTED (-1765328159L) #define KRB5_SAM_INVALID_ETYPE (-1765328158L) #define KRB5_SAM_NO_CHECKSUM (-1765328157L) #define KRB5_SAM_BAD_CHECKSUM (-1765328156L) #define KRB5_KT_NAME_TOOLONG (-1765328155L) #define KRB5_KT_KVNONOTFOUND (-1765328154L) #define KRB5_APPL_EXPIRED (-1765328153L) #define KRB5_LIB_EXPIRED (-1765328152L) #define KRB5_CHPW_PWDNULL (-1765328151L) #define KRB5_CHPW_FAIL (-1765328150L) #define KRB5_KT_FORMAT (-1765328149L) #define KRB5_NOPERM_ETYPE (-1765328148L) #define KRB5_CONFIG_ETYPE_NOSUPP (-1765328147L) #define KRB5_OBSOLETE_FN (-1765328146L) #define KRB5_EAI_FAIL (-1765328145L) #define KRB5_EAI_NODATA (-1765328144L) #define KRB5_EAI_NONAME (-1765328143L) #define KRB5_EAI_SERVICE (-1765328142L) #define KRB5_ERR_NUMERIC_REALM (-1765328141L) #define KRB5_ERR_BAD_S2K_PARAMS (-1765328140L) #define KRB5_ERR_NO_SERVICE (-1765328139L) #define KRB5_CC_READONLY (-1765328138L) #define KRB5_CC_NOSUPP (-1765328137L) #define KRB5_DELTAT_BADFORMAT (-1765328136L) #define KRB5_PLUGIN_NO_HANDLE (-1765328135L) #define KRB5_PLUGIN_OP_NOTSUPP (-1765328134L) #define KRB5_ERR_INVALID_UTF8 (-1765328133L) #define KRB5_ERR_FAST_REQUIRED (-1765328132L) #define KRB5_LOCAL_ADDR_REQUIRED (-1765328131L) #define KRB5_REMOTE_ADDR_REQUIRED (-1765328130L) #define KRB5_TRACE_NOSUPP (-1765328129L) #define ERROR_TABLE_BASE_krb5 (-1765328384L) extern const struct error_table et_krb5_error_table; #if !defined(_WIN32) /* for compatibility with older versions... */ extern void initialize_krb5_error_table (void) /*@modifies internalState@*/; #else #define initialize_krb5_error_table() #endif #if !defined(_WIN32) #define init_krb5_err_tbl initialize_krb5_error_table #define krb5_err_base ERROR_TABLE_BASE_krb5 #endif /* * et-h-k5e1_err.h: * This file is automatically generated; please do not edit it. */ #include #define KRB5_PLUGIN_VER_NOTSUPP (-1750600192L) #define KRB5_PLUGIN_BAD_MODULE_SPEC (-1750600191L) #define KRB5_PLUGIN_NAME_NOTFOUND (-1750600190L) #define KRB5KDC_ERR_DISCARD (-1750600189L) #define KRB5_DCC_CANNOT_CREATE (-1750600188L) #define ERROR_TABLE_BASE_k5e1 (-1750600192L) extern const struct error_table et_k5e1_error_table; #if !defined(_WIN32) /* for compatibility with older versions... */ extern void initialize_k5e1_error_table (void) /*@modifies internalState@*/; #else #define initialize_k5e1_error_table() #endif #if !defined(_WIN32) #define init_k5e1_err_tbl initialize_k5e1_error_table #define k5e1_err_base ERROR_TABLE_BASE_k5e1 #endif /* * et-h-kdb5_err.h: * This file is automatically generated; please do not edit it. */ #include #define KRB5_KDB_RCSID (-1780008448L) #define KRB5_KDB_INUSE (-1780008447L) #define KRB5_KDB_UK_SERROR (-1780008446L) #define KRB5_KDB_UK_RERROR (-1780008445L) #define KRB5_KDB_UNAUTH (-1780008444L) #define KRB5_KDB_NOENTRY (-1780008443L) #define KRB5_KDB_ILL_WILDCARD (-1780008442L) #define KRB5_KDB_DB_INUSE (-1780008441L) #define KRB5_KDB_DB_CHANGED (-1780008440L) #define KRB5_KDB_TRUNCATED_RECORD (-1780008439L) #define KRB5_KDB_RECURSIVELOCK (-1780008438L) #define KRB5_KDB_NOTLOCKED (-1780008437L) #define KRB5_KDB_BADLOCKMODE (-1780008436L) #define KRB5_KDB_DBNOTINITED (-1780008435L) #define KRB5_KDB_DBINITED (-1780008434L) #define KRB5_KDB_ILLDIRECTION (-1780008433L) #define KRB5_KDB_NOMASTERKEY (-1780008432L) #define KRB5_KDB_BADMASTERKEY (-1780008431L) #define KRB5_KDB_INVALIDKEYSIZE (-1780008430L) #define KRB5_KDB_CANTREAD_STORED (-1780008429L) #define KRB5_KDB_BADSTORED_MKEY (-1780008428L) #define KRB5_KDB_NOACTMASTERKEY (-1780008427L) #define KRB5_KDB_KVNONOMATCH (-1780008426L) #define KRB5_KDB_STORED_MKEY_NOTCURRENT (-1780008425L) #define KRB5_KDB_CANTLOCK_DB (-1780008424L) #define KRB5_KDB_DB_CORRUPT (-1780008423L) #define KRB5_KDB_BAD_VERSION (-1780008422L) #define KRB5_KDB_BAD_SALTTYPE (-1780008421L) #define KRB5_KDB_BAD_ENCTYPE (-1780008420L) #define KRB5_KDB_BAD_CREATEFLAGS (-1780008419L) #define KRB5_KDB_NO_PERMITTED_KEY (-1780008418L) #define KRB5_KDB_NO_MATCHING_KEY (-1780008417L) #define KRB5_KDB_DBTYPE_NOTFOUND (-1780008416L) #define KRB5_KDB_DBTYPE_NOSUP (-1780008415L) #define KRB5_KDB_DBTYPE_INIT (-1780008414L) #define KRB5_KDB_SERVER_INTERNAL_ERR (-1780008413L) #define KRB5_KDB_ACCESS_ERROR (-1780008412L) #define KRB5_KDB_INTERNAL_ERROR (-1780008411L) #define KRB5_KDB_CONSTRAINT_VIOLATION (-1780008410L) #define KRB5_LOG_CONV (-1780008409L) #define KRB5_LOG_UNSTABLE (-1780008408L) #define KRB5_LOG_CORRUPT (-1780008407L) #define KRB5_LOG_ERROR (-1780008406L) #define KRB5_KDB_DBTYPE_MISMATCH (-1780008405L) #define KRB5_KDB_POLICY_REF (-1780008404L) #define KRB5_KDB_STRINGS_TOOLONG (-1780008403L) #define ERROR_TABLE_BASE_kdb5 (-1780008448L) extern const struct error_table et_kdb5_error_table; #if !defined(_WIN32) /* for compatibility with older versions... */ extern void initialize_kdb5_error_table (void) /*@modifies internalState@*/; #else #define initialize_kdb5_error_table() #endif #if !defined(_WIN32) #define init_kdb5_err_tbl initialize_kdb5_error_table #define kdb5_err_base ERROR_TABLE_BASE_kdb5 #endif /* * et-h-kv5m_err.h: * This file is automatically generated; please do not edit it. */ #include #define KV5M_NONE (-1760647424L) #define KV5M_PRINCIPAL (-1760647423L) #define KV5M_DATA (-1760647422L) #define KV5M_KEYBLOCK (-1760647421L) #define KV5M_CHECKSUM (-1760647420L) #define KV5M_ENCRYPT_BLOCK (-1760647419L) #define KV5M_ENC_DATA (-1760647418L) #define KV5M_CRYPTOSYSTEM_ENTRY (-1760647417L) #define KV5M_CS_TABLE_ENTRY (-1760647416L) #define KV5M_CHECKSUM_ENTRY (-1760647415L) #define KV5M_AUTHDATA (-1760647414L) #define KV5M_TRANSITED (-1760647413L) #define KV5M_ENC_TKT_PART (-1760647412L) #define KV5M_TICKET (-1760647411L) #define KV5M_AUTHENTICATOR (-1760647410L) #define KV5M_TKT_AUTHENT (-1760647409L) #define KV5M_CREDS (-1760647408L) #define KV5M_LAST_REQ_ENTRY (-1760647407L) #define KV5M_PA_DATA (-1760647406L) #define KV5M_KDC_REQ (-1760647405L) #define KV5M_ENC_KDC_REP_PART (-1760647404L) #define KV5M_KDC_REP (-1760647403L) #define KV5M_ERROR (-1760647402L) #define KV5M_AP_REQ (-1760647401L) #define KV5M_AP_REP (-1760647400L) #define KV5M_AP_REP_ENC_PART (-1760647399L) #define KV5M_RESPONSE (-1760647398L) #define KV5M_SAFE (-1760647397L) #define KV5M_PRIV (-1760647396L) #define KV5M_PRIV_ENC_PART (-1760647395L) #define KV5M_CRED (-1760647394L) #define KV5M_CRED_INFO (-1760647393L) #define KV5M_CRED_ENC_PART (-1760647392L) #define KV5M_PWD_DATA (-1760647391L) #define KV5M_ADDRESS (-1760647390L) #define KV5M_KEYTAB_ENTRY (-1760647389L) #define KV5M_CONTEXT (-1760647388L) #define KV5M_OS_CONTEXT (-1760647387L) #define KV5M_ALT_METHOD (-1760647386L) #define KV5M_ETYPE_INFO_ENTRY (-1760647385L) #define KV5M_DB_CONTEXT (-1760647384L) #define KV5M_AUTH_CONTEXT (-1760647383L) #define KV5M_KEYTAB (-1760647382L) #define KV5M_RCACHE (-1760647381L) #define KV5M_CCACHE (-1760647380L) #define KV5M_PREAUTH_OPS (-1760647379L) #define KV5M_SAM_CHALLENGE (-1760647378L) #define KV5M_SAM_CHALLENGE_2 (-1760647377L) #define KV5M_SAM_KEY (-1760647376L) #define KV5M_ENC_SAM_RESPONSE_ENC (-1760647375L) #define KV5M_ENC_SAM_RESPONSE_ENC_2 (-1760647374L) #define KV5M_SAM_RESPONSE (-1760647373L) #define KV5M_SAM_RESPONSE_2 (-1760647372L) #define KV5M_PREDICTED_SAM_RESPONSE (-1760647371L) #define KV5M_PASSWD_PHRASE_ELEMENT (-1760647370L) #define KV5M_GSS_OID (-1760647369L) #define KV5M_GSS_QUEUE (-1760647368L) #define KV5M_FAST_ARMORED_REQ (-1760647367L) #define KV5M_FAST_REQ (-1760647366L) #define KV5M_FAST_RESPONSE (-1760647365L) #define KV5M_AUTHDATA_CONTEXT (-1760647364L) #define ERROR_TABLE_BASE_kv5m (-1760647424L) extern const struct error_table et_kv5m_error_table; #if !defined(_WIN32) /* for compatibility with older versions... */ extern void initialize_kv5m_error_table (void) /*@modifies internalState@*/; #else #define initialize_kv5m_error_table() #endif #if !defined(_WIN32) #define init_kv5m_err_tbl initialize_kv5m_error_table #define kv5m_err_base ERROR_TABLE_BASE_kv5m #endif /* * et-h-krb524_err.h: * This file is automatically generated; please do not edit it. */ #include #define KRB524_BADKEY (-1750206208L) #define KRB524_BADADDR (-1750206207L) #define KRB524_BADPRINC (-1750206206L) #define KRB524_BADREALM (-1750206205L) #define KRB524_V4ERR (-1750206204L) #define KRB524_ENCFULL (-1750206203L) #define KRB524_DECEMPTY (-1750206202L) #define KRB524_NOTRESP (-1750206201L) #define KRB524_KRB4_DISABLED (-1750206200L) #define ERROR_TABLE_BASE_k524 (-1750206208L) extern const struct error_table et_k524_error_table; #if !defined(_WIN32) /* for compatibility with older versions... */ extern void initialize_k524_error_table (void) /*@modifies internalState@*/; #else #define initialize_k524_error_table() #endif #if !defined(_WIN32) #define init_k524_err_tbl initialize_k524_error_table #define k524_err_base ERROR_TABLE_BASE_k524 #endif /* * et-h-asn1_err.h: * This file is automatically generated; please do not edit it. */ #include #define ASN1_BAD_TIMEFORMAT (1859794432L) #define ASN1_MISSING_FIELD (1859794433L) #define ASN1_MISPLACED_FIELD (1859794434L) #define ASN1_TYPE_MISMATCH (1859794435L) #define ASN1_OVERFLOW (1859794436L) #define ASN1_OVERRUN (1859794437L) #define ASN1_BAD_ID (1859794438L) #define ASN1_BAD_LENGTH (1859794439L) #define ASN1_BAD_FORMAT (1859794440L) #define ASN1_PARSE_ERROR (1859794441L) #define ASN1_BAD_GMTIME (1859794442L) #define ASN1_MISMATCH_INDEF (1859794443L) #define ASN1_MISSING_EOC (1859794444L) #define ASN1_OMITTED (1859794445L) #define ERROR_TABLE_BASE_asn1 (1859794432L) extern const struct error_table et_asn1_error_table; #if !defined(_WIN32) /* for compatibility with older versions... */ extern void initialize_asn1_error_table (void) /*@modifies internalState@*/; #else #define initialize_asn1_error_table() #endif #if !defined(_WIN32) #define init_asn1_err_tbl initialize_asn1_error_table #define asn1_err_base ERROR_TABLE_BASE_asn1 #endif #endif /* KRB5_KRB5_H_INCLUDED */ 070701000a2552000081a40000000000000000000000015125a07400001683000000b500010002ffffffffffffffff0000003000000000root/usr/local/include/krb5/kadm5_hook_plugin.h/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* * Copyright (C) 2010 by the Massachusetts Institute of Technology. * All rights reserved. * * Export of this software from the United States of America may * require a specific license from the United States Government. * It is the responsibility of any person or organization contemplating * export to obtain such a license before exporting. * * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and * distribute this software and its documentation for any purpose and * without fee is hereby granted, provided that the above copyright * notice appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity pertaining * to distribution of the software without specific, written prior * permission. Furthermore if you modify this software you must label * your software as modified software and not distribute it in such a * fashion that it might be confused with the original M.I.T. software. * M.I.T. makes no representations about the suitability of * this software for any purpose. It is provided "as is" without express * or implied warranty. */ #ifndef H_KRB5_KADM5_HOOK_PLUGIN #define H_KRB5_KADM5_HOOK_PLUGIN /** * @file krb5/krb5_kadm5_hook_plugin.h * Provide a plugin interface for kadm5 operations. This interface * permits a plugin to intercept principal modification, creation and * change password operations. Operations run at two stages: a * precommit stage that runs before the operation is committed to the * database and a postcommit operation that runs after the database * is updated; see #kadm5_hook_stage for details on semantics. * * This interface is based on a proposed extension to Heimdal by Russ * Allbery; it is likely that Heimdal will adopt an approach based on * stacked kdb modules rather than this interface. For MIT, writing a * plugin to this interface is significantly easier than stacking kdb * modules. Also, the kadm5 interface is significantly more stable * than the kdb interface, so this approach is more desirable than * stacked kdb modules. * * This interface depends on kadm5/admin.h. As such, the interface * does not provide strong guarantees of ABI stability. * * kadm5_hook plugins should: * kadm5_hook__initvt, matching the signature: * * krb5_error_code * kadm5_hook_modname_initvt(krb5_context context, int maj_ver, int min_ver, * krb5_plugin_vtable vtable); * * The initvt function should: * * - Check that the supplied maj_ver number is supported by the module, or * return KRB5_PLUGIN_VER_NOTSUPP if it is not. * * - Cast the vtable pointer as appropriate for maj_ver: * maj_ver == 1: Cast to kadm5_hook_vftable_1 * * - Initialize the methods of the vtable, stopping as appropriate for the * supplied min_ver. Optional methods may be left uninitialized. * * Memory for the vtable is allocated by the caller, not by the module. */ #include #include #include /** * Whether the operation is being run before or after the database * update. */ enum kadm5_hook_stage { /** In this stage, any plugin failure prevents following plugins from * running and aborts the operation.*/ KADM5_HOOK_STAGE_PRECOMMIT, /** In this stage, plugin failures are logged but otherwise ignored.*/ KADM5_HOOK_STAGE_POSTCOMMIT }; /** Opaque module data pointer. */ typedef struct kadm5_hook_modinfo_st kadm5_hook_modinfo; /** * Interface for the v1 virtual table for the kadm5_hook plugin. * All entry points are optional. The name field must be provided. */ typedef struct kadm5_hook_vtable_1_st { /** A text string identifying the plugin for logging messages. */ const char *name; /** Initialize a plugin module. * @param modinfo returns newly allocated module info for future * calls. Cleaned up by the fini() function. */ kadm5_ret_t (*init)(krb5_context, kadm5_hook_modinfo **modinfo); /** Clean up a module and free @a modinfo. */ void (*fini)(krb5_context, kadm5_hook_modinfo *modinfo); /** Indicates that the password is being changed. * @param stage is an integer from #kadm5_hook_stage enumeration * @param keepold is true if existing keys are being kept. * @param newpass is NULL if the key sare being randomized. */ kadm5_ret_t (*chpass)(krb5_context, kadm5_hook_modinfo *modinfo, int stage, krb5_principal, krb5_boolean keepold, int n_ks_tuple, krb5_key_salt_tuple *ks_tuple, const char *newpass); /** Indicate a principal is created. */ kadm5_ret_t (*create)(krb5_context, kadm5_hook_modinfo *, int stage, kadm5_principal_ent_t, long mask, int n_ks_tuple, krb5_key_salt_tuple *ks_tuple, const char *password); /** Modify a principal. */ kadm5_ret_t (*modify)(krb5_context, kadm5_hook_modinfo *, int stage, kadm5_principal_ent_t, long mask); /** Indicate a principal is deleted. */ kadm5_ret_t (*remove)(krb5_context, kadm5_hook_modinfo *modinfo, int stage, krb5_principal); /* End of minor version 1. */ } kadm5_hook_vftable_1; #endif /*H_KRB5_KADM5_HOOK_PLUGIN*/ 070701000a2554000081a40000000000000000000000015125a07400000a40000000b500010002ffffffffffffffff0000002c00000000root/usr/local/include/krb5/locate_plugin.h/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* * Copyright 2006 Massachusetts Institute of Technology. * All Rights Reserved. * * Export of this software from the United States of America may * require a specific license from the United States Government. * It is the responsibility of any person or organization contemplating * export to obtain such a license before exporting. * * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and * distribute this software and its documentation for any purpose and * without fee is hereby granted, provided that the above copyright * notice appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity pertaining * to distribution of the software without specific, written prior * permission. Furthermore if you modify this software you must label * your software as modified software and not distribute it in such a * fashion that it might be confused with the original M.I.T. software. * M.I.T. makes no representations about the suitability of * this software for any purpose. It is provided "as is" without express * or implied warranty. */ /* * * Service location plugin definitions for Kerberos 5. */ #ifndef KRB5_LOCATE_PLUGIN_H_INCLUDED #define KRB5_LOCATE_PLUGIN_H_INCLUDED #include enum locate_service_type { locate_service_kdc = 1, locate_service_master_kdc, locate_service_kadmin, locate_service_krb524, locate_service_kpasswd }; typedef struct krb5plugin_service_locate_ftable { int minor_version; /* currently 0 */ /* Per-context setup and teardown. Returned void* blob is private to the plugin. */ krb5_error_code (*init)(krb5_context, void **); void (*fini)(void *); /* Callback function returns non-zero if the plugin function should quit and return; this may be because of an error, or may indicate we've already contacted the service, whatever. The lookup function should only return an error if it detects a problem, not if the callback function tells it to quit. */ krb5_error_code (*lookup)(void *, enum locate_service_type svc, const char *realm, int socktype, int family, int (*cbfunc)(void *,int,struct sockaddr *), void *cbdata); } krb5plugin_service_locate_ftable; /* extern krb5plugin_service_locate_ftable service_locator; */ #endif 070701000a2558000081a40000000000000000000000015125a07400002f92000000b500010002ffffffffffffffff0000002100000000root/usr/local/include/profile.h/* * profile.h */ #ifndef _KRB5_PROFILE_H #define _KRB5_PROFILE_H #if defined(_WIN32) #include #endif #if defined(__MACH__) && defined(__APPLE__) # include # if TARGET_RT_MAC_CFM # error "Use KfM 4.0 SDK headers for CFM compilation." # endif #endif #ifndef KRB5_CALLCONV #define KRB5_CALLCONV #define KRB5_CALLCONV_C #endif typedef struct _profile_t *profile_t; /* Used by profile_init_flags(). */ #define PROFILE_INIT_ALLOW_MODULE 0x0001 /* Allow module declaration */ /* * Used by the profile iterator in prof_get.c */ #define PROFILE_ITER_LIST_SECTION 0x0001 #define PROFILE_ITER_SECTIONS_ONLY 0x0002 #define PROFILE_ITER_RELATIONS_ONLY 0x0004 #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef char* profile_filespec_t; /* path as C string */ typedef char* profile_filespec_list_t; /* list of : separated paths, C string */ typedef const char * const_profile_filespec_t; /* path as C string */ typedef const char * const_profile_filespec_list_t; /* list of : separated paths, C string */ long KRB5_CALLCONV profile_init (const_profile_filespec_t *files, profile_t *ret_profile); long KRB5_CALLCONV profile_init_flags (const_profile_filespec_t *files, int flags, profile_t *ret_profile); long KRB5_CALLCONV profile_init_path (const_profile_filespec_list_t filelist, profile_t *ret_profile); long KRB5_CALLCONV profile_flush (profile_t profile); long KRB5_CALLCONV profile_flush_to_file (profile_t profile, const_profile_filespec_t outfile); long KRB5_CALLCONV profile_flush_to_buffer (profile_t profile, char **bufp); void KRB5_CALLCONV profile_free_buffer (profile_t profile, char *buf); long KRB5_CALLCONV profile_is_writable (profile_t profile, int *writable); long KRB5_CALLCONV profile_is_modified (profile_t profile, int *modified); void KRB5_CALLCONV profile_abandon (profile_t profile); void KRB5_CALLCONV profile_release (profile_t profile); long KRB5_CALLCONV profile_get_values (profile_t profile, const char *const *names, char ***ret_values); void KRB5_CALLCONV profile_free_list (char **list); long KRB5_CALLCONV profile_get_string (profile_t profile, const char *name, const char *subname, const char *subsubname, const char *def_val, char **ret_string); long KRB5_CALLCONV profile_get_integer (profile_t profile, const char *name, const char *subname, const char *subsubname, int def_val, int *ret_default); long KRB5_CALLCONV profile_get_boolean (profile_t profile, const char *name, const char *subname, const char *subsubname, int def_val, int *ret_default); long KRB5_CALLCONV profile_get_relation_names (profile_t profile, const char **names, char ***ret_names); long KRB5_CALLCONV profile_get_subsection_names (profile_t profile, const char **names, char ***ret_names); long KRB5_CALLCONV profile_iterator_create (profile_t profile, const char *const *names, int flags, void **ret_iter); void KRB5_CALLCONV profile_iterator_free (void **iter_p); long KRB5_CALLCONV profile_iterator (void **iter_p, char **ret_name, char **ret_value); void KRB5_CALLCONV profile_release_string (char *str); long KRB5_CALLCONV profile_update_relation (profile_t profile, const char **names, const char *old_value, const char *new_value); long KRB5_CALLCONV profile_clear_relation (profile_t profile, const char **names); long KRB5_CALLCONV profile_rename_section (profile_t profile, const char **names, const char *new_name); long KRB5_CALLCONV profile_add_relation (profile_t profile, const char **names, const char *new_value); /* * profile_init_vtable allows a caller to create a profile-compatible object * with a different back end. */ /* * Mandatory: Look up all of the relations for names, placing the resulting * values in *ret_values. If no relations exist, return PROF_NO_RELATION, or * PROF_NO_SECTION to indicate that one of the intermediate names does not * exist as a section. The list will be freed with free_values. */ typedef long (*profile_get_values_fn)(void *cbdata, const char *const *names, char ***ret_values); /* Mandatory: Free a list of strings returned by get_values. */ typedef void (*profile_free_values_fn)(void *cbdata, char **values); /* Optional: Release any data associated with the profile. */ typedef void (*profile_cleanup_fn)(void *cbdata); /* * Optional (mandatory if cleanup is defined): Generate a new cbdata pointer * for a copy of the profile. If not implemented, the new profile will receive * the same cbdata pointer as the old one. */ typedef long (*profile_copy_fn)(void *cbdata, void **ret_cbdata); /* * Optional: Create an iterator handle. * * If flags contains PROFILE_ITER_LIST_SECTION, iterate over all of the * relations and sections within names. Otherwise, iterate over the relation * values for names, or produce a single section result if names is a section. * * If flags contains PROFILE_ITER_SECTIONS_ONLY, produce only sections. * * If flags contains PROFILE_ITER_RELATIONS_ONLY, produce only relations. */ typedef long (*profile_iterator_create_fn)(void *cbdata, const char *const *names, int flags, void **ret_iter); /* * Optional (mandatory if iterator_create is defined): Produce the next * relation or section in an iteration. If producing a section result, set * *ret_value to NULL. The returned strings will be freed with free_string. */ typedef long (*profile_iterator_fn)(void *cbdata, void *iter, char **ret_name, char **ret_value); /* * Optional (mandatory if iterator_create is defined): Free the memory for an * iterator. */ typedef void (*profile_iterator_free_fn)(void *cbdata, void *iter); /* Optional (mandatory if iterator is defined): Free a string value. */ typedef void (*profile_free_string_fn)(void *cbdata, char *string); /* * Optional: Determine if a profile is writable. If not implemented, the * profile is never writable. */ typedef long (*profile_writable_fn)(void *cbdata, int *writable); /* * Optional: Determine if a profile is modified in memory relative to the * persistent store. If not implemented, the profile is assumed to never be * modified. */ typedef long (*profile_modified_fn)(void *cbdata, int *modified); /* * Optional: Change the value of a relation, or remove it if new_value is NULL. * If old_value is set and the relation does not have that value, return * PROF_NO_RELATION. */ typedef long (*profile_update_relation_fn)(void *cbdata, const char **names, const char *old_value, const char *new_value); /* * Optional: Rename a section to new_name, or remove the section if new_name is * NULL. */ typedef long (*profile_rename_section_fn)(void *cbdata, const char **names, const char *new_name); /* * Optional: Add a new relation, or a new section if new_value is NULL. Add * any intermediate sections as necessary. */ typedef long (*profile_add_relation_fn)(void *cbdata, const char **names, const char *new_value); /* * Optional: Flush any pending memory updates to the persistent store. If * implemented, this function will be called by profile_release as well as * profile_flush, so make sure it's not inefficient to flush an unmodified * profile. */ typedef long (*profile_flush_fn)(void *cbdata); struct profile_vtable { int minor_ver; /* Set to structure minor version (currently 1) * if calling profile_init_vtable. */ /* Methods needed for a basic read-only non-iterable profile (cleanup is * optional). */ profile_get_values_fn get_values; profile_free_values_fn free_values; profile_cleanup_fn cleanup; profile_copy_fn copy; /* Methods for iterable profiles. */ profile_iterator_create_fn iterator_create; profile_iterator_fn iterator; profile_iterator_free_fn iterator_free; profile_free_string_fn free_string; /* Methods for writable profiles. */ profile_writable_fn writable; profile_modified_fn modified; profile_update_relation_fn update_relation; profile_rename_section_fn rename_section; profile_add_relation_fn add_relation; profile_flush_fn flush; /* End of minor version 1. */ }; /* * Create a profile object whose operations will be performed using the * function pointers in vtable. cbdata will be supplied to each vtable * function as the first argument. */ long KRB5_CALLCONV profile_init_vtable (struct profile_vtable *vtable, void *cbdata, profile_t *ret_profile); /* * Dynamically loadable profile modules should define a function named * "profile_module_init" matching the following signature. The function should * initialize the methods of the provided vtable structure, stopping at the * field corresponding to vtable->minor_ver. Do not change the value of * vtable->minor_ver. Unimplemented methods can be left uninitialized. The * function should supply a callback data pointer in *cb_ret; this pointer can * be cleaned up via the vtable cleanup method. */ typedef long (*profile_module_init_fn)(const char *residual, struct profile_vtable *vtable, void **cb_ret); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _KRB5_PROFILE_H */ /* * et-h-prof_err.h: * This file is automatically generated; please do not edit it. */ #include #define PROF_VERSION (-1429577728L) #define PROF_MAGIC_NODE (-1429577727L) #define PROF_NO_SECTION (-1429577726L) #define PROF_NO_RELATION (-1429577725L) #define PROF_ADD_NOT_SECTION (-1429577724L) #define PROF_SECTION_WITH_VALUE (-1429577723L) #define PROF_BAD_LINK_LIST (-1429577722L) #define PROF_BAD_GROUP_LVL (-1429577721L) #define PROF_BAD_PARENT_PTR (-1429577720L) #define PROF_MAGIC_ITERATOR (-1429577719L) #define PROF_SET_SECTION_VALUE (-1429577718L) #define PROF_EINVAL (-1429577717L) #define PROF_READ_ONLY (-1429577716L) #define PROF_SECTION_NOTOP (-1429577715L) #define PROF_SECTION_SYNTAX (-1429577714L) #define PROF_RELATION_SYNTAX (-1429577713L) #define PROF_EXTRA_CBRACE (-1429577712L) #define PROF_MISSING_OBRACE (-1429577711L) #define PROF_MAGIC_PROFILE (-1429577710L) #define PROF_MAGIC_SECTION (-1429577709L) #define PROF_TOPSECTION_ITER_NOSUPP (-1429577708L) #define PROF_INVALID_SECTION (-1429577707L) #define PROF_END_OF_SECTIONS (-1429577706L) #define PROF_BAD_NAMESET (-1429577705L) #define PROF_NO_PROFILE (-1429577704L) #define PROF_MAGIC_FILE (-1429577703L) #define PROF_FAIL_OPEN (-1429577702L) #define PROF_EXISTS (-1429577701L) #define PROF_BAD_BOOLEAN (-1429577700L) #define PROF_BAD_INTEGER (-1429577699L) #define PROF_MAGIC_FILE_DATA (-1429577698L) #define PROF_FAIL_INCLUDE_FILE (-1429577697L) #define PROF_FAIL_INCLUDE_DIR (-1429577696L) #define PROF_UNSUPPORTED (-1429577695L) #define PROF_MAGIC_NODE_ITERATOR (-1429577694L) #define PROF_MODULE (-1429577693L) #define PROF_MODULE_SYNTAX (-1429577692L) #define PROF_MODULE_INVALID (-1429577691L) #define ERROR_TABLE_BASE_prof (-1429577728L) extern const struct error_table et_prof_error_table; #if !defined(_WIN32) /* for compatibility with older versions... */ extern void initialize_prof_error_table (void) /*@modifies internalState@*/; #else #define initialize_prof_error_table() #endif #if !defined(_WIN32) #define init_prof_err_tbl initialize_prof_error_table #define prof_err_base ERROR_TABLE_BASE_prof #endif 070701000a253a000041ed0000000000000000000000025125a07f00000000000000b500010002ffffffffffffffff0000001e00000000root/usr/local/include/gssrpc070701000a2546000081a40000000000000000000000015125a075000013f2000000b500010002ffffffffffffffff0000002800000000root/usr/local/include/gssrpc/rpc_msg.h/* @(#)rpc_msg.h 2.1 88/07/29 4.0 RPCSRC */ /* * Copyright (c) 2010, Oracle America, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the "Oracle America, Inc." nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* @(#)rpc_msg.h 1.7 86/07/16 SMI */ /* * rpc_msg.h * rpc message definition */ #ifndef GSSRPC_RPC_MSG_H #define GSSRPC_RPC_MSG_H GSSRPC__BEGIN_DECLS #define RPC_MSG_VERSION ((uint32_t) 2) #define RPC_SERVICE_PORT ((u_short) 2048) /* * Bottom up definition of an rpc message. * NOTE: call and reply use the same overall stuct but * different parts of unions within it. */ enum msg_type { CALL=0, REPLY=1 }; enum reply_stat { MSG_ACCEPTED=0, MSG_DENIED=1 }; enum accept_stat { SUCCESS=0, PROG_UNAVAIL=1, PROG_MISMATCH=2, PROC_UNAVAIL=3, GARBAGE_ARGS=4, SYSTEM_ERR=5 }; enum reject_stat { RPC_MISMATCH=0, AUTH_ERROR=1 }; /* * Reply part of an rpc exchange */ /* * Reply to an rpc request that was accepted by the server. * Note: there could be an error even though the request was * accepted. */ struct accepted_reply { struct opaque_auth ar_verf; enum accept_stat ar_stat; union { struct { rpcvers_t low; rpcvers_t high; } AR_versions; struct { caddr_t where; xdrproc_t proc; } AR_results; /* and many other null cases */ } ru; #define ar_results ru.AR_results #define ar_vers ru.AR_versions }; /* * Reply to an rpc request that was rejected by the server. */ struct rejected_reply { enum reject_stat rj_stat; union { struct { rpcvers_t low; rpcvers_t high; } RJ_versions; enum auth_stat RJ_why; /* why authentication did not work */ } ru; #define rj_vers ru.RJ_versions #define rj_why ru.RJ_why }; /* * Body of a reply to an rpc request. */ struct reply_body { enum reply_stat rp_stat; union { struct accepted_reply RP_ar; struct rejected_reply RP_dr; } ru; #define rp_acpt ru.RP_ar #define rp_rjct ru.RP_dr }; /* * Body of an rpc request call. */ struct call_body { rpcvers_t cb_rpcvers; /* must be equal to two */ rpcprog_t cb_prog; rpcvers_t cb_vers; rpcproc_t cb_proc; struct opaque_auth cb_cred; struct opaque_auth cb_verf; /* protocol specific - provided by client */ }; /* * The rpc message */ struct rpc_msg { uint32_t rm_xid; enum msg_type rm_direction; union { struct call_body RM_cmb; struct reply_body RM_rmb; } ru; #define rm_call ru.RM_cmb #define rm_reply ru.RM_rmb }; #define acpted_rply ru.RM_rmb.ru.RP_ar #define rjcted_rply ru.RM_rmb.ru.RP_dr /* * XDR routine to handle a rpc message. * xdr_callmsg(xdrs, cmsg) * XDR *xdrs; * struct rpc_msg *cmsg; */ extern bool_t xdr_callmsg(XDR *, struct rpc_msg *); /* * XDR routine to pre-serialize the static part of a rpc message. * xdr_callhdr(xdrs, cmsg) * XDR *xdrs; * struct rpc_msg *cmsg; */ extern bool_t xdr_callhdr(XDR *, struct rpc_msg *); /* * XDR routine to handle a rpc reply. * xdr_replymsg(xdrs, rmsg) * XDR *xdrs; * struct rpc_msg *rmsg; */ extern bool_t xdr_replymsg(XDR *, struct rpc_msg *); /* * Fills in the error part of a reply message. * _seterr_reply(msg, error) * struct rpc_msg *msg; * struct rpc_err *error; */ /* * RENAMED: should be _seterr_reply or __seterr_reply if we can use * reserved namespace. */ extern void gssrpc__seterr_reply(struct rpc_msg *, struct rpc_err *); /* XDR the MSG_ACCEPTED part of a reply message union */ extern bool_t xdr_accepted_reply(XDR *, struct accepted_reply *); /* XDR the MSG_DENIED part of a reply message union */ extern bool_t xdr_rejected_reply(XDR *, struct rejected_reply *); GSSRPC__END_DECLS #endif /* !defined(GSSRPC_RPC_MSG_H) */ 070701000a2545000081a40000000000000000000000015125a07500000f15000000b500010002ffffffffffffffff0000002400000000root/usr/local/include/gssrpc/rpc.h/* @(#)rpc.h 2.3 88/08/10 4.0 RPCSRC; from 1.9 88/02/08 SMI */ /* * Copyright (c) 2010, Oracle America, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the "Oracle America, Inc." nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * rpc.h, Just includes the billions of rpc header files necessary to * do remote procedure calling. */ #ifndef GSSRPC_RPC_H #define GSSRPC_RPC_H #include /* some typedefs */ #include /* external data representation interfaces */ #include /* generic (de)serializer */ /* Client side only authentication */ #include /* generic authenticator (client side) */ /* Client side (mostly) remote procedure call */ #include /* generic rpc stuff */ /* semi-private protocol headers */ #include /* protocol for rpc messages */ #include /* protocol for unix style cred */ #include /* RPCSEC_GSS */ /* * Uncomment-out the next line if you are building the rpc library with * DES Authentication (see the README file in the secure_rpc/ directory). */ #if 0 #include protocol for des style cred #endif /* Server side only remote procedure callee */ #include /* service side authenticator */ #include /* service manager and multiplexer */ /* * Punt the rpc/netdb.h everywhere because it just makes things much more * difficult. We don't use the *rpcent functions anyway. */ #if 0 /* * COMMENT OUT THE NEXT INCLUDE IF RUNNING ON SUN OS OR ON A VERSION * OF UNIX BASED ON NFSSRC. These systems will already have the structures * defined by included in . */ /* routines for parsing /etc/rpc */ #if 0 /* netdb.h already included in rpc/types.h */ #include #endif #include /* structures and routines to parse /etc/rpc */ #endif /* * get the local host's IP address without consulting * name service library functions */ GSSRPC__BEGIN_DECLS extern int get_myaddress(struct sockaddr_in *); extern int bindresvport(int, struct sockaddr_in *); extern int callrpc(char *, rpcprog_t, rpcvers_t, rpcproc_t, xdrproc_t, char *, xdrproc_t , char *); extern int getrpcport(char *, rpcprog_t, rpcvers_t, rpcprot_t); extern int gssrpc__rpc_dtablesize(void); GSSRPC__END_DECLS #endif /* !defined(GSSRPC_RPC_H) */ 070701000a253b000081a40000000000000000000000015125a07500001a85000000b500010002ffffffffffffffff0000002500000000root/usr/local/include/gssrpc/auth.h/* @(#)auth.h 2.3 88/08/07 4.0 RPCSRC; from 1.17 88/02/08 SMI */ /* * Copyright (c) 2010, Oracle America, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the "Oracle America, Inc." nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * auth.h, Authentication interface. * * The data structures are completely opaque to the client. The client * is required to pass a AUTH * to routines that create rpc * "sessions". */ #ifndef GSSRPC_AUTH_H #define GSSRPC_AUTH_H #include GSSRPC__BEGIN_DECLS #define MAX_AUTH_BYTES 400 #define MAXNETNAMELEN 255 /* maximum length of network user's name */ /* * Status returned from authentication check */ enum auth_stat { AUTH_OK=0, /* * failed at remote end */ AUTH_BADCRED=1, /* bogus credentials (seal broken) */ AUTH_REJECTEDCRED=2, /* client should begin new session */ AUTH_BADVERF=3, /* bogus verifier (seal broken) */ AUTH_REJECTEDVERF=4, /* verifier expired or was replayed */ AUTH_TOOWEAK=5, /* rejected due to security reasons */ /* * failed locally */ AUTH_INVALIDRESP=6, /* bogus response verifier */ AUTH_FAILED=7, /* some unknown reason */ /* * RPCSEC_GSS errors */ RPCSEC_GSS_CREDPROBLEM = 13, RPCSEC_GSS_CTXPROBLEM = 14 }; union des_block { #if 0 /* XXX nothing uses this, anyway */ struct { uint32_t high; uint32_t low; } key; #endif char c[8]; }; typedef union des_block des_block; extern bool_t xdr_des_block(XDR *, des_block *); /* * Authentication info. Opaque to client. */ struct opaque_auth { enum_t oa_flavor; /* flavor of auth */ caddr_t oa_base; /* address of more auth stuff */ u_int oa_length; /* not to exceed MAX_AUTH_BYTES */ }; /* * Auth handle, interface to client side authenticators. */ struct rpc_msg; typedef struct AUTH { struct opaque_auth ah_cred; struct opaque_auth ah_verf; union des_block ah_key; struct auth_ops { void (*ah_nextverf)(struct AUTH *); /* nextverf & serialize */ int (*ah_marshal)(struct AUTH *, XDR *); /* validate varifier */ int (*ah_validate)(struct AUTH *, struct opaque_auth *); /* refresh credentials */ int (*ah_refresh)(struct AUTH *, struct rpc_msg *); /* destroy this structure */ void (*ah_destroy)(struct AUTH *); /* encode data for wire */ int (*ah_wrap)(struct AUTH *, XDR *, xdrproc_t, caddr_t); /* decode data from wire */ int (*ah_unwrap)(struct AUTH *, XDR *, xdrproc_t, caddr_t); } *ah_ops; void *ah_private; } AUTH; /* * Authentication ops. * The ops and the auth handle provide the interface to the authenticators. * * AUTH *auth; * XDR *xdrs; * struct opaque_auth verf; */ #define AUTH_NEXTVERF(auth) \ ((*((auth)->ah_ops->ah_nextverf))(auth)) #define auth_nextverf(auth) \ ((*((auth)->ah_ops->ah_nextverf))(auth)) #define AUTH_MARSHALL(auth, xdrs) \ ((*((auth)->ah_ops->ah_marshal))(auth, xdrs)) #define auth_marshall(auth, xdrs) \ ((*((auth)->ah_ops->ah_marshal))(auth, xdrs)) #define AUTH_VALIDATE(auth, verfp) \ ((*((auth)->ah_ops->ah_validate))((auth), verfp)) #define auth_validate(auth, verfp) \ ((*((auth)->ah_ops->ah_validate))((auth), verfp)) #define AUTH_REFRESH(auth, msg) \ ((*((auth)->ah_ops->ah_refresh))(auth, msg)) #define auth_refresh(auth, msg) \ ((*((auth)->ah_ops->ah_refresh))(auth, msg)) #define AUTH_WRAP(auth, xdrs, xfunc, xwhere) \ ((*((auth)->ah_ops->ah_wrap))(auth, xdrs, \ xfunc, xwhere)) #define auth_wrap(auth, xdrs, xfunc, xwhere) \ ((*((auth)->ah_ops->ah_wrap))(auth, xdrs, \ xfunc, xwhere)) #define AUTH_UNWRAP(auth, xdrs, xfunc, xwhere) \ ((*((auth)->ah_ops->ah_unwrap))(auth, xdrs, \ xfunc, xwhere)) #define auth_unwrap(auth, xdrs, xfunc, xwhere) \ ((*((auth)->ah_ops->ah_unwrap))(auth, xdrs, \ xfunc, xwhere)) #define AUTH_DESTROY(auth) \ ((*((auth)->ah_ops->ah_destroy))(auth)) #define auth_destroy(auth) \ ((*((auth)->ah_ops->ah_destroy))(auth)) #ifdef GSSRPC__IMPL /* RENAMED: should be _null_auth if we can use reserved namespace. */ extern struct opaque_auth gssrpc__null_auth; #endif /* * These are the various implementations of client side authenticators. */ /* * Unix style authentication * AUTH *authunix_create(machname, uid, gid, len, aup_gids) * char *machname; * int uid; * int gid; * int len; * int *aup_gids; */ extern AUTH *authunix_create(char *machname, int uid, int gid, int len, int *aup_gids); extern AUTH *authunix_create_default(void); /* takes no parameters */ extern AUTH *authnone_create(void); /* takes no parameters */ extern AUTH *authdes_create(); extern bool_t xdr_opaque_auth(XDR *, struct opaque_auth *); #define AUTH_NONE 0 /* no authentication */ #define AUTH_NULL 0 /* backward compatibility */ #define AUTH_UNIX 1 /* unix style (uid, gids) */ #define AUTH_SHORT 2 /* short hand unix style */ #define AUTH_DES 3 /* des style (encrypted timestamps) */ #define AUTH_GSSAPI 300001 /* GSS-API style */ #define RPCSEC_GSS 6 /* RPCSEC_GSS */ #if 0 /* * BACKWARDS COMPATIBILIY! OpenV*Secure 1.0 had AUTH_GSSAPI == 4. We * need to accept this value until 1.0 is dead. */ /* This conflicts with AUTH_KERB (Solaris). */ #define AUTH_GSSAPI_COMPAT 4 #endif GSSRPC__END_DECLS #endif /* !defined(GSSRPC_AUTH_H) */ 070701000a2543000081a40000000000000000000000015125a075000008ff000000b500010002ffffffffffffffff0000002900000000root/usr/local/include/gssrpc/pmap_rmt.h/* @(#)pmap_rmt.h 2.1 88/07/29 4.0 RPCSRC; from 1.2 88/02/08 SMI */ /* * Copyright (c) 2010, Oracle America, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the "Oracle America, Inc." nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * Structures and XDR routines for parameters to and replies from * the portmapper remote-call-service. */ #ifndef GSSRPC_PMAP_RMT_H #define GSSRPC_PMAP_RMT_H GSSRPC__BEGIN_DECLS struct rmtcallargs { rpcprog_t prog; rpcvers_t vers; rpcproc_t proc; uint32_t arglen; caddr_t args_ptr; xdrproc_t xdr_args; }; bool_t xdr_rmtcall_args(XDR *, struct rmtcallargs *); struct rmtcallres { rpcport_t *port_ptr; uint32_t resultslen; caddr_t results_ptr; xdrproc_t xdr_results; }; bool_t xdr_rmtcallres(XDR *, struct rmtcallres *); GSSRPC__END_DECLS #endif /* !defined(GSSRPC_PMAP_RMT_H) */ 070701000a2549000081a40000000000000000000000015125a0750000137d000000b500010002ffffffffffffffff0000002600000000root/usr/local/include/gssrpc/types.h/* @(#)types.h 2.3 88/08/15 4.0 RPCSRC */ /* * Copyright (c) 2010, Oracle America, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the “Oracle America, Inc.” nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* @(#)types.h 1.18 87/07/24 SMI */ /* * Rpc additions to */ #ifndef GSSRPC_TYPES_H #define GSSRPC_TYPES_H #include #include #include #include /* * Try to get MAXHOSTNAMELEN from somewhere. */ /* #include */ #include /* Get htonl(), ntohl(), etc. */ #include #include /* * Pull in typedefs for fixed-width integers somehow, if they weren't * in sys/types.h. */ /* #include */ /* #include */ /* Define if there is no uint32_t in system headers. */ /* #undef GSSRPC__FAKE_INT32 */ #include #ifndef GSSRPC__BEGIN_DECLS #ifdef __cplusplus #define GSSRPC__BEGIN_DECLS extern "C" { #define GSSRPC__END_DECLS } #else #define GSSRPC__BEGIN_DECLS #define GSSRPC__END_DECLS #endif #endif GSSRPC__BEGIN_DECLS #if defined(CHAR_BIT) && CHAR_BIT != 8 #error "Bytes must be exactly 8 bits." #endif /* * If no uint32_t in system headers, fake it by looking for a 32-bit * two's-complement type. Yes, this stomps on POSIX namespace, but if * we get here, we're on a system that's far from being * POSIX-compliant anyway. */ #if GSSRPC__FAKE_UINT32 #if (UINT_MAX == 0xffffffffUL) && (INT_MAX == 0x7fffffffL) \ && (INT_MIN == -INT_MAX-1) typedef int int32_t; typedef unsigned int uint32_t; #else #if (ULONG_MAX == 0xffffffffUL) && (LONG_MAX == 0x7fffffffL) \ && (LONG_MIN == -LONG_MAX-1) typedef long int32_t; typedef unsigned long uint32_t; #else #if (USHRT_MAX == 0xffffffffUL) && (SHRT_MAX == 0x7fffffffL) \ && (SHRT_MIN == -SHRT_MAX-1) typedef short int32_t; typedef unsigned short uint32_t; #else #error "Can't fake up uint32_t." #endif #endif #endif #endif /* GSSRPC__FAKE_UINT32 */ #if (LONG_MIN != -LONG_MAX-1) || (INT_MIN != -INT_MAX-1) \ || (SHRT_MIN != -SHRT_MAX-1) #error "Integer types must be two's-complement." #endif /* Define if we need to fake up some BSD type aliases. */ #ifndef GSSRPC__BSD_TYPEALIASES /* Allow application to override. */ /* #undef GSSRPC__BSD_TYPEALIASES */ #endif #if GSSRPC__BSD_TYPEALIASES typedef unsigned char u_char; typedef unsigned short u_short; typedef unsigned int u_int; typedef unsigned long u_long; #endif typedef uint32_t rpcprog_t; typedef uint32_t rpcvers_t; typedef uint32_t rpcprot_t; typedef uint32_t rpcproc_t; typedef uint32_t rpcport_t; typedef int32_t rpc_inline_t; /* This is for rpc/netdb.h */ #define STRUCT_RPCENT_IN_RPC_NETDB_H #define bool_t int #define enum_t int #ifndef FALSE # define FALSE (0) #endif #ifndef TRUE # define TRUE (1) #endif /* XXX namespace */ #define __dontcare__ -1 #ifndef NULL # define NULL 0 #endif /* * The below should probably be internal-only, but seem to be * traditionally exported in RPC implementations. */ #define mem_alloc(bsize) malloc(bsize) #define mem_free(ptr, bsize) free(ptr) #if 0 #include /* XXX This should not have to be here. * I got sick of seeing the warnings for MAXHOSTNAMELEN * and the two values were different. -- shanzer */ #endif #ifndef INADDR_LOOPBACK #define INADDR_LOOPBACK (uint32_t)0x7F000001 #endif #ifndef MAXHOSTNAMELEN #define MAXHOSTNAMELEN 64 #endif GSSRPC__END_DECLS #include #endif /* !defined(GSSRPC_TYPES_H) */ 070701000a2547000081a40000000000000000000000015125a07500002d4b000000b500010002ffffffffffffffff0000002400000000root/usr/local/include/gssrpc/svc.h/* @(#)svc.h 2.2 88/07/29 4.0 RPCSRC; from 1.20 88/02/08 SMI */ /* * Copyright (c) 2010, Oracle America, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the "Oracle America, Inc." nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * svc.h, Server-side remote procedure call interface. */ #ifndef GSSRPC_SVC_H #define GSSRPC_SVC_H #include GSSRPC__BEGIN_DECLS /* * This interface must manage two items concerning remote procedure calling: * * 1) An arbitrary number of transport connections upon which rpc requests * are received. The two most notable transports are TCP and UDP; they are * created and registered by routines in svc_tcp.c and svc_udp.c, respectively; * they in turn call xprt_register and xprt_unregister. * * 2) An arbitrary number of locally registered services. Services are * described by the following four data: program number, version number, * "service dispatch" function, a transport handle, and a boolean that * indicates whether or not the exported program should be registered with a * local binder service; if true the program's number and version and the * port number from the transport handle are registered with the binder. * These data are registered with the rpc svc system via svc_register. * * A service's dispatch function is called whenever an rpc request comes in * on a transport. The request's program and version numbers must match * those of the registered service. The dispatch function is passed two * parameters, struct svc_req * and SVCXPRT *, defined below. */ enum xprt_stat { XPRT_DIED, XPRT_MOREREQS, XPRT_IDLE }; /* * Server side transport handle */ typedef struct SVCXPRT { #ifdef _WIN32 SOCKET xp_sock; #else int xp_sock; #endif u_short xp_port; /* associated port number */ struct xp_ops { /* receive incomming requests */ bool_t (*xp_recv)(struct SVCXPRT *, struct rpc_msg *); /* get transport status */ enum xprt_stat (*xp_stat)(struct SVCXPRT *); /* get arguments */ bool_t (*xp_getargs)(struct SVCXPRT *, xdrproc_t, void *); /* send reply */ bool_t (*xp_reply)(struct SVCXPRT *, struct rpc_msg *); /* free mem allocated for args */ bool_t (*xp_freeargs)(struct SVCXPRT *, xdrproc_t, void *); /* destroy this struct */ void (*xp_destroy)(struct SVCXPRT *); } *xp_ops; int xp_addrlen; /* length of remote address */ struct sockaddr_in xp_raddr; /* remote address */ struct opaque_auth xp_verf; /* raw response verifier */ SVCAUTH *xp_auth; /* auth flavor of current req */ void *xp_p1; /* private */ void *xp_p2; /* private */ int xp_laddrlen; /* lenght of local address */ struct sockaddr_in xp_laddr; /* local address */ } SVCXPRT; /* * Approved way of getting address of caller */ #define svc_getcaller(x) (&(x)->xp_raddr) /* * Operations defined on an SVCXPRT handle * * SVCXPRT *xprt; * struct rpc_msg *msg; * xdrproc_t xargs; * caddr_t argsp; */ #define SVC_RECV(xprt, msg) \ (*(xprt)->xp_ops->xp_recv)((xprt), (msg)) #define svc_recv(xprt, msg) \ (*(xprt)->xp_ops->xp_recv)((xprt), (msg)) #define SVC_STAT(xprt) \ (*(xprt)->xp_ops->xp_stat)(xprt) #define svc_stat(xprt) \ (*(xprt)->xp_ops->xp_stat)(xprt) #define SVC_GETARGS(xprt, xargs, argsp) \ (*(xprt)->xp_ops->xp_getargs)((xprt), (xargs), (argsp)) #define svc_getargs(xprt, xargs, argsp) \ (*(xprt)->xp_ops->xp_getargs)((xprt), (xargs), (argsp)) #define SVC_GETARGS_REQ(xprt, req, xargs, argsp) \ (*(xprt)->xp_ops->xp_getargs_req)((xprt), (req), (xargs), (argsp)) #define svc_getargs_req(xprt, req, xargs, argsp) \ (*(xprt)->xp_ops->xp_getargs_req)((xprt), (req), (xargs), (argsp)) #define SVC_REPLY(xprt, msg) \ (*(xprt)->xp_ops->xp_reply) ((xprt), (msg)) #define svc_reply(xprt, msg) \ (*(xprt)->xp_ops->xp_reply) ((xprt), (msg)) #define SVC_REPLY_REQ(xprt, req, msg) \ (*(xprt)->xp_ops->xp_reply_req) ((xprt), (req), (msg)) #define svc_reply_req(xprt, msg) \ (*(xprt)->xp_ops->xp_reply_req) ((xprt), (req), (msg)) #define SVC_FREEARGS(xprt, xargs, argsp) \ (*(xprt)->xp_ops->xp_freeargs)((xprt), (xargs), (argsp)) #define svc_freeargs(xprt, xargs, argsp) \ (*(xprt)->xp_ops->xp_freeargs)((xprt), (xargs), (argsp)) #define SVC_DESTROY(xprt) \ (*(xprt)->xp_ops->xp_destroy)(xprt) #define svc_destroy(xprt) \ (*(xprt)->xp_ops->xp_destroy)(xprt) /* * Service request */ struct svc_req { rpcprog_t rq_prog; /* service program number */ rpcvers_t rq_vers; /* service protocol version */ rpcproc_t rq_proc; /* the desired procedure */ struct opaque_auth rq_cred; /* raw creds from the wire */ void * rq_clntcred; /* read only cooked client cred */ void * rq_svccred; /* read only svc cred/context */ void * rq_clntname; /* read only client name */ SVCXPRT *rq_xprt; /* associated transport */ /* The request's auth flavor *should* be here, but the svc_req */ /* isn't passed around everywhere it is necessary. The */ /* transport *is* passed around, so the auth flavor it stored */ /* there. This means that the transport must be single */ /* threaded, but other parts of SunRPC already require that. */ /*SVCAUTH *rq_auth; associated auth flavor */ }; /* * Service registration * * svc_register(xprt, prog, vers, dispatch, protocol) * SVCXPRT *xprt; * rpcprog_t prog; * rpcvers_t vers; * void (*dispatch)(); * int protocol; like IPPROTO_TCP or _UDP; zero means do not register * * registerrpc(prog, vers, proc, routine, inproc, outproc) * returns 0 upon success, -1 if error. */ extern bool_t svc_register(SVCXPRT *, rpcprog_t, rpcvers_t, void (*)(struct svc_req *, SVCXPRT *), int); extern int registerrpc(rpcprog_t, rpcvers_t, rpcproc_t, char *(*)(void *), xdrproc_t, xdrproc_t); /* * Service un-registration * * svc_unregister(prog, vers) * rpcprog_t prog; * rpcvers_t vers; */ extern void svc_unregister(rpcprog_t, rpcvers_t); /* * Transport registration. * * xprt_register(xprt) * SVCXPRT *xprt; */ extern void xprt_register(SVCXPRT *); /* * Transport un-register * * xprt_unregister(xprt) * SVCXPRT *xprt; */ extern void xprt_unregister(SVCXPRT *); /* * When the service routine is called, it must first check to see if * it knows about the procedure; if not, it should call svcerr_noproc * and return. If so, it should deserialize its arguments via * SVC_GETARGS or the new SVC_GETARGS_REQ (both defined above). If * the deserialization does not work, svcerr_decode should be called * followed by a return. Successful decoding of the arguments should * be followed the execution of the procedure's code and a call to * svc_sendreply or the new svc_sendreply_req. * * Also, if the service refuses to execute the procedure due to too- * weak authentication parameters, svcerr_weakauth should be called. * Note: do not confuse access-control failure with weak authentication! * * NB: In pure implementations of rpc, the caller always waits for a reply * msg. This message is sent when svc_sendreply is called. * Therefore pure service implementations should always call * svc_sendreply even if the function logically returns void; use * xdr.h - xdr_void for the xdr routine. HOWEVER, tcp based rpc allows * for the abuse of pure rpc via batched calling or pipelining. In the * case of a batched call, svc_sendreply should NOT be called since * this would send a return message, which is what batching tries to avoid. * It is the service/protocol writer's responsibility to know which calls are * batched and which are not. Warning: responding to batch calls may * deadlock the caller and server processes! */ extern bool_t svc_sendreply(SVCXPRT *, xdrproc_t, caddr_t); extern void svcerr_decode(SVCXPRT *); extern void svcerr_weakauth(SVCXPRT *); extern void svcerr_noproc(SVCXPRT *); extern void svcerr_progvers(SVCXPRT *, rpcvers_t, rpcvers_t); extern void svcerr_auth(SVCXPRT *, enum auth_stat); extern void svcerr_noprog(SVCXPRT *); extern void svcerr_systemerr(SVCXPRT *); /* * Lowest level dispatching -OR- who owns this process anyway. * Somebody has to wait for incoming requests and then call the correct * service routine. The routine svc_run does infinite waiting; i.e., * svc_run never returns. * Since another (co-existant) package may wish to selectively wait for * incoming calls or other events outside of the rpc architecture, the * routine svc_getreq is provided. It must be passed readfds, the * "in-place" results of a select system call (see select, section 2). */ /* * Global keeper of rpc service descriptors in use * dynamic; must be inspected before each call to select */ extern int svc_maxfd; #ifdef FD_SETSIZE extern fd_set svc_fdset; /* RENAMED */ #define gssrpc_svc_fds gsssrpc_svc_fdset.fds_bits[0] /* compatibility */ #else extern int svc_fds; #endif /* def FD_SETSIZE */ extern int svc_maxfd; /* * a small program implemented by the svc_rpc implementation itself; * also see clnt.h for protocol numbers. */ extern void rpctest_service(); extern void svc_getreq(int); #ifdef FD_SETSIZE extern void svc_getreqset(fd_set *);/* takes fdset instead of int */ extern void svc_getreqset2(fd_set *, int); #else extern void svc_getreqset(int *); #endif extern void svc_run(void); /* never returns */ /* * Socket to use on svcxxx_create call to get default socket */ #define RPC_ANYSOCK -1 /* * These are the existing service side transport implementations */ /* * Memory based rpc for testing and timing. */ extern SVCXPRT *svcraw_create(void); /* * Udp based rpc. */ extern SVCXPRT *svcudp_create(int); extern SVCXPRT *svcudp_bufcreate(int, u_int, u_int); extern int svcudp_enablecache(SVCXPRT *, uint32_t); /* * Tcp based rpc. */ extern SVCXPRT *svctcp_create(int, u_int, u_int); /* * Like svtcp_create(), except the routine takes any *open* UNIX file * descriptor as its first input. */ extern SVCXPRT *svcfd_create(int, u_int, u_int); /* XXX add auth_gsapi_log_*? */ GSSRPC__END_DECLS #endif /* !defined(GSSRPC_SVC_H) */ 070701000a253e000081a40000000000000000000000015125a07500000b50000000b500010002ffffffffffffffff0000002a00000000root/usr/local/include/gssrpc/auth_unix.h/* @(#)auth_unix.h 2.2 88/07/29 4.0 RPCSRC; from 1.8 88/02/08 SMI */ /* * Copyright (c) 2010, Oracle America, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the "Oracle America, Inc." nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* @(#)auth_unix.h 1.5 86/07/16 SMI */ /* * auth_unix.h, Protocol for UNIX style authentication parameters for RPC */ #ifndef GSSRPC_AUTH_UNIX_H #define GSSRPC_AUTH_UNIX_H GSSRPC__BEGIN_DECLS /* * The system is very weak. The client uses no encryption for it * credentials and only sends null verifiers. The server sends backs * null verifiers or optionally a verifier that suggests a new short hand * for the credentials. */ /* The machine name is part of a credential; it may not exceed 255 bytes */ #define MAX_MACHINE_NAME 255 /* gids compose part of a credential; there may not be more than 16 of them */ #define NGRPS 16 /* * Unix style credentials. */ struct authunix_parms { uint32_t aup_time; char *aup_machname; int aup_uid; int aup_gid; u_int aup_len; int *aup_gids; }; extern bool_t xdr_authunix_parms(XDR *, struct authunix_parms *); /* * If a response verifier has flavor AUTH_SHORT, * then the body of the response verifier encapsulates the following structure; * again it is serialized in the obvious fashion. */ struct short_hand_verf { struct opaque_auth new_cred; }; GSSRPC__END_DECLS #endif /* !defined(GSSRPC_AUTH_UNIX_H) */ 070701000a2542000081a40000000000000000000000015125a07500000f01000000b500010002ffffffffffffffff0000002a00000000root/usr/local/include/gssrpc/pmap_prot.h/* @(#)pmap_prot.h 2.1 88/07/29 4.0 RPCSRC; from 1.14 88/02/08 SMI */ /* * Copyright (c) 2010, Oracle America, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the "Oracle America, Inc." nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * pmap_prot.h * Protocol for the local binder service, or pmap. * * The following procedures are supported by the protocol: * * PMAPPROC_NULL() returns () * takes nothing, returns nothing * * PMAPPROC_SET(struct pmap) returns (bool_t) * TRUE is success, FALSE is failure. Registers the tuple * [prog, vers, prot, port]. * * PMAPPROC_UNSET(struct pmap) returns (bool_t) * TRUE is success, FALSE is failure. Un-registers pair * [prog, vers]. prot and port are ignored. * * PMAPPROC_GETPORT(struct pmap) returns (u_short). * 0 is failure. Otherwise returns the port number where the pair * [prog, vers] is registered. It may lie! * * PMAPPROC_DUMP() RETURNS (struct pmaplist *) * * PMAPPROC_CALLIT(rpcprog_t, rpcvers_t, rpcproc_t, string<>) * RETURNS (port, string<>); * usage: encapsulatedresults = PMAPPROC_CALLIT(prog, vers, proc, encapsulatedargs); * Calls the procedure on the local machine. If it is not registered, * this procedure is quite; ie it does not return error information!!! * This procedure only is supported on rpc/udp and calls via * rpc/udp. This routine only passes null authentication parameters. * This file has no interface to xdr routines for PMAPPROC_CALLIT. * * The service supports remote procedure calls on udp/ip or tcp/ip socket 111. */ #ifndef GSSRPC_PMAP_PROT_H #define GSSRPC_PMAP_PROT_H GSSRPC__BEGIN_DECLS #define PMAPPORT ((u_short)111) #define PMAPPROG ((rpcprog_t)100000) #define PMAPVERS ((rpcvers_t)2) #define PMAPVERS_PROTO ((rpcprot_t)2) #define PMAPVERS_ORIG ((rpcvers_t)1) #define PMAPPROC_NULL ((rpcproc_t)0) #define PMAPPROC_SET ((rpcproc_t)1) #define PMAPPROC_UNSET ((rpcproc_t)2) #define PMAPPROC_GETPORT ((rpcproc_t)3) #define PMAPPROC_DUMP ((rpcproc_t)4) #define PMAPPROC_CALLIT ((rpcproc_t)5) struct pmap { rpcprog_t pm_prog; rpcvers_t pm_vers; rpcprot_t pm_prot; rpcport_t pm_port; }; extern bool_t xdr_pmap(XDR *, struct pmap *); struct pmaplist { struct pmap pml_map; struct pmaplist *pml_next; }; extern bool_t xdr_pmaplist(XDR *, struct pmaplist **); GSSRPC__END_DECLS #endif /* !defined(GSSRPC_PMAP_PROT_H) */ 070701000a254a000081a40000000000000000000000015125a07500002e03000000b500010002ffffffffffffffff0000002400000000root/usr/local/include/gssrpc/xdr.h/* @(#)xdr.h 2.2 88/07/29 4.0 RPCSRC */ /* * Copyright (c) 2010, Oracle America, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the "Oracle America, Inc." nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* @(#)xdr.h 1.19 87/04/22 SMI */ /* * xdr.h, External Data Representation Serialization Routines. */ #ifndef GSSRPC_XDR_H #define GSSRPC_XDR_H #include /* for FILE */ GSSRPC__BEGIN_DECLS /* * XDR provides a conventional way for converting between C data * types and an external bit-string representation. Library supplied * routines provide for the conversion on built-in C data types. These * routines and utility routines defined here are used to help implement * a type encode/decode routine for each user-defined type. * * Each data type provides a single procedure which takes two arguments: * * bool_t * xdrproc(xdrs, argresp) * XDR *xdrs; * *argresp; * * xdrs is an instance of a XDR handle, to which or from which the data * type is to be converted. argresp is a pointer to the structure to be * converted. The XDR handle contains an operation field which indicates * which of the operations (ENCODE, DECODE * or FREE) is to be performed. * * XDR_DECODE may allocate space if the pointer argresp is null. This * data can be freed with the XDR_FREE operation. * * We write only one procedure per data type to make it easy * to keep the encode and decode procedures for a data type consistent. * In many cases the same code performs all operations on a user defined type, * because all the hard work is done in the component type routines. * decode as a series of calls on the nested data types. */ /* * Xdr operations. XDR_ENCODE causes the type to be encoded into the * stream. XDR_DECODE causes the type to be extracted from the stream. * XDR_FREE can be used to release the space allocated by an XDR_DECODE * request. */ enum xdr_op { XDR_ENCODE=0, XDR_DECODE=1, XDR_FREE=2 }; /* * This is the number of bytes per unit of external data. */ #define BYTES_PER_XDR_UNIT (4) #define RNDUP(x) ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \ * BYTES_PER_XDR_UNIT) /* * A xdrproc_t exists for each data type which is to be encoded or decoded. * * The second argument to the xdrproc_t is a pointer to an opaque pointer. * The opaque pointer generally points to a structure of the data type * to be decoded. If this pointer is 0, then the type routines should * allocate dynamic storage of the appropriate size and return it. * bool_t (*xdrproc_t)(XDR *, caddr_t *); * * XXX can't actually prototype it, because some take three args!!! */ typedef bool_t (*xdrproc_t)(); /* * The XDR handle. * Contains operation which is being applied to the stream, * an operations vector for the paticular implementation (e.g. see xdr_mem.c), * and two private fields for the use of the particular impelementation. */ typedef struct XDR { enum xdr_op x_op; /* operation; fast additional param */ struct xdr_ops { /* get a long from underlying stream */ bool_t (*x_getlong)(struct XDR *, long *); /* put a long to underlying stream */ bool_t (*x_putlong)(struct XDR *, long *); /* get some bytes from underlying stream */ bool_t (*x_getbytes)(struct XDR *, caddr_t, u_int); /* put some bytes to underlying stream */ bool_t (*x_putbytes)(struct XDR *, caddr_t, u_int); /* returns bytes off from beginning */ u_int (*x_getpostn)(struct XDR *); /* lets you reposition the stream */ bool_t (*x_setpostn)(struct XDR *, u_int); /* buf quick ptr to buffered data */ rpc_inline_t *(*x_inline)(struct XDR *, int); /* free privates of this xdr_stream */ void (*x_destroy)(struct XDR *); } *x_ops; caddr_t x_public; /* users' data */ void * x_private; /* pointer to private data */ caddr_t x_base; /* private used for position info */ int x_handy; /* extra private word */ } XDR; /* * Operations defined on a XDR handle * * XDR *xdrs; * int32_t *longp; * caddr_t addr; * u_int len; * u_int pos; */ #define XDR_GETLONG(xdrs, longp) \ (*(xdrs)->x_ops->x_getlong)(xdrs, longp) #define xdr_getlong(xdrs, longp) \ (*(xdrs)->x_ops->x_getlong)(xdrs, longp) #define XDR_PUTLONG(xdrs, longp) \ (*(xdrs)->x_ops->x_putlong)(xdrs, longp) #define xdr_putlong(xdrs, longp) \ (*(xdrs)->x_ops->x_putlong)(xdrs, longp) #define XDR_GETBYTES(xdrs, addr, len) \ (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len) #define xdr_getbytes(xdrs, addr, len) \ (*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len) #define XDR_PUTBYTES(xdrs, addr, len) \ (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len) #define xdr_putbytes(xdrs, addr, len) \ (*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len) #define XDR_GETPOS(xdrs) \ (*(xdrs)->x_ops->x_getpostn)(xdrs) #define xdr_getpos(xdrs) \ (*(xdrs)->x_ops->x_getpostn)(xdrs) #define XDR_SETPOS(xdrs, pos) \ (*(xdrs)->x_ops->x_setpostn)(xdrs, pos) #define xdr_setpos(xdrs, pos) \ (*(xdrs)->x_ops->x_setpostn)(xdrs, pos) #define XDR_INLINE(xdrs, len) \ (*(xdrs)->x_ops->x_inline)(xdrs, len) #define xdr_inline(xdrs, len) \ (*(xdrs)->x_ops->x_inline)(xdrs, len) #define XDR_DESTROY(xdrs) \ if ((xdrs)->x_ops->x_destroy) \ (*(xdrs)->x_ops->x_destroy)(xdrs) #define xdr_destroy(xdrs) \ if ((xdrs)->x_ops->x_destroy) \ (*(xdrs)->x_ops->x_destroy)(xdrs) /* * Support struct for discriminated unions. * You create an array of xdrdiscrim structures, terminated with * a entry with a null procedure pointer. The xdr_union routine gets * the discriminant value and then searches the array of structures * for a matching value. If a match is found the associated xdr routine * is called to handle that part of the union. If there is * no match, then a default routine may be called. * If there is no match and no default routine it is an error. */ #define NULL_xdrproc_t ((xdrproc_t)0) struct xdr_discrim { int value; xdrproc_t proc; }; /* * In-line routines for fast encode/decode of primitve data types. * Caveat emptor: these use single memory cycles to get the * data from the underlying buffer, and will fail to operate * properly if the data is not aligned. The standard way to use these * is to say: * if ((buf = XDR_INLINE(xdrs, count)) == NULL) * return (FALSE); * <<< macro calls >>> * where ``count'' is the number of bytes of data occupied * by the primitive data types. * * N.B. and frozen for all time: each data type here uses 4 bytes * of external representation. */ #define IXDR_GET_INT32(buf) ((int32_t)IXDR_GET_U_INT32(buf)) #define IXDR_PUT_INT32(buf, v) IXDR_PUT_U_INT32((buf),((uint32_t)(v))) #define IXDR_GET_U_INT32(buf) (ntohl((uint32_t)*(buf)++)) #define IXDR_PUT_U_INT32(buf, v) (*(buf)++ = (int32_t)htonl((v))) #define IXDR_GET_LONG(buf) ((long)IXDR_GET_INT32(buf)) #define IXDR_PUT_LONG(buf, v) IXDR_PUT_U_INT32((buf),((uint32_t)(v))) #define IXDR_GET_BOOL(buf) ((bool_t)IXDR_GET_LONG(buf)) #define IXDR_GET_ENUM(buf, t) ((t)IXDR_GET_INT32(buf)) #define IXDR_GET_U_LONG(buf) ((u_long)IXDR_GET_U_INT32(buf)) #define IXDR_GET_SHORT(buf) ((short)IXDR_GET_INT32(buf)) #define IXDR_GET_U_SHORT(buf) ((u_short)IXDR_GET_U_INT32(buf)) #define IXDR_PUT_BOOL(buf, v) IXDR_PUT_INT32((buf),((int32_t)(v))) #define IXDR_PUT_ENUM(buf, v) IXDR_PUT_INT32((buf),((int32_t)(v))) #define IXDR_PUT_U_LONG(buf, v) IXDR_PUT_U_INT32((buf),((uint32_t)(v))) #define IXDR_PUT_SHORT(buf, v) IXDR_PUT_INT32((buf),((int32_t)(v))) #define IXDR_PUT_U_SHORT(buf, v) IXDR_PUT_U_INT32((buf),((uint32_t)(v))) /* * These are the "generic" xdr routines. */ extern bool_t xdr_void(XDR *, void *); extern bool_t xdr_int(XDR *, int *); extern bool_t xdr_u_int(XDR *, u_int *); extern bool_t xdr_long(XDR *, long *); extern bool_t xdr_u_long(XDR *, u_long *); extern bool_t xdr_short(XDR *, short *); extern bool_t xdr_u_short(XDR *, u_short *); extern bool_t xdr_bool(XDR *, bool_t *); extern bool_t xdr_enum(XDR *, enum_t *); extern bool_t xdr_array(XDR *, caddr_t *, u_int *, u_int, u_int, xdrproc_t); extern bool_t xdr_bytes(XDR *, char **, u_int *, u_int); extern bool_t xdr_opaque(XDR *, caddr_t, u_int); extern bool_t xdr_string(XDR *, char **, u_int); extern bool_t xdr_union(XDR *, enum_t *, char *, struct xdr_discrim *, xdrproc_t); extern bool_t xdr_char(XDR *, char *); extern bool_t xdr_u_char(XDR *, u_char *); extern bool_t xdr_vector(XDR *, char *, u_int, u_int, xdrproc_t); extern bool_t xdr_float(XDR *, float *); extern bool_t xdr_double(XDR *, double *); extern bool_t xdr_reference(XDR *, caddr_t *, u_int, xdrproc_t); extern bool_t xdr_pointer(XDR *, char **, u_int, xdrproc_t); extern bool_t xdr_wrapstring(XDR *, char **); extern unsigned long xdr_sizeof(xdrproc_t, void *); #define xdr_rpcprog xdr_u_int32 #define xdr_rpcvers xdr_u_int32 #define xdr_rpcprot xdr_u_int32 #define xdr_rpcproc xdr_u_int32 #define xdr_rpcport xdr_u_int32 /* * Common opaque bytes objects used by many rpc protocols; * declared here due to commonality. */ #define MAX_NETOBJ_SZ 2048 struct netobj { u_int n_len; char *n_bytes; }; typedef struct netobj netobj; extern bool_t xdr_netobj(XDR *, struct netobj *); extern bool_t xdr_int32(XDR *, int32_t *); extern bool_t xdr_u_int32(XDR *, uint32_t *); /* * These are the public routines for the various implementations of * xdr streams. */ /* XDR allocating memory buffer */ extern void xdralloc_create(XDR *, enum xdr_op); /* destroy xdralloc, save buf */ extern void xdralloc_release(XDR *); /* get buffer from xdralloc */ extern caddr_t xdralloc_getdata(XDR *); /* XDR using memory buffers */ extern void xdrmem_create(XDR *, caddr_t, u_int, enum xdr_op); /* XDR using stdio library */ extern void xdrstdio_create(XDR *, FILE *, enum xdr_op); /* XDR pseudo records for tcp */ extern void xdrrec_create(XDR *xdrs, u_int, u_int, caddr_t, int (*) (caddr_t, caddr_t, int), int (*) (caddr_t, caddr_t, int)); /* make end of xdr record */ extern bool_t xdrrec_endofrecord(XDR *, bool_t); /* move to beginning of next record */ extern bool_t xdrrec_skiprecord (XDR *xdrs); /* true if no more input */ extern bool_t xdrrec_eof (XDR *xdrs); /* free memory buffers for xdr */ extern void xdr_free (xdrproc_t, void *); GSSRPC__END_DECLS #endif /* !defined(GSSRPC_XDR_H) */ 070701000a2540000081a40000000000000000000000015125a0750000098a000000b500010002ffffffffffffffff0000002600000000root/usr/local/include/gssrpc/netdb.h/* include/gssrpc/netdb.h */ /* * Copyright (c) 2010, Oracle America, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the "Oracle America, Inc." nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* @(#)netdb.h 2.1 88/07/29 3.9 RPCSRC */ /* @(#)rpc.h 1.8 87/07/24 SMI */ #ifndef RPC_NETDB_H #define RPC_NETDB_H #include /* since the gssrpc library requires that any application using it be built with these header files, I am making the decision that any app which uses the rpcent routines must use this header file, or something compatible (which most are) --marc */ /* Really belongs in */ #ifdef STRUCT_RPCENT_IN_RPC_NETDB_H struct rpcent { char *r_name; /* name of server for this rpc program */ char **r_aliases; /* alias list */ int r_number; /* rpc program number */ }; #endif /*STRUCT_RPCENT_IN_RPC_NETDB_H*/ struct rpcent *getrpcbyname(), *getrpcbynumber(), *getrpcent(); #endif 070701000a2544000081a40000000000000000000000015125a075000029fa000000b500010002ffffffffffffffff0000002700000000root/usr/local/include/gssrpc/rename.h/* include/gssrpc/rename.h */ /* * Copyright (C) 2004 by the Massachusetts Institute of Technology. * All rights reserved. * * Export of this software from the United States of America may * require a specific license from the United States Government. * It is the responsibility of any person or organization contemplating * export to obtain such a license before exporting. * * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and * distribute this software and its documentation for any purpose and * without fee is hereby granted, provided that the above copyright * notice appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity pertaining * to distribution of the software without specific, written prior * permission. Furthermore if you modify this software you must label * your software as modified software and not distribute it in such a * fashion that it might be confused with the original M.I.T. software. * M.I.T. makes no representations about the suitability of * this software for any purpose. It is provided "as is" without express * or implied warranty. */ /* * * Namespace mangling for various purposes. * * Symbols in the object code need to be renamed to not conflict with * an OS-provided RPC implementation. Without renaming, the conflicts * can cause problems with things like RPC-enabled NSS * implementations. * * Symbols in headers should not conflict with implementation-reserved * namespace (prefixes "_[A-Z_]" for any purpose; prefix "_" * for file scope identifiers and tag names), or unnecessarily impinge * on user namespace. * * The renaming of the header directory is done to avoid problems when * the OS header files include and might get ours instead. * OS vendors should replace all the inclusions with * inclusions, as appropriate. Additionally, vendors * should probably put some symbols into the implementation namespace. * * For example, inclusion protection should change from "GSSRPC_*_H" * to "_RPC_*_H", struct tags should get "__" prefixes, etc. * * This implementation reserves the object code prefix "gssrpc_". * External names in the RPC API not beginning with "_" get renamed * with the prefix "gssrpc_" via #define, e.g., "foo" -> "gssrpc_foo". * External names in the RPC API beginning with "_" get textually * rewritten, with "#if 0"-disabled #defines mapping them back to * their original forms, e.g., "_foo" is rewrittten to "gssrpc__foo" * in the original files, with an unused "#define gssrpc__foo _foo" * here. */ #ifndef GSSRPC_RENAME_H #define GSSRPC_RENAME_H /* auth.h */ #define xdr_des_block gssrpc_xdr_des_block #define authany_wrap gssrpc_authany_wrap #define authany_unwrap gssrpc_authany_unwrap #define authunix_create gssrpc_authunix_create #define authunix_create_default gssrpc_authunix_create_default #define authnone_create gssrpc_authnone_create #define authdes_create gssrpc_authdes_create #define xdr_opaque_auth gssrpc_xdr_opaque_auth #if 0 #define gssrpc__null_auth _null_auth #endif /* auth_gss.c */ #define auth_debug_gss gssrpc_auth_debug_gss #define misc_debug_gss gssrpc_misc_debug_gss /* auth_gss.h */ #define xdr_rpc_gss_buf gssrpc_xdr_rpc_gss_buf #define xdr_rpc_gss_cred gssrpc_xdr_rpc_gss_cred #define xdr_rpc_gss_init_args gssrpc_xdr_rpc_gss_init_args #define xdr_rpc_gss_init_res gssrpc_xdr_rpc_gss_init_res #define xdr_rpc_gss_data gssrpc_xdr_rpc_gss_data #define xdr_rpc_gss_wrap_data gssrpc_xdr_rpc_gss_wrap_data #define xdr_rpc_gss_unwrap_data gssrpc_xdr_rpc_gss_unwrap_data #define authgss_create gssrpc_authgss_create #define authgss_create_default gssrpc_authgss_create_default #define authgss_get_private_data gssrpc_authgss_get_private_data #define authgss_service gssrpc_authgss_service #ifdef GSSRPC__IMPL #define log_debug gssrpc_log_debug #define log_status gssrpc_log_status #define log_hexdump gssrpc_log_hexdump #endif /* auth_gssapi.c */ #define auth_debug_gssapi gssrpc_auth_debug_gssapi #define misc_debug_gssapi gssrpc_misc_debug_gssapi /* auth_gssapi.h */ #define xdr_gss_buf gssrpc_xdr_gss_buf #define xdr_authgssapi_creds gssrpc_xdr_authgssapi_creds #define xdr_authgssapi_init_arg gssrpc_xdr_authgssapi_init_arg #define xdr_authgssapi_init_res gssrpc_xdr_authgssapi_init_res #define auth_gssapi_wrap_data gssrpc_auth_gssapi_wrap_data #define auth_gssapi_unwrap_data gssrpc_auth_gssapi_unwrap_data #define auth_gssapi_create gssrpc_auth_gssapi_create #define auth_gssapi_create_default gssrpc_auth_gssapi_create_default #define auth_gssapi_display_status gssrpc_auth_gssapi_display_status #define auth_gssapi_seal_seq gssrpc_auth_gssapi_seal_seq #define auth_gssapi_unseal_seq gssrpc_auth_gssapi_unseal_seq #define svcauth_gssapi_set_names gssrpc_svcauth_gssapi_set_names #define svcauth_gssapi_unset_names gssrpc_svcauth_gssapi_unset_names #define svcauth_gssapi_set_log_badauth_func gssrpc_svcauth_gssapi_set_log_badauth_func #define svcauth_gssapi_set_log_badverf_func gssrpc_svcauth_gssapi_set_log_badverf_func #define svcauth_gssapi_set_log_miscerr_func gssrpc_svcauth_gssapi_set_log_miscerr_func #define svcauth_gss_set_log_badauth_func gssrpc_svcauth_gss_set_log_badauth_func #define svcauth_gss_set_log_badverf_func gssrpc_svcauth_gss_set_log_badverf_func #define svcauth_gss_set_log_miscerr_func gssrpc_svcauth_gss_set_log_miscerr_func /* auth_unix.h */ #define xdr_authunix_parms gssrpc_xdr_authunix_parms /* clnt.h */ #define clntraw_create gssrpc_clntraw_create #define clnt_create gssrpc_clnt_create #define clnttcp_create gssrpc_clnttcp_create #define clntudp_create gssrpc_clntudp_create #define clntudp_bufcreate gssrpc_clntudp_bufcreate #define clnt_pcreateerror gssrpc_clnt_pcreateerror #define clnt_spcreateerror gssrpc_clnt_spcreateerror #define clnt_perrno gssrpc_clnt_perrno #define clnt_perror gssrpc_clnt_perror #define clnt_sperror gssrpc_clnt_sperror /* XXX do we need to rename the struct? */ #define rpc_createerr gssrpc_rpc_createrr #define clnt_sperrno gssrpc_clnt_sperrno /* pmap_clnt.h */ #define pmap_set gssrpc_pmap_set #define pmap_unset gssrpc_pmap_unset #define pmap_getmaps gssrpc_pmap_getmaps #define pmap_rmtcall gssrpc_pmap_rmtcall #define clnt_broadcast gssrpc_clnt_broadcast #define pmap_getport gssrpc_pmap_getport /* pmap_prot.h */ #define xdr_pmap gssrpc_xdr_pmap #define xdr_pmaplist gssrpc_xdr_pmaplist /* pmap_rmt.h */ #define xdr_rmtcall_args gssrpc_xdr_rmtcall_args #define xdr_rmtcallres gssrpc_xdr_rmtcallres /* rpc.h */ #define get_myaddress gssrpc_get_myaddress #define bindresvport gssrpc_bindresvport #define callrpc gssrpc_callrpc #define getrpcport gssrpc_getrpcport #if 0 #define gssrpc__rpc_getdtablesize _rpc_getdtablesize #endif /* rpc_msg.h */ #define xdr_callmsg gssrpc_xdr_callmsg #define xdr_callhdr gssrpc_xdr_callhdr #define xdr_replymsg gssrpc_xdr_replymsg #define xdr_accepted_reply gssrpc_xdr_accepted_reply #define xdr_rejected_reply gssrpc_xdr_rejected_reply #if 0 #define gssrpc__seterr_reply _seterr_reply #endif /* svc.h */ #define svc_register gssrpc_svc_register #define registerrpc gssrpc_registerrpc #define svc_unregister gssrpc_svc_unregister #define xprt_register gssrpc_xprt_register #define xprt_unregister gssrpc_xprt_unregister #define svc_sendreply gssrpc_svc_sendreply #define svcerr_decode gssrpc_svcerr_decode #define svcerr_weakauth gssrpc_svcerr_weakauth #define svcerr_noproc gssrpc_svcerr_noproc #define svcerr_progvers gssrpc_svcerr_progvers #define svcerr_auth gssrpc_svcerr_auth #define svcerr_noprog gssrpc_svcerr_noprog #define svcerr_systemerr gssrpc_svcerr_systemerr #define svc_maxfd gssrpc_svc_maxfd #define svc_fdset gssrpc_svc_fdset #define svc_fds gssrpc_svc_fds #define rpctest_service gssrpc_rpctest_service #define svc_getreq gssrpc_svc_getreq #define svc_getreqset gssrpc_svc_getreqset #define svc_getreqset2 gssrpc_svc_getreqset2 #define svc_run gssrpc_svc_run #define svcraw_create gssrpc_svcraw_create #define svcudp_create gssrpc_svcudp_create #define svcudp_bufcreate gssrpc_svcudp_bufcreate #define svcudp_enablecache gssrpc_svcudp_enablecache #define svctcp_create gssrpc_svctcp_create #define svcfd_create gssrpc_svcfd_create /* svc_auth.h */ #define svc_auth_none_ops gssrpc_svc_auth_none_ops #define svc_auth_gssapi_ops gssrpc_svc_auth_gssapi_ops #define svc_auth_gss_ops gssrpc_svc_auth_gss_ops #define svcauth_gss_set_svc_name gssrpc_svcauth_gss_set_svc_name #define svcauth_gss_get_principal gssrpc_svcauth_gss_get_principal #if 0 #define gssrpc__authenticate _authenticate #define gssrpc__svcauth_none _svcauth_none #define gssrpc__svcauth_unix _svcauth_unix #define gssrpc__svcauth_short _svcauth_short #define gssrpc__svcauth_gssapi _svcauth_gssapi #define gssrpc__svcauth_gss _svcauth_gss #endif /* svc_auth_gss.c */ #define svc_debug_gss gssrpc_svc_debug_gss #define svcauth_gss_creds gssrpc_svc_auth_gss_creds /* svc_auth_gssapi.c */ #define svc_debug_gssapi gssrpc_svc_debug_gssapi /* svc_auth_none.c */ #define svc_auth_none gssrpc_svc_auth_none /* xdr.h */ #define xdr_void gssrpc_xdr_void #define xdr_int gssrpc_xdr_int #define xdr_u_int gssrpc_xdr_u_int #define xdr_long gssrpc_xdr_long #define xdr_u_long gssrpc_xdr_u_long #define xdr_short gssrpc_xdr_short #define xdr_u_short gssrpc_xdr_u_short #define xdr_bool gssrpc_xdr_bool #define xdr_enum gssrpc_xdr_enum #define xdr_array gssrpc_xdr_array #define xdr_bytes gssrpc_xdr_bytes #define xdr_opaque gssrpc_xdr_opaque #define xdr_string gssrpc_xdr_string #define xdr_union gssrpc_xdr_union #define xdr_char gssrpc_xdr_char #define xdr_u_char gssrpc_xdr_u_char #define xdr_vector gssrpc_xdr_vector #define xdr_float gssrpc_xdr_float #define xdr_double gssrpc_xdr_double #define xdr_reference gssrpc_xdr_reference #define xdr_pointer gssrpc_xdr_pointer #define xdr_wrapstring gssrpc_xdr_wrapstring #define xdr_free gssrpc_xdr_free #define xdr_sizeof gssrpc_xdr_sizeof #define xdr_netobj gssrpc_xdr_netobj #define xdr_int32 gssrpc_xdr_int32 #define xdr_u_int32 gssrpc_xdr_u_int32 #define xdralloc_create gssrpc_xdralloc_create #define xdralloc_release gssrpc_xdralloc_release #define xdralloc_getdata gssrpc_xdralloc_getdata #define xdrmem_create gssrpc_xdrmem_create #define xdrstdio_create gssrpc_xdrstdio_create #define xdrrec_create gssrpc_xdrrec_create #define xdrrec_endofrecord gssrpc_xdrrec_endofrecord #define xdrrec_skiprecord gssrpc_xdrrec_skiprecord #define xdrrec_eof gssrpc_xdrrec_eof #endif /* !defined(GSSRPC_RENAME_H) */ 070701000a2548000081a40000000000000000000000015125a07500000f88000000b500010002ffffffffffffffff0000002900000000root/usr/local/include/gssrpc/svc_auth.h/* @(#)svc_auth.h 2.1 88/07/29 4.0 RPCSRC */ /* * Copyright (c) 2010, Oracle America, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the "Oracle America, Inc." nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* @(#)svc_auth.h 1.6 86/07/16 SMI */ /* * svc_auth.h, Service side of rpc authentication. */ /* * Interface to server-side authentication flavors. */ #ifndef GSSRPC_SVC_AUTH_H #define GSSRPC_SVC_AUTH_H #include GSSRPC__BEGIN_DECLS struct svc_req; typedef struct SVCAUTH { struct svc_auth_ops { int (*svc_ah_wrap)(struct SVCAUTH *, XDR *, xdrproc_t, caddr_t); int (*svc_ah_unwrap)(struct SVCAUTH *, XDR *, xdrproc_t, caddr_t); int (*svc_ah_destroy)(struct SVCAUTH *); } *svc_ah_ops; void * svc_ah_private; } SVCAUTH; #ifdef GSSRPC__IMPL extern SVCAUTH svc_auth_none; extern struct svc_auth_ops svc_auth_none_ops; extern struct svc_auth_ops svc_auth_gssapi_ops; extern struct svc_auth_ops svc_auth_gss_ops; /* * Server side authenticator */ /* RENAMED: should be _authenticate. */ extern enum auth_stat gssrpc__authenticate(struct svc_req *rqst, struct rpc_msg *msg, bool_t *no_dispatch); #define SVCAUTH_WRAP(auth, xdrs, xfunc, xwhere) \ ((*((auth)->svc_ah_ops->svc_ah_wrap))(auth, xdrs, xfunc, xwhere)) #define SVCAUTH_UNWRAP(auth, xdrs, xfunc, xwhere) \ ((*((auth)->svc_ah_ops->svc_ah_unwrap))(auth, xdrs, xfunc, xwhere)) #define SVCAUTH_DESTROY(auth) \ ((*((auth)->svc_ah_ops->svc_ah_destroy))(auth)) /* no authentication */ /* RENAMED: should be _svcauth_none. */ enum auth_stat gssrpc__svcauth_none(struct svc_req *, struct rpc_msg *, bool_t *); /* unix style (uid, gids) */ /* RENAMED: shoudl be _svcauth_unix. */ enum auth_stat gssrpc__svcauth_unix(struct svc_req *, struct rpc_msg *, bool_t *); /* short hand unix style */ /* RENAMED: should be _svcauth_short. */ enum auth_stat gssrpc__svcauth_short(struct svc_req *, struct rpc_msg *, bool_t *); /* GSS-API style */ /* RENAMED: should be _svcauth_gssapi. */ enum auth_stat gssrpc__svcauth_gssapi(struct svc_req *, struct rpc_msg *, bool_t *); /* RPCSEC_GSS */ enum auth_stat gssrpc__svcauth_gss(struct svc_req *, struct rpc_msg *, bool_t *); #endif /* defined(GSSRPC__IMPL) */ /* * Approved way of getting principal of caller */ char *svcauth_gss_get_principal(SVCAUTH *auth); /* * Approved way of setting server principal */ bool_t svcauth_gss_set_svc_name(gss_name_t name); GSSRPC__END_DECLS #endif /* !defined(GSSRPC_SVC_AUTH_H) */ 070701000a2541000081a40000000000000000000000015125a07500000d65000000b500010002ffffffffffffffff0000002a00000000root/usr/local/include/gssrpc/pmap_clnt.h/* @(#)pmap_clnt.h 2.1 88/07/29 4.0 RPCSRC; from 1.11 88/02/08 SMI */ /* * Copyright (c) 2010, Oracle America, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the "Oracle America, Inc." nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * pmap_clnt.h * Supplies C routines to get to portmap services. */ #ifndef GSSRPC_PMAP_CLNT_H #define GSSRPC_PMAP_CLNT_H /* * Usage: * success = pmap_set(program, version, protocol, port); * success = pmap_unset(program, version); * port = pmap_getport(address, program, version, protocol); * head = pmap_getmaps(address); * clnt_stat = pmap_rmtcall(address, program, version, procedure, * xdrargs, argsp, xdrres, resp, tout, port_ptr) * (works for udp only.) * clnt_stat = clnt_broadcast(program, version, procedure, * xdrargs, argsp, xdrres, resp, eachresult) * (like pmap_rmtcall, except the call is broadcasted to all * locally connected nets. For each valid response received, * the procedure eachresult is called. Its form is: * done = eachresult(resp, raddr) * bool_t done; * caddr_t resp; * struct sockaddr_in raddr; * where resp points to the results of the call and raddr is the * address if the responder to the broadcast. */ GSSRPC__BEGIN_DECLS extern bool_t pmap_set(rpcprog_t, rpcvers_t, rpcprot_t, u_int); extern bool_t pmap_unset(rpcprog_t, rpcvers_t); extern struct pmaplist *pmap_getmaps(struct sockaddr_in *); enum clnt_stat pmap_rmtcall(struct sockaddr_in *, rpcprog_t, rpcvers_t, rpcproc_t, xdrproc_t, caddr_t, xdrproc_t, caddr_t, struct timeval, rpcport_t *); typedef bool_t (*resultproc_t)(caddr_t, struct sockaddr_in *); enum clnt_stat clnt_broadcast(rpcprog_t, rpcvers_t, rpcproc_t, xdrproc_t, caddr_t, xdrproc_t, caddr_t, resultproc_t); extern u_short pmap_getport(struct sockaddr_in *, rpcprog_t, rpcvers_t, rpcprot_t); GSSRPC__END_DECLS #endif /* !defined(GSSRPC_PMAP_CLNT_H) */ 070701000a253c000081a40000000000000000000000015125a075000012e8000000b500010002ffffffffffffffff0000002900000000root/usr/local/include/gssrpc/auth_gss.h/* include/gssrpc/auth_gss.h */ /* Copyright (c) 2000 The Regents of the University of Michigan. All rights reserved. Copyright (c) 2000 Dug Song . All rights reserved, all wrongs reversed. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Id: auth_gss.h,v 1.13 2002/05/08 16:54:33 andros Exp */ #ifndef GSSRPC_AUTH_GSS_H #define GSSRPC_AUTH_GSS_H #include #include #ifdef HAVE_HEIMDAL #include #else #include #endif GSSRPC__BEGIN_DECLS /* RPCSEC_GSS control procedures. */ typedef enum { RPCSEC_GSS_DATA = 0, RPCSEC_GSS_INIT = 1, RPCSEC_GSS_CONTINUE_INIT = 2, RPCSEC_GSS_DESTROY = 3 } rpc_gss_proc_t; /* RPCSEC_GSS services. */ typedef enum { RPCSEC_GSS_SVC_NONE = 1, RPCSEC_GSS_SVC_INTEGRITY = 2, RPCSEC_GSS_SVC_PRIVACY = 3 } rpc_gss_svc_t; #define RPCSEC_GSS_VERSION 1 /* RPCSEC_GSS security triple. */ struct rpc_gss_sec { gss_OID mech; /* mechanism */ gss_qop_t qop; /* quality of protection */ rpc_gss_svc_t svc; /* service */ gss_cred_id_t cred; /* cred handle */ uint32_t req_flags; /* req flags for init_sec_context */ }; /* Private data required for kernel implementation */ struct authgss_private_data { gss_ctx_id_t pd_ctx; /* Session context handle */ gss_buffer_desc pd_ctx_hndl; /* Credentials context handle */ uint32_t pd_seq_win; /* Sequence window */ }; /* Krb 5 default mechanism #define KRB5OID "1.2.840.113554.1.2.2" gss_OID_desc krb5oid = { 20, KRB5OID }; */ /* struct rpc_gss_sec krb5mech = { (gss_OID)&krb5oid, GSS_QOP_DEFAULT, RPCSEC_GSS_SVC_NONE }; */ /* Credentials. */ struct rpc_gss_cred { u_int gc_v; /* version */ rpc_gss_proc_t gc_proc; /* control procedure */ uint32_t gc_seq; /* sequence number */ rpc_gss_svc_t gc_svc; /* service */ gss_buffer_desc gc_ctx; /* context handle */ }; /* Context creation response. */ struct rpc_gss_init_res { gss_buffer_desc gr_ctx; /* context handle */ uint32_t gr_major; /* major status */ uint32_t gr_minor; /* minor status */ uint32_t gr_win; /* sequence window */ gss_buffer_desc gr_token; /* token */ }; /* Maximum sequence number value. */ #define MAXSEQ 0x80000000 /* Prototypes. */ bool_t xdr_rpc_gss_buf (XDR *xdrs, gss_buffer_t, u_int maxsize); bool_t xdr_rpc_gss_cred (XDR *xdrs, struct rpc_gss_cred *p); bool_t xdr_rpc_gss_init_args (XDR *xdrs, gss_buffer_desc *p); bool_t xdr_rpc_gss_init_res (XDR *xdrs, struct rpc_gss_init_res *p); bool_t xdr_rpc_gss_data (XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, gss_ctx_id_t ctx, gss_qop_t qop, rpc_gss_svc_t svc, uint32_t seq); bool_t xdr_rpc_gss_wrap_data (XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, gss_ctx_id_t ctx, gss_qop_t qop, rpc_gss_svc_t svc, uint32_t seq); bool_t xdr_rpc_gss_unwrap_data (XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, gss_ctx_id_t ctx, gss_qop_t qop, rpc_gss_svc_t svc, uint32_t seq); AUTH *authgss_create (CLIENT *, gss_name_t, struct rpc_gss_sec *); AUTH *authgss_create_default (CLIENT *, char *, struct rpc_gss_sec *); bool_t authgss_service (AUTH *auth, int svc); bool_t authgss_get_private_data (AUTH *auth, struct authgss_private_data *); #ifdef GSSRPC__IMPL void log_debug (const char *fmt, ...); void log_status (char *m, OM_uint32 major, OM_uint32 minor); void log_hexdump (const u_char *buf, int len, int offset); #endif GSSRPC__END_DECLS #endif /* !defined(GSSRPC_AUTH_GSS_H) */ 070701000a253f000081a40000000000000000000000015125a075000025bc000000b500010002ffffffffffffffff0000002500000000root/usr/local/include/gssrpc/clnt.h/* @(#)clnt.h 2.1 88/07/29 4.0 RPCSRC; from 1.31 88/02/08 SMI*/ /* * Copyright (c) 2010, Oracle America, Inc. * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * * Neither the name of the "Oracle America, Inc." nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * clnt.h - Client side remote procedure call interface. */ #ifndef GSSRPC_CLNT_H #define GSSRPC_CLNT_H GSSRPC__BEGIN_DECLS /* * Rpc calls return an enum clnt_stat. This should be looked at more, * since each implementation is required to live with this (implementation * independent) list of errors. */ enum clnt_stat { RPC_SUCCESS=0, /* call succeeded */ /* * local errors */ RPC_CANTENCODEARGS=1, /* can't encode arguments */ RPC_CANTDECODERES=2, /* can't decode results */ RPC_CANTSEND=3, /* failure in sending call */ RPC_CANTRECV=4, /* failure in receiving result */ RPC_TIMEDOUT=5, /* call timed out */ /* * remote errors */ RPC_VERSMISMATCH=6, /* rpc versions not compatible */ RPC_AUTHERROR=7, /* authentication error */ RPC_PROGUNAVAIL=8, /* program not available */ RPC_PROGVERSMISMATCH=9, /* program version mismatched */ RPC_PROCUNAVAIL=10, /* procedure unavailable */ RPC_CANTDECODEARGS=11, /* decode arguments error */ RPC_SYSTEMERROR=12, /* generic "other problem" */ /* * callrpc & clnt_create errors */ RPC_UNKNOWNHOST=13, /* unknown host name */ RPC_UNKNOWNPROTO=17, /* unkown protocol */ /* * _ create errors */ RPC_PMAPFAILURE=14, /* the pmapper failed in its call */ RPC_PROGNOTREGISTERED=15, /* remote program is not registered */ /* * unspecified error */ RPC_FAILED=16 }; /* * Error info. */ struct rpc_err { enum clnt_stat re_status; union { int RE_errno; /* realated system error */ enum auth_stat RE_why; /* why the auth error occurred */ struct { rpcvers_t low; /* lowest verion supported */ rpcvers_t high; /* highest verion supported */ } RE_vers; struct { /* maybe meaningful if RPC_FAILED */ int32_t s1; int32_t s2; } RE_lb; /* life boot & debugging only */ } ru; #define re_errno ru.RE_errno #define re_why ru.RE_why #define re_vers ru.RE_vers #define re_lb ru.RE_lb }; /* * Client rpc handle. * Created by individual implementations, see e.g. rpc_udp.c. * Client is responsible for initializing auth, see e.g. auth_none.c. */ typedef struct CLIENT { AUTH *cl_auth; /* authenticator */ struct clnt_ops { /* call remote procedure */ enum clnt_stat (*cl_call)(struct CLIENT *, rpcproc_t, xdrproc_t, void *, xdrproc_t, void *, struct timeval); /* abort a call */ void (*cl_abort)(struct CLIENT *); /* get specific error code */ void (*cl_geterr)(struct CLIENT *, struct rpc_err *); /* frees results */ bool_t (*cl_freeres)(struct CLIENT *, xdrproc_t, void *); /* destroy this structure */ void (*cl_destroy)(struct CLIENT *); /* the ioctl() of rpc */ /* XXX CITI makes 2nd arg take u_int */ bool_t (*cl_control)(struct CLIENT *, int, void *); } *cl_ops; void *cl_private; /* private stuff */ } CLIENT; /* * client side rpc interface ops * * Parameter types are: * */ /* * enum clnt_stat * CLNT_CALL(rh, proc, xargs, argsp, xres, resp, timeout) * CLIENT *rh; * rpcproc_t proc; * xdrproc_t xargs; * caddr_t argsp; * xdrproc_t xres; * caddr_t resp; * struct timeval timeout; */ #define CLNT_CALL(rh, proc, xargs, argsp, xres, resp, secs) \ ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs)) #define clnt_call(rh, proc, xargs, argsp, xres, resp, secs) \ ((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs)) /* * void * CLNT_ABORT(rh); * CLIENT *rh; */ #define CLNT_ABORT(rh) ((*(rh)->cl_ops->cl_abort)(rh)) #define clnt_abort(rh) ((*(rh)->cl_ops->cl_abort)(rh)) /* * struct rpc_err * CLNT_GETERR(rh); * CLIENT *rh; */ #define CLNT_GETERR(rh,errp) ((*(rh)->cl_ops->cl_geterr)(rh, errp)) #define clnt_geterr(rh,errp) ((*(rh)->cl_ops->cl_geterr)(rh, errp)) /* * bool_t * CLNT_FREERES(rh, xres, resp); * CLIENT *rh; * xdrproc_t xres; * caddr_t resp; */ #define CLNT_FREERES(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp)) #define clnt_freeres(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp)) /* * bool_t * CLNT_CONTROL(cl, request, info) * CLIENT *cl; * u_int request; * char *info; */ #define CLNT_CONTROL(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in)) #define clnt_control(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in)) /* * control operations that apply to both udp and tcp transports */ #define CLSET_TIMEOUT 1 /* set timeout (timeval) */ #define CLGET_TIMEOUT 2 /* get timeout (timeval) */ #define CLGET_SERVER_ADDR 3 /* get server's address (sockaddr) */ /* * udp only control operations */ #define CLSET_RETRY_TIMEOUT 4 /* set retry timeout (timeval) */ #define CLGET_RETRY_TIMEOUT 5 /* get retry timeout (timeval) */ /* * new control operations */ #define CLGET_LOCAL_ADDR 6 /* get local address (sockaddr, getsockname)*/ /* * void * CLNT_DESTROY(rh); * CLIENT *rh; */ #define CLNT_DESTROY(rh) ((*(rh)->cl_ops->cl_destroy)(rh)) #define clnt_destroy(rh) ((*(rh)->cl_ops->cl_destroy)(rh)) /* * RPCTEST is a test program which is accessable on every rpc * transport/port. It is used for testing, performance evaluation, * and network administration. */ #define RPCTEST_PROGRAM ((rpcprog_t)1) #define RPCTEST_VERSION ((rpcvers_t)1) #define RPCTEST_NULL_PROC ((rpcproc_t)2) #define RPCTEST_NULL_BATCH_PROC ((rpcproc_t)3) /* * By convention, procedure 0 takes null arguments and returns them */ #define NULLPROC ((rpcproc_t)0) /* * Below are the client handle creation routines for the various * implementations of client side rpc. They can return NULL if a * creation failure occurs. */ /* * Memory based rpc (for speed check and testing) * CLIENT * * clntraw_create(prog, vers) * rpcprog_t prog; * rpcvers_t vers; */ extern CLIENT *clntraw_create(rpcprog_t, rpcvers_t); /* * Generic client creation routine. Supported protocols are "udp" and "tcp" */ extern CLIENT *clnt_create(char *, rpcprog_t, rpcvers_t, char *); /* * TCP based rpc * CLIENT * * clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz) * struct sockaddr_in *raddr; * rpcprog_t prog; * rpcvers_t version; * register int *sockp; * u_int sendsz; * u_int recvsz; */ extern CLIENT *clnttcp_create(struct sockaddr_in *, rpcprog_t, rpcvers_t, int *, u_int, u_int); /* * UDP based rpc. * CLIENT * * clntudp_create(raddr, program, version, wait, sockp) * struct sockaddr_in *raddr; * rpcprog_t program; * rpcvers_t version; * struct timeval wait; * int *sockp; * * Same as above, but you specify max packet sizes. * CLIENT * * clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz) * struct sockaddr_in *raddr; * rpcprog_t program; * rpcvers_t version; * struct timeval wait; * int *sockp; * u_int sendsz; * u_int recvsz; */ extern CLIENT *clntudp_create(struct sockaddr_in *, rpcprog_t, rpcvers_t, struct timeval, int *); extern CLIENT *clntudp_bufcreate(struct sockaddr_in *, rpcprog_t, rpcvers_t, struct timeval, int *, u_int, u_int); /* * Print why creation failed */ void clnt_pcreateerror(char *); /* stderr */ char *clnt_spcreateerror(char *); /* string */ /* * Like clnt_perror(), but is more verbose in its output */ void clnt_perrno(enum clnt_stat); /* stderr */ /* * Print an English error message, given the client error code */ void clnt_perror(CLIENT *, char *); /* stderr */ char *clnt_sperror(CLIENT *, char *); /* string */ /* * If a creation fails, the following allows the user to figure out why. */ struct rpc_createerr { enum clnt_stat cf_stat; struct rpc_err cf_error; /* useful when cf_stat == RPC_PMAPFAILURE */ }; extern struct rpc_createerr rpc_createerr; /* * Copy error message to buffer. */ char *clnt_sperrno(enum clnt_stat num); /* string */ #define UDPMSGSIZE 8800 /* rpc imposed limit on udp msg size */ #define RPCSMALLMSGSIZE 400 /* a more reasonable packet size */ GSSRPC__END_DECLS #endif /* !defined(GSSRPC_CLNT_H) */ 070701000a253d000081a40000000000000000000000015125a07500000f2b000000b500010002ffffffffffffffff0000002c00000000root/usr/local/include/gssrpc/auth_gssapi.h/* include/gssrpc/auth_gssapi.h - GSS-API style auth parameters for RPC */ /* * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved. */ #ifndef GSSRPC_AUTH_GSSAPI_H #define GSSRPC_AUTH_GSSAPI_H GSSRPC__BEGIN_DECLS #define AUTH_GSSAPI_EXIT 0 #define AUTH_GSSAPI_INIT 1 #define AUTH_GSSAPI_CONTINUE_INIT 2 #define AUTH_GSSAPI_MSG 3 #define AUTH_GSSAPI_DESTROY 4 /* * Yuck. Some sys/types.h files leak symbols */ #ifdef major #undef major #endif #ifdef minor #undef minor #endif typedef struct _auth_gssapi_name { char *name; gss_OID type; } auth_gssapi_name; typedef struct _auth_gssapi_creds { uint32_t version; bool_t auth_msg; gss_buffer_desc client_handle; } auth_gssapi_creds; typedef struct _auth_gssapi_init_arg { uint32_t version; gss_buffer_desc token; } auth_gssapi_init_arg; typedef struct _auth_gssapi_init_res { uint32_t version; gss_buffer_desc client_handle; OM_uint32 gss_major, gss_minor; gss_buffer_desc token; gss_buffer_desc signed_isn; } auth_gssapi_init_res; typedef void (*auth_gssapi_log_badauth_func) (OM_uint32 major, OM_uint32 minor, struct sockaddr_in *raddr, caddr_t data); typedef void (*auth_gssapi_log_badverf_func) (gss_name_t client, gss_name_t server, struct svc_req *rqst, struct rpc_msg *msg, caddr_t data); typedef void (*auth_gssapi_log_miscerr_func) (struct svc_req *rqst, struct rpc_msg *msg, char *error, caddr_t data); bool_t xdr_gss_buf(XDR *, gss_buffer_t); bool_t xdr_authgssapi_creds(XDR *, auth_gssapi_creds *); bool_t xdr_authgssapi_init_arg(XDR *, auth_gssapi_init_arg *); bool_t xdr_authgssapi_init_res(XDR *, auth_gssapi_init_res *); bool_t auth_gssapi_wrap_data (OM_uint32 *major, OM_uint32 *minor, gss_ctx_id_t context, uint32_t seq_num, XDR *out_xdrs, bool_t (*xdr_func)(), caddr_t xdr_ptr); bool_t auth_gssapi_unwrap_data (OM_uint32 *major, OM_uint32 *minor, gss_ctx_id_t context, uint32_t seq_num, XDR *in_xdrs, bool_t (*xdr_func)(), caddr_t xdr_ptr); AUTH *auth_gssapi_create (CLIENT *clnt, OM_uint32 *major_status, OM_uint32 *minor_status, gss_cred_id_t claimant_cred_handle, gss_name_t target_name, gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, gss_OID *actual_mech_type, OM_uint32 *ret_flags, OM_uint32 *time_rec); AUTH *auth_gssapi_create_default (CLIENT *clnt, char *service_name); void auth_gssapi_display_status (char *msg, OM_uint32 major, OM_uint32 minor); bool_t auth_gssapi_seal_seq (gss_ctx_id_t context, uint32_t seq_num, gss_buffer_t out_buf); bool_t auth_gssapi_unseal_seq (gss_ctx_id_t context, gss_buffer_t in_buf, uint32_t *seq_num); bool_t svcauth_gssapi_set_names (auth_gssapi_name *names, int num); void svcauth_gssapi_unset_names (void); void svcauth_gssapi_set_log_badauth_func (auth_gssapi_log_badauth_func func, caddr_t data); void svcauth_gssapi_set_log_badverf_func (auth_gssapi_log_badverf_func func, caddr_t data); void svcauth_gssapi_set_log_miscerr_func (auth_gssapi_log_miscerr_func func, caddr_t data); void svcauth_gss_set_log_badauth_func(auth_gssapi_log_badauth_func, caddr_t); void svcauth_gss_set_log_badverf_func(auth_gssapi_log_badverf_func, caddr_t); void svcauth_gss_set_log_miscerr_func(auth_gssapi_log_miscerr_func, caddr_t data); #define GSS_COPY_BUFFER(dest, src) { \ (dest).length = (src).length; \ (dest).value = (src).value; } #define GSS_DUP_BUFFER(dest, src) { \ (dest).length = (src).length; \ (dest).value = (void *) malloc((dest).length); \ memcpy((dest).value, (src).value, (dest).length); } #define GSS_BUFFERS_EQUAL(b1, b2) (((b1).length == (b2).length) && \ !memcmp((b1).value,(b2).value,(b1.length))) GSSRPC__END_DECLS #endif /* !defined(GSSRPC_AUTH_GSSAPI_H) */ 070701000a254b000041ed0000000000000000000000025125a07f00000000000000b500010002ffffffffffffffff0000001d00000000root/usr/local/include/kadm5070701000a254d000081a40000000000000000000000015125a07500000624000000b500010002ffffffffffffffff0000003300000000root/usr/local/include/kadm5/chpass_util_strings.h/* * et-h-chpass_util_strings.h: * This file is automatically generated; please do not edit it. */ #include #define CHPASS_UTIL_GET_POLICY_INFO (-1492553984L) #define CHPASS_UTIL_GET_PRINC_INFO (-1492553983L) #define CHPASS_UTIL_NEW_PASSWORD_MISMATCH (-1492553982L) #define CHPASS_UTIL_NEW_PASSWORD_PROMPT (-1492553981L) #define CHPASS_UTIL_NEW_PASSWORD_AGAIN_PROMPT (-1492553980L) #define CHPASS_UTIL_NO_PASSWORD_READ (-1492553979L) #define CHPASS_UTIL_NO_POLICY_YET_Q_ERROR (-1492553978L) #define CHPASS_UTIL_PASSWORD_CHANGED (-1492553977L) #define CHPASS_UTIL_PASSWORD_IN_DICTIONARY (-1492553976L) #define CHPASS_UTIL_PASSWORD_NOT_CHANGED (-1492553975L) #define CHPASS_UTIL_PASSWORD_TOO_SHORT (-1492553974L) #define CHPASS_UTIL_TOO_FEW_CLASSES (-1492553973L) #define CHPASS_UTIL_PASSWORD_TOO_SOON (-1492553972L) #define CHPASS_UTIL_PASSWORD_REUSE (-1492553971L) #define CHPASS_UTIL_WHILE_TRYING_TO_CHANGE (-1492553970L) #define CHPASS_UTIL_WHILE_READING_PASSWORD (-1492553969L) #define ERROR_TABLE_BASE_ovku (-1492553984L) extern const struct error_table et_ovku_error_table; #if !defined(_WIN32) /* for compatibility with older versions... */ extern void initialize_ovku_error_table (void) /*@modifies internalState@*/; #else #define initialize_ovku_error_table() #endif #if !defined(_WIN32) #define init_ovku_err_tbl initialize_ovku_error_table #define ovku_err_base ERROR_TABLE_BASE_ovku #endif 070701000a254c000081a40000000000000000000000015125a0750000591d000000b500010002ffffffffffffffff0000002500000000root/usr/local/include/kadm5/admin.h/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* lib/kadm5/admin.h */ /* * Copyright 2001, 2008 by the Massachusetts Institute of Technology. * All Rights Reserved. * * Export of this software from the United States of America may * require a specific license from the United States Government. * It is the responsibility of any person or organization contemplating * export to obtain such a license before exporting. * * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and * distribute this software and its documentation for any purpose and * without fee is hereby granted, provided that the above copyright * notice appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity pertaining * to distribution of the software without specific, written prior * permission. Furthermore if you modify this software you must label * your software as modified software and not distribute it in such a * fashion that it might be confused with the original M.I.T. software. * M.I.T. makes no representations about the suitability of * this software for any purpose. It is provided "as is" without express * or implied warranty. */ /* * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved * * $Header$ */ /* * This API is not considered as stable as the main krb5 API. * * - We may make arbitrary incompatible changes between feature * releases (e.g. from 1.7 to 1.8). * - We will make some effort to avoid making incompatible changes for * bugfix releases, but will make them if necessary. */ #ifndef __KADM5_ADMIN_H__ #define __KADM5_ADMIN_H__ #include #include #include #include #include #include #include #ifndef KADM5INT_BEGIN_DECLS #if defined(__cplusplus) #define KADM5INT_BEGIN_DECLS extern "C" { #define KADM5INT_END_DECLS } #else #define KADM5INT_BEGIN_DECLS #define KADM5INT_END_DECLS #endif #endif KADM5INT_BEGIN_DECLS #define KADM5_ADMIN_SERVICE "kadmin/admin" #define KADM5_CHANGEPW_SERVICE "kadmin/changepw" #define KADM5_HIST_PRINCIPAL "kadmin/history" #define KADM5_KIPROP_HOST_SERVICE "kiprop" typedef krb5_principal kadm5_princ_t; typedef char *kadm5_policy_t; typedef long kadm5_ret_t; #define KADM5_PW_FIRST_PROMPT \ (error_message(CHPASS_UTIL_NEW_PASSWORD_PROMPT)) #define KADM5_PW_SECOND_PROMPT \ (error_message(CHPASS_UTIL_NEW_PASSWORD_AGAIN_PROMPT)) /* * Successful return code */ #define KADM5_OK 0 /* * Field masks */ /* kadm5_principal_ent_t */ #define KADM5_PRINCIPAL 0x000001 #define KADM5_PRINC_EXPIRE_TIME 0x000002 #define KADM5_PW_EXPIRATION 0x000004 #define KADM5_LAST_PWD_CHANGE 0x000008 #define KADM5_ATTRIBUTES 0x000010 #define KADM5_MAX_LIFE 0x000020 #define KADM5_MOD_TIME 0x000040 #define KADM5_MOD_NAME 0x000080 #define KADM5_KVNO 0x000100 #define KADM5_MKVNO 0x000200 #define KADM5_AUX_ATTRIBUTES 0x000400 #define KADM5_POLICY 0x000800 #define KADM5_POLICY_CLR 0x001000 /* version 2 masks */ #define KADM5_MAX_RLIFE 0x002000 #define KADM5_LAST_SUCCESS 0x004000 #define KADM5_LAST_FAILED 0x008000 #define KADM5_FAIL_AUTH_COUNT 0x010000 #define KADM5_KEY_DATA 0x020000 #define KADM5_TL_DATA 0x040000 #ifdef notyet /* Novell */ #define KADM5_CPW_FUNCTION 0x080000 #define KADM5_RANDKEY_USED 0x100000 #endif #define KADM5_LOAD 0x200000 /* all but KEY_DATA, TL_DATA, LOAD */ #define KADM5_PRINCIPAL_NORMAL_MASK 0x41ffff /* kadm5_policy_ent_t */ #define KADM5_PW_MAX_LIFE 0x00004000 #define KADM5_PW_MIN_LIFE 0x00008000 #define KADM5_PW_MIN_LENGTH 0x00010000 #define KADM5_PW_MIN_CLASSES 0x00020000 #define KADM5_PW_HISTORY_NUM 0x00040000 #define KADM5_REF_COUNT 0x00080000 #define KADM5_PW_MAX_FAILURE 0x00100000 #define KADM5_PW_FAILURE_COUNT_INTERVAL 0x00200000 #define KADM5_PW_LOCKOUT_DURATION 0x00400000 #define KADM5_POLICY_ATTRIBUTES 0x00800000 #define KADM5_POLICY_MAX_LIFE 0x01000000 #define KADM5_POLICY_MAX_RLIFE 0x02000000 #define KADM5_POLICY_ALLOWED_KEYSALTS 0x04000000 #define KADM5_POLICY_TL_DATA 0x08000000 /* kadm5_config_params */ #define KADM5_CONFIG_REALM 0x00000001 #define KADM5_CONFIG_DBNAME 0x00000002 #define KADM5_CONFIG_MKEY_NAME 0x00000004 #define KADM5_CONFIG_MAX_LIFE 0x00000008 #define KADM5_CONFIG_MAX_RLIFE 0x00000010 #define KADM5_CONFIG_EXPIRATION 0x00000020 #define KADM5_CONFIG_FLAGS 0x00000040 /*#define KADM5_CONFIG_ADMIN_KEYTAB 0x00000080*/ #define KADM5_CONFIG_STASH_FILE 0x00000100 #define KADM5_CONFIG_ENCTYPE 0x00000200 #define KADM5_CONFIG_ADBNAME 0x00000400 #define KADM5_CONFIG_ADB_LOCKFILE 0x00000800 /*#define KADM5_CONFIG_PROFILE 0x00001000*/ #define KADM5_CONFIG_ACL_FILE 0x00002000 #define KADM5_CONFIG_KADMIND_PORT 0x00004000 #define KADM5_CONFIG_ENCTYPES 0x00008000 #define KADM5_CONFIG_ADMIN_SERVER 0x00010000 #define KADM5_CONFIG_DICT_FILE 0x00020000 #define KADM5_CONFIG_MKEY_FROM_KBD 0x00040000 #define KADM5_CONFIG_KPASSWD_PORT 0x00080000 #define KADM5_CONFIG_OLD_AUTH_GSSAPI 0x00100000 #define KADM5_CONFIG_NO_AUTH 0x00200000 #define KADM5_CONFIG_AUTH_NOFALLBACK 0x00400000 #ifdef notyet /* Novell */ #define KADM5_CONFIG_KPASSWD_SERVER 0x00800000 #endif #define KADM5_CONFIG_IPROP_ENABLED 0x01000000 #define KADM5_CONFIG_ULOG_SIZE 0x02000000 #define KADM5_CONFIG_POLL_TIME 0x04000000 #define KADM5_CONFIG_IPROP_LOGFILE 0x08000000 #define KADM5_CONFIG_IPROP_PORT 0x10000000 #define KADM5_CONFIG_KVNO 0x20000000 #define KADM5_CONFIG_IPROP_RESYNC_TIMEOUT 0x40000000 /* * permission bits */ #define KADM5_PRIV_GET 0x01 #define KADM5_PRIV_ADD 0x02 #define KADM5_PRIV_MODIFY 0x04 #define KADM5_PRIV_DELETE 0x08 /* * API versioning constants */ #define KADM5_MASK_BITS 0xffffff00 #define KADM5_STRUCT_VERSION_MASK 0x12345600 #define KADM5_STRUCT_VERSION_1 (KADM5_STRUCT_VERSION_MASK|0x01) #define KADM5_STRUCT_VERSION KADM5_STRUCT_VERSION_1 #define KADM5_API_VERSION_MASK 0x12345700 #define KADM5_API_VERSION_2 (KADM5_API_VERSION_MASK|0x02) #define KADM5_API_VERSION_3 (KADM5_API_VERSION_MASK|0x03) #define KADM5_API_VERSION_4 (KADM5_API_VERSION_MASK|0x04) typedef struct _kadm5_principal_ent_t { krb5_principal principal; krb5_timestamp princ_expire_time; krb5_timestamp last_pwd_change; krb5_timestamp pw_expiration; krb5_deltat max_life; krb5_principal mod_name; krb5_timestamp mod_date; krb5_flags attributes; krb5_kvno kvno; krb5_kvno mkvno; char *policy; long aux_attributes; /* version 2 fields */ krb5_deltat max_renewable_life; krb5_timestamp last_success; krb5_timestamp last_failed; krb5_kvno fail_auth_count; krb5_int16 n_key_data; krb5_int16 n_tl_data; krb5_tl_data *tl_data; krb5_key_data *key_data; } kadm5_principal_ent_rec, *kadm5_principal_ent_t; typedef struct _kadm5_policy_ent_t { char *policy; long pw_min_life; long pw_max_life; long pw_min_length; long pw_min_classes; long pw_history_num; long policy_refcnt; /* version 3 fields */ krb5_kvno pw_max_fail; krb5_deltat pw_failcnt_interval; krb5_deltat pw_lockout_duration; /* version 4 fields */ krb5_flags attributes; krb5_deltat max_life; krb5_deltat max_renewable_life; char *allowed_keysalts; krb5_int16 n_tl_data; krb5_tl_data *tl_data; } kadm5_policy_ent_rec, *kadm5_policy_ent_t; /* * Data structure returned by kadm5_get_config_params() */ typedef struct _kadm5_config_params { long mask; char * realm; int kadmind_port; int kpasswd_port; char * admin_server; #ifdef notyet /* Novell */ /* ABI change? */ char * kpasswd_server; #endif /* Deprecated except for db2 backwards compatibility. Don't add new uses except as fallbacks for parameters that should be specified in the database module section of the config file. */ char * dbname; char * acl_file; char * dict_file; int mkey_from_kbd; char * stash_file; char * mkey_name; krb5_enctype enctype; krb5_deltat max_life; krb5_deltat max_rlife; krb5_timestamp expiration; krb5_flags flags; krb5_key_salt_tuple *keysalts; krb5_int32 num_keysalts; krb5_kvno kvno; bool_t iprop_enabled; uint32_t iprop_ulogsize; krb5_deltat iprop_poll_time; char * iprop_logfile; /* char * iprop_server;*/ int iprop_port; int iprop_resync_timeout; } kadm5_config_params; /*********************************************************************** * This is the old krb5_realm_read_params, which I mutated into * kadm5_get_config_params but which old code (kdb5_* and krb5kdc) * still uses. ***********************************************************************/ /* * Data structure returned by krb5_read_realm_params() */ typedef struct __krb5_realm_params { char * realm_profile; char * realm_mkey_name; char * realm_stash_file; char * realm_kdc_ports; char * realm_kdc_tcp_ports; char * realm_acl_file; char * realm_host_based_services; char * realm_no_host_referral; krb5_int32 realm_kadmind_port; krb5_enctype realm_enctype; krb5_deltat realm_max_life; krb5_deltat realm_max_rlife; krb5_timestamp realm_expiration; krb5_flags realm_flags; krb5_key_salt_tuple *realm_keysalts; unsigned int realm_reject_bad_transit:1; unsigned int realm_restrict_anon:1; unsigned int realm_kadmind_port_valid:1; unsigned int realm_enctype_valid:1; unsigned int realm_max_life_valid:1; unsigned int realm_max_rlife_valid:1; unsigned int realm_expiration_valid:1; unsigned int realm_flags_valid:1; unsigned int realm_reject_bad_transit_valid:1; unsigned int realm_restrict_anon_valid:1; unsigned int realm_assume_des_crc_sess:1; unsigned int realm_assume_des_crc_sess_valid:1; krb5_int32 realm_num_keysalts; } krb5_realm_params; /* * functions */ krb5_error_code kadm5_get_config_params(krb5_context context, int use_kdc_config, kadm5_config_params *params_in, kadm5_config_params *params_out); krb5_error_code kadm5_free_config_params(krb5_context context, kadm5_config_params *params); krb5_error_code kadm5_free_realm_params(krb5_context kcontext, kadm5_config_params *params); krb5_error_code kadm5_get_admin_service_name(krb5_context, char *, char *, size_t); /* * For all initialization functions, the caller must first initialize * a context with kadm5_init_krb5_context which will survive as long * as the resulting handle. The caller should free the context with * krb5_free_context. */ kadm5_ret_t kadm5_init(krb5_context context, char *client_name, char *pass, char *service_name, kadm5_config_params *params, krb5_ui_4 struct_version, krb5_ui_4 api_version, char **db_args, void **server_handle); kadm5_ret_t kadm5_init_anonymous(krb5_context context, char *client_name, char *service_name, kadm5_config_params *params, krb5_ui_4 struct_version, krb5_ui_4 api_version, char **db_args, void **server_handle); kadm5_ret_t kadm5_init_with_password(krb5_context context, char *client_name, char *pass, char *service_name, kadm5_config_params *params, krb5_ui_4 struct_version, krb5_ui_4 api_version, char **db_args, void **server_handle); kadm5_ret_t kadm5_init_with_skey(krb5_context context, char *client_name, char *keytab, char *service_name, kadm5_config_params *params, krb5_ui_4 struct_version, krb5_ui_4 api_version, char **db_args, void **server_handle); kadm5_ret_t kadm5_init_with_creds(krb5_context context, char *client_name, krb5_ccache cc, char *service_name, kadm5_config_params *params, krb5_ui_4 struct_version, krb5_ui_4 api_version, char **db_args, void **server_handle); kadm5_ret_t kadm5_lock(void *server_handle); kadm5_ret_t kadm5_unlock(void *server_handle); kadm5_ret_t kadm5_flush(void *server_handle); kadm5_ret_t kadm5_destroy(void *server_handle); kadm5_ret_t kadm5_create_principal(void *server_handle, kadm5_principal_ent_t ent, long mask, char *pass); kadm5_ret_t kadm5_create_principal_3(void *server_handle, kadm5_principal_ent_t ent, long mask, int n_ks_tuple, krb5_key_salt_tuple *ks_tuple, char *pass); kadm5_ret_t kadm5_delete_principal(void *server_handle, krb5_principal principal); kadm5_ret_t kadm5_modify_principal(void *server_handle, kadm5_principal_ent_t ent, long mask); kadm5_ret_t kadm5_rename_principal(void *server_handle, krb5_principal,krb5_principal); kadm5_ret_t kadm5_get_principal(void *server_handle, krb5_principal principal, kadm5_principal_ent_t ent, long mask); kadm5_ret_t kadm5_chpass_principal(void *server_handle, krb5_principal principal, char *pass); kadm5_ret_t kadm5_chpass_principal_3(void *server_handle, krb5_principal principal, krb5_boolean keepold, int n_ks_tuple, krb5_key_salt_tuple *ks_tuple, char *pass); kadm5_ret_t kadm5_randkey_principal(void *server_handle, krb5_principal principal, krb5_keyblock **keyblocks, int *n_keys); kadm5_ret_t kadm5_randkey_principal_3(void *server_handle, krb5_principal principal, krb5_boolean keepold, int n_ks_tuple, krb5_key_salt_tuple *ks_tuple, krb5_keyblock **keyblocks, int *n_keys); kadm5_ret_t kadm5_setv4key_principal(void *server_handle, krb5_principal principal, krb5_keyblock *keyblock); kadm5_ret_t kadm5_setkey_principal(void *server_handle, krb5_principal principal, krb5_keyblock *keyblocks, int n_keys); kadm5_ret_t kadm5_setkey_principal_3(void *server_handle, krb5_principal principal, krb5_boolean keepold, int n_ks_tuple, krb5_key_salt_tuple *ks_tuple, krb5_keyblock *keyblocks, int n_keys); kadm5_ret_t kadm5_decrypt_key(void *server_handle, kadm5_principal_ent_t entry, krb5_int32 ktype, krb5_int32 stype, krb5_int32 kvno, krb5_keyblock *keyblock, krb5_keysalt *keysalt, int *kvnop); kadm5_ret_t kadm5_create_policy(void *server_handle, kadm5_policy_ent_t ent, long mask); /* * kadm5_create_policy_internal is not part of the supported, * exposed API. It is available only in the server library, and you * shouldn't use it unless you know why it's there and how it's * different from kadm5_create_policy. */ kadm5_ret_t kadm5_create_policy_internal(void *server_handle, kadm5_policy_ent_t entry, long mask); kadm5_ret_t kadm5_delete_policy(void *server_handle, kadm5_policy_t policy); kadm5_ret_t kadm5_modify_policy(void *server_handle, kadm5_policy_ent_t ent, long mask); /* * kadm5_modify_policy_internal is not part of the supported, * exposed API. It is available only in the server library, and you * shouldn't use it unless you know why it's there and how it's * different from kadm5_modify_policy. */ kadm5_ret_t kadm5_modify_policy_internal(void *server_handle, kadm5_policy_ent_t entry, long mask); kadm5_ret_t kadm5_get_policy(void *server_handle, kadm5_policy_t policy, kadm5_policy_ent_t ent); kadm5_ret_t kadm5_get_privs(void *server_handle, long *privs); kadm5_ret_t kadm5_chpass_principal_util(void *server_handle, krb5_principal princ, char *new_pw, char **ret_pw, char *msg_ret, unsigned int msg_len); kadm5_ret_t kadm5_free_principal_ent(void *server_handle, kadm5_principal_ent_t ent); kadm5_ret_t kadm5_free_policy_ent(void *server_handle, kadm5_policy_ent_t ent); kadm5_ret_t kadm5_get_principals(void *server_handle, char *exp, char ***princs, int *count); kadm5_ret_t kadm5_get_policies(void *server_handle, char *exp, char ***pols, int *count); kadm5_ret_t kadm5_free_key_data(void *server_handle, krb5_int16 *n_key_data, krb5_key_data *key_data); kadm5_ret_t kadm5_free_name_list(void *server_handle, char **names, int count); krb5_error_code kadm5_init_krb5_context (krb5_context *); krb5_error_code kadm5_init_iprop(void *server_handle, char **db_args); /* * kadm5_get_principal_keys is used only by kadmin.local to extract existing * keys from the database without changing them. It should never be exposed * to the network protocol. */ kadm5_ret_t kadm5_get_principal_keys(void *server_handle, krb5_principal principal, krb5_keyblock **keyblocks, int *n_keys); kadm5_ret_t kadm5_purgekeys(void *server_handle, krb5_principal principal, int keepkvno); kadm5_ret_t kadm5_get_strings(void *server_handle, krb5_principal principal, krb5_string_attr **strings_out, int *count_out); kadm5_ret_t kadm5_set_string(void *server_handle, krb5_principal principal, const char *key, const char *value); kadm5_ret_t kadm5_free_strings(void *server_handle, krb5_string_attr *strings, int count); KADM5INT_END_DECLS #endif /* __KADM5_ADMIN_H__ */ 070701000a254e000081a40000000000000000000000015125a0750000101d000000b500010002ffffffffffffffff0000002800000000root/usr/local/include/kadm5/kadm_err.h/* * et-h-kadm_err.h: * This file is automatically generated; please do not edit it. */ #include #define KADM5_FAILURE (43787520L) #define KADM5_AUTH_GET (43787521L) #define KADM5_AUTH_ADD (43787522L) #define KADM5_AUTH_MODIFY (43787523L) #define KADM5_AUTH_DELETE (43787524L) #define KADM5_AUTH_INSUFFICIENT (43787525L) #define KADM5_BAD_DB (43787526L) #define KADM5_DUP (43787527L) #define KADM5_RPC_ERROR (43787528L) #define KADM5_NO_SRV (43787529L) #define KADM5_BAD_HIST_KEY (43787530L) #define KADM5_NOT_INIT (43787531L) #define KADM5_UNK_PRINC (43787532L) #define KADM5_UNK_POLICY (43787533L) #define KADM5_BAD_MASK (43787534L) #define KADM5_BAD_CLASS (43787535L) #define KADM5_BAD_LENGTH (43787536L) #define KADM5_BAD_POLICY (43787537L) #define KADM5_BAD_PRINCIPAL (43787538L) #define KADM5_BAD_AUX_ATTR (43787539L) #define KADM5_BAD_HISTORY (43787540L) #define KADM5_BAD_MIN_PASS_LIFE (43787541L) #define KADM5_PASS_Q_TOOSHORT (43787542L) #define KADM5_PASS_Q_CLASS (43787543L) #define KADM5_PASS_Q_DICT (43787544L) #define KADM5_PASS_REUSE (43787545L) #define KADM5_PASS_TOOSOON (43787546L) #define KADM5_POLICY_REF (43787547L) #define KADM5_INIT (43787548L) #define KADM5_BAD_PASSWORD (43787549L) #define KADM5_PROTECT_PRINCIPAL (43787550L) #define KADM5_BAD_SERVER_HANDLE (43787551L) #define KADM5_BAD_STRUCT_VERSION (43787552L) #define KADM5_OLD_STRUCT_VERSION (43787553L) #define KADM5_NEW_STRUCT_VERSION (43787554L) #define KADM5_BAD_API_VERSION (43787555L) #define KADM5_OLD_LIB_API_VERSION (43787556L) #define KADM5_OLD_SERVER_API_VERSION (43787557L) #define KADM5_NEW_LIB_API_VERSION (43787558L) #define KADM5_NEW_SERVER_API_VERSION (43787559L) #define KADM5_SECURE_PRINC_MISSING (43787560L) #define KADM5_NO_RENAME_SALT (43787561L) #define KADM5_BAD_CLIENT_PARAMS (43787562L) #define KADM5_BAD_SERVER_PARAMS (43787563L) #define KADM5_AUTH_LIST (43787564L) #define KADM5_AUTH_CHANGEPW (43787565L) #define KADM5_GSS_ERROR (43787566L) #define KADM5_BAD_TL_TYPE (43787567L) #define KADM5_MISSING_CONF_PARAMS (43787568L) #define KADM5_BAD_SERVER_NAME (43787569L) #define KADM5_AUTH_SETKEY (43787570L) #define KADM5_SETKEY_DUP_ENCTYPES (43787571L) #define KADM5_SETV4KEY_INVAL_ENCTYPE (43787572L) #define KADM5_SETKEY3_ETYPE_MISMATCH (43787573L) #define KADM5_MISSING_KRB5_CONF_PARAMS (43787574L) #define KADM5_XDR_FAILURE (43787575L) #define KADM5_CANT_RESOLVE (43787576L) #define KADM5_PASS_Q_GENERIC (43787577L) #define KADM5_BAD_KEYSALTS (43787578L) #define ERROR_TABLE_BASE_ovk (43787520L) extern const struct error_table et_ovk_error_table; #if !defined(_WIN32) /* for compatibility with older versions... */ extern void initialize_ovk_error_table (void) /*@modifies internalState@*/; #else #define initialize_ovk_error_table() #endif #if !defined(_WIN32) #define init_ovk_err_tbl initialize_ovk_error_table #define ovk_err_base ERROR_TABLE_BASE_ovk #endif 070701000a2532000081a40000000000000000000000015125a074000007bb000000b500010002ffffffffffffffff0000002100000000root/usr/local/include/com_err.h/* * Copyright 1988, Student Information Processing Board of the * Massachusetts Institute of Technology. * * Copyright 1995 by Cygnus Support. * * For copyright and distribution info, see the documentation supplied * with this package. */ /* Header file for common error description library. */ #ifndef __COM_ERR_H #if defined(_WIN32) #include #endif #ifndef KRB5_CALLCONV #define KRB5_CALLCONV #define KRB5_CALLCONV_C #endif #include typedef long errcode_t; typedef void (*et_old_error_hook_func) (const char *, errcode_t, const char *, va_list ap); struct error_table { /*@shared@*/ char const * const * msgs; long base; unsigned int n_msgs; }; #ifdef __cplusplus extern "C" { #endif /* Public interfaces */ extern void KRB5_CALLCONV_C com_err (const char *, errcode_t, const char *, ...) #if !defined(__cplusplus) && (__GNUC__ > 2) __attribute__((__format__(__printf__, 3, 4))) #endif ; extern void KRB5_CALLCONV com_err_va (const char *whoami, errcode_t code, const char *fmt, va_list ap) #if !defined(__cplusplus) && (__GNUC__ > 2) __attribute__((__format__(__printf__, 3, 0))) #endif ; extern /*@observer@*//*@dependent@*/ const char * KRB5_CALLCONV error_message (errcode_t) /*@modifies internalState@*/; extern errcode_t KRB5_CALLCONV add_error_table (/*@dependent@*/ const struct error_table *) /*@modifies internalState@*/; extern errcode_t KRB5_CALLCONV remove_error_table (const struct error_table *) /*@modifies internalState@*/; #if !defined(_WIN32) /* * The display routine should be application specific. A global hook, * may cause inappropriate display procedures to be called between * applications under non-Unix environments. */ extern et_old_error_hook_func set_com_err_hook (et_old_error_hook_func); extern et_old_error_hook_func reset_com_err_hook (void); #endif #ifdef __cplusplus } #endif #define __COM_ERR_H #endif /* ! defined(__COM_ERR_H) */ 070701000a254f000081a40000000000000000000000015125a0740000e521000000b500010002ffffffffffffffff0000001d00000000root/usr/local/include/kdb.h/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* * Copyright 1990,1991 by the Massachusetts Institute of Technology. * All Rights Reserved. * * Export of this software from the United States of America may * require a specific license from the United States Government. * It is the responsibility of any person or organization contemplating * export to obtain such a license before exporting. * * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and * distribute this software and its documentation for any purpose and * without fee is hereby granted, provided that the above copyright * notice appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity pertaining * to distribution of the software without specific, written prior * permission. Furthermore if you modify this software you must label * your software as modified software and not distribute it in such a * fashion that it might be confused with the original M.I.T. software. * M.I.T. makes no representations about the suitability of * this software for any purpose. It is provided "as is" without express * or implied warranty. */ /* * Copyright (C) 1998 by the FundsXpress, INC. * * All rights reserved. * * Export of this software from the United States of America may require * a specific license from the United States Government. It is the * responsibility of any person or organization contemplating export to * obtain such a license before exporting. * * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and * distribute this software and its documentation for any purpose and * without fee is hereby granted, provided that the above copyright * notice appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, and that * the name of FundsXpress. not be used in advertising or publicity pertaining * to distribution of the software without specific, written prior * permission. FundsXpress makes no representations about the suitability of * this software for any purpose. It is provided "as is" without express * or implied warranty. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* KDC Database interface definitions */ /* This API is not considered as stable as the main krb5 API. * * - We may make arbitrary incompatible changes between feature * releases (e.g. from 1.7 to 1.8). * - We will make some effort to avoid making incompatible changes for * bugfix releases, but will make them if necessary. */ #ifndef KRB5_KDB5__ #define KRB5_KDB5__ #include /* This version will be incremented when incompatible changes are made to the * KDB API, and will be kept in sync with the libkdb major version. */ #define KRB5_KDB_API_VERSION 7 /* Salt types */ #define KRB5_KDB_SALTTYPE_NORMAL 0 #define KRB5_KDB_SALTTYPE_V4 1 #define KRB5_KDB_SALTTYPE_NOREALM 2 #define KRB5_KDB_SALTTYPE_ONLYREALM 3 #define KRB5_KDB_SALTTYPE_SPECIAL 4 #define KRB5_KDB_SALTTYPE_AFS3 5 #define KRB5_KDB_SALTTYPE_CERTHASH 6 /* Attributes */ #define KRB5_KDB_DISALLOW_POSTDATED 0x00000001 #define KRB5_KDB_DISALLOW_FORWARDABLE 0x00000002 #define KRB5_KDB_DISALLOW_TGT_BASED 0x00000004 #define KRB5_KDB_DISALLOW_RENEWABLE 0x00000008 #define KRB5_KDB_DISALLOW_PROXIABLE 0x00000010 #define KRB5_KDB_DISALLOW_DUP_SKEY 0x00000020 #define KRB5_KDB_DISALLOW_ALL_TIX 0x00000040 #define KRB5_KDB_REQUIRES_PRE_AUTH 0x00000080 #define KRB5_KDB_REQUIRES_HW_AUTH 0x00000100 #define KRB5_KDB_REQUIRES_PWCHANGE 0x00000200 #define KRB5_KDB_DISALLOW_SVR 0x00001000 #define KRB5_KDB_PWCHANGE_SERVICE 0x00002000 #define KRB5_KDB_SUPPORT_DESMD5 0x00004000 #define KRB5_KDB_NEW_PRINC 0x00008000 #define KRB5_KDB_OK_AS_DELEGATE 0x00100000 #define KRB5_KDB_OK_TO_AUTH_AS_DELEGATE 0x00200000 /* S4U2Self OK */ #define KRB5_KDB_NO_AUTH_DATA_REQUIRED 0x00400000 /* Creation flags */ #define KRB5_KDB_CREATE_BTREE 0x00000001 #define KRB5_KDB_CREATE_HASH 0x00000002 /* Private flag used to indicate principal is local TGS */ #define KRB5_KDB_TICKET_GRANTING_SERVICE 0x01000000 /* Private flag used to indicate xrealm relationship is non-transitive */ #define KRB5_KDB_XREALM_NON_TRANSITIVE 0x02000000 /* Entry get flags */ /* Name canonicalization requested */ #define KRB5_KDB_FLAG_CANONICALIZE 0x00000010 /* Include authorization data generated by backend */ #define KRB5_KDB_FLAG_INCLUDE_PAC 0x00000020 /* Is AS-REQ (client referrals only) */ #define KRB5_KDB_FLAG_CLIENT_REFERRALS_ONLY 0x00000040 /* Map cross-realm principals */ #define KRB5_KDB_FLAG_MAP_PRINCIPALS 0x00000080 /* Protocol transition */ #define KRB5_KDB_FLAG_PROTOCOL_TRANSITION 0x00000100 /* Constrained delegation */ #define KRB5_KDB_FLAG_CONSTRAINED_DELEGATION 0x00000200 /* User-to-user */ #define KRB5_KDB_FLAG_USER_TO_USER 0x00000800 /* Cross-realm */ #define KRB5_KDB_FLAG_CROSS_REALM 0x00001000 /* Allow in-realm aliases */ #define KRB5_KDB_FLAG_ALIAS_OK 0x00002000 #define KRB5_KDB_FLAGS_S4U ( KRB5_KDB_FLAG_PROTOCOL_TRANSITION | \ KRB5_KDB_FLAG_CONSTRAINED_DELEGATION ) /* String attribute names recognized by krb5 */ #define KRB5_KDB_SK_SESSION_ENCTYPES "session_enctypes" #if !defined(_WIN32) /* * Note --- these structures cannot be modified without changing the * database version number in libkdb.a, but should be expandable by * adding new tl_data types. */ typedef struct _krb5_tl_data { struct _krb5_tl_data* tl_data_next; /* NOT saved */ krb5_int16 tl_data_type; krb5_ui_2 tl_data_length; krb5_octet * tl_data_contents; } krb5_tl_data; /* String attributes (currently stored inside tl-data) map C string keys to * values. They can be set via kadmin and consumed by KDC plugins. */ typedef struct krb5_string_attr_st { char *key; char *value; } krb5_string_attr; /* * If this ever changes up the version number and make the arrays be as * big as necessary. * * Currently the first type is the enctype and the second is the salt type. */ typedef struct _krb5_key_data { krb5_int16 key_data_ver; /* Version */ krb5_int16 key_data_kvno; /* Key Version */ krb5_int16 key_data_type[2]; /* Array of types */ krb5_ui_2 key_data_length[2]; /* Array of lengths */ krb5_octet * key_data_contents[2]; /* Array of pointers */ } krb5_key_data; #define KRB5_KDB_V1_KEY_DATA_ARRAY 2 /* # of array elements */ typedef struct _krb5_keysalt { krb5_int16 type; krb5_data data; /* Length, data */ } krb5_keysalt; /* * A principal database entry. Extensions to this structure currently use the * tl_data list. The e_data and e_length fields are not used by any calling * code except kdb5_util dump and load, which marshal and unmarshal the array * in the dump record. KDB modules may use these fields internally as long as * they set e_length appropriately (non-zero if the data should be marshalled * across dump and load, zero if not) and handle null e_data values in * caller-constructed principal entries. */ typedef struct _krb5_db_entry_new { krb5_magic magic; /* NOT saved */ krb5_ui_2 len; krb5_ui_4 mask; /* members currently changed/set */ krb5_flags attributes; krb5_deltat max_life; krb5_deltat max_renewable_life; krb5_timestamp expiration; /* When the client expires */ krb5_timestamp pw_expiration; /* When its passwd expires */ krb5_timestamp last_success; /* Last successful passwd */ krb5_timestamp last_failed; /* Last failed passwd attempt */ krb5_kvno fail_auth_count; /* # of failed passwd attempt */ krb5_int16 n_tl_data; krb5_int16 n_key_data; krb5_ui_2 e_length; /* Length of extra data */ krb5_octet * e_data; /* Extra data to be saved */ krb5_principal princ; /* Length, data */ krb5_tl_data * tl_data; /* Linked list */ krb5_key_data * key_data; /* Array */ } krb5_db_entry; typedef struct _osa_policy_ent_t { int version; char *name; krb5_ui_4 pw_min_life; krb5_ui_4 pw_max_life; krb5_ui_4 pw_min_length; krb5_ui_4 pw_min_classes; krb5_ui_4 pw_history_num; krb5_ui_4 policy_refcnt; /* Only valid if version > 1 */ krb5_ui_4 pw_max_fail; /* pwdMaxFailure */ krb5_ui_4 pw_failcnt_interval; /* pwdFailureCountInterval */ krb5_ui_4 pw_lockout_duration; /* pwdLockoutDuration */ /* Only valid if version > 2 */ krb5_ui_4 attributes; krb5_ui_4 max_life; krb5_ui_4 max_renewable_life; char * allowed_keysalts; krb5_int16 n_tl_data; krb5_tl_data * tl_data; } osa_policy_ent_rec, *osa_policy_ent_t; typedef void (*osa_adb_iter_policy_func) (void *, osa_policy_ent_t); typedef struct __krb5_key_salt_tuple { krb5_enctype ks_enctype; krb5_int32 ks_salttype; } krb5_key_salt_tuple; #define KRB5_KDB_MAGIC_NUMBER 0xdbdbdbdb #define KRB5_KDB_V1_BASE_LENGTH 38 #define KRB5_KDB_MAX_ALLOWED_KS_LEN 512 #define KRB5_TL_LAST_PWD_CHANGE 0x0001 #define KRB5_TL_MOD_PRINC 0x0002 #define KRB5_TL_KADM_DATA 0x0003 #define KRB5_TL_KADM5_E_DATA 0x0004 #define KRB5_TL_RB1_CHALLENGE 0x0005 #ifdef SECURID #define KRB5_TL_SECURID_STATE 0x0006 #endif /* SECURID */ #define KRB5_TL_USER_CERTIFICATE 0x0007 #define KRB5_TL_MKVNO 0x0008 #define KRB5_TL_ACTKVNO 0x0009 #define KRB5_TL_MKEY_AUX 0x000a /* String attributes may not always be represented in tl-data. kadmin clients * must use the get_strings and set_string RPCs. */ #define KRB5_TL_STRING_ATTRS 0x000b #define KRB5_TL_PAC_LOGON_INFO 0x0100 /* NDR encoded validation info */ #define KRB5_TL_SERVER_REFERRAL 0x0200 /* ASN.1 encoded ServerReferralInfo */ #define KRB5_TL_SVR_REFERRAL_DATA 0x0300 /* ASN.1 encoded PA-SVR-REFERRAL-DATA */ #define KRB5_TL_CONSTRAINED_DELEGATION_ACL 0x0400 /* Each entry is a permitted SPN */ #define KRB5_TL_LM_KEY 0x0500 /* LM OWF */ #define KRB5_TL_X509_SUBJECT_ISSUER_NAME 0x0600 /* IssuerDNSubjectDN */ #define KRB5_TL_LAST_ADMIN_UNLOCK 0x0700 /* Timestamp of admin unlock */ #define KRB5_TL_DB_ARGS 0x7fff /* version number for KRB5_TL_ACTKVNO data */ #define KRB5_TL_ACTKVNO_VER 1 /* version number for KRB5_TL_MKEY_AUX data */ #define KRB5_TL_MKEY_AUX_VER 1 typedef struct _krb5_actkvno_node { struct _krb5_actkvno_node *next; krb5_kvno act_kvno; krb5_timestamp act_time; } krb5_actkvno_node; typedef struct _krb5_mkey_aux_node { struct _krb5_mkey_aux_node *next; krb5_kvno mkey_kvno; /* kvno of mkey protecting the latest_mkey */ krb5_key_data latest_mkey; /* most recent mkey */ } krb5_mkey_aux_node; typedef struct _krb5_keylist_node { krb5_keyblock keyblock; krb5_kvno kvno; struct _krb5_keylist_node *next; } krb5_keylist_node; /* * Determines the number of failed KDC requests before DISALLOW_ALL_TIX is set * on the principal. */ #define KRB5_MAX_FAIL_COUNT 5 /* XXX depends on knowledge of krb5_parse_name() formats */ #define KRB5_KDB_M_NAME "K/M" /* Kerberos/Master */ /* prompts used by default when reading the KDC password from the keyboard. */ #define KRB5_KDC_MKEY_1 "Enter KDC database master key" #define KRB5_KDC_MKEY_2 "Re-enter KDC database master key to verify" extern char *krb5_mkey_pwd_prompt1; extern char *krb5_mkey_pwd_prompt2; /* * These macros specify the encoding of data within the database. * * Data encoding is little-endian. */ #ifdef _KRB5_INT_H #include "k5-platform.h" #define krb5_kdb_decode_int16(cp, i16) \ *((krb5_int16 *) &(i16)) = load_16_le(cp) #define krb5_kdb_decode_int32(cp, i32) \ *((krb5_int32 *) &(i32)) = load_32_le(cp) #define krb5_kdb_encode_int16(i16, cp) store_16_le(i16, cp) #define krb5_kdb_encode_int32(i32, cp) store_32_le(i32, cp) #endif /* _KRB5_INT_H */ #define KRB5_KDB_OPEN_RW 0 #define KRB5_KDB_OPEN_RO 1 #ifndef KRB5_KDB_SRV_TYPE_KDC #define KRB5_KDB_SRV_TYPE_KDC 0x0100 #endif #ifndef KRB5_KDB_SRV_TYPE_ADMIN #define KRB5_KDB_SRV_TYPE_ADMIN 0x0200 #endif #ifndef KRB5_KDB_SRV_TYPE_PASSWD #define KRB5_KDB_SRV_TYPE_PASSWD 0x0300 #endif #ifndef KRB5_KDB_SRV_TYPE_OTHER #define KRB5_KDB_SRV_TYPE_OTHER 0x0400 #endif #define KRB5_KDB_OPT_SET_DB_NAME 0 #define KRB5_KDB_OPT_SET_LOCK_MODE 1 #define KRB5_DB_LOCKMODE_SHARED 0x0001 #define KRB5_DB_LOCKMODE_EXCLUSIVE 0x0002 #define KRB5_DB_LOCKMODE_PERMANENT 0x0008 /* libkdb.spec */ krb5_error_code krb5_db_setup_lib_handle(krb5_context kcontext); krb5_error_code krb5_db_open( krb5_context kcontext, char **db_args, int mode ); krb5_error_code krb5_db_init ( krb5_context kcontext ); krb5_error_code krb5_db_create ( krb5_context kcontext, char **db_args ); krb5_error_code krb5_db_inited ( krb5_context kcontext ); krb5_error_code kdb5_db_create ( krb5_context kcontext, char **db_args ); krb5_error_code krb5_db_fini ( krb5_context kcontext ); const char * krb5_db_errcode2string ( krb5_context kcontext, long err_code ); krb5_error_code krb5_db_destroy ( krb5_context kcontext, char **db_args ); krb5_error_code krb5_db_promote ( krb5_context kcontext, char **db_args ); krb5_error_code krb5_db_get_age ( krb5_context kcontext, char *db_name, time_t *t ); krb5_error_code krb5_db_lock ( krb5_context kcontext, int lock_mode ); krb5_error_code krb5_db_unlock ( krb5_context kcontext ); krb5_error_code krb5_db_get_principal ( krb5_context kcontext, krb5_const_principal search_for, unsigned int flags, krb5_db_entry **entry ); void krb5_db_free_principal ( krb5_context kcontext, krb5_db_entry *entry ); krb5_error_code krb5_db_put_principal ( krb5_context kcontext, krb5_db_entry *entry ); krb5_error_code krb5_db_delete_principal ( krb5_context kcontext, krb5_principal search_for ); krb5_error_code krb5_db_iterate ( krb5_context kcontext, char *match_entry, int (*func) (krb5_pointer, krb5_db_entry *), krb5_pointer func_arg ); krb5_error_code krb5_db_store_master_key ( krb5_context kcontext, char *keyfile, krb5_principal mname, krb5_kvno kvno, krb5_keyblock *key, char *master_pwd); krb5_error_code krb5_db_store_master_key_list ( krb5_context kcontext, char *keyfile, krb5_principal mname, char *master_pwd); krb5_error_code krb5_db_fetch_mkey ( krb5_context context, krb5_principal mname, krb5_enctype etype, krb5_boolean fromkeyboard, krb5_boolean twice, char *db_args, krb5_kvno *kvno, krb5_data *salt, krb5_keyblock *key); krb5_error_code krb5_db_fetch_mkey_list( krb5_context context, krb5_principal mname, const krb5_keyblock * mkey ); krb5_error_code krb5_dbe_find_enctype( krb5_context kcontext, krb5_db_entry *dbentp, krb5_int32 ktype, krb5_int32 stype, krb5_int32 kvno, krb5_key_data **kdatap); krb5_error_code krb5_dbe_search_enctype ( krb5_context kcontext, krb5_db_entry *dbentp, krb5_int32 *start, krb5_int32 ktype, krb5_int32 stype, krb5_int32 kvno, krb5_key_data **kdatap); krb5_error_code krb5_db_setup_mkey_name ( krb5_context context, const char *keyname, const char *realm, char **fullname, krb5_principal *principal); /** * Decrypts the key given in @@a key_data. If @a mkey is specified, that * master key is used. If @a mkey is NULL, then all master keys are tried. */ krb5_error_code krb5_dbe_decrypt_key_data( krb5_context context, const krb5_keyblock * mkey, const krb5_key_data * key_data, krb5_keyblock * dbkey, krb5_keysalt * keysalt); krb5_error_code krb5_dbe_encrypt_key_data( krb5_context context, const krb5_keyblock * mkey, const krb5_keyblock * dbkey, const krb5_keysalt * keysalt, int keyver, krb5_key_data * key_data); krb5_error_code krb5_dbe_fetch_act_key_list(krb5_context context, krb5_principal princ, krb5_actkvno_node **act_key_list); krb5_error_code krb5_dbe_find_act_mkey( krb5_context context, krb5_actkvno_node * act_mkey_list, krb5_kvno * act_kvno, krb5_keyblock ** act_mkey); krb5_error_code krb5_dbe_find_mkey( krb5_context context, krb5_db_entry * entry, krb5_keyblock ** mkey); /* Set *mkvno to mkvno in entry tl_data, or 0 if not present. */ krb5_error_code krb5_dbe_lookup_mkvno( krb5_context context, krb5_db_entry * entry, krb5_kvno * mkvno); krb5_keylist_node * krb5_db_mkey_list_alias( krb5_context kcontext ); /* Set *mkvno to mkvno in entry tl_data, or minimum value from mkey_list. */ krb5_error_code krb5_dbe_get_mkvno( krb5_context context, krb5_db_entry * entry, krb5_kvno * mkvno); krb5_error_code krb5_dbe_lookup_mod_princ_data( krb5_context context, krb5_db_entry * entry, krb5_timestamp * mod_time, krb5_principal * mod_princ); krb5_error_code krb5_dbe_lookup_mkey_aux( krb5_context context, krb5_db_entry * entry, krb5_mkey_aux_node ** mkey_aux_data_list); krb5_error_code krb5_dbe_update_mkvno( krb5_context context, krb5_db_entry * entry, krb5_kvno mkvno); krb5_error_code krb5_dbe_lookup_actkvno( krb5_context context, krb5_db_entry * entry, krb5_actkvno_node ** actkvno_list); krb5_error_code krb5_dbe_update_mkey_aux( krb5_context context, krb5_db_entry * entry, krb5_mkey_aux_node * mkey_aux_data_list); krb5_error_code krb5_dbe_update_actkvno(krb5_context context, krb5_db_entry * entry, const krb5_actkvno_node *actkvno_list); krb5_error_code krb5_dbe_update_last_pwd_change( krb5_context context, krb5_db_entry * entry, krb5_timestamp stamp); krb5_error_code krb5_dbe_update_last_admin_unlock( krb5_context context, krb5_db_entry * entry, krb5_timestamp stamp); krb5_error_code krb5_dbe_lookup_tl_data( krb5_context context, krb5_db_entry * entry, krb5_tl_data * ret_tl_data); krb5_error_code krb5_dbe_create_key_data( krb5_context context, krb5_db_entry * entry); krb5_error_code krb5_dbe_update_mod_princ_data( krb5_context context, krb5_db_entry * entry, krb5_timestamp mod_date, krb5_const_principal mod_princ); void *krb5_db_alloc( krb5_context kcontext, void *ptr, size_t size ); void krb5_db_free( krb5_context kcontext, void *ptr); krb5_error_code krb5_dbe_lookup_last_pwd_change( krb5_context context, krb5_db_entry * entry, krb5_timestamp * stamp); krb5_error_code krb5_dbe_lookup_last_admin_unlock( krb5_context context, krb5_db_entry * entry, krb5_timestamp * stamp); /* Retrieve the set of string attributes in entry, in no particular order. * Free *strings_out with krb5_dbe_free_strings when done. */ krb5_error_code krb5_dbe_get_strings(krb5_context context, krb5_db_entry *entry, krb5_string_attr **strings_out, int *count_out); /* Retrieve a single string attribute from entry, or NULL if there is no * attribute for key. Free *value_out with krb5_dbe_free_string when done. */ krb5_error_code krb5_dbe_get_string(krb5_context context, krb5_db_entry *entry, const char *key, char **value_out); /* Change or add a string attribute in entry, or delete it if value is NULL. */ krb5_error_code krb5_dbe_set_string(krb5_context context, krb5_db_entry *entry, const char *key, const char *value); krb5_error_code krb5_dbe_delete_tl_data( krb5_context context, krb5_db_entry * entry, krb5_int16 tl_data_type); krb5_error_code krb5_db_update_tl_data(krb5_context context, krb5_int16 * n_tl_datap, krb5_tl_data **tl_datap, krb5_tl_data * new_tl_data); krb5_error_code krb5_dbe_update_tl_data( krb5_context context, krb5_db_entry * entry, krb5_tl_data * new_tl_data); /* Compute the salt for a key data entry given the corresponding principal. */ krb5_error_code krb5_dbe_compute_salt(krb5_context context, const krb5_key_data *key, krb5_const_principal princ, krb5_int16 *salttype_out, krb5_data **salt_out); krb5_error_code krb5_dbe_cpw( krb5_context kcontext, krb5_keyblock * master_key, krb5_key_salt_tuple * ks_tuple, int ks_tuple_count, char * passwd, int new_kvno, krb5_boolean keepold, krb5_db_entry * db_entry); krb5_error_code krb5_dbe_ark( krb5_context context, krb5_keyblock * master_key, krb5_key_salt_tuple * ks_tuple, int ks_tuple_count, krb5_db_entry * db_entry); krb5_error_code krb5_dbe_crk( krb5_context context, krb5_keyblock * master_key, krb5_key_salt_tuple * ks_tuple, int ks_tuple_count, krb5_boolean keepold, krb5_db_entry * db_entry); krb5_error_code krb5_dbe_apw( krb5_context context, krb5_keyblock * master_key, krb5_key_salt_tuple * ks_tuple, int ks_tuple_count, char * passwd, krb5_db_entry * db_entry); int krb5_db_get_key_data_kvno( krb5_context context, int count, krb5_key_data * data); krb5_error_code krb5_db_sign_authdata(krb5_context kcontext, unsigned int flags, krb5_const_principal client_princ, krb5_db_entry *client, krb5_db_entry *server, krb5_db_entry *krbtgt, krb5_keyblock *client_key, krb5_keyblock *server_key, krb5_keyblock *krbtgt_key, krb5_keyblock *session_key, krb5_timestamp authtime, krb5_authdata **tgt_auth_data, krb5_authdata ***signed_auth_data); krb5_error_code krb5_db_check_transited_realms(krb5_context kcontext, const krb5_data *tr_contents, const krb5_data *client_realm, const krb5_data *server_realm); krb5_error_code krb5_db_check_policy_as(krb5_context kcontext, krb5_kdc_req *request, krb5_db_entry *client, krb5_db_entry *server, krb5_timestamp kdc_time, const char **status, krb5_pa_data ***e_data); krb5_error_code krb5_db_check_policy_tgs(krb5_context kcontext, krb5_kdc_req *request, krb5_db_entry *server, krb5_ticket *ticket, const char **status, krb5_pa_data ***e_data); void krb5_db_audit_as_req(krb5_context kcontext, krb5_kdc_req *request, krb5_db_entry *client, krb5_db_entry *server, krb5_timestamp authtime, krb5_error_code error_code); void krb5_db_refresh_config(krb5_context kcontext); krb5_error_code krb5_db_check_allowed_to_delegate(krb5_context kcontext, krb5_const_principal client, const krb5_db_entry *server, krb5_const_principal proxy); /* default functions. Should not be directly called */ /* * Default functions prototype */ krb5_error_code krb5_dbe_def_search_enctype( krb5_context kcontext, krb5_db_entry *dbentp, krb5_int32 *start, krb5_int32 ktype, krb5_int32 stype, krb5_int32 kvno, krb5_key_data **kdatap); krb5_error_code krb5_def_store_mkey_list( krb5_context context, char *keyfile, krb5_principal mname, krb5_keylist_node *keylist, char *master_pwd); krb5_error_code krb5_db_def_fetch_mkey( krb5_context context, krb5_principal mname, krb5_keyblock *key, krb5_kvno *kvno, char *db_args); krb5_error_code krb5_def_fetch_mkey_list( krb5_context context, krb5_principal mprinc, const krb5_keyblock *mkey, krb5_keylist_node **mkeys_list); krb5_error_code krb5_dbe_def_cpw( krb5_context context, krb5_keyblock * master_key, krb5_key_salt_tuple * ks_tuple, int ks_tuple_count, char * passwd, int new_kvno, krb5_boolean keepold, krb5_db_entry * db_entry); krb5_error_code krb5_dbe_def_decrypt_key_data( krb5_context context, const krb5_keyblock * mkey, const krb5_key_data * key_data, krb5_keyblock * dbkey, krb5_keysalt * keysalt); krb5_error_code krb5_dbe_def_encrypt_key_data( krb5_context context, const krb5_keyblock * mkey, const krb5_keyblock * dbkey, const krb5_keysalt * keysalt, int keyver, krb5_key_data * key_data); krb5_error_code krb5_db_create_policy( krb5_context kcontext, osa_policy_ent_t policy); krb5_error_code krb5_db_get_policy ( krb5_context kcontext, char *name, osa_policy_ent_t *policy ); krb5_error_code krb5_db_put_policy( krb5_context kcontext, osa_policy_ent_t policy); krb5_error_code krb5_db_iter_policy( krb5_context kcontext, char *match_entry, osa_adb_iter_policy_func func, void *data); krb5_error_code krb5_db_delete_policy( krb5_context kcontext, char *policy); void krb5_db_free_policy( krb5_context kcontext, osa_policy_ent_t policy); krb5_error_code krb5_db_set_context(krb5_context, void *db_context); krb5_error_code krb5_db_get_context(krb5_context, void **db_context); void krb5_dbe_free_key_data_contents(krb5_context, krb5_key_data *); void krb5_dbe_free_key_list(krb5_context, krb5_keylist_node *); void krb5_dbe_free_actkvno_list(krb5_context, krb5_actkvno_node *); void krb5_dbe_free_mkey_aux_list(krb5_context, krb5_mkey_aux_node *); void krb5_dbe_free_tl_data(krb5_context, krb5_tl_data *); void krb5_dbe_free_strings(krb5_context, krb5_string_attr *, int count); void krb5_dbe_free_string(krb5_context, char *); #define KRB5_KDB_DEF_FLAGS 0 #define KDB_MAX_DB_NAME 128 #define KDB_REALM_SECTION "realms" #define KDB_MODULE_POINTER "database_module" #define KDB_MODULE_DEF_SECTION "dbdefaults" #define KDB_MODULE_SECTION "dbmodules" #define KDB_LIB_POINTER "db_library" #define KDB_DATABASE_CONF_FILE DEFAULT_SECURE_PROFILE_PATH #define KDB_DATABASE_ENV_PROF KDC_PROFILE_ENV #define KRB5_KDB_OPEN_RW 0 #define KRB5_KDB_OPEN_RO 1 #define KRB5_KDB_OPT_SET_DB_NAME 0 #define KRB5_KDB_OPT_SET_LOCK_MODE 1 /* * This number indicates the date of the last incompatible change to the DAL. * The maj_ver field of the module's vtable structure must match this version. */ #define KRB5_KDB_DAL_MAJOR_VERSION 4 /* * A krb5_context can hold one database object. Modules should use * krb5_db_set_context and krb5_db_get_context to store state associated with * the database object. * * Some module functions are mandatory for KDC operation; others are optional * or apply only to administrative operations. If a function is optional, a * module can leave the function pointer as NULL. Alternatively, modules can * return KRB5_PLUGIN_OP_NOTSUPP when asked to perform an inapplicable action. * * Some module functions have default implementations which will call back into * the vtable interface. Leave these functions as NULL to use the default * implementations. * * The documentation in these comments describes the DAL as it is currently * implemented and used, not as it should be. So if anything seems off, that * probably means the current state of things is off. */ typedef struct _kdb_vftabl { short int maj_ver; short int min_ver; /* * Mandatory: Invoked after the module library is loaded, when the first DB * using the module is opened, across all contexts. */ krb5_error_code (*init_library)(void); /* * Mandatory: Invoked before the module library is unloaded, after the last * DB using the module is closed, across all contexts. */ krb5_error_code (*fini_library)(void); /* * Mandatory: Initialize a database object. Profile settings should be * read from conf_section inside KDB_MODULE_SECTION. db_args communicates * command-line arguments for module-specific flags. mode will be one of * KRB5_KDB_OPEN_{RW,RO} or'd with one of * KRB5_KDB_SRV_TYPE_{KDC,ADMIN,PASSWD,OTHER}. */ krb5_error_code (*init_module)(krb5_context kcontext, char *conf_section, char **db_args, int mode); /* * Mandatory: Finalize the database object contained in a context. Free * any state contained in the db_context pointer and null it out. */ krb5_error_code (*fini_module)(krb5_context kcontext); /* * Optional: Initialize a database object while creating the underlying * database. conf_section and db_args have the same meaning as in * init_module. This function may return an error if the database already * exists. Used by kdb5_util create. * * If db_args contains the value "temporary", the module should create an * exclusively locked side copy of the database suitable for loading in a * propagation from master to slave. This side copy will later be promoted * with promote_db, allowing complete updates of the DB with no loss in * read availability. If the module cannot comply with this architecture, * it should return an error. */ krb5_error_code (*create)(krb5_context kcontext, char *conf_section, char **db_args); /* * Optional: Destroy a database. conf_section and db_args have the same * meaning as in init_module. Used by kdb5_util destroy. In current * usage, the database is destroyed while open, so the module should handle * that. */ krb5_error_code (*destroy)(krb5_context kcontext, char *conf_section, char **db_args); /* * Deprecated: No longer used as of krb5 1.10; can be removed in the next * DAL revision. Modules should leave as NULL. */ krb5_error_code (*get_age)(krb5_context kcontext, char *db_name, time_t *age); /* * Optional: Lock the database, with semantics depending on the mode * argument: * * KRB5_DB_LOCKMODE_SHARED: Lock may coexist with other shared locks. * KRB5_DB_LOCKMODE_EXCLUSIVE: Lock may not coexist with other locks. * KRB5_DB_LOCKMODE_PERMANENT: Exclusive lock surviving process exit. * * Used by the "kadmin lock" command, incremental propagation, and * kdb5_util dump. Incremental propagation support requires shared locks * to operate. kdb5_util dump will continue unlocked if the module returns * KRB5_PLUGIN_OP_NOTSUPP. */ krb5_error_code (*lock)(krb5_context kcontext, int mode); /* Optional: Release a lock created with db_lock. */ krb5_error_code (*unlock)(krb5_context kcontext); /* * Mandatory: Set *entry to an allocated entry for the principal * search_for. If the principal is not found, return KRB5_KDB_NOENTRY. * * The meaning of flags are as follows: * * KRB5_KDB_FLAG_CANONICALIZE: Set by the KDC when looking up entries for * an AS or TGS request with canonicalization requested. Determines * whether the module should return out-of-realm referrals. * * KRB5_KDB_FLAG_INCLUDE_PAC: Set by the KDC during an AS request when the * client requested PAC information during padata, and during most TGS * requests. Indicates that the module should include PAC information * when its sign_authdata method is invoked. * * KRB5_KDB_FLAG_CLIENT_REFERRALS_ONLY: Set by the KDC when looking up the * client entry in an AS request. Affects how the module should return * out-of-realm referrals. * * KRB5_KDB_FLAG_MAP_PRINCIPALS: Set by the KDC when looking up the client * entry during TGS requests, except for S4U TGS requests and requests * where the server entry has the KRB5_KDB_NO_AUTH_DATA_REQUIRED * attribute. Indicates that the module should map foreign principals * to local principals if it supports doing so. * * KRB5_KDB_FLAG_PROTOCOL_TRANSITION: Set by the KDC when looking up the * client entry during an S4U2Self TGS request. This affects the PAC * information which should be included when authorization data is * generated; see the Microsoft S4U specification for details. * * KRB5_KDB_FLAG_CONSTRAINED_DELEGATION: Set by the KDC when looking up the * client entry during an S4U2Proxy TGS request. Also affects PAC * generation. * * KRB5_KDB_FLAG_CROSS_REALM: Set by the KDC when looking up a client entry * during a TGS request, if the client principal is not part of the * realm being served. * * KRB5_KDB_FLAG_ALIAS_OK: Set by the KDC for server principal lookups and * for AS request client principal lookups with canonicalization * requested; also set by the admin interface. Determines whether the * module should return in-realm aliases. * * A module can return in-realm aliases if KRB5_KDB_FLAG_ALIAS_OK is set. * To return an in-realm alias, fill in a different value for * entries->princ than the one requested. * * A module can return out-of-realm referrals if KRB5_KDB_FLAG_CANONICALIZE * is set. For AS request clients (KRB5_KDB_FLAG_CLIENT_REFERRALS_ONLY is * also set), the module should do so by simply filling in an out-of-realm * name in entries->princ and setting all other fields to NULL. Otherwise, * the module should return the entry for the cross-realm TGS of the * referred-to realm. For TGS referals, the module can also include * tl-data of type KRB5_TL_SERVER_REFERRAL containing ASN.1-encoded Windows * referral data as documented in draft-ietf-krb-wg-kerberos-referrals-11 * appendix A; this will be returned to the client as encrypted padata. */ krb5_error_code (*get_principal)(krb5_context kcontext, krb5_const_principal search_for, unsigned int flags, krb5_db_entry **entry); /* * Mandatory: Free a database entry. The entry may have been constructed * by the caller (using the db_alloc function to allocate associated * memory); thus, a plugin must allocate each field of a principal entry * separately. */ void (*free_principal)(krb5_context kcontext, krb5_db_entry *entry); /* * Optional: Create or modify a principal entry. db_args communicates * command-line arguments for module-specific flags. * * The mask field of an entry indicates the changed fields. Mask values * are defined in kadmin's admin.h header. If KADM5_PRINCIPAL is set in * the mask, the entry is new; otherwise it already exists. All fields of * an entry are expected to contain correct values, regardless of whether * they are specified in the mask, so it is acceptable for a module to * ignore the mask and update the entire entry. */ krb5_error_code (*put_principal)(krb5_context kcontext, krb5_db_entry *entry, char **db_args); /* * Optional: Delete the entry for the principal search_for. If the * principal did not exist, return KRB5_KDB_NOENTRY. */ krb5_error_code (*delete_principal)(krb5_context kcontext, krb5_const_principal search_for); /* * Optional: For each principal entry in the database, invoke func with the * argments func_arg and the entry data. If match_entry is specified, the * module may narrow the iteration to principal names matching that regular * expression; a module may alternatively ignore match_entry. */ krb5_error_code (*iterate)(krb5_context kcontext, char *match_entry, int (*func)(krb5_pointer, krb5_db_entry *), krb5_pointer func_arg); /* * Optional: Create a password policy entry. Return an error if the policy * already exists. */ krb5_error_code (*create_policy)(krb5_context kcontext, osa_policy_ent_t policy); /* * Optional: Set *policy to the policy entry of the specified name. If the * entry does not exist, return KRB5_KDB_NOENTRY. */ krb5_error_code (*get_policy)(krb5_context kcontext, char *name, osa_policy_ent_t *policy); /* * Optional: Modify an existing password policy entry to match the values * in policy. Return an error if the policy does not already exist. */ krb5_error_code (*put_policy)(krb5_context kcontext, osa_policy_ent_t policy); /* * Optional: For each password policy entry in the database, invoke func * with the argments data and the entry data. If match_entry is specified, * the module may narrow the iteration to policy names matching that * regular expression; a module may alternatively ignore match_entry. */ krb5_error_code (*iter_policy)(krb5_context kcontext, char *match_entry, osa_adb_iter_policy_func func, void *data); /* * Optional: Delete the password policy entry with the name policy. Return * an error if the entry does not exist. */ krb5_error_code (*delete_policy)(krb5_context kcontext, char *policy); /* Optional: Free a policy entry returned by db_get_policy. */ void (*free_policy)(krb5_context kcontext, osa_policy_ent_t val); /* * Mandatory: Has the semantics of realloc(ptr, size). Callers use this to * allocate memory for new or changed principal entries, so the module * should expect to potentially see this memory in db_free_principal. */ void *(*alloc)(krb5_context kcontext, void *ptr, size_t size); /* * Mandatory: Has the semantics of free(ptr). Callers use this to free * fields from a principal entry (such as key data) before changing it in * place, and in some cases to free data they allocated with db_alloc. */ void (*free)(krb5_context kcontext, void *ptr); /* * Optional with default: Retrieve a master keyblock from the stash file * db_args, filling in *key and *kvno. mname is the name of the master * principal for the realm. * * The default implementation reads the master keyblock from a keytab or * old-format stash file. */ krb5_error_code (*fetch_master_key)(krb5_context kcontext, krb5_principal mname, krb5_keyblock *key, krb5_kvno *kvno, char *db_args); /* * Optional with default: Given a keyblock for some version of the * database's master key, fetch the decrypted master key values from the * database and store the list into *mkeys_list. The caller will free * *mkeys_list using a libkdb5 function which uses the standard free() * function, so the module must not use a custom allocator. * * The caller may not know the version number of the master key it has, in * which case it will pass IGNORE_VNO. * * The default implementation ignores kvno and tries the key against the * current master key data and all KRB5_TL_MKEY_AUX values, which contain * copies of the master keys encrypted with old master keys. */ krb5_error_code (*fetch_master_key_list)(krb5_context kcontext, krb5_principal mname, const krb5_keyblock *key, krb5_keylist_node **mkeys_list); /* * Optional with default: Save a list of master keyblocks, obtained from * fetch_master_key_list, into the stash file db_arg. The caller will set * master_pwd to NULL, so the module should just ignore it. mname is the * name of the master principal for the realm. * * The default implementation saves the list of master keys in a * keytab-format file. */ krb5_error_code (*store_master_key_list)(krb5_context kcontext, char *db_arg, krb5_principal mname, krb5_keylist_node *keylist, char *master_pwd); /* * Optional with default: Starting at position *start, scan the key data of * a database entry for a key matching the enctype ktype, the salt type * stype, and the version kvno. Store the resulting key into *kdatap and * set *start to the position after the key found. If ktype is negative, * match any enctype. If stype is negative, match any salt type. If kvno * is zero or negative, find the most recent key version satisfying the * other constraints. */ krb5_error_code (*dbe_search_enctype)(krb5_context kcontext, krb5_db_entry *dbentp, krb5_int32 *start, krb5_int32 ktype, krb5_int32 stype, krb5_int32 kvno, krb5_key_data **kdatap); /* * Optional with default: Change the key data for db_entry to include keys * derived from the password passwd in each of the specified key-salt * types, at version new_kvno. Discard the old key data if keepold is not * set. * * The default implementation uses the keyblock master_key to encrypt each * new key, via the function encrypt_key_data. */ krb5_error_code (*change_pwd)(krb5_context context, krb5_keyblock *master_key, krb5_key_salt_tuple *ks_tuple, int ks_tuple_count, char *passwd, int new_kvno, krb5_boolean keepold, krb5_db_entry *db_entry); /* * Optional: Promote a temporary database to be the live one. context must * be initialized with an exclusively locked database created with the * "temporary" db_arg. On success, the database object contained in * context will be finalized. * * This method is used by kdb5_util load to replace the live database with * minimal loss of read availability. */ krb5_error_code (*promote_db)(krb5_context context, char *conf_section, char **db_args); /* * Optional with default: Decrypt the key in key_data with master keyblock * mkey, placing the result into dbkey. Copy the salt from key_data, if * any, into keysalt. Either dbkey or keysalt may be left unmodified on * successful return if key_data does not contain key or salt information. * * The default implementation expects the encrypted key (in krb5_c_encrypt * format) to be stored in key_data_contents[0], with length given by * key_data_length[0]. If key_data_ver is 2, it expects the salt to be * stored, unencrypted, in key_data_contents[1], with length given by * key_data_length[1]. */ krb5_error_code (*decrypt_key_data)(krb5_context kcontext, const krb5_keyblock *mkey, const krb5_key_data *key_data, krb5_keyblock *dbkey, krb5_keysalt *keysalt); /* * Optional with default: Encrypt dbkey with master keyblock mkey, placing * the result into key_data along with keysalt. * * The default implementation stores the encrypted key (in krb5_c_encrypt * format) in key_data_contents[0] and the length in key_data_length[0]. * If keysalt is specified, it sets key_data_ver to 2, and stores the salt * in key_data_contents[1] and its length in key_data_length[1]. If * keysalt is not specified, key_data_ver is set to 1. */ krb5_error_code (*encrypt_key_data)(krb5_context kcontext, const krb5_keyblock *mkey, const krb5_keyblock *dbkey, const krb5_keysalt *keysalt, int keyver, krb5_key_data *key_data); /* * Optional: Generate signed authorization data, such as a Windows PAC, for * the ticket to be returned to the client. Place the signed authorization * data, if any, in *signed_auth_data. This function will be invoked for * an AS request if the client included padata requesting a PAC. This * function will be invoked for a TGS request if there is authorization * data in the TGT, if the client is from another realm, or if the TGS * request is an S4U2Self or S4U2Proxy request. This function will not be * invoked during TGS requests if the server principal has the * no_auth_data_required attribute set. Input parameters are: * * flags: The flags used to look up the client principal. * * client_princ: For S4U2Proxy TGS requests, the client principal * requested by the service; for regular TGS requests, the * possibly-canonicalized client principal. * * client: The DB entry of the client. For S4U2Self, this will be the DB * entry for the client principal requested by the service). * * server: The DB entry of the service principal. * * krbtgt: For TGS requests, the DB entry of the (possibly foreign) * ticket granting service of the TGT. For AS requests, the DB entry * of the service principal. * * client_key: The reply key for the KDC request, before any FAST armor * is applied. For AS requests, this may be the client's long-term key * or a key chosen by a preauth mechanism. For TGS requests, this may * be the subkey found in the AP-REQ or the session key of the TGT. * * server_key: The server key used to encrypt the returned ticket. * * krbtgt_key: For TGS requests, the key of the (possibly foreign) ticket * granting service of the TGT. for AS requests, the service * principal's key. * * session_key: The session key of the ticket being granted to the * requestor. * * authtime: The timestamp of the original client authentication time. * For AS requests, this is the current time. For TGS requests, this * is the authtime of the subject ticket (TGT or S4U2Proxy evidence * ticket). * * tgt_auth_data: For TGS requests, the authorization data present in the * subject ticket. For AS requests, NULL. */ krb5_error_code (*sign_authdata)(krb5_context kcontext, unsigned int flags, krb5_const_principal client_princ, krb5_db_entry *client, krb5_db_entry *server, krb5_db_entry *krbtgt, krb5_keyblock *client_key, krb5_keyblock *server_key, krb5_keyblock *krbtgt_key, krb5_keyblock *session_key, krb5_timestamp authtime, krb5_authdata **tgt_auth_data, krb5_authdata ***signed_auth_data); /* * Optional: Perform a policy check on a cross-realm ticket's transited * field and return an error (other than KRB5_PLUGIN_OP_NOTSUPP) if the * check fails. */ krb5_error_code (*check_transited_realms)(krb5_context kcontext, const krb5_data *tr_contents, const krb5_data *client_realm, const krb5_data *server_realm); /* * Optional: Perform a policy check on an AS request, in addition to the * standard policy checks. Return 0 if the AS request is allowed. If the * AS request is not allowed: * - Place a short string literal into *status. * - If desired, place data into e_data. Any data placed here will be * freed by the caller using the standard free function. * - Return an appropriate error (such as KDC_ERR_POLICY). */ krb5_error_code (*check_policy_as)(krb5_context kcontext, krb5_kdc_req *request, krb5_db_entry *client, krb5_db_entry *server, krb5_timestamp kdc_time, const char **status, krb5_pa_data ***e_data); /* * Optional: Perform a policy check on a TGS request, in addition to the * standard policy checks. Return 0 if the TGS request is allowed. If the * TGS request is not allowed: * - Place a short string literal into *status. * - If desired, place data into e_data. Any data placed here will be * freed by the caller using the standard free function. * - Return an appropriate error (such as KDC_ERR_POLICY). * The input parameter ticket contains the TGT used in the TGS request. */ krb5_error_code (*check_policy_tgs)(krb5_context kcontext, krb5_kdc_req *request, krb5_db_entry *server, krb5_ticket *ticket, const char **status, krb5_pa_data ***e_data); /* * Optional: This method informs the module of a successful or unsuccessful * AS request. */ void (*audit_as_req)(krb5_context kcontext, krb5_kdc_req *request, krb5_db_entry *client, krb5_db_entry *server, krb5_timestamp authtime, krb5_error_code error_code); /* Note: there is currently no method for auditing TGS requests. */ /* * Optional: This method informs the module of a request to reload * configuration or other state (that is, the KDC received a SIGHUP). */ void (*refresh_config)(krb5_context kcontext); /* * Optional: Perform a policy check on server being allowed to obtain * tickets from client to proxy. (Note that proxy is the target of the * delegation, not the delegating service; the term "proxy" is from the * viewpoint of the delegating service asking another service to perform * some of its work in the authentication context of the client. This * terminology comes from the Microsoft S4U protocol documentation.) * Return 0 if policy allows it, or an appropriate error (such as * KRB5KDC_ERR_POLICY) if not. If this method is not implemented, all * S4U2Proxy delegation requests will be rejected. */ krb5_error_code (*check_allowed_to_delegate)(krb5_context context, krb5_const_principal client, const krb5_db_entry *server, krb5_const_principal proxy); } kdb_vftabl; #endif /* !defined(_WIN32) */ #endif /* KRB5_KDB5__ */ 070701000a2534000041ed0000000000000000000000025125a07f00000000000000b500010002ffffffffffffffff0000001e00000000root/usr/local/include/gssapi070701000a2538000081a40000000000000000000000015125a07400002b5a000000b500010002ffffffffffffffff0000002c00000000root/usr/local/include/gssapi/gssapi_krb5.h/* This is the gssapi_krb5.h prologue. */ #include /* End of gssapi_krb5.h prologue. */ /* -*- mode: c; indent-tabs-mode: nil -*- */ /* * Copyright 1993 by OpenVision Technologies, Inc. * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appears in all copies and * that both that copyright notice and this permission notice appear in * supporting documentation, and that the name of OpenVision not be used * in advertising or publicity pertaining to distribution of the software * without specific, written prior permission. OpenVision makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. * * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GSSAPI_KRB5_H_ #define _GSSAPI_KRB5_H_ #include #include #include /* C++ friendlyness */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* Reserved static storage for GSS_oids. See rfc 1964 for more details. */ /* 2.1.1. Kerberos Principal Name Form: */ GSS_DLLIMP extern const gss_OID_desc * const GSS_KRB5_NT_PRINCIPAL_NAME; /* This name form shall be represented by the Object Identifier {iso(1) * member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) * krb5(2) krb5_name(1)}. The recommended symbolic name for this type * is "GSS_KRB5_NT_PRINCIPAL_NAME". */ /* 2.1.2. Host-Based Service Name Form */ #define GSS_KRB5_NT_HOSTBASED_SERVICE_NAME GSS_C_NT_HOSTBASED_SERVICE /* This name form shall be represented by the Object Identifier {iso(1) * member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) * generic(1) service_name(4)}. The previously recommended symbolic * name for this type is "GSS_KRB5_NT_HOSTBASED_SERVICE_NAME". The * currently preferred symbolic name for this type is * "GSS_C_NT_HOSTBASED_SERVICE". */ /* 2.2.1. User Name Form */ #define GSS_KRB5_NT_USER_NAME GSS_C_NT_USER_NAME /* This name form shall be represented by the Object Identifier {iso(1) * member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) * generic(1) user_name(1)}. The recommended symbolic name for this * type is "GSS_KRB5_NT_USER_NAME". */ /* 2.2.2. Machine UID Form */ #define GSS_KRB5_NT_MACHINE_UID_NAME GSS_C_NT_MACHINE_UID_NAME /* This name form shall be represented by the Object Identifier {iso(1) * member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) * generic(1) machine_uid_name(2)}. The recommended symbolic name for * this type is "GSS_KRB5_NT_MACHINE_UID_NAME". */ /* 2.2.3. String UID Form */ #define GSS_KRB5_NT_STRING_UID_NAME GSS_C_NT_STRING_UID_NAME /* This name form shall be represented by the Object Identifier {iso(1) * member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) * generic(1) string_uid_name(3)}. The recommended symbolic name for * this type is "GSS_KRB5_NT_STRING_UID_NAME". */ GSS_DLLIMP extern const gss_OID_desc * const gss_mech_krb5; GSS_DLLIMP extern const gss_OID_desc * const gss_mech_krb5_old; GSS_DLLIMP extern const gss_OID_desc * const gss_mech_krb5_wrong; GSS_DLLIMP extern const gss_OID_desc * const gss_mech_iakerb; GSS_DLLIMP extern const gss_OID_set_desc * const gss_mech_set_krb5; GSS_DLLIMP extern const gss_OID_set_desc * const gss_mech_set_krb5_old; GSS_DLLIMP extern const gss_OID_set_desc * const gss_mech_set_krb5_both; GSS_DLLIMP extern const gss_OID_desc * const gss_nt_krb5_name; GSS_DLLIMP extern const gss_OID_desc * const gss_nt_krb5_principal; GSS_DLLIMP extern const gss_OID_desc krb5_gss_oid_array[]; #define gss_krb5_nt_general_name gss_nt_krb5_name #define gss_krb5_nt_principal gss_nt_krb5_principal #define gss_krb5_nt_service_name gss_nt_service_name #define gss_krb5_nt_user_name gss_nt_user_name #define gss_krb5_nt_machine_uid_name gss_nt_machine_uid_name #define gss_krb5_nt_string_uid_name gss_nt_string_uid_name #if defined(_WIN32) typedef unsigned __int64 gss_uint64; #else /*windows*/ #include typedef uint64_t gss_uint64; #endif typedef struct gss_krb5_lucid_key { OM_uint32 type; /* key encryption type */ OM_uint32 length; /* length of key data */ void * data; /* actual key data */ } gss_krb5_lucid_key_t; typedef struct gss_krb5_rfc1964_keydata { OM_uint32 sign_alg; /* signing algorthm */ OM_uint32 seal_alg; /* seal/encrypt algorthm */ gss_krb5_lucid_key_t ctx_key; /* Context key (Kerberos session key or subkey) */ } gss_krb5_rfc1964_keydata_t; typedef struct gss_krb5_cfx_keydata { OM_uint32 have_acceptor_subkey; /* 1 if there is an acceptor_subkey present, 0 otherwise */ gss_krb5_lucid_key_t ctx_key; /* Context key (Kerberos session key or subkey) */ gss_krb5_lucid_key_t acceptor_subkey; /* acceptor-asserted subkey or 0's if no acceptor subkey */ } gss_krb5_cfx_keydata_t; typedef struct gss_krb5_lucid_context_v1 { OM_uint32 version; /* Structure version number (1) MUST be at beginning of struct! */ OM_uint32 initiate; /* Are we the initiator? */ OM_uint32 endtime; /* expiration time of context */ gss_uint64 send_seq; /* sender sequence number */ gss_uint64 recv_seq; /* receive sequence number */ OM_uint32 protocol; /* 0: rfc1964, 1: draft-ietf-krb-wg-gssapi-cfx-07 */ /* * if (protocol == 0) rfc1964_kd should be used * and cfx_kd contents are invalid and should be zero * if (protocol == 1) cfx_kd should be used * and rfc1964_kd contents are invalid and should be zero */ gss_krb5_rfc1964_keydata_t rfc1964_kd; gss_krb5_cfx_keydata_t cfx_kd; } gss_krb5_lucid_context_v1_t; /* * Mask for determining the version of a lucid context structure. Callers * should not require this. */ typedef struct gss_krb5_lucid_context_version { OM_uint32 version; /* Structure version number */ } gss_krb5_lucid_context_version_t; /* Alias for Heimdal compat. */ #define gsskrb5_register_acceptor_identity krb5_gss_register_acceptor_identity OM_uint32 KRB5_CALLCONV krb5_gss_register_acceptor_identity(const char *); OM_uint32 KRB5_CALLCONV gss_krb5_get_tkt_flags( OM_uint32 *minor_status, gss_ctx_id_t context_handle, krb5_flags *ticket_flags); OM_uint32 KRB5_CALLCONV gss_krb5_copy_ccache( OM_uint32 *minor_status, gss_cred_id_t cred_handle, krb5_ccache out_ccache); OM_uint32 KRB5_CALLCONV gss_krb5_ccache_name( OM_uint32 *minor_status, const char *name, const char **out_name); /* * gss_krb5_set_allowable_enctypes * * This function may be called by a context initiator after calling * gss_acquire_cred(), but before calling gss_init_sec_context(), * to restrict the set of enctypes which will be negotiated during * context establishment to those in the provided array. * * 'cred' must be a valid credential handle obtained via * gss_acquire_cred(). It may not be GSS_C_NO_CREDENTIAL. * gss_acquire_cred() may have been called to get a handle to * the default credential. * * The purpose of this function is to limit the keys that may * be exported via gss_krb5_export_lucid_sec_context(); thus it * should limit the enctypes of all keys that will be needed * after the security context has been established. * (i.e. context establishment may use a session key with a * stronger enctype than in the provided array, however a * subkey must be established within the enctype limits * established by this function.) * */ OM_uint32 KRB5_CALLCONV gss_krb5_set_allowable_enctypes(OM_uint32 *minor_status, gss_cred_id_t cred, OM_uint32 num_ktypes, krb5_enctype *ktypes); /* * Returns a non-opaque (lucid) version of the internal context * information. * * Note that context_handle must not be used again by the caller * after this call. The GSS implementation is free to release any * resources associated with the original context. It is up to the * GSS implementation whether it returns pointers to existing data, * or copies of the data. The caller should treat the returned * lucid context as read-only. * * The caller must call gss_krb5_free_lucid_context() to free * the context and allocated resources when it is finished with it. * * 'version' is an integer indicating the requested version of the lucid * context. If the implementation does not understand the requested version, * it will return an error. * * For example: * void *return_ctx; * gss_krb5_lucid_context_v1_t *ctx; * OM_uint32 min_stat, maj_stat; * OM_uint32 vers; * gss_ctx_id_t *ctx_handle; * * maj_stat = gss_krb5_export_lucid_sec_context(&min_stat, * ctx_handle, 1, &return_ctx); * // Verify success * ctx = (gss_krb5_lucid_context_v1_t *) return_ctx; */ OM_uint32 KRB5_CALLCONV gss_krb5_export_lucid_sec_context(OM_uint32 *minor_status, gss_ctx_id_t *context_handle, OM_uint32 version, void **kctx); /* * Frees the allocated storage associated with an * exported struct gss_krb5_lucid_context. */ OM_uint32 KRB5_CALLCONV gss_krb5_free_lucid_sec_context(OM_uint32 *minor_status, void *kctx); OM_uint32 KRB5_CALLCONV gsskrb5_extract_authz_data_from_sec_context(OM_uint32 *minor_status, const gss_ctx_id_t context_handle, int ad_type, gss_buffer_t ad_data); OM_uint32 KRB5_CALLCONV gss_krb5_set_cred_rcache(OM_uint32 *minor_status, gss_cred_id_t cred, krb5_rcache rcache); OM_uint32 KRB5_CALLCONV gsskrb5_extract_authtime_from_sec_context(OM_uint32 *, gss_ctx_id_t, krb5_timestamp *); OM_uint32 KRB5_CALLCONV gss_krb5_import_cred(OM_uint32 *minor_status, krb5_ccache id, krb5_principal keytab_principal, krb5_keytab keytab, gss_cred_id_t *cred); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _GSSAPI_KRB5_H_ */ 070701000a2536000081a40000000000000000000000015125a07400004329000000b500010002ffffffffffffffff0000002b00000000root/usr/local/include/gssapi/gssapi_ext.h/* * Copyright 2008 by the Massachusetts Institute of Technology. * All Rights Reserved. * * Export of this software from the United States of America may * require a specific license from the United States Government. * It is the responsibility of any person or organization contemplating * export to obtain such a license before exporting. * * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and * distribute this software and its documentation for any purpose and * without fee is hereby granted, provided that the above copyright * notice appear in all copies and that both that copyright notice and * this permission notice appear in supporting documentation, and that * the name of M.I.T. not be used in advertising or publicity pertaining * to distribution of the software without specific, written prior * permission. Furthermore if you modify this software you must label * your software as modified software and not distribute it in such a * fashion that it might be confused with the original M.I.T. software. * M.I.T. makes no representations about the suitability of * this software for any purpose. It is provided "as is" without express * or implied warranty. */ #ifndef GSSAPI_EXT_H_ #define GSSAPI_EXT_H_ #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Solaris extensions */ #ifndef _WIN32 OM_uint32 KRB5_CALLCONV gss_pname_to_uid (OM_uint32 *minor, const gss_name_t name, const gss_OID mech_type, uid_t *uidOut); #endif /** * Provides a platform-specific name for a GSSAPI name as interpreted by a * given mechanism. * * @param [out] minor Minor status code * @param [in] name The gss name resulting from accept_sec_context * @param [in] mech_type The mechanism that will be asked to map @a name to a * local name * @param [out] localname Caller-allocated buffer to be filled in with the * local name on success */ OM_uint32 KRB5_CALLCONV gss_localname (OM_uint32 *minor, const gss_name_t name, gss_const_OID mech_type, gss_buffer_t localname); /** * Determine whether a mechanism name is authorized to act as a username. * * @param [in] name Mechanism name * @param [in] username System username * * This is a simple wrapper around gss_authorize_localname(). It only supports * system usernames as local names, and cannot distinguish between lack of * authorization and other errors. * * @retval 1 @a name is authorized to act as @a username * @retval 0 @a name is not authorized or an error occurred */ int KRB5_CALLCONV gss_userok(const gss_name_t name, const char *username); /** * Determine whether a mechanism name is authorized to act as a local name. * * @param [out] minor Minor status code * @param [in] name Mechanism name * @param [in] user Local name * * @a name is a mechanism name, typically the result of a completed * gss_accept_sec_context(). @a user is an internal name representing a local * name, such as a name imported by gss_import_name() with an @a * input_name_type of @c GSS_C_NT_USER_NAME. * * @return Return GSS_S_COMPLETE if @a name is authorized to act as @a user, * GSS_S_UNAUTHORIZED if not, or an appropriate GSS error code if an error * occured. * * @sa gss_userok */ OM_uint32 KRB5_CALLCONV gss_authorize_localname(OM_uint32 *minor, const gss_name_t name, const gss_name_t user); OM_uint32 KRB5_CALLCONV gss_acquire_cred_with_password( OM_uint32 *, /* minor_status */ const gss_name_t, /* desired_name */ const gss_buffer_t, /* password */ OM_uint32, /* time_req */ const gss_OID_set, /* desired_mechs */ gss_cred_usage_t, /* cred_usage */ gss_cred_id_t *, /* output_cred_handle */ gss_OID_set *, /* actual_mechs */ OM_uint32 *); /* time_rec */ OM_uint32 KRB5_CALLCONV gss_add_cred_with_password( OM_uint32 *, /* minor_status */ const gss_cred_id_t,/* input_cred_handle */ const gss_name_t, /* desired_name */ const gss_OID, /* desired_mech */ const gss_buffer_t, /* password */ gss_cred_usage_t, /* cred_usage */ OM_uint32, /* initiator_time_req */ OM_uint32, /* acceptor_time_req */ gss_cred_id_t *, /* output_cred_handle */ gss_OID_set *, /* actual_mechs */ OM_uint32 *, /* initiator_time_rec */ OM_uint32 *); /* acceptor_time_rec */ /* * GGF extensions */ typedef struct gss_buffer_set_desc_struct { size_t count; gss_buffer_desc *elements; } gss_buffer_set_desc, *gss_buffer_set_t; #define GSS_C_NO_BUFFER_SET ((gss_buffer_set_t) 0) OM_uint32 KRB5_CALLCONV gss_create_empty_buffer_set (OM_uint32 * /*minor_status*/, gss_buffer_set_t * /*buffer_set*/); OM_uint32 KRB5_CALLCONV gss_add_buffer_set_member (OM_uint32 * /*minor_status*/, const gss_buffer_t /*member_buffer*/, gss_buffer_set_t * /*buffer_set*/); OM_uint32 KRB5_CALLCONV gss_release_buffer_set (OM_uint32 * /*minor_status*/, gss_buffer_set_t * /*buffer_set*/); OM_uint32 KRB5_CALLCONV gss_inquire_sec_context_by_oid (OM_uint32 * /*minor_status*/, const gss_ctx_id_t /*context_handle*/, const gss_OID /*desired_object*/, gss_buffer_set_t * /*data_set*/); OM_uint32 KRB5_CALLCONV gss_inquire_cred_by_oid (OM_uint32 * /*minor_status*/, const gss_cred_id_t /*cred_handle*/, const gss_OID /*desired_object*/, gss_buffer_set_t * /*data_set*/); OM_uint32 KRB5_CALLCONV gss_set_sec_context_option (OM_uint32 * /*minor_status*/, gss_ctx_id_t * /*cred_handle*/, const gss_OID /*desired_object*/, const gss_buffer_t /*value*/); OM_uint32 KRB5_CALLCONV gss_set_cred_option (OM_uint32 * /*minor_status*/, gss_cred_id_t * /*cred*/, const gss_OID /*desired_object*/, const gss_buffer_t /*value*/); OM_uint32 KRB5_CALLCONV gssspi_mech_invoke (OM_uint32 * /*minor_status*/, const gss_OID /*desired_mech*/, const gss_OID /*desired_object*/, gss_buffer_t /*value*/); /* * AEAD extensions */ OM_uint32 KRB5_CALLCONV gss_wrap_aead (OM_uint32 * /*minor_status*/, gss_ctx_id_t /*context_handle*/, int /*conf_req_flag*/, gss_qop_t /*qop_req*/, gss_buffer_t /*input_assoc_buffer*/, gss_buffer_t /*input_payload_buffer*/, int * /*conf_state*/, gss_buffer_t /*output_message_buffer*/); OM_uint32 KRB5_CALLCONV gss_unwrap_aead (OM_uint32 * /*minor_status*/, gss_ctx_id_t /*context_handle*/, gss_buffer_t /*input_message_buffer*/, gss_buffer_t /*input_assoc_buffer*/, gss_buffer_t /*output_payload_buffer*/, int * /*conf_state*/, gss_qop_t * /*qop_state*/); /* * SSPI extensions */ #define GSS_C_DCE_STYLE 0x1000 #define GSS_C_IDENTIFY_FLAG 0x2000 #define GSS_C_EXTENDED_ERROR_FLAG 0x4000 /* * Returns a buffer set with the first member containing the * session key for SSPI compatibility. The optional second * member contains an OID identifying the session key type. */ GSS_DLLIMP extern gss_OID GSS_C_INQ_SSPI_SESSION_KEY; OM_uint32 KRB5_CALLCONV gss_complete_auth_token (OM_uint32 *minor_status, const gss_ctx_id_t context_handle, gss_buffer_t input_message_buffer); typedef struct gss_iov_buffer_desc_struct { OM_uint32 type; gss_buffer_desc buffer; } gss_iov_buffer_desc, *gss_iov_buffer_t; #define GSS_C_NO_IOV_BUFFER ((gss_iov_buffer_t)0) #define GSS_IOV_BUFFER_TYPE_EMPTY 0 #define GSS_IOV_BUFFER_TYPE_DATA 1 /* Packet data */ #define GSS_IOV_BUFFER_TYPE_HEADER 2 /* Mechanism header */ #define GSS_IOV_BUFFER_TYPE_MECH_PARAMS 3 /* Mechanism specific parameters */ #define GSS_IOV_BUFFER_TYPE_TRAILER 7 /* Mechanism trailer */ #define GSS_IOV_BUFFER_TYPE_PADDING 9 /* Padding */ #define GSS_IOV_BUFFER_TYPE_STREAM 10 /* Complete wrap token */ #define GSS_IOV_BUFFER_TYPE_SIGN_ONLY 11 /* Sign only packet data */ #define GSS_IOV_BUFFER_FLAG_MASK 0xFFFF0000 #define GSS_IOV_BUFFER_FLAG_ALLOCATE 0x00010000 /* indicates GSS should allocate */ #define GSS_IOV_BUFFER_FLAG_ALLOCATED 0x00020000 /* indicates caller should free */ #define GSS_IOV_BUFFER_TYPE(_type) ((_type) & ~(GSS_IOV_BUFFER_FLAG_MASK)) #define GSS_IOV_BUFFER_FLAGS(_type) ((_type) & GSS_IOV_BUFFER_FLAG_MASK) /* * Sign and optionally encrypt a sequence of buffers. The buffers * shall be ordered HEADER | DATA | PADDING | TRAILER. Suitable * space for the header, padding and trailer should be provided * by calling gss_wrap_iov_length(), or the ALLOCATE flag should * be set on those buffers. * * Encryption is in-place. SIGN_ONLY buffers are untouched. Only * a single PADDING buffer should be provided. The order of the * buffers in memory does not matter. Buffers in the IOV should * be arranged in the order above, and in the case of multiple * DATA buffers the sender and receiver should agree on the * order. * * With GSS_C_DCE_STYLE it is acceptable to not provide PADDING * and TRAILER, but the caller must guarantee the plaintext data * being encrypted is correctly padded, otherwise an error will * be returned. * * While applications that have knowledge of the underlying * cryptosystem may request a specific configuration of data * buffers, the only generally supported configurations are: * * HEADER | DATA | PADDING | TRAILER * * which will emit GSS_Wrap() compatible tokens, and: * * HEADER | SIGN_ONLY | DATA | PADDING | TRAILER * * for AEAD. * * The typical (special cased) usage for DCE is as follows: * * SIGN_ONLY_1 | DATA | SIGN_ONLY_2 | HEADER */ OM_uint32 KRB5_CALLCONV gss_wrap_iov ( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ int, /* conf_req_flag */ gss_qop_t, /* qop_req */ int *, /* conf_state */ gss_iov_buffer_desc *, /* iov */ int); /* iov_count */ /* * Verify and optionally decrypt a sequence of buffers. To process * a GSS-API message without separate buffer, pass STREAM | DATA. * Upon return DATA will contain the decrypted or integrity * protected message. Only a single DATA buffer may be provided * with this usage. DATA by default will point into STREAM, but if * the ALLOCATE flag is set a copy will be returned. * * Otherwise, decryption is in-place. SIGN_ONLY buffers are * untouched. */ OM_uint32 KRB5_CALLCONV gss_unwrap_iov ( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ int *, /* conf_state */ gss_qop_t *, /* qop_state */ gss_iov_buffer_desc *, /* iov */ int); /* iov_count */ /* * Query HEADER, PADDING and TRAILER buffer lengths. DATA buffers * should be provided so the correct padding length can be determined. */ OM_uint32 KRB5_CALLCONV gss_wrap_iov_length ( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ int, /* conf_req_flag */ gss_qop_t, /* qop_req */ int *, /* conf_state */ gss_iov_buffer_desc *, /* iov */ int); /* iov_count */ /* * Release buffers that have the ALLOCATED flag set. */ OM_uint32 KRB5_CALLCONV gss_release_iov_buffer ( OM_uint32 *, /* minor_status */ gss_iov_buffer_desc *, /* iov */ int); /* iov_count */ /* * Protocol transition */ OM_uint32 KRB5_CALLCONV gss_acquire_cred_impersonate_name( OM_uint32 *, /* minor_status */ const gss_cred_id_t, /* impersonator_cred_handle */ const gss_name_t, /* desired_name */ OM_uint32, /* time_req */ const gss_OID_set, /* desired_mechs */ gss_cred_usage_t, /* cred_usage */ gss_cred_id_t *, /* output_cred_handle */ gss_OID_set *, /* actual_mechs */ OM_uint32 *); /* time_rec */ OM_uint32 KRB5_CALLCONV gss_add_cred_impersonate_name( OM_uint32 *, /* minor_status */ gss_cred_id_t, /* input_cred_handle */ const gss_cred_id_t, /* impersonator_cred_handle */ const gss_name_t, /* desired_name */ const gss_OID, /* desired_mech */ gss_cred_usage_t, /* cred_usage */ OM_uint32, /* initiator_time_req */ OM_uint32, /* acceptor_time_req */ gss_cred_id_t *, /* output_cred_handle */ gss_OID_set *, /* actual_mechs */ OM_uint32 *, /* initiator_time_rec */ OM_uint32 *); /* acceptor_time_rec */ /* * Naming extensions */ GSS_DLLIMP extern gss_buffer_t GSS_C_ATTR_LOCAL_LOGIN_USER; GSS_DLLIMP extern gss_OID GSS_C_NT_COMPOSITE_EXPORT; OM_uint32 KRB5_CALLCONV gss_display_name_ext ( OM_uint32 *, /* minor_status */ gss_name_t, /* name */ gss_OID, /* display_as_name_type */ gss_buffer_t /* display_name */ ); OM_uint32 KRB5_CALLCONV gss_inquire_name ( OM_uint32 *, /* minor_status */ gss_name_t, /* name */ int *, /* name_is_MN */ gss_OID *, /* MN_mech */ gss_buffer_set_t * /* attrs */ ); OM_uint32 KRB5_CALLCONV gss_get_name_attribute ( OM_uint32 *, /* minor_status */ gss_name_t, /* name */ gss_buffer_t, /* attr */ int *, /* authenticated */ int *, /* complete */ gss_buffer_t, /* value */ gss_buffer_t, /* display_value */ int * /* more */ ); OM_uint32 KRB5_CALLCONV gss_set_name_attribute ( OM_uint32 *, /* minor_status */ gss_name_t, /* name */ int, /* complete */ gss_buffer_t, /* attr */ gss_buffer_t /* value */ ); OM_uint32 KRB5_CALLCONV gss_delete_name_attribute ( OM_uint32 *, /* minor_status */ gss_name_t, /* name */ gss_buffer_t /* attr */ ); OM_uint32 KRB5_CALLCONV gss_export_name_composite ( OM_uint32 *, /* minor_status */ gss_name_t, /* name */ gss_buffer_t /* exp_composite_name */ ); typedef struct gss_any *gss_any_t; OM_uint32 KRB5_CALLCONV gss_map_name_to_any ( OM_uint32 *, /* minor_status */ gss_name_t, /* name */ int, /* authenticated */ gss_buffer_t, /* type_id */ gss_any_t * /* output */ ); OM_uint32 KRB5_CALLCONV gss_release_any_name_mapping ( OM_uint32 *, /* minor_status */ gss_name_t, /* name */ gss_buffer_t, /* type_id */ gss_any_t * /* input */ ); /* draft-josefsson-gss-capsulate */ OM_uint32 KRB5_CALLCONV gss_encapsulate_token ( gss_const_buffer_t, /* input_token */ gss_const_OID, /* token_oid */ gss_buffer_t /* output_token */ ); OM_uint32 KRB5_CALLCONV gss_decapsulate_token ( gss_const_buffer_t, /* input_token */ gss_const_OID, /* token_oid */ gss_buffer_t /* output_token */ ); int KRB5_CALLCONV gss_oid_equal ( gss_const_OID, /* first_oid */ gss_const_OID /* second_oid */ ); /* Credential store extensions */ struct gss_key_value_element_struct { const char *key; const char *value; }; typedef struct gss_key_value_element_struct gss_key_value_element_desc; struct gss_key_value_set_struct { OM_uint32 count; gss_key_value_element_desc *elements; }; typedef struct gss_key_value_set_struct gss_key_value_set_desc; typedef const gss_key_value_set_desc *gss_const_key_value_set_t; #define GSS_C_NO_CRED_STORE ((gss_const_key_value_set_t) 0) OM_uint32 KRB5_CALLCONV gss_acquire_cred_from( OM_uint32 *, /* minor_status */ gss_name_t, /* desired_name */ OM_uint32, /* time_req */ gss_OID_set, /* desired_mechs */ gss_cred_usage_t, /* cred_usage */ gss_const_key_value_set_t, /* cred_store */ gss_cred_id_t *, /* output_cred_handle */ gss_OID_set *, /* actual_mechs */ OM_uint32 *); /* time_rec */ OM_uint32 KRB5_CALLCONV gss_add_cred_from( OM_uint32 *, /* minor_status */ gss_cred_id_t, /* input_cred_handle */ gss_name_t, /* desired_name */ gss_OID, /* desired_mech */ gss_cred_usage_t, /* cred_usage */ OM_uint32, /* initiator_time_req */ OM_uint32, /* acceptor_time_req */ gss_const_key_value_set_t, /* cred_store */ gss_cred_id_t *, /* output_cred_handle */ gss_OID_set *, /* actual_mechs */ OM_uint32 *, /* initiator_time_rec */ OM_uint32 *); /* acceptor_time_rec */ OM_uint32 KRB5_CALLCONV gss_store_cred_into( OM_uint32 *, /* minor_status */ gss_cred_id_t, /* input_cred_handle */ gss_cred_usage_t, /* input_usage */ gss_OID, /* desired_mech */ OM_uint32, /* overwrite_cred */ OM_uint32, /* default_cred */ gss_const_key_value_set_t, /* cred_store */ gss_OID_set *, /* elements_stored */ gss_cred_usage_t *); /* cred_usage_stored */ OM_uint32 KRB5_CALLCONV gss_export_cred( OM_uint32 *, /* minor_status */ gss_cred_id_t, /* cred_handle */ gss_buffer_t); /* token */ OM_uint32 KRB5_CALLCONV gss_import_cred( OM_uint32 *, /* minor_status */ gss_buffer_t, /* token */ gss_cred_id_t *); /* cred_handle */ #ifdef __cplusplus } #endif #endif /* GSSAPI_EXT_H_ */ 070701000a2539000081a40000000000000000000000015125a07500000674000000b500010002ffffffffffffffff0000002900000000root/usr/local/include/gssapi/mechglue.h/* #ident "@(#)mechglue.h 1.13 95/08/07 SMI" */ /* * Copyright 1996 by Sun Microsystems, Inc. * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appears in all copies and * that both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Sun Microsystems not be used * in advertising or publicity pertaining to distribution of the software * without specific, written prior permission. Sun Microsystems makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. * * SUN MICROSYSTEMS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL SUN MICROSYSTEMS BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ /* * This header contains the mechglue definitions. */ #ifndef _GSS_MECHGLUE_H #define _GSS_MECHGLUE_H #include /********************************************************/ /* GSSAPI Extension functions -- these functions aren't */ /* in the GSSAPI, but they are provided in this library */ #include void KRB5_CALLCONV gss_initialize(void); #endif /* _GSS_MECHGLUE_H */ 070701000a2535000081a40000000000000000000000015125a074000074bf000000b500010002ffffffffffffffff0000002700000000root/usr/local/include/gssapi/gssapi.h/* This is the gssapi.h prologue. */ #include #include /* no xom.h */ /* End of gssapi.h prologue. */ /* -*- mode: c; indent-tabs-mode: nil -*- */ /* * Copyright 1993 by OpenVision Technologies, Inc. * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appears in all copies and * that both that copyright notice and this permission notice appear in * supporting documentation, and that the name of OpenVision not be used * in advertising or publicity pertaining to distribution of the software * without specific, written prior permission. OpenVision makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. * * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GSSAPI_H_ #define _GSSAPI_H_ /* * Determine platform-dependent configuration. */ #if defined(__MACH__) && defined(__APPLE__) # include # if TARGET_RT_MAC_CFM # error "Use KfM 4.0 SDK headers for CFM compilation." # endif #endif #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #if TARGET_OS_MAC # pragma pack(push,2) #endif #if defined(_MSDOS) || defined(_WIN32) #include #endif #ifndef KRB5_CALLCONV #define KRB5_CALLCONV #define KRB5_CALLCONV_C #endif /* * First, include stddef.h to get size_t defined. */ #include /* * POSIX says that sys/types.h is where size_t is defined. */ #include /* * $Id$ */ /* * First, define the three platform-dependent pointer types. */ struct gss_name_struct; typedef struct gss_name_struct * gss_name_t; struct gss_cred_id_struct; typedef struct gss_cred_id_struct * gss_cred_id_t; struct gss_ctx_id_struct; typedef struct gss_ctx_id_struct * gss_ctx_id_t; /* * The following type must be defined as the smallest natural unsigned integer * supported by the platform that has at least 32 bits of precision. */ typedef uint32_t gss_uint32; typedef int32_t gss_int32; #ifdef OM_STRING /* * We have included the xom.h header file. Use the definition for * OM_object identifier. */ typedef OM_object_identifier gss_OID_desc, *gss_OID; #else /* OM_STRING */ /* * We can't use X/Open definitions, so roll our own. */ typedef gss_uint32 OM_uint32; typedef struct gss_OID_desc_struct { OM_uint32 length; void *elements; } gss_OID_desc, *gss_OID; #endif /* OM_STRING */ typedef struct gss_OID_set_desc_struct { size_t count; gss_OID elements; } gss_OID_set_desc, *gss_OID_set; typedef struct gss_buffer_desc_struct { size_t length; void *value; } gss_buffer_desc, *gss_buffer_t; typedef struct gss_channel_bindings_struct { OM_uint32 initiator_addrtype; gss_buffer_desc initiator_address; OM_uint32 acceptor_addrtype; gss_buffer_desc acceptor_address; gss_buffer_desc application_data; } *gss_channel_bindings_t; /* * For now, define a QOP-type as an OM_uint32 (pending resolution of ongoing * discussions). */ typedef OM_uint32 gss_qop_t; typedef int gss_cred_usage_t; /* * Flag bits for context-level services. */ #define GSS_C_DELEG_FLAG 1 #define GSS_C_MUTUAL_FLAG 2 #define GSS_C_REPLAY_FLAG 4 #define GSS_C_SEQUENCE_FLAG 8 #define GSS_C_CONF_FLAG 16 #define GSS_C_INTEG_FLAG 32 #define GSS_C_ANON_FLAG 64 #define GSS_C_PROT_READY_FLAG 128 #define GSS_C_TRANS_FLAG 256 #define GSS_C_DELEG_POLICY_FLAG 32768 /* * Credential usage options */ #define GSS_C_BOTH 0 #define GSS_C_INITIATE 1 #define GSS_C_ACCEPT 2 /* * Status code types for gss_display_status */ #define GSS_C_GSS_CODE 1 #define GSS_C_MECH_CODE 2 /* * The constant definitions for channel-bindings address families */ #define GSS_C_AF_UNSPEC 0 #define GSS_C_AF_LOCAL 1 #define GSS_C_AF_INET 2 #define GSS_C_AF_IMPLINK 3 #define GSS_C_AF_PUP 4 #define GSS_C_AF_CHAOS 5 #define GSS_C_AF_NS 6 #define GSS_C_AF_NBS 7 #define GSS_C_AF_ECMA 8 #define GSS_C_AF_DATAKIT 9 #define GSS_C_AF_CCITT 10 #define GSS_C_AF_SNA 11 #define GSS_C_AF_DECnet 12 #define GSS_C_AF_DLI 13 #define GSS_C_AF_LAT 14 #define GSS_C_AF_HYLINK 15 #define GSS_C_AF_APPLETALK 16 #define GSS_C_AF_BSC 17 #define GSS_C_AF_DSS 18 #define GSS_C_AF_OSI 19 #define GSS_C_AF_NETBIOS 20 #define GSS_C_AF_X25 21 #define GSS_C_AF_NULLADDR 255 /* * Various Null values. */ #define GSS_C_NO_NAME ((gss_name_t) 0) #define GSS_C_NO_BUFFER ((gss_buffer_t) 0) #define GSS_C_NO_OID ((gss_OID) 0) #define GSS_C_NO_OID_SET ((gss_OID_set) 0) #define GSS_C_NO_CONTEXT ((gss_ctx_id_t) 0) #define GSS_C_NO_CREDENTIAL ((gss_cred_id_t) 0) #define GSS_C_NO_CHANNEL_BINDINGS ((gss_channel_bindings_t) 0) #define GSS_C_EMPTY_BUFFER {0, NULL} /* * Some alternate names for a couple of the above values. These are defined * for V1 compatibility. */ #define GSS_C_NULL_OID GSS_C_NO_OID #define GSS_C_NULL_OID_SET GSS_C_NO_OID_SET /* * Define the default Quality of Protection for per-message services. Note * that an implementation that offers multiple levels of QOP may either reserve * a value (for example zero, as assumed here) to mean "default protection", or * alternatively may simply equate GSS_C_QOP_DEFAULT to a specific explicit * QOP value. However a value of 0 should always be interpreted by a GSSAPI * implementation as a request for the default protection level. */ #define GSS_C_QOP_DEFAULT 0 /* * Expiration time of 2^32-1 seconds means infinite lifetime for a * credential or security context */ #define GSS_C_INDEFINITE ((OM_uint32) 0xfffffffful) /* Major status codes */ #define GSS_S_COMPLETE 0 /* * Some "helper" definitions to make the status code macros obvious. */ #define GSS_C_CALLING_ERROR_OFFSET 24 #define GSS_C_ROUTINE_ERROR_OFFSET 16 #define GSS_C_SUPPLEMENTARY_OFFSET 0 #define GSS_C_CALLING_ERROR_MASK ((OM_uint32) 0377ul) #define GSS_C_ROUTINE_ERROR_MASK ((OM_uint32) 0377ul) #define GSS_C_SUPPLEMENTARY_MASK ((OM_uint32) 0177777ul) /* * The macros that test status codes for error conditions. Note that the * GSS_ERROR() macro has changed slightly from the V1 GSSAPI so that it now * evaluates its argument only once. */ #define GSS_CALLING_ERROR(x) \ ((x) & (GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET)) #define GSS_ROUTINE_ERROR(x) \ ((x) & (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET)) #define GSS_SUPPLEMENTARY_INFO(x) \ ((x) & (GSS_C_SUPPLEMENTARY_MASK << GSS_C_SUPPLEMENTARY_OFFSET)) #define GSS_ERROR(x) \ ((x) & ((GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET) | \ (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET))) /* * Now the actual status code definitions */ /* * Calling errors: */ #define GSS_S_CALL_INACCESSIBLE_READ \ (((OM_uint32) 1ul) << GSS_C_CALLING_ERROR_OFFSET) #define GSS_S_CALL_INACCESSIBLE_WRITE \ (((OM_uint32) 2ul) << GSS_C_CALLING_ERROR_OFFSET) #define GSS_S_CALL_BAD_STRUCTURE \ (((OM_uint32) 3ul) << GSS_C_CALLING_ERROR_OFFSET) /* * Routine errors: */ #define GSS_S_BAD_MECH (((OM_uint32) 1ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_NAME (((OM_uint32) 2ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_NAMETYPE (((OM_uint32) 3ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_BINDINGS (((OM_uint32) 4ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_STATUS (((OM_uint32) 5ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_SIG (((OM_uint32) 6ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_NO_CRED (((OM_uint32) 7ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_NO_CONTEXT (((OM_uint32) 8ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_DEFECTIVE_TOKEN (((OM_uint32) 9ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_DEFECTIVE_CREDENTIAL \ (((OM_uint32) 10ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_CREDENTIALS_EXPIRED \ (((OM_uint32) 11ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_CONTEXT_EXPIRED \ (((OM_uint32) 12ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_FAILURE (((OM_uint32) 13ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_QOP (((OM_uint32) 14ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_UNAUTHORIZED (((OM_uint32) 15ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_UNAVAILABLE (((OM_uint32) 16ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_DUPLICATE_ELEMENT \ (((OM_uint32) 17ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_NAME_NOT_MN \ (((OM_uint32) 18ul) << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_MECH_ATTR \ (((OM_uint32) 19ul) << GSS_C_ROUTINE_ERROR_OFFSET) /* * Supplementary info bits: */ #define GSS_S_CONTINUE_NEEDED (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 0)) #define GSS_S_DUPLICATE_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 1)) #define GSS_S_OLD_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 2)) #define GSS_S_UNSEQ_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 3)) #define GSS_S_GAP_TOKEN (1 << (GSS_C_SUPPLEMENTARY_OFFSET + 4)) /* * Finally, function prototypes for the GSSAPI routines. */ #if defined (_WIN32) && defined (_MSC_VER) # ifdef GSS_DLL_FILE # define GSS_DLLIMP __declspec(dllexport) # else # define GSS_DLLIMP __declspec(dllimport) # endif #else # define GSS_DLLIMP #endif /* Reserved static storage for GSS_oids. Comments are quotes from RFC 2744. * * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x01"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) user_name(1)}. The constant * GSS_C_NT_USER_NAME should be initialized to point * to that gss_OID_desc. */ GSS_DLLIMP extern gss_OID GSS_C_NT_USER_NAME; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x02"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) machine_uid_name(2)}. * The constant GSS_C_NT_MACHINE_UID_NAME should be * initialized to point to that gss_OID_desc. */ GSS_DLLIMP extern gss_OID GSS_C_NT_MACHINE_UID_NAME; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x03"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) string_uid_name(3)}. * The constant GSS_C_NT_STRING_UID_NAME should be * initialized to point to that gss_OID_desc. */ GSS_DLLIMP extern gss_OID GSS_C_NT_STRING_UID_NAME; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\x01\x05\x06\x02"}, * corresponding to an object-identifier value of * {iso(1) org(3) dod(6) internet(1) security(5) * nametypes(6) gss-host-based-services(2)). The constant * GSS_C_NT_HOSTBASED_SERVICE_X should be initialized to point * to that gss_OID_desc. This is a deprecated OID value, and * implementations wishing to support hostbased-service names * should instead use the GSS_C_NT_HOSTBASED_SERVICE OID, * defined below, to identify such names; * GSS_C_NT_HOSTBASED_SERVICE_X should be accepted a synonym * for GSS_C_NT_HOSTBASED_SERVICE when presented as an input * parameter, but should not be emitted by GSS-API * implementations */ GSS_DLLIMP extern gss_OID GSS_C_NT_HOSTBASED_SERVICE_X; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x04"}, corresponding to an * object-identifier value of {iso(1) member-body(2) * Unites States(840) mit(113554) infosys(1) gssapi(2) * generic(1) service_name(4)}. The constant * GSS_C_NT_HOSTBASED_SERVICE should be initialized * to point to that gss_OID_desc. */ GSS_DLLIMP extern gss_OID GSS_C_NT_HOSTBASED_SERVICE; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\01\x05\x06\x03"}, * corresponding to an object identifier value of * {1(iso), 3(org), 6(dod), 1(internet), 5(security), * 6(nametypes), 3(gss-anonymous-name)}. The constant * and GSS_C_NT_ANONYMOUS should be initialized to point * to that gss_OID_desc. */ GSS_DLLIMP extern gss_OID GSS_C_NT_ANONYMOUS; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\x01\x05\x06\x04"}, * corresponding to an object-identifier value of * {1(iso), 3(org), 6(dod), 1(internet), 5(security), * 6(nametypes), 4(gss-api-exported-name)}. The constant * GSS_C_NT_EXPORT_NAME should be initialized to point * to that gss_OID_desc. */ GSS_DLLIMP extern gss_OID GSS_C_NT_EXPORT_NAME; /* Function Prototypes */ OM_uint32 KRB5_CALLCONV gss_acquire_cred( OM_uint32 *, /* minor_status */ gss_name_t, /* desired_name */ OM_uint32, /* time_req */ gss_OID_set, /* desired_mechs */ gss_cred_usage_t, /* cred_usage */ gss_cred_id_t *, /* output_cred_handle */ gss_OID_set *, /* actual_mechs */ OM_uint32 *); /* time_rec */ OM_uint32 KRB5_CALLCONV gss_release_cred( OM_uint32 *, /* minor_status */ gss_cred_id_t *); /* cred_handle */ OM_uint32 KRB5_CALLCONV gss_init_sec_context( OM_uint32 *, /* minor_status */ gss_cred_id_t, /* claimant_cred_handle */ gss_ctx_id_t *, /* context_handle */ gss_name_t, /* target_name */ gss_OID, /* mech_type (used to be const) */ OM_uint32, /* req_flags */ OM_uint32, /* time_req */ gss_channel_bindings_t, /* input_chan_bindings */ gss_buffer_t, /* input_token */ gss_OID *, /* actual_mech_type */ gss_buffer_t, /* output_token */ OM_uint32 *, /* ret_flags */ OM_uint32 *); /* time_rec */ OM_uint32 KRB5_CALLCONV gss_accept_sec_context( OM_uint32 *, /* minor_status */ gss_ctx_id_t *, /* context_handle */ gss_cred_id_t, /* acceptor_cred_handle */ gss_buffer_t, /* input_token_buffer */ gss_channel_bindings_t, /* input_chan_bindings */ gss_name_t *, /* src_name */ gss_OID *, /* mech_type */ gss_buffer_t, /* output_token */ OM_uint32 *, /* ret_flags */ OM_uint32 *, /* time_rec */ gss_cred_id_t *); /* delegated_cred_handle */ OM_uint32 KRB5_CALLCONV gss_process_context_token( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ gss_buffer_t); /* token_buffer */ OM_uint32 KRB5_CALLCONV gss_delete_sec_context( OM_uint32 *, /* minor_status */ gss_ctx_id_t *, /* context_handle */ gss_buffer_t); /* output_token */ OM_uint32 KRB5_CALLCONV gss_context_time( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ OM_uint32 *); /* time_rec */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_get_mic( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ gss_qop_t, /* qop_req */ gss_buffer_t, /* message_buffer */ gss_buffer_t); /* message_token */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_verify_mic(OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ gss_buffer_t, /* message_buffer */ gss_buffer_t, /* message_token */ gss_qop_t * /* qop_state */ ); /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_wrap( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ int, /* conf_req_flag */ gss_qop_t, /* qop_req */ gss_buffer_t, /* input_message_buffer */ int *, /* conf_state */ gss_buffer_t); /* output_message_buffer */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_unwrap( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ gss_buffer_t, /* input_message_buffer */ gss_buffer_t, /* output_message_buffer */ int *, /* conf_state */ gss_qop_t *); /* qop_state */ OM_uint32 KRB5_CALLCONV gss_display_status( OM_uint32 *, /* minor_status */ OM_uint32, /* status_value */ int, /* status_type */ gss_OID, /* mech_type (used to be const) */ OM_uint32 *, /* message_context */ gss_buffer_t); /* status_string */ OM_uint32 KRB5_CALLCONV gss_indicate_mechs( OM_uint32 *, /* minor_status */ gss_OID_set *); /* mech_set */ OM_uint32 KRB5_CALLCONV gss_compare_name( OM_uint32 *, /* minor_status */ gss_name_t, /* name1 */ gss_name_t, /* name2 */ int *); /* name_equal */ OM_uint32 KRB5_CALLCONV gss_display_name( OM_uint32 *, /* minor_status */ gss_name_t, /* input_name */ gss_buffer_t, /* output_name_buffer */ gss_OID *); /* output_name_type */ OM_uint32 KRB5_CALLCONV gss_import_name( OM_uint32 *, /* minor_status */ gss_buffer_t, /* input_name_buffer */ gss_OID, /* input_name_type(used to be const) */ gss_name_t *); /* output_name */ OM_uint32 KRB5_CALLCONV gss_release_name( OM_uint32 *, /* minor_status */ gss_name_t *); /* input_name */ OM_uint32 KRB5_CALLCONV gss_release_buffer( OM_uint32 *, /* minor_status */ gss_buffer_t); /* buffer */ OM_uint32 KRB5_CALLCONV gss_release_oid_set( OM_uint32 *, /* minor_status */ gss_OID_set *); /* set */ OM_uint32 KRB5_CALLCONV gss_inquire_cred( OM_uint32 *, /* minor_status */ gss_cred_id_t, /* cred_handle */ gss_name_t *, /* name */ OM_uint32 *, /* lifetime */ gss_cred_usage_t *, /* cred_usage */ gss_OID_set *); /* mechanisms */ /* Last argument new for V2 */ OM_uint32 KRB5_CALLCONV gss_inquire_context( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ gss_name_t *, /* src_name */ gss_name_t *, /* targ_name */ OM_uint32 *, /* lifetime_rec */ gss_OID *, /* mech_type */ OM_uint32 *, /* ctx_flags */ int *, /* locally_initiated */ int *); /* open */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_wrap_size_limit( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ int, /* conf_req_flag */ gss_qop_t, /* qop_req */ OM_uint32, /* req_output_size */ OM_uint32 *); /* max_input_size */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_import_name_object( OM_uint32 *, /* minor_status */ void *, /* input_name */ gss_OID, /* input_name_type */ gss_name_t *); /* output_name */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_export_name_object( OM_uint32 *, /* minor_status */ gss_name_t, /* input_name */ gss_OID, /* desired_name_type */ void **); /* output_name */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_add_cred( OM_uint32 *, /* minor_status */ gss_cred_id_t, /* input_cred_handle */ gss_name_t, /* desired_name */ gss_OID, /* desired_mech */ gss_cred_usage_t, /* cred_usage */ OM_uint32, /* initiator_time_req */ OM_uint32, /* acceptor_time_req */ gss_cred_id_t *, /* output_cred_handle */ gss_OID_set *, /* actual_mechs */ OM_uint32 *, /* initiator_time_rec */ OM_uint32 *); /* acceptor_time_rec */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_inquire_cred_by_mech( OM_uint32 *, /* minor_status */ gss_cred_id_t, /* cred_handle */ gss_OID, /* mech_type */ gss_name_t *, /* name */ OM_uint32 *, /* initiator_lifetime */ OM_uint32 *, /* acceptor_lifetime */ gss_cred_usage_t *); /* cred_usage */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_export_sec_context( OM_uint32 *, /* minor_status */ gss_ctx_id_t *, /* context_handle */ gss_buffer_t); /* interprocess_token */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_import_sec_context( OM_uint32 *, /* minor_status */ gss_buffer_t, /* interprocess_token */ gss_ctx_id_t *); /* context_handle */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_release_oid( OM_uint32 *, /* minor_status */ gss_OID *); /* oid */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_create_empty_oid_set( OM_uint32 *, /* minor_status */ gss_OID_set *); /* oid_set */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_add_oid_set_member( OM_uint32 *, /* minor_status */ gss_OID, /* member_oid */ gss_OID_set *); /* oid_set */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_test_oid_set_member( OM_uint32 *, /* minor_status */ gss_OID, /* member */ gss_OID_set, /* set */ int *); /* present */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_str_to_oid( OM_uint32 *, /* minor_status */ gss_buffer_t, /* oid_str */ gss_OID *); /* oid */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_oid_to_str( OM_uint32 *, /* minor_status */ gss_OID, /* oid */ gss_buffer_t); /* oid_str */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_inquire_names_for_mech( OM_uint32 *, /* minor_status */ gss_OID, /* mechanism */ gss_OID_set *); /* name_types */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_inquire_mechs_for_name( OM_uint32 *, /* minor_status */ const gss_name_t, /* input_name */ gss_OID_set *); /* mech_types */ /* * The following routines are obsolete variants of gss_get_mic, gss_wrap, * gss_verify_mic and gss_unwrap. They should be provided by GSSAPI V2 * implementations for backwards compatibility with V1 applications. Distinct * entrypoints (as opposed to #defines) should be provided, to allow GSSAPI * V1 applications to link against GSSAPI V2 implementations. */ OM_uint32 KRB5_CALLCONV gss_sign( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ int, /* qop_req */ gss_buffer_t, /* message_buffer */ gss_buffer_t); /* message_token */ OM_uint32 KRB5_CALLCONV gss_verify( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ gss_buffer_t, /* message_buffer */ gss_buffer_t, /* token_buffer */ int *); /* qop_state */ OM_uint32 KRB5_CALLCONV gss_seal( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ int, /* conf_req_flag */ int, /* qop_req */ gss_buffer_t, /* input_message_buffer */ int *, /* conf_state */ gss_buffer_t); /* output_message_buffer */ OM_uint32 KRB5_CALLCONV gss_unseal( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context_handle */ gss_buffer_t, /* input_message_buffer */ gss_buffer_t, /* output_message_buffer */ int *, /* conf_state */ int *); /* qop_state */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_export_name( OM_uint32 *, /* minor_status */ const gss_name_t, /* input_name */ gss_buffer_t); /* exported_name */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_duplicate_name( OM_uint32 *, /* minor_status */ const gss_name_t, /* input_name */ gss_name_t *); /* dest_name */ /* New for V2 */ OM_uint32 KRB5_CALLCONV gss_canonicalize_name( OM_uint32 *, /* minor_status */ const gss_name_t, /* input_name */ const gss_OID, /* mech_type */ gss_name_t *); /* output_name */ /* RFC 4401 */ #define GSS_C_PRF_KEY_FULL 0 #define GSS_C_PRF_KEY_PARTIAL 1 OM_uint32 KRB5_CALLCONV gss_pseudo_random( OM_uint32 *, /* minor_status */ gss_ctx_id_t, /* context */ int, /* prf_key */ const gss_buffer_t, /* prf_in */ ssize_t, /* desired_output_len */ gss_buffer_t); /* prf_out */ OM_uint32 KRB5_CALLCONV gss_store_cred( OM_uint32 *, /* minor_status */ const gss_cred_id_t,/* input_cred_handle */ gss_cred_usage_t, /* input_usage */ const gss_OID, /* desired_mech */ OM_uint32, /* overwrite_cred */ OM_uint32, /* default_cred */ gss_OID_set *, /* elements_stored */ gss_cred_usage_t *);/* cred_usage_stored */ OM_uint32 KRB5_CALLCONV gss_set_neg_mechs( OM_uint32 *, /* minor_status */ gss_cred_id_t, /* cred_handle */ const gss_OID_set); /* mech_set */ #if TARGET_OS_MAC # pragma pack(pop) #endif #ifdef __cplusplus } #endif /* XXXX these are not part of the GSSAPI C bindings! (but should be) */ #define GSS_CALLING_ERROR_FIELD(x) \ (((x) >> GSS_C_CALLING_ERROR_OFFSET) & GSS_C_CALLING_ERROR_MASK) #define GSS_ROUTINE_ERROR_FIELD(x) \ (((x) >> GSS_C_ROUTINE_ERROR_OFFSET) & GSS_C_ROUTINE_ERROR_MASK) #define GSS_SUPPLEMENTARY_INFO_FIELD(x) \ (((x) >> GSS_C_SUPPLEMENTARY_OFFSET) & GSS_C_SUPPLEMENTARY_MASK) /* XXXX This is a necessary evil until the spec is fixed */ #define GSS_S_CRED_UNAVAIL GSS_S_FAILURE /* * RFC 5587 */ typedef const gss_buffer_desc *gss_const_buffer_t; typedef const struct gss_channel_bindings_struct *gss_const_channel_bindings_t; typedef const struct gss_ctx_id_struct gss_const_ctx_id_t; typedef const struct gss_cred_id_struct gss_const_cred_id_t; typedef const struct gss_name_struct gss_const_name_t; typedef const gss_OID_desc *gss_const_OID; typedef const gss_OID_set_desc *gss_const_OID_set; OM_uint32 KRB5_CALLCONV gss_indicate_mechs_by_attrs( OM_uint32 *, /* minor_status */ gss_const_OID_set, /* desired_mech_attrs */ gss_const_OID_set, /* except_mech_attrs */ gss_const_OID_set, /* critical_mech_attrs */ gss_OID_set *); /* mechs */ OM_uint32 KRB5_CALLCONV gss_inquire_attrs_for_mech( OM_uint32 *, /* minor_status */ gss_const_OID, /* mech */ gss_OID_set *, /* mech_attrs */ gss_OID_set *); /* known_mech_attrs */ OM_uint32 KRB5_CALLCONV gss_display_mech_attr( OM_uint32 *, /* minor_status */ gss_const_OID, /* mech_attr */ gss_buffer_t, /* name */ gss_buffer_t, /* short_desc */ gss_buffer_t); /* long_desc */ GSS_DLLIMP extern gss_const_OID GSS_C_MA_MECH_CONCRETE; GSS_DLLIMP extern gss_const_OID GSS_C_MA_MECH_PSEUDO; GSS_DLLIMP extern gss_const_OID GSS_C_MA_MECH_COMPOSITE; GSS_DLLIMP extern gss_const_OID GSS_C_MA_MECH_NEGO; GSS_DLLIMP extern gss_const_OID GSS_C_MA_MECH_GLUE; GSS_DLLIMP extern gss_const_OID GSS_C_MA_NOT_MECH; GSS_DLLIMP extern gss_const_OID GSS_C_MA_DEPRECATED; GSS_DLLIMP extern gss_const_OID GSS_C_MA_NOT_DFLT_MECH; GSS_DLLIMP extern gss_const_OID GSS_C_MA_ITOK_FRAMED; GSS_DLLIMP extern gss_const_OID GSS_C_MA_AUTH_INIT; GSS_DLLIMP extern gss_const_OID GSS_C_MA_AUTH_TARG; GSS_DLLIMP extern gss_const_OID GSS_C_MA_AUTH_INIT_INIT; GSS_DLLIMP extern gss_const_OID GSS_C_MA_AUTH_TARG_INIT; GSS_DLLIMP extern gss_const_OID GSS_C_MA_AUTH_INIT_ANON; GSS_DLLIMP extern gss_const_OID GSS_C_MA_AUTH_TARG_ANON; GSS_DLLIMP extern gss_const_OID GSS_C_MA_DELEG_CRED; GSS_DLLIMP extern gss_const_OID GSS_C_MA_INTEG_PROT; GSS_DLLIMP extern gss_const_OID GSS_C_MA_CONF_PROT; GSS_DLLIMP extern gss_const_OID GSS_C_MA_MIC; GSS_DLLIMP extern gss_const_OID GSS_C_MA_WRAP; GSS_DLLIMP extern gss_const_OID GSS_C_MA_PROT_READY; GSS_DLLIMP extern gss_const_OID GSS_C_MA_REPLAY_DET; GSS_DLLIMP extern gss_const_OID GSS_C_MA_OOS_DET; GSS_DLLIMP extern gss_const_OID GSS_C_MA_CBINDINGS; GSS_DLLIMP extern gss_const_OID GSS_C_MA_PFS; GSS_DLLIMP extern gss_const_OID GSS_C_MA_COMPRESS; GSS_DLLIMP extern gss_const_OID GSS_C_MA_CTX_TRANS; /* * RFC 5801 */ OM_uint32 KRB5_CALLCONV gss_inquire_saslname_for_mech( OM_uint32 *, /* minor_status */ const gss_OID, /* desired_mech */ gss_buffer_t, /* sasl_mech_name */ gss_buffer_t, /* mech_name */ gss_buffer_t /* mech_description */ ); OM_uint32 KRB5_CALLCONV gss_inquire_mech_for_saslname( OM_uint32 *, /* minor_status */ const gss_buffer_t, /* sasl_mech_name */ gss_OID * /* mech_type */ ); #endif /* _GSSAPI_H_ */ 070701000a2537000081a40000000000000000000000015125a074000008a9000000b500010002ffffffffffffffff0000002f00000000root/usr/local/include/gssapi/gssapi_generic.h/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* * Copyright 1993 by OpenVision Technologies, Inc. * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appears in all copies and * that both that copyright notice and this permission notice appear in * supporting documentation, and that the name of OpenVision not be used * in advertising or publicity pertaining to distribution of the software * without specific, written prior permission. OpenVision makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. * * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GSSAPI_GENERIC_H_ #define _GSSAPI_GENERIC_H_ /* * $Id$ */ #include #if defined(__cplusplus) && !defined(GSSAPIGENERIC_BEGIN_DECLS) #define GSSAPIGENERIC_BEGIN_DECLS extern "C" { #define GSSAPIGENERIC_END_DECLS } #else #define GSSAPIGENERIC_BEGIN_DECLS #define GSSAPIGENERIC_END_DECLS #endif #define GSS_EMPTY_BUFFER(buf) ((buf) == NULL || \ (buf)->value == NULL || (buf)->length == 0) GSSAPIGENERIC_BEGIN_DECLS /* Deprecated MIT krb5 oid names provided for compatibility. * The correct oids (GSS_C_NT_USER_NAME, etc) from rfc 2744 * are defined in gssapi.h. */ GSS_DLLIMP extern gss_OID gss_nt_user_name; GSS_DLLIMP extern gss_OID gss_nt_machine_uid_name; GSS_DLLIMP extern gss_OID gss_nt_string_uid_name; extern gss_OID gss_nt_service_name_v2; GSS_DLLIMP extern gss_OID gss_nt_service_name; extern gss_OID gss_nt_exported_name; GSSAPIGENERIC_END_DECLS #endif /* _GSSAPI_GENERIC_H_ */ 070701000a2550000081a40000000000000000000000015125a07400000192000000b500010002ffffffffffffffff0000001e00000000root/usr/local/include/krb5.h/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* The MIT Kerberos header file krb5.h used to live here. As of the 1.5 release, we're installing multiple Kerberos headers, so they're all moving to a krb5/ subdirectory. This file is present just to keep old software still compiling. Please update your code to use the new path for the header. */ #include 070701000a2559000081a40000000000000000000000015125a074000019f0000000b500010002ffffffffffffffff0000002600000000root/usr/local/include/verto-module.h/* * Copyright 2011 Red Hat, Inc. * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation files * (the "Software"), to deal in the Software without restriction, * including without limitation the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, * and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /*** THE FOLLOWING ARE FOR IMPLEMENTATION MODULES ONLY ***/ #ifndef VERTO_MODULE_H_ #define VERTO_MODULE_H_ #include #ifndef VERTO_MODULE_TYPES #define VERTO_MODULE_TYPES typedef void verto_mod_ctx; typedef void verto_mod_ev; #endif #define VERTO_MODULE_VERSION 3 #define VERTO_MODULE_TABLE(name) verto_module_table_ ## name #define VERTO_MODULE(name, symb, types) \ static verto_ctx_funcs name ## _funcs = { \ name ## _ctx_new, \ name ## _ctx_default, \ name ## _ctx_free, \ name ## _ctx_run, \ name ## _ctx_run_once, \ name ## _ctx_break, \ name ## _ctx_reinitialize, \ name ## _ctx_set_flags, \ name ## _ctx_add, \ name ## _ctx_del \ }; \ verto_module VERTO_MODULE_TABLE(name) = { \ VERTO_MODULE_VERSION, \ # name, \ # symb, \ types, \ &name ## _funcs, \ }; \ verto_ctx * \ verto_new_ ## name() \ { \ return verto_convert(name, 0, NULL); \ } \ verto_ctx * \ verto_default_ ## name() \ { \ return verto_convert(name, 1, NULL); \ } typedef struct { /* Required */ verto_mod_ctx *(*ctx_new)(); /* Optional */ verto_mod_ctx *(*ctx_default)(); /* Required */ void (*ctx_free)(verto_mod_ctx *ctx); /* Optional */ void (*ctx_run)(verto_mod_ctx *ctx); /* Required */ void (*ctx_run_once)(verto_mod_ctx *ctx); /* Optional */ void (*ctx_break)(verto_mod_ctx *ctx); /* Optional */ void (*ctx_reinitialize)(verto_mod_ctx *ctx); /* Optional */ void (*ctx_set_flags)(verto_mod_ctx *ctx, const verto_ev *ev, verto_mod_ev *modev); /* Required */ verto_mod_ev *(*ctx_add)(verto_mod_ctx *ctx, const verto_ev *ev, verto_ev_flag *flags); /* Required */ void (*ctx_del)(verto_mod_ctx *ctx, const verto_ev *ev, verto_mod_ev *modev); } verto_ctx_funcs; typedef struct { unsigned int vers; const char *name; const char *symb; verto_ev_type types; verto_ctx_funcs *funcs; } verto_module; /** * Converts an existing implementation specific loop to a verto_ctx. * * This function also sets the internal default implementation so that future * calls to verto_new(NULL) or verto_default(NULL) will use this specific * implementation if it was not already set. * * @param name The name of the module (unquoted) * @param deflt Whether the ctx is the default context or not * @param ctx The context to store * @return A new verto_ctx, or NULL on error. Call verto_free() when done. */ #define verto_convert(name, deflt, ctx) \ verto_convert_module(&VERTO_MODULE_TABLE(name), deflt, ctx) /** * Converts an existing implementation specific loop to a verto_ctx. * * If you are a module implementation, you probably want the macro above. This * function is generally used directly only when an application is attempting * to expose a home-grown event loop to verto. * * If deflt is non-zero and a default ctx was already defined for this module * and ctx is not NULL, than ctx will be free'd and the previously defined * default will be returned. * * If ctx is non-NULL, than the pre-existing verto_mod_ctx will be converted to * to a verto_ctx; if deflt is non-zero than this verto_mod_ctx will also be * marked as the default loop for this process. If ctx is NULL, than the * appropriate constructor will be called: either module->ctx_new() or * module->ctx_default() depending on the boolean value of deflt. If * module->ctx_default is NULL and deflt is non-zero, than module->ctx_new() * will be called and the resulting verto_mod_ctx will be utilized as the * default. * * This function also sets the internal default implementation so that future * calls to verto_new(NULL) or verto_default(NULL) will use this specific * implementation if it was not already set. * * @param name The name of the module (unquoted) * @param ctx The context private to store * @return A new verto_ctx, or NULL on error. Call verto_free() when done. */ verto_ctx * verto_convert_module(const verto_module *module, int deflt, verto_mod_ctx *ctx); /** * Calls the callback of the verto_ev and then frees it via verto_del(). * * The verto_ev is not freed (verto_del() is not called) if it is a signal event. * * @see verto_add_read() * @see verto_add_write() * @see verto_add_timeout() * @see verto_add_idle() * @see verto_add_signal() * @see verto_add_child() * @see verto_del() * @param ev The verto_ev */ void verto_fire(verto_ev *ev); /** * Sets the status of the pid/handle which caused this event to fire. * * This function does nothing if the verto_ev is not a child type. * * @see verto_add_child() * @param ev The verto_ev to set the status in. * @param status The pid/handle status. */ void verto_set_proc_status(verto_ev *ev, verto_proc_status status); /** * Sets the state of the fd which caused this event to fire. * * This function does nothing if the verto_ev is not a io type. * * Only the flags VERTO_EV_FLAG_IO_(READ|WRITE|ERROR) are supported. All other * flags are unset. * * @see verto_add_io() * @param ev The verto_ev to set the state in. * @param state The fd state. */ void verto_set_fd_state(verto_ev *ev, verto_ev_flag state); #endif /* VERTO_MODULE_H_ */ 070701000a255b000041ed0000000000000000000000035125a07f00000000000000b500010002ffffffffffffffff0000001300000000root/usr/local/lib070701000a255c000041ed0000000000000000000000035125a07f00000000000000b500010002ffffffffffffffff0000001800000000root/usr/local/lib/krb5070701000a255d000041ed0000000000000000000000045125a07f00000000000000b500010002ffffffffffffffff0000002000000000root/usr/local/lib/krb5/plugins070701000a255e000041ed0000000000000000000000025125a07f00000000000000b500010002ffffffffffffffff0000002400000000root/usr/local/lib/krb5/plugins/kdb070701000a255f000081a40000000000000000000000015125a07500018198000000b500010002ffffffffffffffff0000002b00000000root/usr/local/lib/krb5/plugins/kdb/db2.soELF4`}4 (<<~  !#$%*,./234678:;<=?@ADEGHIJKMNOQSVWXY\^_abcdehiklmopqrvxyz} "&'()+-0159>BCFLPRTUZ[]`fgjnstuw{|@4 uZ2 8Y0NVg`|<sP 46I K]0mm U}W V/PXo`6`mR@3*P =BSt Y\r0lQcZn"<B4<KSg}n}`7IX <0)<,VnK1W k6q*p_>jЪO%,<K\ppOpPC%8Mfpywp"G@  snR"1:K ankrb5_db2_freememsetosa_free_policy_entkrb5_db2_finiosa_adb_open_and_lock_xmknodxdr_krb5_tl_datakrb5_db2_lib_cleanuputime_DYNAMICkrb5int_mutex_unlockkrb5_db2_get_principalkrb5_db2_get_age_lib_versionxdr_nulltype_edatakrb5_db2_free_policy_endkrb5int_mutex_allocmemcpykrb5_free_data_contentsgssrpc_xdr_u_int32krb5_db2_put_policykrb5_db2_unlockosa_adb_fini_dbkrb5_free_contextfilenoxdr_osa_policy_ent_recosa_adb_get_lockosa_adb_release_lockkrb5int_asprintfkrb5_db2_free_principalosa_adb_destroy_policykrb5_db2_lockout_auditosa_adb_create_dbfopenreadkrb5_db2_lib_initkrb5_db2_check_policy_askrb5_encode_princ_dbkeyosa_adb_destroy_dbosa_adb_close_and_unlockosa_adb_get_policykrb5_db2_allocfcntlkrb5_dbe_lookup_last_admin_unlockkrb5_db2_put_principalfclosekrb5_db2_audit_as_reqreallockrb5_db2_create_policykrb5_db2_promote_dbrenamexdr_nullstringkrb5int_init_context_kdcpthread_mutex_initkrb5_decode_princ_entryprofile_get_stringprofile_release_stringstrcmpkdb_function_tablestrdupwritelseekkrb5_db2_destroykrb5int_mutex_free_PROCEDURE_LINKAGE_TABLE_gssrpc_xdralloc_getdataxdr_osa_princ_ent_rec_xstatkrb5_db2_delete_policycallocstrlenkrb5_encode_princ_entryosa_adb_create_policykrb5_db2_lockgssrpc_xdralloc_createkrb5_dbe_freekrb5_db2_get_policymallockrb5_parse_namegssrpc_xdr_intlibintl_dgettextprofile_get_booleankrb5_db2_iter_policypthread_mutex_lockkrb5_db2_lockout_check_policykrb5_db2_createkrb5_db2_openfsyncmemcmpkrb5int_zapkrb5_free_principalabort_fxstatkrb5_db2_set_lockmodekrb5int_mutex_lockgssrpc_xdrmem_createkrb5_clear_error_messagekrb5_db2_iterate_lxstatosa_adb_put_policykrb5_set_error_messagefdopenstrchr_etextkrb5_db2_mutexaccessosa_adb_iter_policykrb5_dbe_lookup_tl_datakrb5_unparse_nameosa_adb_init_dbkrb5_lock_file___errnogssrpc_xdr_short_GLOBAL_OFFSET_TABLE___db185_openkrb5_db2_delete_principalunlinklibgssrpc.so.4libgssapi_krb5.so.2libkrb5.so.3libcom_err.so.3libk5crypto.so.3libdb-4.8.solibkadm5srv_mit.so.8libkdb5.so.7libkrb5support.so.0libresolv.so.2libsocket.so.1libnsl.so.1libintl.so.8db2.so.0/usr/local/libLdt| $(,04,tq\`dhlptx|-:Z Ijd` $L(_,K0u4T8c<U@DRHaP{TxX%\1`}h>l9p@xC.bwrnQG+goWl<X=  8v<@7D H&LBPAT^X$\)`d;hlhpMx |fP*3N,ks" 06[#V8y]\DO!|i4SYJ 5(2 m$E( 0t4H8/ hhhh h $h((h0,h8p0h@`4hHP8hP@<hX0@h` DhhHhpLhxPhThXh`hdhhhlhphpxh`|hPh@h0h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxh h0hHhLhPhThXhp\h``hPdh@hh0lh phthxh|hhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hh hhhhh h $h((h0,h8p0h@`4hHP8hP@@hX0Dh` HhhU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU ]ZUjEP0EE]ÐU ]ZUjEPtEE]ÐU ]ZUjEPEE]ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZUڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZUڋEEjEPxEjPY u}EU]u}ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZUڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZUڋEEEjPujEPY u}EU]u}ÐU ]ZUڋEfEjEPE P ]ÐU ]ZUGڋEEjEPE P ]ÐU]ZUڋEU EUjEPEP@ ]ÐU ]ZUjEPEP EfEE]ÐU]ZUgjEPEP EEE]ÐU]ZUjEPEP\ EUEUEU]ÐU]ZUǾjEPEUEU]U]ZUڋUE PREUEU]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU ]ZUڋE PEPj EE]ÐU ]ZUWڋE PEPj EE]ÐU ]ZUڋE PEPj EE]ÐU ]ZU׼jjEPE PEPjTEE]ÐU]ZUڋEtE PEPjEP]ÐU]ZU7ڋEt)jEPPEPjEP]ÐU]ZU׻ڋE ;Eu#E PEPEP u EEEEE]ÐU]ZUgjEP U ;u"E PEPEP u EEEEE]ÐU]EE EEEEEMUBABABA]U]uZU츤jjuVuMUBABABA]uU]uZUDjE PPE PuVuMUBABABA]uU]ZU׹ڋE v E E EjEPEEu E &E@EUPEU PEE]ÐU]ZUGڋE ;Eu+E;E u#EPE$PEP u EEEEE]ÐU]ZU׸ڋEv EE EjEPEEu E EE UPEEE]ÐU]ZUWڍEPEPEP: EEujEPU @BE UPEEE]ÐUX]uZUԸڋEPE@0M ‰AUEPB8PEP EEt EEjEPY@EE PUE PE @U BEE@EpDE@Dj@PjPFP EEtEEE@D@ EE]܋uÐU]ZU'ڋE PEP~EEt EEE@HtUEj PjhjB@P6ЋEPE@tnUEjPjhjB@PЋEPE@tFjEP@u E4@E'@t뽐E@HU@BHEE]U]ZUڋE@HHEEUPHEtjEPEE\E@t5EPEj@PBЃujEP EE@jEPEE]U]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU ]ZUwjEP蠽EE]ÐU ]ZU7jEPtEE]ÐU ]ZUjEP0EE]ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZUڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZUQڋEEjEPxEjPY u}EU]u}ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZU7ڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZUqڋEEEjPujEPY u}EU]u}ÐU ]ZUڋEfEjEPE P5 ]ÐU ]ZUڋEEjEPE P ]ÐU]ZUwڋEU EUjEPEP谶 ]ÐU ]ZU'jEPEPl EfEE]ÐU]ZUׄjEPEP EEE]ÐU]ZU츇jEPEP̵ EUEUEU]ÐU]ZU7jEPEUEU]U]ZUڋUE PREUEU]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU ]ZUڋE PEPj\ EE]ÐU ]ZUǂڋE PEPj, EE]ÐU ]ZUڋE PEPj EE]ÐU ]ZUGjjEPE PEPjijEE]ÐU]ZUڋEtE PEP膳jEP舳]ÐU]ZUڋEt)jEPXPEP+jEP-]ÐU]ZUGڋE ;Eu#E PEPEP u EEEEE]ÐU]ZU׀jEP萲U ;u"E PEPEP腲 u EEEEE]ÐU]EE EEEEEMUBABABA]U]uZUjjuVuMUBABABA]uU]uZU츴jE PmPE PuVuMUBABABA]uU]ZUGڋE v E E EjEPEEu E &E@EUPEU PEE]ÐU]ZU~ڋE ;Eu+E;E u#EPE$PEPj u EEEEE]ÐU]ZUG~ڋEv EE EjEPEEu E EE UPEEE]ÐU<]ZUȸ}ڋEuEE@=Z4tEjEP E̋Ẽt ẺEE @u EuE @EE j@P@E EHB藯@E4EHUjjjEPEPBPA ЃttjEPqE PEPqu)E؋@tUjEPBЃEjEPEEUjEPBЃEEEPEj@PBЃuEEHE?E3EHUjjjEPEPBPAЃttŐE؋@tUjEPBЃjEP蝯E̋Ẽt ẺE EЉEE]ÐU ]ZU万{ڋEuEE@=Z4tEjEPͮEEt EEE u EE EjE PϬ@EEHUjEPBPAЃ ELESEPEj@PBЃu E+EEEttjEPAEEt EE EEE]ÐUD]ZU'zEEE@EuEE@=Z4tEjEPUEċEăt EĉEE u E3E EjEPW@EEEE:>EEHUjjjEPEPBPA ЃtȃtŐEPjDEȋEȃuEPEPE̋ẼuEPEPEP3 jjjEPEPEP虬EPEPYu E3EE؋@tUjEPBЃEUȉPEjEPjEP jEPEċEătEĉEEЉEE]ÐUD]ZUwڋEuEE@=Z4tEjEP=EċEăt EĉEE @u EaE @EE j@P5@EJE0E$EHUjjjEPEPBPA ЃttŐjEP襪E PEP襪u)EЋ@tUjEPBЃEjEPyEUjEPBЃE9EPEj@PBЃuEE8E/EHUjjjEPEPBPAЃtʐEЋ@tUjEPBЃjEPEċEăt EĉE EȉEE]ÐUD]ZUuڋEuE1E@=Z4tEjEP EċEăt EĉEEHUjjjEPEPBPAЃEЋEЃu豧@EEЃ^jjDE̋Ẽu E XjEPEȋEȃuE 2EPEPEP jDjEP jjjEPEPEPqEPEP1uEE؋@tUjEPBЃjEPjEP4EEPEPE ЃE؋@tUjEPBЃjEP轥jEPߧEHUjjjEPEPBPAЃEЋEЃEЃu-@EEjEPbEċEătEĉEEЉEE]ÐU ]ZUWsjjjjjEPEPEPئjEPڤ]U]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU ]ZU7rjEP`EE]ÐU ]ZUqjEPtEE]ÐU ]ZUqjEPEE]ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZUpڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZUoڋEEjEPxEjPY u}EU]u}ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZUmڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZU1lڋEEEjPujEPY u}EU]u}ÐU ]ZUkڋEfEjEPE P ]ÐU ]ZUwkڋEEjEPE P趜 ]ÐU]ZU7kڋEU EUjEPEPp ]ÐU ]ZUjjEPEP, EfEE]ÐU]ZUjjEPEPܛ EEE]ÐU]ZUGjjEPEP茛 EUEUEU]ÐU]ZUijEPEUEU]U]ZUiڋUE PREUEU]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU ]ZUhڋE PEPj EE]ÐU ]ZUhڋE PEPj EE]ÐU ]ZUGhڋE PEPj輙 EE]ÐU ]ZUhjjEPE PEPj脙EE]ÐU]ZUgڋEtE PEPFjEPH]ÐU]ZUggڋEt)jEPPEPjEP]ÐU]ZUgڋE ;Eu#E PEPEP˜ u EEEEE]ÐU]ZUfjEPPU ;u"E PEPEPE u EEEEE]ÐU]EE EEEEEMUBABABA]U]uZUejjuVuMUBABABA]uU]uZUtejE P-PE PuVuMUBABABA]uU]ZUeڋE v E E EjEPƖEEu E &E@EUPEU PEE]ÐU]ZUwdڋE ;Eu+E;E u#EPE$PEP* u EEEEE]ÐU]ZUdڋEv EE EjEPƕEEu E EE UPEEE]ÐU]ZUcj=EPpEEuBE @jEP-ЋEPE@uE E+Ej@P!ЋE PEj@PڕЋEPE @t E@uAE j@P苔E @Ej@PpE@E 7U E+EPEPBP E U+UH EE]ÐU]ZU7bڋEj@PݓEj@P̓j4jEP< E@E@E@E@E@ E@(]ÐU]ZUaڋE@(EE@uJjj4~EEu E =j4jEP臓 jEPEUPEU @BEE]ÐU8]Љủ}ZUԸ`EEEE@$EEPEPEEt EEEEEE@jEP4jEP&UEPEPBP EEtMPEPu5jEPЋEPE@u E Eu(PEP蜒uE@(Eu PEPluEt$PEPDu E@ TEEt EEEE؋PROjjEPREPEPD1EEEtE@}E@EPjRE PQEPEEu7Eu/ uEPRQF PWEP轒EEtjEPMЋEPEPjRE PQEP聒EEtFEU܉P,EPjRE PQEPFEEt EU܉P0jEP蠏jEP蒏jEPEEE]Ћű}ÐU]ZU츗]ڋE@E@(t$E (EEE,UjE PEPBPQEP蘑} E EUPEE]U ]ZU\EEEEEEUPEUPEUPE UP4EPREP t8EPREP tr<EPREP tR@EPREP t2E UPEUPEUPEUPEBjEP襍jEP藍jEP艍jEP{E E]ÐU`]ZU[EEEEEEEEDEPREP t袍@ EHEEE(EEEE@ t E EE@ t EEEԉEjEPEPEPE PEPEEtE@ t EEE@ t EԉEEEjEPEPEPE PEP蓌EEt%E@ u EEEUP g@gjEP萋EEE]ÐU]ZU踧YڋE j@$P EE @u E :E @EE @HEE UPEuPUjEPBЃE @E @E j@PEPU EEt EEE= u EEEE]ÐU]ZU츷XڋEtEu E"Eu EEE @tE @;E'U EPBPEP肋 EE uEu E:WE tE tE u E:3Et EE E @tE PE j@PBЃEu EEhEPE P ЋE PE @uM@EE @E @E j@$P؊E j@PEP胊 EEoE UPE @U @BU EPB$P肊EEt5E PEP;E= tE= t E= uE:畋EEE]ÐU ]ZU丧VEE8EPREP EEt EEDEhj@Pو EEUPE}:Ehj@P诈 EEUPE}胈@EEjj@P t[@E EE@U@B<EPREP EEtG@EPREP EEt#UjjhZ4EPEPB$PljEjEPjEPEtjEPEEE]ÐU]ZUTڋE@tEj@PrE@$tEhZ4@$P3jEPYjEPW]ÐU ]ZUwTڋE@(@t!E@(j@P@E@(@EE]ÐU]ZUTڋE@(@EjjEPV EEu_@EUjEPBЃEE]ÐUhZlSڋE@(@tE@(@@u E :FE@(@EUpPBP} E@ EUPEEhÐUdZhRjjYtUxPBPQtLE;t|-E@lE@pUlPBPEj@PdÐU ]ZU7RڋE@(@tE@(@@u E : EP(E PBPEP EE]ÐU ]ZUQڋE@(@tE@(@@u E :E@(@PEPEE]ÐUPZTAQjjEP赃 dd}范@E jjdP tc@X DžXtPdP_uhj\Pق Dž\\;EDžph\PdP hh}&Džll;h};l\t Džpl@ll;h|ŋhlptJj\PdP聄 lP\PdPt hh}r\h\\;EjdP=jdPjEPt豁@E5E+藁@`jdP蠁`EEPÐU ]ZUNEEEEU jEPEPBPEPE PuEEt EE:E hh@P ЋE PE @}跀@EZE j@PEPZ EEt5E jj@P tg@E EE @E @E @(t*jEPOjEPMjEP?hhE P ЋE PE @u@EhZ4EPEP. EEt\U jjhZ4EPEPB$PEEt-E j@$P^EEt E @EtlE @tE PE j@PBЃE @~E j@PEP E @|E j@PjE PjEP~jEP~jEP}EEE]ÐUD]ZULڋE@E@(@tE@(@@uE :E@(@EjEPEP EEt EEE PEPEP EEtE܉EE؉EE@EUjjjEPEPEPB ЃE}@EEPEP/6E:JEEЋEE̋EPEPEP E"EčHwȸvUDUjEPEEE]U]ZUJڋE PEP|]ÐUH]ZUGJjEPpEtAPR"~ЋEjj@PRjEP~EfE@(@tE@(@@u E :8E@(@EjEPEP EȋEȃt EȉEEċ@EE PEPEP~ EȋEȃtEEE܉EE @8PEPEP4~ EȋEȃtEPEP)~qEԉEEЉEUjjjEPEPEPBЃEEt[{@E EEEȍEPEP}EPEP}jEPjEP}EȉEE]ÐUd]ZUWHڋE@(@tE@(@@u E :E@(@EjEPEP9 EEt EEE PEPEP| EEt9E؉EEԉEE@EUjjjEPEPEPB ЃEz@EE:!EHw UDUE܉E̋EEȍEPEPEPX| EEtEE@.U;EM@@EUЉUBtNEM@@EUЉUEM@@EUЉUBPjE@ Px E@EE@.U;tEPEPEP{ EEPEPxEtẺE܋EȉEUjjjEPEPEPBЃEEtx@E EEEEPEPzEt>UjEPEPBЃ EEt7x@E EEEEPEPzjEPjEPzEEE]U8]ZU̸7EjE PEPP E؋E؃tE؉E\E HU jjjEPEPBPAЃEЋEЃEEEEEPEPEPy E؋E؃tj@PyE؋E؃tEPEPEЃE؋EPEPvj@PyEԋE؃tBEԃtEԉE2E HU jjjEPEPBPAЃEЋEЃ$1gv@E"EЍHw帰U̍DUE PEPE؉EE]WSSU ]ZUwCڋE@(@tE@(@@u E :(EP(jjEPEPBPEPEE]ÐU]E@(@EE EEtE@ EEU P EEE]ÐU]EE]ÐU]EE]ÐU]ZUgBEjEPwE@(@tE@(@@t EeEPE PEP EEt EEڋEPE PntEE]ÐU]ZU>jE PPp]ÐU]ZUg>ڋE@(@EUE PB$PsEE]ÐU]ZU>ڋE@(@EUEPE PB$Ps EE]ÐU]ZU=ڋE@(@EUE PB$PosEE]ÐU]ZUw=ڋE@(@EUEPEPB$P+s EE]ÐU]ZU'=ڋE@(@EUE PB$PrEE]ÐU]ZU<jE Pp]ÐU]E@EU @ ;B tE U@ B E@U@BEU @$;B$tE U@$B$E@U@BEU @(;B(tE U@(B(E@U@BEE]ÐU$]ZU;ڋEEE@@(EjjEP n E@EEU@BMU jjEPjB8PAPqEEtEUPE\UjjEPE PEPBPEUPEtUjE PBPBq E EEEE]ÐU]ZU:ڋEEEEjjEPRE PEPwEE]ÐU0]ZUԸ:EEEEEEEEjEPEPEPEPE P,EEtEEjEPEPEPEPEPEEtsEPEPptVl@EPEPEPot2l@E,jEPjEP?ljEP1ljEP3kjEP%kjEPkjEP kjEPjjEPjjEPjjEPjEEE]ÐU$]ZU8EEEE@(@tE@(@@uE :7E@(@EE@t E :E@(u EEEE@t;U䋃PBPju EEEE@uōEPj4EEu EEjEPEj@PjЋEPE@uE@(EPEPEEu{Ej@PajЋEPE@uE@(jEPEEtjEPEPa EEtEtrEEt!EPEPEP EEt@EPEPEP EEtjEPkjEPlEtEPEPEtjEPaEEE]U]ZUG6ڋEPEPEPZl EE=:ǖu EPEEE]ÐU]ZU5jjEPEPEPEPl]U]E@,u-E@0u"E@4uE@8u E@<t E]45E@ uE@$u E@(t E]4 E]4E]ÐU ]ZU5jE P=ЋE PE PEP!ku E}E PEPjuEE @=]4t'E @=]4tE @=]4t E!EHwZUDUE PEPju ELE PEPxju E'E PEPTju EE PEP0ju EE PEP ju EE PEPiu EE PEPiu EsE @=]4~oE PEPiuEBE $PEPliu EE (PEPHiu EE @=]4E ,PEPiuEE 0PEPhu EE 4PEPhu EzE 8PEPhu EVE EUEUEU]ÐU]ZUG jEPEUEU]U]ZU ڋUE PREUEU]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU ]ZU ڋE PEPjl= EE]ÐU ]ZU ڋE PEPj<= EE]ÐU ]ZU ڋE PEPj = EE]ÐU ]ZUW jjEPE PEPj<EE]ÐU]ZU ڋEtE PEP<jEP<]ÐU]ZU ڋEt)jEPh<PEP;<jEP=<]ÐU]ZUW ڋE ;Eu#E PEPEP< u EEEEE]ÐU]ZU jEP;U ;u"E PEPEP; u EEEEE]ÐU]EE EEEEEMUBABABA]U]uZU$ jjuVuMUBABABA]uU]uZUjE P}:PE PuVuMUBABABA]uU]ZUWڋE v E E EjEP:EEu E &E@EUPEU PEE]ÐU]ZUڋE ;Eu+E;E u#EPE$PEPz9 u EEEEE]ÐU]ZUWڋEv EE EjEP9EEu E EE UPEEE]ÐUT]ZUڋE@E@E@fEEPE PEP> EEu Eu EE0jjEP8 EjjjPEPEP(:EPEP8>u(E@tUjEPBЃE7%EԃtZEEPEPEP= EEu4EU@ BEU@$BEU@(BEPEP=E@tUjEPBЃjjjjjEPW9EPEPg=E@tUjEPBЃEE]ÐU]ZUڍEPEPEP = uE@$;E EIEt E@(;Es E+Eu EE@$EU ;EE]ÐU ]ZUwEEEE@(@EE@0t EijEPEPEPE PEP-EEt EE6jE PEPEPEPEPt E:ǖEE]ÐU(]ZUܸEEEE@(@EE2EE=:ǖ} =:ǖt=:ǖtՃtҐE u EE@0u5jEPEPEPE PEPEEt EEXjE PEPEPEPEPt E(EuXE @ %tHE@0uE @(tE @(EE@,uE UP EE@0E=:ǖt E=:ǖumEPE PEP4: uE @$;E E @(EtE @$EU;~ E @(E UP$E @(U @B(EEt(jE PEP7 EEt EE EE]UWVS[q[^_UWVS[U[^_r+rw+dbnametemporarymerge_nrahashmit-krb5Unsupported argument "%s" for db2dbmodulesdatabase_namerealms/usr/local/var/krb5kdc/principaldisable_last_successdisable_lockout~%s%s%s.ok.kadm5.kadm5.lockLOCKED_OUT<BRbr"2BRbrT"2BRbr  "DP2`hBRbr"2BRbr"2BRbr  " 2 B R b r !!#2AM t Zccp r o0pHoo@P` 0@0`p , !t     <TT&/ >H !i@!`!!!!!: ":`":"3+"U7@#6C L$/W$Eb%zm%3y%U &6`'/'E'z`(?(>(D0)D)A)J *@`*B* **+!0+*P+>/+>)+>7,F=`,LE,WT-a\-mk-Cu@.[.j/P/i0~&T/ H Ai@A`AAAAA: B:`B:B3+BU7@C6C LD/WDEbEzmE3yEU F6`G/GEGz`H?H>HD0IDIAIJ J@`JBJ JJK!0K*PK>/K>)K>7LF=`LLELWTMa\MmkMCu@N[NjOPOiP~T   &T/ H[i[[\0\P\p\:\:\:0]3+p]U7]6C L_/W@_Eb_zm`3yP`U`6a/ bEpbzb?0c>pcDcDdA`dJd@dB@e `eee!e*e>/ f>)`f>7fF=fLE@gWTga\hmkhCuh[0ijiP0jij~&T/ Huiv0vPvpvvv:v:0w:pw3+wU7x6C LPy/WyEbyzmPz3yzUz60|/`|E|z0}?p}>}D~DP~A~J~@0B !* >/`>)>7F=0LEWTa\PmkCu[pjPpi~`AP _   $  *  0  6 $ <D  BP H` Nh$ T Z `Pm s y c     ` @0 @}Дxs P6RW`Pl  &T/ s}P&T/ HPipз:P::и3+U7p6C L/WEb0zm3yUP6/Ez?о>D`DAJP@B  @!`*>/>)>7@F=LEWT@a\mk Cup[j@Pi@~P{`}{*Fmc} }0}@}8mR0k`}X@R&X/ Hi @`::: 3+`U76C L/W0Ebzm3y@U6/E`z? >`DDAPJ@B0 Pp!*>/>)P>7F=LE0WTa\mkpCu[ jP i~&T/ @4@ uZ (Y05>O`dj<s/sP =4 K0m UW4 V/EPXoZK`6k`mR@3P t p\0lQcZn" < " hE BK KWS eZ i   `7I    X   0  ,1 I _ !Kf m t 1W k6qp_  >jЪO     pO % pPC I P \ D p v ~ C   py  p"  @  '  . = D snX p  R      db2.socrti.svalues-Xa.cDdata.dataBbss.bssDrodata.rodatakdb_xdr.ck5_os_nothread_mutex_finish_initk5_os_nothread_mutex_initk5_os_nothread_mutex_destroyk5_os_nothread_mutex_lockk5_os_nothread_mutex_unlockk5_os_mutex_finish_initk5_mutex_initk5_mutex_finish_initk5_mutex_lockstore_16_bestore_32_bestore_64_be.L_cseg0load_16_beload_32_beload_64_bestore_16_lestore_32_lestore_64_leload_16_leload_32_leload_64_lestore_16_nstore_32_nstore_64_nload_16_nload_32_nload_64_nk5_htonllk5_ntohllsa2sinsa2sin6ss2sass2sinss2sin6fstatlstat_xmknodzapfreezapfreestrauthdata_eqdata_eq_stringmake_dataempty_datastring2dataalloc_datak5allocDpicdata.picdataadb_openclose.c.L355.L378.L381.L449adb_policy.ckdb_db2.cget_db_optctx_clearctx_getconfigure_context.L373.L386.L391.L394.L395.L404.L405.L409.L410.L413.L416ctx_dbsuffix.L427.L429.L431ctx_allfiles.L440.L444.L447.L450open_db.L459ctx_unlockctx_lockctx_initctx_finicheck_openablectx_update_agedestroy_filectx_create_dbctx_iteratekrb5_db2_merge_principalkrb5_db2_merge_nra_iteratorctx_merge_nractx_promote.L1050pol_xdr.cosa_policy_min_versdb2_exp.cwrap_krb5_db2_openwrap_krb5_db2_finiwrap_krb5_db2_createwrap_krb5_db2_destroywrap_krb5_db2_get_agewrap_krb5_db2_lockwrap_krb5_db2_unlockwrap_krb5_db2_get_principalwrap_krb5_db2_free_principalwrap_krb5_db2_put_principalwrap_krb5_db2_delete_principalwrap_krb5_db2_iteratewrap_krb5_db2_create_policywrap_krb5_db2_get_policywrap_krb5_db2_put_policywrap_krb5_db2_iter_policywrap_krb5_db2_delete_policywrap_krb5_db2_free_policywrap_krb5_db2_promote_dbwrap_krb5_db2_check_policy_aswrap_krb5_db2_audit_as_reqhack_inithack_cleanuplockout.clookup_lockout_policylocked_check_pcrtn.s_END__START_krb5_db2_freememsetosa_free_policy_entosa_adb_open_and_lockxdr_krb5_tl_datakrb5_db2_lib_cleanuputime_DYNAMICkrb5int_mutex_unlock_lib_versionxdr_nulltype_edata_endkrb5int_mutex_allocmemcpykrb5_free_data_contentsgssrpc_xdr_u_int32osa_adb_fini_dbkrb5_free_contextfilenoxdr_osa_policy_ent_recosa_adb_get_lockosa_adb_release_lockkrb5int_asprintfosa_adb_destroy_policykrb5_db2_lockout_auditosa_adb_create_dbfopenreadkrb5_encode_princ_dbkeyosa_adb_destroy_dbosa_adb_close_and_unlockosa_adb_get_policykrb5_db2_allocfcntlkrb5_dbe_lookup_last_admin_unlockfclosereallocrenamexdr_nullstringkrb5int_init_context_kdcpthread_mutex_initkrb5_decode_princ_entryprofile_get_stringprofile_release_stringstrcmpkdb_function_tablestrdupwritelseekkrb5int_mutex_free_PROCEDURE_LINKAGE_TABLE_gssrpc_xdralloc_getdataxdr_osa_princ_ent_rec_xstatcallocstrlenkrb5_encode_princ_entryosa_adb_create_policygssrpc_xdralloc_createkrb5_dbe_freemallockrb5_parse_namegssrpc_xdr_intlibintl_dgettextprofile_get_booleanpthread_mutex_lockkrb5_db2_lockout_check_policyfsyncmemcmpkrb5int_zapkrb5_free_principalabort_fxstatkrb5_db2_set_lockmodekrb5int_mutex_lockgssrpc_xdrmem_createkrb5_clear_error_message_lxstatosa_adb_put_policykrb5_set_error_messagekrb5_db2_lib_initfdopenstrchr_etextkrb5_db2_mutexaccessosa_adb_iter_policykrb5_dbe_lookup_tl_datakrb5_unparse_nameosa_adb_init_dbkrb5_lock_file___errnogssrpc_xdr_short_GLOBAL_OFFSET_TABLE___db185_openunlinkanotate anotate anotate anotate anotate anotate anotate \`@dhPlp`tx| 0@@0`anotate @(#)types.h 1.86 07/09/20 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)stdio.h 1.84 04/09/28 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)in.h 1.55 09/05/27 SMI@(#)socket_impl.h 1.1 05/08/02 SMI@(#)un.h 1.11 02/10/02 SMI@(#)if_dl.h 1.10 03/05/21 SMI@(#)stream.h 1.115 08/07/22 SMI@(#)vnode.h 1.133 09/07/17 SMI@(#)t_lock.h 1.45 98/02/01 SMI@(#)machlock.h 1.25 04/07/19 SMI@(#)param.h 1.82 06/01/30 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)mutex.h 1.21 07/04/04 SMI@(#)rwlock.h 1.9 98/02/18 SMI@(#)semaphore.h 1.5 98/02/01 SMI@(#)condvar.h 1.14 04/10/21 SMI@(#)rwstlock.h 1.4 04/11/09 SMI@(#)ksynch.h 1.6 97/10/22 SMI@(#)cred.h 1.27 06/05/03 SMI@(#)uio.h 1.34 09/06/15 SMI@(#)resource.h 1.37 07/02/07 SMI@(#)seg_enum.h 1.9 09/07/02 SMI@(#)kstat.h 1.22 07/02/02 SMI@(#)kmem.h 1.38 09/05/07 SMI@(#)vmem.h 1.12 05/06/27 SMI@(#)poll.h 1.28 98/11/23 SMI@(#)strmdep.h 1.10 98/01/06 SMI@(#)model.h 1.24 04/09/28 SMI@(#)strft.h 1.2 00/03/17 SMI@(#)byteorder.h 1.18 04/09/28 SMI@(#)inet.h 1.21 08/01/04 SMI@(#)socket.h 1.78 08/01/18 SMI@(#)netconfig.h 1.24 04/02/27 SMI@(#)netdb.h 1.30 03/12/04 SMI@(#)if.h 1.38 07/03/20 SMI@(#)filio.h 1.38 08/06/06 SMI@(#)ioccom.h 1.14 97/10/22 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)stat.h 1.11 04/09/28 SMI@(#)stat_impl.h 1.4 03/12/04 SMI@(#)file.h 1.70 07/03/05 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)file.h 1.70 07/03/05 SMI@(#)t_lock.h 1.45 98/02/01 SMI@(#)machlock.h 1.25 04/07/19 SMI@(#)types.h 1.86 07/09/20 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)param.h 1.82 06/01/30 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)mutex.h 1.21 07/04/04 SMI@(#)rwlock.h 1.9 98/02/18 SMI@(#)semaphore.h 1.5 98/02/01 SMI@(#)condvar.h 1.14 04/10/21 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)stdio.h 1.84 04/09/28 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)in.h 1.55 09/05/27 SMI@(#)socket_impl.h 1.1 05/08/02 SMI@(#)un.h 1.11 02/10/02 SMI@(#)if_dl.h 1.10 03/05/21 SMI@(#)stream.h 1.115 08/07/22 SMI@(#)vnode.h 1.133 09/07/17 SMI@(#)rwstlock.h 1.4 04/11/09 SMI@(#)ksynch.h 1.6 97/10/22 SMI@(#)cred.h 1.27 06/05/03 SMI@(#)uio.h 1.34 09/06/15 SMI@(#)resource.h 1.37 07/02/07 SMI@(#)seg_enum.h 1.9 09/07/02 SMI@(#)kstat.h 1.22 07/02/02 SMI@(#)kmem.h 1.38 09/05/07 SMI@(#)vmem.h 1.12 05/06/27 SMI@(#)poll.h 1.28 98/11/23 SMI@(#)strmdep.h 1.10 98/01/06 SMI@(#)model.h 1.24 04/09/28 SMI@(#)strft.h 1.2 00/03/17 SMI@(#)byteorder.h 1.18 04/09/28 SMI@(#)inet.h 1.21 08/01/04 SMI@(#)socket.h 1.78 08/01/18 SMI@(#)netconfig.h 1.24 04/02/27 SMI@(#)netdb.h 1.30 03/12/04 SMI@(#)if.h 1.38 07/03/20 SMI@(#)filio.h 1.38 08/06/06 SMI@(#)ioccom.h 1.14 97/10/22 SMI@(#)stat.h 1.11 04/09/28 SMI@(#)stat_impl.h 1.4 03/12/04 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)types.h 1.86 07/09/20 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)stdio.h 1.84 04/09/28 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)in.h 1.55 09/05/27 SMI@(#)socket_impl.h 1.1 05/08/02 SMI@(#)un.h 1.11 02/10/02 SMI@(#)if_dl.h 1.10 03/05/21 SMI@(#)stream.h 1.115 08/07/22 SMI@(#)vnode.h 1.133 09/07/17 SMI@(#)t_lock.h 1.45 98/02/01 SMI@(#)machlock.h 1.25 04/07/19 SMI@(#)param.h 1.82 06/01/30 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)mutex.h 1.21 07/04/04 SMI@(#)rwlock.h 1.9 98/02/18 SMI@(#)semaphore.h 1.5 98/02/01 SMI@(#)condvar.h 1.14 04/10/21 SMI@(#)rwstlock.h 1.4 04/11/09 SMI@(#)ksynch.h 1.6 97/10/22 SMI@(#)cred.h 1.27 06/05/03 SMI@(#)uio.h 1.34 09/06/15 SMI@(#)resource.h 1.37 07/02/07 SMI@(#)seg_enum.h 1.9 09/07/02 SMI@(#)kstat.h 1.22 07/02/02 SMI@(#)kmem.h 1.38 09/05/07 SMI@(#)vmem.h 1.12 05/06/27 SMI@(#)poll.h 1.28 98/11/23 SMI@(#)strmdep.h 1.10 98/01/06 SMI@(#)model.h 1.24 04/09/28 SMI@(#)strft.h 1.2 00/03/17 SMI@(#)byteorder.h 1.18 04/09/28 SMI@(#)inet.h 1.21 08/01/04 SMI@(#)socket.h 1.78 08/01/18 SMI@(#)netconfig.h 1.24 04/02/27 SMI@(#)netdb.h 1.30 03/12/04 SMI@(#)if.h 1.38 07/03/20 SMI@(#)filio.h 1.38 08/06/06 SMI@(#)ioccom.h 1.14 97/10/22 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)stat.h 1.11 04/09/28 SMI@(#)stat_impl.h 1.4 03/12/04 SMI@(#)file.h 1.70 07/03/05 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)types.h 1.86 07/09/20 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)stdio.h 1.84 04/09/28 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)in.h 1.55 09/05/27 SMI@(#)socket_impl.h 1.1 05/08/02 SMI@(#)un.h 1.11 02/10/02 SMI@(#)if_dl.h 1.10 03/05/21 SMI@(#)stream.h 1.115 08/07/22 SMI@(#)vnode.h 1.133 09/07/17 SMI@(#)t_lock.h 1.45 98/02/01 SMI@(#)machlock.h 1.25 04/07/19 SMI@(#)param.h 1.82 06/01/30 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)mutex.h 1.21 07/04/04 SMI@(#)rwlock.h 1.9 98/02/18 SMI@(#)semaphore.h 1.5 98/02/01 SMI@(#)condvar.h 1.14 04/10/21 SMI@(#)rwstlock.h 1.4 04/11/09 SMI@(#)ksynch.h 1.6 97/10/22 SMI@(#)cred.h 1.27 06/05/03 SMI@(#)uio.h 1.34 09/06/15 SMI@(#)resource.h 1.37 07/02/07 SMI@(#)seg_enum.h 1.9 09/07/02 SMI@(#)kstat.h 1.22 07/02/02 SMI@(#)kmem.h 1.38 09/05/07 SMI@(#)vmem.h 1.12 05/06/27 SMI@(#)poll.h 1.28 98/11/23 SMI@(#)strmdep.h 1.10 98/01/06 SMI@(#)model.h 1.24 04/09/28 SMI@(#)strft.h 1.2 00/03/17 SMI@(#)byteorder.h 1.18 04/09/28 SMI@(#)inet.h 1.21 08/01/04 SMI@(#)socket.h 1.78 08/01/18 SMI@(#)netconfig.h 1.24 04/02/27 SMI@(#)netdb.h 1.30 03/12/04 SMI@(#)if.h 1.38 07/03/20 SMI@(#)filio.h 1.38 08/06/06 SMI@(#)ioccom.h 1.14 97/10/22 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)stat.h 1.11 04/09/28 SMI@(#)stat_impl.h 1.4 03/12/04 SMI@(#)file.h 1.70 07/03/05 SMI@(#)utime.h 1.8 92/07/14 SMI@(#)utime.h 1.9 97/08/12 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)types.h 1.86 07/09/20 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)netdb.h 1.30 03/12/04 SMI@(#)in.h 1.55 09/05/27 SMI@(#)socket_impl.h 1.1 05/08/02 SMI@(#)un.h 1.11 02/10/02 SMI@(#)if_dl.h 1.10 03/05/21 SMI@(#)stream.h 1.115 08/07/22 SMI@(#)vnode.h 1.133 09/07/17 SMI@(#)t_lock.h 1.45 98/02/01 SMI@(#)machlock.h 1.25 04/07/19 SMI@(#)param.h 1.82 06/01/30 SMI@(#)mutex.h 1.21 07/04/04 SMI@(#)rwlock.h 1.9 98/02/18 SMI@(#)semaphore.h 1.5 98/02/01 SMI@(#)condvar.h 1.14 04/10/21 SMI@(#)rwstlock.h 1.4 04/11/09 SMI@(#)ksynch.h 1.6 97/10/22 SMI@(#)cred.h 1.27 06/05/03 SMI@(#)uio.h 1.34 09/06/15 SMI@(#)resource.h 1.37 07/02/07 SMI@(#)seg_enum.h 1.9 09/07/02 SMI@(#)kstat.h 1.22 07/02/02 SMI@(#)kmem.h 1.38 09/05/07 SMI@(#)vmem.h 1.12 05/06/27 SMI@(#)poll.h 1.28 98/11/23 SMI@(#)strmdep.h 1.10 98/01/06 SMI@(#)model.h 1.24 04/09/28 SMI@(#)strft.h 1.2 00/03/17 SMI@(#)byteorder.h 1.18 04/09/28 SMI@(#)socket.h 1.78 08/01/18 SMI@(#)netconfig.h 1.24 04/02/27 SMI@(#)stdio.h 1.84 04/09/28 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)stddef.h 1.18 04/09/28 SMI@(#)stddef_iso.h 1.2 03/03/06 SMI@(#)memory.h 1.13 00/02/17 SMI@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)types.h 1.86 07/09/20 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)stdio.h 1.84 04/09/28 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)in.h 1.55 09/05/27 SMI@(#)socket_impl.h 1.1 05/08/02 SMI@(#)un.h 1.11 02/10/02 SMI@(#)if_dl.h 1.10 03/05/21 SMI@(#)stream.h 1.115 08/07/22 SMI@(#)vnode.h 1.133 09/07/17 SMI@(#)t_lock.h 1.45 98/02/01 SMI@(#)machlock.h 1.25 04/07/19 SMI@(#)param.h 1.82 06/01/30 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)mutex.h 1.21 07/04/04 SMI@(#)rwlock.h 1.9 98/02/18 SMI@(#)semaphore.h 1.5 98/02/01 SMI@(#)condvar.h 1.14 04/10/21 SMI@(#)rwstlock.h 1.4 04/11/09 SMI@(#)ksynch.h 1.6 97/10/22 SMI@(#)cred.h 1.27 06/05/03 SMI@(#)uio.h 1.34 09/06/15 SMI@(#)resource.h 1.37 07/02/07 SMI@(#)seg_enum.h 1.9 09/07/02 SMI@(#)kstat.h 1.22 07/02/02 SMI@(#)kmem.h 1.38 09/05/07 SMI@(#)vmem.h 1.12 05/06/27 SMI@(#)poll.h 1.28 98/11/23 SMI@(#)strmdep.h 1.10 98/01/06 SMI@(#)model.h 1.24 04/09/28 SMI@(#)strft.h 1.2 00/03/17 SMI@(#)byteorder.h 1.18 04/09/28 SMI@(#)inet.h 1.21 08/01/04 SMI@(#)socket.h 1.78 08/01/18 SMI@(#)netconfig.h 1.24 04/02/27 SMI@(#)netdb.h 1.30 03/12/04 SMI@(#)if.h 1.38 07/03/20 SMI@(#)filio.h 1.38 08/06/06 SMI@(#)ioccom.h 1.14 97/10/22 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)stat.h 1.11 04/09/28 SMI@(#)stat_impl.h 1.4 03/12/04 SMI@(#)file.h 1.70 07/03/05 SMI@(#)utime.h 1.8 92/07/14 SMI@(#)utime.h 1.9 97/08/12 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)types.h 1.86 07/09/20 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)stdio.h 1.84 04/09/28 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)in.h 1.55 09/05/27 SMI@(#)socket_impl.h 1.1 05/08/02 SMI@(#)un.h 1.11 02/10/02 SMI@(#)if_dl.h 1.10 03/05/21 SMI@(#)stream.h 1.115 08/07/22 SMI@(#)vnode.h 1.133 09/07/17 SMI@(#)t_lock.h 1.45 98/02/01 SMI@(#)machlock.h 1.25 04/07/19 SMI@(#)param.h 1.82 06/01/30 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)mutex.h 1.21 07/04/04 SMI@(#)rwlock.h 1.9 98/02/18 SMI@(#)semaphore.h 1.5 98/02/01 SMI@(#)condvar.h 1.14 04/10/21 SMI@(#)rwstlock.h 1.4 04/11/09 SMI@(#)ksynch.h 1.6 97/10/22 SMI@(#)cred.h 1.27 06/05/03 SMI@(#)uio.h 1.34 09/06/15 SMI@(#)resource.h 1.37 07/02/07 SMI@(#)seg_enum.h 1.9 09/07/02 SMI@(#)kstat.h 1.22 07/02/02 SMI@(#)kmem.h 1.38 09/05/07 SMI@(#)vmem.h 1.12 05/06/27 SMI@(#)poll.h 1.28 98/11/23 SMI@(#)strmdep.h 1.10 98/01/06 SMI@(#)model.h 1.24 04/09/28 SMI@(#)strft.h 1.2 00/03/17 SMI@(#)byteorder.h 1.18 04/09/28 SMI@(#)inet.h 1.21 08/01/04 SMI@(#)socket.h 1.78 08/01/18 SMI@(#)netconfig.h 1.24 04/02/27 SMI@(#)netdb.h 1.30 03/12/04 SMI@(#)if.h 1.38 07/03/20 SMI@(#)filio.h 1.38 08/06/06 SMI@(#)ioccom.h 1.14 97/10/22 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)stat.h 1.11 04/09/28 SMI@(#)stat_impl.h 1.4 03/12/04 SMI@(#)file.h 1.70 07/03/05 SMI@(#)memory.h 1.13 00/02/17 SMI@(#)stddef.h 1.18 04/09/28 SMI@(#)stddef_iso.h 1.2 03/03/06 SMI@(#)utime.h 1.8 92/07/14 SMI@(#)utime.h 1.9 97/08/12 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13ld: Software Generation Utilities - Solaris Link Editors: 5.10-1.497;kdb_xdr.c /var/tmp/krb5-1.11/src/plugins/kdb/db2 /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DPLUGIN -I../../../include -I../../../include -I../../../lib/kdb -I./../../../lib/kdb -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c kdb_xdr.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0Gadb_openclose.c /var/tmp/krb5-1.11/src/plugins/kdb/db2 /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DPLUGIN -I../../../include -I../../../include -I../../../lib/kdb -I./../../../lib/kdb -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c adb_openclose.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0NA,adb_policy.c /var/tmp/krb5-1.11/src/plugins/kdb/db2 /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DPLUGIN -I../../../include -I../../../include -I../../../lib/kdb -I./../../../lib/kdb -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c adb_policy.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0;Bkdb_db2.c /var/tmp/krb5-1.11/src/plugins/kdb/db2 /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DPLUGIN -I../../../include -I../../../include -I../../../lib/kdb -I./../../../lib/kdb -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c kdb_db2.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0;Xpol_xdr.c /var/tmp/krb5-1.11/src/plugins/kdb/db2 /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DPLUGIN -I../../../include -I../../../include -I../../../lib/kdb -I./../../../lib/kdb -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c pol_xdr.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0A;ndb2_exp.c /var/tmp/krb5-1.11/src/plugins/kdb/db2 /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DPLUGIN -I../../../include -I../../../include -I../../../lib/kdb -I./../../../lib/kdb -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c db2_exp.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0;lockout.c /var/tmp/krb5-1.11/src/plugins/kdb/db2 /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DPLUGIN -I../../../include -I../../../include -I../../../lib/kdb -I./../../../lib/kdb -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c lockout.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0JD /var/tmp/krb5-1.11/src/plugins/kdb/db2kdb_xdr.cPJ /var/tmp/krb5-1.11/src/plugins/kdb/db2adb_openclose.cMG /var/tmp/krb5-1.11/src/plugins/kdb/db2adb_policy.cJD /var/tmp/krb5-1.11/src/plugins/kdb/db2kdb_db2.cJD /var/tmp/krb5-1.11/src/plugins/kdb/db2pol_xdr.cJD /var/tmp/krb5-1.11/src/plugins/kdb/db2db2_exp.cJD /var/tmp/krb5-1.11/src/plugins/kdb/db2lockout.c DD% DD% DD% DD% DD% DD% DD%.hash.dynsym.dynstr.rel.got.rel.data.rel.plt.text.init.fini.rodata.rodata1.dynamic.bssf.picdata.bss.symtab.strtab.annotate.comment.debug_info.debug_line.debug_abbrev.shstrtab "p p r B  B* Bp.,,3 ! !S9tt?E4MLV<<$TT_ens#{  ox`Kjy+{ |070701000a2560000081a40000000000000000000000015125a07500003e08000000b500010002ffffffffffffffff0000002d00000000root/usr/local/lib/krb5/plugins/kdb/kldap.soELF494 (/0  #$%&(*-/!"')+,.-4R X`o<     @PW({   )BGh{ krb5_ldap_lib_cleanupcallockrb5_ldap_freestrlenkrb5_ldap_put_password_policy_fini_lxstatkrb5_ldap_lock_PROCEDURE_LINKAGE_TABLE_kdb_function_table_xmknodkrb5_ldap_lib_init_fxstatkrb5_ldap_allockrb5_ldap_openpthread_mutex_lockkrb5_ldap_free_principal_etext_xstatmemcmpkrb5_ldap_delete_password_policykrb5_ldap_close_edatakrb5_ldap_check_allowed_to_delegatekrb5int_zap_lib_versionkrb5_ldap_iteratekrb5_ldap_get_password_policykrb5_ldap_put_principalmemcpykrb5_ldap_delete_principalkrb5_ldap_iterate_password_policy_DYNAMICkrb5_ldap_delete_realm_1_endkrb5_ldap_create_password_policypthread_mutex_init_GLOBAL_OFFSET_TABLE_krb5_ldap_free_password_policykrb5_ldap_unlockkrb5_ldap_check_policy_askrb5_ldap_get_agekrb5_ldap_get_principalkrb5_ldap_audit_as_reqkrb5_ldap_createlibkdb_ldap.so.1libgssrpc.so.4libgssapi_krb5.so.2libkrb5.so.3libcom_err.so.3libk5crypto.so.3libkrb5support.so.0libresolv.so.2libsocket.so.1libnsl.so.1libintl.so.8kldap.so.0/usr/local/lib  /$$(,,0*4-8<@!DH&LPT"X\)`d+.'   hhhh h $h((h0,h8p0h@`4hHP8hP@<hX0U]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU ]ZUjEPPEE]ÐU ]ZUjEPtEE]ÐU ]ZUkjEPEE]ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZU ڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZU ڋEEjEPxEjPY u}EU]u}ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZU ڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZUڋEEEjPujEPY u}EU]u}ÐU ]ZUkڋEfEjEPE P ]ÐU ]ZU+ڋEEjEPE P ]ÐU]ZUڋEU EUjEPEP` ]ÐU ]ZUjEPEP EfEE]ÐU]ZUKjEPEP EEE]ÐU]ZUjEPEP| EUEUEU]ÐU]ZUjEPEUEU]U]ZUkڋUE PREUEU]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU ]ZU{ڋE PEPj EE]ÐU ]ZU;ڋE PEPj EE]ÐU ]ZUڋE PEPj EE]ÐU ]ZUjjEPE PEPjtEE]ÐU]ZUkڋEtE PEP6jEP8]ÐU]ZUڋEt)jEPPEPjEP]ÐU]ZUڋE ;Eu#E PEPEP u EEEEE]ÐU]ZUKjEP@U ;u"E PEPEP5 u EEEEE]ÐU]EE EEEEEMUBABABA]U]uZU츈jjuVuMUBABABA]uU]uZU(jE PPE PuVuMUBABABA]uU]ZUڋE v E E EjEPEEu E &E@EUPEU PEE]ÐU]ZU+ڋE ;Eu+E;E u#EPE$PEP u EEEEE]ÐU]ZU츻ڋEv EE EjEPEEu E EE UPEEE]UWVS[9[^_UWVS[[^_R b r  ->Man~    oj`  0oo   <         (1 @K l0 P p    : :P :" 3. U:0 6F Op/ZEezpp3|U6P/EzP?>D DpAJ@PB$ -@>2>,>:F@PLHWWa_pmnCx0[jSi~( 1  '6< P 8 cv~ C:F Se ': Pokldap.socrti.svalues-Xa.cDdata.dataBbss.bssDrodata.rodataldap_exp.ck5_os_nothread_mutex_finish_initk5_os_nothread_mutex_initk5_os_nothread_mutex_destroyk5_os_nothread_mutex_lockk5_os_nothread_mutex_unlockk5_os_mutex_finish_initk5_mutex_initk5_mutex_finish_initk5_mutex_lockstore_16_bestore_32_bestore_64_be.L_cseg0load_16_beload_32_beload_64_bestore_16_lestore_32_lestore_64_leload_16_leload_32_leload_64_lestore_16_nstore_32_nstore_64_nload_16_nload_32_nload_64_nk5_htonllk5_ntohllsa2sinsa2sin6ss2sass2sinss2sin6fstatlstat_xmknodzapfreezapfreestrauthdata_eqdata_eq_stringmake_dataempty_datastring2dataalloc_datak5allocDpicdata.picdatacrtn.s_END__START_krb5_ldap_lib_cleanupcallockrb5_ldap_freestrlenkrb5_ldap_put_password_policy_fini_lxstatkrb5_ldap_lock_PROCEDURE_LINKAGE_TABLE_kdb_function_tablekrb5_ldap_lib_init_fxstatkrb5_ldap_allockrb5_ldap_openpthread_mutex_lockkrb5_ldap_free_principal_etext_xstatmemcmpkrb5_ldap_delete_password_policykrb5_ldap_close_edatakrb5_ldap_check_allowed_to_delegatekrb5int_zap_lib_versionkrb5_ldap_iteratekrb5_ldap_get_password_policykrb5_ldap_put_principalmemcpykrb5_ldap_delete_principalkrb5_ldap_iterate_password_policy_DYNAMICkrb5_ldap_delete_realm_1_endkrb5_ldap_create_password_policypthread_mutex_init_GLOBAL_OFFSET_TABLE_krb5_ldap_free_password_policykrb5_ldap_unlockkrb5_ldap_check_policy_askrb5_ldap_get_agekrb5_ldap_get_principalkrb5_ldap_audit_as_reqkrb5_ldap_createanotate anotate @(#)types.h 1.86 07/09/20 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)stdio.h 1.84 04/09/28 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)in.h 1.55 09/05/27 SMI@(#)socket_impl.h 1.1 05/08/02 SMI@(#)un.h 1.11 02/10/02 SMI@(#)if_dl.h 1.10 03/05/21 SMI@(#)stream.h 1.115 08/07/22 SMI@(#)vnode.h 1.133 09/07/17 SMI@(#)t_lock.h 1.45 98/02/01 SMI@(#)machlock.h 1.25 04/07/19 SMI@(#)param.h 1.82 06/01/30 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)mutex.h 1.21 07/04/04 SMI@(#)rwlock.h 1.9 98/02/18 SMI@(#)semaphore.h 1.5 98/02/01 SMI@(#)condvar.h 1.14 04/10/21 SMI@(#)rwstlock.h 1.4 04/11/09 SMI@(#)ksynch.h 1.6 97/10/22 SMI@(#)cred.h 1.27 06/05/03 SMI@(#)uio.h 1.34 09/06/15 SMI@(#)resource.h 1.37 07/02/07 SMI@(#)seg_enum.h 1.9 09/07/02 SMI@(#)kstat.h 1.22 07/02/02 SMI@(#)kmem.h 1.38 09/05/07 SMI@(#)vmem.h 1.12 05/06/27 SMI@(#)poll.h 1.28 98/11/23 SMI@(#)strmdep.h 1.10 98/01/06 SMI@(#)model.h 1.24 04/09/28 SMI@(#)strft.h 1.2 00/03/17 SMI@(#)byteorder.h 1.18 04/09/28 SMI@(#)inet.h 1.21 08/01/04 SMI@(#)socket.h 1.78 08/01/18 SMI@(#)netconfig.h 1.24 04/02/27 SMI@(#)netdb.h 1.30 03/12/04 SMI@(#)if.h 1.38 07/03/20 SMI@(#)filio.h 1.38 08/06/06 SMI@(#)ioccom.h 1.14 97/10/22 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)stat.h 1.11 04/09/28 SMI@(#)stat_impl.h 1.4 03/12/04 SMI@(#)file.h 1.70 07/03/05 SMI@(#)utime.h 1.8 92/07/14 SMI@(#)utime.h 1.9 97/08/12 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13ld: Software Generation Utilities - Solaris Link Editors: 5.10-1.497Eldap_exp.c /var/tmp/krb5-1.11/src/plugins/kdb/ldap /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -I../../../include -I../../../include -I../../../lib/kdb -I./../../../lib/kdb -I./libkdb_ldap -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c ldap_exp.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0LF /var/tmp/krb5-1.11/src/plugins/kdb/ldapldap_exp.c DD%.hash.dynsym.dynstr.rel.got.rel.data.rel.plt.text.init.fini.rodata.dynamic.bssf.picdata.bss.symtab.strtab.annotate.comment.debug_info.debug_line.debug_abbrev.shstrtab " B   B  * B `.< < 3  n9?E @M$  V\ejYr $%zo+(8+Q 6I8P"9 89070701000a2561000041ed0000000000000000000000025125a07f00000000000000b500010002ffffffffffffffff0000002800000000root/usr/local/lib/krb5/plugins/preauth070701000a2562000081a40000000000000000000000015125a0750003c178000000b500010002ffffffffffffffff0000003200000000root/usr/local/lib/krb5/plugins/preauth/pkinit.soELF44 (  !"#$&'()-.01234578;<>ABCDEFHIJKLMOPQTUWX[\^_`abdefghjknopqrstvwxz{|}~  !"%&'()*,/0245678:;=>ACEFHKLMOPRSTUWY\_`acfhikmnoqrstuwxz|} %*+,/69:=?@GNRSVYZ]cilmuy    #$+-.139<?@BDGIJNQVXZ[]^bdegjlpvy{~@Z 5NUet U `N  ,7>Saz? 0Gb !-(ESdkU g P4 "*2 IX_4 t  L ` ` $&2?g (z к&.5U5 kx0]   ; (0[ K  \/ p p  : |S ) ENl`/ } Z 9 a D n +:C0* `n &    + A T b q     W   a   " L{ 0 : G S d w          `  8  & P3 E W l        ܺ + 2 C $f 6      ,`   < > غ_ i          ;4@ w W`o`M )0k ;Cb )9 S )5&@)e GXa0\ | 0 \P; +2V MUP g @& 5} S \pZ P  & < @UhpFq  Ժ+A]ftE$  9n R4 g}p} ̲<3@S MZct> 0c /9F `j M   U 6U MW` k( I%  *e ;K  `it} U *p? CT0  jp { W  Q  &0;FP ! ]hy n U "2@P_  u @ free_krb5_pa_pk_as_rep_draft9PKCS7_set0_type_otherEVP_CIPHER_asn1_to_paramcallocDH_generate_keyX509_NAME_freepkinit_octetstring2keykrb5_pkinit_sha1_oid_lenASN1_OBJECT_freeX509_STORE_freeX509_dupi2d_ASN1_INTEGERpkinit_dup_identity_optskrb5int_accessormemmovek5int_encode_krb5_pa_pk_as_req_draft9mallocASN1_BIT_STRING_freeEVP_MD_CTX_mdX509_STORE_CTX_get_errork5int_decode_krb5_td_dh_parameterspkinit_libdefault_booleancreate_issuerAndSerialPKCS7_cert_from_signer_infok5int_decode_krb5_pa_pk_as_req_draft9ASN1_INTEGER_setCRYPTO_freek5int_krb5_free_kdc_reqEVP_PKEY_sizeX509_verify_certstrtolkrb5_pkinit_sha256_oid_lenX509_verify_cert_error_stringERR_clear_errork5int_set_prompt_types_PROCEDURE_LINKAGE_TABLE_d2i_PKCS7EVP_DigestUpdatecrypto_cert_selectmemsetstrlcpyregexecdlclosecms_contentinfo_createERR_peek_errorstrduppkinit_fini_plg_optscms_envelopeddata_createidtype2stringEVP_sha512ASN1_put_objectinit_krb5_pa_pk_as_repk5int_encode_krb5_kdc_dh_key_infoinit_krb5_pa_pk_as_reqeku_keywordspthread_mutex_locksk_new_nullPKCS12_parsek5int_encode_krb5_reply_key_pack_draft9cms_envelopeddata_verifycrypto_cert_get_countkrb5_c_make_random_keyencode_krb5_pkinit_supp_pub_infok5int_decode_krb5_td_trusted_certifiersstrcmpASN1_OCTET_STRING_newPKCS7_ATTR_SIGN_itOBJ_cmpBN_newencode_krb5_sp80056a_other_infopkinit_check_kdc_pkidX509_CRL_dupkrb5_principal_compare_any_realmX509_STORE_CTX_trusted_stackpkinit_cert_matchingfree_krb5_pa_pk_as_repd2i_X509_NAMEfree_krb5_pa_pk_as_reqmemcmppkinit_kdcdefault_booleanregcomppkinit_identity_initializeclient_create_dhpkinit_get_kdc_certkdcpreauth_pkinit_initvtpkinit_process_td_dh_paramsBIO_ctrlkrb5_anonymous_principalPEM_read_bio_X509PKCS7_get_signer_infopkinit_kdcdefault_stringEVP_MD_CTX_initkrb5int_free_bufpkinit_init_identity_cryptolonghornEVP_CIPHER_CTX_set_key_lengthcrypto_cert_get_matching_datainit_krb5_subject_pk_infofree_krb5_kdc_dh_key_infoASN1_STRING_setpkinit_kdcdefault_stringsfree_krb5_algorithm_identifiersha256_idfree_krb5_subject_pk_infoasn1_add_errorDH_checkpkinit_identity_set_prompterASN1_TYPE_newPKCS7_SIGNER_INFO_newhtonli2d_ASN1_OCTET_STRINGASN1_TYPE_free_GLOBAL_OFFSET_TABLE_pkinit_create_td_dh_parametersOPENSSL_cleansed2i_X509crypto_load_certsX509_NAME_cmpERR_put_errord2i_ASN1_OCTET_STRINGprofile_get_valuesX509_check_cakrb5_free_dataEVP_PKEY_freeX509V3_EXT_d2imemcpykrb5_us_timeofdaypkinit_create_td_invalid_certificatepthread_mutex_initd2i_PKCS7_ISSUER_AND_SERIALcms_signeddata_createEVP_PKEY_decryptcatype2stringBN_hex2bnX509_get_extOBJ_obj2nidASN1_INTEGER_cmpkrb5_free_keyblocksk_valuefcntlencode_krb5_encryption_keypkinit_init_req_cryptoCRYPTO_set_mem_functionsEVP_SignFinalBIO_s_memlibintl_dgettextDH_newpkinit_accessor_initsha1_idBN_freecrypto_cert_free_matching_dataEVP_DigestInit_exkrb5_c_make_checksumASN1_OCTET_STRING_freeBN_dupkrb5_unparse_namekrb5_set_error_messageX509_STORE_CTX_set0_crlspkinit_2048_dhprimeBN_bn2bink5int_decode_krb5_kdc_dh_key_infok5int_encode_krb5_kdc_req_body_xstatASN1_STRING_datak5int_encode_krb5_auth_pack_draft9crypto_cert_select_defaultopendirX509_get_ext_d2ipkinit_1024_dhprimeBN_cmpprofile_free_listmatching_keywordsEVP_CIPHER_CTX_key_lengthBIO_number_writtenpkinit_libdefault_stringsASN1_const_check_infinite_endk5int_decode_krb5_reply_key_packBIO_writeclpreauth_pkinit_initvtstrncasecmpfree_krb5_external_principal_identifierregfreeEVP_DigestInitdlopenX509_STORE_CTX_initEVP_CipherInit_expkinit_init_req_optsPEM_read_bio_PrivateKeycrypto_cert_iteration_endpkinit_fini_plg_crypto___errnoDH_compute_keyPEM_X509_INFO_read_biod2i_ASN1_INTEGERPKCS7_add_signerregerrorpkinit_init_identity_optsBN_bin2bnPKCS7_ISSUER_AND_SERIAL_freestrncpysk_numk5int_decode_krb5_reply_key_pack_draft9client_process_dh_fxstatk5int_decode_krb5_pa_pk_as_repk5int_decode_krb5_pa_pk_as_reqcrypto_cert_iteration_nextX509_CRL_freekrb5_build_principal_extk5int_decode_krb5_auth_packBIO_pushBN_to_ASN1_INTEGER_finikrb5_free_principalpkinit_4096_dhprimekrb5int_zapX509_NAME_onelinekrb5int_asprintf__assertfree_krb5_auth_pack_draft9OBJ_createstrlenk5int_decode_krb5_auth_pack_draft9pkinit_init_plg_cryptosupported_kdf_alg_idsX509_STORE_set_flagscrypto_retrieve_signer_identitykrb5_free_data_contents_edatainit_krb5_auth_pack_draft9reallocserver_process_dhERR_load_crypto_stringsget_rfc2409_prime_1024BN_set_wordfputcgetenvpkinit_fini_identity_cryptoBIO_f_cipherX509_INFO_freekrb5_c_keylengthsstrncmpfopenEVP_sha256PKCS7_verifycrypto_free_cert_infoinit_krb5_pa_pk_as_rep_draft9strtok_rX509_get_ext_by_NIDfree_krb5_reply_key_pack_draft9krb5int_buf_addBIO_newsha512_idpkinit_copy_krb5_datafcloseEXTENDED_KEY_USAGE_freeencode_krb5_enc_dataBIO_readk5int_decode_krb5_principal_namepkinit_kdcdefault_integerX509_get_issuer_nameASN1_INTEGER_to_BNsk_pushkrb5int_buf_dataBIO_new_mem_buf_xmknodkrb5int_buf_init_dynamiccreate_krb5_trustedCertifiersfilenofree_krb5_algorithm_identifiersk5int_encode_krb5_td_trusted_certifiersBN_num_bitsX509_get_subject_namei2d_PKCS7_ISSUER_AND_SERIALclosedird2i_PKCS12_fpcreate_krb5_supportedCMSTypesk5int_encode_krb5_pa_pk_as_repX509_cmpk5int_encode_krb5_pa_pk_as_reqX509_get_serialNumbersnprintfASN1_INTEGER_freeEVP_DigestFinal_exPKCS7_ISSUER_AND_SERIAL_newfree_krb5_reply_key_packpkinit_fini_req_optsASN1_OCTET_STRING_seti2d_X509_ALGORkrb5_c_random_to_keyASN1_STRING_dupDH_sizeOBJ_nid2objASN1_STRING_freeinit_krb5_reply_key_packkrb5int_buf_lenEVP_MD_CTX_cleanupk5int_encode_krb5_reply_key_packX509_CRL_cmp_lib_versionBIO_free_allEVP_sha1asn1_GetSequencei2d_X509_NAME_etextasn1_const_FinishPKCS7_encryptX509_NAME_setOBJ_nid2snpkinit_libdefault_stringkrb5int_tracek5int_encode_krb5_pa_pk_as_rep_draft9init_krb5_reply_key_pack_draft9SHA1_InitBIO_new_filecrypto_retrieve_cert_sansX509_freePKCS7_add_signed_attributeserver_check_dhERR_error_stringSHA1_Updatekrb5_c_valid_enctypeX509_STORE_CTX_get1_chainfree_krb5_auth_packkrb5_encrypt_helperdh_oid_DYNAMICdlsymkrb5_pkinit_sha512_oidkrb5_pkinit_sha256_oidi2d_PKCS7init_krb5_auth_packcrypto_cert_iteration_beginkrb5_principal_comparesk_pop_freepkinit_process_td_trusted_certifiersDH_freei2d_ASN1_OBJECTASN1_STRING_lengthEVP_des_ede3_cbccrypto_cert_releasek5int_encode_krb5_auth_packEVP_DigestFinalpkinit_init_plg_optsBIO_freestrcasecmpinit_krb5_pa_pk_as_req_draft9krb5_pkinit_sha512_oid_lenk5int_encode_krb5_td_dh_parametersPKCS12_freeX509_NAME_print_exSHA1_Finalsk_freeDH_check_pub_keyX509_check_private_keycrypto_load_cas_and_crlsASN1_object_sizecms_signeddata_verifyprint_buffer_binkrb5_c_fx_cf2_simpleX509_STORE_CTX_cleanuppkinit_create_td_trusted_certifiersX509_ALGOR_freekrb5_free_keyblock_contentsEVP_get_cipherbynamepkinit_fini_identity_optsPKCS7_newPKCS7_freeBIO_s_filepkinit_alg_agility_kdfBN_rshift1PKCS7_SIGNED_new_lxstatX509_STORE_newstrchrprint_bufferreaddirfree_krb5_pa_pk_as_req_draft9krb5_pkinit_sha1_oidASN1_INTEGER_getkrb5_parse_nameOPENSSL_add_all_algorithms_noconfASN1_get_objectASN1_item_i2dASN1_STRING_cmpX509_ALGOR_newcrypto_check_cert_ekukrb5_copy_keyblock_contentsGENERAL_NAME_freeOBJ_cleanuppkinit_fini_req_cryptomemchrkrb5int_buf_add_fmtOBJ_txt2nidkrb5_free_unparsed_namepkinit_libdefault_integerlibsocket.so.1SUNW_0.7libkrb5.so.3libcom_err.so.3libk5crypto.so.3libcrypto.so.0.9.8libkrb5support.so.0libresolv.so.2libnsl.so.1libintl.so.8pkinit.so.0/usr/local/lib(= .PThltx|ĢȢ̢Ԣآܢ $(,0DHx|ģУܣ  (,048<DHPTX`dhptx|Ĥ̤ФԤؤܤ8@DLPT`h|ȥ̥Хԥإ  $(048<@DHLPTX\dhlptxĦȦ̦ЦԦئܦ $(,048<@DHLPTX\dhlpt|ħȧ̧Чԧاܧ (,048<@DHLPT`dhlptx|ȨШԨبܨ  $(,48<LPT\`dhlx|ĩȩ̩Щԩةܩ  (,048<@DHLTX\`dhlptx|ĪȪ̪ЪԪتܪ(`xīܫH`dhpĬ̬جܬ $(,048<@DHX\`dptx| $,48DHLPT\|ĮȮ  (,8<@DHLPX\`dhlptx|į̯Яԯدܯ  $048<@LTX\dhlptx|İȰ̰аذܰ  $(04<@DLwY5 - $;(,`048@<@D;HL#tId_حԭM L_@*D7X4HLP@\ܭ1@C2X̲ز,<L\l$,4<DLT\dlt|ķ̷Էܷ $,4<DLT\dlt|ĸ̸Ըܸ $,4<DLT\dlt|Ĺ lptx|@LMXL`\gd8~ġȡz̡С ԡءwܡOX\n`rdp?QТiXB G4N8<G@LkPTHX(\{`dhplpE4>ȣ)̣ԣ0أ<vL [$e@LP\]l.[^Rr/Ȥ f $(,04<IHTX:\lpbtOxSh6,^ĥܥA,`|<c 9`kxSV !y $X\|1Į̃guK0HpQt*X=Pa$P'T@' uWY \$,08<E@DxTRX|dshllBp"t-|CtpN y9  {ȫ̫JЫԫث!Fl m7( %$m(1,0&48<ADLP#ToXh\3ldtx,|o%DVZ Ȭ)ЬԬ}dW 6LPT}hlz=ĭDȭc̭Э$?FnZ (0<@jXe`d hl&ptx25wi̮ЮvԮخܮU$0K4+Tfȯ:a(,~DH P`+ ]tb԰>.H3,08MHPTx\8`qdhl"ptx|`s hhhh h $h((h0,h8p0h@`4hHP8hP@<hX0@h` hhhphxhhhhh(hHhThpXh``hPlh@xh0h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhp hx h$h,h0h@hHhPhThpXh`\hPph@|h0h hhhhhhhh h(h0h8p h@`hHPhP@ hX08h` `hhdhphhxxh|hhhhhhhph`hPh@h0h hhhhh hhh h(4h0ph8ph@`hHPhP@hX0h` DhhThpdhxthhhhhhhphpxh`|hPh@h0h hh$h8h<hDhHhPh h(h0h8ph@`hHPhP@hX0<h` HhhPhp`hxhhth|hhhhhhph`d hPh h@l h0p h x h| h h h h h h h  h( h0 h8p h@` hHP hP@ hX0 h` hh hp hx h h h h h h h hp h` hP h@$ h0( h , h0 h8 hH hP hT h\ h` h d h(h h0l h8pp h@`t hHPx hP@| hX0 h` hh hp hx h h h h h h h hp h` hP h@ h0 h h h h h h h h h  h( h0( h8p, h@`< hHP@ hP@D hX0P h` X hh\ hpd hx h h h h h h h hp h` hP h@ h0$ h ( hT hX h\ h` hl hx h h  h( h0 h8p h@` hHP hP@ hX0 h` hh hp hx h h h h h h h hp h` hP h@$ h0( h , h0 h4 hp h t h | h h h h( h0 h8 ph@ ` hH P<hP @DhX 0Th` `hh hp hx h h h h h h h h ph `h Ph @h 0,h 8h @h Dh Hh lh ph th h h( h0 h8 ph@ `hH PhP @hX 0h` hh hp hx h h h h U]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU ]ZU#jEPEE]ÐU ]ZU#jEPtEE]ÐU ]ZUo#jEP\EE]ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZU"ڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZU ڋEEjEPxEjPY u}EU]u}ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZUڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZUڋEEEjPujEPY u}EU]u}ÐU ]ZUoڋEfEjEPE Pa ]ÐU ]ZU/ڋEEjEPE P" ]ÐU]ZUڋEU EUjEPEP ]ÐU ]ZUjEPEP EfEE]ÐU]ZUOjEPEPH EEE]ÐU]ZUjEPEP EUEUEU]ÐU]ZUjEPEUEU]U]ZUoڋUE PREUEU]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU ]ZUڋE PEPj EE]ÐU ]ZU?ڋE PEPjX EE]ÐU ]ZUڋE PEPj( EE]ÐU ]ZUjjEPE PEPjEE]ÐU]ZUoڋEtE PEPjEP]ÐU]ZUڋEt)jEPPEPWjEPY]ÐU]ZUڋE ;Eu#E PEPEP. u EEEEE]ÐU]ZUOjEPU ;u"E PEPEP u EEEEE]ÐU]EE EEEEEMUBABABA]U]uZU츌jjuVuMUBABABA]uU]uZU,jE PPE PuVuMUBABABA]uU]ZUڋE v E E EjEP2EEu E &E@EUPEU PEE]ÐU]ZU/ڋE ;Eu+E;E u#EPE$PEP u EEEEE]ÐU]ZU츿ڋEv EE EjEP2EEu E EE UPEEE]ÐUpZt9hxPEEt EE3DUPHUPLUPPUĉPTUPXUԉP\UP`UЉPdUPhUȉPlUPpỦPtUPxU܉P|UPUPUPUPUPUPU؉PUPUPUPUPEEpU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU ]ZUjEPEE]ÐU ]ZUjEPtEE]ÐU ]ZU_jEPLEE]ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZUڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZUڋEEjEPxEjPY u}EU]u}ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZUڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZU ڋEEEjPujEPY u}EU]u}ÐU ]ZU_ ڋEfEjEPE PQ ]ÐU ]ZU ڋEEjEPE P ]ÐU]ZU ڋEU EUjEPEP ]ÐU ]ZU jEPEP EfEE]ÐU]ZU? jEPEP8 EEE]ÐU]ZU jEPEP EUEUEU]ÐU]ZU jEPEUEU]U]ZU_ ڋUE PREUEU]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU]EEE]ÐU ]ZUo ڋE PEPjx EE]ÐU ]ZU/ ڋE PEPjH EE]ÐU ]ZUڋE PEPj EE]ÐU ]ZUjjEPE PEPjEE]ÐU]ZU_ڋEtE PEPjEP]ÐU]ZUڋEt)jEPtPEPGjEPI]ÐU]ZUڋE ;Eu#E PEPEP u EEEEE]ÐU]ZU?jEPU ;u"E PEPEP u EEEEE]ÐU]EE EEEEEMUBABABA]U]uZU|jjuVuMUBABABA]uU]uZUjE PPE PuVuMUBABABA]uU]ZUڋE v E E EjEP"EEu E &E@EUPEU PEE]ÐU]ZUڋE ;Eu+E;E u#EPE$PEP u EEEEE]ÐU]ZU츯ڋEv EE EjEP"EEu E EE UPEEE]ÐU]]ÐU]uZUE<:ǖjEPPEPV jE PEPEPE PEPEE PEPEPEPE PEPEjE PEPEPE PEPiEdjEPPEPV E8E=F:ǖ}=A:ǖs뽐8iw<UDUEEE]uHU]ZUEEjPcE @PEPEP# EEuEjEPE$PE Ѓ ]U$]uZULEEE @@tEEEu MU jEPEPB PAPFPEPEEt#PREK:ǖPReEEtxUEtjMUEPPEP t.PRE@E)E@EEtUEuPREu%PREK:ǖPREUEt^MUEPPEP t*PR;E@ETE@EUEuPREuEtE@EK:ǖEEtNEUEt+UEPEP E@EUEujEP6EtNEUEt+UEPEPE@EUEujEPEjj@PEPRQEEE]uÐU]u}ZU ڋE@E @@u)PRE@Ei} uM E PEPBPjA PFPGPEPEEt-jEP-jjPEPVW Ejj@PEPRQEEE]u}ÐU|xtZUEBEBEBEBEBEBEEEEEEEBEBEBEċB EEEEEEEjPEtE@v E@ ujjjjjE,PE(ЃE$ujjjjjE,PE(ЃE@PE$PEP EЋEЃujjjjjE,PE(ЃOEPEP#EEtEŰ@BE@EE@ E} jPhEPEPBЃEEt$jPEЉEẺE}ЋEЋpMUjEPEPEPEPEPBPAPFPjG PE@PE@PEP8E,jPBpEPEPBЃEEt0jPEЉEẺE}ЋEЋpM܋UjjEPEPEPEPBPAPFPjG PE@PE@PEP88EF4E@PRE_E@HwθUDUEt8jPLEUjEPBPEPEPEPEEtEu$<@PREK:ǖjjEPEPEPEPEEtEu$D@PREM:ǖ[Vu PFPEP u6E:ǖLPPRPEPEP EEEEHEPEPBЃEEt\jPE؋@t]}ЋűMЋE؋PEЋ@@PB PA PFPGPEPgEEtdjPT>Eu4E:ǖLhPRPEPEP UE PEPBЃEEPEPjjj EPEEtpjPE؋U;PuU؋EPBPEP蝾 ttjPEO:ǖyE@tjEEЉE}̋uЋMUEPBPAPF PGPE@PEP@EEtEu|jP.E̋U؉PEPEPEPBЃEEtjPEԋ@tU}ЋűMЋEԋPEЋ@@PB PA PFPGPEPgEEtdjPWE̋UԉP E$E@HwUDUEP EPẺEEEtbE@uWjP}ЋűMЋUЍEPEPBPA PFPGPEPtjP3jEP襽jEPW4jEP蕽"E@HwUDUjEPjEPẼtEPEPjEP?EPEP?jjEPEPEPE,PE(Ѓ|xteeU<]ȉuZU̸EE@@ @EEEEE@Eu PFPEP袻 uEEPREPQEPEPIEEtGEPEP7EEt%jEPEPj,EPEPEEtUЋEЋ@PjBP EPEPEEPEPEEtjjEEu E E@EЋU@BEЋU@B EUPE@UE@PjB PZ EPEP芻UMBABABAB A E@ EPEPbEPEPbEPEPEEE]ȋuÐU$]ZUฟEEEEEE@EU苃E;E#EUE E;EEU@;BMUE@PBPAP艸 EPj EEtUEPBPЋEPEtEU@BMUE@PBPAP获 EUPEFE@EUE E;E"E@EU苃E;EEtEPEP>EEE]ÐU\XTZxEBEBEBEEEEEEEEEEEEEEEEEEDž|E @E @=u'jE PEPEPEPEPE` E @v E @ uE= E0u jPbE E@PE,PEP| EEujP E jPE0EE@ t%Ej@ P蘵E@E@ EEU;P(}QEU@,EjEPuuEPRE@EEU;P(|EU;P(uE:ǖ njEP%EuE E@djEPEuE E@4E:ǖj E@Hw{ xDxE@t9E@@t+E@@@ E܋E@@@EЋE@BE@ t6E@ @t(E@ @@ E܋E@ @@EЋE@EE@t E@umjPuMUEPEPEPEPEPEPB PAPFPEPε(EEtjP0Et E@tEE@EȉEE؉EE@$EETEPEPBЃEEtjP'EhEp}uMUEPB PAPFPjjG Pp@Ph@PEPִ(EEtjP(EhEp}uMUEPB PAPFPjjG Pp@Ph@PEPR(EEtjP*E @Hw xDxjPEPEPEP EEtjP(EEU@t^EU@@PQV] EU@@=u Dž|E@EEU@u|PRQ E @t|jEPEu E WEPEPjEPjEP脱EEtpjPEPEPEP迲 tEPEPBЃEEt(jPEE@EhEpE`} uMUEPB PAPFPjGP`@ Pp@Ph@PEP(E4|jEPEuE E@ U@ BEPEPEP謱 |EPEPBЃEEt(jP2E@EhEpE`} uMUEPB PAPFPjGP`@ Pp@Ph@PEP(E+E @Hw xDxEt$4jEPsPVaEE@u}E@trE@@0tdE@tYE@@0tKEPEPB0PEP EEt#8jEPޭPVR:\EPEPBЃEEEPEPBЃE)E @Hw xDxEt<jPJEt E@tEE@EE@twEԉEẺEuMUjEPEPEPEPBPAPFPEPEP3(EEt%DjEP褬PVNjEPEPEPEPEPEEt#LjEPRPV@jjǭЋE PE @u1E Ej@P輫jEP讫ExE @@!E @@9E @@)E @Hw xDxUE @RPUE @RP EPEP jEPjEPEtEPEP詬EtEPEP葬jEPêjEP赪tjEPjEPwjEPypjEPɫjEPk|ujEPbjEP1(E @Hw xDxEt`jPFEEE\XT}}Ma U]E =u EE0E]ÐU]]ÐU]ZUEdhE @PRQN M lE jj@PRAPEPEEuE @;PuCELtPR虩ЋE jj@PREPEP苩M xE @jjPRAPEP苫EEuE @;PuAELPRЋE jj@PREPEPeM E @jj PRAPEPM E @jjPRAPEPߪM E @jjPRAPEP觪M E @jjPRAPEPM E @jPhRAPEPtE @@=}6hE @jjh@PRQCE @@M E @jPjRAPEPM E @jPjRAPEPM jjEPRAPEP蜩EPEP轩u!E @@E @@PEP脩uE @@E @@NPEPPuE @@E @@hEPRQ jEP觥EE PEP3EEE]ÐU]uZUڋE EE uEEUEUEEEU@;BuQMUE@PB PAP[ u/Ejj@PEPRQ EEFE@EUEuUEjj@ PBPQVEE]uÐU]ZUE EE@jjFEEujjE PEPRQ)jjEP聥 E@UjE P9ЋEPE@u8Ej@P螣ЋEPEjPEEtEjPEEtEj PަEEtEjPʦEEtEPEPEEtqMUEjjjjj@ PBPjAPEPz(EEt4jjE PEPRQEUPEEtEPEPEEE]ÐU(]܉uZUฬE EEEtEEcEUEtE@EUEuEEEj@PܡEEuE EEE;EsoUEPQV MUEPPEP EEuEtUEM E@EE@EE;ErEu3ELPR١PEPEPء -E UPEEPRQ EtEPEPEEE]܋uÐU]ZUڋE utE PEPE j@PE j@ PE j@PE j@PE j@PjE Pܟ]ÐU]ZU?ڋE EEukEUEt+UEPEPE@EUEuՋEPRQ jEP/]ÐU]ZUE EjjEEuEEjjEPg E@UEjP̢EEt>E@E@ $(EPRQ E UPEEtEPEPEEE]U ]ZUڋE EEt E@=Ut,EPR$v04EPRQ Ej@PE@tEjPE@ tE PEPjEPd]ÐU]ZUڋE t EoEE<EP@EPDEPHEP LEPPEPTEPXEPEE]U]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU ]ZU_jEP<EE]ÐU ]ZUjEPtEE]ÐU ]ZUjEP̚EE]ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZUڋEEUE и\#Q#A‹UBUE и\#Q#A‹UBUE и\#Q#A‹UBUE и\#Q#A‹UBEU \#A#QЋEPEU \#A#QЋEPEU \#A#QЋEP\MU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZU9ڋEEjEPxEjPY u}EU]u}ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZUڋEEUE и\#Q#A‹UBUE и\#Q#A‹UBUE и\#Q#A‹UBUE и\#Q#A‹UBEU \#A#QЋEPEU \#A#QЋEPEU \#A#QЋEP\MU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZUYڋEEEjPujEPY u}EU]u}ÐU ]ZUڋEfEjEPE Pє ]ÐU ]ZUڋEEjEPE P蒔 ]ÐU]ZU_ڋEU EUjEPEPL ]ÐU ]ZUjEPEP EfEE]ÐU]ZUjEPEP踓 EEE]ÐU]ZUojEPEPh EUEUEU]ÐU]ZUjEPEUEU]U]ZUڋUE PREUEU]ÐU]]ÐU]ZUE EE@j$jEEuEE`E@E@E@E@ E@E@E@E@ EUPEE]U]ZUjEP]ÐU]ZUE EE@jjEEuEELE@E@E@ E@E@E@EUPEE]ÐU]ZUjEP,]ÐU]ZUڋE@u]E@j@PאE@@ tE@j PE@j@P衐Ej@P萐]U]ZUڋE@u;E@j@PGE@j@P3Ej@P"]ÐU]ZUڋE@u;E@j@ P׏E@j@PÏEj@P貏]ÐU]ZUڋE@u'E@j@ PgEj@PV]ÐU]ZUڋE@uE@@tYE@@j@PE@@j@PێE@@j@ PĎE@j@P谎E@j@P蜎E@@ tE@j PڒE@@0tXE@@0EEUEt)UEPjE@EUEujEPEj@P]ÐU]ZUoڋE @u)E @@PEPeE j@P褍]ÐU]ZUڋE@uwJE@@PjE@j@ P?6E@j@ P'E@@tt琐Ej@P]ÐU]ZU_ڋE@u'E@j@ P觌Ej@P薌]ÐU ]ZUEE@uEU@t}EU@j@P(EU@j@PEU@j@ PEU@jP݋E@EEU@uEj@P贋]ÐU]ZUڋEu1Ej@PnEj@P]jEPO]ÐU ]ZUڋEt E@uZEEU@t/EU@jPDE@EEU@uыEj@P諊]ÐU]ZUڋE@u;E@j@PWE@j@ PCEj@P2]ÐU]ZUڋE@u'E@j@PEj@P։]ÐU]ZU?jj~ЋEPE@uCE@@E@@E@@ E@@E@@]ÐU]ZUjjЋEPE@u6E@@E@@E@@E@@]ÐU]ZU/jj nЋEPE@u6E@@ E@@E@@E@@]ÐU]ZUjjЋEPE@uE@@ E@@]ÐU]ZU?jj4~ЋEPE@uPE@@E@@ E@@(E@@,E@@E@@0]ÐU]ZUjjވЋEPE@uE@@]ÐU]ZU?jj ~ЋEPE@u]E@@E@@E@@E@@ E@@E@@ E@@]ÐU]ZUjj·ЋEPE@u6E@@E@@ E@@E@@ ]ÐU]ZUjj$NЋEPE@u6E@@E@@E@@ E@@]ÐU ]ZUڋEtE uEE @uE@E@E`E j@P肆ЋEPE@u E 3MU E @PBPAP E U@BEE]U ]ZUEE wKEE;E s)lEE@PRE@EE;E r׋pjP]ÐU]ZU/EEE vEutPEPEEuzjEPهjjP܇ t߇@E EEE;E s&EEPEPR躇E@EE;E rjEP譇]U ]ZU?ڋE PEPjH EE]ÐU ]ZUڋE PEPj EE]ÐU ]ZUڋE PEPj EE]ÐU ]ZUjjEPE PEPj谁EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU]EE]ÐU ]ZUojEPLEE]ÐU ]ZU/jEPtEE]ÐU ]ZUjEPEE]ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZUڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZUIڋEEjEPxEjPY u}EU]u}ÐU]E EE%UBE%UB]ÐU]E EE%UBE%UBE%UBE%UB]ÐU ]ZU/ڋEEUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBUE и#Q#A‹UBEU #A#QЋEPEU #A#QЋEPEU #A#QЋEPMU #H#PыEP]ÐU ]EEEPE@ fUE]ÐU ]EEEPE@ ЋE@ ЋE@ ЉUE]ÐU]u}ZUiڋEEEjPujEPY u}EU]u}ÐU ]ZUڋEfEjEPE Py ]ÐU ]ZUڋEEjEPE Py ]ÐU]ZUoڋEU EUjEPEP\y ]ÐU ]ZUjEPEPy EfEE]ÐU]ZUϲjEPEPx EEE]ÐU]ZUjEPEPxx EUEUEU]ÐU]ZU/jEPEUEU]U]ZUڋUE PREUEU]ÐU]]ÐU ]ZUڋE @t E.xPEPEP| t EEE]ÐU<]ȉuZU̸E:ǖEEEEEEEEUPUE@PB PQ E@ujPE:ǖHu MUEj@PB PAPFPEP{EEtEPRfEPEPBЃEEtEPRS*EPEPjjj EPywEEtEPREP0{ EPEPEP,{ EEtE@$EMUEPBPAPEPEPEPEPEPE PEP$(EEu E@uEPR{RE jj hwEЋEЃu,E@E@jj7wЋEЉPEЋ@ujjwЋEЉPEЋ@uEЋ@@EuEЋ@@ EЋ@UPUEЋ@RPUEЋ@RP EЋ@@uE@@ u@u,EЋ@@EЋ@@EЋ@@ Ej@PftE@EUЉPEEԃtEPEPujEP&tEt_EЃt0Ej@PtEj@PsjEPsEtEj@PsjEPsEEE]ȋuÐUL]u}ZUظE EEEEEEE@@ E܋E@PR UEjEP6xEuEUPEUPEUP EU(PE j@ PrjEPwEujEPwEuEUPEUPEUPMU BA BABAB AE@(EUPEP0u MUEj PB PAPFPEPawEEtBE@PREE@cPEPvjPgPEPvEEtjP8HE EEEȋEEЋExuMUEjPB PAPFPGPEЋ@ PEȋ@PE@PEPpv(EEtjPPEPujP*E@,jEPvE@E@t̓t:EPR8EAE܃gɐ:DEPEPBЃE-LEPEPBЃEE@tكtEtEPRcjEPIuEuE E$PEPEPw tSE EEEȋ}uMUEjPBPAPFPjG PEȋ@PE@PEPt(EQE EEEȋ}uMUEPBPAPFPjjG PEȋ@PE@PEPJq(EjEPtEuE E EEEȋ}uMUEPBPAPFPjjG PEȋ@PE@PEPp(EE@yEPEPoEtjPu MUEj PB PAPFPEPsEEt} uMUEPBPA PFPGPEP|sEEtdE,PEPBЃEm} uMUEPBPA PFPGPEP sEEt0lE,PEPBЃEE@tEt E@0jEPSnjEP%njEP'njEPl EPREEE]u}ÐU ]uZU E:ǖ$BEBEBEEt E@u(jP E:ǖE@ EE@EUjE$PEPE PEPEPBPEPE PEP(EEt&,jEPlPEPV EEEE]uUD]ĉu}ZUԸ EEEE@E@M0jjEPRAPEP qEEuEu8<PRE[@<PREEE@t.DE@PREPo EEE@uҍEEu MUEPjEPB PAPFPEPkEEt7H<PR(LPEP=oEL:ǖEEE@t.PE@PREPo EEE@uҋEt?EEE@t.TE@PREPn EEE@uҋX<PRkEEU܋EM܋UEPPEPi tP\EPREP8n `<PRE@E@EE@E܋EtU܋Epd<PREu%h<PREL:ǖIEU܋EEEU؋ElEȋ<u܋MU؋EjjPPWEPu܋MU؋EPPmuItU܋EPQEPl x<PRE@EmE@E؋EtU؋EAE@E܋U܋E|PEPrl<PR4EEtNEU܋Et+U܋EPEPgE@E܋U܋EujEPfEtLEU܋Et)U܋EjPfE@E܋U܋EujEPfEtjEPl<UEj@PBPEPQVCEEE]ċu}ÐU]u}ZUڋE@E@@u=PEPjPRE@Ej} uMEPEPBPjA PFPGPEP^fEEt-jEPejjPEPVW>E@tPEPHjPEP0jEjj@PEPRQEEE]u}ÐU|xtZUME:ǖEEEEEBE؋BE܋BEEEEBEBEBEċB EEEEEtE uhPRj E E`EPEPBЃEEt EPREEjPjE EEE}EpMUjjjjEPEPBPA PFPjG PE@PE@PEP d8EEt)jPPEP h3PEPgjPE EEE}EpMUEPEPBPA PFPEPG PE@PE@PEPh(EEt+jPIPEP^gPEPDgCE@PREIE@iE@EExjPaEPE@jj@ PBPQVG PE@PEPEPg(EEtEPEPEPEPE PEPEEtEu$PREL:ǖaEt\jjEPEPE PEPEEt+Eu$PREM:ǖPRE܉EEEXEPEPBЃEEtjPME E}uMUjjEPEPBPAPF PGPE@PEPnf(EEtjP9E@ẺEEԉEuMUjE PEPE(PE$PBPAPFPEPEPyb(EEt# jEP_PVhUjjE PBPQEPidcjE PEPEPE$PEPbEEt#jEPz_PVGE PREPd $xEPEPBЃEEjPEu@uEPEPBЃEEt jPQ$jP:EU@;B$t)(UE@$PBPQ EWE PEPEP` 7E@u E@ UEPE(PjEPBPEP^EEt,jPEU;PuUEPBPEP] t90EjjPEPREPnb4jP58jPE PEPEP_ <jjEPE PREPb6@E@PR#E@AΐEjEP\EPEPf]jEP\jEPbjEPl_EtjEPf_jEPh\EtjEPb_jEPD\HjEP\PEPV EEE|xtÐU]ZUoELjEPEPE PEPRPEPE@jPBPQEPEPaXEPE@j PB PQEPEPa\EPE@jPBPQEPEPa`EPE@jPBPQEPEPnaE@@=tVE@@=tFE@@=t6hlE@jjh@PRQ}E@@pjjEPREPEP`ExPEP]u"E@@E@@|PEP]uE@@E@@NPEPL]uE@@E@@lEPRQ jEPYjPjREPEP_E@@u%E@jjPREPEP._E@jj PREPEP _E@jjPREPEP^E@jjPREPEP^E@UPEPEPB$Ѓ EEt7E@j@PXjEP\ЋE@PE@]ÐUD]ĉu}ZUԸّE:ǖEEE EEE苓jE PEPEPEPREtEuEE@EjPEjPjE,@u%jPGE,@EjP"E,@_E,@PREE,p}NwƸ>UԍDU뤋EE @PEPEPEPEPEPUE4PE0PB P&] EEȋ}uMUE j@PBPEPEPA PFPGPEȋ@PEP Z(EEtBPEP2[jEPnVPEPV EEU,jEPE4PE0PE8PBPE PEPEPEP*(EiUEPEPBЃEjjE(PEPEPE,PE PEPEPEP(EEuUEPEPEPBЃ EjEPUPEPV EEE]ċu}U8]̉uZUиE:ǖE EEEEEEjE PEPEPEPRE@;E,uE4u EE8E4@uEԃiE4@EE@EE@ EEPEPBЃEEtjPpuMUE@PEPB PAPFPEPZEEuEEPEPBЃEEtjP}uMUE@PEPB PAPFPEP ZEEuE1.E@m}hiݐmWѐE4E4E4@t EԃEԃtPPEPWjEPEE @PRQ E @iƐEPRQ EEE]܋u؋}-MmU4]ԉuЉ}ZUظ&EEEEE$tE(u E#E(@E$@Ej@PЋEjj@PRVWEUE EEK E@PRQn E@EE@EEEPEPEP EEt($Ej@P&PVW Et0E@u%(PRE@EEEtEu$E@u,PRIE@EE@Eu+Et#0PRlE@EEE܋E@EUE EE4jjEPEPRQEuE$@E(U܉PE8E$jj@PEPRQEEE]ԋuЋ}U$]u}ZUi$ڋE u EEUE EEE@EEPEPEEt5@DjEPjjPEPVWEPEPEEt1LDjEPbjjPEPVW6E@EUE EEE@dtU PBdP E@htU PBhPE@ltU PBlP]ÐU]ZU_E jP2ЋEP|E@|uEEeEǀEǀ?BEǀEǀEǀEǀE@pEEEE]ÐU]ZUڋEuEtZEt*EEjPB8ЃEǀEjj@ЃEǀEt!EjP`EǀEj@|PCEjP/EjPEjP]ÐU]EU PtEUPxEE]ÐU ]uZU<EEE@wEEuoEEuE@]EEUPEuUEPEPBP@ uLCEE:ǖ jEP8jjPVEPEP jPFjEPЋEPREP uEEUPEEEtjEPEtjEPEEE]uÐU$]uZU丼E EEEPE PYEEuFEPE PEPEPE PEPEEtjEPAЋE(PE(@uOEE:ǖ jEPjjPVEPEPe jPLE E(j@PEE$UPEEEuoEPEPEEuM(EE:ǖ jEPjjPVEPEP jPEEtjEPEtjEP EEE]uÐU\XZ`E EEEEEEEDž4Dž0DžDžDžDž DžDžDžDžDžDžDžiEEu$ jj_ЋEPEEu EUPEj@Pu EPE PVu E@Tm EEu UE@\PBTPEu4 jPjPyPEP|DžDžtDžpDžlWu  jP PEjj@hPPPxP E@dPxPjxPjxPhjhPd4 dPRoEj@dPu< jPHE:ǖ@ D PR#jjdPREPEP jxP~tjtPWlL lPRDžplpH;pPtPvhjhPhtPR X tPpPRC jhP*PEP-p@plpH;_jxPjP PtPEUPEEumEj@PbuPujPcPFPfu$E@j@PWjPVjP[E@Pujj@ЋE@PE@@tE@j@PZE@PuhE@@@E@@tE@j@PjjAqЋE@P^E@PuE@@@EuE 0E$$jEP-5jPEP9 E$PE PEP5 jEP7E,PxPEP* E܋,PxPEP jjEPjj3EPjjPjj2EPE@  P0PP $0uE@peES jPjEPEtjEPEP jPEP $P0PEP (P8PEP uXjj@GЋP@jPjPu u(P8P P j PujPnu|jPj> j P'444u)jjjPjPPPP PPP P4PEPEPaEpE@pu  PRYPP$P0PEPEPmaEEtj0PEtU苅PPBP uVE:ǖ jPjjPVEPEP誺 jPEPEPu}EPE$PE PPE PEPEE@tEj@PEUPjEPЋE,PE,@uX3E:ǖ jP"jjPVEPEP̹ jPE E,j@P{E(PEEuzEPEPEEuUE:ǖ jPojjPVEPEP jP EEEtjEPE@pukEu]jEPjP袷j4P葷jP耷 tj PtjPEtjEPjP!EEE\XÐU Z]E:ǖEEE EEEEE EEEEEDžPDžLDžHDžDDž@Dž<Dž8Dž4Dž,Dž(E8t E8@EPE PI<<uA E$PEPj EEugڿ$ j$PпjjPVEPEPz j$P蝿PVWJ E@@@4E@8E8EPEPEPG EE;Et` EPRiEPEPEP EE;Et` EPR\-EKEHw鸺UčDUjjEPEPEPEP謵EEuh jPE:jjЋE@@P;jjЋE@@PEHwUčDUjEP:ЋE,PE,@t+E,j@PfEȋE(UȉPEȉEEu E 7EPEPEEul jP/ EEtjEP膰EtjEPPjEPjEPEԃtjEPEEE]ggsKooSUH]uZU E:ǖEEEEE EEEEEEEEE$PEPj[ EEuI(Eċp jP jEPjjPVEPEP轥Ej@Pt>t Ej@PڮPVx PEPEPi 8KjPsEjjEPEPEPEP謄tx jPQCEċEăt* jEP7jjPVEPEP| jPE(PEPֱEԋEԃuzEEh(PEP軱 EEEEE륐EE@EGE; EPRQ- E:ǖEtătɐEȃt@uVj@PEPEPEPEP7EEt jPEЉE̋E܉EEԉE̋EEjjjjE,PE(PEPEPEPEPEPEPE PEP78EEu jPC jP.EEtjEP膬EtjEPPjEPjEPEEE]uÐUTZ9EDžDžDžDžDžDžDžEu1Eu)E u! PREE*Eu$ PREEjEPqhPRj PRQ jjUEP DžDžDžDžDžPEPӮt"jPu PRjPR PRQ Et0j@P՟u E "Et0j@P蝟u E E t0j@Peu E Dž;3 BBBPP褩@@@@@@@@U @@PBP輫upPPAЃt PR@@U @@PB PPjPK tPPEP, t PR=@@ PR %P@@PjBP耫 t @@PRQ @j@P ȋ u PRF@@H jjj@PRQ @>뻐@; PP肥Et EPt EPt E PEctlDžt=PEPś@ujPtlDžt=PEPN@ujPltjDžt;jP)@ujPEEEÐU]E U@XBE@u E EE]ÐU]ZUEE@u! PRJEE-UE PEPEPBPEPE PEPXEE]ÐU4ZmDžDžE @E@uEj@P&hPR PRQZ Ejj~@PϦ Ejjjjj~@P PRDžUjP<;6PP舢 jPjEPRFPWPTEtME @(PP螤t#Et%E @0PP{u DžKE @$PPQt#Et%E @,PP.u Dž@ujP;jPWDž PR@Ej@P'EjjjjjS@Pt\E@@(tE@@,%t" PR˻E @ PR詻jP蠤Dž E jj@PPRQfEEÐU\Z`EjEPEEuE iEPjEP葖 EEjdPѣjEPdP̣ EPEPdP赣 dPEP貣E+EЃsUUЋE+EPEPR UUjEPR EЃEE@EߋE;EWE@EU PjjEPEPE PEP:EEtaEUԉPjEP贕ЋEP E@ u E ,E؉EȋEEjjEPEPE PEPߢEjEP~EtEPEPVEEE\ÐU ]ZUڋE@E@E , @;BuJM 0 , @PRAP u%E@4 EPEE 8 @;BuGM < 8 @PRAP誒 u"E@ @ EPEzE D @;BuGM H D @PRAPR u"E@@L EPE"P Ph:ǖEP E:ǖE]ÐUDZHIEEEEEEEEEEEE(@E(UPjjEPEPEPEPuEEtEE؋E(UPE(j@PdE(dP ;du E U(E(@PjB Po Et#菑PEPEP聕 ttEjjhPEPEPEP-EEt/E(@+uEE(UU@;vE@EEEjP Eܸ;EuE EEU BEBEBEU$BEBEBEEPEP/EEtjjlP\ UBlBpBtlEpEtExE|EEEEEEEċUBEȋBE̋BEЍEPEP蚞EEtEE;EDžTjEPlPjXPhPXPMu%d Ph:ǖEP蠏 E:ǖ^jPPXPۚ tDU E @PBPXP蹚 t"UE@PBPXP藚 u'h Ph:ǖEP E:ǖUU썅TPRXP莝 u&h Ph:ǖEPю E:ǖETE싅T;Etp t h PR術 DžL DžLjXP舚E@EE;EQjjE(PEPEPEP艜EEtE(PEPE܃tjEPEPEP踎EPEP討EEEDÐU]ZU?ڋEPEPEPF EE|E;E ~ | t h PRx E EE;E }2E +EEUUEPEPR EPjEPƍ ]ÐU(]܉uZU|E:ǖEEEE@e4EEUPEu3EE@UP EtEE@UP$Eu jP:jjЋE@P jP  jhP茔 ЋE@Ph jPְ jhPX ЋE@P47E=}=K=m=t̋E@j@ P#EPE@@PB$PEj@P&UEPBP#E EPR Et jPEt jPԯEt jP踯Et jP蜯MEPEPBPAP臙 Et EPRdEpEHEPjE PEPB$PA PFPEEtE@j@P#EEujEPЋE(PE(j@P輊EE$UPEEEu E :EPEPǘEtjEPEEE{E@tEj@P#E@Ej@PHE@E$j@P-E$@EtjEP=EEE]܋uÐU ]ZUoE:ǖEEEEj@PЋE$PE$j@PtEE UPEu E EEEPEPj諗 EEujEP蝗EEuaM U$Ejj@PEPBPAPBEEtjEP]EtjEPEE7E j@P辆E @EtjEPΖEEE]ÐU ]uZUEEEA:ǖE@EEE@PEPEPb EEu jPEj@PvEEt$E;E} EPEPRī E pMUEjj@$PB PAPFPu EvE pMUEjj@$PB PAPFPhu E:E pMUEjj@$PB PAPFP,uEEu EUPjEP赍EEE]uÐU,]؉uZUܸLE EEEEEE(UPE UPE,@E$@E@E֍EEuEj@PƔЋEPEj@ P譔ЋEP Ej@$P蔔ЋEP$EEEPEPj4 EEuijEP%ЋEPE@uBjEP͓jEPoujEP赓ЋE,PE,j@P<EE(UPEuu(M,UjjEPBPAPFPVEj@PEEujEP ЋE$PE$j@P贄EE UPEEEuMEPEPǒEtjEPEEtjEP4EE?EtjEPE j@PDE(j@P3EEE]؋uÐU]ZUڋ @u: PRQo w肒 @ @B]ÐU,]ZUظE EEEEEEjEP[EEujE P=EEujEPEEujEP EjEPU‰EjEPU‰EjEPj莍 EjEP}E܋EU܉PE܉EEuZjjjEPjEPWEPEPwEPEPgEPEPWEUPEEtjEPAEtjEP+EtjEPEEE]ÐU\]ZU?EEEEE E܋E @EE:Et E@u"EEuEl  E@EE @EEu E EEEEEԍEPEP؏u Eo EEEEEE؋EPEPEP u Es EE+E؋U+ЉUЋEuEjEPЋE@PE@@u ESEtjEP)EEEE؋EPEPEPq u E E+E؋U+ЉUЋEuEjEP=ЋE@P E@@ u EEtjEP聎EEEE؋EPEPEPɍ u E E+E؋U+ЉUЋEuE8jEP蕍ЋE@P$E@@$u EEtjEPٍEEEăuEЃEEPEP词EEEjEP訍u E 'E UPEt EUPEEht jEPREPjj fM E U+PRAP]Et!Et E@;EtjEPԄEE]ÐU]ZUoE<:ǖEEEjEPEPEPE PEPYEEt jPu;fjEPEPEPE PEPWEEt jP1"EEh`itᐋEPEPBЃEEtL jPՠjj|EEu E zE@jj|ЋEPE@ujEPzE :E@UPUE@RPUE@RP EUPEEtjEPw~jEPzEEE]U]ZUE<:ǖEPjhEPEPE PEPEEEE]ÐU]ZUE<:ǖEPjiEPEPE PEPmEEEE]ÐU<]ȉuZU̸E EEEEEEEEEEE@=~E@=CE pE HE PjEPEPB$PA PFPEEtE@=CE pE HE PjEPEPB$PA PFPEEtBE pE HE PjEPEPB$PA PFPOEEtE@=jjyEЋEЃuE@ jjyЋEЉPEЋ@ujEPYyЋEЋ@PEЋ@@usEЋPEPEPBPv EЋ@UPEЋHBABABAjjxЋEЉPEЋ@u jEPxЋEЋ@PEЋ@@uEЋPEPEPBPMv EЋ@UPEЋHBABABAjjWxЋEЉPEЋ@uwjEP1xЋEЋ@PEЋ@@uKEЋPEPEPBPu EЋ@UPEЋHBABABA?E@=[jj wEЋEЃuE@jjwЋEЉPEЋ@ujEPYwЋEЋ@PEЋ@@usEЋPEPEPBPt EЋ@UPEЋHBABABAjjvЋEЉPEЋ@u jEPvЋEЋ@PEЋ@@uEЋPEPEPBPMt EЋ@UPEЋHBABABAE@=jj>vEЋEЃufE@jjvЋEЉPEЋ@u5jEPuЋEЋ@PEЋ@@uEЋPEPEPBPus EЋ@UPEЋHBABABAEPEPBЃEEtjjWuE؋E؃u E {E@jj-uЋE؉PE؋@ujEP,sE ;E؋@@mUԋE؋@RPUԋE؋@RP EU؉PEjEPrjEPrjEPrjEPrEЃt\UEЋt@UEЋj@PrUEjPorE@EUEЋujEPLrEEE]ȋuU ]ZU丯E:ǖEEEEUE@\PBTP|EE @ jP×EPEPj EEuhjEP}}ЋE@PR˂EEu5jEP}ЋE@PR谂EEu E @EEj@P蓂Ej@PRjEPqEEE]ÐU]uZUlEEEE PEP"AzEjEPCzEPEPu{zEEPEP&zEPEPƁu*8 jEP轀PV+E< jPjEPx@ jPjEPTD jPƕEEE]uÐU,]؉uZUܸ,EA:ǖEEEH jPbUEEEEUE@;Bu.UE @PBPAP#o t:UE@E`xEUE@PEPEP EEj@P/EL UEPBPQ芔 E pMUEjj@$PB PAPFPhuE@EE pMUEjj@$PB PAPFP uE@EuE pMUEjj@$PB PAPFPuE@E1.E=}==Q=tЋEuBEPEPc}EtP jPREA:ǖEEEujEPuEtMPV贈E:ǖpgEE@t E@ u*UBEHEE@tE@ t֋ MU荅HPPV< E tU HPP hu3E E jPB8ЃE@EE;E{E;Er(jEPa jP贇E:ǖsUEM jEPa M UjjEPBPPVcEtHPE PEP! EEEE@<ÐUT]uZUEEUDUЍUT̋UDE@EEUDUЍUT̋UDE@EUDMUЋT̋MUЋTЋE@EEUEPEPPAlЃ EEt+ jEPNJPVąE:ǖEUjjEPjEPPApЃEEEjPBtЃ jEPIPEPVL EuEăs E:ǖEE]uÐU]uZUڋu U E @\PBTPiPF`PEPEPEPEP jP裄E:ǖ EE]uÐU]ZUEEUjEPEPEPE PPЃEEu E@PEPR EEE]ÐU,]؉uZUܸlڋE PEPt jP詃E:ǖEPhE Pf EEEE U EPEPPЃ EEt! EPR-E:ǖ EPR jEP^EEu E EE U EPEPEPEPEPPQ贂jEPEPEPEPE PEEtH jEPFPVmE=Pu EPEPRL E:ǖ0 EPEPR, EUPEUPEE]؋uÐU]ZUE:ǖE @pt%EPEPEPEPE PEPE#EPEPEPEPE PEPEEEE]ÐU ]ZUڋE j@`PEPEPEPEP!t jPE:ǖ EE]ÐU,]؉uZUܸlڋE PEPt jP詀E:ǖEPhE Pf E EEEE U EPEPPЃ EEt, jEPDPVE:ǖBEjEP[EEu E E U jEPEPEPEPPЃEE=PtEuoE=rejEPYEPRsjEPM[EE U jEPEPEPEPPЃEEt(jEPCPV E:ǖ1EPEPR~ EUPEUPEE]؋uÐU]ZU?E:ǖE t E @pt%EPEPEPEPE PEPE#EPEPEPEPE PEPSEEEE]ÐU]ZU츟E EEEt.EPEPiujP}jEPiEEj P}YEEuOjjEPEPEPEPsiEEEPRM}EUPE UPE ujEP+WEEE]ÐU$]ZUฏE Eu EEcPEP]fEPEPEPc jEPhЋE PE j@PrXEEUPEu'UjjEPE PBPEPlhEjEPgcEEE]ÐU ]E:ǖE@EEEE]ÐU]ZUoڋ$EPREPg } EEEE]ÐUTZE:ǖEEEE@ u(,PR {E@$u0,PRzU4PB PeYEEu'8uyY@PF PWz jEP5YjjP8Y t;Y@E EjEPfEjEP-YEu@E@ PR7zjjEPEPjEPMfEE_E@ HPRTLjPyhjPtU EE؀PEj@ PPRh@PeEE=|%XE@ PPRWy .@EEEԉEEEPEPBЃMUEPjjjBxPEPAtЃEjEPBЃjjEPEPEPEPeEEu\jPxjjTЋEPE@ubEj@ PЋE@PE@UPE@@ E@@E@UPE@EEtjEPfdEt,EtjEPZEtjEP[EEEÐU]ZU/ڋE t3djjE PEPREPCc} E4*hEPREPc } E EEE]ÐU]ZU츏EEEPEPEEuEulEPRvEPEPǀEEuEupEPRqvjjGRȋUE UE u E sEPEP{ȋUE HUE UPUE @ UE @UE UPUE DEEt,EtjEPXEtjEP~YEEE]ÐU]ZUE:ǖE@ u(tPR:uJE@$u0tPRu&UEjj@$PB PEPEPEEEE]ÐU,ZCE EEDžE@ u"x|PRctEE@ jP`EEuR@EjEPz`EEE@ .uEj PM}EDjPPQ tcjPMEj PsMD=v-|Ejj PPRQ(sEj PPRhP@_Ej PPRhP_jPLkeyjPPPEPEPIEEu/|E PRQ1r @}jEP~^EEu)|E@ PRQq E EEtjEP.^EEEÐU0]ZUԸEjEP]PEP]EE@(tTEEE@EEE܋E܃tE E؋Ejj@(PEPREP]E@0tQEEE@EEE܋E܃t E E؋Ejj@0PEPREP0]E@8tQEEE@EEE܋E܃t E E؋Ejj@8PEPREP\E@4tQEEE@EEE܋E܃t E E؋Ejj@4PEPREPx\E@,=?BtSEEE@EEE܋E܃t E E؋Ejj@,PEPREP\jEP\|jEP\jPLEEjEP\EEE]ÐUp]uZU|EEE@(t3Ej@(P=LЋEP|E@|uE E@0t9Ej@0PKЋEEuE E@8t9Ej@8PKЋEEuE vE@4EE@4PEPZEuE 6jEPEXЋEEjP{IЋEEujEPWE EPEPQZjEPWEU@,E@pEPEPt jPlE:ǖXEǀEEEEEEEЀEEEEE~PUDMUЋTȋMUЋT̋E@EEt]UDMUЋTȋEjPFȋUЉL̋E@EEUEPEPPAlЃ EEt+jEP0PVkE:ǖEE| E:ǖEUjjEPjEPPApЃEEuEwUEJEEEEEEEUjjjEPEPPAdЃEEt6E=Pt,jEP/PVjE:ǖEj@P\FEEj@PJFEEtEu E EEEEEEԋEUjjjEPEPPAdЃEEt*jEPa.PViE:ǖ3EPjEPREPEPQiEEEPEPjV EEu E:ǖjjSEȋUE UEuE:ǖjEPȋUEHUEUPUE@UEUP UEU؉PjEPBE@ETEEjPBtЃEu E:ǖ EE]uÐU]ZU{ڋEthE@tEj@PKE@tEj@P LEj@ PBEj@PBjEPA]ÐU]ZU_{ڋEu E\EE}DUEt'UEPEPEP UEE@EE|EE]ÐU]ZUzEPEPEPEPE PEP{EEPEPEPEPE PEPE~EPEPEPEPE PEPEYEPEPEPEPE PEPE1E%E@HwUDUEtEEE]GoU ]Et E@u EMEE+UEtE@EEUEuEUPEE]ÐU]ZUyڋEtEu EuE@u E_jj?EEu E ?E@ILSSEU PEUPEUP E@EUPEE]ÐU]ZU_xڋE EEt E@=ILSSt EjE P>EE]ÐU ]ZUwڋE EEt E@=ILSSt EEu EE@ EEuEEPEuEjj>EEu E uE@CLSSEU@BEU@BEU@ B EU@BEEE@EEU@BUEMAEUPEE]ÐU]ZUvڋE EEt E@=CLSSt EjEP<EE]ÐU(]ZUܸ?vEEEEEuEuEEt E@PR=b~jj~EPJ EE;jjjjj~EPJEEEjEPVGU;EPEPFEE @$PEPIuE EjhDPEPHuE @E^jh`DPEPHuE E.jh0DPEPHu E EE@EjEPnFU;jEPIEPRQ` EUPEtE@ PR`jEPqIjjjjjSEP;IEEt^E@(tE@,%t E EE@(tE@, t E @EjEPIEPRQ_ EUPEEEE]ÐU]uZU,sExGjPBEjjEPjEPEPL~mE tOujEPuLV;v7E@PjE P: jEPKLPE PEP:G jEP)LЋEPjEP3BE EE]uÐU4Z-rEEE EDžEt E@=CLSStE]Eu EFjjc8EEu E #EU PE@j@PCjjhPPR$jPK;ЋEPE@u E E@j@PwCjjhPPRjP:ЋEPE@uE &uMEPjEPEPBPAPFPEPMEEtEEt1EUEtE@EE@EUEuEt1EUEtE@EE@EUEuEEj@P6ЋEPE@u E 1EEtTEUEt1MUEu@E@EE@EUEujEP5EtTEUEt1MUEu@E@EE@EUEujEP5EU@ E@}uEHUEPB PAPFPGPEPwEEtEUPEEtEtEPEP?=EEEÐU]ZUOnڋE uEE @tE j@P4E @tE j@Pk4E @t]EE U@EEt.EPEP4E@EE U@EEuҋE j@P4jE P3EE]ÐU]ZUOmڋE uEE @EEt E@=CLSStEYE@ @TtEP PBTP =>ЋE@ PTEP E@@PBTP$>E@ j@XP3UEHB @t*UEHB j@P\6ЋE@ PX E@ @XUEHB @E@ @\E@ @pt*EPE@ RP`UEHB @@EPE@ R UEHB @ EPE@ REE]ÐU]u}ZUykEjEPEPEPE PEP:EEt5 jEP1jjPEPVWW+Et($ EPRQUW EE@TtU PBTP:;ЋEPTUE@@PBTP<E@@E@\E@@t E@j@PO4ЋEPX E@XE@ptE@U@B`E@@2E@U@ E@@ E@U@EEEE]u}ÐU@]ȉuĉ}ZU̸iEEEEE EE@dt E@dE:EEu E E@ht E@hEW:EEu E eE@lt E@lE:EEu E -E0EHw鸜U̍DU⋃(PEP9BEEuC3@E苻043j@P/jjPEPVWTjjjjjEPAEEu'<4EPRQhT EEjEP9U; EPEP9EEE@EEjEPd9EEE؃u#E@PEP8E@jEE;E}DEPEP8EЋE@PEP@EԋEԃuE@E܋E;E|EԃtEj@PC8PEPF8EE@EEjEPs8EEE؃u"E@PEP7E@|EE;E}DEPEP7EЋE@PEP @EԋEԃuE@E܋E;E|EԃtEj@P?PEPV7E@EjEP7U;*jEP7u1LEPRRE@dujEP0:E@du EUPdjEP17u1PEPRQE@hujEP9E@hu EUPhjEP6u1TEPRAQE@lujEPp9E@lu EUPl-E)EHw鸨U̍DUEEtjEP4EtXPEP4EEE]ȋuċ}I]UZcEEEEuEGjEPq<EEuEjEPY<EEjEP)Ej P)D=v+\Ejj PEPRQOE@ .uZEj PEPRhP;PEPEPEPE PEPEEt$jEP};EE$EEtjEPa;EEEÐU]u}ZU)bڋ`EdjEP/jE P/jjPVWEPLN_E$PE PEPEPE PEPEGE$PE PEPEPE PEPEE0Ett吋E]u}ÐU4Z9aE EjEP2EEEEEEEE @E@jP)EEuE UEEE;Ejjj$(ȋUE EPEP1EjEPW2hPRP2 hPEPRL UE@UE@UE@jEP1EjEP9EjEP(EEuUEUPEPEP9UEU܉PUE@UE@ UE@@K9EjEP}1PEP1Ej@P1jEP1jP1ЋE؉PjEP9EjEP'EEuUEUPEPEP8UEU܉PUE@UE@UE@ @jjREP/3 DžjjjjjREPV3tcjP41EjEP3&EEuUEUP EPP0UEU܉PtjP&1E؃tFE؋@tEj@P25E؋@tEj@P3jEP#E@EE;EE UPEEtjEP'EEEÐU]ZU\E EE@E@u E:ǖQ-EEu6E@PEP-EPEP EjEP1EEE]ÐU ]ZU\E ExBEBEBEE@jj.$EEuE@jj$ЋEPE@ujEP"mUEPBPL'EEt"Ej@P!jEP!+E@@E@@EUPEEEE]ÐU]ZUZE E@dEE@E@du E:ǖEPEPSEEEE]ÐU$]ZUoZEEEE E@EE@E@E@uE4EjEPQ,PEPT,Ej@PS,jEPU,jPZ,ЋEPjEP3EjEP!EEUPEEEu EPEP3EUPEEj@P&1Ej@P/jEPEEE]ÐUZXEEEEu EEj@Pv)t|jPEEEPE PEP EEujPDEahPEP, EE3EPPEP, jEP:2EEEEÐU,ZWE EEEEEDžEhujPCjPC(EE>E@E@E䋕E@PEPj51 EEuhPEP( Ehu PPRC PPRB EPEP'E@E@E䋕E@PEPj- EEu&UhPBP( Ehu5Ej@P10jjPPPV-B3Ej@P/jjPPPVAjEP/E@ tME@ E䋕E@PEPj/ EEu9jEP(@EE:ǖEtPEP%EEEÐUH]ZUTEEEEEEEEEEEEEU E @\PBTPy%EċE@E@@E̋E@@@EЋE@@@E܋Ej@P$jPV.jP[.E؋E؃u!t jhPjojpj!$+7.jP#EEu!t jhPj jpj!*EăEjEP"%U;EEPEPp$EȋEȋPEċ@@ PBP*EEu+EċPEȋ@@PBP-EEu)EE@EjEP$U;mEȃu!t jhPjsjpj!*EăEjEP:$U;EPEP#EȋEȋH EȋP EPEPBPAPE PEPxEEt"t jh(Pjjpj!i)YEuEvEE,,EE@EjEP#U;PEȃu$t jh6Phjpj!(hEȋH EȋP EPEPBPAPE PEP諻EEuEw!t jh@Pjjpj!(EEEjjEPjhEP jjjjEPEP+:EЋ@PEP+}jEP+U;t7EPEP~+u"t jhSPjdjpj!'jjEPjjEP+EPEP3+EuEEEPEP#+EE܋@~U܋E܋@PBP#E/+$jPSEjjjjhEPGEPEP*ELEtjEP)EtjEP)EtjEPy)EEtjEPEEE]ÐU]uZUNEUDt0U;EuE@EUDuЋUDtUDE>@ PRjjEPRj V'EE]uUWVS[!N[^_UWVS[N[^_verify_client_sanverify_client_ekupkinit_server_verify_padatapkinit_server_return_padatapkinit_init_kdc_profilepkinit_find_realm_contextpkinit_server_plugin_init_realmpkinit_server_plugin_initpkinit_server_plugin_finipkinit_init_kdc_req_contextpkinit_fini_kdc_req_contextverify_kdc_sanverify_kdc_ekupkinit_as_rep_parsepkinit_client_profilepkinit_client_req_initpkinit_client_req_finipkinit_client_plugin_initpkinit_client_plugin_fini+++parse_pkcs12_optionsprocess_option_identityprocess_option_ca_crlpkinit_identity_initializeparse_list_valueparse_rule_componentparse_rule_setregexp_matchcomponent_matchcheck_all_certsfree_all_cert_matching_dataobtain_all_cert_matching_datapkinit_cert_matchingpkinit_init_plg_cryptopkinit_fini_plg_cryptopkinit_init_identity_cryptopkinit_fini_identity_cryptopkinit_init_req_cryptopkinit_fini_req_cryptocms_signeddata_verifycms_envelopeddata_verifycrypto_retrieve_X509_sanscrypto_retrieve_cert_sanscrypto_check_cert_ekupkinit_pkcs7type2oidwrap_signeddatapkinit_get_certs_pkcs12pkinit_get_certs_fspkinit_get_certs_dircrypto_retieve_X509_key_usagecrypto_cert_select_defaultload_cas_and_crlsload_cas_and_crls_dircrypto_load_cas_and_crlspkinit_create_edata: creating edata for error %d (%s) no edata needed for error %d (%s) pkinit_server_get_edata: entered! %s: error from retrieve_certificate_sans() %s: Checking pkinit sans %s: pkinit san match found %s: no pkinit san match found %s: no upn sans (or we wouldn't accept them anyway) %s: Checking upn sans %s: upn san match found %s: no upn san match found %s: returning retval %d, valid_san %d %s: configuration requests no EKU checking %s: Error from crypto_check_cert_eku %d (%s) %s: returning retval %d, eku_accepted %d pkinit_verify_padata: entered! processing KRB5_PADATA_PK_AS_REQ decode_krb5_pa_pk_as_req failed processing KRB5_PADATA_PK_AS_REQ_OLD decode_krb5_pa_pk_as_req_draft9 failed unrecognized pa_type = %d pkcs7_signeddata_verify failed %s: did not find an acceptable SAN in user certificate %s: did not find an acceptable EKU in user certificate mit-krb5Pkinit request not signed, but client not anonymous.failed to decode krb5_auth_pack bad dh parameters Anonymous pkinit without DH public value not supported.unable to calculate AS REQ checksum failed to match the checksum kdcPkId in AS_REQ does not match KDC's certRFC says to ignore and proceed failed to decode krb5_auth_pack_draft9 pkinit_verify_padata failed: creating e-data pkinit_create_edata failed PKINITKEYEXCHANGEmissing request context Unable to locate correct realm context pkinit_return_padata: entered! KDC picked etype = %d received DH key delivery AS REQ failed to process/create dh paramters encode_krb5_kdc_dh_key_info failed failed to create pkcs7 signed data received RSA key delivery AS REQ unable to make a session key %s: Checking pa_type 0x%08x %s: return checksum instead of nonce = %d failed to encode reply_key_pack failed to create pkcs7 enveloped data: %s pkinit_pick_kdf_alg failed: %s failed to encode AS_REP pkinit_alg_agility_kdf failed: %s pkinit_octetstring2key failed: %s pkinit_verify_padata failure%s: entered for realm %s pkinit_identityNo pkinit_identity supplied for realm %spkinit_anchorsNo pkinit_anchors supplied for realm %spkinit_poolpkinit_revokepkinit_kdc_ocsppkinit_mapping_filepkinit_dh_min_bits%s: invalid value (%d) for pkinit_dh_min_bits, using default value (%d) instead pkinit_allow_upnpkinit_require_crl_checkingpkinit_eku_checkingkpClientAuthscLoginnone%s: Invalid value for pkinit_eku_checking: '%s' %s: returning context at %p for realm '%s' %s: unable to find realm context for realm '%.*s' %s: initializing context at %p for realm '%s' %s: processing realm '%s' No realms configured correctly for pkinit support%s: returning context at %p %s: freeing context at %p %s: returning reqctx at %p pkinit_fini_kdc_req_context: got bad reqctx (%p)! %s: freeing reqctx at %p pkinit%02x w*H>kdc_options = 0x%x till = %d No request->client; aborting PKINIT pkinit_get_kdc_cert returned %d encode_krb5_kdc_req_body returned %d PKINIT client computed kdc-req-body checksum {cksum}error %d on pkinit_as_req_create; aborting PKINIT pkinit_as_req_create pa_type = %d as_req: unrecognized pa_type = %d PKINIT client making DH requestas_req: DH key transport algorithm failed to copy dh_oid failed to create dh parameters PKINIT client making RSA requestas_req: RSA key transport algorithm as_req: unknown key transport protocol %d failed to encode the AuthPack %d failed to create pkcs7 signed data pkinit_as_req_create retval=%d pa_pkinit_parse_rep: no in_padata pkinit_as_rep_parse returned %d (%s) pkinit_kdc_hostname%s: No pkinit_kdc_hostname values found in config file %s: pkinit_kdc_hostname values found in config file PKINIT client config accepts KDC dNSName SAN {string}%s: error from retrieve_certificate_sans() PKINIT client failed to decode SANs in KDC certPKINIT client found id-pkinit-san in KDC cert: {princ}PKINIT client found dNSName SAN in KDC cert: {string}%s: Checking pkinit sans PKINIT client matched KDC principal {princ} against id-pkinit-san; no EKU check required%s: pkinit san match found %s: no pkinit san match found %s: no certhosts (or we wouldn't accept them anyway) %s: comparing cert name '%s' with config name '%s' PKINIT client matched KDC hostname {string} against dNSName SAN; EKU check still required%s: we have a dnsName match PKINIT client found no acceptable SAN in KDC cert%s: no dnsName san match found %s: returning retval %d, valid_san %d, need_eku_checking %d PKINIT client skipping EKU check due to configuration%s: configuration requests no EKU checking %s: Error from crypto_check_cert_eku %d (%s) PKINIT client found acceptable EKU in KDC certPKINIT client found no acceptable EKU in KDC cert%s: returning retval %d, eku_accepted %d (as_rep != NULL) && (key_block != NULL)pkinit_clnt.cdecode_krb5_as_rep failed %d as_rep: DH key transport algorithm failed to verify pkcs7 signed data PKINIT client could not verify DH replyPKINIT client verified DH replyas_rep: RSA key transport algorithm failed to verify pkcs7 enveloped data PKINIT client could not verify RSA replyPKINIT client verified RSA replyunknown as_rep type %d krbtgt%s: did not find an acceptable SAN in KDC certificate %s: did not find an acceptable EKU in KDC certificate %s: skipping EKU check failed to decode kdc_dh_key_info failed to process dh params failed to create key pkinit_alg_agility_kdf %s PKINIT client used KDF {hexdata} to compute reply key {keyblock}failed to create key pkinit_octetstring2key %s PKINIT client used octetstring2key to compute reply key {keyblock}failed to decode reply_key_pack failed to decode reply_key_pack_draft9 decode reply_key_pack_draft9 nonce in AS_REP=%d doesn't match AS_REQ=%d failed to make a checksum PKINIT client checksum mismatch: expected {cksum}, received {cksum}failed to match the checksums checksums match PKINIT client retrieved reply key {keyblock} from RSA reply (checksum {cksum})unknow as_rep type %d pkinit_as_rep_parse returning %d (%s) pkinit_client_profile %p %p %p %p pkinit_win2kpkinit_win2k_require_bindingpkinit_require_crl_checkingpkinit_dh_min_bits%s: invalid value (%d) for pkinit_dh_min_bits, using default value (%d) instead pkinit_eku_checkingkpKDCkpServerAuthnone%s: Invalid value for pkinit_eku_checking: '%s' pkinit_longhornpkinit_anchorspkinit_poolpkinit_revokepkinit_identitiesX509_user_identitypkinit_client_process %p %p %p %p processing KRB5_PADATA_PK_AS_REQ processing KRB5_PADATA_PK_AS_REP processing KRB5_PADATA_PK_AS_REQ_OLD processing KRB5_PADATA_PK_AS_REP_OLD unrecognized patype = %d for PKINIT PKINIT client has no configured identity; giving uppkinit_identity_initialize returned %d (%s) pkinit_client_process: returning %d (%s) pkinit_client_tryagain %p %p %p %p failed to decode sequence of trusted certifiers failed to decode td_dh_parameters PKINIT client trying again with KDC-provided parameterspkinit_client_tryagain: returning %d (%s) %s: returning reqctx at %p %s: received reqctx at %p %s: Bad magic value (%x) in req ctx %s: returning plgctx at %p pkinit_lib_fini: got bad plgctx (%p)! %s: got plgctx at %p X509_user_identity can not be given twice Could not duplicate X509_user_identity value X509_anchorsflag_RSA_PROTOCOLyesSetting flag to use RSA_PROTOCOL (pkinit) received '%s' = '%s' pkinitrealmskdcdefaultslibdefaultsyyestruet1onnnofalsenil0offFILEDIRPKCS11PKCS12ENVINVALIDANCHORSINTERMEDIATESCRLS:module_nameslotidtokencertidcertlabel,%s: cert_filename '%s' key_filename '%s' %s: processing value '%s' NULLFILE:PKCS11:PKCS12:DIR:ENV:%s: Unsupported type while processing '%s' mit-krb5Unsupported type while processing '%s' %s: idtype is %s Internal error parsing X509_user_identity %s: processing catype %s, value '%s' No type given for '%s' %s: %p %p %p No user identity options specified%s: no user identity options specified %s: No matching certificate found %s: Failed while selecting default certificate X509_user_identityNONESUBJECTISSUERSANEKUKUINVALIDANDORREGEXPLIST%s: Missing or empty value for list keyword type %d %s: Unknown list keyword type %d %s: Found value '%s', bitfield is now 0x%x %s: Urecognized value '%s' %s: returning %d %s: Missing or invalid keyword in rule '%s' %s: found keyword '%s' %s: Missing value for keyword '%s' %s: found value '%s' %s: Error compiling reg-exp '%s': %s %s: Error %d, parsing list values for keyword %s %s: Assuming AND relation for multiple components in rule '%s' %s: After parse_rule_component, remaining %d, rule '%s' %s: checking %s rule '%s' with value '%s' %s: the result is%s a match NOT%s: keyword %s, keyword value %s mismatch %s: checking %s: rule 0x%08x, cert 0x%08x %s: unknown keyword value type %d %s: returning match = %d %s: matching rule relation is %s with %d components %s: subject: '%s' %s: match for keyword type %s %s: cert matches rule (OR relation) %s: cert does not match rule (AND relation) %s: cert matches rule (AND relation) %s: After checking %d certs, we found %d matches %s: returning %d, match_found %d %s: crypto_cert_free_matching_data error %d, %s %s: crypto_cert_release error %d, %s %s: crypto_cert_get_count error %d, %s %s: crypto_cert_get_count says there are %d certs %s: crypto_cert_iteration_begin returned %d, %s %s: We thought there were %d certs, but crypto_cert_iteration_next stopped after %d? %s: crypto_cert_iteration_next error %d, %s %s: crypto_cert_get_matching_data error %d, %s %s: returning %d, certinfo %p pkinit_cert_match%s: no matching rules found in config file %s: Processing rule '%s' %s: Ignoring invalid rule pkinit_cert_match = '%s' %s: Error %d obtaining certificate information %s: Error %d, checking certs against rule '%s' %s: We have an exact match with rule '%s' %s: Selecting the matching cert! %s: crypto_cert_select error %d, %s digitalSignaturekeyEnciphermentpkinitmsScLoginclientAuthemailProtection%s: initializing openssl crypto context at %p %s: freeing context at %p %s: returning ctx at %p %s: freeing ctx at %p 1.3.6.1.5.2.2id-pkinit-sanKRB5PrincipalNameError creating oid object for '%s' 1.3.6.1.5.2.3.1id-pkinit-authdataPKINIT signedAuthPack1.3.6.1.5.2.3.2id-pkinit-DHKeyDataPKINIT dhSignedData1.3.6.1.5.2.3.3id-pkinit-rkeyDataPKINIT encKeyPack1.3.6.1.5.2.3.4id-pkinit-KPClientAuthPKINIT Client EKU1.3.6.1.5.2.3.5id-pkinit-KPKdcKDC EKU1.3.6.1.4.1.311.20.2.2id-ms-kp-sc-logon EKUMicrosoft SmartCard Login EKU1.3.6.1.4.1.311.20.2.3id-ms-san-upnMicrosoft Universal Principal Name1.3.6.1.5.5.7.3.1id-kp-serverAuth EKUServer Authentication EKUfailed to read certificate from %s failed to read private key from %s opensc-pkcs11.so%s failed to add pkcs7 data failed to der encode pkcs7 only including signer's certificate building certificate chain failed to create a certificate chain: %s No trusted CAs found. Check your X509_anchors mit-krb5Cannot create cert chain: %ssize of certificate chain = %d cert #%d: %s mech = CKM_RSA_PKCS mech = %s CKM_SHA1_RSA_PKCSFSfailed to add a signed digest attribute %s: failed to decode message: %s Invalid pkinit packet: octet string expectedExpected id-signedData CMS msg (received type = %d) wrong oid unable to find any trusted CAs (none)problem with cert DN = %s (error=%d) %s CMS Verification failure CMS Verification successful wrong oid in eContentType create_identifiers_from_stack failed encode_krb5_td_trusted_certifiers failed failed to create pkcs7 signed data BIO_write only wrote %d failed to encrypt PKCS7 object unable to write pkcs7 object failed to decode pkcs7 Expected id-enveloped PKCS7 msg (received type = %d) PKCS7 decryption successful PKCS7 decryption failed %s: unrecognized pa_type = %d failed to encode signeddata PKCS7 Verification Success PKCS7 Verification Failure %s: nowhere to return any values! %s: no certificate! %s: looking for SANs in cert = %s %s: found no subject alt name extensions %s: found %d subject alt name extension(s) %s: failed decoding pkinit san value %s: failed parsing ms-upn san value %s: unrecognized othername oid in SAN %s: found dns name = %s %s: failed to duplicate dns name %s: SAN type = %d expecting %d %s: No certificate! %s: looking for EKUs in cert = %s %s: found eku info in the cert %s: checking eku %d of %d, allow_secondary = %d %s: found acceptable EKU, checking for digitalSignature %s: found digitalSignature KU %s: didn't find digitalSignature KU %s: returning retval %d, valid_eku %d Bad algorithm ID passed to PK-INIT KDF.Call to OpenSSL EVP_DigestInit() returned an error.Call to OpenSSL EVP_DigestUpdate() returned an error.s == hash_lenpkinit_crypto_openssl.clen >= 0 && len <= sizeclient uses 1024 DH keys client uses 2048 DH keys client uses 4096 DH keys Warning: dh_check failed with %d p value is not prime p value is not a safe prime unable to check the generator value the g value is not a generator dh_check_pub_key failed with %d failed to decode dhparams client sent dh params with %d bits, we require %d create_krb5_trustedCertifiers failed create_krb5_invalidCertificates failed found kdcPkId in AS REQ good %d dhparams bad group 2 q dhparameter bad g dhparameter p is not well-known group 2 dhparameter dh parameters client sent %d DH bits server prefers %d DH bits DH parameters provided by server are unacceptable %s: Creating shadow instance of pkcs7-data oid 1.2.840.113549.1.7.1id-pkcs7-dataPKCS7 data%s: This is the Longhorn version and is_longhorn_server = %d loading module "%s"... not found C_GetFunctionListfailed ok (Warning: PIN locked) (Warning: PIN final try) (Warning: PIN count low)%.*s PIN%sC_Login: %s C_Initialize: %s C_OpenSession: %s C_GetTokenInfo: %s open_session: slotid %d token "%s" open_session: no matching token found open_session: slotid %d (%lu of %d) krb5_pkinit_sign_data: C_FindObjectsInit: %s found %d private keys (%s) failed to decode data pData %p *pulDataLen %d can't open pkcs11 session C_DecryptInit: 0x%x data_len = %d session %p edata %p edata_len %d data %p datalen @%p %d C_Decrypt: %s decrypt %d needs %d decrypt %d -> %d failed to create the signature C_SignInit: %s C_Sign realloc %d C_Sign: %s sign %d -> %d private key does not match certificate unable to decrypt received data (len=%d) PKCS12:%s%s: failed to get user's cert location %s: failed to get user's private key location rbFailed to open PKCS12 file '%s', error %d Failed to decode PKCS12 file '%s' contents Pass phrase forInitial PKCS12_parse with no password failed %s %sPrompt string, '%s %s', is too long! Seconde PKCS12_parse with password failed FILE:%s,%sFILE:%sfailed to load user's certificate from '%s' failed to load user's private key from '%s' %s: failed to get user's certificate directory location .crt%s: Path too long -- directory '%s' and file '%s' %s/%s%s: Successfully loaded cert (and key) for %s %s: No cert/key pairs found in directory '%s' PKCS11:%smodule_name=%s,%stoken=%s%scertlabel=%s%scertid=%s%sslotid=%ldC_FindObjectsInit: %s C_GetAttributeValue: %s cert %d size %d id %d idlen %d %s: EKUs not requested, not checking %s: returning eku 0x%08x %s: KUs not requested, not checking %s: returning ku 0x%08x %s: crypto_cert_get_count error %d, %s %s: ERROR: There are %d certs to choose from, but there must be exactly one. r%s: error opening file '%s': %s %s: error reading file '%s' no anchors in file, %s no intermediates in file, %s no crls in file, %s %s: called with idtype %s and catype %s #%d cert= %s wrong pkcs7 content type unable to decrypt pkcs7 object received trusted certifiers received invalid certificate #%d cert = %s is trusted by kdc #%d cert = %s is invalid #%d issuer = %s serial = %ld is trusted bu kdc #%d issuer = %s serial = %ld is invalid unknown code 0x%xokcancelhost memoryslot id invalidgeneral errorfunction failedarguments badno eventneed to create threadscant lockattribute read onlyattribute sensitiveattribute type invalidattribute value invaliddata invaliddata len rangedevice errordevice memorydevice removedencrypted data invalidencrypted data len rangefunction canceledfunction not parallelfunction not supportedkey handle invalidkey size rangekey type inconsistentkey not neededkey changedkey neededkey indigestiblekey function not permittedkey not wrappablekey unextractablemechanism invalidmechanism param invalidobject handle invalidoperation activeoperation not initializedpin incorrectpin invalidpin len rangepin expiredpin lockedsession closedsession countsession handle invalidsession parallel not supportedsession read onlysession existssession read only existssession read write so existssignature invalidsignature len rangetemplate incompletetemplate inconsistenttoken not presenttoken not recognizedtoken write protectedunwrapping key handle invalidunwrapping key size rangeunwrapping key type inconsistentuser already logged inuser not logged inuser pin not initializeduser type invaliduser another already logged inuser too many typeswrapped key invalidwrapped key len rangewrapping key handle invalidwrapping key size rangewrapping key type inconsistentrandom seed not supportedrandom no rngdomain params invalidbuffer too smallsaved state invalidinformation sensitivestate unsaveablecryptoki not initializedcryptoki already initializedmutex badmutex not lockedfunction rejected*H ggSgggghh.h>hNh^hnhSX~hhhh(YLYhpYSYhYYY,ZDZ`Zh|ZZShZ[йܹ,[L[p[h[[[\ \SX\i\\i.i\>i\ ]NiD]l]^i]]^0^ni~iiiL^T^iiiiiijj.j>j`^|^^Nj^^jnj^~j_(_jL_p_j__T_jj`jj$`P`p`j`j`kk.k>k``$TaNk aLa^k\aaaaaanka,b~k@b\bpbkbbbkblNlcT^lcTd4dTnlPd`ОT~lllXd`dddllllllTmpddmdde.m>mntllllm$mNnLmtmmmm^nmUnTnlnnnnnn$oToooop0pLppppq~n,qTqxqnqqqnq&U,rn@rHrXr`rrrrrrrrs@sdsssnst@tlttntnt unnLuovU0w8wpp|x|P|Np^p||V|||}VL}`}}}}~4~npX~V~p~p~V~ppDpp0V\x܀ 8p\VW8WT.WpJWfW}Wppqq.q 0DXh|̃܃ $D\l>qNq^qnq؄~qqqqqqqqqr r.r>rNr^r4nr8~rrrrrTrrrrsps.s>sNs^sns~ssss<ss\ssstt.t>tNt^tnt~ttttttltttuu.u>uNu^unu~uԆWuuu(`uuuuulvv.v܇>vNv^v@nvl~vvv̈<\xWԉW,vvvP|vvЊ <`WWv܋wwLl.w>wNw^wnw~wwwwwwP`wxwwȍxx @h.x>xNx^xnx~xxxxȎxxxxxyy.y>yNy$L^yny~yyyh|؏P X"Xyyy yy,48PlyБ0Xؒ Xhēؓzz.z>zHT2X|Nzܔ^zHnzPx~zJX^XzzT\Ȗzzzz(<,L@`Pzz{{.{d|>{sX$N{^{@Xhn{X~{{{{8XPX|{{{{ș{,H|x|.|>|N|^|n|~||||||| 7DTex |S SH& ( o=oDo \8D`#oo؁ @ ȁ@ ڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQSڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZhڢ!h4b)Ngt ;"QJy4:C0+ m_7O5mmQE䅵vb^~LB7k \8kZ$|KI(fQ[=|cH6UӚi?$_e]#ܣbV R)pmg 5NJtl!|2^F.6;w,']oLR+X9I|j&rZ-3 Pz3U!dX qW] }ǫ 3J%a&k/يdvs>jdR+{ Wza]lw FOt1C[K !r<׈q[&'j<h4 %*Lۻގ.ʦ(|YGNk]Oâ#;Q[a)pׯv!pH'հZ꘍ܐM541ĚК  4@Th !01ț2؛@APQ0TH``btcdefgĜh؜ijpq0H`tȝԝ ,@PlȞ $D`̟(@\t !0Pؠ`p,Hhthdvvww wwwww$w(w,w( H&D8DXY`\\g | |S S S Xййo4u )2S AS| t} 0} P} p} } }: }: 0~: *p~3 6~U B6 NS WP/ bE mЀz xP3 U 6 0/ `E z 0? p> D D PA J @ 0B    % , 5 > :`> 4> BF H0L PW _a gPm vC [ pj  [pi ~ )2S йS t  @ `   : : @: *3 6U B 6 NS W`/ bE mz x`3 U 6 @/ pE z @? > D D `A J @ @B   З % , 50> :p> 4> BF H@L PW _a g`m vКC  [ j  [i ~ p < X8(Y$О LY$ )P1 ;pY,AS GYMYSY YY8_,ZeDZk`Zq|Z(w  Z,S Z0[, й ܹ ,[  L[$p[$[([( [\  \8S !X\8'\ -\83\$9\? ]8ED](Kl] Q]LW](]^0c0^i J L^T^     `^|^(^ ^^$_((_$L_$p_$_ _ T _,&`$,$`,2P` 8p`>`$D`$J` P+ hо  `$T a a,La\a(a aaaaaT,b@b\bpbbbb4 b, @D D A 0J @ B  Xd`d dd)2T 5`> :> 4> B F Sp t     0: p: : *3 60U B6 NT W/ bE mPz x3 U p6 / E 0z ? > 0D D A  J p@ B  %k 6 Hpd Nd(Td$Zd(`e8f  { t4D t$J t8P u,V + n * Lu  'D 'D @(A (J (@  )B p) )2U 8 S) t) ) ) * * @*: *: *: *+3 6@+U B+6 NU W,/ b-E m`-z x-3  .U .6 // /E @0z 0? 1> @1D 1D 1A 02J 2@ 2B 3 03 P3 %p3 ,3 53> :3> 404> Bp4F H4L P5W _p5a g5m vP6C 6[ 7j p7 [8i p8~ 8 9 l  vMv v )2U l S@ t@ @ A 0A PA pA: A: A: *0B3 6pBU BB6 NU WD/ b@DE mDz xE3 PEU E6 F/  GE pGz G? 0H> pHD HD IA `IJ I@ IB @J PJ} JE 0w 8w   hD phD hA iJ `i@ iB i  j ) y/ y5 y; yA yG yM yS jx c yi yo Pkx | zZz k~ `l l2 z8 DV Hz$ lz, z z 0o z0 UV z {$;4{ L{(T t{40ta {@jV {<!v $|,.yV  Np| x|P| 4w D||,JV P|,-|$|Vz }83V EL}`} }(}0f}(l~4]4~$r0}H X~4V ~(~  ~( V ~44DX00 0,V \ x40܀0 ,8$ \%)̲2 PD D A @J @ ЍB   n 0W % =Й_ S8 W YpW q0 М @ T.W pJW `  fW }W A$ ;N  0DXSh |_ ẽ܃% +$ 1D \0l$q7=N $ ؄$WP $ _> u` 4G 8 T p( , 0  < \l` & ,Ԇ$W 0(8 ` J l 0,6/ ܇ <B`@m `(f@,ll$r)  ̈ 8H- < \x W   ԉ` $W ,$P,#|,* 1(8Њ(?(F M<$T` [bW i$pW w ~܋4<L l((g (48P`` xȍ$   @(h  $' ?` W^Ȏ4e0> |0 (D $(Lh|,؏ 44P0  X '.5 <@C"X J ^e  ls,z4 8Pl R  Б$( 0( )X007  T `g  x0  ؒ <XhM   s   0 / ēؓ #*(1,80V OH V nT(u2X ||0,ܔ,0HP(x,p   00  JX $PD 9<@^X GTN\4U\0cȖ0jw ( <,L@ `P v d| % `+ /(6sX =D(K$Rp. g@(nX uhP7 $X   8= X P,X | M  ș % ,$3,:H0Ax,H Z a)2V h}@Z  U 1AJ[`N t,? 30Gb Jf(U  0Gg ak|P4  4   L "2` Ik` $ (z )Jкry5 20] G ^l ; [   /   p  ! * C U k : |S     `/ } !Z *!:!9 T!a s!D }!n !!!0* !!!! ""1" P"`"i"&  {"""""""""##W 8#K#g#a  }##L{ ######## $  $$=$K$U$f$m$` $8 $$P3 $$$$$%%8%L%V%ܺx%%%%$% 6 %%&& !&,`3&M&`&< z&&غ&& && ''&'-'A'S'  h''4' w '''''( (`M %(/(L(T([((0k ((( ()9 ())9)B) S U)i)}))'@)e )))0\ ))) *0 *\2*G*P; g**V **P ****** +%+4+F+N+T+_+l+@& +} +%++Z +++P + ,,4,I,R,s, < ,,,,,@,,Fq -- <-Ժd-p-----E$ ---.4.=.O.b.~.n .4 ...... //p} ̲<4/D/W/x//S /////////0> 0.00T0c t0~00 000 000 1&1M :1N1 U1^1d1U {1U 11` 1( 111I% 22,2?2P2*e d222  222} 2U 23!343?3G3X3|p? o330  3p 3333 W 4434H4Q  b4l4w44P $444444 44n 5U 5,5<5^5n5|555  5555 6 66)6A6@ pkinit.socrti.svalues-Xa.cDdata.dataBbss.bssDrodata.rodatapkinit_accessor.ck5_os_nothread_mutex_finish_initk5_os_nothread_mutex_initk5_os_nothread_mutex_destroyk5_os_nothread_mutex_lockk5_os_nothread_mutex_unlockk5_os_mutex_finish_initk5_mutex_initk5_mutex_finish_initk5_mutex_lockstore_16_bestore_32_bestore_64_be.L_cseg0load_16_beload_32_beload_64_bestore_16_lestore_32_lestore_64_leload_16_leload_32_leload_64_lestore_16_nstore_32_nstore_64_nload_16_nload_32_nload_64_nk5_htonllk5_ntohllsa2sinsa2sin6ss2sass2sinss2sin6fstatlstat_xmknodzapfreezapfreestrauthdata_eqdata_eq_stringmake_dataempty_datastring2dataalloc_datak5allocDpicdata.picdatapkinit_srv.cpkiDebugpkinit_create_edata.L339.L347pkinit_server_get_edata.L356pkinit_find_realm_contextverify_client_san.L370.L362.L372.L380.L384.L387.L388.L395.L397.L416verify_client_eku.L425.L420.L429.L430pkinit_server_verify_padata.L437.L438.L439.L440pkinit_init_kdc_req_context.L456.L459.L462.L465.L467.L471.L478.L434.L483.L487.L488.L494.L499.L503.L506.L511.L518.L523.L532.L535pkinit_fini_kdc_req_contextreturn_pkinit_kx.L552.L553pkinit_pick_kdf_algpkinit_server_return_padata.L597.L606.L609.L610.L619.L647.L650.L660.L666.L673.L676.L681.L594.L685.L696.L711.L722.L731.L744.L748.L772pkinit_server_get_flagspkinit_fini_kdc_profilepkinit_init_kdc_profile.L793.L790.L794.L799.L801.L806.L807.L808.L809.L810.L811.L814.L815.L816.L817.L821.L825.L829.L832.L848.L836.L850pkinit_server_plugin_init_realm.L860.L854pkinit_server_plugin_fini_realmpkinit_server_plugin_init.L896.L880.L903.L905pkinit_server_plugin_fini.L929.L919.L941.L933.L954.L955.L947.L968supported_server_pa_typespkinit_lib.c.L453.L455pkinit_clnt.cuse_content_infopa_pkinit_gen_req.L231.L234.L237.L241.L244pkinit_as_req_create.L251.L282.L297.L302.L303.L306.L309.L311.L312.L319.L328.L343.L357pa_pkinit_parse_rep.L364.L369pkinit_as_rep_parseverify_kdc_san.L385.L377.L392.L396.L403.L411.L413.L421.L422.L426.L442.L443.L448.L449.L466verify_kdc_eku.L475.L476.L470.L480.L485.L486.L493.L500.L501.L505.L509.L512.L513.L515.L517.L520.L521.L522.L524.L526.L533.L490.L540.L542.L548.L551.L556.L557.L561.L562.L566.L572.L573.L576.L581.L586.L587.L588.L589.L591pkinit_client_profile.L604.L605.L607.L608.L613.L601.L614.L618.L622.L626.L629.L630.L633.L634.L635.L636.L637pkinit_client_process.L646.L655.L657.L662.L664.L672.L677pkinit_client_tryagain.L684.L700.L707.L717.L724pkinit_client_get_flagspkinit_client_req_init.L750.L736pkinit_client_req_fini.L767.L764pkinit_client_plugin_init.L798.L784pkinit_client_plugin_fini.L812.L804add_string_to_arrayhandle_gic_opt.L853.L856.L862.L865.L867pkinit_client_gic_opt.L874.L885supported_client_pa_typespkinit_kdf_constants.cpkinit_profile.c_krb5_conf_booleanconf_yesconf_no.L375pkinit_identity.cprofile_free_listcopy_list.L238.L240.L242.L246.L248.L259.L261.L263parse_pkcs11_options.L354.L360.L371.L383parse_fs_options.L401parse_pkcs12_options.L424.L412process_option_identity.L435.L431.L428.L441.L445.L457.L460.L461.L464process_option_ca_crl.L496.L537.L544pkinit_matching.ckeyword2string.L200.L202.L204.L206.L208.L210.L212relation2string.L224.L226kwval2string.L239free_rule_componentfree_rule_setparse_list_value.L288.L281.L296.L314.L321.L325parse_rule_component.L341.L329.L367parse_rule_set.L414.L390.L417regexp_match.L436component_match.L473.L452.L479check_all_certs.L527.L529free_all_cert_matching_data.L547.L536obtain_all_cert_matching_data.L563.L568.L577.L579.L582.L590.L600.L620.L623.L631pkinit_crypto_openssl.copenssl_init.L285.L279pkinit_init_pkinit_oidspkinit_init_dh_params.L299pkinit_fini_pkinit_oidspkinit_fini_dh_paramspkinit_init_certspkinit_init_pkcs11.L315.L305.L323pkinit_fini_certspkinit_fini_pkcs11.L332.L358.L361.L365.L374.L378.L381.L391.L398.L399.L402.L405.L406.L409.L419pkinit_oids_refsget_certget_keypkinit_C_UnloadModulecreate_contentinfo.L585pkinit_pkcs7type2oid.L640openssl_callback.L643.L648.L649.L654pkinit_sign_data.L699.L701.L708.L745.L735.L753.L759.L760openssl_callback_ignore_crls.L831.L849.L864create_identifiers_from_stack.L884.L887.L928prepare_enc_data.L936.L945.L958.L973.L977pkcs7_decrypt.L980.L984.L997wrap_signeddata.L1005.L1009.L1011crypto_retrieve_X509_sans.L1026.L1019.L1029.L1030.L1037.L1039.L1056.L1065.L1075.L1078.L1084.L1087.L1090.L1138.L1133.L1148.L1142.L1153.L1159.L1178.L1185.L1187.L1188pkinit_alg_values.L1226.L1257.L1263.L1269.L1270compute_dh.L1288.L1310.L1312.L1314.L1319.L1322.L1325.L1328.L1331.L1334pkinit_encode_dh_paramspkinit_decode_dh_params.L1374.L1379pkinit_check_dh_params.L1422pkinit_create_sequence_of_principal_identifiers.L1512create_krb5_invalidCertificates.L1517.L1616.L1636.L1638.L1640.L1642.L1649.L1659.L1677.L1721.L1712.L1722.L1723.L1724.L1737.L1734pkinit_C_LoadModule.L1763.L1766.L1767.L1772.L1773pkinit_login.L1791.L1795.L1799.L1801.L1803.L1809pkinit_pkcs11_code_to_textpkinit_open_session.L1822.L1838.L1841.L1850.L1858.L1859pkinit_find_private_key.L1870.L1871pkinit_decode_data_fspkinit_decode_data.L1884pkinit_C_Decrypt.L1893pkinit_decode_data_pkcs11.L1902.L1905.L1906.L1909.L1912.L1915.L1916pkinit_sign_data_fscreate_signature.L1934pkinit_sign_data_pkcs11.L1945.L1953.L1956.L1957.L1978.L1984reassemble_pkcs12_name.L2011pkinit_get_certs_pkcs12.L2021.L2016.L2025.L2026.L2029.L2035.L2038.L2039.L2040.L2043.L2046reassemble_files_name.L2066.L2070pkinit_load_fs_cert_and_key.L2082.L2088pkinit_get_certs_fs.L2100pkinit_get_certs_dir.L2116.L2111.L2129.L2133.L2134.L2137.L2144reassemble_pkcs11_name.L2154.L2160.L2162.L2157.L2169.L2165.L2176.L2172.L2183.L2179.L2190.L2186pkinit_get_certs_pkcs11.L2226.L2239.L2246free_cred_infocrypto_retieve_X509_key_usage.L2379.L2370.L2401.L2405.L2417X509_NAME_oneline_ex.L2537.L2532.L2541crypto_load_cas_and_crls.L2579.L2581.L2553.L2585.L2627.L2636.L2645load_cas_and_crls_dir.L2660.L2687.L2684.L2706.L2751.L2788pkcs7_dataDecode.L2791.L2805.L2807.L2819.L2821.L2828.L2830pkcs11_errstrings.L2912.L2922crtn.s_END__START_free_krb5_pa_pk_as_rep_draft9PKCS7_set0_type_otherEVP_CIPHER_asn1_to_paramcallocDH_generate_keyX509_NAME_freepkinit_octetstring2keykrb5_pkinit_sha1_oid_lenASN1_OBJECT_freeX509_STORE_freeX509_dupi2d_ASN1_INTEGERpkinit_dup_identity_optskrb5int_accessormemmovek5int_encode_krb5_pa_pk_as_req_draft9mallocASN1_BIT_STRING_freeEVP_MD_CTX_mdX509_STORE_CTX_get_errork5int_decode_krb5_td_dh_parameterspkinit_libdefault_booleancreate_issuerAndSerialPKCS7_cert_from_signer_infok5int_decode_krb5_pa_pk_as_req_draft9ASN1_INTEGER_setCRYPTO_freek5int_krb5_free_kdc_reqEVP_PKEY_sizeX509_verify_certstrtolkrb5_pkinit_sha256_oid_lenX509_verify_cert_error_stringERR_clear_errork5int_set_prompt_types_PROCEDURE_LINKAGE_TABLE_d2i_PKCS7EVP_DigestUpdatecrypto_cert_selectmemsetstrlcpyregexecdlclosecms_contentinfo_createERR_peek_errorstrduppkinit_fini_plg_optscms_envelopeddata_createidtype2stringEVP_sha512ASN1_put_objectinit_krb5_pa_pk_as_repk5int_encode_krb5_kdc_dh_key_infoinit_krb5_pa_pk_as_reqeku_keywordspthread_mutex_locksk_new_nullPKCS12_parsek5int_encode_krb5_reply_key_pack_draft9cms_envelopeddata_verifycrypto_cert_get_countkrb5_c_make_random_keyencode_krb5_pkinit_supp_pub_infok5int_decode_krb5_td_trusted_certifiersstrcmpASN1_OCTET_STRING_newPKCS7_ATTR_SIGN_itOBJ_cmpBN_newencode_krb5_sp80056a_other_infopkinit_check_kdc_pkidX509_CRL_dupkrb5_principal_compare_any_realmX509_STORE_CTX_trusted_stackpkinit_cert_matchingfree_krb5_pa_pk_as_repd2i_X509_NAMEfree_krb5_pa_pk_as_reqmemcmppkinit_kdcdefault_booleanregcomppkinit_identity_initializeclient_create_dhpkinit_get_kdc_certkdcpreauth_pkinit_initvtpkinit_process_td_dh_paramsBIO_ctrlkrb5_anonymous_principalPEM_read_bio_X509PKCS7_get_signer_infopkinit_kdcdefault_stringkrb5int_free_bufpkinit_init_identity_cryptolonghornEVP_CIPHER_CTX_set_key_lengthcrypto_cert_get_matching_datainit_krb5_subject_pk_infofree_krb5_kdc_dh_key_infoASN1_STRING_setpkinit_kdcdefault_stringsfree_krb5_algorithm_identifiersha256_idfree_krb5_subject_pk_infoasn1_add_errorDH_checkpkinit_identity_set_prompterASN1_TYPE_newPKCS7_SIGNER_INFO_newhtonli2d_ASN1_OCTET_STRINGASN1_TYPE_free_GLOBAL_OFFSET_TABLE_pkinit_create_td_dh_parametersOPENSSL_cleansed2i_X509crypto_load_certsX509_NAME_cmpERR_put_errord2i_ASN1_OCTET_STRINGprofile_get_valuesX509_check_cakrb5_free_dataEVP_PKEY_freeX509V3_EXT_d2imemcpykrb5_us_timeofdaypkinit_create_td_invalid_certificatepthread_mutex_initd2i_PKCS7_ISSUER_AND_SERIALcms_signeddata_createEVP_PKEY_decryptcatype2stringBN_hex2bnX509_get_extOBJ_obj2nidASN1_INTEGER_cmpkrb5_free_keyblocksk_valuefcntlencode_krb5_encryption_keypkinit_init_req_cryptoCRYPTO_set_mem_functionsEVP_SignFinalBIO_s_memlibintl_dgettextDH_newpkinit_accessor_initsha1_idBN_freecrypto_cert_free_matching_dataEVP_DigestInit_exkrb5_c_make_checksumASN1_OCTET_STRING_freeBN_dupkrb5_unparse_namekrb5_set_error_messageX509_STORE_CTX_set0_crlspkinit_2048_dhprimeBN_bn2bink5int_decode_krb5_kdc_dh_key_infok5int_encode_krb5_kdc_req_body_xstatASN1_STRING_datak5int_encode_krb5_auth_pack_draft9crypto_cert_select_defaultopendirX509_get_ext_d2ipkinit_1024_dhprimeBN_cmpmatching_keywordsEVP_CIPHER_CTX_key_lengthBIO_number_writtenpkinit_libdefault_stringsASN1_const_check_infinite_endk5int_decode_krb5_reply_key_packBIO_writeclpreauth_pkinit_initvtstrncasecmpfree_krb5_external_principal_identifierregfreeEVP_DigestInitdlopenX509_STORE_CTX_initEVP_CipherInit_expkinit_init_req_optsPEM_read_bio_PrivateKeycrypto_cert_iteration_endpkinit_fini_plg_crypto___errnoDH_compute_keyPEM_X509_INFO_read_biod2i_ASN1_INTEGERPKCS7_add_signerregerrorpkinit_init_identity_optsBN_bin2bnPKCS7_ISSUER_AND_SERIAL_freestrncpysk_numk5int_decode_krb5_reply_key_pack_draft9client_process_dh_fxstatk5int_decode_krb5_pa_pk_as_repk5int_decode_krb5_pa_pk_as_reqcrypto_cert_iteration_nextX509_CRL_freekrb5_build_principal_extk5int_decode_krb5_auth_packBIO_pushBN_to_ASN1_INTEGERkrb5_free_principalpkinit_4096_dhprimekrb5int_zapX509_NAME_onelinekrb5int_asprintf__assertfree_krb5_auth_pack_draft9OBJ_createstrlenk5int_decode_krb5_auth_pack_draft9pkinit_init_plg_cryptosupported_kdf_alg_idsX509_STORE_set_flagscrypto_retrieve_signer_identitykrb5_free_data_contentsinit_krb5_auth_pack_draft9reallocserver_process_dhERR_load_crypto_stringsget_rfc2409_prime_1024BN_set_wordfputcgetenvpkinit_fini_identity_cryptoBIO_f_cipherX509_INFO_freekrb5_c_keylengthsstrncmpfopenEVP_sha256PKCS7_verifycrypto_free_cert_infoinit_krb5_pa_pk_as_rep_draft9strtok_rX509_get_ext_by_NIDfree_krb5_reply_key_pack_draft9krb5int_buf_addBIO_newsha512_idpkinit_copy_krb5_datafcloseEXTENDED_KEY_USAGE_freeencode_krb5_enc_dataBIO_readk5int_decode_krb5_principal_namepkinit_kdcdefault_integerX509_get_issuer_nameASN1_INTEGER_to_BNsk_pushkrb5int_buf_dataBIO_new_mem_bufkrb5int_buf_init_dynamiccreate_krb5_trustedCertifiersfilenofree_krb5_algorithm_identifiersk5int_encode_krb5_td_trusted_certifiersBN_num_bitsX509_get_subject_namei2d_PKCS7_ISSUER_AND_SERIALclosedird2i_PKCS12_fpcreate_krb5_supportedCMSTypesk5int_encode_krb5_pa_pk_as_repX509_cmpk5int_encode_krb5_pa_pk_as_reqX509_get_serialNumbersnprintfASN1_INTEGER_freeEVP_DigestFinal_exPKCS7_ISSUER_AND_SERIAL_newfree_krb5_reply_key_packpkinit_fini_req_optsASN1_OCTET_STRING_seti2d_X509_ALGORkrb5_c_random_to_keyASN1_STRING_dupDH_sizeOBJ_nid2objASN1_STRING_freeinit_krb5_reply_key_packkrb5int_buf_lenEVP_MD_CTX_cleanupk5int_encode_krb5_reply_key_packX509_CRL_cmp_lib_versionBIO_free_allEVP_sha1asn1_GetSequencei2d_X509_NAME_etextasn1_const_FinishPKCS7_encryptX509_NAME_setOBJ_nid2snpkinit_libdefault_stringkrb5int_tracek5int_encode_krb5_pa_pk_as_rep_draft9init_krb5_reply_key_pack_draft9SHA1_InitBIO_new_filecrypto_retrieve_cert_sansX509_freePKCS7_add_signed_attributeserver_check_dhERR_error_stringSHA1_Updatekrb5_c_valid_enctypeX509_STORE_CTX_get1_chainfree_krb5_auth_packkrb5_encrypt_helperdh_oid_DYNAMICdlsymkrb5_pkinit_sha512_oidkrb5_pkinit_sha256_oidi2d_PKCS7init_krb5_auth_packcrypto_cert_iteration_beginkrb5_principal_comparesk_pop_freepkinit_process_td_trusted_certifiersDH_freei2d_ASN1_OBJECTASN1_STRING_lengthEVP_des_ede3_cbccrypto_cert_releasek5int_encode_krb5_auth_packEVP_DigestFinalpkinit_init_plg_optsBIO_freestrcasecmpinit_krb5_pa_pk_as_req_draft9krb5_pkinit_sha512_oid_lenk5int_encode_krb5_td_dh_parametersPKCS12_freeX509_NAME_print_exSHA1_Finalsk_freeDH_check_pub_keyX509_check_private_keyASN1_object_sizecms_signeddata_verifyprint_buffer_binkrb5_c_fx_cf2_simpleX509_STORE_CTX_cleanupEVP_MD_CTX_initpkinit_create_td_trusted_certifiersX509_ALGOR_freekrb5_free_keyblock_contentsEVP_get_cipherbynamepkinit_fini_identity_optsPKCS7_newPKCS7_freeBIO_s_filepkinit_alg_agility_kdfBN_rshift1PKCS7_SIGNED_new_lxstatX509_STORE_newstrchrprint_bufferreaddirfree_krb5_pa_pk_as_req_draft9krb5_pkinit_sha1_oidASN1_INTEGER_getkrb5_parse_nameOPENSSL_add_all_algorithms_noconfASN1_get_objectASN1_item_i2dASN1_STRING_cmpX509_ALGOR_newcrypto_check_cert_ekukrb5_copy_keyblock_contentsGENERAL_NAME_freeOBJ_cleanuppkinit_fini_req_cryptomemchrkrb5int_buf_add_fmtOBJ_txt2nidkrb5_free_unparsed_namepkinit_libdefault_integeranotate anotate anotate8 40$0`<HОT`anotate anotateH D@h@t@anotate anotate anotate anotate anotate  @(#)types.h 1.86 07/09/20 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)stdio.h 1.84 04/09/28 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)in.h 1.55 09/05/27 SMI@(#)socket_impl.h 1.1 05/08/02 SMI@(#)un.h 1.11 02/10/02 SMI@(#)if_dl.h 1.10 03/05/21 SMI@(#)stream.h 1.115 08/07/22 SMI@(#)vnode.h 1.133 09/07/17 SMI@(#)t_lock.h 1.45 98/02/01 SMI@(#)machlock.h 1.25 04/07/19 SMI@(#)param.h 1.82 06/01/30 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)mutex.h 1.21 07/04/04 SMI@(#)rwlock.h 1.9 98/02/18 SMI@(#)semaphore.h 1.5 98/02/01 SMI@(#)condvar.h 1.14 04/10/21 SMI@(#)rwstlock.h 1.4 04/11/09 SMI@(#)ksynch.h 1.6 97/10/22 SMI@(#)cred.h 1.27 06/05/03 SMI@(#)uio.h 1.34 09/06/15 SMI@(#)resource.h 1.37 07/02/07 SMI@(#)seg_enum.h 1.9 09/07/02 SMI@(#)kstat.h 1.22 07/02/02 SMI@(#)kmem.h 1.38 09/05/07 SMI@(#)vmem.h 1.12 05/06/27 SMI@(#)poll.h 1.28 98/11/23 SMI@(#)strmdep.h 1.10 98/01/06 SMI@(#)model.h 1.24 04/09/28 SMI@(#)strft.h 1.2 00/03/17 SMI@(#)byteorder.h 1.18 04/09/28 SMI@(#)inet.h 1.21 08/01/04 SMI@(#)socket.h 1.78 08/01/18 SMI@(#)netconfig.h 1.24 04/02/27 SMI@(#)netdb.h 1.30 03/12/04 SMI@(#)if.h 1.38 07/03/20 SMI@(#)filio.h 1.38 08/06/06 SMI@(#)ioccom.h 1.14 97/10/22 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)stat.h 1.11 04/09/28 SMI@(#)stat_impl.h 1.4 03/12/04 SMI@(#)file.h 1.70 07/03/05 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)stdio.h 1.84 04/09/28 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)types.h 1.86 07/09/20 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)in.h 1.55 09/05/27 SMI@(#)socket_impl.h 1.1 05/08/02 SMI@(#)un.h 1.11 02/10/02 SMI@(#)if_dl.h 1.10 03/05/21 SMI@(#)stream.h 1.115 08/07/22 SMI@(#)vnode.h 1.133 09/07/17 SMI@(#)t_lock.h 1.45 98/02/01 SMI@(#)machlock.h 1.25 04/07/19 SMI@(#)param.h 1.82 06/01/30 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)mutex.h 1.21 07/04/04 SMI@(#)rwlock.h 1.9 98/02/18 SMI@(#)semaphore.h 1.5 98/02/01 SMI@(#)condvar.h 1.14 04/10/21 SMI@(#)rwstlock.h 1.4 04/11/09 SMI@(#)ksynch.h 1.6 97/10/22 SMI@(#)cred.h 1.27 06/05/03 SMI@(#)uio.h 1.34 09/06/15 SMI@(#)resource.h 1.37 07/02/07 SMI@(#)seg_enum.h 1.9 09/07/02 SMI@(#)kstat.h 1.22 07/02/02 SMI@(#)kmem.h 1.38 09/05/07 SMI@(#)vmem.h 1.12 05/06/27 SMI@(#)poll.h 1.28 98/11/23 SMI@(#)strmdep.h 1.10 98/01/06 SMI@(#)model.h 1.24 04/09/28 SMI@(#)strft.h 1.2 00/03/17 SMI@(#)byteorder.h 1.18 04/09/28 SMI@(#)inet.h 1.21 08/01/04 SMI@(#)socket.h 1.78 08/01/18 SMI@(#)netconfig.h 1.24 04/02/27 SMI@(#)netdb.h 1.30 03/12/04 SMI@(#)if.h 1.38 07/03/20 SMI@(#)filio.h 1.38 08/06/06 SMI@(#)ioccom.h 1.14 97/10/22 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)stat.h 1.11 04/09/28 SMI@(#)stat_impl.h 1.4 03/12/04 SMI@(#)file.h 1.70 07/03/05 SMI@(#)stddef.h 1.18 04/09/28 SMI@(#)stddef_iso.h 1.2 03/03/06 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)stdio.h 1.84 04/09/28 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)types.h 1.86 07/09/20 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)ctype.h 1.35 04/09/28 SMI@(#)ctype_iso.h 1.3 04/09/28 SMI@(#)ctype_c99.h 1.2 04/09/28 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)stddef.h 1.18 04/09/28 SMI@(#)stddef_iso.h 1.2 03/03/06 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)stdio.h 1.84 04/09/28 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)types.h 1.86 07/09/20 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)ctype.h 1.35 04/09/28 SMI@(#)ctype_iso.h 1.3 04/09/28 SMI@(#)ctype_c99.h 1.2 04/09/28 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)dlfcn.h 1.45 05/08/08 SMI@(#)auxv.h 1.38 09/07/16 SMI@(#)auxv_386.h 1.5 09/06/11 SMI@(#)stat.h 1.11 04/09/28 SMI@(#)stat_impl.h 1.4 03/12/04 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)stddef.h 1.18 04/09/28 SMI@(#)stddef_iso.h 1.2 03/03/06 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)stdio.h 1.84 04/09/28 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)dlfcn.h 1.45 05/08/08 SMI@(#)types.h 1.86 07/09/20 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)auxv.h 1.38 09/07/16 SMI@(#)auxv_386.h 1.5 09/06/11 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)dirent.h 1.37 04/09/28 SMI@(#)dirent.h 1.36 04/09/28 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)stddef.h 1.18 04/09/28 SMI@(#)stddef_iso.h 1.2 03/03/06 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)stdio.h 1.84 04/09/28 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)types.h 1.86 07/09/20 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)in.h 1.55 09/05/27 SMI@(#)socket_impl.h 1.1 05/08/02 SMI@(#)un.h 1.11 02/10/02 SMI@(#)if_dl.h 1.10 03/05/21 SMI@(#)stream.h 1.115 08/07/22 SMI@(#)vnode.h 1.133 09/07/17 SMI@(#)t_lock.h 1.45 98/02/01 SMI@(#)machlock.h 1.25 04/07/19 SMI@(#)param.h 1.82 06/01/30 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)mutex.h 1.21 07/04/04 SMI@(#)rwlock.h 1.9 98/02/18 SMI@(#)semaphore.h 1.5 98/02/01 SMI@(#)condvar.h 1.14 04/10/21 SMI@(#)rwstlock.h 1.4 04/11/09 SMI@(#)ksynch.h 1.6 97/10/22 SMI@(#)cred.h 1.27 06/05/03 SMI@(#)uio.h 1.34 09/06/15 SMI@(#)resource.h 1.37 07/02/07 SMI@(#)seg_enum.h 1.9 09/07/02 SMI@(#)kstat.h 1.22 07/02/02 SMI@(#)kmem.h 1.38 09/05/07 SMI@(#)vmem.h 1.12 05/06/27 SMI@(#)poll.h 1.28 98/11/23 SMI@(#)strmdep.h 1.10 98/01/06 SMI@(#)model.h 1.24 04/09/28 SMI@(#)strft.h 1.2 00/03/17 SMI@(#)byteorder.h 1.18 04/09/28 SMI@(#)inet.h 1.21 08/01/04 SMI@(#)socket.h 1.78 08/01/18 SMI@(#)netconfig.h 1.24 04/02/27 SMI@(#)netdb.h 1.30 03/12/04 SMI@(#)if.h 1.38 07/03/20 SMI@(#)filio.h 1.38 08/06/06 SMI@(#)ioccom.h 1.14 97/10/22 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)stat.h 1.11 04/09/28 SMI@(#)stat_impl.h 1.4 03/12/04 SMI@(#)file.h 1.70 07/03/05 SMI@(#)stddef.h 1.18 04/09/28 SMI@(#)stddef_iso.h 1.2 03/03/06 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)stdio.h 1.84 04/09/28 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)dlfcn.h 1.45 05/08/08 SMI@(#)types.h 1.86 07/09/20 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)auxv.h 1.38 09/07/16 SMI@(#)auxv_386.h 1.5 09/06/11 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)dirent.h 1.37 04/09/28 SMI@(#)dirent.h 1.36 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)stddef.h 1.18 04/09/28 SMI@(#)stddef_iso.h 1.2 03/03/06 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)stdio.h 1.84 04/09/28 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)types.h 1.86 07/09/20 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)regex.h 1.25 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)stddef.h 1.18 04/09/28 SMI@(#)stddef_iso.h 1.2 03/03/06 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13@(#)errno.h 1.17 03/01/03 SMI@(#)errno.h 1.20 00/01/12 SMI@(#)string.h 1.27 07/01/14 SMI@(#)string_iso.h 1.5 04/06/18 SMI@(#)feature_tests.h 1.25 07/02/02 SMI@(#)ccompile.h 1.2 04/11/08 SMI@(#)isa_defs.h 1.29 08/06/06 SMI@(#)stdio.h 1.84 04/09/28 SMI@(#)stdio_iso.h 1.8 05/08/16 SMI@(#)va_list.h 1.15 04/11/19 SMI@(#)stdio_tag.h 1.4 04/09/28 SMI@(#)stdio_impl.h 1.15 07/03/05 SMI@(#)stdio_c99.h 1.2 04/03/29 SMI@(#)stdlib.h 1.51 04/06/30 SMI@(#)stdlib_iso.h 1.9 04/09/28 SMI@(#)stdlib_c99.h 1.2 04/03/29 SMI@(#)dlfcn.h 1.45 05/08/08 SMI@(#)types.h 1.86 07/09/20 SMI@(#)machtypes.h 1.11 04/09/28 SMI@(#)machtypes.h 1.2 04/09/28 SMI@(#)int_types.h 1.10 04/09/28 SMI@(#)select.h 1.19 04/01/28 SMI@(#)time_impl.h 1.11 05/05/19 SMI@(#)time.h 2.77 09/06/02 SMI@(#)time.h 1.45 08/01/09 SMI@(#)time_iso.h 1.4 04/09/07 SMI@(#)auxv.h 1.38 09/07/16 SMI@(#)auxv_386.h 1.5 09/06/11 SMI@(#)unistd.h 1.76 06/03/10 SMI@(#)unistd.h 1.43 06/03/10 SMI@(#)dirent.h 1.37 04/09/28 SMI@(#)dirent.h 1.36 04/09/28 SMI@(#)inet.h 1.21 08/01/04 SMI@(#)socket.h 1.78 08/01/18 SMI@(#)uio.h 1.34 09/06/15 SMI@(#)socket_impl.h 1.1 05/08/02 SMI@(#)un.h 1.11 02/10/02 SMI@(#)if_dl.h 1.10 03/05/21 SMI@(#)netconfig.h 1.24 04/02/27 SMI@(#)in.h 1.55 09/05/27 SMI@(#)stream.h 1.115 08/07/22 SMI@(#)vnode.h 1.133 09/07/17 SMI@(#)t_lock.h 1.45 98/02/01 SMI@(#)machlock.h 1.25 04/07/19 SMI@(#)param.h 1.82 06/01/30 SMI@(#)mutex.h 1.21 07/04/04 SMI@(#)rwlock.h 1.9 98/02/18 SMI@(#)semaphore.h 1.5 98/02/01 SMI@(#)condvar.h 1.14 04/10/21 SMI@(#)rwstlock.h 1.4 04/11/09 SMI@(#)ksynch.h 1.6 97/10/22 SMI@(#)cred.h 1.27 06/05/03 SMI@(#)resource.h 1.37 07/02/07 SMI@(#)seg_enum.h 1.9 09/07/02 SMI@(#)kstat.h 1.22 07/02/02 SMI@(#)kmem.h 1.38 09/05/07 SMI@(#)vmem.h 1.12 05/06/27 SMI@(#)poll.h 1.28 98/11/23 SMI@(#)strmdep.h 1.10 98/01/06 SMI@(#)model.h 1.24 04/09/28 SMI@(#)strft.h 1.2 00/03/17 SMI@(#)byteorder.h 1.18 04/09/28 SMI@(#)assert.h 1.10 04/05/18 SMI@(#)stdarg.h 1.47 04/09/28 SMI@(#)stdarg_iso.h 1.4 04/11/19 SMI@(#)va_impl.h 1.1 04/11/19 SMI@(#)stdarg_c99.h 1.2 04/09/28 SMI@(#)limits.h 1.59 04/08/24 SMI@(#)limits_iso.h 1.2 03/12/04 SMI@(#)int_limits.h 1.9 04/09/28 SMI@(#)fcntl.h 1.17 06/03/10 SMI@(#)fcntl.h 1.52 07/03/05 SMI@(#)fnmatch.h 1.3 94/10/11 SMI@(#)pthread.h 1.37 04/09/28 SMI@(#)sched.h 1.10 03/03/06 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)stdint.h 1.1 03/12/04 SMI@(#)int_const.h 1.5 04/09/28 SMI@(#)inttypes.h 1.4 04/04/29 SMI@(#)inttypes.h 1.3 03/12/04 SMI@(#)int_fmtio.h 1.6 04/09/28 SMI@(#)locale.h 1.20 03/12/04 SMI@(#)locale_iso.h 1.3 03/12/04 SMI@(#)stddef.h 1.18 04/09/28 SMI@(#)stddef_iso.h 1.2 03/03/06 SMIacomp: Sun C 5.11 SunOS_i386 145355-01 2010/10/11as: Sun Compiler Common 12.2 SunOS_i386 2010/08/13ld: Software Generation Utilities - Solaris Link Editors: 5.10-1.497epkinit_accessor.c /var/tmp/krb5-1.11/src/plugins/preauth/pkinit /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DHAVE_CONFIG_H -DPKINIT_DYNOBJEXT='""' -I../../../include -I../../../include -I../../../include/krb5 -I. -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c pkinit_accessor.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0[pkinit_srv.c /var/tmp/krb5-1.11/src/plugins/preauth/pkinit /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DHAVE_CONFIG_H -DPKINIT_DYNOBJEXT='""' -I../../../include -I../../../include -I../../../include/krb5 -I. -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c pkinit_srv.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0][,pkinit_lib.c /var/tmp/krb5-1.11/src/plugins/preauth/pkinit /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DHAVE_CONFIG_H -DPKINIT_DYNOBJEXT='""' -I../../../include -I../../../include -I../../../include/krb5 -I. -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c pkinit_lib.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0]Bpkinit_clnt.c /var/tmp/krb5-1.11/src/plugins/preauth/pkinit /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DHAVE_CONFIG_H -DPKINIT_DYNOBJEXT='""' -I../../../include -I../../../include -I../../../include/krb5 -I. -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c pkinit_clnt.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0 oXpkinit_kdf_constants.c /var/tmp/krb5-1.11/src/plugins/preauth/pkinit /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DHAVE_CONFIG_H -DPKINIT_DYNOBJEXT='""' -I../../../include -I../../../include -I../../../include/krb5 -I. -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c pkinit_kdf_constants.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0fcnpkinit_profile.c /var/tmp/krb5-1.11/src/plugins/preauth/pkinit /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DHAVE_CONFIG_H -DPKINIT_DYNOBJEXT='""' -I../../../include -I../../../include -I../../../include/krb5 -I. -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c pkinit_profile.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0epkinit_identity.c /var/tmp/krb5-1.11/src/plugins/preauth/pkinit /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DHAVE_CONFIG_H -DPKINIT_DYNOBJEXT='""' -I../../../include -I../../../include -I../../../include/krb5 -I. -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c pkinit_identity.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0$epkinit_matching.c /var/tmp/krb5-1.11/src/plugins/preauth/pkinit /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DHAVE_CONFIG_H -DPKINIT_DYNOBJEXT='""' -I../../../include -I../../../include -I../../../include/krb5 -I. -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c pkinit_matching.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0qpkinit_crypto_openssl.c /var/tmp/krb5-1.11/src/plugins/preauth/pkinit /opt/solstudio12.2/prod/bin/cc -KPIC -DSHARED -DHAVE_CONFIG_H -DPKINIT_DYNOBJEXT='""' -I../../../include -I../../../include -I../../../include/krb5 -I. -DKRB5_DEPRECATED='1' -DKRB5_PRIVATE -I/usr/local/include -L/usr/local/lib -I/usr/local/include -L/usr/local/lib -errtags=yes -errwarn=E_BAD_PTR_INT_COMBINATION,E_BAD_PTR_INT_COMB_ARG,E_PTR_TO_VOID_IN_ARITHMETIC,E_NO_IMPLICIT_DECL_ALLOWED,E_ATTRIBUTE_PARAM_UNDEFINED -D_REENTRANT -c pkinit_crypto_openssl.cXa;P;R=Sun C 5.11 SunOS_i386 145355-01 2010/10/11;backend;raw;cd;DBG_GEN 5.3.0YS /var/tmp/krb5-1.11/src/plugins/preauth/pkinitpkinit_accessor.cTN /var/tmp/krb5-1.11/src/plugins/preauth/pkinitpkinit_srv.cTN /var/tmp/krb5-1.11/src/plugins/preauth/pkinitpkinit_lib.cUO /var/tmp/krb5-1.11/src/plugins/preauth/pkinitpkinit_clnt.c^X /var/tmp/krb5-1.11/src/plugins/preauth/pkinitpkinit_kdf_constants.cXR /var/tmp/krb5-1.11/src/plugins/preauth/pkinitpkinit_profile.cYS /var/tmp/krb5-1.11/src/plugins/preauth/pkinitpkinit_identity.cYS /var/tmp/krb5-1.11/src/plugins/preauth/pkinitpkinit_matching.c_Y /var/tmp/krb5-1.11/src/plugins/preauth/pkinitpkinit_crypto_openssl.c DD% DD% DD% DD% DD% DD% DD% DD% DD%.hash.dynsym.dynstr.SUNW_version.rel.got.rel.data.rel.picdata.rel.plt.text.init.fini.rodata.rodata1.dynamic.bssf.bss.symtab.strtab.annotate.comment.debug_info.debug_line.debug_abbrev.shstrtab  ( ( "H&H&oDD % B8D8D . BXYXY8 B`\`\E B\\  IggPN||T|S|SZSS`SS9hXXH)q24zйй<йй_n [6oP\XRPfAP 070701000a256b000081a40000000000000000000000015125a0740028fad8000000b500010002ffffffffffffffff0000002200000000root/usr/local/lib/libkrb5.so.3.3ELF4(4 (! |   !"$%'()+,-0123567:<@CDEGHIKLMORSTVWXZ[\]_`abcegiklmopqsuvxyz{}~    !"&()*+,./12345689:;<>ACFHJKLMRSTUVX\]`abehkmnoprstuvwxyz{  !"%&'(*+,-.0135678:;<=ABCGHJLMNOQSTUVXYZ\]_acehilmnopqty{|~