diff options
| author | Jeffrey Altman <jaltman@secure-endpoints.com> | 2006-06-25 19:21:41 +0000 |
|---|---|---|
| committer | Jeffrey Altman <jaltman@secure-endpoints.com> | 2006-06-25 19:21:41 +0000 |
| commit | bd7edfe0a67af34296baa530d2a2218ec4ddcb2d (patch) | |
| tree | 209f2041cde5e42570d4e36eed0a12a43a4833aa /src/windows/identity/plugins | |
| parent | 05352b990d5caeed4c6afe3140ab946842bd743d (diff) | |
| download | krb5-bd7edfe0a67af34296baa530d2a2218ec4ddcb2d.tar.gz krb5-bd7edfe0a67af34296baa530d2a2218ec4ddcb2d.tar.xz krb5-bd7edfe0a67af34296baa530d2a2218ec4ddcb2d.zip | |
NetIDMgr updates
* add scrollbars to option tree pane in configuration dialog
* convert to using Microsoft's safe string library both to ensure
safe string manipulation and to avoid deprecation warnings
* disable deprecation warnings for Platform SDK header shlwapi.h
which cannot otherwise be compiled
* add kerberos 5 kvno property to tickets. display in properties
dialog and main window if column selected by user
* improve manifest handling in order to support both manifests
generated by the compiler and those hand crafted in order to
specify the correct versions of the custom control libraries.
* update khimaira message types and credential acquisition
documentation
ticket: new
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@18212 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/windows/identity/plugins')
19 files changed, 245 insertions, 131 deletions
diff --git a/src/windows/identity/plugins/common/krb5common.c b/src/windows/identity/plugins/common/krb5common.c index de1cea4ab..5ba59df4e 100644 --- a/src/windows/identity/plugins/common/krb5common.c +++ b/src/windows/identity/plugins/common/krb5common.c @@ -31,6 +31,7 @@ #ifdef DEBUG
#include<assert.h>
#endif
+#include<strsafe.h>
/**************************************/
/* khm_krb5_error(): */
diff --git a/src/windows/identity/plugins/common/krb5common.h b/src/windows/identity/plugins/common/krb5common.h index bd6337192..df3db93ae 100644 --- a/src/windows/identity/plugins/common/krb5common.h +++ b/src/windows/identity/plugins/common/krb5common.h @@ -33,9 +33,13 @@ #ifndef NO_KRB5
int khm_krb5_error(krb5_error_code rc, LPCSTR FailedFunctionName,
- int FreeContextFlag, krb5_context *ctx,
- krb5_ccache *cache);
+ int FreeContextFlag, krb5_context *ctx,
+ krb5_ccache *cache);
+int
+khm_krb5_get_error_string(krb5_error_code rc,
+ wchar_t * buffer,
+ khm_size cb_buffer);
int khm_krb5_initialize(khm_handle ident, krb5_context *, krb5_ccache *);
diff --git a/src/windows/identity/plugins/krb4/Makefile b/src/windows/identity/plugins/krb4/Makefile index b1ad963f0..c5226aaaa 100644 --- a/src/windows/identity/plugins/krb4/Makefile +++ b/src/windows/identity/plugins/krb4/Makefile @@ -70,6 +70,7 @@ $(OBJ)\krb4config.c: krbconfig.csv $(CONFDIR)\csvschema.cfg $(DLLFILE): $(OBJFILES) $(VERRESFILE) $(MSGRESFILE) $(DLLGUILINK) $(LIBFILES) $(SDKLIBFILES) $(SCLIB) + $(_VC_MANIFEST_EMBED_DLL) all: mkdirs $(MSGRESFILE) $(DLLFILE) lang diff --git a/src/windows/identity/plugins/krb4/errorfuncs.c b/src/windows/identity/plugins/krb4/errorfuncs.c index 5adc66b91..f1aa63d88 100644 --- a/src/windows/identity/plugins/krb4/errorfuncs.c +++ b/src/windows/identity/plugins/krb4/errorfuncs.c @@ -27,6 +27,8 @@ #include<krbcred.h>
#include<kherror.h>
+#include<strsafe.h>
+
extern void (__cdecl *pinitialize_krb_error_func)();
extern void (__cdecl *pinitialize_kadm_error_table)();
@@ -89,8 +91,7 @@ LPSTR err_describe(LPSTR buf, size_t len, long code) case kadm_err_base:
break;
default:
- strncpy(buf, com_err_msg, len);
- buf[len-1] = '\0';
+ StringCbCopyA(buf, len, com_err_msg);
return buf;
}
@@ -194,8 +195,7 @@ LPSTR err_describe(LPSTR buf, size_t len, long code) break;
}
if(com_err_msg != buf) {
- strncpy(buf, com_err_msg, len);
- buf[len-1] = '\0';
+ StringCbCopyA(buf, len, com_err_msg);
}
cp = buf + strlen(buf);
*cp++ = '\n';
diff --git a/src/windows/identity/plugins/krb4/krb4funcs.c b/src/windows/identity/plugins/krb4/krb4funcs.c index 8928f71fd..18c05981f 100644 --- a/src/windows/identity/plugins/krb4/krb4funcs.c +++ b/src/windows/identity/plugins/krb4/krb4funcs.c @@ -243,10 +243,10 @@ khm_krb5_get_profile_file(LPSTR confname, UINT szConfname) {
GetWindowsDirectoryA(confname,szConfname);
confname[szConfname-1] = '\0';
- strncat(confname, "\\",sizeof(confname)-strlen(confname));
- confname[szConfname-1] = '\0';
- strncat(confname, KRB5_FILE,sizeof(confname)-strlen(confname));
- confname[szConfname-1] = '\0';
+
+ StringCchCatA(confname, szConfname, "\\");
+ StringCchCatA(confname, szConfname, KRB5_FILE);
+
return FALSE;
}
@@ -254,7 +254,7 @@ khm_krb5_get_profile_file(LPSTR confname, UINT szConfname) if (configFile)
{
- strncpy(confname, *configFile, szConfname);
+ StringCchCopyA(confname, szConfname, *configFile);
pkrb5_free_config_files(configFile);
}
@@ -262,10 +262,9 @@ khm_krb5_get_profile_file(LPSTR confname, UINT szConfname) {
GetWindowsDirectoryA(confname,szConfname);
confname[szConfname-1] = '\0';
- strncat(confname, "\\",sizeof(confname)-strlen(confname));
- confname[szConfname-1] = '\0';
- strncat(confname, KRB5_FILE,sizeof(confname)-strlen(confname));
- confname[szConfname-1] = '\0';
+
+ StringCchCatA(confname, szConfname, "\\");
+ StringCchCatA(confname, szConfname, KRB5_FILE);
}
return FALSE;
@@ -274,51 +273,41 @@ khm_krb5_get_profile_file(LPSTR confname, UINT szConfname) BOOL
khm_get_krb4_con_file(LPSTR confname, UINT szConfname)
{
- if (hKrb5 && !hKrb4)
- { // hold krb.con where krb5.ini is located
- CHAR krbConFile[MAX_PATH]="";
- LPSTR pFind;
+ if (hKrb5 && !hKrb4) {
+ // hold krb.con where krb5.ini is located
+ CHAR krbConFile[MAX_PATH]="";
+ LPSTR pFind;
- //strcpy(krbConFile, CLeashApp::m_krbv5_profile->first_file->filename);
- if (khm_krb5_get_profile_file(krbConFile, sizeof(krbConFile)))
- {
- GetWindowsDirectoryA(krbConFile,sizeof(krbConFile));
- krbConFile[MAX_PATH-1] = '\0';
- strncat(krbConFile, "\\",sizeof(krbConFile)-strlen(krbConFile));
- krbConFile[MAX_PATH-1] = '\0';
- strncat(krbConFile, KRB5_FILE,sizeof(krbConFile)-strlen(krbConFile));
- krbConFile[MAX_PATH-1] = '\0';
- }
+ if (khm_krb5_get_profile_file(krbConFile, sizeof(krbConFile))) {
+ GetWindowsDirectoryA(krbConFile,sizeof(krbConFile));
+ krbConFile[MAX_PATH-1] = '\0';
- pFind = strrchr(krbConFile, '\\');
- if (pFind)
- {
- *pFind = 0;
- strncat(krbConFile, "\\",sizeof(krbConFile)-strlen(krbConFile));
- krbConFile[MAX_PATH-1] = '\0';
- strncat(krbConFile, KRB_FILE,sizeof(krbConFile)-strlen(krbConFile));
- krbConFile[MAX_PATH-1] = '\0';
- }
- else
- krbConFile[0] = 0;
-
- strncpy(confname, krbConFile, szConfname);
+ StringCbCatA(krbConFile, sizeof(krbConFile), "\\");
+ }
+
+ pFind = strrchr(krbConFile, '\\');
+
+ if (pFind) {
+ *pFind = '\0';
+
+ StringCbCatA(krbConFile, sizeof(krbConFile), "\\");
+ StringCbCatA(krbConFile, sizeof(krbConFile), KRB_FILE);
+ } else {
+ krbConFile[0] = '\0';
+ }
+
+ StringCchCopyA(confname, szConfname, krbConFile);
+ } else if (hKrb4) {
+ unsigned int size = szConfname;
+ memset(confname, '\0', szConfname);
+ if (!pkrb_get_krbconf2(confname, &size)) {
+ GetWindowsDirectoryA(confname,szConfname);
confname[szConfname-1] = '\0';
- }
- else if (hKrb4)
- {
- unsigned int size = szConfname;
- memset(confname, '\0', szConfname);
- if (!pkrb_get_krbconf2(confname, &size))
- { // Error has happened
- GetWindowsDirectoryA(confname,szConfname);
- confname[szConfname-1] = '\0';
- strncat(confname, "\\",szConfname-strlen(confname));
- confname[szConfname-1] = '\0';
- strncat(confname,KRB_FILE,szConfname-strlen(confname));
- confname[szConfname-1] = '\0';
- }
- }
+ StringCchCatA(confname, szConfname, "\\");
+ StringCchCatA(confname, szConfname, KRB_FILE);
+ }
+ }
+
return FALSE;
}
@@ -433,7 +422,12 @@ wchar_t * khm_krb5_get_realm_list(void) wchar_t * d;
if (!khm_get_krb4_con_file(krb_conf,sizeof(krb_conf)) &&
- (file = fopen(krb_conf, "rt")))
+#if _MSC_VER >= 1400
+ !fopen_s(&file, krb_conf, "rt")
+#else
+ (file = fopen(krb_conf, "rt"))
+#endif
+ )
{
char lineBuf[256];
@@ -519,25 +513,32 @@ make_postfix(const char * base, const char * postfix,
char ** rcopy)
{
- int base_size;
- int ret_size;
+ size_t base_size;
+ size_t ret_size;
char * copy = 0;
char * ret = 0;
+ size_t t;
+
+ if (FAILED(StringCbLengthA(base, STRSAFE_MAX_CCH * sizeof(char), &t)))
+ goto cleanup;
+
+ base_size = t + 1;
+
+ if (FAILED(StringCbLengthA(postfix, STRSAFE_MAX_CCH * sizeof(char), &t)))
+ goto cleanup;
+
+ ret_size = base_size + t + 1;
- base_size = (int) strlen(base) + 1;
- ret_size = base_size + (int) strlen(postfix) + 1;
copy = malloc(base_size);
ret = malloc(ret_size);
if (!copy || !ret)
goto cleanup;
- strncpy(copy, base, base_size);
- copy[base_size - 1] = 0;
-
- strncpy(ret, base, base_size);
- strncpy(ret + (base_size - 1), postfix, ret_size - (base_size - 1));
- ret[ret_size - 1] = 0;
+ StringCbCopyNA(copy, base_size, base, base_size);
+ StringCbCopyNA(ret, ret_size, base, base_size);
+ StringCbCopyNA(ret + (base_size - 1), ret_size - (base_size - 1),
+ postfix, ret_size - (base_size - 1));
cleanup:
if (!copy || !ret) {
diff --git a/src/windows/identity/plugins/krb4/krb4newcreds.c b/src/windows/identity/plugins/krb4/krb4newcreds.c index b3dd7cea7..407c30fed 100644 --- a/src/windows/identity/plugins/krb4/krb4newcreds.c +++ b/src/windows/identity/plugins/krb4/krb4newcreds.c @@ -115,10 +115,15 @@ void k4_update_data(k4_dlg_data * d) { khm_boolean k4_should_identity_get_k4(khm_handle ident) {
khm_int32 idflags = 0;
+ khm_int32 t = TRUE;
khm_handle csp_ident = NULL;
khm_handle csp_k4 = NULL;
khm_boolean get_k4 = TRUE;
+ if (KHM_SUCCEEDED(khc_read_int32(csp_params, L"Krb4NewCreds", &t)) &&
+ !t)
+ return FALSE;
+
if (KHM_FAILED(kcdb_identity_get_flags(ident, &idflags)))
return FALSE;
@@ -325,8 +330,7 @@ void k4_handle_wmnc_notify(k4_dlg_data * d, l = (khui_htwnd_link *) lParam;
- wcsncpy(wid, l->id, l->id_len);
- wid[l->id_len] = 0;
+ StringCchCopyN(wid, ARRAYLENGTH(wid), l->id, l->id_len);
wids = wcschr(wid, L':');
if (!wids)
diff --git a/src/windows/identity/plugins/krb5/Makefile b/src/windows/identity/plugins/krb5/Makefile index 67475ee01..cfee907b2 100644 --- a/src/windows/identity/plugins/krb5/Makefile +++ b/src/windows/identity/plugins/krb5/Makefile @@ -74,6 +74,7 @@ $(OBJ)\krb5config.c: krbconfig.csv $(CONFDIR)\csvschema.cfg $(DLLFILE): $(OBJFILES) $(VERRESFILE) $(DLLGUILINK) $(MSGRESFILE) $(LIBFILES) $(SDKLIBFILES) $(SCLIB) + $(_VC_MANIFEST_EMBED_DLL) $(MSGRESFILE): $(OBJ)\krb5_msgs.rc diff --git a/src/windows/identity/plugins/krb5/datarep.c b/src/windows/identity/plugins/krb5/datarep.c index 97d629eb4..92eabf4da 100644 --- a/src/windows/identity/plugins/krb5/datarep.c +++ b/src/windows/identity/plugins/krb5/datarep.c @@ -274,6 +274,36 @@ krb5flags_toString(const void *d, }
}
+khm_int32 KHMAPI
+kvno_toString(const void * data, khm_size cbdata,
+ wchar_t *destbuf, khm_size *pcbdestbuf,
+ khm_int32 flags)
+{
+ int resid = 0;
+ int kvno;
+ wchar_t buf[256];
+ size_t cblength;
+
+ if (cbdata != sizeof(khm_int32))
+ return KHM_ERROR_INVALID_PARAM;
+
+ kvno = *((khm_int32 *) data);
+
+ StringCbPrintf(buf, sizeof(buf), L"#%d", kvno);
+
+ StringCbLength(buf, ARRAYLENGTH(buf), &cblength);
+ cblength += sizeof(wchar_t);
+
+ if (!destbuf || *pcbdestbuf < cblength) {
+ *pcbdestbuf = cblength;
+ return KHM_ERROR_TOO_LONG;
+ } else {
+ StringCbCopy(destbuf, *pcbdestbuf, buf);
+ *pcbdestbuf = cblength;
+ return KHM_ERROR_SUCCESS;
+ }
+}
+
khm_int32
serialize_krb5_addresses(krb5_address ** a, void * buf, size_t * pcbbuf)
{
diff --git a/src/windows/identity/plugins/krb5/datarep.h b/src/windows/identity/plugins/krb5/datarep.h index eeb6970da..90f1923fa 100644 --- a/src/windows/identity/plugins/krb5/datarep.h +++ b/src/windows/identity/plugins/krb5/datarep.h @@ -60,6 +60,11 @@ krb5flags_toString(const void *, khm_size, wchar_t *, khm_size *, khm_int32);
khm_int32 KHMAPI
+kvno_toString(const void * data, khm_size cbdata,
+ wchar_t *destbuf, khm_size *pcbdestbuf,
+ khm_int32 flags);
+
+khm_int32 KHMAPI
renew_for_cb(khm_handle cred, khm_int32 id, void * buffer,
khm_size * pcbsize);
diff --git a/src/windows/identity/plugins/krb5/krb5configcc.c b/src/windows/identity/plugins/krb5/krb5configcc.c index 66e7a08d0..425d13430 100644 --- a/src/windows/identity/plugins/krb5/krb5configcc.c +++ b/src/windows/identity/plugins/krb5/krb5configcc.c @@ -29,16 +29,16 @@ #define _WIN32_WINNT 0x501
#endif
+#define STRSAFE_NO_DEPRECATE
+
#include<krbcred.h>
#include<krb5.h>
#include<assert.h>
#include<lm.h>
#include<commctrl.h>
-
-#pragma warning(push)
-#pragma warning(disable: 4995)
#include<shlwapi.h>
-#pragma warning(pop)
+
+#include<strsafe.h>
typedef struct tag_k5_file_cc {
wchar_t path[MAX_PATH];
@@ -97,7 +97,7 @@ void k5_add_file_cc(k5_ccc_data * d, wchar_t * path) { /* see if it's there first */
for (i=0; i < d->n_file_ccs; i++) {
- if(!wcsicmp(d->file_ccs[i].path, path))
+ if(!_wcsicmp(d->file_ccs[i].path, path))
return;
}
@@ -232,7 +232,7 @@ BOOL k5_ccc_get_mod(k5_ccc_dlg_data * d) { for (i=0; i < d->work.n_file_ccs; i++) {
for (j=0; j < d->save.n_file_ccs; j++) {
- if (!wcsicmp(d->work.file_ccs[i].path,
+ if (!_wcsicmp(d->work.file_ccs[i].path,
d->save.file_ccs[j].path))
break;
}
@@ -372,7 +372,7 @@ k5_ccconfig_dlgproc(HWND hwnd, return TRUE; /* nothing to add */
for (i=0; i < d->work.n_file_ccs; i++) {
- if (!wcsicmp(path, d->work.file_ccs[i].path)) {
+ if (!_wcsicmp(path, d->work.file_ccs[i].path)) {
/* allow the user to correct case, as appropriate */
StringCbCopy(d->work.file_ccs[i].path,
@@ -522,7 +522,7 @@ k5_ccconfig_dlgproc(HWND hwnd, LVNI_SELECTED)) != -1) {
ListView_GetItemText(lv, lv_idx, 0, buf, ARRAYLENGTH(buf));
for (i=0; i < d->work.n_file_ccs; i++) {
- if (!wcsicmp(buf, d->work.file_ccs[i].path)) {
+ if (!_wcsicmp(buf, d->work.file_ccs[i].path)) {
k5_del_file_cc(&d->work, i);
break;
}
diff --git a/src/windows/identity/plugins/krb5/krb5configdlg.c b/src/windows/identity/plugins/krb5/krb5configdlg.c index ad64d4883..65f010840 100644 --- a/src/windows/identity/plugins/krb5/krb5configdlg.c +++ b/src/windows/identity/plugins/krb5/krb5configdlg.c @@ -24,17 +24,16 @@ /* $Id$ */ +#define STRSAFE_NO_DEPRECATE + #include<krbcred.h> #include<krb5.h> #include<assert.h> #include<lm.h> #include<commctrl.h> - -#pragma warning(push) -#pragma warning(disable: 4995) #include<shlwapi.h> -#pragma warning(pop) +#include<strsafe.h> typedef struct tag_k5_realm_kdc { wchar_t name[K5_MAXCCH_HOST]; @@ -134,12 +133,12 @@ k5_parse_boolean(const char *s) const char *const *p; for(p=conf_yes; *p; p++) { - if (!stricmp(*p,s)) + if (!_stricmp(*p,s)) return 1; } for(p=conf_no; *p; p++) { - if (!stricmp(*p,s)) + if (!_stricmp(*p,s)) return 0; } @@ -409,7 +408,7 @@ k5_read_config_data(k5_config_data * d) { sizeof(kdc_name), values[i]); for (j=0; j < d->realms[s].n_kdcs; j++) - if (!wcsicmp(kdc_name, d->realms[s].kdcs[j].name)) + if (!_wcsicmp(kdc_name, d->realms[s].kdcs[j].name)) break; if (j < d->realms[s].n_kdcs) { @@ -436,7 +435,7 @@ k5_read_config_data(k5_config_data * d) { AnsiStrToUnicode(kdc_name, sizeof(kdc_name), values[i]); for (j=0; j < d->realms[s].n_kdcs; j++) - if (!wcsicmp(kdc_name, d->realms[s].kdcs[j].name)) + if (!_wcsicmp(kdc_name, d->realms[s].kdcs[j].name)) break; if (j < d->realms[s].n_kdcs) { @@ -478,7 +477,7 @@ k5_read_config_data(k5_config_data * d) { AnsiStrToUnicode(wdr_to, sizeof(wdr_to), dr_to); for (j=0; j < d->n_realms; j++) { - if (!wcsicmp(wdr_to, d->realms[j].realm)) + if (!_wcsicmp(wdr_to, d->realms[j].realm)) break; } @@ -588,7 +587,7 @@ k5_write_config_data(k5_config_data * d) { UnicodeStrToAnsi(astr, sizeof(astr), d->config_file); - if (stricmp(config_file, astr)) { + if (_stricmp(config_file, astr)) { assert(FALSE); } @@ -1965,7 +1964,7 @@ k5_realms_dlgproc(HWND hwnd, (d->realms[i].flags & K5_RDFLAG_DELETED)) continue; - if (!wcsicmp(d->realms[i].realm, pdisp->item.pszText)) + if (!_wcsicmp(d->realms[i].realm, pdisp->item.pszText)) break; } @@ -2084,7 +2083,7 @@ k5_realms_dlgproc(HWND hwnd, (d->realms[r].kdcs[k].flags & K5_RKFLAG_DELETED)) continue; - if (!wcsicmp(d->realms[r].kdcs[k].name, + if (!_wcsicmp(d->realms[r].kdcs[k].name, pdisp->item.pszText)) break; } @@ -2283,8 +2282,8 @@ k5_realms_dlgproc(HWND hwnd, (d->realms[r].domain_maps[m].flags & K5_DMFLAG_DELETED)) continue; - if (!wcsicmp(d->realms[r].domain_maps[m].name, - pdisp->item.pszText)) + if (!_wcsicmp(d->realms[r].domain_maps[m].name, + pdisp->item.pszText)) break; } diff --git a/src/windows/identity/plugins/krb5/krb5configid.c b/src/windows/identity/plugins/krb5/krb5configid.c index ccc38941a..ebec91e99 100644 --- a/src/windows/identity/plugins/krb5/krb5configid.c +++ b/src/windows/identity/plugins/krb5/krb5configid.c @@ -24,16 +24,16 @@ /* $Id$ */
+#define STRSAFE_NO_DEPRECATE
+
#include<krbcred.h>
#include<krb5.h>
#include<assert.h>
#include<lm.h>
#include<commctrl.h>
-
-#pragma warning(push)
-#pragma warning(disable: 4995)
#include<shlwapi.h>
-#pragma warning(pop)
+
+#include<strsafe.h>
typedef struct tag_k5_id_dlg_data {
khui_config_init_data cfg;
@@ -164,7 +164,7 @@ k5_id_is_mod(HWND hw, k5_id_dlg_data * d) { SendDlgItemMessage(hw, IDC_CFG_PUBLICIP, IPM_GETADDRESS,
0, (LPARAM) &dwaddress);
- if (wcsicmp(ccache, d->ccache) ||
+ if (_wcsicmp(ccache, d->ccache) ||
d->tc_renew.current != d->renew_life ||
@@ -259,7 +259,7 @@ k5_id_write_params(HWND hw, k5_id_dlg_data * d) { GetDlgItemText(hw, IDC_CFG_CCACHE, ccache, ARRAYLENGTH(ccache));
if (SUCCEEDED(StringCbLength(ccache, sizeof(ccache), &cb)) &&
- wcsicmp(ccache, d->ccache)) {
+ _wcsicmp(ccache, d->ccache)) {
khc_write_string(csp_ident, L"DefaultCCName", ccache);
StringCbCopy(d->ccache, sizeof(d->ccache), ccache);
} else {
diff --git a/src/windows/identity/plugins/krb5/krb5configids.c b/src/windows/identity/plugins/krb5/krb5configids.c index 4eebb9c62..579b9f712 100644 --- a/src/windows/identity/plugins/krb5/krb5configids.c +++ b/src/windows/identity/plugins/krb5/krb5configids.c @@ -24,6 +24,8 @@ /* $Id$ */
+#define STRSAFE_NO_DEPRECATE
+
#include<krbcred.h>
#include<krb5.h>
#include<assert.h>
diff --git a/src/windows/identity/plugins/krb5/krb5funcs.c b/src/windows/identity/plugins/krb5/krb5funcs.c index dab522c5d..1f7b2bdad 100644 --- a/src/windows/identity/plugins/krb5/krb5funcs.c +++ b/src/windows/identity/plugins/krb5/krb5funcs.c @@ -434,12 +434,15 @@ static long get_tickets_from_cache(krb5_context ctx, if ( !pkrb5_decode_ticket(&KRBv5Credentials.ticket, &tkt)) {
ti = tkt->enc_part.enctype;
kcdb_cred_set_attr(cred, attr_id_tkt_enctype, &ti, sizeof(ti));
+ ti = tkt->enc_part.kvno;
+ kcdb_cred_set_attr(cred, attr_id_kvno, &ti, sizeof(ti));
pkrb5_free_ticket(ctx, tkt);
tkt = NULL;
}
ti = KRBv5Credentials.keyblock.enctype;
kcdb_cred_set_attr(cred, attr_id_key_enctype, &ti, sizeof(ti));
+
kcdb_cred_set_attr(cred, KCDB_ATTR_LOCATION, wcc_name,
KCDB_CBSIZE_AUTO);
@@ -1734,10 +1737,10 @@ khm_krb5_get_profile_file(LPSTR confname, UINT szConfname) {
GetWindowsDirectoryA(confname,szConfname);
confname[szConfname-1] = '\0';
- strncat(confname, "\\",sizeof(confname)-strlen(confname));
- confname[szConfname-1] = '\0';
- strncat(confname, KRB5_FILE,sizeof(confname)-strlen(confname));
- confname[szConfname-1] = '\0';
+
+ StringCchCatA(confname, szConfname, "\\");
+ StringCchCatA(confname, szConfname, KRB5_FILE);
+
return FALSE;
}
@@ -1745,7 +1748,7 @@ khm_krb5_get_profile_file(LPSTR confname, UINT szConfname) if (configFile)
{
- strncpy(confname, *configFile, szConfname);
+ StringCchCopyA(confname, szConfname, *configFile);
pkrb5_free_config_files(configFile);
}
@@ -1753,10 +1756,8 @@ khm_krb5_get_profile_file(LPSTR confname, UINT szConfname) {
GetWindowsDirectoryA(confname,szConfname);
confname[szConfname-1] = '\0';
- strncat(confname, "\\",sizeof(confname)-strlen(confname));
- confname[szConfname-1] = '\0';
- strncat(confname, KRB5_FILE,sizeof(confname)-strlen(confname));
- confname[szConfname-1] = '\0';
+ StringCchCatA(confname, szConfname, "\\");
+ StringCchCatA(confname, szConfname, KRB5_FILE);
}
return FALSE;
@@ -1773,25 +1774,19 @@ khm_get_krb4_con_file(LPSTR confname, UINT szConfname) if (khm_krb5_get_profile_file(krbConFile, sizeof(krbConFile))) {
GetWindowsDirectoryA(krbConFile,sizeof(krbConFile));
krbConFile[MAX_PATH-1] = '\0';
- strncat(krbConFile, "\\",sizeof(krbConFile)-strlen(krbConFile));
- krbConFile[MAX_PATH-1] = '\0';
- strncat(krbConFile, KRB5_FILE,sizeof(krbConFile)-strlen(krbConFile));
- krbConFile[MAX_PATH-1] = '\0';
+ StringCchCatA(confname, szConfname, "\\");
}
pFind = strrchr(krbConFile, '\\');
if (pFind) {
- *pFind = 0;
- strncat(krbConFile, "\\",sizeof(krbConFile)-strlen(krbConFile));
- krbConFile[MAX_PATH-1] = '\0';
- strncat(krbConFile, KRB_FILE,sizeof(krbConFile)-strlen(krbConFile));
- krbConFile[MAX_PATH-1] = '\0';
+ *pFind = '\0';
+ StringCchCatA(krbConFile, ARRAYLENGTH(krbConFile), "\\");
+ StringCchCatA(krbConFile, ARRAYLENGTH(krbConFile), KRB_FILE);
}
else
- krbConFile[0] = 0;
-
- strncpy(confname, krbConFile, szConfname);
- confname[szConfname-1] = '\0';
+ krbConFile[0] = '\0';
+
+ StringCchCopyA(confname, szConfname, krbConFile);
}
else if (hKrb4) {
unsigned int size = szConfname;
@@ -1800,10 +1795,8 @@ khm_get_krb4_con_file(LPSTR confname, UINT szConfname) { // Error has happened
GetWindowsDirectoryA(confname,szConfname);
confname[szConfname-1] = '\0';
- strncat(confname, "\\",szConfname-strlen(confname));
- confname[szConfname-1] = '\0';
- strncat(confname,KRB_FILE,szConfname-strlen(confname));
- confname[szConfname-1] = '\0';
+ StringCchCatA(confname, szConfname, "\\");
+ StringCchCatA(confname, szConfname, KRB_FILE);
}
}
return FALSE;
@@ -1922,7 +1915,12 @@ khm_krb5_get_realm_list(void) wchar_t * d;
if (!khm_get_krb4_con_file(krb_conf,sizeof(krb_conf)) &&
- (file = fopen(krb_conf, "rt")))
+#if _MSC_VER >= 1400
+ !fopen_s(&file, krb_conf, "rt")
+#else
+ (file = fopen(krb_conf, "rt"))
+#endif
+ )
{
char lineBuf[256];
@@ -2151,7 +2149,8 @@ khm_int32 KHMAPI khm_krb5_creds_is_equal(khm_handle vcred1, khm_handle vcred2, void * dummy) {
if (kcdb_creds_comp_attr(vcred1, vcred2, KCDB_ATTR_LOCATION) ||
kcdb_creds_comp_attr(vcred1, vcred2, attr_id_key_enctype) ||
- kcdb_creds_comp_attr(vcred1, vcred2, attr_id_tkt_enctype))
+ kcdb_creds_comp_attr(vcred1, vcred2, attr_id_tkt_enctype) ||
+ kcdb_creds_comp_attr(vcred1, vcred2, attr_id_kvno))
return 1;
else
return 0;
diff --git a/src/windows/identity/plugins/krb5/krb5identpro.c b/src/windows/identity/plugins/krb5/krb5identpro.c index f52e3441d..b263e6bf3 100644 --- a/src/windows/identity/plugins/krb5/krb5identpro.c +++ b/src/windows/identity/plugins/krb5/krb5identpro.c @@ -212,7 +212,7 @@ update_crossfeed(khui_new_creds * nc, (WPARAM) idx,
(LPARAM) srealm);
- if (!wcsicmp(srealm, un_realm) && wcscmp(srealm, un_realm)) {
+ if (!_wcsicmp(srealm, un_realm) && wcscmp(srealm, un_realm)) {
/* differ only by case */
StringCchCopy(un_realm, ARRAYLENGTH(un) - (un_realm - un),
@@ -260,7 +260,7 @@ update_crossfeed(khui_new_creds * nc, (WPARAM) idx,
(LPARAM) srealm);
- if (!wcsicmp(srealm, realm) && wcscmp(srealm, realm)) {
+ if (!_wcsicmp(srealm, realm) && wcscmp(srealm, realm)) {
StringCbCopy(realm, sizeof(realm), srealm);
SetWindowText(d->hw_realm, srealm);
@@ -1145,7 +1145,7 @@ k5_ident_update(khm_int32 msg_type, khm_krb5_canon_cc_name(w_ccname, sizeof(w_ccname));
khm_krb5_canon_cc_name(wid_ccname, sizeof(wid_ccname));
- if (!wcsicmp(w_ccname, wid_ccname))
+ if (!_wcsicmp(w_ccname, wid_ccname))
kcdb_identity_set_default_int(ident);
_iu_cleanup:
@@ -1499,7 +1499,7 @@ DWORD WINAPI k5_ccname_monitor_thread(LPVOID lpParameter) { new_ccname[0] = L'\0';
}
- if (wcsicmp(new_ccname, reg_ccname)) {
+ if (_wcsicmp(new_ccname, reg_ccname)) {
k5_refresh_default_identity(ctx);
StringCbCopy(reg_ccname, sizeof(reg_ccname), new_ccname);
}
diff --git a/src/windows/identity/plugins/krb5/krb5main.c b/src/windows/identity/plugins/krb5/krb5main.c index ee85355a0..97ef85ee9 100644 --- a/src/windows/identity/plugins/krb5/krb5main.c +++ b/src/windows/identity/plugins/krb5/krb5main.c @@ -36,23 +36,27 @@ khm_int32 type_id_enctype = -1; khm_int32 type_id_addr_list = -1;
khm_int32 type_id_krb5_flags = -1;
khm_int32 type_id_krb5_princ = -1;
+khm_int32 type_id_kvno = -1;
BOOL type_regd_enctype = FALSE;
BOOL type_regd_addr_list = FALSE;
BOOL type_regd_krb5_flags = FALSE;
BOOL type_regd_krb5_princ = FALSE;
+BOOL type_regd_kvno = FALSE;
khm_int32 attr_id_key_enctype = -1;
khm_int32 attr_id_tkt_enctype = -1;
khm_int32 attr_id_addr_list = -1;
khm_int32 attr_id_krb5_flags = -1;
khm_int32 attr_id_krb5_ccname = -1;
+khm_int32 attr_id_kvno = -1;
BOOL attr_regd_key_enctype = FALSE;
BOOL attr_regd_tkt_enctype = FALSE;
BOOL attr_regd_addr_list = FALSE;
BOOL attr_regd_krb5_flags = FALSE;
BOOL attr_regd_krb5_ccname = FALSE;
+BOOL attr_regd_kvno = FALSE;
khm_handle csp_plugins = NULL;
khm_handle csp_krbcred = NULL;
@@ -196,6 +200,31 @@ KHMEXP khm_int32 KHMAPI init_module(kmm_module h_module) { type_regd_krb5_flags = TRUE;
}
+ if (KHM_FAILED(kcdb_type_get_id(TYPENAME_KVNO, &type_id_kvno))) {
+ kcdb_type type;
+ kcdb_type *t32;
+
+ kcdb_type_get_info(KCDB_TYPE_INT32, &t32);
+
+ type.id = KCDB_TYPE_INVALID;
+ type.name = TYPENAME_KVNO;
+ type.flags = KCDB_TYPE_FLAG_CB_FIXED;
+ type.cb_max = t32->cb_max;
+ type.cb_min = t32->cb_min;
+ type.isValid = t32->isValid;
+ type.comp = t32->comp;
+ type.dup = t32->dup;
+ type.toString = kvno_toString;
+
+ rv = kcdb_type_register(&type, &type_id_kvno);
+ kcdb_type_release_info(t32);
+
+ if (KHM_FAILED(rv))
+ goto _exit;
+
+ type_regd_kvno = TRUE;
+ }
+
/* Register common attributes */
if(KHM_FAILED(kcdb_attrib_get_id(ATTRNAME_KEY_ENCTYPE, &attr_id_key_enctype))) {
kcdb_attrib attrib;
@@ -328,6 +357,32 @@ KHMEXP khm_int32 KHMAPI init_module(kmm_module h_module) { attr_regd_krb5_ccname = TRUE;
}
+ if (KHM_FAILED(kcdb_attrib_get_id(ATTRNAME_KVNO, &attr_id_kvno))) {
+ kcdb_attrib attrib;
+ wchar_t sbuf[KCDB_MAXCCH_SHORT_DESC];
+ wchar_t lbuf[KCDB_MAXCCH_LONG_DESC];
+ /* although we are loading a long description, it still fits
+ in the short description buffer */
+
+ ZeroMemory(&attrib, sizeof(attrib));
+
+ attrib.name = ATTRNAME_KVNO;
+ attrib.id = KCDB_ATTR_INVALID;
+ attrib.type = type_id_kvno;
+ attrib.flags = KCDB_ATTR_FLAG_TRANSIENT;
+ LoadString(hResModule, IDS_KVNO_SHORT_DESC, sbuf, ARRAYLENGTH(sbuf));
+ LoadString(hResModule, IDS_KVNO_LONG_DESC, lbuf, ARRAYLENGTH(lbuf));
+ attrib.short_desc = sbuf;
+ attrib.long_desc = lbuf;
+
+ rv = kcdb_attrib_register(&attrib, &attr_id_kvno);
+
+ if (KHM_FAILED(rv))
+ goto _exit;
+
+ attr_regd_kvno = TRUE;
+ }
+
rv = kmm_get_plugins_config(0, &csp_plugins);
if(KHM_FAILED(rv)) goto _exit;
@@ -359,6 +414,8 @@ KHMEXP khm_int32 KHMAPI exit_module(kmm_module h_module) { kcdb_attrib_unregister(attr_id_krb5_flags);
if(attr_regd_krb5_ccname)
kcdb_attrib_unregister(attr_id_krb5_ccname);
+ if(attr_regd_kvno)
+ kcdb_attrib_unregister(attr_id_kvno);
if(type_regd_enctype)
kcdb_type_unregister(type_id_enctype);
@@ -366,6 +423,8 @@ KHMEXP khm_int32 KHMAPI exit_module(kmm_module h_module) { kcdb_type_unregister(type_id_addr_list);
if(type_regd_krb5_flags)
kcdb_type_unregister(type_id_krb5_flags);
+ if(type_regd_kvno)
+ kcdb_type_unregister(type_id_kvno);
if(csp_params) {
khc_close_space(csp_params);
diff --git a/src/windows/identity/plugins/krb5/krbcred.h b/src/windows/identity/plugins/krb5/krbcred.h index 3e64b0077..4b9373d08 100644 --- a/src/windows/identity/plugins/krb5/krbcred.h +++ b/src/windows/identity/plugins/krb5/krbcred.h @@ -62,12 +62,14 @@ typedef enum tag_k5_lsa_import { #define TYPENAME_ADDR_LIST L"AddrList"
#define TYPENAME_KRB5_FLAGS L"Krb5Flags"
#define TYPENAME_KRB5_PRINC L"Krb5Principal"
+#define TYPENAME_KVNO L"Kvno"
#define ATTRNAME_KEY_ENCTYPE L"KeyEncType"
#define ATTRNAME_TKT_ENCTYPE L"TktEncType"
#define ATTRNAME_ADDR_LIST L"AddrList"
#define ATTRNAME_KRB5_FLAGS L"Krb5Flags"
#define ATTRNAME_KRB5_CCNAME L"Krb5CCName"
+#define ATTRNAME_KVNO L"Kvno"
void init_krb();
void exit_krb();
@@ -84,6 +86,7 @@ extern khm_int32 type_id_enctype; extern khm_int32 type_id_addr_list;
extern khm_int32 type_id_krb5_flags;
extern khm_int32 type_id_krb5_princ;
+extern khm_int32 type_id_kvno;
extern BOOL type_regd_krb5_princ;
@@ -92,6 +95,7 @@ extern khm_int32 attr_id_tkt_enctype; extern khm_int32 attr_id_addr_list;
extern khm_int32 attr_id_krb5_flags;
extern khm_int32 attr_id_krb5_ccname;
+extern khm_int32 attr_id_kvno;
extern khm_ui_4 k5_commctl_version;
diff --git a/src/windows/identity/plugins/krb5/lang/en_us/langres.rc b/src/windows/identity/plugins/krb5/lang/en_us/langres.rc index c54bdb4b1..49673c378 100644 --- a/src/windows/identity/plugins/krb5/lang/en_us/langres.rc +++ b/src/windows/identity/plugins/krb5/lang/en_us/langres.rc @@ -521,6 +521,8 @@ BEGIN IDS_CFG_RE_MMK "Toggle &master KDC"
IDS_CFG_RE_MND "&Add new domain mapping"
IDS_CFG_RE_MDD "&Remove domain mapping"
+ IDS_KVNO_LONG_DESC "Key version number"
+ IDS_KVNO_SHORT_DESC "Kvno"
END
#endif // English (U.S.) resources
diff --git a/src/windows/identity/plugins/krb5/langres.h b/src/windows/identity/plugins/krb5/langres.h index edda7dd02..da8a62ffd 100644 --- a/src/windows/identity/plugins/krb5/langres.h +++ b/src/windows/identity/plugins/krb5/langres.h @@ -132,6 +132,8 @@ #define IDS_CFG_RE_MMK 214
#define IDS_CFG_RE_MND 215
#define IDS_CFG_RE_MDD 216
+#define IDS_KVNO_SHORT_DESC 217
+#define IDS_KVNO_LONG_DESC 218
#define IDC_NCK5_RENEWABLE 1002
#define IDC_NCK5_FORWARDABLE 1004
#define IDC_NCK5_REALM 1005
@@ -204,7 +206,7 @@ //
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 118
+#define _APS_NEXT_RESOURCE_VALUE 219
#define _APS_NEXT_COMMAND_VALUE 40002
#define _APS_NEXT_CONTROL_VALUE 1079
#define _APS_NEXT_SYMED_VALUE 101
|
