krb5 commit: Refactor LDAP DB option parsing code
Greg Hudson
ghudson at MIT.EDU
Mon Jan 28 21:37:30 EST 2013
https://github.com/krb5/krb5/commit/0b1dc2f93da4c860dd27f1ac997617b712dff383
commit 0b1dc2f93da4c860dd27f1ac997617b712dff383
Author: Greg Hudson <ghudson at mit.edu>
Date: Mon Jan 28 20:15:01 2013 -0500
Refactor LDAP DB option parsing code
krb5_ldap_open and krb5_ldap_create contain two large, almost
identical blocks of DB option processing code. Factor it out into a
new function krb5_ldap_parse_db_params in ldap_misc.c, and simplify
the factored-out code. Create a helper function to add server entries
and use it to simplify krb5_ldap_read_server_params as well as DB
option parsing. Since the new DB option helper uses isspace instead
of isblank, we no longer require portability goop for isblank.
src/configure.in | 3 +-
src/plugins/kdb/ldap/libkdb_ldap/kdb_ldap.c | 201 +----------------------
src/plugins/kdb/ldap/libkdb_ldap/kdb_ldap.h | 1 -
src/plugins/kdb/ldap/libkdb_ldap/ldap_create.c | 153 ++-----------------
src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.c | 184 +++++++++++++++++-----
src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.h | 6 +-
src/tests/t_kdb.py | 2 +-
7 files changed, 169 insertions(+), 381 deletions(-)
diff --git a/src/configure.in b/src/configure.in
index c5c599b..600cc8d 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -120,7 +120,6 @@ KRB5_NEED_PROTO([#include <string.h>
/* Solaris 8 declares swab in stdlib.h. */
#include <stdlib.h>
],swab,1)
-KRB5_NEED_PROTO([#include <ctype.h>],isblank,1)
AC_PROG_AWK
KRB5_AC_INET6
@@ -263,7 +262,7 @@ AC_CONFIG_HEADERS(include/autoconf.h, [echo timestamp > include/autoconf.stamp])
AC_PROG_LEX
AC_C_CONST
AC_HEADER_DIRENT
-AC_CHECK_FUNCS(strdup setvbuf seteuid setresuid setreuid setegid setresgid setregid setsid flock fchmod chmod strftime strptime geteuid setenv unsetenv getenv gmtime_r localtime_r bswap16 bswap64 mkstemp getusershell access getcwd srand48 srand srandom stat strchr strerror strerror_r timegm isblank)
+AC_CHECK_FUNCS(strdup setvbuf seteuid setresuid setreuid setegid setresgid setregid setsid flock fchmod chmod strftime strptime geteuid setenv unsetenv getenv gmtime_r localtime_r bswap16 bswap64 mkstemp getusershell access getcwd srand48 srand srandom stat strchr strerror strerror_r timegm)
AC_CHECK_FUNC(mkstemp,
[MKSTEMP_ST_OBJ=
diff --git a/src/plugins/kdb/ldap/libkdb_ldap/kdb_ldap.c b/src/plugins/kdb/ldap/libkdb_ldap/kdb_ldap.c
index a29b332..e64d22d 100644
--- a/src/plugins/kdb/ldap/libkdb_ldap/kdb_ldap.c
+++ b/src/plugins/kdb/ldap/libkdb_ldap/kdb_ldap.c
@@ -39,55 +39,6 @@
#include <kdb5.h>
#include <kadm5/admin.h>
-#if !defined(isblank) && defined(HAVE_ISBLANK)
-#if defined(NEED_ISBLANK_PROTO)
-extern int isblank();
-#endif
-#else /* isblank missing */
-#if !defined(isblank)
-#define isblank isspace
-#endif
-#endif
-
-krb5_error_code
-krb5_ldap_get_db_opt(char *input, char **opt, char **val)
-{
- char *pos = strchr(input, '=');
-
- *val = NULL;
- if (pos == NULL) {
- *opt = strdup(input);
- if (*opt == NULL) {
- return ENOMEM;
- }
- } else {
- int len = pos - input;
- *opt = malloc((unsigned) len + 1);
- if (!*opt) {
- return ENOMEM;
- }
- memcpy(*opt, input, (unsigned) len);
- /* ignore trailing blanks */
- while (isblank((*opt)[len-1]))
- --len;
- (*opt)[len] = '\0';
-
- pos += 1; /* move past '=' */
- while (isblank(*pos)) /* ignore leading blanks */
- pos += 1;
- if (*pos != '\0') {
- *val = strdup (pos);
- if (!*val) {
- free (*opt);
- return ENOMEM;
- }
- }
- }
- return (0);
-
-}
-
-
/*
* ldap get age
*/
@@ -302,161 +253,27 @@ krb5_ldap_open(krb5_context context, char *conf_section, char **db_args,
int mode)
{
krb5_error_code status = 0;
- char **t_ptr = db_args;
krb5_ldap_context *ldap_context=NULL;
- int srv_cnt = 0;
- kdb5_dal_handle *dal_handle=NULL;
/* Clear the global error string */
krb5_clear_error_message(context);
- ldap_context = calloc(1, sizeof(krb5_ldap_context));
- if (ldap_context == NULL) {
- status = ENOMEM;
+ ldap_context = k5alloc(sizeof(krb5_ldap_context), &status);
+ if (ldap_context == NULL)
goto clean_n_exit;
- }
-
+ context->dal_handle->db_context = ldap_context;
ldap_context->kcontext = context;
- while (t_ptr && *t_ptr) {
- char *opt = NULL, *val = NULL;
-
- if ((status = krb5_ldap_get_db_opt(*t_ptr, &opt, &val)) != 0) {
- goto clean_n_exit;
- }
- if (opt && !strcmp(opt, "binddn")) {
- if (ldap_context->bind_dn) {
- free (opt);
- free (val);
- status = EINVAL;
- krb5_set_error_message(context, status, _("'binddn' missing"));
- goto clean_n_exit;
- }
- if (val == NULL) {
- status = EINVAL;
- krb5_set_error_message(context, status,
- _("'binddn' value missing"));
- free(opt);
- goto clean_n_exit;
- }
- ldap_context->bind_dn = strdup(val);
- if (ldap_context->bind_dn == NULL) {
- free (opt);
- free (val);
- status = ENOMEM;
- goto clean_n_exit;
- }
- } else if (opt && !strcmp(opt, "nconns")) {
- if (ldap_context->max_server_conns) {
- free (opt);
- free (val);
- status = EINVAL;
- krb5_set_error_message(context, status, _("'nconns' missing"));
- goto clean_n_exit;
- }
- if (val == NULL) {
- status = EINVAL;
- krb5_set_error_message(context, status,
- _("'nconns' value missing"));
- free(opt);
- goto clean_n_exit;
- }
- ldap_context->max_server_conns = atoi(val) ? atoi(val) : DEFAULT_CONNS_PER_SERVER;
- } else if (opt && !strcmp(opt, "bindpwd")) {
- if (ldap_context->bind_pwd) {
- free (opt);
- free (val);
- status = EINVAL;
- krb5_set_error_message(context, status,
- _("'bindpwd' missing"));
- goto clean_n_exit;
- }
- if (val == NULL) {
- status = EINVAL;
- krb5_set_error_message(context, status,
- _("'bindpwd' value missing"));
- free(opt);
- goto clean_n_exit;
- }
- ldap_context->bind_pwd = strdup(val);
- if (ldap_context->bind_pwd == NULL) {
- free (opt);
- free (val);
- status = ENOMEM;
- goto clean_n_exit;
- }
- } else if (opt && !strcmp(opt, "host")) {
- if (val == NULL) {
- status = EINVAL;
- krb5_set_error_message(context, status,
- _("'host' value missing"));
- free(opt);
- goto clean_n_exit;
- }
- if (ldap_context->server_info_list == NULL)
- ldap_context->server_info_list = (krb5_ldap_server_info **) calloc (SERV_COUNT+1, sizeof (krb5_ldap_server_info *)) ;
-
- if (ldap_context->server_info_list == NULL) {
- free (opt);
- free (val);
- status = ENOMEM;
- goto clean_n_exit;
- }
-
- ldap_context->server_info_list[srv_cnt] = (krb5_ldap_server_info *) calloc (1, sizeof (krb5_ldap_server_info));
- if (ldap_context->server_info_list[srv_cnt] == NULL) {
- free (opt);
- free (val);
- status = ENOMEM;
- goto clean_n_exit;
- }
-
- ldap_context->server_info_list[srv_cnt]->server_status = NOTSET;
-
- ldap_context->server_info_list[srv_cnt]->server_name = strdup(val);
- if (ldap_context->server_info_list[srv_cnt]->server_name == NULL) {
- free (opt);
- free (val);
- status = ENOMEM;
- goto clean_n_exit;
- }
-
- srv_cnt++;
- } else {
- /* ignore hash argument. Might have been passed from create */
- status = EINVAL;
- if (opt && !strcmp(opt, "temporary")) {
- /*
- * temporary is passed in when kdb5_util load without -update is done.
- * This is unsupported by the LDAP plugin.
- */
- krb5_set_error_message(context, status,
- _("open of LDAP directory aborted, "
- "plugin requires -update argument"));
- } else {
- krb5_set_error_message (context, status,
- _("unknown option \'%s\'"),
- opt?opt:val);
- }
- free(opt);
- free(val);
- goto clean_n_exit;
- }
-
- free(opt);
- free(val);
- t_ptr++;
+ status = krb5_ldap_parse_db_params(context, db_args);
+ if (status) {
+ prepend_err_str(context, _("Error processing LDAP DB params:"),
+ status, status);
+ goto clean_n_exit;
}
- dal_handle = context->dal_handle;
- dal_handle->db_context = ldap_context;
status = krb5_ldap_read_server_params(context, conf_section, mode & 0x0300);
if (status) {
- if (ldap_context)
- krb5_ldap_free_ldap_context(ldap_context);
- ldap_context = NULL;
- dal_handle->db_context = NULL;
- prepend_err_str(context, _("Error reading LDAP server params: "),
+ prepend_err_str(context, _("Error reading LDAP server params:"),
status, status);
goto clean_n_exit;
}
diff --git a/src/plugins/kdb/ldap/libkdb_ldap/kdb_ldap.h b/src/plugins/kdb/ldap/libkdb_ldap/kdb_ldap.h
index 30d3a4a..918df26 100644
--- a/src/plugins/kdb/ldap/libkdb_ldap/kdb_ldap.h
+++ b/src/plugins/kdb/ldap/libkdb_ldap/kdb_ldap.h
@@ -59,7 +59,6 @@
extern struct timeval timelimit;
-#define SERV_COUNT 100
#define DEFAULT_CONNS_PER_SERVER 5
#define REALM_READ_REFRESH_INTERVAL (5 * 60)
diff --git a/src/plugins/kdb/ldap/libkdb_ldap/ldap_create.c b/src/plugins/kdb/ldap/libkdb_ldap/ldap_create.c
index 86282ea..4fcf5a0 100644
--- a/src/plugins/kdb/ldap/libkdb_ldap/ldap_create.c
+++ b/src/plugins/kdb/ldap/libkdb_ldap/ldap_create.c
@@ -53,162 +53,32 @@ krb5_error_code
krb5_ldap_create(krb5_context context, char *conf_section, char **db_args)
{
krb5_error_code status = 0;
- char **t_ptr = db_args;
krb5_ldap_realm_params *rparams = NULL;
- kdb5_dal_handle *dal_handle = NULL;
krb5_ldap_context *ldap_context=NULL;
krb5_boolean realm_obj_created = FALSE;
krb5_boolean krbcontainer_obj_created = FALSE;
- int srv_cnt = 0;
int mask = 0;
/* Clear the global error string */
krb5_clear_error_message(context);
- ldap_context = malloc(sizeof(krb5_ldap_context));
- if (ldap_context == NULL) {
- status = ENOMEM;
+ ldap_context = k5alloc(sizeof(krb5_ldap_context), &status);
+ if (ldap_context == NULL)
goto cleanup;
- }
- memset(ldap_context, 0, sizeof(*ldap_context));
-
+ context->dal_handle->db_context = ldap_context;
ldap_context->kcontext = context;
- /* populate ldap_context with ldap specific options */
- while (t_ptr && *t_ptr) {
- char *opt = NULL, *val = NULL;
-
- if ((status = krb5_ldap_get_db_opt(*t_ptr, &opt, &val)) != 0) {
- goto cleanup;
- }
- if (opt && !strcmp(opt, "binddn")) {
- if (ldap_context->bind_dn) {
- free (opt);
- free (val);
- status = EINVAL;
- krb5_set_error_message (context, status, "'binddn' missing");
- goto cleanup;
- }
- if (val == NULL) {
- status = EINVAL;
- krb5_set_error_message (context, status, "'binddn' value missing");
- free(opt);
- goto cleanup;
- }
- ldap_context->bind_dn = strdup(val);
- if (ldap_context->bind_dn == NULL) {
- free (opt);
- free (val);
- status = ENOMEM;
- goto cleanup;
- }
- } else if (opt && !strcmp(opt, "nconns")) {
- if (ldap_context->max_server_conns) {
- free (opt);
- free (val);
- status = EINVAL;
- krb5_set_error_message (context, status, "'nconns' missing");
- goto cleanup;
- }
- if (val == NULL) {
- status = EINVAL;
- krb5_set_error_message (context, status, "'nconns' value missing");
- free(opt);
- goto cleanup;
- }
- ldap_context->max_server_conns = atoi(val) ? atoi(val) : DEFAULT_CONNS_PER_SERVER;
- } else if (opt && !strcmp(opt, "bindpwd")) {
- if (ldap_context->bind_pwd) {
- free (opt);
- free (val);
- status = EINVAL;
- krb5_set_error_message (context, status, "'bindpwd' missing");
- goto cleanup;
- }
- if (val == NULL) {
- status = EINVAL;
- krb5_set_error_message (context, status, "'bindpwd' value missing");
- free(opt);
- goto cleanup;
- }
- ldap_context->bind_pwd = strdup(val);
- if (ldap_context->bind_pwd == NULL) {
- free (opt);
- free (val);
- status = ENOMEM;
- goto cleanup;
- }
- } else if (opt && !strcmp(opt, "host")) {
- if (val == NULL) {
- status = EINVAL;
- krb5_set_error_message (context, status, "'host' value missing");
- free(opt);
- goto cleanup;
- }
- if (ldap_context->server_info_list == NULL)
- ldap_context->server_info_list =
- (krb5_ldap_server_info **) calloc(SERV_COUNT+1, sizeof(krb5_ldap_server_info *));
-
- if (ldap_context->server_info_list == NULL) {
- free (opt);
- free (val);
- status = ENOMEM;
- goto cleanup;
- }
-
- ldap_context->server_info_list[srv_cnt] =
- (krb5_ldap_server_info *) calloc(1, sizeof(krb5_ldap_server_info));
- if (ldap_context->server_info_list[srv_cnt] == NULL) {
- free (opt);
- free (val);
- status = ENOMEM;
- goto cleanup;
- }
-
- ldap_context->server_info_list[srv_cnt]->server_status = NOTSET;
-
- ldap_context->server_info_list[srv_cnt]->server_name = strdup(val);
- if (ldap_context->server_info_list[srv_cnt]->server_name == NULL) {
- free (opt);
- free (val);
- status = ENOMEM;
- goto cleanup;
- }
-
- srv_cnt++;
- } else {
- /* ignore hash argument. Might have been passed from create */
- status = EINVAL;
- if (opt && !strcmp(opt, "temporary")) {
- /*
- * temporary is passed in when kdb5_util load without -update is done.
- * This is unsupported by the LDAP plugin.
- */
- krb5_set_error_message(context, status,
- _("creation of LDAP entries aborted, "
- "plugin requires -update argument"));
- } else {
- krb5_set_error_message(context, status,
- _("unknown option \'%s\'"),
- opt?opt:val);
- }
- free(opt);
- free(val);
- goto cleanup;
- }
-
- free(opt);
- free(val);
- t_ptr++;
+ status = krb5_ldap_parse_db_params(context, db_args);
+ if (status) {
+ prepend_err_str(context, _("Error processing LDAP DB params:"),
+ status, status);
+ goto cleanup;
}
- dal_handle = context->dal_handle;
- dal_handle->db_context = (kdb5_dal_handle *) ldap_context;
-
status = krb5_ldap_read_server_params(context, conf_section, KRB5_KDB_SRV_TYPE_ADMIN);
if (status) {
- dal_handle->db_context = NULL;
- prepend_err_str (context, "Error reading LDAP server params: ", status, status);
+ prepend_err_str(context, _("Error reading LDAP server params:"),
+ status, status);
goto cleanup;
}
status = krb5_ldap_db_init(context, ldap_context);
@@ -253,7 +123,6 @@ krb5_ldap_create(krb5_context context, char *conf_section, char **db_args)
goto cleanup;
cleanup:
-
/* If the krbcontainer/realm creation is not complete, do the roll-back here */
if ((krbcontainer_obj_created) && (!realm_obj_created)) {
int rc;
@@ -267,5 +136,7 @@ cleanup:
if (rparams)
krb5_ldap_free_realm_params(rparams);
+ if (status)
+ krb5_ldap_close(context);
return(status);
}
diff --git a/src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.c b/src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.c
index aba9e8e..9bfd90a 100644
--- a/src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.c
+++ b/src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.c
@@ -33,6 +33,7 @@
*/
#include <string.h>
#include <time.h>
+#include <ctype.h>
#include "kdb_ldap.h"
#include "ldap_misc.h"
#include "ldap_handle.h"
@@ -53,7 +54,7 @@ remove_overlapping_subtrees(char **listin, char **listop, int *subtcount,
But all the world's not Linux. */
#undef strndup
#define strndup my_strndup
-#ifdef HAVE_LDAP_STR2DN
+
static char *
my_strndup(const char *input, size_t limit)
{
@@ -69,7 +70,6 @@ my_strndup(const char *input, size_t limit)
} else
return strdup(input);
}
-#endif
/* Get integer or string values from the config section, falling back
to the default section, then to hard-coded values. */
@@ -164,7 +164,141 @@ prof_get_string_def(krb5_context ctx, const char *conf_section,
return 0;
}
+static krb5_error_code
+get_db_opt(const char *input, char **opt_out, char **val_out)
+{
+ const char *pos;
+ char *opt, *val = NULL;
+ size_t len;
+
+ *opt_out = *val_out = NULL;
+ pos = strchr(input, '=');
+ if (pos == NULL) {
+ opt = strdup(input);
+ if (opt == NULL)
+ return ENOMEM;
+ } else {
+ len = pos - input;
+ /* Ignore trailing spaces. */
+ while (len > 0 && isspace((unsigned char)input[len - 1]))
+ len--;
+ opt = strndup(input, len);
+
+ pos++; /* Move past '='. */
+ while (isspace(*pos)) /* Ignore leading spaces. */
+ pos++;
+ if (*pos != '\0') {
+ val = strdup(pos);
+ if (val == NULL) {
+ free(opt);
+ return ENOMEM;
+ }
+ }
+ }
+ *opt_out = opt;
+ *val_out = val;
+ return 0;
+}
+
+static krb5_error_code
+add_server_entry(krb5_context context, const char *name)
+{
+ krb5_ldap_context *lctx = context->dal_handle->db_context;
+ krb5_ldap_server_info **sp, **list, *server;
+ size_t count = 0;
+
+ /* Allocate list space for the new entry and null terminator. */
+ for (sp = lctx->server_info_list; sp != NULL && *sp != NULL; sp++)
+ count++;
+ list = realloc(lctx->server_info_list, (count + 2) * sizeof(*list));
+ if (list == NULL)
+ return ENOMEM;
+ lctx->server_info_list = list;
+
+ server = calloc(1, sizeof(krb5_ldap_server_info));
+ if (server == NULL)
+ return ENOMEM;
+ server->server_status = NOTSET;
+ server->server_name = strdup(name);
+ if (server->server_name == NULL) {
+ free(server);
+ return ENOMEM;
+ }
+ list[count] = server;
+ list[count + 1] = NULL;
+ return 0;
+}
+
+krb5_error_code
+krb5_ldap_parse_db_params(krb5_context context, char **db_args)
+{
+ char *opt = NULL, *val = NULL;
+ krb5_error_code status;
+ krb5_ldap_context *lctx = context->dal_handle->db_context;
+
+ if (db_args == NULL)
+ return 0;
+ for (; *db_args != NULL; db_args++) {
+ status = get_db_opt(*db_args, &opt, &val);
+ if (status)
+ goto cleanup;
+
+ /* Check for options which don't require values. */
+ if (!strcmp(opt, "temporary")) {
+ /* "temporary" is passed by kdb5_util load without -update,
+ * which we don't support. */
+ status = EINVAL;
+ krb5_set_error_message(context, status,
+ _("KDB module requires -update argument"));
+ goto cleanup;
+ }
+
+ if (val == NULL) {
+ status = EINVAL;
+ krb5_set_error_message(context, status, _("'%s' value missing"),
+ opt);
+ goto cleanup;
+ }
+
+ /* Check for options which do require arguments. */
+ if (!strcmp(opt, "binddn")) {
+ free(lctx->bind_dn);
+ lctx->bind_dn = strdup(val);
+ if (lctx->bind_dn == NULL) {
+ status = ENOMEM;
+ goto cleanup;
+ }
+ } else if (!strcmp(opt, "nconns")) {
+ lctx->max_server_conns = atoi(val) ? atoi(val) :
+ DEFAULT_CONNS_PER_SERVER;
+ } else if (!strcmp(opt, "bindpwd")) {
+ free(lctx->bind_pwd);
+ lctx->bind_pwd = strdup(val);
+ if (lctx->bind_pwd == NULL) {
+ status = ENOMEM;
+ goto cleanup;
+ }
+ } else if (!strcmp(opt, "host")) {
+ status = add_server_entry(context, val);
+ if (status)
+ goto cleanup;
+ } else {
+ status = EINVAL;
+ krb5_set_error_message(context, status, _("unknown option '%s'"),
+ opt);
+ goto cleanup;
+ }
+
+ free(opt);
+ free(val);
+ opt = val = NULL;
+ }
+cleanup:
+ free(opt);
+ free(val);
+ return status;
+}
/*
* This function reads the parameters from the krb5.conf file. The
@@ -175,12 +309,11 @@ krb5_error_code
krb5_ldap_read_server_params(krb5_context context, char *conf_section,
int srv_type)
{
- char *tempval=NULL, *save_ptr=NULL;
+ char *tempval=NULL, *save_ptr=NULL, *item=NULL;
const char *delims="\t\n\f\v\r ,";
krb5_error_code st=0;
kdb5_dal_handle *dal_handle=NULL;
krb5_ldap_context *ldap_context=NULL;
- krb5_ldap_server_info ***server_info=NULL;
dal_handle = context->dal_handle;
ldap_context = (krb5_ldap_context *) dal_handle->db_context;
@@ -269,17 +402,6 @@ krb5_ldap_read_server_params(krb5_context context, char *conf_section,
*/
if (ldap_context->server_info_list == NULL) {
- unsigned int ele=0;
-
- server_info = &(ldap_context->server_info_list);
- *server_info = (krb5_ldap_server_info **) calloc (SERV_COUNT+1,
- sizeof (krb5_ldap_server_info *));
-
- if (*server_info == NULL) {
- st = ENOMEM;
- goto cleanup;
- }
-
if ((st=profile_get_string(context->profile, KDB_MODULE_SECTION, conf_section,
KRB5_CONF_LDAP_SERVERS, NULL, &tempval)) != 0) {
krb5_set_error_message(context, st, _("Error reading "
@@ -288,36 +410,16 @@ krb5_ldap_read_server_params(krb5_context context, char *conf_section,
}
if (tempval == NULL) {
-
- (*server_info)[ele] = (krb5_ldap_server_info *)calloc(1,
- sizeof(krb5_ldap_server_info));
-
- (*server_info)[ele]->server_name = strdup("ldapi://");
- if ((*server_info)[ele]->server_name == NULL) {
- st = ENOMEM;
+ st = add_server_entry(context, "ldapi://");
+ if (st)
goto cleanup;
- }
- (*server_info)[ele]->server_status = NOTSET;
} else {
- char *item=NULL;
-
- item = strtok_r(tempval,delims,&save_ptr);
- while (item != NULL && ele<SERV_COUNT) {
- (*server_info)[ele] = (krb5_ldap_server_info *)calloc(1,
- sizeof(krb5_ldap_server_info));
- if ((*server_info)[ele] == NULL) {
- st = ENOMEM;
- goto cleanup;
- }
- (*server_info)[ele]->server_name = strdup(item);
- if ((*server_info)[ele]->server_name == NULL) {
- st = ENOMEM;
+ item = strtok_r(tempval, delims, &save_ptr);
+ while (item != NULL) {
+ st = add_server_entry(context, item);
+ if (st)
goto cleanup;
- }
-
- (*server_info)[ele]->server_status = NOTSET;
item = strtok_r(NULL,delims,&save_ptr);
- ++ele;
}
profile_release_string(tempval);
}
diff --git a/src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.h b/src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.h
index c2d4b0e..c3bb6c8 100644
--- a/src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.h
+++ b/src/plugins/kdb/ldap/libkdb_ldap/ldap_misc.h
@@ -75,6 +75,9 @@ krb5_error_code
krb5_get_subtree_info(krb5_ldap_context *, char ***, unsigned int *);
krb5_error_code
+krb5_ldap_parse_db_params(krb5_context, char **);
+
+krb5_error_code
krb5_ldap_read_server_params(krb5_context , char *, int);
krb5_error_code
@@ -120,9 +123,6 @@ krb5_error_code
krb5_ldap_name_to_policydn (krb5_context, char *, char **);
krb5_error_code
-krb5_ldap_get_db_opt(char *, char **, char **);
-
-krb5_error_code
populate_krb5_db_entry(krb5_context context,
krb5_ldap_context *ldap_context,
LDAP *ld,
diff --git a/src/tests/t_kdb.py b/src/tests/t_kdb.py
index 3c664f0..e9769f7 100644
--- a/src/tests/t_kdb.py
+++ b/src/tests/t_kdb.py
@@ -249,7 +249,7 @@ realm.stop()
dumpfile = os.path.join(realm.testdir, 'dump')
realm.run([kdb5_util, 'dump', dumpfile])
out = realm.run([kdb5_util, 'load', dumpfile], expected_code=1)
-if 'plugin requires -update argument' not in out:
+if 'KDB module requires -update argument' not in out:
fail('Unexpected error from kdb5_util load without -update')
realm.run([kdb5_util, 'load', '-update', dumpfile])
More information about the cvs-krb5
mailing list