|
From: <he...@us...> - 2008-07-06 15:27:04
|
Revision: 128
http://pdbsql.svn.sourceforge.net/pdbsql/?rev=128&view=rev
Author: herwinw
Date: 2008-07-06 08:26:26 -0700 (Sun, 06 Jul 2008)
Log Message:
-----------
Fixed _search_users function
Modified Paths:
--------------
branches/pdbsql_3_2/pdb_mysql.c
Modified: branches/pdbsql_3_2/pdb_mysql.c
===================================================================
--- branches/pdbsql_3_2/pdb_mysql.c 2008-07-05 21:02:00 UTC (rev 127)
+++ branches/pdbsql_3_2/pdb_mysql.c 2008-07-06 15:26:26 UTC (rev 128)
@@ -373,8 +373,8 @@
SET_DATA(data, methods);
-// sid_to_string(sid_str, sid);
- sid_string_dbg(sid);
+ sid_to_fstring(sid_str, sid);
+ // sid_string_dbg(sid);
return mysqlsam_select_by_field(methods, user, SQL_SEARCH_USER_SID, sid_str);
}
@@ -537,9 +537,8 @@
struct mysqlsam_search_state {
uint32_t acct_flags;
- struct samr_displayentry *entries;
+ MYSQL_RES *pwent;
uint32_t num_entries;
- ssize_t array_size;
uint32_t current;
};
/****************************/
@@ -547,7 +546,10 @@
{
struct mysqlsam_search_state *state = talloc_get_type_abort(
search->private_data, struct mysqlsam_search_state);
- TALLOC_FREE(state);
+ if (state->pwent != NULL) {
+ mysql_free_result(state->pwent);
+ }
+ DEBUG(5, ("End of entries reached\n"));
}
/****************************/
static bool mysqlsam_search_next_entry(struct pdb_search *search,
@@ -555,26 +557,17 @@
{
struct mysqlsam_search_state *state = talloc_get_type_abort(
search->private_data, struct mysqlsam_search_state);
+ MYSQL_ROW row;
+ DOM_SID sid;
- if (state->current == state->num_entries) {
+ if (state->current >= state->num_entries) {
return false;
}
- entry->idx = state->entries[state->current].idx;
- entry->rid = state->entries[state->current].rid;
- entry->acct_flags = state->entries[state->current].acct_flags;
-
- entry->account_name = talloc_strdup(
- search->mem_ctx, state->entries[state->current].account_name);
- entry->fullname = talloc_strdup(
- search->mem_ctx, state->entries[state->current].fullname);
- entry->description = talloc_strdup(
- search->mem_ctx, state->entries[state->current].description);
-
- if ((entry->account_name == NULL) || (entry->fullname == NULL)
- || (entry->description == NULL)) {
- DEBUG(0, ("talloc_strdup failed\n"));
- return false;
+ row = mysql_fetch_row(state->pwent);
+ if (row[18]) {
+ string_to_sid(&sid, row[18]);
+ entry->rid = sid.sub_auths[4];
}
state->current += 1;
@@ -583,13 +576,12 @@
/****************************/
static bool mysqlsam_search_users(struct pdb_methods *methods,
struct pdb_search *search,
- uint32 acct_flags,
- bool update)
+ uint32 acct_flags)
{
struct pdb_mysql_data *data =
(struct pdb_mysql_data *) methods->private_data;
- char *query;
- int mysql_ret;
+ char *query;
+ int mysql_ret;
struct mysqlsam_search_state *state;
state = TALLOC_ZERO_P(search->mem_ctx, struct mysqlsam_search_state);
@@ -600,7 +592,7 @@
state->acct_flags = acct_flags;
//
- query = sql_account_query_select(NULL, data->location, update, SQL_SEARCH_NONE, NULL);
+ query = sql_account_query_select(NULL, data->location, False, SQL_SEARCH_NONE, NULL);
mysql_ret = mysql_query(data->handle, query);
@@ -625,17 +617,19 @@
("Error executing MySQL query %s\n", mysql_error(data->handle)));
return false;
}
-// klopt nie !
- data->pwent = mysql_store_result(data->handle);
- if (data->pwent == NULL) {
+ state->pwent = mysql_store_result(data->handle);
+
+ if (state->pwent == NULL) {
DEBUG(0,
("Error storing results: %s\n", mysql_error(data->handle)));
return false;
}
// state->methods = methods;
// db_sam->traverse_read(db_sam, tdbsam_collect_rids, state);
-//
+ state->num_entries = mysql_num_rows(state->pwent);
+ DEBUG(5, ("Found %d results\n", state->num_entries));
+
search->private_data = state;
search->next_entry = mysqlsam_search_next_entry;
search->search_end = mysqlsam_search_end;
@@ -722,3 +716,9 @@
{
return smb_register_passdb(PASSDB_INTERFACE_VERSION, "mysql", mysqlsam_init);
}
+
+NTSTATUS init_module(void)
+{
+ return init_samba_module();
+}
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|