prefix all struct HDB elements with hdb_
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12880 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -63,7 +63,7 @@ dump(int argc, char **argv)
|
|||||||
else
|
else
|
||||||
f = fopen(argv[0], "w");
|
f = fopen(argv[0], "w");
|
||||||
|
|
||||||
ret = db->open(context, db, O_RDONLY, 0600);
|
ret = db->hdb_open(context, db, O_RDONLY, 0600);
|
||||||
if(ret){
|
if(ret){
|
||||||
krb5_warn(context, ret, "hdb_open");
|
krb5_warn(context, ret, "hdb_open");
|
||||||
if(f != stdout)
|
if(f != stdout)
|
||||||
@@ -75,6 +75,6 @@ dump(int argc, char **argv)
|
|||||||
|
|
||||||
if(f != stdout)
|
if(f != stdout)
|
||||||
fclose(f);
|
fclose(f);
|
||||||
db->close(context, db);
|
db->hdb_close(context, db);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -142,12 +142,12 @@ init(int argc, char **argv)
|
|||||||
|
|
||||||
db = _kadm5_s_get_db(kadm_handle);
|
db = _kadm5_s_get_db(kadm_handle);
|
||||||
|
|
||||||
ret = db->open(context, db, O_RDWR | O_CREAT, 0600);
|
ret = db->hdb_open(context, db, O_RDWR | O_CREAT, 0600);
|
||||||
if(ret){
|
if(ret){
|
||||||
krb5_warn(context, ret, "hdb_open");
|
krb5_warn(context, ret, "hdb_open");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
db->close(context, db);
|
db->hdb_close(context, db);
|
||||||
for(i = optind; i < argc; i++){
|
for(i = optind; i < argc; i++){
|
||||||
krb5_principal princ;
|
krb5_principal princ;
|
||||||
const char *realm = argv[i];
|
const char *realm = argv[i];
|
||||||
|
@@ -341,7 +341,7 @@ doit(const char *filename, int merge)
|
|||||||
|
|
||||||
if(!merge)
|
if(!merge)
|
||||||
flags |= O_CREAT | O_TRUNC;
|
flags |= O_CREAT | O_TRUNC;
|
||||||
ret = db->open(context, db, flags, 0600);
|
ret = db->hdb_open(context, db, flags, 0600);
|
||||||
if(ret){
|
if(ret){
|
||||||
krb5_warn(context, ret, "hdb_open");
|
krb5_warn(context, ret, "hdb_open");
|
||||||
fclose(f);
|
fclose(f);
|
||||||
@@ -470,14 +470,14 @@ doit(const char *filename, int merge)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = db->store(context, db, HDB_F_REPLACE, &ent);
|
ret = db->hdb_store(context, db, HDB_F_REPLACE, &ent);
|
||||||
hdb_free_entry (context, &ent);
|
hdb_free_entry (context, &ent);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
krb5_warn(context, ret, "db_store");
|
krb5_warn(context, ret, "db_store");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
db->close(context, db);
|
db->hdb_close(context, db);
|
||||||
fclose(f);
|
fclose(f);
|
||||||
return ret != 0;
|
return ret != 0;
|
||||||
}
|
}
|
||||||
|
@@ -845,9 +845,9 @@ main(int argc, char **argv)
|
|||||||
ret = hdb_create (context, &db, database);
|
ret = hdb_create (context, &db, database);
|
||||||
if(ret)
|
if(ret)
|
||||||
krb5_err(context, 1, ret, "hdb_create: %s", database);
|
krb5_err(context, 1, ret, "hdb_create: %s", database);
|
||||||
ret = db->open(context, db, O_RDONLY, 0);
|
ret = db->hdb_open(context, db, O_RDONLY, 0);
|
||||||
if(ret)
|
if(ret)
|
||||||
krb5_err(context, 1, ret, "db->open");
|
krb5_err(context, 1, ret, "db->hdb_open");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
krb5_errx(context, 1, "unknown dump type `%d'", type);
|
krb5_errx(context, 1, "unknown dump type `%d'", type);
|
||||||
@@ -864,7 +864,7 @@ main(int argc, char **argv)
|
|||||||
krb5_cc_destroy(context, ccache);
|
krb5_cc_destroy(context, ccache);
|
||||||
|
|
||||||
if(db != NULL)
|
if(db != NULL)
|
||||||
(*db->destroy)(context, db);
|
(*db->hdb_destroy)(context, db);
|
||||||
|
|
||||||
krb5_free_context(context);
|
krb5_free_context(context);
|
||||||
return 0;
|
return 0;
|
||||||
|
32
kdc/hpropd.c
32
kdc/hpropd.c
@@ -65,9 +65,11 @@ dump_krb4(krb5_context context, hdb_entry *ent, int fd)
|
|||||||
ret = krb5_524_conv_principal(context, ent->principal,
|
ret = krb5_524_conv_principal(context, ent->principal,
|
||||||
name, instance, realm);
|
name, instance, realm);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
krb5_unparse_name(context, ent->principal, &princ_name);
|
ret = krb5_unparse_name(context, ent->principal, &princ_name);
|
||||||
krb5_warn(context, ret, "%s", princ_name);
|
if (ret == 0) {
|
||||||
free(princ_name);
|
krb5_warn(context, ret, "%s", princ_name);
|
||||||
|
free(princ_name);
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,9 +143,11 @@ dump_krb4(krb5_context context, hdb_entry *ent, int fd)
|
|||||||
ret = krb5_524_conv_principal(context, modifier->principal,
|
ret = krb5_524_conv_principal(context, modifier->principal,
|
||||||
name, instance, realm);
|
name, instance, realm);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
krb5_unparse_name(context, modifier->principal, &princ_name);
|
ret = krb5_unparse_name(context, modifier->principal, &princ_name);
|
||||||
krb5_warn(context, ret, "%s", princ_name);
|
if (ret == 0) {
|
||||||
free(princ_name);
|
krb5_warn(context, ret, "%s", princ_name);
|
||||||
|
free(princ_name);
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
asprintf(&p, "%s %s %s\n", time2str(modifier->time),
|
asprintf(&p, "%s %s %s\n", time2str(modifier->time),
|
||||||
@@ -322,7 +326,9 @@ main(int argc, char **argv)
|
|||||||
principalname2krb5_principal(&c2, authent->cname, authent->crealm);
|
principalname2krb5_principal(&c2, authent->cname, authent->crealm);
|
||||||
if(!krb5_principal_compare(context, c1, c2)) {
|
if(!krb5_principal_compare(context, c1, c2)) {
|
||||||
char *s;
|
char *s;
|
||||||
krb5_unparse_name(context, c2, &s);
|
ret = krb5_unparse_name(context, c2, &s);
|
||||||
|
if (ret)
|
||||||
|
s = "unparseable name";
|
||||||
krb5_errx(context, 1, "Unauthorized connection from %s", s);
|
krb5_errx(context, 1, "Unauthorized connection from %s", s);
|
||||||
}
|
}
|
||||||
krb5_free_principal(context, c1);
|
krb5_free_principal(context, c1);
|
||||||
@@ -347,7 +353,7 @@ main(int argc, char **argv)
|
|||||||
ret = hdb_create(context, &db, tmp_db);
|
ret = hdb_create(context, &db, tmp_db);
|
||||||
if(ret)
|
if(ret)
|
||||||
krb5_err(context, 1, ret, "hdb_create(%s)", tmp_db);
|
krb5_err(context, 1, ret, "hdb_create(%s)", tmp_db);
|
||||||
ret = db->open(context, db, O_RDWR | O_CREAT | O_TRUNC, 0600);
|
ret = db->hdb_open(context, db, O_RDWR | O_CREAT | O_TRUNC, 0600);
|
||||||
if(ret)
|
if(ret)
|
||||||
krb5_err(context, 1, ret, "hdb_open(%s)", tmp_db);
|
krb5_err(context, 1, ret, "hdb_open(%s)", tmp_db);
|
||||||
}
|
}
|
||||||
@@ -395,10 +401,10 @@ main(int argc, char **argv)
|
|||||||
} else
|
} else
|
||||||
#endif /* KRB4 */
|
#endif /* KRB4 */
|
||||||
{
|
{
|
||||||
ret = db->rename(context, db, database);
|
ret = db->hdb_rename(context, db, database);
|
||||||
if(ret)
|
if(ret)
|
||||||
krb5_err(context, 1, ret, "db_rename");
|
krb5_err(context, 1, ret, "db_rename");
|
||||||
ret = db->close(context, db);
|
ret = db->hdb_close(context, db);
|
||||||
if(ret)
|
if(ret)
|
||||||
krb5_err(context, 1, ret, "db_close");
|
krb5_err(context, 1, ret, "db_close");
|
||||||
}
|
}
|
||||||
@@ -419,10 +425,12 @@ main(int argc, char **argv)
|
|||||||
else
|
else
|
||||||
#endif /* KRB4 */
|
#endif /* KRB4 */
|
||||||
{
|
{
|
||||||
ret = db->store(context, db, 0, &entry);
|
ret = db->hdb_store(context, db, 0, &entry);
|
||||||
if(ret == HDB_ERR_EXISTS) {
|
if(ret == HDB_ERR_EXISTS) {
|
||||||
char *s;
|
char *s;
|
||||||
krb5_unparse_name(context, entry.principal, &s);
|
ret = krb5_unparse_name(context, entry.principal, &s);
|
||||||
|
if (ret)
|
||||||
|
s = strdup("unparseable name");
|
||||||
krb5_warnx(context, "Entry exists: %s", s);
|
krb5_warnx(context, "Entry exists: %s", s);
|
||||||
free(s);
|
free(s);
|
||||||
} else if(ret)
|
} else if(ret)
|
||||||
|
@@ -50,14 +50,14 @@ db_fetch(krb5_principal principal, hdb_entry **h)
|
|||||||
ent->principal = principal;
|
ent->principal = principal;
|
||||||
|
|
||||||
for(i = 0; i < num_db; i++) {
|
for(i = 0; i < num_db; i++) {
|
||||||
ret = db[i]->open(context, db[i], O_RDONLY, 0);
|
ret = db[i]->hdb_open(context, db[i], O_RDONLY, 0);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
kdc_log(0, "Failed to open database: %s",
|
kdc_log(0, "Failed to open database: %s",
|
||||||
krb5_get_err_text(context, ret));
|
krb5_get_err_text(context, ret));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
ret = db[i]->fetch(context, db[i], HDB_F_DECRYPT, ent);
|
ret = db[i]->hdb_fetch(context, db[i], HDB_F_DECRYPT, ent);
|
||||||
db[i]->close(context, db[i]);
|
db[i]->hdb_close(context, db[i]);
|
||||||
if(ret == 0) {
|
if(ret == 0) {
|
||||||
*h = ent;
|
*h = ent;
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -81,7 +81,7 @@ _hdb_fetch(krb5_context context, HDB *db, unsigned flags, hdb_entry *entry)
|
|||||||
int code;
|
int code;
|
||||||
|
|
||||||
hdb_principal2key(context, entry->principal, &key);
|
hdb_principal2key(context, entry->principal, &key);
|
||||||
code = db->_get(context, db, key, &value);
|
code = db->hdb__get(context, db, key, &value);
|
||||||
krb5_data_free(&key);
|
krb5_data_free(&key);
|
||||||
if(code)
|
if(code)
|
||||||
return code;
|
return code;
|
||||||
@@ -89,7 +89,7 @@ _hdb_fetch(krb5_context context, HDB *db, unsigned flags, hdb_entry *entry)
|
|||||||
krb5_data_free(&value);
|
krb5_data_free(&value);
|
||||||
if (code)
|
if (code)
|
||||||
return code;
|
return code;
|
||||||
if (db->master_key_set && (flags & HDB_F_DECRYPT)) {
|
if (db->hdb_master_key_set && (flags & HDB_F_DECRYPT)) {
|
||||||
code = hdb_unseal_keys (context, db, entry);
|
code = hdb_unseal_keys (context, db, entry);
|
||||||
if (code)
|
if (code)
|
||||||
hdb_free_entry(context, entry);
|
hdb_free_entry(context, entry);
|
||||||
@@ -123,7 +123,7 @@ _hdb_store(krb5_context context, HDB *db, unsigned flags, hdb_entry *entry)
|
|||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
hdb_entry2value(context, entry, &value);
|
hdb_entry2value(context, entry, &value);
|
||||||
code = db->_put(context, db, flags & HDB_F_REPLACE, key, value);
|
code = db->hdb__put(context, db, flags & HDB_F_REPLACE, key, value);
|
||||||
krb5_data_free(&value);
|
krb5_data_free(&value);
|
||||||
krb5_data_free(&key);
|
krb5_data_free(&key);
|
||||||
return code;
|
return code;
|
||||||
@@ -136,7 +136,7 @@ _hdb_remove(krb5_context context, HDB *db, hdb_entry *entry)
|
|||||||
int code;
|
int code;
|
||||||
|
|
||||||
hdb_principal2key(context, entry->principal, &key);
|
hdb_principal2key(context, entry->principal, &key);
|
||||||
code = db->_del(context, db, key);
|
code = db->hdb__del(context, db, key);
|
||||||
krb5_data_free(&key);
|
krb5_data_free(&key);
|
||||||
return code;
|
return code;
|
||||||
}
|
}
|
||||||
|
@@ -81,7 +81,7 @@ update_keytypes(krb5_context context, HDB *db, hdb_entry *entry, void *data)
|
|||||||
save_val = entry->keys.val;
|
save_val = entry->keys.val;
|
||||||
entry->keys.len = n;
|
entry->keys.len = n;
|
||||||
entry->keys.val = k;
|
entry->keys.val = k;
|
||||||
ret = new->store(context, new, HDB_F_REPLACE, entry);
|
ret = new->hdb_store(context, new, HDB_F_REPLACE, entry);
|
||||||
entry->keys.len = save_len;
|
entry->keys.len = save_len;
|
||||||
entry->keys.val = save_val;
|
entry->keys.val = save_val;
|
||||||
for(i = 0; i < n; i++)
|
for(i = 0; i < n; i++)
|
||||||
@@ -94,14 +94,14 @@ static krb5_error_code
|
|||||||
update_version2(krb5_context context, HDB *db, hdb_entry *entry, void *data)
|
update_version2(krb5_context context, HDB *db, hdb_entry *entry, void *data)
|
||||||
{
|
{
|
||||||
HDB *new = data;
|
HDB *new = data;
|
||||||
if(!db->master_key_set) {
|
if(!db->hdb_master_key_set) {
|
||||||
int i;
|
int i;
|
||||||
for(i = 0; i < entry->keys.len; i++) {
|
for(i = 0; i < entry->keys.len; i++) {
|
||||||
free(entry->keys.val[i].mkvno);
|
free(entry->keys.val[i].mkvno);
|
||||||
entry->keys.val[i].mkvno = NULL;
|
entry->keys.val[i].mkvno = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
new->store(context, new, HDB_F_REPLACE, entry);
|
new->hdb_store(context, new, HDB_F_REPLACE, entry);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,7 +169,7 @@ main(int argc, char **argv)
|
|||||||
if (ret)
|
if (ret)
|
||||||
krb5_err(context, 1, ret, "hdb_set_master_keyfile");
|
krb5_err(context, 1, ret, "hdb_set_master_keyfile");
|
||||||
}
|
}
|
||||||
ret = db->open(context, db, O_RDONLY, 0);
|
ret = db->hdb_open(context, db, O_RDONLY, 0);
|
||||||
if(ret == HDB_ERR_BADVERSION) {
|
if(ret == HDB_ERR_BADVERSION) {
|
||||||
krb5_data tag;
|
krb5_data tag;
|
||||||
krb5_data version;
|
krb5_data version;
|
||||||
@@ -177,7 +177,7 @@ main(int argc, char **argv)
|
|||||||
unsigned ver;
|
unsigned ver;
|
||||||
tag.data = HDB_DB_FORMAT_ENTRY;
|
tag.data = HDB_DB_FORMAT_ENTRY;
|
||||||
tag.length = strlen(tag.data);
|
tag.length = strlen(tag.data);
|
||||||
ret = (*db->_get)(context, db, tag, &version);
|
ret = (*db->hdb__get)(context, db, tag, &version);
|
||||||
if(ret)
|
if(ret)
|
||||||
krb5_errx(context, 1, "database is wrong version, "
|
krb5_errx(context, 1, "database is wrong version, "
|
||||||
"but couldn't find version key (%s)",
|
"but couldn't find version key (%s)",
|
||||||
@@ -197,7 +197,7 @@ main(int argc, char **argv)
|
|||||||
ver, HDB_DB_FORMAT);
|
ver, HDB_DB_FORMAT);
|
||||||
} else if(ret)
|
} else if(ret)
|
||||||
krb5_err(context, 1, ret, "%s", old_database);
|
krb5_err(context, 1, ret, "%s", old_database);
|
||||||
ret = new->open(context, new, O_CREAT|O_EXCL|O_RDWR, 0600);
|
ret = new->hdb_open(context, new, O_CREAT|O_EXCL|O_RDWR, 0600);
|
||||||
if(ret)
|
if(ret)
|
||||||
krb5_err(context, 1, ret, "%s", new_database);
|
krb5_err(context, 1, ret, "%s", new_database);
|
||||||
if(update_version)
|
if(update_version)
|
||||||
@@ -206,8 +206,8 @@ main(int argc, char **argv)
|
|||||||
ret = hdb_foreach(context, db, 0, update_keytypes, new);
|
ret = hdb_foreach(context, db, 0, update_keytypes, new);
|
||||||
if(ret != 0)
|
if(ret != 0)
|
||||||
krb5_err(context, 1, ret, "hdb_foreach");
|
krb5_err(context, 1, ret, "hdb_foreach");
|
||||||
db->close(context, db);
|
db->hdb_close(context, db);
|
||||||
new->close(context, new);
|
new->hdb_close(context, new);
|
||||||
krb5_warnx(context, "wrote converted database to `%s'", new_database);
|
krb5_warnx(context, "wrote converted database to `%s'", new_database);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
90
lib/hdb/db.c
90
lib/hdb/db.c
@@ -46,7 +46,7 @@ RCSID("$Id$");
|
|||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
DB_close(krb5_context context, HDB *db)
|
DB_close(krb5_context context, HDB *db)
|
||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->hdb_db;
|
||||||
d->close(d);
|
d->close(d);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -57,7 +57,7 @@ DB_destroy(krb5_context context, HDB *db)
|
|||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
|
|
||||||
ret = hdb_clear_master_key (context, db);
|
ret = hdb_clear_master_key (context, db);
|
||||||
free(db->name);
|
free(db->hdb_name);
|
||||||
free(db);
|
free(db);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -65,7 +65,7 @@ DB_destroy(krb5_context context, HDB *db)
|
|||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
DB_lock(krb5_context context, HDB *db, int operation)
|
DB_lock(krb5_context context, HDB *db, int operation)
|
||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->hdb_db;
|
||||||
int fd = (*d->fd)(d);
|
int fd = (*d->fd)(d);
|
||||||
if(fd < 0)
|
if(fd < 0)
|
||||||
return HDB_ERR_CANT_LOCK_DB;
|
return HDB_ERR_CANT_LOCK_DB;
|
||||||
@@ -75,7 +75,7 @@ DB_lock(krb5_context context, HDB *db, int operation)
|
|||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
DB_unlock(krb5_context context, HDB *db)
|
DB_unlock(krb5_context context, HDB *db)
|
||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->hdb_db;
|
||||||
int fd = (*d->fd)(d);
|
int fd = (*d->fd)(d);
|
||||||
if(fd < 0)
|
if(fd < 0)
|
||||||
return HDB_ERR_CANT_LOCK_DB;
|
return HDB_ERR_CANT_LOCK_DB;
|
||||||
@@ -87,16 +87,16 @@ static krb5_error_code
|
|||||||
DB_seq(krb5_context context, HDB *db,
|
DB_seq(krb5_context context, HDB *db,
|
||||||
unsigned flags, hdb_entry *entry, int flag)
|
unsigned flags, hdb_entry *entry, int flag)
|
||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->hdb_db;
|
||||||
DBT key, value;
|
DBT key, value;
|
||||||
krb5_data key_data, data;
|
krb5_data key_data, data;
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
code = db->lock(context, db, HDB_RLOCK);
|
code = db->hdb_lock(context, db, HDB_RLOCK);
|
||||||
if(code == -1)
|
if(code == -1)
|
||||||
return HDB_ERR_DB_INUSE;
|
return HDB_ERR_DB_INUSE;
|
||||||
code = d->seq(d, &key, &value, flag);
|
code = d->seq(d, &key, &value, flag);
|
||||||
db->unlock(context, db); /* XXX check value */
|
db->hdb_unlock(context, db); /* XXX check value */
|
||||||
if(code == -1)
|
if(code == -1)
|
||||||
return errno;
|
return errno;
|
||||||
if(code == 1)
|
if(code == 1)
|
||||||
@@ -108,7 +108,7 @@ DB_seq(krb5_context context, HDB *db,
|
|||||||
data.length = value.size;
|
data.length = value.size;
|
||||||
if (hdb_value2entry(context, &data, entry))
|
if (hdb_value2entry(context, &data, entry))
|
||||||
return DB_seq(context, db, flags, entry, R_NEXT);
|
return DB_seq(context, db, flags, entry, R_NEXT);
|
||||||
if (db->master_key_set && (flags & HDB_F_DECRYPT)) {
|
if (db->hdb_master_key_set && (flags & HDB_F_DECRYPT)) {
|
||||||
code = hdb_unseal_keys (context, db, entry);
|
code = hdb_unseal_keys (context, db, entry);
|
||||||
if (code)
|
if (code)
|
||||||
hdb_free_entry (context, entry);
|
hdb_free_entry (context, entry);
|
||||||
@@ -146,7 +146,7 @@ DB_rename(krb5_context context, HDB *db, const char *new_name)
|
|||||||
int ret;
|
int ret;
|
||||||
char *old, *new;
|
char *old, *new;
|
||||||
|
|
||||||
asprintf(&old, "%s.db", db->name);
|
asprintf(&old, "%s.db", db->hdb_name);
|
||||||
asprintf(&new, "%s.db", new_name);
|
asprintf(&new, "%s.db", new_name);
|
||||||
ret = rename(old, new);
|
ret = rename(old, new);
|
||||||
free(old);
|
free(old);
|
||||||
@@ -154,25 +154,25 @@ DB_rename(krb5_context context, HDB *db, const char *new_name)
|
|||||||
if(ret)
|
if(ret)
|
||||||
return errno;
|
return errno;
|
||||||
|
|
||||||
free(db->name);
|
free(db->hdb_name);
|
||||||
db->name = strdup(new_name);
|
db->hdb_name = strdup(new_name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
DB__get(krb5_context context, HDB *db, krb5_data key, krb5_data *reply)
|
DB__get(krb5_context context, HDB *db, krb5_data key, krb5_data *reply)
|
||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->hdb_db;
|
||||||
DBT k, v;
|
DBT k, v;
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
k.data = key.data;
|
k.data = key.data;
|
||||||
k.size = key.length;
|
k.size = key.length;
|
||||||
code = db->lock(context, db, HDB_RLOCK);
|
code = db->hdb_lock(context, db, HDB_RLOCK);
|
||||||
if(code)
|
if(code)
|
||||||
return code;
|
return code;
|
||||||
code = d->get(d, &k, &v, 0);
|
code = d->get(d, &k, &v, 0);
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
if(code < 0)
|
if(code < 0)
|
||||||
return errno;
|
return errno;
|
||||||
if(code == 1)
|
if(code == 1)
|
||||||
@@ -186,7 +186,7 @@ static krb5_error_code
|
|||||||
DB__put(krb5_context context, HDB *db, int replace,
|
DB__put(krb5_context context, HDB *db, int replace,
|
||||||
krb5_data key, krb5_data value)
|
krb5_data key, krb5_data value)
|
||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->hdb_db;
|
||||||
DBT k, v;
|
DBT k, v;
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
@@ -194,11 +194,11 @@ DB__put(krb5_context context, HDB *db, int replace,
|
|||||||
k.size = key.length;
|
k.size = key.length;
|
||||||
v.data = value.data;
|
v.data = value.data;
|
||||||
v.size = value.length;
|
v.size = value.length;
|
||||||
code = db->lock(context, db, HDB_WLOCK);
|
code = db->hdb_lock(context, db, HDB_WLOCK);
|
||||||
if(code)
|
if(code)
|
||||||
return code;
|
return code;
|
||||||
code = d->put(d, &k, &v, replace ? 0 : R_NOOVERWRITE);
|
code = d->put(d, &k, &v, replace ? 0 : R_NOOVERWRITE);
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
if(code < 0)
|
if(code < 0)
|
||||||
return errno;
|
return errno;
|
||||||
if(code == 1)
|
if(code == 1)
|
||||||
@@ -209,16 +209,16 @@ DB__put(krb5_context context, HDB *db, int replace,
|
|||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
DB__del(krb5_context context, HDB *db, krb5_data key)
|
DB__del(krb5_context context, HDB *db, krb5_data key)
|
||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->hdb_db;
|
||||||
DBT k;
|
DBT k;
|
||||||
krb5_error_code code;
|
krb5_error_code code;
|
||||||
k.data = key.data;
|
k.data = key.data;
|
||||||
k.size = key.length;
|
k.size = key.length;
|
||||||
code = db->lock(context, db, HDB_WLOCK);
|
code = db->hdb_lock(context, db, HDB_WLOCK);
|
||||||
if(code)
|
if(code)
|
||||||
return code;
|
return code;
|
||||||
code = d->del(d, &k, 0);
|
code = d->del(d, &k, 0);
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
if(code == 1)
|
if(code == 1)
|
||||||
return HDB_ERR_NOENTRY;
|
return HDB_ERR_NOENTRY;
|
||||||
if(code < 0)
|
if(code < 0)
|
||||||
@@ -232,20 +232,20 @@ DB_open(krb5_context context, HDB *db, int flags, mode_t mode)
|
|||||||
char *fn;
|
char *fn;
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
|
|
||||||
asprintf(&fn, "%s.db", db->name);
|
asprintf(&fn, "%s.db", db->hdb_name);
|
||||||
if (fn == NULL) {
|
if (fn == NULL) {
|
||||||
krb5_set_error_string(context, "malloc: out of memory");
|
krb5_set_error_string(context, "malloc: out of memory");
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
db->db = dbopen(fn, flags, mode, DB_BTREE, NULL);
|
db->hdb_db = dbopen(fn, flags, mode, DB_BTREE, NULL);
|
||||||
free(fn);
|
free(fn);
|
||||||
/* try to open without .db extension */
|
/* try to open without .db extension */
|
||||||
if(db->db == NULL && errno == ENOENT)
|
if(db->hdb_db == NULL && errno == ENOENT)
|
||||||
db->db = dbopen(db->name, flags, mode, DB_BTREE, NULL);
|
db->hdb_db = dbopen(db->hdb_name, flags, mode, DB_BTREE, NULL);
|
||||||
if(db->db == NULL) {
|
if(db->hdb_db == NULL) {
|
||||||
ret = errno;
|
ret = errno;
|
||||||
krb5_set_error_string(context, "dbopen (%s): %s",
|
krb5_set_error_string(context, "dbopen (%s): %s",
|
||||||
db->name, strerror(ret));
|
db->hdb_name, strerror(ret));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
if((flags & O_ACCMODE) == O_RDONLY)
|
if((flags & O_ACCMODE) == O_RDONLY)
|
||||||
@@ -269,30 +269,30 @@ hdb_db_create(krb5_context context, HDB **db,
|
|||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*db)->db = NULL;
|
(*db)->hdb_db = NULL;
|
||||||
(*db)->name = strdup(filename);
|
(*db)->hdb_name = strdup(filename);
|
||||||
if ((*db)->name == NULL) {
|
if ((*db)->hdb_name == NULL) {
|
||||||
krb5_set_error_string(context, "malloc: out of memory");
|
krb5_set_error_string(context, "malloc: out of memory");
|
||||||
free(*db);
|
free(*db);
|
||||||
*db = NULL;
|
*db = NULL;
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
(*db)->master_key_set = 0;
|
(*db)->hdb_master_key_set = 0;
|
||||||
(*db)->openp = 0;
|
(*db)->hdb_openp = 0;
|
||||||
(*db)->open = DB_open;
|
(*db)->hdb_open = DB_open;
|
||||||
(*db)->close = DB_close;
|
(*db)->hdb_close = DB_close;
|
||||||
(*db)->fetch = _hdb_fetch;
|
(*db)->hdb_fetch = _hdb_fetch;
|
||||||
(*db)->store = _hdb_store;
|
(*db)->hdb_store = _hdb_store;
|
||||||
(*db)->remove = _hdb_remove;
|
(*db)->hdb_remove = _hdb_remove;
|
||||||
(*db)->firstkey = DB_firstkey;
|
(*db)->hdb_firstkey = DB_firstkey;
|
||||||
(*db)->nextkey= DB_nextkey;
|
(*db)->hdb_nextkey= DB_nextkey;
|
||||||
(*db)->lock = DB_lock;
|
(*db)->hdb_lock = DB_lock;
|
||||||
(*db)->unlock = DB_unlock;
|
(*db)->hdb_unlock = DB_unlock;
|
||||||
(*db)->rename = DB_rename;
|
(*db)->hdb_rename = DB_rename;
|
||||||
(*db)->_get = DB__get;
|
(*db)->hdb__get = DB__get;
|
||||||
(*db)->_put = DB__put;
|
(*db)->hdb__put = DB__put;
|
||||||
(*db)->_del = DB__del;
|
(*db)->hdb__del = DB__del;
|
||||||
(*db)->destroy = DB_destroy;
|
(*db)->hdb_destroy = DB_destroy;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -48,11 +48,11 @@ RCSID("$Id$");
|
|||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
DB_close(krb5_context context, HDB *db)
|
DB_close(krb5_context context, HDB *db)
|
||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->hdb_db;
|
||||||
DBC *dbcp = (DBC*)db->dbc;
|
DBC *dbcp = (DBC*)db->hdb_dbc;
|
||||||
|
|
||||||
dbcp->c_close(dbcp);
|
dbcp->c_close(dbcp);
|
||||||
db->dbc = 0;
|
db->hdb_dbc = 0;
|
||||||
d->close(d, 0);
|
d->close(d, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -63,7 +63,7 @@ DB_destroy(krb5_context context, HDB *db)
|
|||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
|
|
||||||
ret = hdb_clear_master_key (context, db);
|
ret = hdb_clear_master_key (context, db);
|
||||||
free(db->name);
|
free(db->hdb_name);
|
||||||
free(db);
|
free(db);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -71,7 +71,7 @@ DB_destroy(krb5_context context, HDB *db)
|
|||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
DB_lock(krb5_context context, HDB *db, int operation)
|
DB_lock(krb5_context context, HDB *db, int operation)
|
||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->hdb_db;
|
||||||
int fd;
|
int fd;
|
||||||
if ((*d->fd)(d, &fd))
|
if ((*d->fd)(d, &fd))
|
||||||
return HDB_ERR_CANT_LOCK_DB;
|
return HDB_ERR_CANT_LOCK_DB;
|
||||||
@@ -81,7 +81,7 @@ DB_lock(krb5_context context, HDB *db, int operation)
|
|||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
DB_unlock(krb5_context context, HDB *db)
|
DB_unlock(krb5_context context, HDB *db)
|
||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->hdb_db;
|
||||||
int fd;
|
int fd;
|
||||||
if ((*d->fd)(d, &fd))
|
if ((*d->fd)(d, &fd))
|
||||||
return HDB_ERR_CANT_LOCK_DB;
|
return HDB_ERR_CANT_LOCK_DB;
|
||||||
@@ -94,16 +94,16 @@ DB_seq(krb5_context context, HDB *db,
|
|||||||
unsigned flags, hdb_entry *entry, int flag)
|
unsigned flags, hdb_entry *entry, int flag)
|
||||||
{
|
{
|
||||||
DBT key, value;
|
DBT key, value;
|
||||||
DBC *dbcp = db->dbc;
|
DBC *dbcp = db->hdb_dbc;
|
||||||
krb5_data key_data, data;
|
krb5_data key_data, data;
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
memset(&key, 0, sizeof(DBT));
|
memset(&key, 0, sizeof(DBT));
|
||||||
memset(&value, 0, sizeof(DBT));
|
memset(&value, 0, sizeof(DBT));
|
||||||
if (db->lock(context, db, HDB_RLOCK))
|
if (db->hdb_lock(context, db, HDB_RLOCK))
|
||||||
return HDB_ERR_DB_INUSE;
|
return HDB_ERR_DB_INUSE;
|
||||||
code = dbcp->c_get(dbcp, &key, &value, flag);
|
code = dbcp->c_get(dbcp, &key, &value, flag);
|
||||||
db->unlock(context, db); /* XXX check value */
|
db->hdb_unlock(context, db); /* XXX check value */
|
||||||
if (code == DB_NOTFOUND)
|
if (code == DB_NOTFOUND)
|
||||||
return HDB_ERR_NOENTRY;
|
return HDB_ERR_NOENTRY;
|
||||||
if (code)
|
if (code)
|
||||||
@@ -115,7 +115,7 @@ DB_seq(krb5_context context, HDB *db,
|
|||||||
data.length = value.size;
|
data.length = value.size;
|
||||||
if (hdb_value2entry(context, &data, entry))
|
if (hdb_value2entry(context, &data, entry))
|
||||||
return DB_seq(context, db, flags, entry, DB_NEXT);
|
return DB_seq(context, db, flags, entry, DB_NEXT);
|
||||||
if (db->master_key_set && (flags & HDB_F_DECRYPT)) {
|
if (db->hdb_master_key_set && (flags & HDB_F_DECRYPT)) {
|
||||||
code = hdb_unseal_keys (context, db, entry);
|
code = hdb_unseal_keys (context, db, entry);
|
||||||
if (code)
|
if (code)
|
||||||
hdb_free_entry (context, entry);
|
hdb_free_entry (context, entry);
|
||||||
@@ -153,7 +153,7 @@ DB_rename(krb5_context context, HDB *db, const char *new_name)
|
|||||||
int ret;
|
int ret;
|
||||||
char *old, *new;
|
char *old, *new;
|
||||||
|
|
||||||
asprintf(&old, "%s.db", db->name);
|
asprintf(&old, "%s.db", db->hdb_name);
|
||||||
asprintf(&new, "%s.db", new_name);
|
asprintf(&new, "%s.db", new_name);
|
||||||
ret = rename(old, new);
|
ret = rename(old, new);
|
||||||
free(old);
|
free(old);
|
||||||
@@ -161,15 +161,15 @@ DB_rename(krb5_context context, HDB *db, const char *new_name)
|
|||||||
if(ret)
|
if(ret)
|
||||||
return errno;
|
return errno;
|
||||||
|
|
||||||
free(db->name);
|
free(db->hdb_name);
|
||||||
db->name = strdup(new_name);
|
db->hdb_name = strdup(new_name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
DB__get(krb5_context context, HDB *db, krb5_data key, krb5_data *reply)
|
DB__get(krb5_context context, HDB *db, krb5_data key, krb5_data *reply)
|
||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->hdb_db;
|
||||||
DBT k, v;
|
DBT k, v;
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
@@ -178,10 +178,10 @@ DB__get(krb5_context context, HDB *db, krb5_data key, krb5_data *reply)
|
|||||||
k.data = key.data;
|
k.data = key.data;
|
||||||
k.size = key.length;
|
k.size = key.length;
|
||||||
k.flags = 0;
|
k.flags = 0;
|
||||||
if ((code = db->lock(context, db, HDB_RLOCK)))
|
if ((code = db->hdb_lock(context, db, HDB_RLOCK)))
|
||||||
return code;
|
return code;
|
||||||
code = d->get(d, NULL, &k, &v, 0);
|
code = d->get(d, NULL, &k, &v, 0);
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
if(code == DB_NOTFOUND)
|
if(code == DB_NOTFOUND)
|
||||||
return HDB_ERR_NOENTRY;
|
return HDB_ERR_NOENTRY;
|
||||||
if(code)
|
if(code)
|
||||||
@@ -195,7 +195,7 @@ static krb5_error_code
|
|||||||
DB__put(krb5_context context, HDB *db, int replace,
|
DB__put(krb5_context context, HDB *db, int replace,
|
||||||
krb5_data key, krb5_data value)
|
krb5_data key, krb5_data value)
|
||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->hdb_db;
|
||||||
DBT k, v;
|
DBT k, v;
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
@@ -207,10 +207,10 @@ DB__put(krb5_context context, HDB *db, int replace,
|
|||||||
v.data = value.data;
|
v.data = value.data;
|
||||||
v.size = value.length;
|
v.size = value.length;
|
||||||
v.flags = 0;
|
v.flags = 0;
|
||||||
if ((code = db->lock(context, db, HDB_WLOCK)))
|
if ((code = db->hdb_lock(context, db, HDB_WLOCK)))
|
||||||
return code;
|
return code;
|
||||||
code = d->put(d, NULL, &k, &v, replace ? 0 : DB_NOOVERWRITE);
|
code = d->put(d, NULL, &k, &v, replace ? 0 : DB_NOOVERWRITE);
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
if(code == DB_KEYEXIST)
|
if(code == DB_KEYEXIST)
|
||||||
return HDB_ERR_EXISTS;
|
return HDB_ERR_EXISTS;
|
||||||
if(code)
|
if(code)
|
||||||
@@ -221,18 +221,18 @@ DB__put(krb5_context context, HDB *db, int replace,
|
|||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
DB__del(krb5_context context, HDB *db, krb5_data key)
|
DB__del(krb5_context context, HDB *db, krb5_data key)
|
||||||
{
|
{
|
||||||
DB *d = (DB*)db->db;
|
DB *d = (DB*)db->hdb_db;
|
||||||
DBT k;
|
DBT k;
|
||||||
krb5_error_code code;
|
krb5_error_code code;
|
||||||
memset(&k, 0, sizeof(DBT));
|
memset(&k, 0, sizeof(DBT));
|
||||||
k.data = key.data;
|
k.data = key.data;
|
||||||
k.size = key.length;
|
k.size = key.length;
|
||||||
k.flags = 0;
|
k.flags = 0;
|
||||||
code = db->lock(context, db, HDB_WLOCK);
|
code = db->hdb_lock(context, db, HDB_WLOCK);
|
||||||
if(code)
|
if(code)
|
||||||
return code;
|
return code;
|
||||||
code = d->del(d, NULL, &k, 0);
|
code = d->del(d, NULL, &k, 0);
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
if(code == DB_NOTFOUND)
|
if(code == DB_NOTFOUND)
|
||||||
return HDB_ERR_NOENTRY;
|
return HDB_ERR_NOENTRY;
|
||||||
if(code)
|
if(code)
|
||||||
@@ -260,34 +260,34 @@ DB_open(krb5_context context, HDB *db, int flags, mode_t mode)
|
|||||||
if (flags & O_TRUNC)
|
if (flags & O_TRUNC)
|
||||||
myflags |= DB_TRUNCATE;
|
myflags |= DB_TRUNCATE;
|
||||||
|
|
||||||
asprintf(&fn, "%s.db", db->name);
|
asprintf(&fn, "%s.db", db->hdb_name);
|
||||||
if (fn == NULL) {
|
if (fn == NULL) {
|
||||||
krb5_set_error_string(context, "malloc: out of memory");
|
krb5_set_error_string(context, "malloc: out of memory");
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
db_create(&d, NULL, 0);
|
db_create(&d, NULL, 0);
|
||||||
db->db = d;
|
db->hdb_db = d;
|
||||||
#if (DB_VERSION_MAJOR > 3) && (DB_VERSION_MINOR > 0)
|
#if (DB_VERSION_MAJOR > 3) && (DB_VERSION_MINOR > 0)
|
||||||
if ((ret = d->open(db->db, NULL, fn, NULL, DB_BTREE, myflags, mode))) {
|
if ((ret = d->open(db->hdb_db, NULL, fn, NULL, DB_BTREE, myflags, mode))) {
|
||||||
#else
|
#else
|
||||||
if ((ret = d->open(db->db, fn, NULL, DB_BTREE, myflags, mode))) {
|
if ((ret = d->open(db->hdb_db, fn, NULL, DB_BTREE, myflags, mode))) {
|
||||||
#endif
|
#endif
|
||||||
if(ret == ENOENT)
|
if(ret == ENOENT)
|
||||||
/* try to open without .db extension */
|
/* try to open without .db extension */
|
||||||
#if (DB_VERSION_MAJOR > 3) && (DB_VERSION_MINOR > 0)
|
#if (DB_VERSION_MAJOR > 3) && (DB_VERSION_MINOR > 0)
|
||||||
if (d->open(db->db, NULL, db->name, NULL, DB_BTREE, myflags, mode)) {
|
if (d->open(db->hdb_db, NULL, db->hdb_name, NULL, DB_BTREE, myflags, mode)) {
|
||||||
#else
|
#else
|
||||||
if (d->open(db->db, db->name, NULL, DB_BTREE, myflags, mode)) {
|
if (d->open(db->hdb_db, db->hdb_name, NULL, DB_BTREE, myflags, mode)) {
|
||||||
#endif
|
#endif
|
||||||
free(fn);
|
free(fn);
|
||||||
krb5_set_error_string(context, "opening %s: %s",
|
krb5_set_error_string(context, "opening %s: %s",
|
||||||
db->name, strerror(ret));
|
db->hdb_name, strerror(ret));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(fn);
|
free(fn);
|
||||||
|
|
||||||
ret = d->cursor(d, NULL, (DBC **)&db->dbc, 0);
|
ret = d->cursor(d, NULL, (DBC **)&db->hdb_dbc, 0);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
krb5_set_error_string(context, "d->cursor: %s", strerror(ret));
|
krb5_set_error_string(context, "d->cursor: %s", strerror(ret));
|
||||||
return ret;
|
return ret;
|
||||||
@@ -312,30 +312,30 @@ hdb_db_create(krb5_context context, HDB **db,
|
|||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*db)->db = NULL;
|
(*db)->hdb_db = NULL;
|
||||||
(*db)->name = strdup(filename);
|
(*db)->hdb_name = strdup(filename);
|
||||||
if ((*db)->name == NULL) {
|
if ((*db)->hdb_name == NULL) {
|
||||||
krb5_set_error_string(context, "malloc: out of memory");
|
krb5_set_error_string(context, "malloc: out of memory");
|
||||||
free(*db);
|
free(*db);
|
||||||
*db = NULL;
|
*db = NULL;
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
(*db)->master_key_set = 0;
|
(*db)->hdb_master_key_set = 0;
|
||||||
(*db)->openp = 0;
|
(*db)->hdb_openp = 0;
|
||||||
(*db)->open = DB_open;
|
(*db)->hdb_open = DB_open;
|
||||||
(*db)->close = DB_close;
|
(*db)->hdb_close = DB_close;
|
||||||
(*db)->fetch = _hdb_fetch;
|
(*db)->hdb_fetch = _hdb_fetch;
|
||||||
(*db)->store = _hdb_store;
|
(*db)->hdb_store = _hdb_store;
|
||||||
(*db)->remove = _hdb_remove;
|
(*db)->hdb_remove = _hdb_remove;
|
||||||
(*db)->firstkey = DB_firstkey;
|
(*db)->hdb_firstkey = DB_firstkey;
|
||||||
(*db)->nextkey= DB_nextkey;
|
(*db)->hdb_nextkey= DB_nextkey;
|
||||||
(*db)->lock = DB_lock;
|
(*db)->hdb_lock = DB_lock;
|
||||||
(*db)->unlock = DB_unlock;
|
(*db)->hdb_unlock = DB_unlock;
|
||||||
(*db)->rename = DB_rename;
|
(*db)->hdb_rename = DB_rename;
|
||||||
(*db)->_get = DB__get;
|
(*db)->hdb__get = DB__get;
|
||||||
(*db)->_put = DB__put;
|
(*db)->hdb__put = DB__put;
|
||||||
(*db)->_del = DB__del;
|
(*db)->hdb__del = DB__del;
|
||||||
(*db)->destroy = DB_destroy;
|
(*db)->hdb_destroy = DB_destroy;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* HAVE_DB3 */
|
#endif /* HAVE_DB3 */
|
||||||
|
@@ -216,7 +216,7 @@ LDAP_get_string_value(HDB * db, LDAPMessage * entry,
|
|||||||
char **vals;
|
char **vals;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
vals = ldap_get_values((LDAP *) db->db, entry, (char *) attribute);
|
vals = ldap_get_values((LDAP *) db->hdb_db, entry, (char *) attribute);
|
||||||
if (vals == NULL) {
|
if (vals == NULL) {
|
||||||
return HDB_ERR_NOENTRY;
|
return HDB_ERR_NOENTRY;
|
||||||
}
|
}
|
||||||
@@ -238,7 +238,7 @@ LDAP_get_integer_value(HDB * db, LDAPMessage * entry,
|
|||||||
{
|
{
|
||||||
char **vals;
|
char **vals;
|
||||||
|
|
||||||
vals = ldap_get_values((LDAP *) db->db, entry, (char *) attribute);
|
vals = ldap_get_values((LDAP *) db->hdb_db, entry, (char *) attribute);
|
||||||
if (vals == NULL) {
|
if (vals == NULL) {
|
||||||
return HDB_ERR_NOENTRY;
|
return HDB_ERR_NOENTRY;
|
||||||
}
|
}
|
||||||
@@ -520,14 +520,14 @@ LDAP_dn2principal(krb5_context context, HDB * db, const char *dn,
|
|||||||
char **values;
|
char **values;
|
||||||
LDAPMessage *res = NULL, *e;
|
LDAPMessage *res = NULL, *e;
|
||||||
|
|
||||||
rc = ldap_set_option((LDAP *) db->db, LDAP_OPT_SIZELIMIT, (const void *)&limit);
|
rc = ldap_set_option((LDAP *) db->hdb_db, LDAP_OPT_SIZELIMIT, (const void *)&limit);
|
||||||
if (rc != LDAP_SUCCESS) {
|
if (rc != LDAP_SUCCESS) {
|
||||||
krb5_set_error_string(context, "ldap_set_option: %s", ldap_err2string(rc));
|
krb5_set_error_string(context, "ldap_set_option: %s", ldap_err2string(rc));
|
||||||
ret = HDB_ERR_BADVERSION;
|
ret = HDB_ERR_BADVERSION;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ldap_search_s((LDAP *) db->db, dn, LDAP_SCOPE_BASE,
|
rc = ldap_search_s((LDAP *) db->hdb_db, dn, LDAP_SCOPE_BASE,
|
||||||
"(objectclass=krb5Principal)", krb5principal_attrs,
|
"(objectclass=krb5Principal)", krb5principal_attrs,
|
||||||
0, &res);
|
0, &res);
|
||||||
if (rc != LDAP_SUCCESS) {
|
if (rc != LDAP_SUCCESS) {
|
||||||
@@ -536,13 +536,13 @@ LDAP_dn2principal(krb5_context context, HDB * db, const char *dn,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
e = ldap_first_entry((LDAP *) db->db, res);
|
e = ldap_first_entry((LDAP *) db->hdb_db, res);
|
||||||
if (e == NULL) {
|
if (e == NULL) {
|
||||||
ret = HDB_ERR_NOENTRY;
|
ret = HDB_ERR_NOENTRY;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
values = ldap_get_values((LDAP *) db->db, e, "krb5PrincipalName");
|
values = ldap_get_values((LDAP *) db->hdb_db, e, "krb5PrincipalName");
|
||||||
if (values == NULL) {
|
if (values == NULL) {
|
||||||
ret = HDB_ERR_NOENTRY;
|
ret = HDB_ERR_NOENTRY;
|
||||||
goto out;
|
goto out;
|
||||||
@@ -578,14 +578,14 @@ LDAP__lookup_princ(krb5_context context, HDB * db, const char *princname,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ldap_set_option((LDAP *) db->db, LDAP_OPT_SIZELIMIT, (const void *)&limit);
|
rc = ldap_set_option((LDAP *) db->hdb_db, LDAP_OPT_SIZELIMIT, (const void *)&limit);
|
||||||
if (rc != LDAP_SUCCESS) {
|
if (rc != LDAP_SUCCESS) {
|
||||||
krb5_set_error_string(context, "ldap_set_option: %s", ldap_err2string(rc));
|
krb5_set_error_string(context, "ldap_set_option: %s", ldap_err2string(rc));
|
||||||
ret = HDB_ERR_BADVERSION;
|
ret = HDB_ERR_BADVERSION;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ldap_search_s((LDAP *) db->db, db->name, LDAP_SCOPE_ONELEVEL, filter,
|
rc = ldap_search_s((LDAP *) db->hdb_db, db->hdb_name, LDAP_SCOPE_ONELEVEL, filter,
|
||||||
krb5kdcentry_attrs, 0, msg);
|
krb5kdcentry_attrs, 0, msg);
|
||||||
if (rc != LDAP_SUCCESS) {
|
if (rc != LDAP_SUCCESS) {
|
||||||
krb5_set_error_string(context, "ldap_search_s: %s", ldap_err2string(rc));
|
krb5_set_error_string(context, "ldap_search_s: %s", ldap_err2string(rc));
|
||||||
@@ -655,7 +655,7 @@ LDAP_message2entry(krb5_context context, HDB * db, LDAPMessage * msg,
|
|||||||
ent->kvno = 0;
|
ent->kvno = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
keys = ldap_get_values_len((LDAP *) db->db, msg, "krb5Key");
|
keys = ldap_get_values_len((LDAP *) db->hdb_db, msg, "krb5Key");
|
||||||
if (keys != NULL) {
|
if (keys != NULL) {
|
||||||
int i;
|
int i;
|
||||||
size_t l;
|
size_t l;
|
||||||
@@ -795,7 +795,7 @@ LDAP_message2entry(krb5_context context, HDB * db, LDAPMessage * msg,
|
|||||||
ent->max_renew = NULL;
|
ent->max_renew = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
values = ldap_get_values((LDAP *) db->db, msg, "krb5KDCFlags");
|
values = ldap_get_values((LDAP *) db->hdb_db, msg, "krb5KDCFlags");
|
||||||
if (values != NULL) {
|
if (values != NULL) {
|
||||||
tmp = strtoul(values[0], (char **) NULL, 10);
|
tmp = strtoul(values[0], (char **) NULL, 10);
|
||||||
if (tmp == ULONG_MAX && errno == ERANGE) {
|
if (tmp == ULONG_MAX && errno == ERANGE) {
|
||||||
@@ -808,7 +808,7 @@ LDAP_message2entry(krb5_context context, HDB * db, LDAPMessage * msg,
|
|||||||
}
|
}
|
||||||
ent->flags = int2HDBFlags(tmp);
|
ent->flags = int2HDBFlags(tmp);
|
||||||
|
|
||||||
values = ldap_get_values((LDAP *) db->db, msg, "krb5EncryptionType");
|
values = ldap_get_values((LDAP *) db->hdb_db, msg, "krb5EncryptionType");
|
||||||
if (values != NULL) {
|
if (values != NULL) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -843,8 +843,8 @@ LDAP_message2entry(krb5_context context, HDB * db, LDAPMessage * msg,
|
|||||||
|
|
||||||
static krb5_error_code LDAP_close(krb5_context context, HDB * db)
|
static krb5_error_code LDAP_close(krb5_context context, HDB * db)
|
||||||
{
|
{
|
||||||
ldap_unbind_ext((LDAP *) db->db, NULL, NULL);
|
ldap_unbind_ext((LDAP *) db->hdb_db, NULL, NULL);
|
||||||
db->db = NULL;
|
db->hdb_db = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -867,13 +867,13 @@ LDAP_seq(krb5_context context, HDB * db, unsigned flags, hdb_entry * entry)
|
|||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
LDAPMessage *e;
|
LDAPMessage *e;
|
||||||
|
|
||||||
msgid = db->openp; /* BOGUS OVERLOADING */
|
msgid = db->hdb_openp; /* BOGUS OVERLOADING */
|
||||||
if (msgid < 0) {
|
if (msgid < 0) {
|
||||||
return HDB_ERR_NOENTRY;
|
return HDB_ERR_NOENTRY;
|
||||||
}
|
}
|
||||||
|
|
||||||
do {
|
do {
|
||||||
rc = ldap_result((LDAP *) db->db, msgid, LDAP_MSG_ONE, NULL, &e);
|
rc = ldap_result((LDAP *) db->hdb_db, msgid, LDAP_MSG_ONE, NULL, &e);
|
||||||
switch (rc) {
|
switch (rc) {
|
||||||
case LDAP_RES_SEARCH_ENTRY:
|
case LDAP_RES_SEARCH_ENTRY:
|
||||||
/* We have an entry. Parse it. */
|
/* We have an entry. Parse it. */
|
||||||
@@ -883,30 +883,30 @@ LDAP_seq(krb5_context context, HDB * db, unsigned flags, hdb_entry * entry)
|
|||||||
case LDAP_RES_SEARCH_RESULT:
|
case LDAP_RES_SEARCH_RESULT:
|
||||||
/* We're probably at the end of the results. If not, abandon. */
|
/* We're probably at the end of the results. If not, abandon. */
|
||||||
parserc =
|
parserc =
|
||||||
ldap_parse_result((LDAP *) db->db, e, NULL, NULL, NULL,
|
ldap_parse_result((LDAP *) db->hdb_db, e, NULL, NULL, NULL,
|
||||||
NULL, NULL, 1);
|
NULL, NULL, 1);
|
||||||
if (parserc != LDAP_SUCCESS
|
if (parserc != LDAP_SUCCESS
|
||||||
&& parserc != LDAP_MORE_RESULTS_TO_RETURN) {
|
&& parserc != LDAP_MORE_RESULTS_TO_RETURN) {
|
||||||
krb5_set_error_string(context, "ldap_parse_result: %s", ldap_err2string(parserc));
|
krb5_set_error_string(context, "ldap_parse_result: %s", ldap_err2string(parserc));
|
||||||
ldap_abandon((LDAP *) db->db, msgid);
|
ldap_abandon((LDAP *) db->hdb_db, msgid);
|
||||||
}
|
}
|
||||||
ret = HDB_ERR_NOENTRY;
|
ret = HDB_ERR_NOENTRY;
|
||||||
db->openp = -1;
|
db->hdb_openp = -1;
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
case -1:
|
case -1:
|
||||||
default:
|
default:
|
||||||
/* Some unspecified error (timeout?). Abandon. */
|
/* Some unspecified error (timeout?). Abandon. */
|
||||||
ldap_msgfree(e);
|
ldap_msgfree(e);
|
||||||
ldap_abandon((LDAP *) db->db, msgid);
|
ldap_abandon((LDAP *) db->hdb_db, msgid);
|
||||||
ret = HDB_ERR_NOENTRY;
|
ret = HDB_ERR_NOENTRY;
|
||||||
db->openp = -1;
|
db->hdb_openp = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} while (rc == LDAP_RES_SEARCH_REFERENCE);
|
} while (rc == LDAP_RES_SEARCH_REFERENCE);
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
if (db->master_key_set && (flags & HDB_F_DECRYPT)) {
|
if (db->hdb_master_key_set && (flags & HDB_F_DECRYPT)) {
|
||||||
ret = hdb_unseal_keys(context, db, entry);
|
ret = hdb_unseal_keys(context, db, entry);
|
||||||
if (ret)
|
if (ret)
|
||||||
hdb_free_entry(context,entry);
|
hdb_free_entry(context,entry);
|
||||||
@@ -924,20 +924,20 @@ LDAP_firstkey(krb5_context context, HDB * db, unsigned flags,
|
|||||||
|
|
||||||
(void) LDAP__connect(context, db);
|
(void) LDAP__connect(context, db);
|
||||||
|
|
||||||
rc = ldap_set_option((LDAP *) db->db, LDAP_OPT_SIZELIMIT, (const void *)&limit);
|
rc = ldap_set_option((LDAP *) db->hdb_db, LDAP_OPT_SIZELIMIT, (const void *)&limit);
|
||||||
if (rc != LDAP_SUCCESS) {
|
if (rc != LDAP_SUCCESS) {
|
||||||
krb5_set_error_string(context, "ldap_set_option: %s", ldap_err2string(rc));
|
krb5_set_error_string(context, "ldap_set_option: %s", ldap_err2string(rc));
|
||||||
return HDB_ERR_BADVERSION;
|
return HDB_ERR_BADVERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
msgid = ldap_search((LDAP *) db->db, db->name,
|
msgid = ldap_search((LDAP *) db->hdb_db, db->hdb_name,
|
||||||
LDAP_SCOPE_ONELEVEL, "(objectclass=krb5KDCEntry)",
|
LDAP_SCOPE_ONELEVEL, "(objectclass=krb5KDCEntry)",
|
||||||
krb5kdcentry_attrs, 0);
|
krb5kdcentry_attrs, 0);
|
||||||
if (msgid < 0) {
|
if (msgid < 0) {
|
||||||
return HDB_ERR_NOENTRY;
|
return HDB_ERR_NOENTRY;
|
||||||
}
|
}
|
||||||
|
|
||||||
db->openp = msgid;
|
db->hdb_openp = msgid;
|
||||||
|
|
||||||
return LDAP_seq(context, db, flags, entry);
|
return LDAP_seq(context, db, flags, entry);
|
||||||
}
|
}
|
||||||
@@ -966,43 +966,43 @@ static krb5_error_code LDAP__connect(krb5_context context, HDB * db)
|
|||||||
*/
|
*/
|
||||||
struct berval bv = { 0, "" };
|
struct berval bv = { 0, "" };
|
||||||
|
|
||||||
if (db->db != NULL) {
|
if (db->hdb_db != NULL) {
|
||||||
/* connection has been opened. ping server. */
|
/* connection has been opened. ping server. */
|
||||||
struct sockaddr_un addr;
|
struct sockaddr_un addr;
|
||||||
socklen_t len;
|
socklen_t len;
|
||||||
int sd;
|
int sd;
|
||||||
|
|
||||||
if (ldap_get_option((LDAP *) db->db, LDAP_OPT_DESC, &sd) == 0 &&
|
if (ldap_get_option((LDAP *) db->hdb_db, LDAP_OPT_DESC, &sd) == 0 &&
|
||||||
getpeername(sd, (struct sockaddr *) &addr, &len) < 0) {
|
getpeername(sd, (struct sockaddr *) &addr, &len) < 0) {
|
||||||
/* the other end has died. reopen. */
|
/* the other end has died. reopen. */
|
||||||
LDAP_close(context, db);
|
LDAP_close(context, db);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (db->db != NULL) {
|
if (db->hdb_db != NULL) {
|
||||||
/* server is UP */
|
/* server is UP */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ldap_initialize((LDAP **) & db->db, "ldapi:///");
|
rc = ldap_initialize((LDAP **) & db->hdb_db, "ldapi:///");
|
||||||
if (rc != LDAP_SUCCESS) {
|
if (rc != LDAP_SUCCESS) {
|
||||||
krb5_set_error_string(context, "ldap_initialize: %s", ldap_err2string(rc));
|
krb5_set_error_string(context, "ldap_initialize: %s", ldap_err2string(rc));
|
||||||
return HDB_ERR_NOENTRY;
|
return HDB_ERR_NOENTRY;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ldap_set_option((LDAP *) db->db, LDAP_OPT_PROTOCOL_VERSION, (const void *)&version);
|
rc = ldap_set_option((LDAP *) db->hdb_db, LDAP_OPT_PROTOCOL_VERSION, (const void *)&version);
|
||||||
if (rc != LDAP_SUCCESS) {
|
if (rc != LDAP_SUCCESS) {
|
||||||
krb5_set_error_string(context, "ldap_set_option: %s", ldap_err2string(rc));
|
krb5_set_error_string(context, "ldap_set_option: %s", ldap_err2string(rc));
|
||||||
ldap_unbind_ext((LDAP *) db->db, NULL, NULL);
|
ldap_unbind_ext((LDAP *) db->hdb_db, NULL, NULL);
|
||||||
db->db = NULL;
|
db->hdb_db = NULL;
|
||||||
return HDB_ERR_BADVERSION;
|
return HDB_ERR_BADVERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ldap_sasl_bind_s((LDAP *) db->db, NULL, "EXTERNAL", &bv, NULL, NULL, NULL);
|
rc = ldap_sasl_bind_s((LDAP *) db->hdb_db, NULL, "EXTERNAL", &bv, NULL, NULL, NULL);
|
||||||
if (rc != LDAP_SUCCESS) {
|
if (rc != LDAP_SUCCESS) {
|
||||||
krb5_set_error_string(context, "ldap_sasl_bind_s: %s", ldap_err2string(rc));
|
krb5_set_error_string(context, "ldap_sasl_bind_s: %s", ldap_err2string(rc));
|
||||||
ldap_unbind_ext((LDAP *) db->db, NULL, NULL);
|
ldap_unbind_ext((LDAP *) db->hdb_db, NULL, NULL);
|
||||||
db->db = NULL;
|
db->hdb_db = NULL;
|
||||||
return HDB_ERR_BADVERSION;
|
return HDB_ERR_BADVERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1040,7 +1040,7 @@ LDAP_fetch(krb5_context context, HDB * db, unsigned flags,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
e = ldap_first_entry((LDAP *) db->db, msg);
|
e = ldap_first_entry((LDAP *) db->hdb_db, msg);
|
||||||
if (e == NULL) {
|
if (e == NULL) {
|
||||||
ret = HDB_ERR_NOENTRY;
|
ret = HDB_ERR_NOENTRY;
|
||||||
goto out;
|
goto out;
|
||||||
@@ -1048,7 +1048,7 @@ LDAP_fetch(krb5_context context, HDB * db, unsigned flags,
|
|||||||
|
|
||||||
ret = LDAP_message2entry(context, db, e, entry);
|
ret = LDAP_message2entry(context, db, e, entry);
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
if (db->master_key_set && (flags & HDB_F_DECRYPT)) {
|
if (db->hdb_master_key_set && (flags & HDB_F_DECRYPT)) {
|
||||||
ret = hdb_unseal_keys(context, db, entry);
|
ret = hdb_unseal_keys(context, db, entry);
|
||||||
if (ret)
|
if (ret)
|
||||||
hdb_free_entry(context,entry);
|
hdb_free_entry(context,entry);
|
||||||
@@ -1079,7 +1079,7 @@ LDAP_store(krb5_context context, HDB * db, unsigned flags,
|
|||||||
|
|
||||||
ret = LDAP__lookup_princ(context, db, name, &msg);
|
ret = LDAP__lookup_princ(context, db, name, &msg);
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
e = ldap_first_entry((LDAP *) db->db, msg);
|
e = ldap_first_entry((LDAP *) db->hdb_db, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = hdb_seal_keys(context, db, entry);
|
ret = hdb_seal_keys(context, db, entry);
|
||||||
@@ -1120,8 +1120,8 @@ LDAP_store(krb5_context context, HDB * db, unsigned flags,
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (db->name != NULL) {
|
if (db->hdb_name != NULL) {
|
||||||
ret = asprintf(&dn, "cn=%s,%s", name, db->name);
|
ret = asprintf(&dn, "cn=%s,%s", name, db->hdb_name);
|
||||||
} else {
|
} else {
|
||||||
/* A bit bogus, but we don't have a search base */
|
/* A bit bogus, but we don't have a search base */
|
||||||
ret = asprintf(&dn, "cn=%s", name);
|
ret = asprintf(&dn, "cn=%s", name);
|
||||||
@@ -1133,7 +1133,7 @@ LDAP_store(krb5_context context, HDB * db, unsigned flags,
|
|||||||
}
|
}
|
||||||
} else if (flags & HDB_F_REPLACE) {
|
} else if (flags & HDB_F_REPLACE) {
|
||||||
/* Entry exists, and we're allowed to replace it. */
|
/* Entry exists, and we're allowed to replace it. */
|
||||||
dn = ldap_get_dn((LDAP *) db->db, e);
|
dn = ldap_get_dn((LDAP *) db->hdb_db, e);
|
||||||
} else {
|
} else {
|
||||||
/* Entry exists, but we're not allowed to replace it. Bail. */
|
/* Entry exists, but we're not allowed to replace it. Bail. */
|
||||||
ret = HDB_ERR_EXISTS;
|
ret = HDB_ERR_EXISTS;
|
||||||
@@ -1143,11 +1143,11 @@ LDAP_store(krb5_context context, HDB * db, unsigned flags,
|
|||||||
/* write entry into directory */
|
/* write entry into directory */
|
||||||
if (e == NULL) {
|
if (e == NULL) {
|
||||||
/* didn't exist before */
|
/* didn't exist before */
|
||||||
rc = ldap_add_s((LDAP *) db->db, dn, mods);
|
rc = ldap_add_s((LDAP *) db->hdb_db, dn, mods);
|
||||||
errfn = "ldap_add_s";
|
errfn = "ldap_add_s";
|
||||||
} else {
|
} else {
|
||||||
/* already existed, send deltas only */
|
/* already existed, send deltas only */
|
||||||
rc = ldap_modify_s((LDAP *) db->db, dn, mods);
|
rc = ldap_modify_s((LDAP *) db->hdb_db, dn, mods);
|
||||||
errfn = "ldap_modify_s";
|
errfn = "ldap_modify_s";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1193,26 +1193,26 @@ LDAP_remove(krb5_context context, HDB * db, hdb_entry * entry)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
e = ldap_first_entry((LDAP *) db->db, msg);
|
e = ldap_first_entry((LDAP *) db->hdb_db, msg);
|
||||||
if (e == NULL) {
|
if (e == NULL) {
|
||||||
ret = HDB_ERR_NOENTRY;
|
ret = HDB_ERR_NOENTRY;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
dn = ldap_get_dn((LDAP *) db->db, e);
|
dn = ldap_get_dn((LDAP *) db->hdb_db, e);
|
||||||
if (dn == NULL) {
|
if (dn == NULL) {
|
||||||
ret = HDB_ERR_NOENTRY;
|
ret = HDB_ERR_NOENTRY;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ldap_set_option((LDAP *) db->db, LDAP_OPT_SIZELIMIT, (const void *)&limit);
|
rc = ldap_set_option((LDAP *) db->hdb_db, LDAP_OPT_SIZELIMIT, (const void *)&limit);
|
||||||
if (rc != LDAP_SUCCESS) {
|
if (rc != LDAP_SUCCESS) {
|
||||||
krb5_set_error_string(context, "ldap_set_option: %s", ldap_err2string(rc));
|
krb5_set_error_string(context, "ldap_set_option: %s", ldap_err2string(rc));
|
||||||
ret = HDB_ERR_BADVERSION;
|
ret = HDB_ERR_BADVERSION;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = ldap_delete_s((LDAP *) db->db, dn);
|
rc = ldap_delete_s((LDAP *) db->hdb_db, dn);
|
||||||
if (rc == LDAP_SUCCESS) {
|
if (rc == LDAP_SUCCESS) {
|
||||||
ret = 0;
|
ret = 0;
|
||||||
} else {
|
} else {
|
||||||
@@ -1232,38 +1232,13 @@ LDAP_remove(krb5_context context, HDB * db, hdb_entry * entry)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static krb5_error_code
|
|
||||||
LDAP__get(krb5_context context, HDB * db, krb5_data key, krb5_data * reply)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "LDAP__get not implemented\n");
|
|
||||||
abort();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static krb5_error_code
|
|
||||||
LDAP__put(krb5_context context, HDB * db, int replace,
|
|
||||||
krb5_data key, krb5_data value)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "LDAP__put not implemented\n");
|
|
||||||
abort();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static krb5_error_code
|
|
||||||
LDAP__del(krb5_context context, HDB * db, krb5_data key)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "LDAP__del not implemented\n");
|
|
||||||
abort();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static krb5_error_code LDAP_destroy(krb5_context context, HDB * db)
|
static krb5_error_code LDAP_destroy(krb5_context context, HDB * db)
|
||||||
{
|
{
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
|
|
||||||
ret = hdb_clear_master_key(context, db);
|
ret = hdb_clear_master_key(context, db);
|
||||||
if (db->name != NULL) {
|
if (db->hdb_name != NULL) {
|
||||||
free(db->name);
|
free(db->hdb_name);
|
||||||
}
|
}
|
||||||
free(db);
|
free(db);
|
||||||
|
|
||||||
@@ -1278,8 +1253,9 @@ hdb_ldap_create(krb5_context context, HDB ** db, const char *arg)
|
|||||||
krb5_set_error_string(context, "malloc: out of memory");
|
krb5_set_error_string(context, "malloc: out of memory");
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
|
memset(*db, 0, sizeof(**db));
|
||||||
|
|
||||||
(*db)->db = NULL;
|
(*db)->hdb_db = NULL;
|
||||||
|
|
||||||
if (arg == NULL || arg[0] == '\0') {
|
if (arg == NULL || arg[0] == '\0') {
|
||||||
/*
|
/*
|
||||||
@@ -1289,10 +1265,10 @@ hdb_ldap_create(krb5_context context, HDB ** db, const char *arg)
|
|||||||
* writing entries because we don't know where to
|
* writing entries because we don't know where to
|
||||||
* put new principals.
|
* put new principals.
|
||||||
*/
|
*/
|
||||||
(*db)->name = NULL;
|
(*db)->hdb_name = NULL;
|
||||||
} else {
|
} else {
|
||||||
(*db)->name = strdup(arg);
|
(*db)->hdb_name = strdup(arg);
|
||||||
if ((*db)->name == NULL) {
|
if ((*db)->hdb_name == NULL) {
|
||||||
krb5_set_error_string(context, "strdup: out of memory");
|
krb5_set_error_string(context, "strdup: out of memory");
|
||||||
free(*db);
|
free(*db);
|
||||||
*db = NULL;
|
*db = NULL;
|
||||||
@@ -1300,23 +1276,22 @@ hdb_ldap_create(krb5_context context, HDB ** db, const char *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
(*db)->master_key_set = 0;
|
(*db)->hdb_master_key_set = 0;
|
||||||
(*db)->openp = 0;
|
(*db)->hdb_openp = 0;
|
||||||
(*db)->open = LDAP_open;
|
(*db)->hdb_open = LDAP_open;
|
||||||
(*db)->close = LDAP_close;
|
(*db)->hdb_close = LDAP_close;
|
||||||
(*db)->fetch = LDAP_fetch;
|
(*db)->hdb_fetch = LDAP_fetch;
|
||||||
(*db)->store = LDAP_store;
|
(*db)->hdb_store = LDAP_store;
|
||||||
(*db)->remove = LDAP_remove;
|
(*db)->hdb_remove = LDAP_remove;
|
||||||
(*db)->firstkey = LDAP_firstkey;
|
(*db)->hdb_firstkey = LDAP_firstkey;
|
||||||
(*db)->nextkey = LDAP_nextkey;
|
(*db)->hdb_nextkey = LDAP_nextkey;
|
||||||
(*db)->lock = LDAP_lock;
|
(*db)->hdb_lock = LDAP_lock;
|
||||||
(*db)->unlock = LDAP_unlock;
|
(*db)->hdb_unlock = LDAP_unlock;
|
||||||
(*db)->rename = LDAP_rename;
|
(*db)->hdb_rename = LDAP_rename;
|
||||||
/* can we ditch these? */
|
(*db)->hdb__get = NULL;
|
||||||
(*db)->_get = LDAP__get;
|
(*db)->hdb__put = NULL;
|
||||||
(*db)->_put = LDAP__put;
|
(*db)->hdb__del = NULL;
|
||||||
(*db)->_del = LDAP__del;
|
(*db)->hdb_destroy = LDAP_destroy;
|
||||||
(*db)->destroy = LDAP_destroy;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -153,12 +153,12 @@ hdb_foreach(krb5_context context,
|
|||||||
{
|
{
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
hdb_entry entry;
|
hdb_entry entry;
|
||||||
ret = db->firstkey(context, db, flags, &entry);
|
ret = db->hdb_firstkey(context, db, flags, &entry);
|
||||||
while(ret == 0){
|
while(ret == 0){
|
||||||
ret = (*func)(context, db, &entry, data);
|
ret = (*func)(context, db, &entry, data);
|
||||||
hdb_free_entry(context, &entry);
|
hdb_free_entry(context, &entry);
|
||||||
if(ret == 0)
|
if(ret == 0)
|
||||||
ret = db->nextkey(context, db, flags, &entry);
|
ret = db->hdb_nextkey(context, db, flags, &entry);
|
||||||
}
|
}
|
||||||
if(ret == HDB_ERR_NOENTRY)
|
if(ret == HDB_ERR_NOENTRY)
|
||||||
ret = 0;
|
ret = 0;
|
||||||
@@ -176,7 +176,7 @@ hdb_check_db_format(krb5_context context, HDB *db)
|
|||||||
|
|
||||||
tag.data = HDB_DB_FORMAT_ENTRY;
|
tag.data = HDB_DB_FORMAT_ENTRY;
|
||||||
tag.length = strlen(tag.data);
|
tag.length = strlen(tag.data);
|
||||||
ret = (*db->_get)(context, db, tag, &version);
|
ret = (*db->hdb__get)(context, db, tag, &version);
|
||||||
if(ret)
|
if(ret)
|
||||||
return ret;
|
return ret;
|
||||||
foo = sscanf(version.data, "%u", &ver);
|
foo = sscanf(version.data, "%u", &ver);
|
||||||
@@ -205,7 +205,7 @@ hdb_init_db(krb5_context context, HDB *db)
|
|||||||
snprintf(ver, sizeof(ver), "%u", HDB_DB_FORMAT);
|
snprintf(ver, sizeof(ver), "%u", HDB_DB_FORMAT);
|
||||||
version.data = ver;
|
version.data = ver;
|
||||||
version.length = strlen(version.data) + 1; /* zero terminated */
|
version.length = strlen(version.data) + 1; /* zero terminated */
|
||||||
ret = (*db->_put)(context, db, 0, tag, version);
|
ret = (*db->hdb__put)(context, db, 0, tag, version);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -52,30 +52,30 @@ enum hdb_lockop{ HDB_RLOCK, HDB_WLOCK };
|
|||||||
typedef struct hdb_master_key_data *hdb_master_key;
|
typedef struct hdb_master_key_data *hdb_master_key;
|
||||||
|
|
||||||
typedef struct HDB{
|
typedef struct HDB{
|
||||||
void *db;
|
void *hdb_db;
|
||||||
void *dbc;
|
void *hdb_dbc;
|
||||||
char *name;
|
char *hdb_name;
|
||||||
int master_key_set;
|
int hdb_master_key_set;
|
||||||
hdb_master_key master_key;
|
hdb_master_key hdb_master_key;
|
||||||
int openp;
|
int hdb_openp;
|
||||||
|
|
||||||
krb5_error_code (*open)(krb5_context, struct HDB*, int, mode_t);
|
krb5_error_code (*hdb_open)(krb5_context, struct HDB*, int, mode_t);
|
||||||
krb5_error_code (*close)(krb5_context, struct HDB*);
|
krb5_error_code (*hdb_close)(krb5_context, struct HDB*);
|
||||||
krb5_error_code (*fetch)(krb5_context, struct HDB*, unsigned, hdb_entry*);
|
krb5_error_code (*hdb_fetch)(krb5_context,struct HDB*,unsigned,hdb_entry*);
|
||||||
krb5_error_code (*store)(krb5_context, struct HDB*, unsigned, hdb_entry*);
|
krb5_error_code (*hdb_store)(krb5_context,struct HDB*,unsigned,hdb_entry*);
|
||||||
krb5_error_code (*remove)(krb5_context, struct HDB*, hdb_entry*);
|
krb5_error_code (*hdb_remove)(krb5_context, struct HDB*, hdb_entry*);
|
||||||
krb5_error_code (*firstkey)(krb5_context, struct HDB*,
|
krb5_error_code (*hdb_firstkey)(krb5_context, struct HDB*,
|
||||||
unsigned, hdb_entry*);
|
unsigned, hdb_entry*);
|
||||||
krb5_error_code (*nextkey)(krb5_context, struct HDB*,
|
krb5_error_code (*hdb_nextkey)(krb5_context, struct HDB*,
|
||||||
unsigned, hdb_entry*);
|
unsigned, hdb_entry*);
|
||||||
krb5_error_code (*lock)(krb5_context, struct HDB*, int operation);
|
krb5_error_code (*hdb_lock)(krb5_context, struct HDB*, int operation);
|
||||||
krb5_error_code (*unlock)(krb5_context, struct HDB*);
|
krb5_error_code (*hdb_unlock)(krb5_context, struct HDB*);
|
||||||
krb5_error_code (*rename)(krb5_context, struct HDB*, const char*);
|
krb5_error_code (*hdb_rename)(krb5_context, struct HDB*, const char*);
|
||||||
krb5_error_code (*_get)(krb5_context, struct HDB*, krb5_data, krb5_data*);
|
krb5_error_code (*hdb__get)(krb5_context,struct HDB*,krb5_data,krb5_data*);
|
||||||
krb5_error_code (*_put)(krb5_context, struct HDB*, int,
|
krb5_error_code (*hdb__put)(krb5_context, struct HDB*, int,
|
||||||
krb5_data, krb5_data);
|
krb5_data, krb5_data);
|
||||||
krb5_error_code (*_del)(krb5_context, struct HDB*, krb5_data);
|
krb5_error_code (*hdb__del)(krb5_context, struct HDB*, krb5_data);
|
||||||
krb5_error_code (*destroy)(krb5_context, struct HDB*);
|
krb5_error_code (*hdb_destroy)(krb5_context, struct HDB*);
|
||||||
}HDB;
|
}HDB;
|
||||||
|
|
||||||
#define HDB_INTERFACE_VERSION 1
|
#define HDB_INTERFACE_VERSION 1
|
||||||
|
@@ -209,19 +209,19 @@ hdb_get_entry(krb5_context context,
|
|||||||
return ret;
|
return ret;
|
||||||
ret = hdb_set_master_keyfile (context, db, mkey);
|
ret = hdb_set_master_keyfile (context, db, mkey);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
(*db->destroy)(context, db);
|
(*db->hdb_destroy)(context, db);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = (*db->open)(context, db, O_RDONLY, 0);
|
ret = (*db->hdb_open)(context, db, O_RDONLY, 0);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
(*db->destroy)(context, db);
|
(*db->hdb_destroy)(context, db);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
ent.principal = (krb5_principal)principal;
|
ent.principal = (krb5_principal)principal;
|
||||||
ret = (*db->fetch)(context, db, HDB_F_DECRYPT, &ent);
|
ret = (*db->hdb_fetch)(context, db, HDB_F_DECRYPT, &ent);
|
||||||
(*db->close)(context, db);
|
(*db->hdb_close)(context, db);
|
||||||
(*db->destroy)(context, db);
|
(*db->hdb_destroy)(context, db);
|
||||||
|
|
||||||
if(ret == HDB_ERR_NOENTRY)
|
if(ret == HDB_ERR_NOENTRY)
|
||||||
return KRB5_KT_NOTFOUND;
|
return KRB5_KT_NOTFOUND;
|
||||||
|
@@ -423,9 +423,9 @@ hdb_unseal_keys_mkey(krb5_context context, hdb_entry *ent, hdb_master_key mkey)
|
|||||||
krb5_error_code
|
krb5_error_code
|
||||||
hdb_unseal_keys(krb5_context context, HDB *db, hdb_entry *ent)
|
hdb_unseal_keys(krb5_context context, HDB *db, hdb_entry *ent)
|
||||||
{
|
{
|
||||||
if (db->master_key_set == 0)
|
if (db->hdb_master_key_set == 0)
|
||||||
return 0;
|
return 0;
|
||||||
return hdb_unseal_keys_mkey(context, ent, db->master_key);
|
return hdb_unseal_keys_mkey(context, ent, db->hdb_master_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
@@ -468,10 +468,10 @@ hdb_seal_keys_mkey(krb5_context context, hdb_entry *ent, hdb_master_key mkey)
|
|||||||
krb5_error_code
|
krb5_error_code
|
||||||
hdb_seal_keys(krb5_context context, HDB *db, hdb_entry *ent)
|
hdb_seal_keys(krb5_context context, HDB *db, hdb_entry *ent)
|
||||||
{
|
{
|
||||||
if (db->master_key_set == 0)
|
if (db->hdb_master_key_set == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return hdb_seal_keys_mkey(context, ent, db->master_key);
|
return hdb_seal_keys_mkey(context, ent, db->hdb_master_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
krb5_error_code
|
krb5_error_code
|
||||||
@@ -485,11 +485,11 @@ hdb_set_master_key (krb5_context context,
|
|||||||
ret = hdb_process_master_key(context, 0, key, 0, &mkey);
|
ret = hdb_process_master_key(context, 0, key, 0, &mkey);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
db->master_key = mkey;
|
db->hdb_master_key = mkey;
|
||||||
#if 0 /* XXX - why? */
|
#if 0 /* XXX - why? */
|
||||||
des_set_random_generator_seed(key.keyvalue.data);
|
des_set_random_generator_seed(key.keyvalue.data);
|
||||||
#endif
|
#endif
|
||||||
db->master_key_set = 1;
|
db->hdb_master_key_set = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -508,8 +508,8 @@ hdb_set_master_keyfile (krb5_context context,
|
|||||||
krb5_clear_error_string(context);
|
krb5_clear_error_string(context);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
db->master_key = key;
|
db->hdb_master_key = key;
|
||||||
db->master_key_set = 1;
|
db->hdb_master_key_set = 1;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -517,9 +517,9 @@ krb5_error_code
|
|||||||
hdb_clear_master_key (krb5_context context,
|
hdb_clear_master_key (krb5_context context,
|
||||||
HDB *db)
|
HDB *db)
|
||||||
{
|
{
|
||||||
if (db->master_key_set) {
|
if (db->hdb_master_key_set) {
|
||||||
hdb_free_master_key(context, db->master_key);
|
hdb_free_master_key(context, db->hdb_master_key);
|
||||||
db->master_key_set = 0;
|
db->hdb_master_key_set = 0;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
100
lib/hdb/ndbm.c
100
lib/hdb/ndbm.c
@@ -56,7 +56,7 @@ NDBM_destroy(krb5_context context, HDB *db)
|
|||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
|
|
||||||
ret = hdb_clear_master_key (context, db);
|
ret = hdb_clear_master_key (context, db);
|
||||||
free(db->name);
|
free(db->hdb_name);
|
||||||
free(db);
|
free(db);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -64,14 +64,14 @@ NDBM_destroy(krb5_context context, HDB *db)
|
|||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
NDBM_lock(krb5_context context, HDB *db, int operation)
|
NDBM_lock(krb5_context context, HDB *db, int operation)
|
||||||
{
|
{
|
||||||
struct ndbm_db *d = db->db;
|
struct ndbm_db *d = db->hdb_db;
|
||||||
return hdb_lock(d->lock_fd, operation);
|
return hdb_lock(d->lock_fd, operation);
|
||||||
}
|
}
|
||||||
|
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
NDBM_unlock(krb5_context context, HDB *db)
|
NDBM_unlock(krb5_context context, HDB *db)
|
||||||
{
|
{
|
||||||
struct ndbm_db *d = db->db;
|
struct ndbm_db *d = db->hdb_db;
|
||||||
return hdb_unlock(d->lock_fd);
|
return hdb_unlock(d->lock_fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ NDBM_seq(krb5_context context, HDB *db,
|
|||||||
unsigned flags, hdb_entry *entry, int first)
|
unsigned flags, hdb_entry *entry, int first)
|
||||||
|
|
||||||
{
|
{
|
||||||
struct ndbm_db *d = (struct ndbm_db *)db->db;
|
struct ndbm_db *d = (struct ndbm_db *)db->hdb_db;
|
||||||
datum key, value;
|
datum key, value;
|
||||||
krb5_data key_data, data;
|
krb5_data key_data, data;
|
||||||
krb5_error_code ret = 0;
|
krb5_error_code ret = 0;
|
||||||
@@ -93,15 +93,15 @@ NDBM_seq(krb5_context context, HDB *db,
|
|||||||
return HDB_ERR_NOENTRY;
|
return HDB_ERR_NOENTRY;
|
||||||
key_data.data = key.dptr;
|
key_data.data = key.dptr;
|
||||||
key_data.length = key.dsize;
|
key_data.length = key.dsize;
|
||||||
ret = db->lock(context, db, HDB_RLOCK);
|
ret = db->hdb_lock(context, db, HDB_RLOCK);
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
value = dbm_fetch(d->db, key);
|
value = dbm_fetch(d->db, key);
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
data.data = value.dptr;
|
data.data = value.dptr;
|
||||||
data.length = value.dsize;
|
data.length = value.dsize;
|
||||||
if(hdb_value2entry(context, &data, entry))
|
if(hdb_value2entry(context, &data, entry))
|
||||||
return NDBM_seq(context, db, flags, entry, 0);
|
return NDBM_seq(context, db, flags, entry, 0);
|
||||||
if (db->master_key_set && (flags & HDB_F_DECRYPT)) {
|
if (db->hdb_master_key_set && (flags & HDB_F_DECRYPT)) {
|
||||||
ret = hdb_unseal_keys (context, db, entry);
|
ret = hdb_unseal_keys (context, db, entry);
|
||||||
if (ret)
|
if (ret)
|
||||||
hdb_free_entry (context, entry);
|
hdb_free_entry (context, entry);
|
||||||
@@ -137,7 +137,7 @@ static krb5_error_code
|
|||||||
NDBM_rename(krb5_context context, HDB *db, const char *new_name)
|
NDBM_rename(krb5_context context, HDB *db, const char *new_name)
|
||||||
{
|
{
|
||||||
/* XXX this function will break */
|
/* XXX this function will break */
|
||||||
struct ndbm_db *d = db->db;
|
struct ndbm_db *d = db->hdb_db;
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
char *old_dir, *old_pag, *new_dir, *new_pag;
|
char *old_dir, *old_pag, *new_dir, *new_pag;
|
||||||
@@ -145,19 +145,19 @@ NDBM_rename(krb5_context context, HDB *db, const char *new_name)
|
|||||||
int lock_fd;
|
int lock_fd;
|
||||||
|
|
||||||
/* lock old and new databases */
|
/* lock old and new databases */
|
||||||
ret = db->lock(context, db, HDB_WLOCK);
|
ret = db->hdb_lock(context, db, HDB_WLOCK);
|
||||||
if(ret)
|
if(ret)
|
||||||
return ret;
|
return ret;
|
||||||
asprintf(&new_lock, "%s.lock", new_name);
|
asprintf(&new_lock, "%s.lock", new_name);
|
||||||
if(new_lock == NULL) {
|
if(new_lock == NULL) {
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
krb5_set_error_string(context, "malloc: out of memory");
|
krb5_set_error_string(context, "malloc: out of memory");
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
lock_fd = open(new_lock, O_RDWR | O_CREAT, 0600);
|
lock_fd = open(new_lock, O_RDWR | O_CREAT, 0600);
|
||||||
if(lock_fd < 0) {
|
if(lock_fd < 0) {
|
||||||
ret = errno;
|
ret = errno;
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
krb5_set_error_string(context, "open(%s): %s", new_lock,
|
krb5_set_error_string(context, "open(%s): %s", new_lock,
|
||||||
strerror(ret));
|
strerror(ret));
|
||||||
free(new_lock);
|
free(new_lock);
|
||||||
@@ -166,13 +166,13 @@ NDBM_rename(krb5_context context, HDB *db, const char *new_name)
|
|||||||
free(new_lock);
|
free(new_lock);
|
||||||
ret = hdb_lock(lock_fd, HDB_WLOCK);
|
ret = hdb_lock(lock_fd, HDB_WLOCK);
|
||||||
if(ret) {
|
if(ret) {
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
close(lock_fd);
|
close(lock_fd);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
asprintf(&old_dir, "%s.dir", db->name);
|
asprintf(&old_dir, "%s.dir", db->hdb_name);
|
||||||
asprintf(&old_pag, "%s.pag", db->name);
|
asprintf(&old_pag, "%s.pag", db->hdb_name);
|
||||||
asprintf(&new_dir, "%s.dir", new_name);
|
asprintf(&new_dir, "%s.dir", new_name);
|
||||||
asprintf(&new_pag, "%s.pag", new_name);
|
asprintf(&new_pag, "%s.pag", new_name);
|
||||||
|
|
||||||
@@ -182,7 +182,7 @@ NDBM_rename(krb5_context context, HDB *db, const char *new_name)
|
|||||||
free(new_dir);
|
free(new_dir);
|
||||||
free(new_pag);
|
free(new_pag);
|
||||||
hdb_unlock(lock_fd);
|
hdb_unlock(lock_fd);
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
|
|
||||||
if(ret) {
|
if(ret) {
|
||||||
ret = errno;
|
ret = errno;
|
||||||
@@ -194,25 +194,25 @@ NDBM_rename(krb5_context context, HDB *db, const char *new_name)
|
|||||||
close(d->lock_fd);
|
close(d->lock_fd);
|
||||||
d->lock_fd = lock_fd;
|
d->lock_fd = lock_fd;
|
||||||
|
|
||||||
free(db->name);
|
free(db->hdb_name);
|
||||||
db->name = strdup(new_name);
|
db->hdb_name = strdup(new_name);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
NDBM__get(krb5_context context, HDB *db, krb5_data key, krb5_data *reply)
|
NDBM__get(krb5_context context, HDB *db, krb5_data key, krb5_data *reply)
|
||||||
{
|
{
|
||||||
struct ndbm_db *d = (struct ndbm_db *)db->db;
|
struct ndbm_db *d = (struct ndbm_db *)db->hdb_db;
|
||||||
datum k, v;
|
datum k, v;
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
k.dptr = key.data;
|
k.dptr = key.data;
|
||||||
k.dsize = key.length;
|
k.dsize = key.length;
|
||||||
code = db->lock(context, db, HDB_RLOCK);
|
code = db->hdb_lock(context, db, HDB_RLOCK);
|
||||||
if(code)
|
if(code)
|
||||||
return code;
|
return code;
|
||||||
v = dbm_fetch(d->db, k);
|
v = dbm_fetch(d->db, k);
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
if(v.dptr == NULL)
|
if(v.dptr == NULL)
|
||||||
return HDB_ERR_NOENTRY;
|
return HDB_ERR_NOENTRY;
|
||||||
|
|
||||||
@@ -224,7 +224,7 @@ static krb5_error_code
|
|||||||
NDBM__put(krb5_context context, HDB *db, int replace,
|
NDBM__put(krb5_context context, HDB *db, int replace,
|
||||||
krb5_data key, krb5_data value)
|
krb5_data key, krb5_data value)
|
||||||
{
|
{
|
||||||
struct ndbm_db *d = (struct ndbm_db *)db->db;
|
struct ndbm_db *d = (struct ndbm_db *)db->hdb_db;
|
||||||
datum k, v;
|
datum k, v;
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
@@ -233,11 +233,11 @@ NDBM__put(krb5_context context, HDB *db, int replace,
|
|||||||
v.dptr = value.data;
|
v.dptr = value.data;
|
||||||
v.dsize = value.length;
|
v.dsize = value.length;
|
||||||
|
|
||||||
code = db->lock(context, db, HDB_WLOCK);
|
code = db->hdb_lock(context, db, HDB_WLOCK);
|
||||||
if(code)
|
if(code)
|
||||||
return code;
|
return code;
|
||||||
code = dbm_store(d->db, k, v, replace ? DBM_REPLACE : DBM_INSERT);
|
code = dbm_store(d->db, k, v, replace ? DBM_REPLACE : DBM_INSERT);
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
if(code == 1)
|
if(code == 1)
|
||||||
return HDB_ERR_EXISTS;
|
return HDB_ERR_EXISTS;
|
||||||
if (code < 0)
|
if (code < 0)
|
||||||
@@ -248,17 +248,17 @@ NDBM__put(krb5_context context, HDB *db, int replace,
|
|||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
NDBM__del(krb5_context context, HDB *db, krb5_data key)
|
NDBM__del(krb5_context context, HDB *db, krb5_data key)
|
||||||
{
|
{
|
||||||
struct ndbm_db *d = (struct ndbm_db *)db->db;
|
struct ndbm_db *d = (struct ndbm_db *)db->hdb_db;
|
||||||
datum k;
|
datum k;
|
||||||
int code;
|
int code;
|
||||||
krb5_error_code ret;
|
krb5_error_code ret;
|
||||||
|
|
||||||
k.dptr = key.data;
|
k.dptr = key.data;
|
||||||
k.dsize = key.length;
|
k.dsize = key.length;
|
||||||
ret = db->lock(context, db, HDB_WLOCK);
|
ret = db->hdb_lock(context, db, HDB_WLOCK);
|
||||||
if(ret) return ret;
|
if(ret) return ret;
|
||||||
code = dbm_delete(d->db, k);
|
code = dbm_delete(d->db, k);
|
||||||
db->unlock(context, db);
|
db->hdb_unlock(context, db);
|
||||||
if(code < 0)
|
if(code < 0)
|
||||||
return errno;
|
return errno;
|
||||||
return 0;
|
return 0;
|
||||||
@@ -275,18 +275,18 @@ NDBM_open(krb5_context context, HDB *db, int flags, mode_t mode)
|
|||||||
krb5_set_error_string(context, "malloc: out of memory");
|
krb5_set_error_string(context, "malloc: out of memory");
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
asprintf(&lock_file, "%s.lock", (char*)db->name);
|
asprintf(&lock_file, "%s.lock", (char*)db->hdb_name);
|
||||||
if(lock_file == NULL) {
|
if(lock_file == NULL) {
|
||||||
free(d);
|
free(d);
|
||||||
krb5_set_error_string(context, "malloc: out of memory");
|
krb5_set_error_string(context, "malloc: out of memory");
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
d->db = dbm_open((char*)db->name, flags, mode);
|
d->db = dbm_open((char*)db->hdb_name, flags, mode);
|
||||||
if(d->db == NULL){
|
if(d->db == NULL){
|
||||||
ret = errno;
|
ret = errno;
|
||||||
free(d);
|
free(d);
|
||||||
free(lock_file);
|
free(lock_file);
|
||||||
krb5_set_error_string(context, "dbm_open(%s): %s", db->name,
|
krb5_set_error_string(context, "dbm_open(%s): %s", db->hdb_name,
|
||||||
strerror(ret));
|
strerror(ret));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -301,7 +301,7 @@ NDBM_open(krb5_context context, HDB *db, int flags, mode_t mode)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
free(lock_file);
|
free(lock_file);
|
||||||
db->db = d;
|
db->hdb_db = d;
|
||||||
if((flags & O_ACCMODE) == O_RDONLY)
|
if((flags & O_ACCMODE) == O_RDONLY)
|
||||||
ret = hdb_check_db_format(context, db);
|
ret = hdb_check_db_format(context, db);
|
||||||
else
|
else
|
||||||
@@ -314,7 +314,7 @@ NDBM_open(krb5_context context, HDB *db, int flags, mode_t mode)
|
|||||||
static krb5_error_code
|
static krb5_error_code
|
||||||
NDBM_close(krb5_context context, HDB *db)
|
NDBM_close(krb5_context context, HDB *db)
|
||||||
{
|
{
|
||||||
struct ndbm_db *d = db->db;
|
struct ndbm_db *d = db->hdb_db;
|
||||||
dbm_close(d->db);
|
dbm_close(d->db);
|
||||||
close(d->lock_fd);
|
close(d->lock_fd);
|
||||||
free(d);
|
free(d);
|
||||||
@@ -331,30 +331,30 @@ hdb_ndbm_create(krb5_context context, HDB **db,
|
|||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*db)->db = NULL;
|
(*db)->hdb_db = NULL;
|
||||||
(*db)->name = strdup(filename);
|
(*db)->hdb_name = strdup(filename);
|
||||||
if ((*db)->name == NULL) {
|
if ((*db)->hdb_name == NULL) {
|
||||||
krb5_set_error_string(context, "malloc: out of memory");
|
krb5_set_error_string(context, "malloc: out of memory");
|
||||||
free(*db);
|
free(*db);
|
||||||
*db = NULL;
|
*db = NULL;
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
(*db)->master_key_set = 0;
|
(*db)->hdb_master_key_set = 0;
|
||||||
(*db)->openp = 0;
|
(*db)->hdb_openp = 0;
|
||||||
(*db)->open = NDBM_open;
|
(*db)->hdb_open = NDBM_open;
|
||||||
(*db)->close = NDBM_close;
|
(*db)->hdb_close = NDBM_close;
|
||||||
(*db)->fetch = _hdb_fetch;
|
(*db)->hdb_fetch = _hdb_fetch;
|
||||||
(*db)->store = _hdb_store;
|
(*db)->hdb_store = _hdb_store;
|
||||||
(*db)->remove = _hdb_remove;
|
(*db)->hdb_remove = _hdb_remove;
|
||||||
(*db)->firstkey = NDBM_firstkey;
|
(*db)->hdb_firstkey = NDBM_firstkey;
|
||||||
(*db)->nextkey= NDBM_nextkey;
|
(*db)->hdb_nextkey= NDBM_nextkey;
|
||||||
(*db)->lock = NDBM_lock;
|
(*db)->hdb_lock = NDBM_lock;
|
||||||
(*db)->unlock = NDBM_unlock;
|
(*db)->hdb_unlock = NDBM_unlock;
|
||||||
(*db)->rename = NDBM_rename;
|
(*db)->hdb_rename = NDBM_rename;
|
||||||
(*db)->_get = NDBM__get;
|
(*db)->hdb__get = NDBM__get;
|
||||||
(*db)->_put = NDBM__put;
|
(*db)->hdb__put = NDBM__put;
|
||||||
(*db)->_del = NDBM__del;
|
(*db)->hdb__del = NDBM__del;
|
||||||
(*db)->destroy = NDBM_destroy;
|
(*db)->hdb_destroy = NDBM_destroy;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -49,11 +49,11 @@ change(void *server_handle,
|
|||||||
int cmp = 1;
|
int cmp = 1;
|
||||||
|
|
||||||
ent.principal = princ;
|
ent.principal = princ;
|
||||||
ret = context->db->open(context->context, context->db, O_RDWR, 0);
|
ret = context->db->hdb_open(context->context, context->db, O_RDWR, 0);
|
||||||
if(ret)
|
if(ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = context->db->fetch(context->context, context->db,
|
ret = context->db->hdb_fetch(context->context, context->db,
|
||||||
0, &ent);
|
0, &ent);
|
||||||
if(ret == HDB_ERR_NOENTRY)
|
if(ret == HDB_ERR_NOENTRY)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
@@ -93,12 +93,12 @@ change(void *server_handle,
|
|||||||
KADM5_PRINCIPAL | KADM5_MOD_NAME | KADM5_MOD_TIME |
|
KADM5_PRINCIPAL | KADM5_MOD_NAME | KADM5_MOD_TIME |
|
||||||
KADM5_KEY_DATA | KADM5_KVNO | KADM5_PW_EXPIRATION);
|
KADM5_KEY_DATA | KADM5_KVNO | KADM5_PW_EXPIRATION);
|
||||||
|
|
||||||
ret = context->db->store(context->context, context->db,
|
ret = context->db->hdb_store(context->context, context->db,
|
||||||
HDB_F_REPLACE, &ent);
|
HDB_F_REPLACE, &ent);
|
||||||
out2:
|
out2:
|
||||||
hdb_free_entry(context->context, &ent);
|
hdb_free_entry(context->context, &ent);
|
||||||
out:
|
out:
|
||||||
context->db->close(context->context, context->db);
|
context->db->hdb_close(context->context, context->db);
|
||||||
return _kadm5_error_code(ret);
|
return _kadm5_error_code(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,10 +142,10 @@ kadm5_s_chpass_principal_with_key(void *server_handle,
|
|||||||
hdb_entry ent;
|
hdb_entry ent;
|
||||||
kadm5_ret_t ret;
|
kadm5_ret_t ret;
|
||||||
ent.principal = princ;
|
ent.principal = princ;
|
||||||
ret = context->db->open(context->context, context->db, O_RDWR, 0);
|
ret = context->db->hdb_open(context->context, context->db, O_RDWR, 0);
|
||||||
if(ret)
|
if(ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = context->db->fetch(context->context, context->db, 0, &ent);
|
ret = context->db->hdb_fetch(context->context, context->db, 0, &ent);
|
||||||
if(ret == HDB_ERR_NOENTRY)
|
if(ret == HDB_ERR_NOENTRY)
|
||||||
goto out;
|
goto out;
|
||||||
ret = _kadm5_set_keys2(context, &ent, n_key_data, key_data);
|
ret = _kadm5_set_keys2(context, &ent, n_key_data, key_data);
|
||||||
@@ -167,11 +167,11 @@ kadm5_s_chpass_principal_with_key(void *server_handle,
|
|||||||
KADM5_PRINCIPAL | KADM5_MOD_NAME | KADM5_MOD_TIME |
|
KADM5_PRINCIPAL | KADM5_MOD_NAME | KADM5_MOD_TIME |
|
||||||
KADM5_KEY_DATA | KADM5_KVNO | KADM5_PW_EXPIRATION);
|
KADM5_KEY_DATA | KADM5_KVNO | KADM5_PW_EXPIRATION);
|
||||||
|
|
||||||
ret = context->db->store(context->context, context->db,
|
ret = context->db->hdb_store(context->context, context->db,
|
||||||
HDB_F_REPLACE, &ent);
|
HDB_F_REPLACE, &ent);
|
||||||
out2:
|
out2:
|
||||||
hdb_free_entry(context->context, &ent);
|
hdb_free_entry(context->context, &ent);
|
||||||
out:
|
out:
|
||||||
context->db->close(context->context, context->db);
|
context->db->hdb_close(context->context, context->db);
|
||||||
return _kadm5_error_code(ret);
|
return _kadm5_error_code(ret);
|
||||||
}
|
}
|
||||||
|
@@ -130,11 +130,11 @@ kadm5_s_create_principal_with_key(void *server_handle,
|
|||||||
|
|
||||||
kadm5_log_create (context, &ent);
|
kadm5_log_create (context, &ent);
|
||||||
|
|
||||||
ret = context->db->open(context->context, context->db, O_RDWR, 0);
|
ret = context->db->hdb_open(context->context, context->db, O_RDWR, 0);
|
||||||
if(ret)
|
if(ret)
|
||||||
goto out;
|
goto out;
|
||||||
ret = context->db->store(context->context, context->db, 0, &ent);
|
ret = context->db->hdb_store(context->context, context->db, 0, &ent);
|
||||||
context->db->close(context->context, context->db);
|
context->db->hdb_close(context->context, context->db);
|
||||||
out:
|
out:
|
||||||
hdb_free_entry(context->context, &ent);
|
hdb_free_entry(context->context, &ent);
|
||||||
return _kadm5_error_code(ret);
|
return _kadm5_error_code(ret);
|
||||||
@@ -186,11 +186,11 @@ kadm5_s_create_principal(void *server_handle,
|
|||||||
|
|
||||||
kadm5_log_create (context, &ent);
|
kadm5_log_create (context, &ent);
|
||||||
|
|
||||||
ret = context->db->open(context->context, context->db, O_RDWR, 0);
|
ret = context->db->hdb_open(context->context, context->db, O_RDWR, 0);
|
||||||
if(ret)
|
if(ret)
|
||||||
goto out;
|
goto out;
|
||||||
ret = context->db->store(context->context, context->db, 0, &ent);
|
ret = context->db->hdb_store(context->context, context->db, 0, &ent);
|
||||||
context->db->close(context->context, context->db);
|
context->db->hdb_close(context->context, context->db);
|
||||||
out:
|
out:
|
||||||
hdb_free_entry(context->context, &ent);
|
hdb_free_entry(context->context, &ent);
|
||||||
return _kadm5_error_code(ret);
|
return _kadm5_error_code(ret);
|
||||||
|
@@ -43,13 +43,13 @@ kadm5_s_delete_principal(void *server_handle, krb5_principal princ)
|
|||||||
hdb_entry ent;
|
hdb_entry ent;
|
||||||
|
|
||||||
ent.principal = princ;
|
ent.principal = princ;
|
||||||
ret = context->db->open(context->context, context->db, O_RDWR, 0);
|
ret = context->db->hdb_open(context->context, context->db, O_RDWR, 0);
|
||||||
if(ret) {
|
if(ret) {
|
||||||
krb5_warn(context->context, ret, "opening database");
|
krb5_warn(context->context, ret, "opening database");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
ret = context->db->fetch(context->context, context->db,
|
ret = context->db->hdb_fetch(context->context, context->db,
|
||||||
HDB_F_DECRYPT, &ent);
|
HDB_F_DECRYPT, &ent);
|
||||||
if(ret == HDB_ERR_NOENTRY)
|
if(ret == HDB_ERR_NOENTRY)
|
||||||
goto out2;
|
goto out2;
|
||||||
if(ent.flags.immutable) {
|
if(ent.flags.immutable) {
|
||||||
@@ -63,10 +63,10 @@ kadm5_s_delete_principal(void *server_handle, krb5_principal princ)
|
|||||||
|
|
||||||
kadm5_log_delete (context, princ);
|
kadm5_log_delete (context, princ);
|
||||||
|
|
||||||
ret = context->db->remove(context->context, context->db, &ent);
|
ret = context->db->hdb_remove(context->context, context->db, &ent);
|
||||||
out:
|
out:
|
||||||
hdb_free_entry(context->context, &ent);
|
hdb_free_entry(context->context, &ent);
|
||||||
out2:
|
out2:
|
||||||
context->db->close(context->context, context->db);
|
context->db->hdb_close(context->context, context->db);
|
||||||
return _kadm5_error_code(ret);
|
return _kadm5_error_code(ret);
|
||||||
}
|
}
|
||||||
|
@@ -70,7 +70,7 @@ kadm5_s_destroy(void *server_handle)
|
|||||||
kadm5_server_context *context = server_handle;
|
kadm5_server_context *context = server_handle;
|
||||||
krb5_context kcontext = context->context;
|
krb5_context kcontext = context->context;
|
||||||
|
|
||||||
ret = context->db->destroy(kcontext, context->db);
|
ret = context->db->hdb_destroy(kcontext, context->db);
|
||||||
destroy_kadm5_log_context (&context->log_context);
|
destroy_kadm5_log_context (&context->log_context);
|
||||||
destroy_config (&context->config);
|
destroy_config (&context->config);
|
||||||
krb5_free_principal (kcontext, context->caller);
|
krb5_free_principal (kcontext, context->caller);
|
||||||
|
@@ -85,7 +85,7 @@ kadm5_s_get_principals(void *server_handle,
|
|||||||
struct foreach_data d;
|
struct foreach_data d;
|
||||||
kadm5_server_context *context = server_handle;
|
kadm5_server_context *context = server_handle;
|
||||||
kadm5_ret_t ret;
|
kadm5_ret_t ret;
|
||||||
ret = context->db->open(context->context, context->db, O_RDWR, 0);
|
ret = context->db->hdb_open(context->context, context->db, O_RDWR, 0);
|
||||||
if(ret) {
|
if(ret) {
|
||||||
krb5_warn(context->context, ret, "opening database");
|
krb5_warn(context->context, ret, "opening database");
|
||||||
return ret;
|
return ret;
|
||||||
@@ -100,7 +100,7 @@ kadm5_s_get_principals(void *server_handle,
|
|||||||
d.princs = NULL;
|
d.princs = NULL;
|
||||||
d.count = 0;
|
d.count = 0;
|
||||||
ret = hdb_foreach(context->context, context->db, 0, foreach, &d);
|
ret = hdb_foreach(context->context, context->db, 0, foreach, &d);
|
||||||
context->db->close(context->context, context->db);
|
context->db->hdb_close(context->context, context->db);
|
||||||
if(ret == 0)
|
if(ret == 0)
|
||||||
ret = add_princ(&d, NULL);
|
ret = add_princ(&d, NULL);
|
||||||
if(ret == 0){
|
if(ret == 0){
|
||||||
|
@@ -46,12 +46,12 @@ kadm5_s_get_principal(void *server_handle,
|
|||||||
hdb_entry ent;
|
hdb_entry ent;
|
||||||
|
|
||||||
ent.principal = princ;
|
ent.principal = princ;
|
||||||
ret = context->db->open(context->context, context->db, O_RDONLY, 0);
|
ret = context->db->hdb_open(context->context, context->db, O_RDONLY, 0);
|
||||||
if(ret)
|
if(ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = context->db->fetch(context->context, context->db,
|
ret = context->db->hdb_fetch(context->context, context->db,
|
||||||
HDB_F_DECRYPT, &ent);
|
HDB_F_DECRYPT, &ent);
|
||||||
context->db->close(context->context, context->db);
|
context->db->hdb_close(context->context, context->db);
|
||||||
if(ret)
|
if(ret)
|
||||||
return _kadm5_error_code(ret);
|
return _kadm5_error_code(ret);
|
||||||
|
|
||||||
|
@@ -295,7 +295,7 @@ send_complete (krb5_context context, slave *s,
|
|||||||
ret = hdb_create (context, &db, database);
|
ret = hdb_create (context, &db, database);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (context, 1, ret, "hdb_create: %s", database);
|
krb5_err (context, 1, ret, "hdb_create: %s", database);
|
||||||
ret = db->open (context, db, O_RDONLY, 0);
|
ret = db->hdb_open (context, db, O_RDONLY, 0);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (context, 1, ret, "db->open");
|
krb5_err (context, 1, ret, "db->open");
|
||||||
|
|
||||||
@@ -319,6 +319,9 @@ send_complete (krb5_context context, slave *s,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
(*db->hdb_close)(context, db);
|
||||||
|
(*db->hdb_destroy)(context, db);
|
||||||
|
|
||||||
_krb5_put_int (buf, NOW_YOU_HAVE, 4);
|
_krb5_put_int (buf, NOW_YOU_HAVE, 4);
|
||||||
_krb5_put_int (buf + 4, current_version, 4);
|
_krb5_put_int (buf + 4, current_version, 4);
|
||||||
data.length = 8;
|
data.length = 8;
|
||||||
|
@@ -209,15 +209,15 @@ receive (krb5_context context,
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = server_context->db->open(context,
|
ret = server_context->db->hdb_open(context,
|
||||||
server_context->db,
|
server_context->db,
|
||||||
O_RDWR | O_CREAT, 0600);
|
O_RDWR | O_CREAT, 0600);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (context, 1, ret, "db->open");
|
krb5_err (context, 1, ret, "db->open");
|
||||||
|
|
||||||
receive_loop (context, sp, server_context);
|
receive_loop (context, sp, server_context);
|
||||||
|
|
||||||
ret = server_context->db->close (context, server_context->db);
|
ret = server_context->db->hdb_close (context, server_context->db);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (context, 1, ret, "db->close");
|
krb5_err (context, 1, ret, "db->close");
|
||||||
}
|
}
|
||||||
@@ -256,7 +256,7 @@ receive_everything (krb5_context context, int fd,
|
|||||||
char *dbname;
|
char *dbname;
|
||||||
HDB *mydb;
|
HDB *mydb;
|
||||||
|
|
||||||
asprintf(&dbname, "%s-NEW", server_context->db->name);
|
asprintf(&dbname, "%s-NEW", server_context->db->hdb_name);
|
||||||
ret = hdb_create(context, &mydb, dbname);
|
ret = hdb_create(context, &mydb, dbname);
|
||||||
if(ret)
|
if(ret)
|
||||||
krb5_err(context,1, ret, "hdb_create");
|
krb5_err(context,1, ret, "hdb_create");
|
||||||
@@ -269,7 +269,7 @@ receive_everything (krb5_context context, int fd,
|
|||||||
|
|
||||||
/* I really want to use O_EXCL here, but given that I can't easily clean
|
/* I really want to use O_EXCL here, but given that I can't easily clean
|
||||||
up on error, I won't */
|
up on error, I won't */
|
||||||
ret = mydb->open(context, mydb, O_RDWR | O_CREAT | O_TRUNC, 0600);
|
ret = mydb->hdb_open(context, mydb, O_RDWR | O_CREAT | O_TRUNC, 0600);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (context, 1, ret, "db->open");
|
krb5_err (context, 1, ret, "db->open");
|
||||||
@@ -294,9 +294,9 @@ receive_everything (krb5_context context, int fd,
|
|||||||
ret = hdb_value2entry (context, &fake_data, &entry);
|
ret = hdb_value2entry (context, &fake_data, &entry);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (context, 1, ret, "hdb_value2entry");
|
krb5_err (context, 1, ret, "hdb_value2entry");
|
||||||
ret = mydb->store(server_context->context,
|
ret = mydb->hdb_store(server_context->context,
|
||||||
mydb,
|
mydb,
|
||||||
0, &entry);
|
0, &entry);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (context, 1, ret, "hdb_store");
|
krb5_err (context, 1, ret, "hdb_store");
|
||||||
|
|
||||||
@@ -325,15 +325,15 @@ receive_everything (krb5_context context, int fd,
|
|||||||
|
|
||||||
krb5_data_free (&data);
|
krb5_data_free (&data);
|
||||||
|
|
||||||
ret = mydb->rename (context, mydb, server_context->db->name);
|
ret = mydb->hdb_rename (context, mydb, server_context->db->hdb_name);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (context, 1, ret, "db->rename");
|
krb5_err (context, 1, ret, "db->rename");
|
||||||
|
|
||||||
ret = mydb->close (context, mydb);
|
ret = mydb->hdb_close (context, mydb);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (context, 1, ret, "db->close");
|
krb5_err (context, 1, ret, "db->close");
|
||||||
|
|
||||||
ret = mydb->destroy (context, mydb);
|
ret = mydb->hdb_destroy (context, mydb);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (context, 1, ret, "db->destroy");
|
krb5_err (context, 1, ret, "db->destroy");
|
||||||
}
|
}
|
||||||
|
@@ -276,7 +276,7 @@ kadm5_log_replay_create (kadm5_server_context *context,
|
|||||||
krb5_data_free(&data);
|
krb5_data_free(&data);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = context->db->store(context->context, context->db, 0, &ent);
|
ret = context->db->hdb_store(context->context, context->db, 0, &ent);
|
||||||
hdb_free_entry (context->context, &ent);
|
hdb_free_entry (context->context, &ent);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -341,7 +341,7 @@ kadm5_log_replay_delete (kadm5_server_context *context,
|
|||||||
|
|
||||||
krb5_ret_principal (sp, &ent.principal);
|
krb5_ret_principal (sp, &ent.principal);
|
||||||
|
|
||||||
ret = context->db->remove(context->context, context->db, &ent);
|
ret = context->db->hdb_remove(context->context, context->db, &ent);
|
||||||
krb5_free_principal (context->context, ent.principal);
|
krb5_free_principal (context->context, ent.principal);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -435,14 +435,15 @@ kadm5_log_replay_rename (kadm5_server_context *context,
|
|||||||
krb5_free_principal (context->context, source);
|
krb5_free_principal (context->context, source);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
ret = context->db->store (context->context, context->db, 0, &target_ent);
|
ret = context->db->hdb_store (context->context, context->db,
|
||||||
|
0, &target_ent);
|
||||||
hdb_free_entry (context->context, &target_ent);
|
hdb_free_entry (context->context, &target_ent);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
krb5_free_principal (context->context, source);
|
krb5_free_principal (context->context, source);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
source_ent.principal = source;
|
source_ent.principal = source;
|
||||||
ret = context->db->remove (context->context, context->db, &source_ent);
|
ret = context->db->hdb_remove (context->context, context->db, &source_ent);
|
||||||
krb5_free_principal (context->context, source);
|
krb5_free_principal (context->context, source);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -525,8 +526,8 @@ kadm5_log_replay_modify (kadm5_server_context *context,
|
|||||||
return ret;
|
return ret;
|
||||||
ent.principal = log_ent.principal;
|
ent.principal = log_ent.principal;
|
||||||
log_ent.principal = NULL;
|
log_ent.principal = NULL;
|
||||||
ret = context->db->fetch(context->context, context->db,
|
ret = context->db->hdb_fetch(context->context, context->db,
|
||||||
HDB_F_DECRYPT, &ent);
|
HDB_F_DECRYPT, &ent);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
if (mask & KADM5_PRINC_EXPIRE_TIME) {
|
if (mask & KADM5_PRINC_EXPIRE_TIME) {
|
||||||
@@ -618,8 +619,8 @@ kadm5_log_replay_modify (kadm5_server_context *context,
|
|||||||
copy_Key(&log_ent.keys.val[i],
|
copy_Key(&log_ent.keys.val[i],
|
||||||
&ent.keys.val[i]);
|
&ent.keys.val[i]);
|
||||||
}
|
}
|
||||||
ret = context->db->store(context->context, context->db,
|
ret = context->db->hdb_store(context->context, context->db,
|
||||||
HDB_F_REPLACE, &ent);
|
HDB_F_REPLACE, &ent);
|
||||||
hdb_free_entry (context->context, &ent);
|
hdb_free_entry (context->context, &ent);
|
||||||
hdb_free_entry (context->context, &log_ent);
|
hdb_free_entry (context->context, &log_ent);
|
||||||
return ret;
|
return ret;
|
||||||
|
@@ -50,10 +50,10 @@ modify_principal(void *server_handle,
|
|||||||
return KADM5_UNK_POLICY;
|
return KADM5_UNK_POLICY;
|
||||||
|
|
||||||
ent.principal = princ->principal;
|
ent.principal = princ->principal;
|
||||||
ret = context->db->open(context->context, context->db, O_RDWR, 0);
|
ret = context->db->hdb_open(context->context, context->db, O_RDWR, 0);
|
||||||
if(ret)
|
if(ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = context->db->fetch(context->context, context->db, 0, &ent);
|
ret = context->db->hdb_fetch(context->context, context->db, 0, &ent);
|
||||||
if(ret)
|
if(ret)
|
||||||
goto out;
|
goto out;
|
||||||
ret = _kadm5_setup_entry(context, &ent, mask, princ, mask, NULL, 0);
|
ret = _kadm5_setup_entry(context, &ent, mask, princ, mask, NULL, 0);
|
||||||
@@ -71,12 +71,12 @@ modify_principal(void *server_handle,
|
|||||||
&ent,
|
&ent,
|
||||||
mask | KADM5_MOD_NAME | KADM5_MOD_TIME);
|
mask | KADM5_MOD_NAME | KADM5_MOD_TIME);
|
||||||
|
|
||||||
ret = context->db->store(context->context, context->db,
|
ret = context->db->hdb_store(context->context, context->db,
|
||||||
HDB_F_REPLACE, &ent);
|
HDB_F_REPLACE, &ent);
|
||||||
out2:
|
out2:
|
||||||
hdb_free_entry(context->context, &ent);
|
hdb_free_entry(context->context, &ent);
|
||||||
out:
|
out:
|
||||||
context->db->close(context->context, context->db);
|
context->db->hdb_close(context->context, context->db);
|
||||||
return _kadm5_error_code(ret);
|
return _kadm5_error_code(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -51,10 +51,10 @@ kadm5_s_randkey_principal(void *server_handle,
|
|||||||
kadm5_ret_t ret;
|
kadm5_ret_t ret;
|
||||||
|
|
||||||
ent.principal = princ;
|
ent.principal = princ;
|
||||||
ret = context->db->open(context->context, context->db, O_RDWR, 0);
|
ret = context->db->hdb_open(context->context, context->db, O_RDWR, 0);
|
||||||
if(ret)
|
if(ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = context->db->fetch(context->context, context->db, 0, &ent);
|
ret = context->db->hdb_fetch(context->context, context->db, 0, &ent);
|
||||||
if(ret)
|
if(ret)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
@@ -81,8 +81,8 @@ kadm5_s_randkey_principal(void *server_handle,
|
|||||||
KADM5_PRINCIPAL | KADM5_MOD_NAME | KADM5_MOD_TIME |
|
KADM5_PRINCIPAL | KADM5_MOD_NAME | KADM5_MOD_TIME |
|
||||||
KADM5_KEY_DATA | KADM5_KVNO | KADM5_PW_EXPIRATION);
|
KADM5_KEY_DATA | KADM5_KVNO | KADM5_PW_EXPIRATION);
|
||||||
|
|
||||||
ret = context->db->store(context->context, context->db,
|
ret = context->db->hdb_store(context->context, context->db,
|
||||||
HDB_F_REPLACE, &ent);
|
HDB_F_REPLACE, &ent);
|
||||||
out3:
|
out3:
|
||||||
if (ret) {
|
if (ret) {
|
||||||
int i;
|
int i;
|
||||||
@@ -96,6 +96,6 @@ out3:
|
|||||||
out2:
|
out2:
|
||||||
hdb_free_entry(context->context, &ent);
|
hdb_free_entry(context->context, &ent);
|
||||||
out:
|
out:
|
||||||
context->db->close(context->context, context->db);
|
context->db->hdb_close(context->context, context->db);
|
||||||
return _kadm5_error_code(ret);
|
return _kadm5_error_code(ret);
|
||||||
}
|
}
|
||||||
|
@@ -48,12 +48,12 @@ kadm5_s_rename_principal(void *server_handle,
|
|||||||
return KADM5_DUP; /* XXX is this right? */
|
return KADM5_DUP; /* XXX is this right? */
|
||||||
if(!krb5_realm_compare(context->context, source, target))
|
if(!krb5_realm_compare(context->context, source, target))
|
||||||
return KADM5_FAILURE; /* XXX better code */
|
return KADM5_FAILURE; /* XXX better code */
|
||||||
ret = context->db->open(context->context, context->db, O_RDWR, 0);
|
ret = context->db->hdb_open(context->context, context->db, O_RDWR, 0);
|
||||||
if(ret)
|
if(ret)
|
||||||
return ret;
|
return ret;
|
||||||
ret = context->db->fetch(context->context, context->db, 0, &ent);
|
ret = context->db->hdb_fetch(context->context, context->db, 0, &ent);
|
||||||
if(ret){
|
if(ret){
|
||||||
context->db->close(context->context, context->db);
|
context->db->hdb_close(context->context, context->db);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
ret = _kadm5_set_modifier(context, &ent);
|
ret = _kadm5_set_modifier(context, &ent);
|
||||||
@@ -92,15 +92,15 @@ kadm5_s_rename_principal(void *server_handle,
|
|||||||
source,
|
source,
|
||||||
&ent);
|
&ent);
|
||||||
|
|
||||||
ret = context->db->store(context->context, context->db, 0, &ent);
|
ret = context->db->hdb_store(context->context, context->db, 0, &ent);
|
||||||
if(ret){
|
if(ret){
|
||||||
ent.principal = ent2.principal;
|
ent.principal = ent2.principal;
|
||||||
goto out2;
|
goto out2;
|
||||||
}
|
}
|
||||||
ret = context->db->remove(context->context, context->db, &ent2);
|
ret = context->db->hdb_remove(context->context, context->db, &ent2);
|
||||||
ent.principal = ent2.principal;
|
ent.principal = ent2.principal;
|
||||||
out2:
|
out2:
|
||||||
context->db->close(context->context, context->db);
|
context->db->hdb_close(context->context, context->db);
|
||||||
hdb_free_entry(context->context, &ent);
|
hdb_free_entry(context->context, &ent);
|
||||||
out:
|
out:
|
||||||
return _kadm5_error_code(ret);
|
return _kadm5_error_code(ret);
|
||||||
|
@@ -106,9 +106,9 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
server_context = (kadm5_server_context *)kadm_handle;
|
server_context = (kadm5_server_context *)kadm_handle;
|
||||||
|
|
||||||
ret = server_context->db->open(context,
|
ret = server_context->db->hdb_open(context,
|
||||||
server_context->db,
|
server_context->db,
|
||||||
O_RDWR | O_CREAT, 0);
|
O_RDWR | O_CREAT, 0);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (context, 1, ret, "db->open");
|
krb5_err (context, 1, ret, "db->open");
|
||||||
|
|
||||||
@@ -122,7 +122,7 @@ main(int argc, char **argv)
|
|||||||
ret = kadm5_log_end (server_context);
|
ret = kadm5_log_end (server_context);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_warn(context, ret, "kadm5_log_end");
|
krb5_warn(context, ret, "kadm5_log_end");
|
||||||
ret = server_context->db->close (context, server_context->db);
|
ret = server_context->db->hdb_close (context, server_context->db);
|
||||||
if (ret)
|
if (ret)
|
||||||
krb5_err (context, 1, ret, "db->close");
|
krb5_err (context, 1, ret, "db->close");
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user