Skip to content

Commit 2067ac8

Browse files
authored
Merge pull request #591 from stle04/master
Go-Ora improvements
2 parents 83dff98 + 35e8326 commit 2067ac8

File tree

214 files changed

+2556
-1928
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

214 files changed

+2556
-1928
lines changed

README.md

+2-3
Original file line numberDiff line numberDiff line change
@@ -664,9 +664,8 @@ db, err := sql.Open("oracle", "")
664664

665665
### version 2.8.19
666666
* add support for long input:
667-
> if input parameter (string or []byte) size is larger than 32Kb the driver will switch to oracle type
668-
`LongVarchar` and `LongRaw` so now you can input data with size up to 1 GB that fit into LONG and LOB columns
669-
* long input: [example](https://github.com/sijms/go-ora/blob/master/examples/long_input/main.go) and [test](https://github.com/sijms/go-ora/blob/master/v2/TestIssues/long_input_test.go)
667+
* if input parameter (string or []byte) larger than 32Kb the driver will swith type to `LongVarchar` and `LongRaw`
668+
* so now you can input data with size up to 1 GB that fit into LONG and LOB columns
670669
* add function `RegisterDial` to the configuration object that accept func input
671670
```golang
672671
config, err := go_ora.ParseConfig(`yours DSN string`)

advanced_nego/advanced_nego.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/binary"
55
"errors"
66
"fmt"
7+
78
"github.com/sijms/go-ora/network"
89
)
910

@@ -38,6 +39,7 @@ func NewAdvNego(session *network.Session) (*AdvNego, error) {
3839
}
3940
return output, nil
4041
}
42+
4143
func (nego *AdvNego) readHeader() ([]int, error) {
4244
num, err := nego.comm.session.GetInt64(4, false, true)
4345
if err != nil {
@@ -62,13 +64,15 @@ func (nego *AdvNego) readHeader() ([]int, error) {
6264
output[3], err = nego.comm.session.GetInt(1, false, true)
6365
return output, err
6466
}
67+
6568
func (nego *AdvNego) writeHeader(length, servCount int, errFlags uint8) {
6669
nego.comm.session.PutInt(uint64(0xDEADBEEF), 4, true, false)
6770
nego.comm.session.PutInt(length, 2, true, false)
6871
nego.comm.session.PutInt(version, 4, true, false)
6972
nego.comm.session.PutInt(servCount, 2, true, false)
7073
nego.comm.session.PutBytes(errFlags)
7174
}
75+
7276
func (nego *AdvNego) readServiceHeader() ([]int, error) {
7377
output := make([]int, 3)
7478
var err error
@@ -83,6 +87,7 @@ func (nego *AdvNego) readServiceHeader() ([]int, error) {
8387
output[2], err = nego.comm.session.GetInt(4, false, true)
8488
return output, err
8589
}
90+
8691
func (nego *AdvNego) Read() error {
8792
header, err := nego.readHeader()
8893
if err != nil {
@@ -187,19 +192,20 @@ func (nego *AdvNego) Read() error {
187192
if err != nil {
188193
return err
189194
}
190-
//fmt.Println(nego.comm.session.GetBytes(10))
191-
//return errors.New("interrupt")
195+
// fmt.Println(nego.comm.session.GetBytes(10))
196+
// return errors.New("interrupt")
192197
return nil
193198
}
194199
return nego.comm.session.Write()
195200
}
201+
196202
func (nego *AdvNego) Write() error {
197203
nego.comm.session.ResetBuffer()
198204
size := 0
199205
for i := 1; i < 5; i++ {
200206
size = size + 8 + nego.serviceList[i].getServiceDataLength()
201207
}
202-
//size += 13
208+
// size += 13
203209
nego.writeHeader(13+size, 4, 0)
204210
err := nego.serviceList[4].writeServiceData()
205211
if err != nil {

advanced_nego/auth_service.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ func NewAuthService(comm *AdvancedNegoComm) (*authService, error) {
2121
},
2222
status: 0xFCFF,
2323
}
24-
//var avaAuth []string
24+
// var avaAuth []string
2525
output.availableServiceNames = []string{"", "NTS", "KERBEROS5", "TCPS"}
2626
output.availableServiceIDs = []int{0, 1, 1, 2}
2727
//if runtime.GOOS == "windows" {
@@ -45,7 +45,7 @@ func NewAuthService(comm *AdvancedNegoComm) (*authService, error) {
4545
//}
4646
//level := conops.Encryption != null ? conops.Encryption : snoConfig[];
4747
err := output.buildServiceList(connOption.AuthService, false, false)
48-
//output.selectedServ, err = output.validate(strings.Split(str,","), true)
48+
// output.selectedServ, err = output.validate(strings.Split(str,","), true)
4949
if err != nil {
5050
return nil, err
5151
}

advanced_nego/comm.go

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package advanced_nego
22

33
import (
44
"errors"
5+
56
"github.com/sijms/go-ora/network"
67
)
78

@@ -73,6 +74,7 @@ func (comm *AdvancedNegoComm) readUB1() (number uint8, err error) {
7374
number, err = comm.session.GetByte()
7475
return
7576
}
77+
7678
func (comm *AdvancedNegoComm) writeUB1(number uint8) {
7779
comm.writePacketHeader(1, 2)
7880
comm.session.PutBytes(number)
@@ -130,6 +132,7 @@ func (comm *AdvancedNegoComm) readStatus() (status int, err error) {
130132
status, err = comm.session.GetInt(2, false, true)
131133
return
132134
}
135+
133136
func (comm *AdvancedNegoComm) readVersion() (uint32, error) {
134137
_, err := comm.readPacketHeader(5)
135138
if err != nil {

advanced_nego/data_integrity_service.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import (
66
"crypto/rand"
77
"errors"
88
"fmt"
9-
"github.com/sijms/go-ora/network/security"
109
"math/big"
10+
11+
"github.com/sijms/go-ora/network/security"
1112
)
1213

1314
type dataIntegrityService struct {
@@ -29,7 +30,7 @@ func NewDataIntegrityService(comm *AdvancedNegoComm) (*dataIntegrityService, err
2930
},
3031
}
3132
err := output.buildServiceList([]string{}, true, true)
32-
//output.selectedServ, err = output.validate(strings.Split(str,","), true)
33+
// output.selectedServ, err = output.validate(strings.Split(str,","), true)
3334
if err != nil {
3435
return nil, err
3536
}
@@ -107,6 +108,7 @@ func (serv *dataIntegrityService) readServiceData(subPacketNum int) error {
107108
tracer.LogPacket("Shared Key:", serv.sharedKey)
108109
return nil
109110
}
111+
110112
func (serv *dataIntegrityService) writeServiceData() error {
111113
serv.writeHeader(2)
112114
comm := serv.comm
@@ -115,7 +117,7 @@ func (serv *dataIntegrityService) writeServiceData() error {
115117
for i := 0; i < len(serv.selectedIndices); i++ {
116118
index := serv.selectedIndices[i]
117119
selectedIndices[i] = uint8(serv.availableServiceIDs[index])
118-
//comm.session.PutBytes(uint8(serv.availableServiceIDs[index]))
120+
// comm.session.PutBytes(uint8(serv.availableServiceIDs[index]))
119121
}
120122
comm.writeBytes(selectedIndices)
121123
return nil
@@ -128,7 +130,7 @@ func (serv *dataIntegrityService) getServiceDataLength() int {
128130
func (serv *dataIntegrityService) activateAlgorithm() error {
129131
serv.comm.session.Context.AdvancedService.SessionKey = serv.sharedKey
130132
serv.comm.session.Context.AdvancedService.IV = serv.iV
131-
//return errors.New(fmt.Sprintf("advanced negotiation error: data integrity service algorithm: %d still not supported", serv.algoID))
133+
// return errors.New(fmt.Sprintf("advanced negotiation error: data integrity service algorithm: %d still not supported", serv.algoID))
132134
var algo security.OracleNetworkDataIntegrity = nil
133135
var err error
134136
switch serv.algoID {

advanced_nego/default_service.go

+62-57
Original file line numberDiff line numberDiff line change
@@ -23,75 +23,79 @@ type defaultService struct {
2323
availableServiceIDs []int
2424
selectedIndices []int
2525
version uint32
26-
//selectedServ map[string]int
27-
//avaServs map[string]int
26+
// selectedServ map[string]int
27+
// avaServs map[string]int
2828
}
2929

3030
func (serv *defaultService) getVersion() uint32 {
3131
return serv.version
3232
}
33+
3334
func (serv *defaultService) activateAlgorithm() error {
3435
return nil
3536
}
3637

37-
//func (serv *defaultService) writePacketHeader(session *network.Session, length, _type int) {
38-
// // the driver call Anocommunication.ValidateType(length, type);
39-
// session.PutInt(length, 2, true, false)
40-
// session.PutInt(_type, 2, true, false)
41-
//}
42-
//func (serv *defaultService) readPacketHeader(session *network.Session, _type int) (length int, err error) {
43-
// length, err = session.GetInt(2, false, true)
44-
// if err != nil {
45-
// return
46-
// }
47-
// receivedType, err := session.GetInt(2, false, true)
48-
// if err != nil {
49-
// return 0, err
50-
// }
51-
// if receivedType != _type {
52-
// err = errors.New("advanced negotiation error: received type is not as stored type")
53-
// return
38+
// func (serv *defaultService) writePacketHeader(session *network.Session, length, _type int) {
39+
// // the driver call Anocommunication.ValidateType(length, type);
40+
// session.PutInt(length, 2, true, false)
41+
// session.PutInt(_type, 2, true, false)
5442
// }
55-
// err = serv.validatePacketHeader(length, receivedType)
56-
// return
57-
//}
58-
//func (serv *defaultService) validatePacketHeader(length, _type int) error {
59-
// if _type < 0 || _type > 7 {
60-
// return errors.New("advanced negotiation error: cannot validate packet header")
61-
// }
62-
// switch _type {
63-
// case 0, 1:
64-
// break
65-
// case 2:
66-
// if length > 1 {
67-
// return errors.New("advanced negotiation error: cannot validate packet header")
43+
//
44+
// func (serv *defaultService) readPacketHeader(session *network.Session, _type int) (length int, err error) {
45+
// length, err = session.GetInt(2, false, true)
46+
// if err != nil {
47+
// return
6848
// }
69-
// case 3:
70-
// fallthrough
71-
// case 6:
72-
// if length > 2 {
73-
// return errors.New("advanced negotiation error: cannot validate packet header")
49+
// receivedType, err := session.GetInt(2, false, true)
50+
// if err != nil {
51+
// return 0, err
52+
// }
53+
// if receivedType != _type {
54+
// err = errors.New("advanced negotiation error: received type is not as stored type")
55+
// return
7456
// }
75-
// case 4:
76-
// fallthrough
77-
// case 5:
78-
// if length > 4 {
57+
// err = serv.validatePacketHeader(length, receivedType)
58+
// return
59+
// }
60+
//
61+
// func (serv *defaultService) validatePacketHeader(length, _type int) error {
62+
// if _type < 0 || _type > 7 {
7963
// return errors.New("advanced negotiation error: cannot validate packet header")
8064
// }
81-
// case 7:
82-
// if length < 10 {
65+
// switch _type {
66+
// case 0, 1:
67+
// break
68+
// case 2:
69+
// if length > 1 {
70+
// return errors.New("advanced negotiation error: cannot validate packet header")
71+
// }
72+
// case 3:
73+
// fallthrough
74+
// case 6:
75+
// if length > 2 {
76+
// return errors.New("advanced negotiation error: cannot validate packet header")
77+
// }
78+
// case 4:
79+
// fallthrough
80+
// case 5:
81+
// if length > 4 {
82+
// return errors.New("advanced negotiation error: cannot validate packet header")
83+
// }
84+
// case 7:
85+
// if length < 10 {
86+
// return errors.New("advanced negotiation error: cannot validate packet header")
87+
// }
88+
// default:
8389
// return errors.New("advanced negotiation error: cannot validate packet header")
8490
// }
85-
// default:
86-
// return errors.New("advanced negotiation error: cannot validate packet header")
91+
// return nil
92+
// }
93+
//
94+
// func (serv *defaultService) readUB2(session *network.Session) (number int, err error) {
95+
// _, err = serv.readPacketHeader(session, 3)
96+
// number, err = session.GetInt(2, false, true)
97+
// return
8798
// }
88-
// return nil
89-
//}
90-
//func (serv *defaultService) readUB2(session *network.Session) (number int, err error) {
91-
// _, err = serv.readPacketHeader(session, 3)
92-
// number, err = session.GetInt(2, false, true)
93-
// return
94-
//}
9599
func (serv *defaultService) writeHeader(serviceSubPackets int) {
96100
serv.comm.session.PutInt(serv.serviceType, 2, true, false)
97101
serv.comm.session.PutInt(serviceSubPackets, 2, true, false)
@@ -136,11 +140,11 @@ func (serv *defaultService) readAdvNegoLevel(level string) {
136140

137141
func (serv *defaultService) buildServiceList(userList []string, useLevel, useDefault bool) error {
138142
serv.selectedIndices = make([]int, 0, 10)
139-
//serv.selectedServ = make(map[string]int)
143+
// serv.selectedServ = make(map[string]int)
140144
if useLevel {
141145
if serv.level == 1 {
142146
serv.selectedIndices = append(serv.selectedIndices, 0)
143-
//serv.selectedServ[""] = 0
147+
// serv.selectedServ[""] = 0
144148
return nil
145149
}
146150
if serv.level != 0 && serv.level != 2 && serv.level != 3 {
@@ -166,7 +170,7 @@ func (serv *defaultService) buildServiceList(userList []string, useLevel, useDef
166170
}
167171
if useLevel && serv.level == 2 {
168172
serv.selectedIndices = append(serv.selectedIndices, 0)
169-
//serv.selectedServ[""] = 0
173+
// serv.selectedServ[""] = 0
170174
}
171175
}
172176
return nil
@@ -182,7 +186,7 @@ func (serv *defaultService) buildServiceList(userList []string, useLevel, useDef
182186
}
183187
if useLevel && serv.level == 2 {
184188
serv.selectedIndices = append(serv.selectedIndices, 0)
185-
//serv.selectedServ[""] = 0
189+
// serv.selectedServ[""] = 0
186190
}
187191
return nil
188192
} else if strings.ToUpper(userList[0]) == "NONE" {
@@ -191,7 +195,7 @@ func (serv *defaultService) buildServiceList(userList []string, useLevel, useDef
191195
}
192196
if useLevel && serv.level == 0 {
193197
serv.selectedIndices = append(serv.selectedIndices, 0)
194-
//serv.selectedServ[""] = 0
198+
// serv.selectedServ[""] = 0
195199
}
196200
for _, userItem := range userList {
197201
if userItem == "" {
@@ -222,6 +226,7 @@ func (serv *defaultService) buildServiceList(userList []string, useLevel, useDef
222226
}
223227
return nil
224228
}
229+
225230
func (serv *defaultService) validateResponse() error {
226231
return nil
227232
}

advanced_nego/encrypt_service.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package advanced_nego
33
import (
44
"errors"
55
"fmt"
6+
67
"github.com/sijms/go-ora/network/security"
78
)
89

@@ -17,13 +18,15 @@ func NewEncryptService(comm *AdvancedNegoComm) (*encryptService, error) {
1718
comm: comm,
1819
serviceType: 2,
1920
version: 0xB200200,
20-
availableServiceNames: []string{"", "RC4_40", "RC4_56", "RC4_128", "RC4_256",
21-
"DES40C", "DES56C", "3DES112", "3DES168", "AES128", "AES192", "AES256"},
21+
availableServiceNames: []string{
22+
"", "RC4_40", "RC4_56", "RC4_128", "RC4_256",
23+
"DES40C", "DES56C", "3DES112", "3DES168", "AES128", "AES192", "AES256",
24+
},
2225
availableServiceIDs: []int{0, 1, 8, 10, 6, 3, 2, 11, 12, 15, 16, 17},
2326
},
2427
}
2528
err := output.buildServiceList([]string{"DES56C", "AES128", "AES192", "AES256"}, true, true)
26-
//output.selectedServ, err = output.validate(strings.Split(str,","), true)
29+
// output.selectedServ, err = output.validate(strings.Split(str,","), true)
2730
if err != nil {
2831
return nil, err
2932
}
@@ -45,6 +48,7 @@ func (serv *encryptService) readServiceData(subPacketnum int) error {
4548

4649
return nil
4750
}
51+
4852
func (serv *encryptService) writeServiceData() error {
4953
serv.writeHeader(3)
5054
comm := serv.comm
@@ -66,7 +70,7 @@ func (serv *encryptService) getServiceDataLength() int {
6670

6771
func (serv *encryptService) activateAlgorithm() error {
6872
key := serv.comm.session.Context.AdvancedService.SessionKey
69-
//iv := make([]byte, 16)
73+
// iv := make([]byte, 16)
7074
var algo security.OracleNetworkEncryption = nil
7175
var err error
7276
switch serv.algoID {

advanced_nego/ntlmssp/authenticate_message.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ func (m authenicateMessage) MarshalBinary() ([]byte, error) {
8080
return b.Bytes(), nil
8181
}
8282

83-
//ProcessChallenge crafts an AUTHENTICATE message in response to the CHALLENGE message
84-
//that was received from the server
83+
// ProcessChallenge crafts an AUTHENTICATE message in response to the CHALLENGE message
84+
// that was received from the server
8585
func ProcessChallenge(challengeMessageData []byte, user, password string) ([]byte, error) {
8686
if user == "" && password == "" {
8787
return nil, errors.New("Anonymous authentication not supported")

0 commit comments

Comments
 (0)