]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Improve kdb5 error when default realm is unset 479/head
authorGreg Hudson <ghudson@mit.edu>
Fri, 1 Jul 2016 15:10:19 +0000 (11:10 -0400)
committerGreg Hudson <ghudson@mit.edu>
Fri, 1 Jul 2016 17:37:34 +0000 (13:37 -0400)
When the default realm name is unspecified, and none was set in the
krb5_context object, return KRB5_CONFIG_NODEFREALM from libkdb5
instead of the confusing KRB5_KDB_DBTYPE_NOTFOUND.  To accomplish
this, make kdb_get_library_name() return a krb5_error_code.

ticket: 8448
target_version: 1.14-next
target_version: 1.13-next
tags: pullup

src/lib/kdb/kdb5.c

index 2886d057fcdfab879d1a1e6dd08e26b78856fb28..713b39d5c37cb4377e03a406123c609d0eb474dd 100644 (file)
@@ -236,11 +236,13 @@ get_conf_section(krb5_context context, char **section)
     return 0;
 }
 
-static char *
-kdb_get_library_name(krb5_context kcontext)
+static krb5_error_code
+kdb_get_library_name(krb5_context kcontext, char **libname_out)
 {
     krb5_error_code status = 0;
-    char *result = NULL, *value = NULL, *lib = NULL, *defrealm = NULL;
+    char *value = NULL, *lib = NULL, *defrealm = NULL;
+
+    *libname_out = NULL;
 
     status = krb5_get_default_realm(kcontext, &defrealm);
     if (status)
@@ -269,12 +271,15 @@ kdb_get_library_name(krb5_context kcontext)
         goto clean_n_exit;
     }
 
-    result = strdup(lib);
+    *libname_out = strdup(lib);
+    if (*libname_out == NULL)
+        status = ENOMEM;
+
 clean_n_exit:
     krb5_free_default_realm(kcontext, defrealm);
     profile_release_string(value);
     profile_release_string(lib);
-    return result;
+    return status;
 }
 
 static void
@@ -553,9 +558,10 @@ krb5_db_setup_lib_handle(krb5_context kcontext)
         goto clean_n_exit;
     }
 
-    library = kdb_get_library_name(kcontext);
+    status = kdb_get_library_name(kcontext, &library);
     if (library == NULL) {
-        status = KRB5_KDB_DBTYPE_NOTFOUND;
+        k5_prependmsg(kcontext, status,
+                      _("Cannot initialize database library"));
         goto clean_n_exit;
     }