mit-kdb: support MIT Kerberos 1.16 KDB API changes
[samba.git] / source4 / kdc / mit-kdb / kdb_samba_principals.c
index 28908bc3069afc51cd89bda4e0b1951a122e8da2..8b67436dc472dd5d97eddaa3638e78d75b3067ef 100644 (file)
@@ -78,13 +78,11 @@ static krb5_error_code ks_get_master_key_principal(krb5_context context,
 
        *kentry_ptr = NULL;
 
-       kentry = malloc(sizeof(krb5_db_entry));
+       kentry = calloc(1, sizeof(krb5_db_entry));
        if (kentry == NULL) {
                return ENOMEM;
        }
 
-       ZERO_STRUCTP(kentry);
-
        kentry->magic = KRB5_KDB_MAGIC_NUMBER;
        kentry->len = KRB5_KDB_V1_BASE_LENGTH;
        kentry->attributes = KRB5_KDB_DISALLOW_ALL_TIX;
@@ -95,7 +93,7 @@ static krb5_error_code ks_get_master_key_principal(krb5_context context,
                code = krb5_copy_principal(context, princ, &kentry->princ);
        }
        if (code != 0) {
-               ks_free_krb5_db_entry(context, kentry);
+               krb5_db_free_principal(context, kentry);
                return code;
        }
 
@@ -103,7 +101,7 @@ static krb5_error_code ks_get_master_key_principal(krb5_context context,
 
        code = krb5_dbe_update_mod_princ_data(context, kentry, now, kentry->princ);
        if (code != 0) {
-               ks_free_krb5_db_entry(context, kentry);
+               krb5_db_free_principal(context, kentry);
                return code;
        }
 
@@ -111,7 +109,7 @@ static krb5_error_code ks_get_master_key_principal(krb5_context context,
        kentry->n_key_data = 1;
        kentry->key_data = calloc(1, sizeof(krb5_key_data));
        if (code != 0) {
-               ks_free_krb5_db_entry(context, kentry);
+               krb5_db_free_principal(context, kentry);
                return code;
        }
 
@@ -121,7 +119,7 @@ static krb5_error_code ks_get_master_key_principal(krb5_context context,
        key_data->key_data_kvno         = 1;
        key_data->key_data_type[0]      = ENCTYPE_UNKNOWN;
        if (code != 0) {
-               ks_free_krb5_db_entry(context, kentry);
+               krb5_db_free_principal(context, kentry);
                return code;
        }
 
@@ -158,8 +156,6 @@ static krb5_error_code ks_create_principal(krb5_context context,
                return ENOMEM;
        }
 
-       ZERO_STRUCTP(kentry);
-
        kentry->magic = KRB5_KDB_MAGIC_NUMBER;
        kentry->len = KRB5_KDB_V1_BASE_LENGTH;
 
@@ -173,7 +169,7 @@ static krb5_error_code ks_create_principal(krb5_context context,
 
        code = krb5_copy_principal(context, princ, &kentry->princ);
        if (code != 0) {
-               ks_free_krb5_db_entry(context, kentry);
+               krb5_db_free_principal(context, kentry);
                return code;
        }
 
@@ -181,13 +177,13 @@ static krb5_error_code ks_create_principal(krb5_context context,
 
        code = krb5_dbe_update_mod_princ_data(context, kentry, now, kentry->princ);
        if (code != 0) {
-               ks_free_krb5_db_entry(context, kentry);
+               krb5_db_free_principal(context, kentry);
                return code;
        }
 
        code = mit_samba_generate_salt(&salt);
        if (code != 0) {
-               ks_free_krb5_db_entry(context, kentry);
+               krb5_db_free_principal(context, kentry);
                return code;
        }
 
@@ -198,7 +194,7 @@ static krb5_error_code ks_create_principal(krb5_context context,
                /* create a random password */
                code = mit_samba_generate_random_password(&pwd);
                if (code != 0) {
-                       ks_free_krb5_db_entry(context, kentry);
+                       krb5_db_free_principal(context, kentry);
                        return code;
                }
        }
@@ -206,14 +202,14 @@ static krb5_error_code ks_create_principal(krb5_context context,
        code = krb5_c_string_to_key(context, enctype, &pwd, &salt, &key);
        SAFE_FREE(pwd.data);
        if (code != 0) {
-               ks_free_krb5_db_entry(context, kentry);
+               krb5_db_free_principal(context, kentry);
                return code;
        }
 
        kentry->n_key_data = 1;
        kentry->key_data = calloc(1, sizeof(krb5_key_data));
        if (code != 0) {
-               ks_free_krb5_db_entry(context, kentry);
+               krb5_db_free_principal(context, kentry);
                return code;
        }
 
@@ -292,19 +288,6 @@ krb5_error_code kdb_samba_db_get_principal(krb5_context context,
        return code;
 }
 
-void kdb_samba_db_free_principal(krb5_context context,
-                                krb5_db_entry *entry)
-{
-       struct mit_samba_context *mit_ctx;
-
-       mit_ctx = ks_get_context(context);
-       if (mit_ctx == NULL) {
-               return;
-       }
-
-       ks_free_krb5_db_entry(context, entry);
-}
-
 krb5_error_code kdb_samba_db_put_principal(krb5_context context,
                                           krb5_db_entry *entry,
                                           char **db_args)
@@ -325,10 +308,18 @@ krb5_error_code kdb_samba_db_delete_principal(krb5_context context,
        return KRB5_KDB_DB_INUSE;
 }
 
+#if KRB5_KDB_API_VERSION >= 8
+krb5_error_code kdb_samba_db_iterate(krb5_context context,
+                                    char *match_entry,
+                                    int (*func)(krb5_pointer, krb5_db_entry *),
+                                    krb5_pointer func_arg,
+                                    krb5_flags iterflags)
+#else
 krb5_error_code kdb_samba_db_iterate(krb5_context context,
                                     char *match_entry,
                                     int (*func)(krb5_pointer, krb5_db_entry *),
                                     krb5_pointer func_arg)
+#endif
 {
        struct mit_samba_context *mit_ctx;
        krb5_db_entry *kentry = NULL;