From 8e8c155c50b470952e0cc73b0e8eb8b36aaad0fc Mon Sep 17 00:00:00 2001 From: Love Hornquist Astrand Date: Sat, 12 Sep 2009 17:26:10 -0700 Subject: [PATCH] Make example sane and make LDAP style backends work (slight better) Fix the format example, parse the string backward to take of the master key before passing the database name down into the HDB backend layer. --- lib/hdb/keytab.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/lib/hdb/keytab.c b/lib/hdb/keytab.c index a10b428e7..7fef714c7 100644 --- a/lib/hdb/keytab.c +++ b/lib/hdb/keytab.c @@ -49,7 +49,7 @@ struct hdb_cursor { /* * the format for HDB keytabs is: - * HDB:[file:mkey] + * HDB:[HDBFORMAT:database-specific-data[:mkey=mkey-file]] */ static krb5_error_code @@ -64,8 +64,8 @@ hdb_resolve(krb5_context context, const char *name, krb5_keytab id) return ENOMEM; } db = name; - mkey = strchr(name, ':'); - if(mkey == NULL || mkey[1] == '\0') { + mkey = strstr(name, ":mkey="); + if(mkey == NULL || mkey[5] == '\0') { if(*name == '\0') d->dbname = NULL; else { @@ -78,19 +78,16 @@ hdb_resolve(krb5_context context, const char *name, krb5_keytab id) } d->mkey = NULL; } else { - if((mkey - db) == 0) { - d->dbname = NULL; - } else { - d->dbname = malloc(mkey - db + 1); - if(d->dbname == NULL) { - free(d); - krb5_set_error_message(context, ENOMEM, "malloc: out of memory"); - return ENOMEM; - } - memmove(d->dbname, db, mkey - db); - d->dbname[mkey - db] = '\0'; + d->dbname = malloc(mkey - db + 1); + if(d->dbname == NULL) { + free(d); + krb5_set_error_message(context, ENOMEM, "malloc: out of memory"); + return ENOMEM; } - d->mkey = strdup(mkey + 1); + memmove(d->dbname, db, mkey - db); + d->dbname[mkey - db] = '\0'; + + d->mkey = strdup(mkey + 5); if(d->mkey == NULL) { free(d->dbname); free(d);