@@ -94,7 +94,7 @@ func (c *Conn) ReadPacketTo(w io.Writer) error {
94
94
header := []byte {0 , 0 , 0 , 0 }
95
95
96
96
if _ , err := io .ReadFull (c .reader , header ); err != nil {
97
- return ErrBadConn
97
+ return errors . Wrapf ( ErrBadConn , "io.ReadFull(header) failed. err %v" , err )
98
98
}
99
99
100
100
length := int (uint32 (header [0 ]) | uint32 (header [1 ])<< 8 | uint32 (header [2 ])<< 16 )
@@ -112,16 +112,16 @@ func (c *Conn) ReadPacketTo(w io.Writer) error {
112
112
}
113
113
114
114
if n , err := io .CopyN (w , c .reader , int64 (length )); err != nil {
115
- return ErrBadConn
115
+ return errors . Wrapf ( ErrBadConn , "io.CopyN failed. err %v, copied %v, expected %v" , err , n , length )
116
116
} else if n != int64 (length ) {
117
- return ErrBadConn
117
+ return errors . Wrapf ( ErrBadConn , "io.CopyN failed(n != int64(length)). %v bytes copied, while %v expected" , n , length )
118
118
} else {
119
119
if length < MaxPayloadLen {
120
120
return nil
121
121
}
122
122
123
123
if err := c .ReadPacketTo (w ); err != nil {
124
- return err
124
+ return errors . Wrap ( err , "ReadPacketTo failed" )
125
125
}
126
126
}
127
127
@@ -141,9 +141,9 @@ func (c *Conn) WritePacket(data []byte) error {
141
141
data [3 ] = c .Sequence
142
142
143
143
if n , err := c .Write (data [:4 + MaxPayloadLen ]); err != nil {
144
- return ErrBadConn
144
+ return errors . Wrapf ( ErrBadConn , "Write(payload portion) failed. err %v" , err )
145
145
} else if n != (4 + MaxPayloadLen ) {
146
- return ErrBadConn
146
+ return errors . Wrapf ( ErrBadConn , "Write(payload portion) failed. only %v bytes written, while %v expected" , n , 4 + MaxPayloadLen )
147
147
} else {
148
148
c .Sequence ++
149
149
length -= MaxPayloadLen
@@ -157,9 +157,9 @@ func (c *Conn) WritePacket(data []byte) error {
157
157
data [3 ] = c .Sequence
158
158
159
159
if n , err := c .Write (data ); err != nil {
160
- return ErrBadConn
160
+ return errors . Wrapf ( ErrBadConn , "Write failed. err %v" , err )
161
161
} else if n != len (data ) {
162
- return ErrBadConn
162
+ return errors . Wrapf ( ErrBadConn , "Write failed. only %v bytes written, while %v expected" , n , len ( data ))
163
163
} else {
164
164
c .Sequence ++
165
165
return nil
@@ -177,7 +177,7 @@ func (c *Conn) WriteClearAuthPacket(password string) error {
177
177
copy (data [4 :], password )
178
178
data [4 + pktLen - 1 ] = 0x00
179
179
180
- return c .WritePacket (data )
180
+ return errors . Wrap ( c .WritePacket (data ), "WritePacket failed" )
181
181
}
182
182
183
183
// WritePublicKeyAuthPacket: Caching sha2 authentication. Public key request and send encrypted password
@@ -186,17 +186,19 @@ func (c *Conn) WritePublicKeyAuthPacket(password string, cipher []byte) error {
186
186
// request public key
187
187
data := make ([]byte , 4 + 1 )
188
188
data [4 ] = 2 // cachingSha2PasswordRequestPublicKey
189
- c .WritePacket (data )
189
+ if err := c .WritePacket (data ); err != nil {
190
+ return errors .Wrap (err , "WritePacket(single byte) failed" )
191
+ }
190
192
191
193
data , err := c .ReadPacket ()
192
194
if err != nil {
193
- return err
195
+ return errors . Wrap ( err , "ReadPacket failed" )
194
196
}
195
197
196
198
block , _ := pem .Decode (data [1 :])
197
199
pub , err := x509 .ParsePKIXPublicKey (block .Bytes )
198
200
if err != nil {
199
- return err
201
+ return errors . Wrap ( err , "x509.ParsePKIXPublicKey failed" )
200
202
}
201
203
202
204
plain := make ([]byte , len (password )+ 1 )
@@ -209,15 +211,15 @@ func (c *Conn) WritePublicKeyAuthPacket(password string, cipher []byte) error {
209
211
enc , _ := rsa .EncryptOAEP (sha1v , rand .Reader , pub .(* rsa.PublicKey ), plain , nil )
210
212
data = make ([]byte , 4 + len (enc ))
211
213
copy (data [4 :], enc )
212
- return c .WritePacket (data )
214
+ return errors . Wrap ( c .WritePacket (data ), "WritePacket failed" )
213
215
}
214
216
215
217
func (c * Conn ) WriteEncryptedPassword (password string , seed []byte , pub * rsa.PublicKey ) error {
216
218
enc , err := EncryptPassword (password , seed , pub )
217
219
if err != nil {
218
- return err
220
+ return errors . Wrap ( err , "EncryptPassword failed" )
219
221
}
220
- return c .WriteAuthSwitchPacket (enc , false )
222
+ return errors . Wrap ( c .WriteAuthSwitchPacket (enc , false ), "WriteAuthSwitchPacket failed" )
221
223
}
222
224
223
225
// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchResponse
@@ -234,7 +236,7 @@ func (c *Conn) WriteAuthSwitchPacket(authData []byte, addNUL bool) error {
234
236
data [pktLen - 1 ] = 0x00
235
237
}
236
238
237
- return c .WritePacket (data )
239
+ return errors . Wrap ( c .WritePacket (data ), "WritePacket failed" )
238
240
}
239
241
240
242
func (c * Conn ) ResetSequence () {
@@ -244,7 +246,7 @@ func (c *Conn) ResetSequence() {
244
246
func (c * Conn ) Close () error {
245
247
c .Sequence = 0
246
248
if c .Conn != nil {
247
- return c .Conn .Close ()
249
+ return errors . Wrap ( c .Conn .Close (), "Conn.Close failed" )
248
250
}
249
251
return nil
250
252
}
0 commit comments