]> git.pld-linux.org Git - packages/ppp.git/blob - ppp-rechallenge.patch
- srp by default off , turn on from spec
[packages/ppp.git] / ppp-rechallenge.patch
1 ===================================================================
2 RCS file: /cvsroot/ppp/pppd/chap-new.c,v
3 retrieving revision 1.6
4 retrieving revision 1.7
5 diff -u -r1.6 -r1.7
6 --- ppp/pppd/chap-new.c 2004/11/04 10:02:26     1.6
7 +++ ppp/pppd/chap-new.c 2005/07/10 07:31:26     1.7
8 @@ -28,7 +28,7 @@
9   * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
10   */
11  
12 -#define RCSID  "$Id$"
13 +#define RCSID  "$Id$"
14  
15  #include <stdlib.h>
16  #include <string.h>
17 @@ -96,6 +96,7 @@
18         int challenge_xmits;
19         int challenge_pktlen;
20         unsigned char challenge[CHAL_MAX_PKTLEN];
21 +       char message[256];
22  } server;
23  
24  /* Values for flags in chap_client_state and chap_server_state */
25 @@ -310,15 +311,12 @@
26         int (*verifier)(char *, char *, int, struct chap_digest_type *,
27                 unsigned char *, unsigned char *, char *, int);
28         char rname[MAXNAMELEN+1];
29 -       char message[256];
30  
31         if ((ss->flags & LOWERUP) == 0)
32                 return;
33         if (id != ss->challenge[PPP_HDRLEN+1] || len < 2)
34                 return;
35 -       if ((ss->flags & AUTH_DONE) == 0) {
36 -               if ((ss->flags & CHALLENGE_VALID) == 0)
37 -                       return;
38 +       if (ss->flags & CHALLENGE_VALID) {
39                 response = pkt;
40                 GETCHAR(response_len, pkt);
41                 len -= response_len + 1;        /* length of name */
42 @@ -326,7 +324,6 @@
43                 if (len < 0)
44                         return;
45  
46 -               ss->flags &= ~CHALLENGE_VALID;
47                 if (ss->flags & TIMEOUT_PENDING) {
48                         ss->flags &= ~TIMEOUT_PENDING;
49                         UNTIMEOUT(chap_timeout, ss);
50 @@ -346,39 +343,43 @@
51                         verifier = chap_verify_response;
52                 ok = (*verifier)(name, ss->name, id, ss->digest,
53                                  ss->challenge + PPP_HDRLEN + CHAP_HDRLEN,
54 -                                response, message, sizeof(message));
55 +                                response, ss->message, sizeof(ss->message));
56                 if (!ok || !auth_number()) {
57                         ss->flags |= AUTH_FAILED;
58                         warn("Peer %q failed CHAP authentication", name);
59                 }
60 -       }
61 +       } else if ((ss->flags & AUTH_DONE) == 0)
62 +               return;
63  
64         /* send the response */
65         p = outpacket_buf;
66         MAKEHEADER(p, PPP_CHAP);
67 -       mlen = strlen(message);
68 +       mlen = strlen(ss->message);
69         len = CHAP_HDRLEN + mlen;
70         p[0] = (ss->flags & AUTH_FAILED)? CHAP_FAILURE: CHAP_SUCCESS;
71         p[1] = id;
72         p[2] = len >> 8;
73         p[3] = len;
74         if (mlen > 0)
75 -               memcpy(p + CHAP_HDRLEN, message, mlen);
76 +               memcpy(p + CHAP_HDRLEN, ss->message, mlen);
77         output(0, outpacket_buf, PPP_HDRLEN + len);
78  
79 -       if ((ss->flags & AUTH_DONE) == 0) {
80 -               ss->flags |= AUTH_DONE;
81 +       if (ss->flags & CHALLENGE_VALID) {
82 +               ss->flags &= ~CHALLENGE_VALID;
83                 if (ss->flags & AUTH_FAILED) {
84                         auth_peer_fail(0, PPP_CHAP);
85                 } else {
86 -                       auth_peer_success(0, PPP_CHAP, ss->digest->code,
87 -                                         name, strlen(name));
88 +                       if ((ss->flags & AUTH_DONE) == 0)
89 +                               auth_peer_success(0, PPP_CHAP,
90 +                                                 ss->digest->code,
91 +                                                 name, strlen(name));
92                         if (chap_rechallenge_time) {
93                                 ss->flags |= TIMEOUT_PENDING;
94                                 TIMEOUT(chap_timeout, ss,
95                                         chap_rechallenge_time);
96                         }
97                 }
98 +               ss->flags |= AUTH_DONE;
99         }
100  }
101  
102
This page took 0.029773 seconds and 3 git commands to generate.