jamdb_oracle
jamdb_oracle copied to clipboard
Kerberos Authentication
Would it be possible to include Kerberos Authentication for the database connection options? I'm honestly not even sure what that would entail since I've only ever interfaced with Kerberos authentication via JDBC drivers on the JVM. I'd be open to helping however I can if that's something the project would be willing to maintain, but admittedly I've only been writing Elixir for about a month now and Erlang still looks foreign to me.
I can make a kerberos authenticated connection to my test Oracle database on openSUSE using SQL Developer with JDBC. Okay, I'll see what I can do with erlang.

- Patch java class to to get more debug data
--- Krb5Context.java.new 2020-09-11 16:44:15.270932587 +0300
+++ Krb5Context.java 2020-09-11 17:05:06.282453974 +0300
@@ -717,6 +717,9 @@
* succesfully established; however it is easier
* to do here and there is no harm indoing it here.
*/
+ if (DEBUG) {
+ System.out.println(subject.toString());
+ }
final KerberosTicket kt =
Krb5Util.credsToTicket(serviceCreds);
AccessController.doPrivileged (
@@ -746,6 +749,8 @@
state = STATE_DONE;
}
if (DEBUG) {
+ System.out.println(tgt.toString());
+ System.out.println(serviceCreds.toString());
System.out.println("Created InitSecContextToken:\n"+
new HexDumpEncoder().encodeBuffer(retVal));
}
- This is much better
Java asserts are enabled!
Java config name: null
Native config name: /etc/krb5.conf
Loaded from native config
>>> KdcAccessibility: reset
Using builtin default etypes for default_tkt_enctypes
default etypes for default_tkt_enctypes: 18 17 16 23.
>>> KrbAsReq creating message
>>> KrbKdcReq send: kdc=proc-mike UDP:88, timeout=30000, number of retries =3, #bytes=136
>>> KDCCommunication: kdc=proc-mike UDP:88, timeout=30000,Attempt =1, #bytes=136
>>> KrbKdcReq send: #bytes read=633
>>> KdcAccessibility: remove proc-mike
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType
>>> KrbAsRep cons in KrbAsReq.getReply KOPL
Found ticket for KOPL@PROC-MIKE to go to krbtgt/PROC-MIKE@PROC-MIKE expiring on Fri Sep 11 01:42:54 EEST 2020
Entered Krb5Context.initSecContext with state=STATE_NEW
Found ticket for KOPL@PROC-MIKE to go to krbtgt/PROC-MIKE@PROC-MIKE expiring on Fri Sep 11 01:42:54 EEST 2020
Service ticket not found in the subject
>>> Credentials acquireServiceCreds: same realm
Using builtin default etypes for default_tgs_enctypes
default etypes for default_tgs_enctypes: 18 17 16 23.
>>> CksumType: sun.security.krb5.internal.crypto.RsaMd5CksumType
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType
>>> KrbKdcReq send: kdc=proc-mike UDP:88, timeout=30000, number of retries =3, #bytes=626
>>> KDCCommunication: kdc=proc-mike UDP:88, timeout=30000,Attempt =1, #bytes=626
>>> KrbKdcReq send: #bytes read=592
>>> KdcAccessibility: remove proc-mike
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType
Subject:
Principal: KOPL@PROC-MIKE
Private Credential: Ticket (hex) =
0000: 61 82 01 34 30 82 01 30 A0 03 02 01 05 A1 0B 1B a..40..0........
0010: 09 50 52 4F 43 2D 4D 49 4B 45 A2 1E 30 1C A0 03 .PROC-MIKE..0...
0020: 02 01 02 A1 15 30 13 1B 06 6B 72 62 74 67 74 1B .....0...krbtgt.
0030: 09 50 52 4F 43 2D 4D 49 4B 45 A3 81 FB 30 81 F8 .PROC-MIKE...0..
0040: A0 03 02 01 12 A1 03 02 01 02 A2 81 EB 04 81 E8 ................
0050: 92 C9 A0 91 73 51 6E 43 89 33 0F 3B 0C 69 A3 ED ....sQnC.3.;.i..
0060: 9A D8 16 F1 67 33 7F BA F7 A6 B4 B7 53 80 AE E8 ....g3......S...
0070: F8 F4 CA EB 40 F5 57 32 5F 47 EA 58 48 D2 E7 72 [email protected]_G.XH..r
0080: D0 D8 45 BD 69 F7 B4 7A 34 B1 75 18 C3 11 1E 8D ..E.i..z4.u.....
0090: 36 CA 7F 74 6C A5 63 C5 1B 7E A4 87 F7 4C 39 E1 6..tl.c......L9.
00A0: B2 AB 84 4F 5B 73 C6 24 E5 86 77 9E 3E 2B 6A 6D ...O[s.$..w.>+jm
00B0: BB 2C 3E 36 11 13 E7 BB 0D 40 A1 8B F7 E8 D6 26 .,>6.....@.....&
00C0: F0 35 D4 A2 66 68 82 72 0F 25 C6 97 90 D2 8C 50 .5..fh.r.%.....P
00D0: 20 97 E4 36 BE 53 64 63 F4 C0 B1 36 12 0D 9E 7B ..6.Sdc...6....
00E0: CA 3B 4D 0D 4E C0 69 46 53 57 01 A8 CA 54 F5 4F .;M.N.iFSW...T.O
00F0: 85 72 3F C5 1F 73 29 EF 63 21 29 25 75 8A 44 A8 .r?..s).c!)%u.D.
0100: EF B9 D4 5D 93 E5 C3 20 12 CA EE 84 C8 51 C6 1A ...]... .....Q..
0110: 59 E2 A6 BD 05 87 9B EF A1 0B F4 E4 D4 6A A3 A6 Y............j..
0120: 2E C9 77 1E 85 CF 47 C1 F3 D3 6B CC 44 EF 4E F7 ..w...G...k.D.N.
0130: F1 32 BD 1C FF B4 4A 7E .2....J.
Client Principal = KOPL@PROC-MIKE
Server Principal = krbtgt/PROC-MIKE@PROC-MIKE
Session Key = EncryptionKey: keyType=18 keyBytes (hex dump)=
0000: A3 80 C5 10 99 B9 AC BD 7D 12 B2 F7 46 FF DF 28 ............F..(
0010: CF 44 19 47 D7 BD DE 64 DC B6 3D 98 8D E1 1B 9D .D.G...d..=.....
Forwardable Ticket false
Forwarded Ticket false
Proxiable Ticket false
Proxy Ticket false
Postdated Ticket false
Renewable Ticket false
Initial Ticket false
Auth Time = Thu Sep 10 15:42:54 EEST 2020
Start Time = Thu Sep 10 15:42:54 EEST 2020
End Time = Fri Sep 11 01:42:54 EEST 2020
Renew Till = null
Client Addresses Null
>>> KrbApReq: APOptions are 00000000 00000000 00000000 00000000
>>> EType: sun.security.krb5.internal.crypto.Aes256CtsHmacSha1EType
Krb5Context setting mySeqNumber to: 651736746
Krb5Context setting peerSeqNumber to: 0
Credentials:
client=KOPL@PROC-MIKE
server=krbtgt/PROC-MIKE@PROC-MIKE
authTime=20200910124254Z
startTime=20200910124254Z
endTime=20200910224254Z
renewTill=null
flags=INITIAL
EType (skey)=18
(tkt key)=18
Credentials:
client=KOPL@PROC-MIKE
server=oracle/proc-mike@PROC-MIKE
authTime=20200910124254Z
endTime=20200910224254Z
renewTill=null
flags=
EType (skey)=18
(tkt key)=18
Created InitSecContextToken:
0000: 01 00 6E 82 02 21 30 82 02 1D A0 03 02 01 05 A1 ..n..!0.........
0010: 03 02 01 0E A2 07 03 05 00 00 00 00 00 A3 82 01 ................
0020: 38 61 82 01 34 30 82 01 30 A0 03 02 01 05 A1 0B 8a..40..0.......
0030: 1B 09 50 52 4F 43 2D 4D 49 4B 45 A2 1E 30 1C A0 ..PROC-MIKE..0..
0040: 03 02 01 00 A1 15 30 13 1B 06 6F 72 61 63 6C 65 ......0...oracle
0050: 1B 09 70 72 6F 63 2D 6D 69 6B 65 A3 81 FB 30 81 ..proc-mike...0.
0060: F8 A0 03 02 01 12 A1 03 02 01 02 A2 81 EB 04 81 ................
0070: E8 E9 71 FB B4 28 94 94 0A 0B 68 02 FF B2 83 2E ..q..(....h.....
0080: 4B 85 CD 05 F3 7C E7 5B 03 98 52 C1 5F 93 D3 D8 K......[..R._...
0090: B5 93 8B 3E B0 0B 94 4B F1 FD E2 F9 C5 4C 85 08 ...>...K.....L..
00A0: 95 78 B0 8E 5B 84 DA 3E 2E 09 5A 8B 0A 7B 74 F6 .x..[..>..Z...t.
00B0: 80 D7 67 F6 3D B3 69 95 6E 68 3D 93 C9 F6 40 1B ..g.=.i.nh=...@.
00C0: F4 46 9A DC 12 14 B1 56 54 ED C3 29 89 A7 24 9F .F.....VT..)..$.
00D0: 3D BD 9C E9 CC A8 D1 29 80 70 9B D9 BC C7 A1 C4 =......).p......
00E0: 70 00 3E 44 11 CF F8 05 C4 F0 DB 8F F8 88 8A 35 p.>D...........5
00F0: 19 B2 45 F1 89 66 70 77 C5 09 85 AE 9C 69 C6 15 ..E..fpw.....i..
0100: 07 03 FF 37 56 53 06 7E C4 A0 82 D5 5D 96 89 64 ...7VS......]..d
0110: 46 D8 E5 25 D1 6F 40 9E 6C 23 E2 23 85 8D A0 69 F..%[email protected]#.#...i
0120: 38 45 BE AC B8 1F 20 ED C8 C1 9E 4D 3F 7A 8C 48 8E.... ....M?z.H
0130: 0A E3 81 A3 FD 52 15 F6 14 6E 75 E7 38 8B 85 72 .....R...nu.8..r
0140: 1A 14 D2 33 D7 AF B4 A8 C6 07 A3 33 52 AC FF DF ...3.......3R...
0150: 4F 60 38 24 22 45 18 8F BE A4 81 CB 30 81 C8 A0 O`8$"E......0...
0160: 03 02 01 12 A2 81 C0 04 81 BD D9 7E 2F A8 FC B0 ............/...
0170: 2E 2F 20 81 CA 9C 87 68 27 C8 96 6D 8E F3 7B 84 ./ ....h'..m....
0180: 4F 19 F3 25 45 AC 18 8F A1 65 55 94 3C 12 09 2D O..%E....eU.<..-
0190: D2 1E 15 5C 49 BD 88 31 FF 60 72 C9 6B FD F3 AA ...\I..1.`r.k...
01A0: 15 C4 72 71 0B 6C 41 EC 26 F1 F6 8E 15 FA C3 8B ..rq.lA.&.......
01B0: 59 D6 51 C2 9A 75 E7 0A 90 72 AB C6 49 56 87 02 Y.Q..u...r..IV..
01C0: 35 46 F6 60 E4 CA D5 17 FE C3 94 FC FD A2 5A F1 5F.`..........Z.
01D0: 14 B0 E9 25 C0 1A 76 8C 93 4C 89 F3 2D 22 6E 10 ...%..v..L..-"n.
01E0: CC 76 70 E0 88 71 68 F7 01 A6 92 97 FF AD 45 E8 .vp..qh.......E.
01F0: 33 EB 58 02 5B 24 E7 30 27 BB 34 D9 CB F9 2E 9B 3.X.[$.0'.4.....
0200: D7 9A FA 56 35 ED 25 70 35 C0 FF 69 BB 2B 87 F3 ...V5.%p5..i.+..
0210: 1F 4B 0A 20 9E B5 FA 5F 19 94 A1 F4 21 C8 5C 50 .K. ..._....!.\P
0220: 97 80 32 B6 2C 88 A1 ..2.,..
UsersCache.fillIn() time = 4 ret==null?: true
- Response packet with DEADBEEF headers and Credentials
0000 00 00 03 04 00 06 00 00 00 00 00 00 99 00 08 00 ................
0010 45 00 00 6a 47 fd 40 00 40 06 b4 55 0a 37 14 e7 E..jG.@[email protected]..
0020 0a 37 14 e7 05 f1 b9 0c 53 f5 5c 27 8f 7f c6 c4 .7......S.\'....
0030 80 18 01 6f 3e 98 00 00 01 01 08 0a 13 6f 1c bc ...o>........o..
0040 13 6f 1c bc 00 00 00 36 06 20 00 00 00 00 de ad .o.....6. ......
0050 be ef 00 2c 00 00 00 00 00 01 00 00 01 00 02 00 ...,............
0060 00 00 00 00 06 00 00 6f 72 61 63 6c 65 00 09 00 .......oracle...
0070 00 70 72 6f 63 2d 6d 69 6b 65 .proc-mike
- Request packet with DEADBEEF headers and InitSecContextToken
0000 00 00 03 04 00 06 00 00 00 00 00 00 6c 62 08 00 ............lb..
0010 45 00 02 92 d8 a7 40 00 40 06 21 83 0a 37 14 e7 E.....@.@.!..7..
0020 0a 37 14 e7 b9 0c 05 f1 8f 7f c6 c4 53 f5 5c 5d .7..........S.\]
0030 80 18 01 5e 40 c0 00 00 01 01 08 0a 13 6f 1c c7 ...^@........o..
0040 13 6f 1c bc 00 00 02 5e 06 20 00 00 00 00 de ad .o.....^. ......
0050 be ef 02 54 0a 20 00 00 00 01 00 00 01 00 04 00 ...T. ..........
0060 00 00 00 00 02 00 03 00 02 00 04 00 04 00 00 00 ................
0070 04 00 04 00 01 0a 37 14 e7 02 25 00 01 6e 82 02 ......7...%..n..
0080 21 30 82 02 1d a0 03 02 01 05 a1 03 02 01 0e a2 !0..............
0090 07 03 05 00 00 00 00 00 a3 82 01 38 61 82 01 34 ...........8a..4
00a0 30 82 01 30 a0 03 02 01 05 a1 0b 1b 09 50 52 4f 0..0.........PRO
00b0 43 2d 4d 49 4b 45 a2 1e 30 1c a0 03 02 01 00 a1 C-MIKE..0.......
00c0 15 30 13 1b 06 6f 72 61 63 6c 65 1b 09 70 72 6f .0...oracle..pro
00d0 63 2d 6d 69 6b 65 a3 81 fb 30 81 f8 a0 03 02 01 c-mike...0......
00e0 12 a1 03 02 01 02 a2 81 eb 04 81 e8 e9 71 fb b4 .............q..
00f0 28 94 94 0a 0b 68 02 ff b2 83 2e 4b 85 cd 05 f3 (....h.....K....
0100 7c e7 5b 03 98 52 c1 5f 93 d3 d8 b5 93 8b 3e b0 |.[..R._......>.
0110 0b 94 4b f1 fd e2 f9 c5 4c 85 08 95 78 b0 8e 5b ..K.....L...x..[
0120 84 da 3e 2e 09 5a 8b 0a 7b 74 f6 80 d7 67 f6 3d ..>..Z..{t...g.=
0130 b3 69 95 6e 68 3d 93 c9 f6 40 1b f4 46 9a dc 12 [email protected]...
0140 14 b1 56 54 ed c3 29 89 a7 24 9f 3d bd 9c e9 cc ..VT..)..$.=....
0150 a8 d1 29 80 70 9b d9 bc c7 a1 c4 70 00 3e 44 11 ..).p......p.>D.
0160 cf f8 05 c4 f0 db 8f f8 88 8a 35 19 b2 45 f1 89 ..........5..E..
0170 66 70 77 c5 09 85 ae 9c 69 c6 15 07 03 ff 37 56 fpw.....i.....7V
0180 53 06 7e c4 a0 82 d5 5d 96 89 64 46 d8 e5 25 d1 S.~....]..dF..%.
0190 6f 40 9e 6c 23 e2 23 85 8d a0 69 38 45 be ac b8 [email protected]#.#...i8E...
01a0 1f 20 ed c8 c1 9e 4d 3f 7a 8c 48 0a e3 81 a3 fd . ....M?z.H.....
01b0 52 15 f6 14 6e 75 e7 38 8b 85 72 1a 14 d2 33 d7 R...nu.8..r...3.
01c0 af b4 a8 c6 07 a3 33 52 ac ff df 4f 60 38 24 22 ......3R...O`8$"
01d0 45 18 8f be a4 81 cb 30 81 c8 a0 03 02 01 12 a2 E......0........
01e0 81 c0 04 81 bd d9 7e 2f a8 fc b0 2e 2f 20 81 ca ......~/..../ ..
01f0 9c 87 68 27 c8 96 6d 8e f3 7b 84 4f 19 f3 25 45 ..h'..m..{.O..%E
0200 ac 18 8f a1 65 55 94 3c 12 09 2d d2 1e 15 5c 49 ....eU.<..-...\I
0210 bd 88 31 ff 60 72 c9 6b fd f3 aa 15 c4 72 71 0b ..1.`r.k.....rq.
0220 6c 41 ec 26 f1 f6 8e 15 fa c3 8b 59 d6 51 c2 9a lA.&.......Y.Q..
0230 75 e7 0a 90 72 ab c6 49 56 87 02 35 46 f6 60 e4 u...r..IV..5F.`.
0240 ca d5 17 fe c3 94 fc fd a2 5a f1 14 b0 e9 25 c0 .........Z....%.
0250 1a 76 8c 93 4c 89 f3 2d 22 6e 10 cc 76 70 e0 88 .v..L..-"n..vp..
0260 71 68 f7 01 a6 92 97 ff ad 45 e8 33 eb 58 02 5b qh.......E.3.X.[
0270 24 e7 30 27 bb 34 d9 cb f9 2e 9b d7 9a fa 56 35 $.0'.4........V5
0280 ed 25 70 35 c0 ff 69 bb 2b 87 f3 1f 4b 0a 20 9e .%p5..i.+...K. .
0290 b5 fa 5f 19 94 a1 f4 21 c8 5c 50 97 80 32 b6 2c .._....!.\P..2.,
02a0 88 a1 ..
- After java I started making erlang NIF library
Not much so far.
UPDATED 2020-09-18
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <krb5/krb5.h>
#include "erl_nif.h"
/*
* internal
*/
void dump_data(krb5_data *data)
{
unsigned char *ptr = (unsigned char *)data->data;
int i;
for (i=0; i<data->length; i++) {
fprintf(stderr, "%02x ", ptr[i]);
//if ((i % 16) == 15) fprintf(stderr, "\n");
}
fprintf(stderr, "\n");
}
void dump_data2(krb5_data *data)
{
unsigned char *ptr = (unsigned char *)data->data;
int i;
for (i=0; i<data->length; i++) {
fprintf(stderr, "%c", (ptr[i] > 0x20 && ptr[i] < 0x7f) ? ptr[i] : 0x2e);
//if ((i % 16) == 15) fprintf(stderr, "\n");
}
fprintf(stderr, "\n");
}
/*
* internal
*/
static ERL_NIF_TERM k5error(ErlNifEnv* env, long ret) {
return enif_make_tuple2(env, enif_make_atom(env, "error"), enif_make_long(env, ret));
}
static ERL_NIF_TERM k5return(ErlNifEnv* env, krb5_data *data) {
ErlNifBinary bin;
if (!enif_alloc_binary(data->length, &bin))
return k5error(env, KV5M_NONE);
memcpy(bin.data, data->data, data->length);
return enif_make_tuple2(env, enif_make_atom(env, "ok"), enif_make_binary(env, &bin));
}
static ERL_NIF_TERM k5logon(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
krb5_error_code ret = 0;
krb5_get_init_creds_opt *opts = NULL;
krb5_principal princ = NULL;
krb5_ccache cc = NULL;
krb5_creds creds;
krb5_context ctx;
krb5_principal service_princ = NULL;
krb5_creds *service_creds;
krb5_data req;
ErlNifBinary name, password, service;
if (!enif_inspect_binary(env, argv[0], &name)
|| !enif_inspect_binary(env, argv[1], &password)
|| !enif_inspect_binary(env, argv[2], &service))
return enif_make_badarg(env);
memset(&creds, 0, sizeof(creds));
ret = krb5_init_secure_context(&ctx);
if (ret) {
return k5error(env, ret);
}
ret = krb5_parse_name(ctx, name.data, &princ);
if (ret) {
return k5error(env, ret);
}
ret = krb5_parse_name(ctx, service.data, &service_princ);
if (ret) {
return k5error(env, ret);
}
//ret = krb5_cc_resolve(ctx, "/tmp/krb5cc_jamdb", &cc);
ret = krb5_cc_resolve(ctx, "MEMORY", &cc);
if (ret) {
return k5error(env, ret);
}
ret = krb5_cc_initialize(ctx, cc, princ);
if (ret) {
return k5error(env, ret);
}
ret = krb5_get_init_creds_opt_alloc(ctx, &opts);
if (ret) {
return k5error(env, ret);
}
krb5_get_init_creds_opt_set_tkt_life(opts, 5 * 60);
ret = krb5_get_init_creds_password(ctx, &creds, princ, password.data, NULL, NULL, 0, NULL, opts);
if (ret) {
return k5error(env, ret);
}
dump_data(&creds.ticket);
dump_data2(&creds.ticket);
ret = krb5_copy_creds(ctx, &creds, &service_creds);
if (ret) {
return k5error(env, ret);
}
service_creds->server = service_princ;
service_creds->ticket_flags = 0;
ret = krb5_mk_req_extended(ctx, &auth_ctx, 1, NULL, service_creds, &req);
if (ret) {
return k5error(env, ret);
}
dump_data(&req);
dump_data2(&req);
return k5return(env, &req);
}
static int load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info) {
return 0;
}
static int upgrade(ErlNifEnv* env, void** priv_data, void** old_priv_data,
ERL_NIF_TERM load_info) {
return 0;
}
static void unload(ErlNifEnv* env, void* priv_data) {
}
static ErlNifFunc nif_funcs[] = {
{"k5logon", 3, k5logon}
};
ERL_NIF_INIT(jamdb_krb_app, nif_funcs, load, NULL, upgrade, unload)
load_nif ok
61 82 01 34 30 82 01 30 a0 03 02 01 05 a1 0b 1b 09 50 52 4f 43 2d 4d 49 4b 45 a2 1e 30 1c a0 03 02 01 02 a1 15 30 13 1b 06 6b 72 62 74 67 74 1b 09 50 52 4f 43 2d 4d 49 4b 45 a3 81 fb 30 81 f8 a0 03 02 01 12 a1 03 02 01 02 a2 81 eb 04 81 e8 82 8e b2 62 99 0f 81 f2 e6 f2 2c a0 2c b6 21 85 98 0d 39 3a 66 96 0d 89 ea 67 c9 1d 0c cf fe 70 fd 60 22 b2 e5 7e 30 12 9e e2 e7 a7 9d fe 16 45 9d b3 fd 07 f2 83 80 05 ad 26 e4 9a 79 db 18 ce 2c ec 37 45 e5 6d cf 19 16 ac 29 ea 39 9c 4a f9 f0 34 48 80 35 13 6c 7e 70 8a f1 c2 c0 19 d6 ef b6 e4 d0 90 73 4b 29 78 9a 65 a6 3e df 75 0e df d6 ae 79 23 a4 6d 86 40 56 48 22 89 50 4f 40 d6 b3 d1 62 18 2b 11 44 6a c3 7f bc 39 a2 e9 52 31 d3 dd 88 78 c5 73 0c b6 45 e1 13 c2 dd ef d6 e1 68 7f 17 80 ae 1d 6f e6 58 fb 5c 83 9a 78 74 1b 24 11 6b 35 a3 ed ee 09 6c 7c 2d bf 9b 4e 4b 05 b1 e7 e1 54 3b eb 7b 3f 0a 95 7b 5a bd be 1f 16 d0 8e 61 1c 3f cc 5e 8f 7d 2a fe e5 52 55 83 a6 d8 9a e0 fe ba 57 99 84
a..40..0.........PROC-MIKE..0........0...krbtgt..PROC-MIKE...0.....................b......,.,.!...9:f....g.....p.`"..~0........E.........&..y...,.7E.m....).9.J..4H.5.l~p...........sK)x.e.>.u....y#.m.@VH"[email protected].+.Dj...9..R1...x.s..E.......h.....o.X.\..xt.$.k5....l|-..NK....T;.{?..{Z......a.?.^.}*..RU.......W..
6e 82 01 f0 30 82 01 ec a0 03 02 01 05 a1 03 02 01 0e a2 07 03 05 00 00 00 00 00 a3 82 01 38 61 82 01 34 30 82 01 30 a0 03 02 01 05 a1 0b 1b 09 50 52 4f 43 2d 4d 49 4b 45 a2 1e 30 1c a0 03 02 01 02 a1 15 30 13 1b 06 6b 72 62 74 67 74 1b 09 50 52 4f 43 2d 4d 49 4b 45 a3 81 fb 30 81 f8 a0 03 02 01 12 a1 03 02 01 02 a2 81 eb 04 81 e8 82 8e b2 62 99 0f 81 f2 e6 f2 2c a0 2c b6 21 85 98 0d 39 3a 66 96 0d 89 ea 67 c9 1d 0c cf fe 70 fd 60 22 b2 e5 7e 30 12 9e e2 e7 a7 9d fe 16 45 9d b3 fd 07 f2 83 80 05 ad 26 e4 9a 79 db 18 ce 2c ec 37 45 e5 6d cf 19 16 ac 29 ea 39 9c 4a f9 f0 34 48 80 35 13 6c 7e 70 8a f1 c2 c0 19 d6 ef b6 e4 d0 90 73 4b 29 78 9a 65 a6 3e df 75 0e df d6 ae 79 23 a4 6d 86 40 56 48 22 89 50 4f 40 d6 b3 d1 62 18 2b 11 44 6a c3 7f bc 39 a2 e9 52 31 d3 dd 88 78 c5 73 0c b6 45 e1 13 c2 dd ef d6 e1 68 7f 17 80 ae 1d 6f e6 58 fb 5c 83 9a 78 74 1b 24 11 6b 35 a3 ed ee 09 6c 7c 2d bf 9b 4e 4b 05 b1 e7 e1 54 3b eb 7b 3f 0a 95 7b 5a bd be 1f 16 d0 8e 61 1c 3f cc 5e 8f 7d 2a fe e5 52 55 83 a6 d8 9a e0 fe ba 57 99 84 a4 81 9a 30 81 97 a0 03 02 01 12 a2 81 8f 04 81 8c b3 4e 17 c9 25 57 42 c5 b0 6b 1e 54 6e e7 b0 97 f1 aa 79 0d 60 80 34 cf cd ef ae 1b 0b 11 e2 6d 9a 95 36 fb c7 b4 6d ed 88 78 80 f0 9e cd 9f c9 f6 b7 53 dd 3b a8 d5 bd 3e 5d b6 ce dd 53 d0 5c 50 b5 31 48 4d 38 f8 83 b0 b9 4f f4 7f 19 03 cd 9f ee 4b b2 7a b9 cc b8 eb 60 7b 99 59 d7 b7 6a 58 25 db e2 12 b4 d6 33 31 6a c9 ea d5 a0 87 e6 c4 ca 4f 32 50 85 47 40 9f df 52 44 55 e9 ef 97 88 ae b9 e9 89 d7 62 d7 a8 b0 10 4b
n...0.........................8a..40..0.........PROC-MIKE..0........0...krbtgt..PROC-MIKE...0.....................b......,.,.!...9:f....g.....p.`"..~0........E.........&..y...,.7E.m....).9.J..4H.5.l~p...........sK)x.e.>.u....y#.m.@VH"[email protected].+.Dj...9..R1...x.s..E.......h.....o.X.\..xt.$.k5....l|-..NK....T;.{?..{Z......a.?.^.}*..RU.......W.....0..............N..%WB..k.Tn.....y.`.4........m..6...m..x........S.;...>]...S.\P.1HM8....O.......K.z....`{.Y..jX%[email protected]
{ok,<<110,130,1,240,48,130,1,236,160,3,2,1,5,161,3,2,1,14,162,7,3,5,0,0,0,0,0,
163,130,1,56,97,130,1,52,48,130,1,48,160,3,2,1,5,161,11,27,9,80,82,79,
67,45,77,73,75,69,162,30,48,28,160,3,2,1,2,161,21,48,19,27,6,107,114,98,
116,103,116,27,9,80,82,79,67,45,77,73,75,69,163,129,251,48,129,248,160,
3,2,1,18,161,3,2,1,2,162,129,235,4,129,232,130,142,178,98,153,15,129,
242,230,242,44,160,44,182,33,133,152,13,57,58,102,150,13,137,234,103,
201,29,12,207,254,112,253,96,34,178,229,126,48,18,158,226,231,167,157,
254,22,69,157,179,253,7,242,131,128,5,173,38,228,154,121,219,24,206,44,
236,55,69,229,109,207,25,22,172,41,234,57,156,74,249,240,52,72,128,53,
19,108,126,112,138,241,194,192,25,214,239,182,228,208,144,115,75,41,120,
154,101,166,62,223,117,14,223,214,174,121,35,164,109,134,64,86,72,34,
137,80,79,64,214,179,209,98,24,43,17,68,106,195,127,188,57,162,233,82,
49,211,221,136,120,197,115,12,182,69,225,19,194,221,239,214,225,104,127,
23,128,174,29,111,230,88,251,92,131,154,120,116,27,36,17,107,53,163,237,
238,9,108,124,45,191,155,78,75,5,177,231,225,84,59,235,123,63,10,149,
123,90,189,190,31,22,208,142,97,28,63,204,94,143,125,42,254,229,82,85,
131,166,216,154,224,254,186,87,153,132,164,129,154,48,129,151,160,3,2,1,
18,162,129,143,4,129,140,179,78,23,201,37,87,66,197,176,107,30,84,110,
231,176,151,241,170,121,13,96,128,52,207,205,239,174,27,11,17,226,109,
154,149,54,251,199,180,109,237,136,120,128,240,158,205,159,201,246,183,
83,221,59,168,213,189,62,93,182,206,221,83,208,92,80,181,49,72,77,56,
248,131,176,185,79,244,127,25,3,205,159,238,75,178,122,185,204,184,235,
96,123,153,89,215,183,106,88,37,219,226,18,180,214,51,49,106,201,234,
213,160,135,230,196,202,79,50,80,133,71,64,159,223,82,68,85,233,239,151,
136,174,185,233,137,215,98,215,168,176,16,75>>}