org.mariadb.jdbc.internal.util
Class Utils

java.lang.Object
  extended by org.mariadb.jdbc.internal.util.Utils

public class Utils
extends Object


Constructor Summary
Utils()
           
 
Method Summary
static String byteArrayToHexString(byte[] bytes)
           
static byte[] copyRange(byte[] orig, int from, int to)
          Copies from original byte array to a new byte array.
static byte[] copyWithLength(byte[] orig, int length)
          Copies the original byte array content to a new byte array.
static Socket createSocket(UrlParser urlParser, String host)
          Create socket accordingly to options.
static byte[] encryptPassword(String password, byte[] seed, String passwordCharacterEncoding)
          encrypts a password protocol for authentication is like this: 1. mysql server sends a random array of bytes (the seed) 2. client makes a sha1 digest of the password 3. client hashes the output of 2 4. client digests the seed 5. client updates the digest with the output from 3 6. an xor of the output of 5 and 2 is sent to server 7. server does the same thing and verifies that the scrambled passwords match
static String escapeString(String value, boolean noBackslashEscapes)
          Escape String.
protected static String getHex(byte[] raw)
           
static TimeZone getTimeZone(String id)
          Get timezone from Id.
static String hexdump(byte[]... bytes)
          Hexdump.
static String hexdump(int maxQuerySizeToLog, int offset, byte[]... bytes)
          Hexdump.
static String hexdump(int maxQuerySizeToLog, int offset, int length, byte[]... byteArr)
          Hexdump.
static String nativeSql(String sql, boolean noBackslashEscapes)
          Escape sql String
static String parseSessionVariables(String sessionVariable)
          Parse the option "sessionVariable" to ensure having no injection.
static String replaceFunctionParameter(String functionString)
          Helper function to replace function parameters in escaped string. 3 functions are handles : - CONVERT(value, type) , we replace SQL_XXX types with XXX, i.e SQL_INTEGER with INTEGER - TIMESTAMPDIFF(type, ...) or TIMESTAMPADD(type, ...) , we replace SQL_TSI_XXX in type with XXX, i.e SQL_TSI_HOUR with HOUR
static Protocol retrieveProxy(UrlParser urlParser, ReentrantLock lock)
          Retrieve protocol corresponding to the failover options.
static void writeHex(byte[] bytes, int offset, int dataLength, StringBuilder outputBuilder)
          Write bytes/hexadecimal value of a byte array to a StringBuilder.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Utils

public Utils()
Method Detail

escapeString

public static String escapeString(String value,
                                  boolean noBackslashEscapes)
Escape String.

Parameters:
value - value to escape
noBackslashEscapes - must backslash be escaped
Returns:
escaped string.

encryptPassword

public static byte[] encryptPassword(String password,
                                     byte[] seed,
                                     String passwordCharacterEncoding)
                              throws NoSuchAlgorithmException,
                                     UnsupportedEncodingException
encrypts a password

protocol for authentication is like this: 1. mysql server sends a random array of bytes (the seed) 2. client makes a sha1 digest of the password 3. client hashes the output of 2 4. client digests the seed 5. client updates the digest with the output from 3 6. an xor of the output of 5 and 2 is sent to server 7. server does the same thing and verifies that the scrambled passwords match

Parameters:
password - the password to encrypt
seed - the seed to use
passwordCharacterEncoding - password character encoding
Returns:
a scrambled password
Throws:
NoSuchAlgorithmException - if SHA1 is not available on the platform we are using
UnsupportedEncodingException - if passwordCharacterEncoding is not a valid charset name

copyWithLength

public static byte[] copyWithLength(byte[] orig,
                                    int length)
Copies the original byte array content to a new byte array. The resulting byte array is always "length" size. If length is smaller than the original byte array, the resulting byte array is truncated. If length is bigger than the original byte array, the resulting byte array is filled with zero bytes.

Parameters:
orig - the original byte array
length - how big the resulting byte array will be
Returns:
the copied byte array

copyRange

public static byte[] copyRange(byte[] orig,
                               int from,
                               int to)
Copies from original byte array to a new byte array. The resulting byte array is always "to-from" size.

Parameters:
orig - the original byte array
from - index of first byte in original byte array which will be copied
to - index of last byte in original byte array which will be copied. This can be outside of the original byte array
Returns:
resulting array

replaceFunctionParameter

public static String replaceFunctionParameter(String functionString)
Helper function to replace function parameters in escaped string. 3 functions are handles : - CONVERT(value, type) , we replace SQL_XXX types with XXX, i.e SQL_INTEGER with INTEGER - TIMESTAMPDIFF(type, ...) or TIMESTAMPADD(type, ...) , we replace SQL_TSI_XXX in type with XXX, i.e SQL_TSI_HOUR with HOUR

Parameters:
functionString - - input string
Returns:
unescaped string

