Skip to content

Commit 04cc636

Browse files
author
freddy77
committed
add Kerberos realm parameter to connection
1 parent 64ab04c commit 04cc636

File tree

5 files changed

+29
-8
lines changed

5 files changed

+29
-8
lines changed

ChangeLog

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
Fri Aug 12 18:38:45 CEST 2011 Frediano Ziglio <freddy77_A_gmail_D_com>
2+
* include/tds.h src/tds/config.c src/tds/gssapi.c src/tds/mem.c:
3+
- add Kerberos realm parameter to connection
4+
15
Fri Aug 12 15:49:18 CEST 2011 Frediano Ziglio <freddy77_A_gmail_D_com>
26
* src/odbc/unittests/describecol.c:
37
* src/odbc/unittests/describecol.in:
@@ -751,4 +755,4 @@ Sat Apr 9 16:15:00 EDT 2011 JK Lowden <[email protected]>
751755
* ChangeLog-0.91 added because of release
752756

753757
$FreeTDS$
754-
$Id: ChangeLog,v 1.3377 2011/08/12 13:49:54 freddy77 Exp $
758+
$Id: ChangeLog,v 1.3378 2011/08/12 16:38:32 freddy77 Exp $

include/tds.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#ifndef _tds_h_
2222
#define _tds_h_
2323

24-
/* $Id: tds.h,v 1.386 2011/08/10 07:46:08 freddy77 Exp $ */
24+
/* $Id: tds.h,v 1.387 2011/08/12 16:38:32 freddy77 Exp $ */
2525

2626
#include <stdarg.h>
2727
#include <stdio.h>
@@ -480,6 +480,8 @@ typedef enum tds_encryption_level {
480480
#define TDS_STR_ENCRYPTION_REQUIRE "require"
481481
/* Defines to enable optional GSSAPI delegation */
482482
#define TDS_GSSAPI_DELEGATION "enable gssapi delegation"
483+
/* Kerberos realm name */
484+
#define TDS_STR_REALM "realm"
483485

484486

485487
/* TODO do a better check for alignment than this */
@@ -503,6 +505,7 @@ typedef struct tds_login
503505
TDS_INT connect_timeout;
504506
DSTR client_host_name;
505507
DSTR server_host_name;
508+
DSTR server_realm_name; /**< server realm name (in freetds.conf) */
506509
DSTR app_name;
507510
DSTR user_name; /**< account for login */
508511
DSTR password; /**< password of account login */

src/tds/config.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
#include <dmalloc.h>
7979
#endif
8080

81-
TDS_RCSID(var, "$Id: config.c,v 1.172 2011/07/27 16:28:47 freddy77 Exp $");
81+
TDS_RCSID(var, "$Id: config.c,v 1.173 2011/08/12 16:38:32 freddy77 Exp $");
8282

8383
static void tds_config_login(TDSLOGIN * connection, TDSLOGIN * login);
8484
static void tds_config_env_tdsdump(TDSLOGIN * login);
@@ -237,6 +237,7 @@ tds_read_config_info(TDSSOCKET * tds, TDSLOGIN * login, TDSLOCALE * locale)
237237
tdsdump_log(TDS_DBG_INFO1, "\t%20s = %d\n", "text_size", connection->text_size);
238238
tdsdump_log(TDS_DBG_INFO1, "\t%20s = %d\n", "broken_dates", connection->broken_dates);
239239
tdsdump_log(TDS_DBG_INFO1, "\t%20s = %d\n", "emul_little_endian", connection->emul_little_endian);
240+
tdsdump_log(TDS_DBG_INFO1, "\t%20s = %s\n", "server_realm_name", tds_dstr_cstr(&connection->server_realm_name));
240241

241242
tdsdump_close();
242243
}
@@ -607,6 +608,8 @@ tds_parse_conf_section(const char *option, const char *value, void *param)
607608
tds_dstr_copy(&login->server_name, value);
608609
} else if (!strcmp(option, TDS_STR_USENTLMV2)) {
609610
login->use_ntlmv2 = tds_config_boolean(value);
611+
} else if (!strcmp(option, TDS_STR_REALM)) {
612+
tds_dstr_copy(&login->server_realm_name, value);
610613
} else {
611614
tdsdump_log(TDS_DBG_INFO1, "UNRECOGNIZED option '%s' ... ignoring.\n", option);
612615
}

