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.
This commit is contained in:
Love Hornquist Astrand
2009-09-12 17:26:10 -07:00
parent 36ea29599d
commit 8e8c155c50

View File

@@ -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);