abstract out adding dbinfo
authorLove Hornquist Astrand <lha@h5l.org>
Sun, 22 Nov 2009 08:24:55 +0000 (00:24 -0800)
committerLove Hornquist Astrand <lha@h5l.org>
Sun, 22 Nov 2009 08:24:55 +0000 (00:24 -0800)
kdc/set_dbinfo.c

index 424969cf42ea7e2e63fcf13abc2a33d068aceb41..2233fa7cc8a2cc6bc3f9014464e5886812429886 100644 (file)
@@ -1,9 +1,10 @@
 /*
  * Copyright (c) 1997-2007 Kungliga Tekniska Högskolan
  * (Royal Institute of Technology, Stockholm, Sweden).
- *
  * All rights reserved.
  *
+ * Portions Copyright (c) 2009 Apple Inc. All rights reserved.
+ *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
 
 RCSID("$Id: default_config.c 21296 2007-06-25 14:49:11Z lha $");
 
+static krb5_error_code
+add_db(krb5_context context, struct krb5_kdc_configuration *c,
+       const char *conf, const char *master_key)
+{
+    krb5_error_code ret;
+    void *ptr;
+
+    ptr = realloc(c->db, (c->num_db + 1) * sizeof(*c->db));
+    if (ptr == NULL) {
+       krb5_set_error_message(context, ENOMEM, "malloc: out of memory");
+       return ENOMEM;
+    }
+    c->db = ptr;
+    
+    ret = hdb_create(context, &c->db[c->num_db], conf);
+    if(ret)
+       return ret;
+
+    c->num_db++;
+
+    if (master_key) {
+       ret = hdb_set_master_keyfile(context, c->db[c->num_db - 1], master_key);
+       if (ret)
+           return ret;
+    }
+
+    return 0;
+}
+
 krb5_error_code
 krb5_kdc_set_dbinfo(krb5_context context, struct krb5_kdc_configuration *c)
 {
@@ -50,28 +80,13 @@ krb5_kdc_set_dbinfo(krb5_context context, struct krb5_kdc_configuration *c)
 
     d = NULL;
     while ((d = hdb_dbinfo_get_next(info, d)) != NULL) {
-       void *ptr;
        
-       ptr = realloc(c->db, (c->num_db + 1) * sizeof(*c->db));
-       if (ptr == NULL) {
-           ret = ENOMEM;
-           krb5_set_error_message(context, ret, "malloc: out of memory");
-           goto out;
-       }
-       c->db = ptr;
-       
-       ret = hdb_create(context, &c->db[c->num_db],
-                        hdb_dbinfo_get_dbname(context, d));
-       if(ret)
-           goto out;
-       
-       ret = hdb_set_master_keyfile(context, c->db[c->num_db],
-                                    hdb_dbinfo_get_mkey_file(context, d));
+       ret = add_db(context, c,
+                    hdb_dbinfo_get_dbname(context, d),
+                    hdb_dbinfo_get_mkey_file(context, d));
        if (ret)
            goto out;
        
-       c->num_db++;
-
        kdc_log(context, c, 0, "label: %s",
                hdb_dbinfo_get_label(context, d));
        kdc_log(context, c, 0, "\tdbname: %s",