|
Lines 101-106
Link Here
|
| 101 |
int mm_answer_auth2_read_banner(int, Buffer *); |
101 |
int mm_answer_auth2_read_banner(int, Buffer *); |
| 102 |
int mm_answer_authserv(int, Buffer *); |
102 |
int mm_answer_authserv(int, Buffer *); |
| 103 |
int mm_answer_authpassword(int, Buffer *); |
103 |
int mm_answer_authpassword(int, Buffer *); |
|
|
104 |
#ifdef KRB4 |
| 105 |
int mm_answer_authkrb4(int, Buffer *); |
| 106 |
#endif |
| 107 |
#ifdef AFS |
| 108 |
int mm_answer_krb4tgt(int, Buffer *); |
| 109 |
int mm_answer_afstoken(int, Buffer *); |
| 110 |
#endif |
| 111 |
#ifdef KRB5 |
| 112 |
int mm_answer_authkrb5(int, Buffer *); |
| 113 |
int mm_answer_krb5tgt(int, Buffer *); |
| 114 |
#endif |
| 104 |
int mm_answer_bsdauthquery(int, Buffer *); |
115 |
int mm_answer_bsdauthquery(int, Buffer *); |
| 105 |
int mm_answer_bsdauthrespond(int, Buffer *); |
116 |
int mm_answer_bsdauthrespond(int, Buffer *); |
| 106 |
int mm_answer_skeyquery(int, Buffer *); |
117 |
int mm_answer_skeyquery(int, Buffer *); |
|
Lines 188-197
Link Here
|
| 188 |
{MONITOR_REQ_KEYALLOWED, MON_ISAUTH, mm_answer_keyallowed}, |
199 |
{MONITOR_REQ_KEYALLOWED, MON_ISAUTH, mm_answer_keyallowed}, |
| 189 |
{MONITOR_REQ_RSACHALLENGE, MON_ONCE, mm_answer_rsa_challenge}, |
200 |
{MONITOR_REQ_RSACHALLENGE, MON_ONCE, mm_answer_rsa_challenge}, |
| 190 |
{MONITOR_REQ_RSARESPONSE, MON_ONCE|MON_AUTHDECIDE, mm_answer_rsa_response}, |
201 |
{MONITOR_REQ_RSARESPONSE, MON_ONCE|MON_AUTHDECIDE, mm_answer_rsa_response}, |
|
|
202 |
#ifdef KRB4 |
| 203 |
{MONITOR_REQ_AUTHKRB4, MON_AUTH, mm_answer_authkrb4}, |
| 204 |
#endif |
| 205 |
#ifdef KRB5 |
| 206 |
{MONITOR_REQ_AUTHKRB5, MON_AUTH, mm_answer_authkrb5}, |
| 207 |
{MONITOR_REQ_KRB5TGT, MON_ONCE, mm_answer_krb5tgt}, |
| 208 |
#endif |
| 191 |
#ifdef BSD_AUTH |
209 |
#ifdef BSD_AUTH |
| 192 |
{MONITOR_REQ_BSDAUTHQUERY, MON_ISAUTH, mm_answer_bsdauthquery}, |
210 |
{MONITOR_REQ_BSDAUTHQUERY, MON_ISAUTH, mm_answer_bsdauthquery}, |
| 193 |
{MONITOR_REQ_BSDAUTHRESPOND, MON_AUTH,mm_answer_bsdauthrespond}, |
211 |
{MONITOR_REQ_BSDAUTHRESPOND, MON_AUTH,mm_answer_bsdauthrespond}, |
| 194 |
#endif |
212 |
#endif |
|
|
213 |
#ifdef AFS |
| 214 |
{MONITOR_REQ_KRB4TGT, MON_ONCE, mm_answer_krb4tgt}, |
| 215 |
{MONITOR_REQ_AFSTOKEN, MON_ONCE, mm_answer_afstoken}, |
| 216 |
#endif |
| 195 |
#ifdef SKEY |
217 |
#ifdef SKEY |
| 196 |
{MONITOR_REQ_SKEYQUERY, MON_ISAUTH, mm_answer_skeyquery}, |
218 |
{MONITOR_REQ_SKEYQUERY, MON_ISAUTH, mm_answer_skeyquery}, |
| 197 |
{MONITOR_REQ_SKEYRESPOND, MON_AUTH, mm_answer_skeyrespond}, |
219 |
{MONITOR_REQ_SKEYRESPOND, MON_AUTH, mm_answer_skeyrespond}, |
|
Lines 719-724
Link Here
|
| 719 |
} |
741 |
} |
| 720 |
#endif |
742 |
#endif |
| 721 |
|
743 |
|
|
|
744 |
#ifdef KRB4 |
| 745 |
int |
| 746 |
mm_answer_authkrb4(int socket, Buffer *m) |
| 747 |
{ |
| 748 |
KTEXT_ST auth; |
| 749 |
KTEXT_ST reply; |
| 750 |
char *localuser, *auth_tmp; |
| 751 |
int authenticated, authlen; |
| 752 |
|
| 753 |
auth_tmp = buffer_get_string(m, &authlen); |
| 754 |
if (authlen >= MAX_KTXT_LEN) |
| 755 |
fatal("%s: received too large KRB4 auth from privsep", __func__); |
| 756 |
memcpy(auth.dat, auth_tmp, authlen); |
| 757 |
auth.length = authlen; |
| 758 |
memset(auth_tmp,0, authlen); |
| 759 |
xfree(auth_tmp); |
| 760 |
/* Only authenticate if the context is valid */ |
| 761 |
authenticated = options.kerberos_authentication && |
| 762 |
authctxt->valid && |
| 763 |
auth_krb4(authctxt, &auth, &localuser, &reply); |
| 764 |
|
| 765 |
memset(auth.dat, 0, authlen); |
| 766 |
|
| 767 |
buffer_clear(m); |
| 768 |
buffer_put_int(m, authenticated); |
| 769 |
if(authenticated) { |
| 770 |
buffer_put_cstring(m, localuser); |
| 771 |
buffer_put_string(m, reply.dat, reply.length); |
| 772 |
} |
| 773 |
|
| 774 |
memset(reply.dat, 0, reply.length); |
| 775 |
|
| 776 |
debug3("%s: sending result %d", __func__, authenticated); |
| 777 |
mm_request_send(socket, MONITOR_ANS_AUTHKRB4, m); |
| 778 |
|
| 779 |
auth_method = "KRB4.klogin"; |
| 780 |
|
| 781 |
/* Causes monitor loop to terminate if authenticated */ |
| 782 |
return (authenticated); |
| 783 |
} |
| 784 |
#endif /* KRB4 */ |
| 785 |
|
| 786 |
#ifdef AFS |
| 787 |
int |
| 788 |
mm_answer_krb4tgt(int socket, Buffer *m) |
| 789 |
{ |
| 790 |
char *tgt_string; |
| 791 |
int tgt_length; |
| 792 |
|
| 793 |
int accepted; |
| 794 |
|
| 795 |
tgt_string = buffer_get_string(m, &tgt_length); |
| 796 |
|
| 797 |
accepted = options.kerberos_tgt_passing && |
| 798 |
auth_krb4_tgt(authctxt, tgt_string, tgt_length); |
| 799 |
memset(tgt_string, 0, tgt_length); |
| 800 |
|
| 801 |
buffer_clear(m); |
| 802 |
buffer_put_int(m, accepted); |
| 803 |
debug3("%s: sending result %d", __func__, accepted); |
| 804 |
mm_request_send(socket, MONITOR_ANS_KRB4TGT, m); |
| 805 |
|
| 806 |
return (0); |
| 807 |
} |
| 808 |
|
| 809 |
int |
| 810 |
mm_answer_afstoken(int socket, Buffer *m) |
| 811 |
{ |
| 812 |
char *token_string; |
| 813 |
int token_length; |
| 814 |
|
| 815 |
int accepted; |
| 816 |
|
| 817 |
token_string = buffer_get_string(m, &token_length); |
| 818 |
|
| 819 |
accepted = options.afs_token_passing && |
| 820 |
k_hasafs() && |
| 821 |
auth_afs_token(authctxt, token_string, token_length); |
| 822 |
memset(token_string, 0, token_length); |
| 823 |
|
| 824 |
buffer_clear(m); |
| 825 |
buffer_put_int(m, accepted); |
| 826 |
debug3("%s: sending result %d", __func__, accepted); |
| 827 |
mm_request_send(socket, MONITOR_ANS_AFSTOKEN, m); |
| 828 |
|
| 829 |
return (0); |
| 830 |
} |
| 831 |
#endif /* AFS */ |
| 832 |
|
| 833 |
#ifdef KRB5 |
| 834 |
int |
| 835 |
mm_answer_authkrb5(int socket, Buffer *m) |
| 836 |
{ |
| 837 |
krb5_data auth; |
| 838 |
krb5_data reply; |
| 839 |
char *localuser; |
| 840 |
int authenticated; |
| 841 |
|
| 842 |
auth.data = buffer_get_string(m, &auth.length); |
| 843 |
|
| 844 |
/* Only authenticate if the context is valid */ |
| 845 |
authenticated = options.kerberos_authentication && |
| 846 |
authctxt->valid && |
| 847 |
auth_krb5(authctxt, &auth, &localuser, &reply); |
| 848 |
|
| 849 |
memset(auth.data, 0, auth.length); |
| 850 |
xfree(auth.data); |
| 851 |
|
| 852 |
buffer_clear(m); |
| 853 |
buffer_put_int(m, authenticated); |
| 854 |
if(authenticated) { |
| 855 |
buffer_put_cstring(m, localuser); |
| 856 |
buffer_put_string(m, reply.data, reply.length); |
| 857 |
} |
| 858 |
|
| 859 |
memset(reply.data, 0, reply.length); |
| 860 |
xfree(reply.data); |
| 861 |
|
| 862 |
debug3("%s: sending result %d", __func__, authenticated); |
| 863 |
mm_request_send(socket, MONITOR_ANS_AUTHKRB5, m); |
| 864 |
|
| 865 |
auth_method = "KRB5.klogin"; |
| 866 |
|
| 867 |
/* Causes monitor loop to terminate if authenticated */ |
| 868 |
return (authenticated); |
| 869 |
} |
| 870 |
|
| 871 |
int |
| 872 |
mm_answer_krb5tgt(int socket, Buffer *m) |
| 873 |
{ |
| 874 |
krb5_data tgt; |
| 875 |
|
| 876 |
int accepted; |
| 877 |
|
| 878 |
tgt.data = buffer_get_string(m, &(tgt.length)); |
| 879 |
|
| 880 |
accepted = options.kerberos_tgt_passing && |
| 881 |
auth_krb5_tgt(authctxt, &tgt); |
| 882 |
memset(tgt.data, 0, tgt.length); |
| 883 |
|
| 884 |
buffer_clear(m); |
| 885 |
buffer_put_int(m, accepted); |
| 886 |
debug3("%s: sending result %d", __func__, accepted); |
| 887 |
mm_request_send(socket, MONITOR_ANS_KRB5TGT, m); |
| 888 |
|
| 889 |
return (0); |
| 890 |
} |
| 891 |
#endif /* KRB5 */ |
| 892 |
|
| 722 |
#ifdef USE_PAM |
893 |
#ifdef USE_PAM |
| 723 |
int |
894 |
int |
| 724 |
mm_answer_pam_start(int socket, Buffer *m) |
895 |
mm_answer_pam_start(int socket, Buffer *m) |