return;
}
- for (i=0; i < keys->len; i++) {
+ for (i = 0; i < keys->len; i++) {
sdb_key_free(&keys->val[i]);
}
ZERO_STRUCTP(keys);
}
+/**
+ * @brief free the memory allocated to a sdb_key structure.
+ *
+ * @param[in,out] keys sdb_key to be freed, will be zeroed on return
+ */
+void sdb_pub_key_free(struct sdb_pub_key *k)
+{
+ if (k == NULL) {
+ return;
+ }
+
+ SAFE_FREE(k->exponent.data);
+ SAFE_FREE(k->modulus.data);
+
+ ZERO_STRUCTP(k);
+}
+
+/**
+ * @brief free the memory allocated to a sdb_pub_keys structure.
+ *
+ * @param[in,out] keys sdb_pub_keys to be freed, will be zeroed on return
+ */
+void sdb_pub_keys_free(struct sdb_pub_keys *keys)
+{
+ unsigned int i;
+
+ if (keys == NULL) {
+ return;
+ }
+
+ for (i = 0; i < keys->len; i++) {
+ sdb_pub_key_free(&keys->keys[i]);
+ }
+
+ SAFE_FREE(keys->keys);
+ ZERO_STRUCTP(keys);
+}
+
void sdb_entry_free(struct sdb_entry *s)
{
if (s->skdc_entry != NULL) {
krb5_free_principal(NULL, s->principal);
sdb_keys_free(&s->keys);
+ sdb_pub_keys_free(&s->pub_keys);
if (s->etypes != NULL) {
SAFE_FREE(s->etypes->val);
unsigned int do_not_store:1;
};
+struct sdb_pub_key {
+ unsigned int bit_size;
+ krb5_data modulus;
+ krb5_data exponent;
+};
+
+struct sdb_pub_keys {
+ unsigned int len;
+ struct sdb_pub_key *keys;
+};
+
struct sdb_entry {
struct samba_kdc_entry *skdc_entry;
krb5_principal principal;
int *max_life;
int *max_renew;
struct SDBFlags flags;
+ struct sdb_pub_keys pub_keys;
};
#define SDB_ERR_NOENTRY 36150275
#define SDB_F_FORCE_CANON 0x4000 /* force canonicalization */
#define SDB_F_RODC_NUMBER_SPECIFIED 0x8000 /* we want a particular RODC number */
+void sdb_pub_key_free(struct sdb_pub_key *key);
+void sdb_pub_keys_free(struct sdb_pub_keys *keys);
void sdb_key_free(struct sdb_key *key);
void sdb_keys_free(struct sdb_keys *keys);
void sdb_entry_free(struct sdb_entry *e);