mirror of
https://github.com/samba-team/samba.git
synced 2025-11-26 04:23:49 +03:00
r11034: r10344@SERNOX: metze | 2005-09-20 11:35:54 +0200
create winsdb_record() and winsdb_message() as public functions so that they can be used in the wrepl_server/ metze
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
a25279f052
commit
b8b48c8aa5
@@ -276,6 +276,8 @@ struct wreplsrv_service;
|
||||
struct wreplsrv_in_connection;
|
||||
struct wreplsrv_in_call;
|
||||
|
||||
struct winsdb_record;
|
||||
|
||||
struct wrepl_packet;
|
||||
struct wrepl_associate;
|
||||
struct wrepl_associate_stop;
|
||||
|
||||
@@ -401,9 +401,7 @@ struct winsdb_record *winsdb_load(struct wins_server *winssrv,
|
||||
struct ldb_message **res = NULL;
|
||||
int ret;
|
||||
struct winsdb_record *rec;
|
||||
struct ldb_message_element *el;
|
||||
TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx);
|
||||
int i;
|
||||
|
||||
/* find the record in the WINS database */
|
||||
ret = ldb_search(winssrv->wins_db, winsdb_dn(tmp_ctx, name), LDB_SCOPE_BASE,
|
||||
@@ -413,32 +411,9 @@ struct winsdb_record *winsdb_load(struct wins_server *winssrv,
|
||||
}
|
||||
if (ret != 1) goto failed;
|
||||
|
||||
rec = talloc(tmp_ctx, struct winsdb_record);
|
||||
rec = winsdb_record(res[0], tmp_ctx);
|
||||
if (rec == NULL) goto failed;
|
||||
|
||||
/* parse it into a more convenient winsdb_record structure */
|
||||
rec->name = name;
|
||||
rec->state = ldb_msg_find_int(res[0], "active", WINS_REC_RELEASED);
|
||||
rec->nb_flags = ldb_msg_find_int(res[0], "nbFlags", 0);
|
||||
rec->expire_time = ldb_string_to_time(ldb_msg_find_string(res[0], "expires", NULL));
|
||||
rec->registered_by = ldb_msg_find_string(res[0], "registeredBy", NULL);
|
||||
rec->version = ldb_msg_find_uint64(res[0], "version", 0);
|
||||
talloc_steal(rec, rec->wins_owner);
|
||||
talloc_steal(rec, rec->registered_by);
|
||||
|
||||
if (!rec->wins_owner) rec->wins_owner = WINSDB_OWNER_LOCAL;
|
||||
|
||||
el = ldb_msg_find_element(res[0], "address");
|
||||
if (el == NULL) goto failed;
|
||||
|
||||
rec->addresses = talloc_array(rec, struct winsdb_addr *, el->num_values+1);
|
||||
if (rec->addresses == NULL) goto failed;
|
||||
|
||||
for (i=0;i<el->num_values;i++) {
|
||||
rec->addresses[i] = winsdb_addr_decode(rec, rec->addresses, &el->values[i]);
|
||||
if (rec->addresses[i] == NULL) goto failed;
|
||||
}
|
||||
rec->addresses[i] = NULL;
|
||||
|
||||
/* see if it has already expired */
|
||||
if (rec->state == WINS_REC_ACTIVE &&
|
||||
@@ -457,12 +432,50 @@ failed:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct winsdb_record *winsdb_record(struct ldb_message *msg, TALLOC_CTX *mem_ctx)
|
||||
{
|
||||
struct winsdb_record *rec;
|
||||
struct ldb_message_element *el;
|
||||
uint32_t i;
|
||||
|
||||
rec = talloc(mem_ctx, struct winsdb_record);
|
||||
if (rec == NULL) goto failed;
|
||||
|
||||
/* parse it into a more convenient winsdb_record structure */
|
||||
rec->name = name;
|
||||
rec->state = ldb_msg_find_int(res[0], "active", WINS_REC_RELEASED);
|
||||
rec->nb_flags = ldb_msg_find_int(res[0], "nbFlags", 0);
|
||||
rec->expire_time = ldb_string_to_time(ldb_msg_find_string(res[0], "expires", NULL));
|
||||
rec->registered_by = ldb_msg_find_string(res[0], "registeredBy", NULL);
|
||||
rec->version = ldb_msg_find_uint64(res[0], "version", 0);
|
||||
talloc_steal(rec, rec->wins_owner);
|
||||
talloc_steal(rec, rec->registered_by);
|
||||
|
||||
if (!rec->wins_owner) rec->wins_owner = WINSDB_OWNER_LOCAL;
|
||||
|
||||
el = ldb_msg_find_element(msg, "address");
|
||||
if (el == NULL) goto failed;
|
||||
|
||||
rec->addresses = talloc_array(rec, struct winsdb_addr *, el->num_values+1);
|
||||
if (rec->addresses == NULL) goto failed;
|
||||
|
||||
for (i=0;i<el->num_values;i++) {
|
||||
rec->addresses[i] = winsdb_addr_decode(rec, rec->addresses, &el->values[i]);
|
||||
if (rec->addresses[i] == NULL) goto failed;
|
||||
}
|
||||
rec->addresses[i] = NULL;
|
||||
|
||||
return rec;
|
||||
failed:
|
||||
talloc_free(rec);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
form a ldb_message from a winsdb_record
|
||||
*/
|
||||
static struct ldb_message *winsdb_message(struct wins_server *winssrv,
|
||||
struct winsdb_record *rec, TALLOC_CTX *mem_ctx)
|
||||
struct ldb_message *winsdb_message(struct ldb_context *ldb,
|
||||
struct winsdb_record *rec, TALLOC_CTX *mem_ctx)
|
||||
{
|
||||
int i, ret=0;
|
||||
struct ldb_message *msg = ldb_msg_new(mem_ctx);
|
||||
@@ -506,7 +519,7 @@ uint8_t winsdb_add(struct wins_server *winssrv, struct winsdb_record *rec)
|
||||
rec->version = winsdb_allocate_version(winssrv);
|
||||
if (rec->version == 0) goto failed;
|
||||
|
||||
msg = winsdb_message(winssrv, rec, tmp_ctx);
|
||||
msg = winsdb_message(winssrv->wins_db, rec, tmp_ctx);
|
||||
if (msg == NULL) goto failed;
|
||||
ret = ldb_add(ldb, msg);
|
||||
if (ret != 0) goto failed;
|
||||
@@ -543,7 +556,7 @@ uint8_t winsdb_modify(struct wins_server *winssrv, struct winsdb_record *rec)
|
||||
if (rec->version == 0) goto failed;
|
||||
rec->wins_owner = WINSDB_OWNER_LOCAL;
|
||||
|
||||
msg = winsdb_message(winssrv, rec, tmp_ctx);
|
||||
msg = winsdb_message(winssrv->wins_db, rec, tmp_ctx);
|
||||
if (msg == NULL) goto failed;
|
||||
|
||||
for (i=0;i<msg->num_elements;i++) {
|
||||
|
||||
Reference in New Issue
Block a user