Windows: Use Software/Heimdal registry key for Heimdal specific configuration

The 'plugin_dir' value is Heimdal specific.  So keep it in the
Software/Heimdal registry key.  The Software/Kerberos registry key
will also be loaded and will contain generic Kerberos configuration.
This commit is contained in:
Asanka C. Herath
2011-06-15 00:47:29 -04:00
parent b8ddbe73c4
commit 3048545de3
2 changed files with 41 additions and 23 deletions

View File

@@ -35,7 +35,8 @@
#error config_reg.c is only for Windows #error config_reg.c is only for Windows
#endif #endif
#define REGPATH "SOFTWARE\\Kerberos" #define REGPATH_KERBEROS "SOFTWARE\\Kerberos"
#define REGPATH_HEIMDAL "SOFTWARE\\Heimdal"
/** /**
* Parse a registry value as a string * Parse a registry value as a string
@@ -420,6 +421,26 @@ parse_reg_root(krb5_context context,
return parse_reg_subkeys(context, key, parent); return parse_reg_subkeys(context, key, parent);
} }
static krb5_error_code
load_config_from_regpath(krb5_context context,
HKEY hk_root,
const char* key_path,
krb5_config_section ** res)
{
HKEY key = NULL;
LONG rcode;
krb5_error_code code = 0;
rcode = RegOpenKeyEx(hk_root, key_path, 0, KEY_READ, &key);
if (rcode == ERROR_SUCCESS) {
code = parse_reg_root(context, key, res);
RegCloseKey(key);
key = NULL;
}
return code;
}
/** /**
* Load configuration from registry * Load configuration from registry
* *
@@ -436,29 +457,26 @@ krb5_error_code
_krb5_load_config_from_registry(krb5_context context, _krb5_load_config_from_registry(krb5_context context,
krb5_config_section ** res) krb5_config_section ** res)
{ {
HKEY key = NULL; krb5_error_code code;
LONG rcode;
krb5_error_code code = 0;
rcode = RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGPATH, 0, KEY_READ, &key); code = load_config_from_regpath(context, HKEY_LOCAL_MACHINE,
if (rcode == ERROR_SUCCESS) { REGPATH_KERBEROS, res);
code = parse_reg_root(context, key, res); if (code)
RegCloseKey(key); return code;
key = NULL;
if (code) code = load_config_from_regpath(context, HKEY_LOCAL_MACHINE,
return code; REGPATH_HEIMDAL, res);
} if (code)
return code;
rcode = RegOpenKeyEx(HKEY_CURRENT_USER, REGPATH, 0, KEY_READ, &key); code = load_config_from_regpath(context, HKEY_CURRENT_USER,
if (rcode == ERROR_SUCCESS) { REGPATH_KERBEROS, res);
code = parse_reg_root(context, key, res); if (code)
RegCloseKey(key); return code;
key = NULL;
if (code)
return code;
}
code = load_config_from_regpath(context, HKEY_CURRENT_USER,
REGPATH_HEIMDAL, res);
if (code)
return code;
return 0; return 0;
} }

View File

@@ -217,7 +217,7 @@
<Component Id='comp.Plugin.Reg.32' Feature='feature.Main' <Component Id='comp.Plugin.Reg.32' Feature='feature.Main'
Guid='4BC44234-70A4-4CC1-A5AF-4CA76E9F9487' Win64='no'> Guid='4BC44234-70A4-4CC1-A5AF-4CA76E9F9487' Win64='no'>
<RegistryKey Action='createAndRemoveOnUninstall' Root='HKLM' <RegistryKey Action='createAndRemoveOnUninstall' Root='HKLM'
Key='Software\Kerberos'> Key='Software\Heimdal'>
<RegistryValue Name='plugin_dir' Type='multiString' Action='append' <RegistryValue Name='plugin_dir' Type='multiString' Action='append'
Value='"[PLUGINDIR32]"' KeyPath='yes' /> Value='"[PLUGINDIR32]"' KeyPath='yes' />
</RegistryKey> </RegistryKey>
@@ -230,7 +230,7 @@
<Component Id='comp.Plugin.Reg.64' Feature='feature.Main' <Component Id='comp.Plugin.Reg.64' Feature='feature.Main'
Guid='5A99A52E-A4CD-40F8-AFFD-AD61939FC547' Win64='yes'> Guid='5A99A52E-A4CD-40F8-AFFD-AD61939FC547' Win64='yes'>
<RegistryKey Action='createAndRemoveOnUninstall' Root='HKLM' <RegistryKey Action='createAndRemoveOnUninstall' Root='HKLM'
Key='Software\Kerberos'> Key='Software\Heimdal'>
<RegistryValue Name='plugin_dir' Type='multiString' Action='append' <RegistryValue Name='plugin_dir' Type='multiString' Action='append'
Value='"[PLUGINDIR64]"' KeyPath='yes' /> Value='"[PLUGINDIR64]"' KeyPath='yes' />
</RegistryKey> </RegistryKey>