src/tds/gssapi.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
#include <dmalloc.h>
6666
#endif
6767

68-
TDS_RCSID(var, "$Id: gssapi.c,v 1.20 2011/07/09 19:50:17 freddy77 Exp $");
68+
TDS_RCSID(var, "$Id: gssapi.c,v 1.21 2011/08/12 16:38:32 freddy77 Exp $");
6969

7070
/**
7171
* \ingroup libtds
@@ -198,9 +198,17 @@ tds_gss_get_auth(TDSSOCKET * tds)
198198
server_name = host->h_name;
199199
}
200200

201-
if (asprintf(&auth->sname, "MSSQLSvc/%s:%d", server_name, tds->login->port) < 0) {
202-
tds_gss_free(tds, (TDSAUTHENTICATION *) auth);
203-
return NULL;
201+
if (tds_dstr_isempty(&tds->login->server_realm_name)) {
202+
if (asprintf(&auth->sname, "MSSQLSvc/%s:%d", server_name, tds->login->port) < 0) {
203+
tds_gss_free(tds, (TDSAUTHENTICATION *) auth);
204+
return NULL;
205+
}
206+
} else {
207+
if (asprintf(&auth->sname, "MSSQLSvc/%s:%d@%s", server_name, tds->login->port,
208+
tds_dstr_cstr(&tds->login->server_realm_name)) < 0) {
209+
tds_gss_free(tds, (TDSAUTHENTICATION *) auth);
210+
return NULL;
211+
}
204212
}
205213
tdsdump_log(TDS_DBG_NETWORK, "using kerberos name %s\n", auth->sname);
206214

src/tds/mem.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
#include <dmalloc.h>
5252
#endif
5353

54-
TDS_RCSID(var, "$Id: mem.c,v 1.220 2011/08/08 11:52:10 freddy77 Exp $");
54+
TDS_RCSID(var, "$Id: mem.c,v 1.221 2011/08/12 16:38:32 freddy77 Exp $");
5555

5656
static void tds_free_env(TDSSOCKET * tds);
5757
static void tds_free_compute_results(TDSSOCKET * tds);
@@ -806,6 +806,7 @@ tds_alloc_connection(TDSLOCALE * locale)
806806
tds_dstr_init(&connection->dump_file);
807807
tds_dstr_init(&connection->client_charset);
808808
tds_dstr_init(&connection->instance_name);
809+
tds_dstr_init(&connection->server_realm_name);
809810

810811
/* fill in all hardcoded defaults */
811812
if (!tds_dstr_copy(&connection->server_name, TDS_DEF_SERVER))
@@ -1020,6 +1021,7 @@ tds_alloc_login(void)
10201021
tds_dstr_init(&tds_login->password);
10211022
tds_dstr_init(&tds_login->library);
10221023
tds_dstr_init(&tds_login->client_charset);
1024+
tds_dstr_init(&tds_login->server_realm_name);
10231025

10241026
if ((s=getenv("DSQUERY")) != NULL)
10251027
server_name = s;
@@ -1060,6 +1062,7 @@ tds_free_login(TDSLOGIN * login)
10601062
tds_dstr_free(&login->database);
10611063
tds_dstr_free(&login->dump_file);
10621064
tds_dstr_free(&login->instance_name);
1065+
tds_dstr_init(&login->server_realm_name);
10631066
free(login);
10641067
}
10651068

0 commit comments

Comments
 (0)