summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2011-10-06 20:08:29 +0000
committerGreg Hudson <ghudson@mit.edu>2011-10-06 20:08:29 +0000
commitf80666416e33efe29bfb1ffc711d482d67fc0873 (patch)
tree419ebe99016559fc1f5e3d7726a48c4eb1d07079 /src
parentd9ed152c4ba1fc5b8d2ca6f894e25e449d685c0c (diff)
downloadkrb5-f80666416e33efe29bfb1ffc711d482d67fc0873.tar.gz
krb5-f80666416e33efe29bfb1ffc711d482d67fc0873.tar.xz
krb5-f80666416e33efe29bfb1ffc711d482d67fc0873.zip
Add get_string, free_string kdcpreauth callbacks
String attributes should be useful to preauth modules without having to link against libkdb5. Add a callback to make client string attributes accessible to modules. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25318 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r--src/include/krb5/preauth_plugin.h10
-rw-r--r--src/kdc/kdc_preauth.c15
2 files changed, 25 insertions, 0 deletions
diff --git a/src/include/krb5/preauth_plugin.h b/src/include/krb5/preauth_plugin.h
index 1646263d9..e4f9de2e7 100644
--- a/src/include/krb5/preauth_plugin.h
+++ b/src/include/krb5/preauth_plugin.h
@@ -355,6 +355,16 @@ typedef struct krb5_kdcpreauth_callbacks_st {
krb5_keyblock *(*fast_armor)(krb5_context context,
krb5_kdcpreauth_rock rock);
+ /* Retrieve a string attribute from the client DB entry, or NULL if no such
+ * attribute is set. Free the result with the free_string callback. */
+ krb5_error_code (*get_string)(krb5_context context,
+ krb5_kdcpreauth_rock rock, const char *key,
+ char **value_out);
+
+ /* Free the result of get_string. */
+ void (*free_string)(krb5_context context, krb5_kdcpreauth_rock rock,
+ char *string);
+
/* Get a pointer to the client DB entry (returned as a void pointer to
* avoid a dependency on a libkdb5 type). */
void *(*client_entry)(krb5_context context, krb5_kdcpreauth_rock rock);
diff --git a/src/kdc/kdc_preauth.c b/src/kdc/kdc_preauth.c
index 7e9cde1f9..6a04ff2aa 100644
--- a/src/kdc/kdc_preauth.c
+++ b/src/kdc/kdc_preauth.c
@@ -574,6 +574,19 @@ fast_armor(krb5_context context, krb5_kdcpreauth_rock rock)
return rock->rstate->armor_key;
}
+static krb5_error_code
+get_string(krb5_context context, krb5_kdcpreauth_rock rock, const char *key,
+ char **value_out)
+{
+ return krb5_dbe_get_string(context, rock->client, key, value_out);
+}
+
+static void
+free_string(krb5_context context, krb5_kdcpreauth_rock rock, char *string)
+{
+ krb5_dbe_free_string(context, string);
+}
+
static void *
client_entry(krb5_context context, krb5_kdcpreauth_rock rock)
{
@@ -587,6 +600,8 @@ static struct krb5_kdcpreauth_callbacks_st callbacks = {
free_keys,
request_body,
fast_armor,
+ get_string,
+ free_string,
client_entry
};