Produced by Araxis Merge on 11/20/2017 2:15:51 PM GMT Standard Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.
# | Location | File | Last Modified |
---|---|---|---|
1 | C:\Merge Test Files\8.0.47\java\org\apache\catalina\authenticator | BasicAuthenticator.java | Fri Sep 29 16:53:28 2017 UTC |
2 | C:\Merge Test Files\8.5.23\java\org\apache\catalina\authenticator | BasicAuthenticator.java | Thu Sep 28 11:32:16 2017 UTC |
3 | C:\Merge Test Files\9.0.1\java\org\apache\catalina\authenticator | BasicAuthenticator.java | Wed Sep 27 18:33:40 2017 UTC |
Note: Merge considers the second file to be the common ancestor of the others. |
Description | Between Files 1 and 2 |
Between Files 2 and 3 |
Relative to Common Ancestor |
|||
---|---|---|---|---|---|---|
Text Blocks | Lines | Text Blocks | Lines | Text Blocks | Lines | |
Unchanged | 5 | 508 | 1 | 516 | ||
Changed | 4 | 8 | 0 | 0 | 4 | 8 |
Inserted | 0 | 0 | 0 | 0 | 0 | 0 |
Removed | 0 | 0 | 0 | 0 | 0 | 0 |
Note: An automatic merge would leave 0 conflict(s). |
Whitespace | Consecutive whitespace is treated as a single space |
---|---|
Character case | Differences in character case are significant |
Line endings | Differences in line endings (CR and LF characters) are ignored |
CR/LF characters | Not shown in the comparison detail |
No regular expressions were active.
1 | /* | 1 | /* | 1 | /* | |||||
2 | * License d to the A pache Soft ware Found ation (ASF ) under on e or more | 2 | * License d to the A pache Soft ware Found ation (ASF ) under on e or more | 2 | * License d to the A pache Soft ware Found ation (ASF ) under on e or more | |||||
3 | * contrib utor licen se agreeme nts. See the NOTICE file dist ributed wi th | 3 | * contrib utor licen se agreeme nts. See the NOTICE file dist ributed wi th | 3 | * contrib utor licen se agreeme nts. See the NOTICE file dist ributed wi th | |||||
4 | * this wo rk for add itional in formation regarding copyright ownership. | 4 | * this wo rk for add itional in formation regarding copyright ownership. | 4 | * this wo rk for add itional in formation regarding copyright ownership. | |||||
5 | * The ASF licenses this file to You und er the Apa che Licens e, Version 2.0 | 5 | * The ASF licenses this file to You und er the Apa che Licens e, Version 2.0 | 5 | * The ASF licenses this file to You und er the Apa che Licens e, Version 2.0 | |||||
6 | * (the "L icense"); you may no t use this file exce pt in comp liance wit h | 6 | * (the "L icense"); you may no t use this file exce pt in comp liance wit h | 6 | * (the "L icense"); you may no t use this file exce pt in comp liance wit h | |||||
7 | * the Lic ense. You may obtai n a copy o f the Lice nse at | 7 | * the Lic ense. You may obtai n a copy o f the Lice nse at | 7 | * the Lic ense. You may obtai n a copy o f the Lice nse at | |||||
8 | * | 8 | * | 8 | * | |||||
9 | * ht tp://www.a pache.org/ licenses/L ICENSE-2.0 | 9 | * ht tp://www.a pache.org/ licenses/L ICENSE-2.0 | 9 | * ht tp://www.a pache.org/ licenses/L ICENSE-2.0 | |||||
10 | * | 10 | * | 10 | * | |||||
11 | * Unless required b y applicab le law or agreed to in writing , software | 11 | * Unless required b y applicab le law or agreed to in writing , software | 11 | * Unless required b y applicab le law or agreed to in writing , software | |||||
12 | * distrib uted under the Licen se is dist ributed on an "AS IS " BASIS, | 12 | * distrib uted under the Licen se is dist ributed on an "AS IS " BASIS, | 12 | * distrib uted under the Licen se is dist ributed on an "AS IS " BASIS, | |||||
13 | * WITHOUT WARRANTIE S OR CONDI TIONS OF A NY KIND, e ither expr ess or imp lied. | 13 | * WITHOUT WARRANTIE S OR CONDI TIONS OF A NY KIND, e ither expr ess or imp lied. | 13 | * WITHOUT WARRANTIE S OR CONDI TIONS OF A NY KIND, e ither expr ess or imp lied. | |||||
14 | * See the License f or the spe cific lang uage gover ning permi ssions and | 14 | * See the License f or the spe cific lang uage gover ning permi ssions and | 14 | * See the License f or the spe cific lang uage gover ning permi ssions and | |||||
15 | * limitat ions under the Licen se. | 15 | * limitat ions under the Licen se. | 15 | * limitat ions under the Licen se. | |||||
16 | */ | 16 | */ | 16 | */ | |||||
17 | 17 | 17 | ||||||||
18 | 18 | 18 | ||||||||
19 | package or g.apache.c atalina.au thenticato r; | 19 | package or g.apache.c atalina.au thenticato r; | 19 | package or g.apache.c atalina.au thenticato r; | |||||
20 | 20 | 20 | ||||||||
21 | 21 | 21 | ||||||||
22 | import jav a.io.IOExc eption; | 22 | import jav a.io.IOExc eption; | 22 | import jav a.io.IOExc eption; | |||||
23 | import jav a.nio.char set.Charse t; | 23 | import jav a.nio.char set.Charse t; | 23 | import jav a.nio.char set.Charse t; | |||||
24 | import jav a.nio.char set.Standa rdCharsets ; | 24 | import jav a.nio.char set.Standa rdCharsets ; | 24 | import jav a.nio.char set.Standa rdCharsets ; | |||||
25 | import jav a.security .Principal ; | 25 | import jav a.security .Principal ; | 25 | import jav a.security .Principal ; | |||||
26 | 26 | 26 | ||||||||
27 | import jav ax.servlet .http.Http ServletReq uest; | 27 | import jav ax.servlet .http.Http ServletReq uest; | 27 | import jav ax.servlet .http.Http ServletReq uest; | |||||
28 | import jav ax.servlet .http.Http ServletRes ponse; | 28 | import jav ax.servlet .http.Http ServletRes ponse; | 28 | import jav ax.servlet .http.Http ServletRes ponse; | |||||
29 | 29 | 29 | ||||||||
30 | import org .apache.ca talina.con nector.Req uest; | 30 | import org .apache.ca talina.con nector.Req uest; | 30 | import org .apache.ca talina.con nector.Req uest; | |||||
31 | import org .apache.ju li.logging .Log; | 31 | import org .apache.ju li.logging .Log; | 31 | import org .apache.ju li.logging .Log; | |||||
32 | import org .apache.ju li.logging .LogFactor y; | 32 | import org .apache.ju li.logging .LogFactor y; | 32 | import org .apache.ju li.logging .LogFactor y; | |||||
33 | import org .apache.to mcat.util. buf.ByteCh unk; | 33 | import org .apache.to mcat.util. buf.ByteCh unk; | 33 | import org .apache.to mcat.util. buf.ByteCh unk; | |||||
34 | import org .apache.to mcat.util. buf.Messag eBytes; | 34 | import org .apache.to mcat.util. buf.Messag eBytes; | 34 | import org .apache.to mcat.util. buf.Messag eBytes; | |||||
35 | import org .apache.to mcat.util. codec.bina ry.Base64; | 35 | import org .apache.to mcat.util. codec.bina ry.Base64; | 35 | import org .apache.to mcat.util. codec.bina ry.Base64; | |||||
36 | 36 | 36 | ||||||||
37 | 37 | 37 | ||||||||
38 | 38 | 38 | ||||||||
39 | /** | 39 | /** | 39 | /** | |||||
40 | * An <b>A uthenticat or</b> and <b>Valve< /b> implem entation o f HTTP BAS IC | 40 | * An <b>A uthenticat or</b> and <b>Valve< /b> implem entation o f HTTP BAS IC | 40 | * An <b>A uthenticat or</b> and <b>Valve< /b> implem entation o f HTTP BAS IC | |||||
41 | * Authent ication, a s outlined in RFC 26 17: "HTTP Authentic ation: Bas ic | 41 | * Authent ication, a s outlined in RFC 26 17: "HTTP Authentic ation: Bas ic | 41 | * Authent ication, a s outlined in RFC 26 17: "HTTP Authentic ation: Bas ic | |||||
42 | * and Dig est Access Authentic ation." | 42 | * and Dig est Access Authentic ation." | 42 | * and Dig est Access Authentic ation." | |||||
43 | * | 43 | * | 43 | * | |||||
44 | * @author Craig R. McClanahan | 44 | * @author Craig R. McClanahan | 44 | * @author Craig R. McClanahan | |||||
45 | */ | 45 | */ | 45 | */ | |||||
46 | public cla ss BasicAu thenticato r extends Authentica torBase { | 46 | public cla ss BasicAu thenticato r extends Authentica torBase { | 46 | public cla ss BasicAu thenticato r extends Authentica torBase { | |||||
47 | 47 | 47 | ||||||||
48 | privat e static f inal Log l og = LogFa ctory.getL og(BasicAu thenticato r.class); | 48 | privat e static f inal Log l og = LogFa ctory.getL og(BasicAu thenticato r.class); | 48 | privat e static f inal Log l og = LogFa ctory.getL og(BasicAu thenticato r.class); | |||||
49 | 49 | 49 | ||||||||
50 | privat e Charset charset = StandardCh arsets.ISO _8859_1; | 50 | privat e Charset charset = StandardCh arsets.ISO _8859_1; | 50 | privat e Charset charset = StandardCh arsets.ISO _8859_1; | |||||
51 | privat e String c harsetStri ng = null; | 51 | privat e String c harsetStri ng = null; | 51 | privat e String c harsetStri ng = null; | |||||
52 | 52 | 52 | ||||||||
53 | 53 | 53 | ||||||||
54 | public String ge tCharset() { | 54 | public String ge tCharset() { | 54 | public String ge tCharset() { | |||||
55 | re turn chars etString; | 55 | re turn chars etString; | 55 | re turn chars etString; | |||||
56 | } | 56 | } | 56 | } | |||||
57 | 57 | 57 | ||||||||
58 | 58 | 58 | ||||||||
59 | public void setC harset(Str ing charse tString) { | 59 | public void setC harset(Str ing charse tString) { | 59 | public void setC harset(Str ing charse tString) { | |||||
60 | // Only acce ptable opt ions are n ull, "" or "UTF-8" ( case insen sitive) | 60 | // Only acce ptable opt ions are n ull, "" or "UTF-8" ( case insen sitive) | 60 | // Only acce ptable opt ions are n ull, "" or "UTF-8" ( case insen sitive) | |||||
61 | if (charsetS tring == n ull || cha rsetString .isEmpty() ) { | 61 | if (charsetS tring == n ull || cha rsetString .isEmpty() ) { | 61 | if (charsetS tring == n ull || cha rsetString .isEmpty() ) { | |||||
62 | charset = Standard Charsets.I SO_8859_1; | 62 | charset = Standard Charsets.I SO_8859_1; | 62 | charset = Standard Charsets.I SO_8859_1; | |||||
63 | } else if (" UTF-8".equ alsIgnoreC ase(charse tString)) { | 63 | } else if (" UTF-8".equ alsIgnoreC ase(charse tString)) { | 63 | } else if (" UTF-8".equ alsIgnoreC ase(charse tString)) { | |||||
64 | charset = Standard Charsets.U TF_8; | 64 | charset = Standard Charsets.U TF_8; | 64 | charset = Standard Charsets.U TF_8; | |||||
65 | } else { | 65 | } else { | 65 | } else { | |||||
66 | throw ne w IllegalA rgumentExc eption(sm. getString( "basicAuth enticator. invalidCha rset")); | 66 | throw ne w IllegalA rgumentExc eption(sm. getString( "basicAuth enticator. invalidCha rset")); | 66 | throw ne w IllegalA rgumentExc eption(sm. getString( "basicAuth enticator. invalidCha rset")); | |||||
67 | } | 67 | } | 67 | } | |||||
68 | th is.charset String = c harsetStri ng; | 68 | th is.charset String = c harsetStri ng; | 68 | th is.charset String = c harsetStri ng; | |||||
69 | } | 69 | } | 69 | } | |||||
70 | 70 | 70 | ||||||||
71 | 71 | 71 | ||||||||
72 | @Overr ide | 72 | @Overr ide | 72 | @Overr ide | |||||
73 |
p
ubli
c
|
73 | p rote c ted boolean doA uthenticat e(Request request, H ttpServlet Response r esponse) | 73 | protec ted boolea n doAuthen ticate(Req uest reque st, HttpSe rvletRespo nse respon se) | |||||
74 | throws I OException { | 74 | throws I OException { | 74 | throws I OException { | |||||
75 | 75 | 75 | ||||||||
76 | if (checkFor CachedAuth entication (request, response, true)) { | 76 | if (checkFor CachedAuth entication (request, response, true)) { | 76 | if (checkFor CachedAuth entication (request, response, true)) { | |||||
77 | return t rue; | 77 | return t rue; | 77 | return t rue; | |||||
78 | } | 78 | } | 78 | } | |||||
79 | 79 | 79 | ||||||||
80 | // Validate any creden tials alre ady includ ed with th is request | 80 | // Validate any creden tials alre ady includ ed with th is request | 80 | // Validate any creden tials alre ady includ ed with th is request | |||||
81 | Me ssageBytes authoriza tion = | 81 | Me ssageBytes authoriza tion = | 81 | Me ssageBytes authoriza tion = | |||||
82 | request. getCoyoteR equest().g etMimeHead ers() | 82 | request. getCoyoteR equest().g etMimeHead ers() | 82 | request. getCoyoteR equest().g etMimeHead ers() | |||||
83 | .getValu e("authori zation"); | 83 | .getValu e("authori zation"); | 83 | .getValu e("authori zation"); | |||||
84 | 84 | 84 | ||||||||
85 | if (authoriz ation != n ull) { | 85 | if (authoriz ation != n ull) { | 85 | if (authoriz ation != n ull) { | |||||
86 | authoriz ation.toBy tes(); | 86 | authoriz ation.toBy tes(); | 86 | authoriz ation.toBy tes(); | |||||
87 | ByteChun k authoriz ationBC = authorizat ion.getByt eChunk(); | 87 | ByteChun k authoriz ationBC = authorizat ion.getByt eChunk(); | 87 | ByteChun k authoriz ationBC = authorizat ion.getByt eChunk(); | |||||
88 | BasicCre dentials c redentials = null; | 88 | BasicCre dentials c redentials = null; | 88 | BasicCre dentials c redentials = null; | |||||
89 | try { | 89 | try { | 89 | try { | |||||
90 | cred entials = new BasicC redentials (authoriza tionBC, ch arset); | 90 | cred entials = new BasicC redentials (authoriza tionBC, ch arset); | 90 | cred entials = new BasicC redentials (authoriza tionBC, ch arset); | |||||
91 | Stri ng usernam e = creden tials.getU sername(); | 91 | Stri ng usernam e = creden tials.getU sername(); | 91 | Stri ng usernam e = creden tials.getU sername(); | |||||
92 | Stri ng passwor d = creden tials.getP assword(); | 92 | Stri ng passwor d = creden tials.getP assword(); | 92 | Stri ng passwor d = creden tials.getP assword(); | |||||
93 | 93 | 93 | ||||||||
94 | Prin cipal prin cipal = co ntext.getR ealm().aut henticate( username, password); | 94 | Prin cipal prin cipal = co ntext.getR ealm().aut henticate( username, password); | 94 | Prin cipal prin cipal = co ntext.getR ealm().aut henticate( username, password); | |||||
95 | if ( principal != null) { | 95 | if ( principal != null) { | 95 | if ( principal != null) { | |||||
96 | register(r equest, re sponse, pr incipal, | 96 | register(r equest, re sponse, pr incipal, | 96 | register(r equest, re sponse, pr incipal, | |||||
97 | HttpSe rvletReque st.BASIC_A UTH, usern ame, passw ord); | 97 | HttpSe rvletReque st.BASIC_A UTH, usern ame, passw ord); | 97 | HttpSe rvletReque st.BASIC_A UTH, usern ame, passw ord); | |||||
98 | return ( true ) ; | 98 |
return
|
98 | return tru e; | |||||
99 | } | 99 | } | 99 | } | |||||
100 | } | 100 | } | 100 | } | |||||
101 | catch (I llegalArgu mentExcept ion iae) { | 101 | catch (I llegalArgu mentExcept ion iae) { | 101 | catch (I llegalArgu mentExcept ion iae) { | |||||
102 | if ( log.isDebu gEnabled() ) { | 102 | if ( log.isDebu gEnabled() ) { | 102 | if ( log.isDebu gEnabled() ) { | |||||
103 | log.debug( "Invalid A uthorizati on" + iae. getMessage ()); | 103 | log.debug( "Invalid A uthorizati on" + iae. getMessage ()); | 103 | log.debug( "Invalid A uthorizati on" + iae. getMessage ()); | |||||
104 | } | 104 | } | 104 | } | |||||
105 | } | 105 | } | 105 | } | |||||
106 | } | 106 | } | 106 | } | |||||
107 | 107 | 107 | ||||||||
108 | // the reque st could n ot be auth enticated, so reissu e the chal lenge | 108 | // the reque st could n ot be auth enticated, so reissu e the chal lenge | 108 | // the reque st could n ot be auth enticated, so reissu e the chal lenge | |||||
109 | St ringBuilde r value = new String Builder(16 ); | 109 | St ringBuilde r value = new String Builder(16 ); | 109 | St ringBuilde r value = new String Builder(16 ); | |||||
110 | va lue.append ("Basic re alm=\""); | 110 | va lue.append ("Basic re alm=\""); | 110 | va lue.append ("Basic re alm=\""); | |||||
111 | va lue.append (getRealmN ame(contex t)); | 111 | va lue.append (getRealmN ame(contex t)); | 111 | va lue.append (getRealmN ame(contex t)); | |||||
112 | va lue.append ('\"'); | 112 | va lue.append ('\"'); | 112 | va lue.append ('\"'); | |||||
113 | if (charsetS tring != n ull && !ch arsetStrin g.isEmpty( )) { | 113 | if (charsetS tring != n ull && !ch arsetStrin g.isEmpty( )) { | 113 | if (charsetS tring != n ull && !ch arsetStrin g.isEmpty( )) { | |||||
114 | value.ap pend(", ch arset="); | 114 | value.ap pend(", ch arset="); | 114 | value.ap pend(", ch arset="); | |||||
115 | value.ap pend(chars etString); | 115 | value.ap pend(chars etString); | 115 | value.ap pend(chars etString); | |||||
116 | } | 116 | } | 116 | } | |||||
117 | re sponse.set Header(AUT H_HEADER_N AME, value .toString( )); | 117 | re sponse.set Header(AUT H_HEADER_N AME, value .toString( )); | 117 | re sponse.set Header(AUT H_HEADER_N AME, value .toString( )); | |||||
118 | re sponse.sen dError(Htt pServletRe sponse.SC_ UNAUTHORIZ ED); | 118 | re sponse.sen dError(Htt pServletRe sponse.SC_ UNAUTHORIZ ED); | 118 | re sponse.sen dError(Htt pServletRe sponse.SC_ UNAUTHORIZ ED); | |||||
119 | return ( false ) ; | 119 |
return
|
119 | re turn false ; | |||||
120 | 120 | 120 | ||||||||
121 | } | 121 | } | 121 | } | |||||
122 | 122 | 122 | ||||||||
123 | @Overr ide | 123 | @Overr ide | 123 | @Overr ide | |||||
124 | protec ted String getAuthMe thod() { | 124 | protec ted String getAuthMe thod() { | 124 | protec ted String getAuthMe thod() { | |||||
125 | re turn HttpS ervletRequ est.BASIC_ AUTH; | 125 | re turn HttpS ervletRequ est.BASIC_ AUTH; | 125 | re turn HttpS ervletRequ est.BASIC_ AUTH; | |||||
126 | } | 126 | } | 126 | } | |||||
127 | 127 | 127 | ||||||||
128 | 128 | 128 | ||||||||
129 | /** | 129 | /** | 129 | /** | |||||
130 | * Par ser for an HTTP Auth orization header for BASIC aut henticatio n | 130 | * Par ser for an HTTP Auth orization header for BASIC aut henticatio n | 130 | * Par ser for an HTTP Auth orization header for BASIC aut henticatio n | |||||
131 | * as per RFC 26 17 section 2, and th e Base64 e ncoded cre dentials a s | 131 | * as per RFC 26 17 section 2, and th e Base64 e ncoded cre dentials a s | 131 | * as per RFC 26 17 section 2, and th e Base64 e ncoded cre dentials a s | |||||
132 | * per RFC 2045 section 6. 8. | 132 | * per RFC 2045 section 6. 8. | 132 | * per RFC 2045 section 6. 8. | |||||
133 | */ | 133 | */ | 133 | */ | |||||
134 | p rote c ted static cl ass BasicC redentials { | 134 |
p
ubli
c
|
134 | public static cl ass BasicC redentials { | |||||
135 | 135 | 135 | ||||||||
136 | // the only authentica tion metho d supporte d by this parser | 136 | // the only authentica tion metho d supporte d by this parser | 136 | // the only authentica tion metho d supporte d by this parser | |||||
137 | // note: we include si ngle white space as its delimi ter | 137 | // note: we include si ngle white space as its delimi ter | 137 | // note: we include si ngle white space as its delimi ter | |||||
138 | pr ivate stat ic final S tring METH OD = "basi c "; | 138 | pr ivate stat ic final S tring METH OD = "basi c "; | 138 | pr ivate stat ic final S tring METH OD = "basi c "; | |||||
139 | 139 | 139 | ||||||||
140 | pr ivate fina l Charset charset; | 140 | pr ivate fina l Charset charset; | 140 | pr ivate fina l Charset charset; | |||||
141 | pr ivate fina l ByteChun k authoriz ation; | 141 | pr ivate fina l ByteChun k authoriz ation; | 141 | pr ivate fina l ByteChun k authoriz ation; | |||||
142 | pr ivate fina l int init ialOffset; | 142 | pr ivate fina l int init ialOffset; | 142 | pr ivate fina l int init ialOffset; | |||||
143 | pr ivate int base64blob Offset; | 143 | pr ivate int base64blob Offset; | 143 | pr ivate int base64blob Offset; | |||||
144 | pr ivate int base64blob Length; | 144 | pr ivate int base64blob Length; | 144 | pr ivate int base64blob Length; | |||||
145 | 145 | 145 | ||||||||
146 | pr ivate Stri ng usernam e = null; | 146 | pr ivate Stri ng usernam e = null; | 146 | pr ivate Stri ng usernam e = null; | |||||
147 | pr ivate Stri ng passwor d = null; | 147 | pr ivate Stri ng passwor d = null; | 147 | pr ivate Stri ng passwor d = null; | |||||
148 | /* * | 148 | /* * | 148 | /* * | |||||
149 | * Parse the HTTP Auth orization header for BASIC aut henticatio n | 149 | * Parse the HTTP Auth orization header for BASIC aut henticatio n | 149 | * Parse the HTTP Auth orization header for BASIC aut henticatio n | |||||
150 | * as per RF C 2617 sec tion 2, an d the Base 64 encoded credentia ls | 150 | * as per RF C 2617 sec tion 2, an d the Base 64 encoded credentia ls | 150 | * as per RF C 2617 sec tion 2, an d the Base 64 encoded credentia ls | |||||
151 | * as per RF C 2045 sec tion 6.8. | 151 | * as per RF C 2045 sec tion 6.8. | 151 | * as per RF C 2045 sec tion 6.8. | |||||
152 | * | 152 | * | 152 | * | |||||
153 | * @param in put The header val ue to pars e in-place | 153 | * @param in put The header val ue to pars e in-place | 153 | * @param in put The header val ue to pars e in-place | |||||
154 | * @param ch arset The character set to use to conver t the byte s to a | 154 | * @param ch arset The character set to use to conver t the byte s to a | 154 | * @param ch arset The character set to use to conver t the byte s to a | |||||
155 | * stri ng | 155 | * stri ng | 155 | * stri ng | |||||
156 | * | 156 | * | 156 | * | |||||
157 | * @throws I llegalArgu mentExcept ion If the header do es not con form | 157 | * @throws I llegalArgu mentExcept ion If the header do es not con form | 157 | * @throws I llegalArgu mentExcept ion If the header do es not con form | |||||
158 | * to RFC 2617 | 158 | * to RFC 2617 | 158 | * to RFC 2617 | |||||
159 | * / | 159 | * / | 159 | * / | |||||
160 | pu blic Basic Credential s(ByteChun k input, C harset cha rset) thro ws Illegal ArgumentEx ception { | 160 | pu blic Basic Credential s(ByteChun k input, C harset cha rset) thro ws Illegal ArgumentEx ception { | 160 | pu blic Basic Credential s(ByteChun k input, C harset cha rset) thro ws Illegal ArgumentEx ception { | |||||
161 | authoriz ation = in put; | 161 | authoriz ation = in put; | 161 | authoriz ation = in put; | |||||
162 | initialO ffset = in put.getOff set(); | 162 | initialO ffset = in put.getOff set(); | 162 | initialO ffset = in put.getOff set(); | |||||
163 | this.cha rset = cha rset; | 163 | this.cha rset = cha rset; | 163 | this.cha rset = cha rset; | |||||
164 | 164 | 164 | ||||||||
165 | parseMet hod(); | 165 | parseMet hod(); | 165 | parseMet hod(); | |||||
166 | byte[] d ecoded = p arseBase64 (); | 166 | byte[] d ecoded = p arseBase64 (); | 166 | byte[] d ecoded = p arseBase64 (); | |||||
167 | parseCre dentials(d ecoded); | 167 | parseCre dentials(d ecoded); | 167 | parseCre dentials(d ecoded); | |||||
168 | } | 168 | } | 168 | } | |||||
169 | 169 | 169 | ||||||||
170 | /* * | 170 | /* * | 170 | /* * | |||||
171 | * Trivial a ccessor. | 171 | * Trivial a ccessor. | 171 | * Trivial a ccessor. | |||||
172 | * | 172 | * | 172 | * | |||||
173 | * @return the decode d username token as a String, which is | 173 | * @return the decode d username token as a String, which is | 173 | * @return the decode d username token as a String, which is | |||||
174 | * never be < code>null< /code>, bu t can be e mpty. | 174 | * never be < code>null< /code>, bu t can be e mpty. | 174 | * never be < code>null< /code>, bu t can be e mpty. | |||||
175 | * / | 175 | * / | 175 | * / | |||||
176 | pu blic Strin g getUsern ame() { | 176 | pu blic Strin g getUsern ame() { | 176 | pu blic Strin g getUsern ame() { | |||||
177 | return u sername; | 177 | return u sername; | 177 | return u sername; | |||||
178 | } | 178 | } | 178 | } | |||||
179 | 179 | 179 | ||||||||
180 | /* * | 180 | /* * | 180 | /* * | |||||
181 | * Trivial a ccessor. | 181 | * Trivial a ccessor. | 181 | * Trivial a ccessor. | |||||
182 | * | 182 | * | 182 | * | |||||
183 | * @return the decode d password token as a String, or <code>n ull</code> | 183 | * @return the decode d password token as a String, or <code>n ull</code> | 183 | * @return the decode d password token as a String, or <code>n ull</code> | |||||
184 | * if no pass word was f ound in th e credenti als. | 184 | * if no pass word was f ound in th e credenti als. | 184 | * if no pass word was f ound in th e credenti als. | |||||
185 | * / | 185 | * / | 185 | * / | |||||
186 | pu blic Strin g getPassw ord() { | 186 | pu blic Strin g getPassw ord() { | 186 | pu blic Strin g getPassw ord() { | |||||
187 | return p assword; | 187 | return p assword; | 187 | return p assword; | |||||
188 | } | 188 | } | 188 | } | |||||
189 | 189 | 189 | ||||||||
190 | /* | 190 | /* | 190 | /* | |||||
191 | * The autho rization m ethod stri ng is case -insensiti ve and mus t | 191 | * The autho rization m ethod stri ng is case -insensiti ve and mus t | 191 | * The autho rization m ethod stri ng is case -insensiti ve and mus t | |||||
192 | * hae at le ast one sp ace charac ter as a d elimiter. | 192 | * hae at le ast one sp ace charac ter as a d elimiter. | 192 | * hae at le ast one sp ace charac ter as a d elimiter. | |||||
193 | * / | 193 | * / | 193 | * / | |||||
194 | pr ivate void parseMeth od() throw s IllegalA rgumentExc eption { | 194 | pr ivate void parseMeth od() throw s IllegalA rgumentExc eption { | 194 | pr ivate void parseMeth od() throw s IllegalA rgumentExc eption { | |||||
195 | if (auth orization. startsWith IgnoreCase (METHOD, 0 )) { | 195 | if (auth orization. startsWith IgnoreCase (METHOD, 0 )) { | 195 | if (auth orization. startsWith IgnoreCase (METHOD, 0 )) { | |||||
196 | // s tep past t he auth me thod name | 196 | // s tep past t he auth me thod name | 196 | // s tep past t he auth me thod name | |||||
197 | base 64blobOffs et = initi alOffset + METHOD.le ngth(); | 197 | base 64blobOffs et = initi alOffset + METHOD.le ngth(); | 197 | base 64blobOffs et = initi alOffset + METHOD.le ngth(); | |||||
198 | base 64blobLeng th = autho rization.g etLength() - METHOD. length(); | 198 | base 64blobLeng th = autho rization.g etLength() - METHOD. length(); | 198 | base 64blobLeng th = autho rization.g etLength() - METHOD. length(); | |||||
199 | } | 199 | } | 199 | } | |||||
200 | else { | 200 | else { | 200 | else { | |||||
201 | // i s this pos sible, or permitted? | 201 | // i s this pos sible, or permitted? | 201 | // i s this pos sible, or permitted? | |||||
202 | thro w new Ille galArgumen tException ( | 202 | thro w new Ille galArgumen tException ( | 202 | thro w new Ille galArgumen tException ( | |||||
203 | "Autho rization h eader meth od is not \"Basic\"" ); | 203 | "Autho rization h eader meth od is not \"Basic\"" ); | 203 | "Autho rization h eader meth od is not \"Basic\"" ); | |||||
204 | } | 204 | } | 204 | } | |||||
205 | } | 205 | } | 205 | } | |||||
206 | /* | 206 | /* | 206 | /* | |||||
207 | * Decode th e base64-u ser-pass t oken, whic h RFC 2617 states | 207 | * Decode th e base64-u ser-pass t oken, whic h RFC 2617 states | 207 | * Decode th e base64-u ser-pass t oken, whic h RFC 2617 states | |||||
208 | * can be lo nger than the 76 cha racters pe r line lim it defined | 208 | * can be lo nger than the 76 cha racters pe r line lim it defined | 208 | * can be lo nger than the 76 cha racters pe r line lim it defined | |||||
209 | * in RFC 20 45. The ba se64 decod er will ig nore embed ded line | 209 | * in RFC 20 45. The ba se64 decod er will ig nore embed ded line | 209 | * in RFC 20 45. The ba se64 decod er will ig nore embed ded line | |||||
210 | * break cha racters as well as s urplus sur rounding w hite space . | 210 | * break cha racters as well as s urplus sur rounding w hite space . | 210 | * break cha racters as well as s urplus sur rounding w hite space . | |||||
211 | * / | 211 | * / | 211 | * / | |||||
212 | pr ivate byte [] parseBa se64() thr ows Illega lArgumentE xception { | 212 | pr ivate byte [] parseBa se64() thr ows Illega lArgumentE xception { | 212 | pr ivate byte [] parseBa se64() thr ows Illega lArgumentE xception { | |||||
213 | byte[] d ecoded = B ase64.deco deBase64( | 213 | byte[] d ecoded = B ase64.deco deBase64( | 213 | byte[] d ecoded = B ase64.deco deBase64( | |||||
214 | author ization.ge tBuffer(), | 214 | author ization.ge tBuffer(), | 214 | author ization.ge tBuffer(), | |||||
215 | base64 blobOffset , base64bl obLength); | 215 | base64 blobOffset , base64bl obLength); | 215 | base64 blobOffset , base64bl obLength); | |||||
216 | // rest ore origin al offset | 216 | // rest ore origin al offset | 216 | // rest ore origin al offset | |||||
217 | authoriz ation.setO ffset(init ialOffset) ; | 217 | authoriz ation.setO ffset(init ialOffset) ; | 217 | authoriz ation.setO ffset(init ialOffset) ; | |||||
218 | if (deco ded == nul l) { | 218 | if (deco ded == nul l) { | 218 | if (deco ded == nul l) { | |||||
219 | thro w new Ille galArgumen tException ( | 219 | thro w new Ille galArgumen tException ( | 219 | thro w new Ille galArgumen tException ( | |||||
220 | "Basic Authoriza tion crede ntials are not Base6 4"); | 220 | "Basic Authoriza tion crede ntials are not Base6 4"); | 220 | "Basic Authoriza tion crede ntials are not Base6 4"); | |||||
221 | } | 221 | } | 221 | } | |||||
222 | return d ecoded; | 222 | return d ecoded; | 222 | return d ecoded; | |||||
223 | } | 223 | } | 223 | } | |||||
224 | 224 | 224 | ||||||||
225 | /* | 225 | /* | 225 | /* | |||||
226 | * Extract t he mandato ry usernam e token an d separate it from t he | 226 | * Extract t he mandato ry usernam e token an d separate it from t he | 226 | * Extract t he mandato ry usernam e token an d separate it from t he | |||||
227 | * optional password t oken. Tole rate surpl us surroun ding white space. | 227 | * optional password t oken. Tole rate surpl us surroun ding white space. | 227 | * optional password t oken. Tole rate surpl us surroun ding white space. | |||||
228 | * / | 228 | * / | 228 | * / | |||||
229 | pr ivate void parseCred entials(by te[] decod ed) | 229 | pr ivate void parseCred entials(by te[] decod ed) | 229 | pr ivate void parseCred entials(by te[] decod ed) | |||||
230 | thro ws Illegal ArgumentEx ception { | 230 | thro ws Illegal ArgumentEx ception { | 230 | thro ws Illegal ArgumentEx ception { | |||||
231 | 231 | 231 | ||||||||
232 | int colo n = -1; | 232 | int colo n = -1; | 232 | int colo n = -1; | |||||
233 | for (int i = 0; i < decoded. length; i+ +) { | 233 | for (int i = 0; i < decoded. length; i+ +) { | 233 | for (int i = 0; i < decoded. length; i+ +) { | |||||
234 | if ( decoded[i] == ':') { | 234 | if ( decoded[i] == ':') { | 234 | if ( decoded[i] == ':') { | |||||
235 | colon = i; | 235 | colon = i; | 235 | colon = i; | |||||
236 | break; | 236 | break; | 236 | break; | |||||
237 | } | 237 | } | 237 | } | |||||
238 | } | 238 | } | 238 | } | |||||
239 | 239 | 239 | ||||||||
240 | if (colo n < 0) { | 240 | if (colo n < 0) { | 240 | if (colo n < 0) { | |||||
241 | user name = new String(de coded, cha rset); | 241 | user name = new String(de coded, cha rset); | 241 | user name = new String(de coded, cha rset); | |||||
242 | // p assword wi ll remain null! | 242 | // p assword wi ll remain null! | 242 | // p assword wi ll remain null! | |||||
243 | } | 243 | } | 243 | } | |||||
244 | else { | 244 | else { | 244 | else { | |||||
245 | user name = new String(de coded, 0, colon, cha rset); | 245 | user name = new String(de coded, 0, colon, cha rset); | 245 | user name = new String(de coded, 0, colon, cha rset); | |||||
246 | pass word = new String(de coded, col on + 1, de coded.leng th - colon - 1, char set); | 246 | pass word = new String(de coded, col on + 1, de coded.leng th - colon - 1, char set); | 246 | pass word = new String(de coded, col on + 1, de coded.leng th - colon - 1, char set); | |||||
247 | // t olerate su rplus whit e space ar ound crede ntials | 247 | // t olerate su rplus whit e space ar ound crede ntials | 247 | // t olerate su rplus whit e space ar ound crede ntials | |||||
248 | if ( password.l ength() > 1) { | 248 | if ( password.l ength() > 1) { | 248 | if ( password.l ength() > 1) { | |||||
249 | password = password. trim(); | 249 | password = password. trim(); | 249 | password = password. trim(); | |||||
250 | } | 250 | } | 250 | } | |||||
251 | } | 251 | } | 251 | } | |||||
252 | // toler ate surplu s white sp ace around credentia ls | 252 | // toler ate surplu s white sp ace around credentia ls | 252 | // toler ate surplu s white sp ace around credentia ls | |||||
253 | if (user name.lengt h() > 1) { | 253 | if (user name.lengt h() > 1) { | 253 | if (user name.lengt h() > 1) { | |||||
254 | user name = use rname.trim (); | 254 | user name = use rname.trim (); | 254 | user name = use rname.trim (); | |||||
255 | } | 255 | } | 255 | } | |||||
256 | } | 256 | } | 256 | } | |||||
257 | } | 257 | } | 257 | } | |||||
258 | } | 258 | } | 258 | } |
Araxis Merge (but not the data content of this report) is Copyright © 1993–2017 Araxis Ltd (www.araxis.com). All rights reserved.