static krb5_error_code parse_reg_subkeys(krb5_context context, HKEY key, krb5_config_section ** parent) { DWORD index; LONG rcode; for (index = 0; ; index ++) { HKEY subkey = NULL; char name[256]; DWORD cch = sizeof(name)/sizeof(name[0]); krb5_config_section *section = NULL; krb5_error_code code; rcode = RegEnumKeyEx(key, index, name, &cch, NULL, NULL, NULL, NULL); if (rcode != ERROR_SUCCESS) break; rcode = RegOpenKeyEx(key, name, 0, KEY_READ, &subkey); if (rcode != ERROR_SUCCESS) continue; section = _krb5_config_get_entry(parent, name, krb5_config_list); if (section == NULL) { RegCloseKey(subkey); return ENOMEM; } code = parse_reg_values(context, subkey, §ion->u.list); if (code) { RegCloseKey(subkey); return code; } code = parse_reg_subkeys(context, subkey, §ion->u.list); if (code) { RegCloseKey(subkey); return code; } RegCloseKey(subkey); } return 0; }
static krb5_error_code parse_reg_root(krb5_context context, HKEY key, krb5_config_section ** parent) { krb5_config_section *libdefaults = NULL; krb5_error_code code = 0; libdefaults = _krb5_config_get_entry(parent, "libdefaults", krb5_config_list); if (libdefaults == NULL) return krb5_enomem(context); code = parse_reg_values(context, key, &libdefaults->u.list); if (code) return code; return parse_reg_subkeys(context, key, parent); }
static krb5_error_code parse_reg_root(krb5_context context, HKEY key, krb5_config_section ** parent) { krb5_config_section *libdefaults = NULL; krb5_error_code code = 0; libdefaults = _krb5_config_get_entry(parent, "libdefaults", krb5_config_list); if (libdefaults == NULL) { krb5_set_error_message(context, ENOMEM, "Out of memory while parsing configuration"); return ENOMEM; } code = parse_reg_values(context, key, &libdefaults->u.list); if (code) return code; return parse_reg_subkeys(context, key, parent); }