1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
//
// OciServiceHandle.cs
//
// Part of managed C#/.NET library System.Data.OracleClient.dll
//
// Part of the Mono class libraries at
// mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci
//
// Assembly: System.Data.OracleClient.dll
// Namespace: System.Data.OracleClient.Oci
//
// Author:
// Tim Coleman <tim@timcoleman.com>
// Daniel Morgan <monodanmorg@yahoo.com>
//
// Copyright (C) Tim Coleman, 2003
// Copyright (C) Daniel Morgan, 2009
//
//#define ORACLE_DATA_ACCESS
using System;
using System.Runtime.InteropServices;
namespace System.Data.OracleClient.Oci {
internal sealed class OciServiceHandle : OciHandle
{
#region Fields
bool disposed = false;
OciSessionHandle session;
OciServerHandle server;
OciErrorHandle errorHandle;
#if ORACLE_DATA_ACCESS
static readonly uint OCI_AUTH = 8;
#endif
#endregion // Fields
#region Constructors
public OciServiceHandle (OciHandle parent, IntPtr handle)
: base (OciHandleType.Service, parent, handle)
{
}
#endregion // Constructors
#region Properties
public OciErrorHandle ErrorHandle {
get { return errorHandle; }
set { errorHandle = value; }
}
#endregion // Properties
#region Methods
protected override void Dispose (bool disposing)
{
if (!disposed) {
try {
if (disposing) {
//if (server != null)
// server.Dispose ();
//if (session != null)
// session.Dispose ();
}
disposed = true;
} finally {
base.Dispose (disposing);
}
}
}
public bool SetServer (OciServerHandle handle)
{
server = handle;
int status = OciCalls.OCIAttrSet (this,
HandleType,
server,
0,
OciAttributeType.Server,
ErrorHandle);
return (status == 0);
}
public bool SetSession (OciSessionHandle handle)
{
session = handle;
int status = OciCalls.OCIAttrSet (this,
HandleType,
session,
0,
OciAttributeType.Session,
ErrorHandle);
return (status == 0);
}
#if ORACLE_DATA_ACCESS
byte[] UnicodeToCharSet (string s)
{
int rsize = 0;
byte [] buffer;
// Get size of buffer
OciCalls.OCIUnicodeToCharSet (Parent, null, s, out rsize);
// Fill buffer
buffer = new byte[rsize];
OciCalls.OCIUnicodeToCharSet (Parent, buffer, s, out rsize);
return buffer;
}
internal bool ChangePassword (string new_password, OciErrorHandle error)
{
if (!session.SetCredentialAttributes (error))
return false;
byte[] ub = UnicodeToCharSet (session.Username
byte[] opb = UnicodeToCharSet (session.Password);
byte[] npb = UnicodeToCharSet (new_password);
int status = OciCalls.OCIPasswordChange (this, error, ub, ub.Length, opb, opb.Length, npb, npb.Length, OCI_AUTH);
if (status == 0) {
session.Password = new_password;
return true;
}
return false;
}
#endif
#endregion // Methods
}
}
|