X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fplugins%2Fwinbind.c;h=0c395c34711af6cef39d3ac01e3603f7205ebbc5;hb=HEAD;hp=71c0d038fbaa4e852ddfd90a3c7d0fae72e5c54f;hpb=fb3529ccfc1868e8563a2dcfbae7b386125fccbc;p=ppp.git diff --git a/pppd/plugins/winbind.c b/pppd/plugins/winbind.c index 71c0d03..7af6ed1 100644 --- a/pppd/plugins/winbind.c +++ b/pppd/plugins/winbind.c @@ -7,9 +7,10 @@ * * Based on the structure of the radius module. * +* Copyright 1999-2024 Paul Mackerras * Copyright (C) 2003 Andrew Bartlet * -* Copyright 1999 Paul Mackerras, Alan Curry. +* Copyright 1999 Alan Curry. * (pipe read code from passpromt.c) * * Copyright (C) 2002 Roaring Penguin Software Inc. @@ -45,13 +46,20 @@ #include #include #include +#include +#include +#include +#include #include -#include +#include +#include #include +#include #include #include #include +#include #define BUF_LEN 1024 @@ -66,7 +74,7 @@ static int set_ntlm_auth(char **argv) p = argv[0]; if (p[0] != '/') { - option_error("ntlm_auth-helper argument must be full path"); + ppp_option_error("ntlm_auth-helper argument must be full path"); return 0; } p = strdup(p); @@ -80,26 +88,16 @@ static int set_ntlm_auth(char **argv) return 1; } -static option_t Options[] = { +static struct option Options[] = { { "ntlm_auth-helper", o_special, (void *) &set_ntlm_auth, "Path to ntlm_auth executable", OPT_PRIV }, { NULL } }; -static int -winbind_secret_check(void); - -static int winbind_pap_auth(char *user, - char *passwd, - char **msgp, - struct wordlist **paddrs, - struct wordlist **popts); -static int winbind_chap_verify(char *user, char *ourname, int id, - struct chap_digest_type *digest, - unsigned char *challenge, - unsigned char *response, - char *message, int message_space); -static int winbind_allowed_address(u_int32_t addr); +static pap_check_hook_fn winbind_secret_check; +static pap_auth_hook_fn winbind_pap_auth; +static chap_verify_hook_fn winbind_chap_verify; +static int winbind_allowed_address(uint32_t addr); char pppd_version[] = PPPD_VERSION; @@ -126,7 +124,7 @@ plugin_init(void) /* Don't ask the peer for anything other than MS-CHAP or MS-CHAP V2 */ chap_mdtype_all &= (MDTYPE_MICROSOFT_V2 | MDTYPE_MICROSOFT); - add_options(Options); + ppp_add_options(Options); info("WINBIND plugin initialized."); } @@ -284,7 +282,7 @@ unsigned int run_ntlm_auth(const char *username, return NOT_AUTHENTICATED; } - forkret = safe_fork(child_in[0], child_out[1], 2); + forkret = ppp_safe_fork(child_in[0], child_out[1], 2); if (forkret == -1) { if (error_string) { *error_string = strdup("fork failed!"); @@ -435,19 +433,19 @@ unsigned int run_ntlm_auth(const char *username, } /* parent */ - if (close(child_out[0]) == -1) { - close(child_in[1]); + if (fclose(pipe_out) == -1) { + fclose(pipe_in); notice("error closing pipe?!? for child OUT[0]"); return NOT_AUTHENTICATED; } /* parent */ - if (close(child_in[1]) == -1) { + if (fclose(pipe_in) == -1) { notice("error closing pipe?!? for child IN[1]"); return NOT_AUTHENTICATED; } - while ((wait(&status) == -1) && errno == EINTR && !got_sigterm) + while ((wait(&status) == -1) && errno == EINTR && !ppp_signaled(SIGTERM)) ; if ((authenticated == AUTHENTICATED) && nt_key && !got_user_session_key) { @@ -522,7 +520,7 @@ winbind_chap_verify(char *user, char *ourname, int id, int challenge_len, response_len; char domainname[256]; char *domain; - char *username; + const char *username; char *p; unsigned char saresponse[MS_AUTH_RESPONSE_LENGTH+1]; @@ -556,7 +554,7 @@ winbind_chap_verify(char *user, char *ourname, int id, u_char *lm_response = NULL; int nt_response_size = 0; int lm_response_size = 0; - u_char session_key[16]; + u_char session_key[MD4_DIGEST_LENGTH]; if (response_len != MS_CHAP_RESPONSE_LEN) break; /* not even the right length */ @@ -608,7 +606,7 @@ winbind_chap_verify(char *user, char *ourname, int id, case CHAP_MICROSOFT_V2: { u_char Challenge[8]; - u_char session_key[MD4_SIGNATURE_SIZE]; + u_char session_key[MD4_DIGEST_LENGTH]; char *error_string = NULL; if (response_len != MS_CHAP2_RESPONSE_LEN) @@ -668,7 +666,7 @@ winbind_chap_verify(char *user, char *ourname, int id, } static int -winbind_allowed_address(u_int32_t addr) +winbind_allowed_address(uint32_t addr) { ipcp_options *wo = &ipcp_wantoptions[0]; if (wo->hisaddr !=0 && wo->hisaddr == addr) {