nativeSql

public static String nativeSql(String sql,
                               boolean noBackslashEscapes)
                        throws SQLException
Escape sql String

Parameters:
sql - initial sql
noBackslashEscapes - must backslash be escape
Returns:
escaped sql string
Throws:
SQLException - if escape sequence is incorrect.

retrieveProxy

public static Protocol retrieveProxy(UrlParser urlParser,
                                     ReentrantLock lock)
                              throws SQLException
Retrieve protocol corresponding to the failover options. if no failover option, protocol will not be proxied. if a failover option is precised, protocol will be proxied so that any connection error will be handle directly.

Parameters:
urlParser - urlParser corresponding to connection url string.
lock - lock to handle thread synchronisation
Returns:
protocol
Throws:
SQLException - if any error occur during connection

getTimeZone

public static TimeZone getTimeZone(String id)
                            throws SQLException
Get timezone from Id. This differ from java implementation : by default, if timezone Id is unknown, java return GMT timezone. GMT will be return only if explicitly asked.

Parameters:
id - timezone id
Returns:
timezone.
Throws:
SQLException - if no timezone is found for this Id

createSocket

public static Socket createSocket(UrlParser urlParser,
                                  String host)
                           throws IOException
Create socket accordingly to options.

Parameters:
urlParser - urlParser
host - hostName ( mandatory only for named pipe)
Returns:
a nex socket
Throws:
IOException - if connection error occur

hexdump

public static String hexdump(byte[]... bytes)
Hexdump.

Parameters:
bytes - byte arrays
Returns:
String

hexdump

public static String hexdump(int maxQuerySizeToLog,
                             int offset,
                             byte[]... bytes)
Hexdump.

Parameters:
maxQuerySizeToLog - max log size
offset - offset of last byte array
bytes - byte arrays
Returns:
String

hexdump

public static String hexdump(int maxQuerySizeToLog,
                             int offset,
                             int length,
                             byte[]... byteArr)
Hexdump.

String output example :

 7D 00 00 01 C5 00 00                                 ......            <- first byte array
    01 00 00 01 02 33 00 00  02 03 64 65 66 05 74 65     .....3....def.te   <- second byte array
    73 74 6A 0A 74 65 73 74  5F 62 61 74 63 68 0A 74     stj.test_batch.t
    65 73 74 5F 62 61 74 63  68 02 69 64 02 69 64 0C     est_batch.id.id.
    3F 00 0B 00 00 00 03 03  42 00 00 00 37 00 00 03     ?.......B...7...
    03 64 65 66 05 74 65 73  74 6A 0A 74 65 73 74 5F     .def.testj.test_
    62 61 74 63 68 0A 74 65  73 74 5F 62 61 74 63 68     batch.test_batch
    04 74 65 73 74 04 74 65  73 74 0C 21 00 1E 00 00     .test.test.!....
    00 FD 00 00 00 00 00 05  00 00 04 FE 00 00 22 00     ..............".
    06 00 00 05 01 31 03 61  61 61 06 00 00 06 01 32     .....1.aaa.....2
    03 62 62 62 06 00 00 07  01 33 03 63 63 63 06 00     .bbb.....3.ccc..
    00 08 01 34 03 61 61 61  06 00 00 09 01 35 03 62     ...4.aaa.....5.b
    62 62 06 00 00 0A 01 36  03 63 63 63 05 00 00 0B     bb.....6.ccc....
    FE 00 00 22 00                                       ...".
 }
 

Parameters:
maxQuerySizeToLog - max log size
offset - offset of last byte array
length - length of last byte array
byteArr - byte arrays. if many, only the last may have offset and size limitation others will be displayed completely.
Returns:
String

writeHex

public static void writeHex(byte[] bytes,
                            int offset,
                            int dataLength,
                            StringBuilder outputBuilder)
Write bytes/hexadecimal value of a byte array to a StringBuilder.

String output example :

 38 00 00 00 03 63 72 65  61 74 65 20 74 61 62 6C     8....create tabl
 65 20 42 6C 6F 62 54 65  73 74 63 6C 6F 62 74 65     e BlobTestclobte
 73 74 32 20 28 73 74 72  6D 20 74 65 78 74 29 20     st2 (strm text)
 43 48 41 52 53 45 54 20  75 74 66 38                 CHARSET utf8
 
 

Parameters:
bytes - byte array
offset - offset
dataLength - byte length to write
outputBuilder - string builder

getHex

protected static String getHex(byte[] raw)

byteArrayToHexString

public static String byteArrayToHexString(byte[] bytes)

parseSessionVariables

public static String parseSessionVariables(String sessionVariable)
Parse the option "sessionVariable" to ensure having no injection. semi-column not in string will be replaced by comma.

Parameters:
sessionVariable - option value
Returns:
parsed String


Copyright © 2017. All rights reserved.