svn commit: samba r26693 - in branches/SAMBA_4_0/source/libnet: .

2008-01-08 Thread mimir
Author: mimir
Date: 2008-01-08 10:20:44 + (Tue, 08 Jan 2008)
New Revision: 26693

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=26693

Log:
Add (untested) libnet_rpc_groupdel function.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/groupman.c
   branches/SAMBA_4_0/source/libnet/groupman.h


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/groupman.c
===
--- branches/SAMBA_4_0/source/libnet/groupman.c 2008-01-07 23:41:55 UTC (rev 
26692)
+++ branches/SAMBA_4_0/source/libnet/groupman.c 2008-01-08 10:20:44 UTC (rev 
26693)
@@ -114,16 +114,6 @@
c-status = s-creategroup.out.result;
if (!composite_is_ok(c)) return;

-   if (s-monitor_fn) {
-   struct monitor_msg msg;
-   
-   msg.type  = mon_SamrCreateUser;
-   msg.data  = NULL;
-   msg.data_size = 0;
-   
-   s-monitor_fn(msg);
-   }
-
composite_done(c);
 }
 
@@ -136,3 +126,186 @@
c = libnet_rpc_groupadd_send(p, io, NULL);
return libnet_rpc_groupadd_recv(c, mem_ctx, io);
 }
+
+
+struct groupdel_state {
+   struct dcerpc_pipe *pipe;
+   struct policy_handle   domain_handle;
+   struct policy_handle   group_handle;
+   struct samr_LookupNameslookupname;
+   struct samr_OpenGroup  opengroup;
+   struct samr_DeleteDomainGroup  deletegroup;
+
+   /* information about the progress */
+   void (*monitor_fn)(struct monitor_msg *);
+};
+
+
+static void continue_groupdel_name_found(struct rpc_request *req);
+static void continue_groupdel_group_opened(struct rpc_request *req);
+static void continue_groupdel_deleted(struct rpc_request *req);
+
+
+struct composite_context* libnet_rpc_groupdel_send(struct dcerpc_pipe *p,
+  struct libnet_rpc_groupdel 
*io,
+  void (*monitor)(struct 
monitor_msg*))
+{
+   struct composite_context *c;
+   struct groupdel_state *s;
+   struct rpc_request *lookup_req;
+
+   /* composite context allocation and setup */
+   c = composite_create(p, dcerpc_event_context(p));
+   if (c == NULL) return NULL;
+
+   s = talloc_zero(c, struct groupdel_state);
+   if (composite_nomem(s, c)) return c;
+
+   c-private_data  = s;
+
+   /* store function parameters in the state structure */
+   s-pipe  = p;
+   s-domain_handle = io-in.domain_handle;
+   s-monitor_fn= monitor;
+   
+   /* prepare parameters to send rpc request */
+   s-lookupname.in.domain_handle = io-in.domain_handle;
+   s-lookupname.in.num_names = 1;
+   s-lookupname.in.names = talloc_zero(s, struct lsa_String);
+   s-lookupname.in.names-string = io-in.groupname;
+
+   /* send the request */
+   lookup_req = dcerpc_samr_LookupNames_send(p, c, s-lookupname);
+   if (composite_nomem(lookup_req, c)) return c;
+
+   composite_continue_rpc(c, lookup_req, continue_groupdel_name_found, c);
+   return c;
+}
+
+
+static void continue_groupdel_name_found(struct rpc_request *req)
+{
+   struct composite_context *c;
+   struct groupdel_state *s;
+   struct rpc_request *opengroup_req;
+
+   c = talloc_get_type(req-async.private_data, struct composite_context);
+   s = talloc_get_type(c-private_data, struct groupdel_state);
+
+   /* receive samr_LookupNames result */
+   c-status = dcerpc_ndr_request_recv(req);
+   if (!composite_is_ok(c)) return;
+
+   c-status = s-lookupname.out.result;
+   if (!NT_STATUS_IS_OK(c-status)) {
+   composite_error(c, c-status);
+   return;
+   }
+
+   /* what to do when there's no group account to delete
+  and what if there's more than one rid resolved */
+   if (!s-lookupname.out.rids.count) {
+   c-status = NT_STATUS_NO_SUCH_GROUP;
+   composite_error(c, c-status);
+   return;
+
+   } else if (!s-lookupname.out.rids.count  1) {
+   c-status = NT_STATUS_INVALID_ACCOUNT_NAME;
+   composite_error(c, c-status);
+   return;
+   }
+
+   /* prepare the arguments for rpc call */
+   s-opengroup.in.domain_handle = s-domain_handle;
+   s-opengroup.in.rid   = s-lookupname.out.rids.ids[0];
+   s-opengroup.in.access_mask   = SEC_FLAG_MAXIMUM_ALLOWED;
+   s-opengroup.out.group_handle  = s-group_handle;
+
+   /* send rpc request */
+   opengroup_req = dcerpc_samr_OpenGroup_send(s-pipe, c, s-opengroup);
+   if (composite_nomem(opengroup_req, c)) return;
+
+   composite_continue_rpc(c, opengroup_req, 
continue_groupdel_group_opened, c);
+}
+
+
+static void continue_groupdel_group_opened(struct rpc_request *req)
+{
+   struct

svn commit: samba r26632 - in branches/SAMBA_4_0/source/libnet: .

2007-12-30 Thread mimir
Author: mimir
Date: 2007-12-30 19:13:50 + (Sun, 30 Dec 2007)
New Revision: 26632

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=26632

Log:
Add libnet_CreateGroup function.


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_group.c
   branches/SAMBA_4_0/source/libnet/libnet_group.h


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_group.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_group.c 2007-12-30 16:46:14 UTC 
(rev 26631)
+++ branches/SAMBA_4_0/source/libnet/libnet_group.c 2007-12-30 19:13:50 UTC 
(rev 26632)
@@ -28,6 +28,147 @@
 #include libcli/security/security.h
 
 
+struct create_group_state {
+   struct libnet_context *ctx;
+   struct libnet_CreateGroup r;
+   struct libnet_DomainOpen domain_open;
+   struct libnet_rpc_groupadd group_add;
+
+   /* information about the progress */
+   void (*monitor_fn)(struct monitor_msg *);
+};
+
+
+static void continue_domain_opened(struct composite_context *ctx);
+static void continue_rpc_group_added(struct composite_context *ctx);
+
+
+struct composite_context* libnet_CreateGroup_send(struct libnet_context *ctx,
+ TALLOC_CTX *mem_ctx,
+ struct libnet_CreateGroup *r,
+ void (*monitor)(struct 
monitor_msg*))
+{
+   struct composite_context *c;
+   struct create_group_state *s;
+   struct composite_context *create_req;
+   bool prereq_met = false;
+
+   /* composite context allocation and setup */
+   c = composite_create(mem_ctx, ctx-event_ctx);
+   if (c == NULL) return NULL;
+
+   s = talloc_zero(c, struct create_group_state);
+   if (composite_nomem(s, c)) return c;
+
+   c-private_data = s;
+
+   s-ctx = ctx;
+   s-r   = *r;
+   ZERO_STRUCT(s-r.out);
+
+   /* prerequisite: make sure we have a valid samr domain handle */
+   prereq_met = samr_domain_opened(ctx, s-r.in.domain_name, c, 
s-domain_open,
+   continue_domain_opened, monitor);
+   if (!prereq_met) return c;
+
+   /* prepare arguments of rpc group add call */
+   s-group_add.in.groupname = r-in.group_name;
+   s-group_add.in.domain_handle = ctx-samr.handle;
+
+   /* send the request */
+   create_req = libnet_rpc_groupadd_send(ctx-samr.pipe, s-group_add, 
monitor);
+   if (composite_nomem(create_req, c)) return c;
+
+   composite_continue(c, create_req, continue_rpc_group_added, c);
+   return c;
+}
+
+
+static void continue_domain_opened(struct composite_context *ctx)
+{
+   struct composite_context *c;
+   struct create_group_state *s;
+   struct composite_context *create_req;
+   
+   c = talloc_get_type(ctx-async.private_data, struct composite_context);
+   s = talloc_get_type(c-private_data, struct create_group_state);
+
+   c-status = libnet_DomainOpen_recv(ctx, s-ctx, c, s-domain_open);
+   if (!composite_is_ok(c)) return;
+
+   /* prepare arguments of groupadd call */
+   s-group_add.in.groupname = s-r.in.group_name;
+   s-group_add.in.domain_handle = s-ctx-samr.handle;
+
+   /* send the request */
+   create_req = libnet_rpc_groupadd_send(s-ctx-samr.pipe, s-group_add,
+ s-monitor_fn);
+   if (composite_nomem(create_req, c)) return;
+
+   composite_continue(c, create_req, continue_rpc_group_added, c);
+}
+
+
+static void continue_rpc_group_added(struct composite_context *ctx)
+{
+   struct composite_context *c;
+   struct create_group_state *s;
+
+   c = talloc_get_type(ctx-async.private_data, struct composite_context);
+   s = talloc_get_type(c-private_data, struct create_group_state);
+
+   /* receive result of group add call */
+   c-status = libnet_rpc_groupadd_recv(ctx, c, s-group_add);
+   if (!composite_is_ok(c)) return;
+
+   /* we're done */
+   composite_done(c);
+}
+
+
+/**
+ * Receive result of CreateGroup call
+ *
+ * @param c composite context returned by send request routine
+ * @param mem_ctx memory context of this call
+ * @param r pointer to a structure containing arguments and result of this call
+ * @return nt status
+ */
+NTSTATUS libnet_CreateGroup_recv(struct composite_context *c,
+TALLOC_CTX *mem_ctx,
+struct libnet_CreateGroup *r)
+{
+   NTSTATUS status;
+   struct create_group_state *s;
+
+   status = composite_wait(c);
+   if (!NT_STATUS_IS_OK(status)) {
+   s = talloc_get_type(c-private_data, struct create_group_state);
+   r-out.error_string = talloc_strdup(mem_ctx, nt_errstr(status));
+   }
+
+   return status;
+}
+
+
+/**
+ * Create domain group
+ *
+ * @param ctx initialised libnet

svn commit: samba r26633 - in branches/SAMBA_4_0/source/libnet: .

2007-12-30 Thread mimir
Author: mimir
Date: 2007-12-30 19:14:43 + (Sun, 30 Dec 2007)
New Revision: 26633

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=26633

Log:
A couple of fixes in comments.


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_user.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_user.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_user.c  2007-12-30 19:13:50 UTC 
(rev 26632)
+++ branches/SAMBA_4_0/source/libnet/libnet_user.c  2007-12-30 19:14:43 UTC 
(rev 26633)
@@ -866,7 +866,7 @@
  *
  * @param ctx initialised libnet context
  * @param mem_ctx memory context of this call
- * @param r pointer to a structure containing arguments and results of this 
call
+ * @param r pointer to structure containing arguments and results of this call
  * @param monitor function pointer for receiving monitor messages
  * @return compostite context of this request
  */
@@ -969,7 +969,7 @@
continue_samr_domain_opened, 
s-monitor_fn);
if (!prereq_met) return;
 
-   /* prepare arguments od EnumDomainUsers call */
+   /* prepare arguments of EnumDomainUsers call */
s-user_list.in.domain_handle = s-ctx-samr.handle;
s-user_list.in.max_size = s-page_size;
s-user_list.in.resume_handle = s-resume_index;
@@ -1001,7 +1001,7 @@
c-status = libnet_DomainOpen_recv(ctx, s-ctx, c, s-domain_open);
if (!composite_is_ok(c)) return;
 
-   /* prepare arguments od EnumDomainUsers call */
+   /* prepare arguments of EnumDomainUsers call */
s-user_list.in.domain_handle = s-ctx-samr.handle;
s-user_list.in.max_size = s-page_size;
s-user_list.in.resume_handle = s-resume_index;
@@ -1032,10 +1032,12 @@
c-status = dcerpc_ndr_request_recv(req);
if (!composite_is_ok(c)) return;
 
-   /* get the actual status of the rpc call result (instead of rpc layer 
status) */
+   /* get the actual status of the rpc call result
+  (instead of rpc layer status) */
c-status = s-user_list.out.result;
 
-   /* we're interested in status ok as well as two enum-specific status 
codes */
+   /* we're interested in status ok as well as two
+  enum-specific status codes */
if (NT_STATUS_IS_OK(c-status) ||
NT_STATUS_EQUAL(c-status, STATUS_MORE_ENTRIES) ||
NT_STATUS_EQUAL(c-status, NT_STATUS_NO_MORE_ENTRIES)) {
@@ -1082,7 +1084,7 @@
  *
  * @param c composite context returned by send request routine
  * @param mem_ctx memory context of this call
- * @param r pointer to a structure containing arguments and result of this call
+ * @param r pointer to structure containing arguments and result of this call
  * @return nt status
  */
 NTSTATUS libnet_UserList_recv(struct composite_context* c, TALLOC_CTX *mem_ctx,
@@ -1128,7 +1130,7 @@
  *
  * @param ctx initialised libnet context
  * @param mem_ctx memory context of this call
- * @param r pointer to a structure containing arguments and result of this call
+ * @param r pointer to structure containing arguments and result of this call
  * @return nt status
  */
 NTSTATUS libnet_UserList(struct libnet_context *ctx,



svn commit: samba r26634 - in branches/SAMBA_4_0/source/torture/libnet: .

2007-12-30 Thread mimir
Author: mimir
Date: 2007-12-30 19:18:17 + (Sun, 30 Dec 2007)
New Revision: 26634

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=26634

Log:
Add NET-API-CREATEGROUP test.


Modified:
   branches/SAMBA_4_0/source/torture/libnet/libnet.c
   branches/SAMBA_4_0/source/torture/libnet/libnet_group.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/libnet/libnet.c
===
--- branches/SAMBA_4_0/source/torture/libnet/libnet.c   2007-12-30 19:14:43 UTC 
(rev 26633)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet.c   2007-12-30 19:18:17 UTC 
(rev 26634)
@@ -43,6 +43,7 @@
torture_suite_add_simple_test(suite, API-USERLIST, torture_userlist);
torture_suite_add_simple_test(suite, API-GROUPINFO, 
torture_groupinfo_api);
torture_suite_add_simple_test(suite, API-GROUPLIST, 
torture_grouplist);
+   torture_suite_add_simple_test(suite, API-CREATEGROUP, 
torture_creategroup);
torture_suite_add_simple_test(suite, API-RPCCONN-BIND, 
torture_rpc_connect_binding);
torture_suite_add_simple_test(suite, API-RPCCONN-SRV, 
torture_rpc_connect_srv);
torture_suite_add_simple_test(suite, API-RPCCONN-PDC, 
torture_rpc_connect_pdc);

Modified: branches/SAMBA_4_0/source/torture/libnet/libnet_group.c
===
--- branches/SAMBA_4_0/source/torture/libnet/libnet_group.c 2007-12-30 
19:14:43 UTC (rev 26633)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet_group.c 2007-12-30 
19:18:17 UTC (rev 26634)
@@ -349,3 +349,45 @@
talloc_free(mem_ctx);
return ret;
 }
+
+
+bool torture_creategroup(struct torture_context *torture)
+{
+   bool ret = true;
+   NTSTATUS status;
+   TALLOC_CTX *mem_ctx = NULL;
+   struct libnet_context *ctx;
+   struct libnet_CreateGroup req;
+
+   mem_ctx = talloc_init(test_creategroup);
+
+   ctx = libnet_context_init(NULL, torture-lp_ctx);
+   ctx-cred = cmdline_credentials;
+
+   req.in.group_name = TEST_GROUPNAME;
+   req.in.domain_name = lp_workgroup(torture-lp_ctx);
+   req.out.error_string = NULL;
+
+   status = libnet_CreateGroup(ctx, mem_ctx, req);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(libnet_CreateGroup call failed: %s\n, 
nt_errstr(status));
+   ret = false;
+   goto done;
+   }
+
+   if (!test_cleanup(ctx-samr.pipe, mem_ctx, ctx-samr.handle, 
TEST_GROUPNAME)) {
+   printf(cleanup failed\n);
+   ret = false;
+   goto done;
+   }
+
+   if (!test_samr_close(ctx-samr.pipe, mem_ctx, ctx-samr.handle)) {
+   printf(domain close failed\n);
+   ret = false;
+   }
+
+done:
+   talloc_free(ctx);
+   talloc_free(mem_ctx);
+   return ret;
+}



svn commit: samba r26530 - in branches/SAMBA_4_0/source/torture/libnet: .

2007-12-18 Thread mimir
Author: mimir
Date: 2007-12-19 00:44:01 + (Wed, 19 Dec 2007)
New Revision: 26530

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=26530

Log:
Add NET-API-GROUPLIST test.


Modified:
   branches/SAMBA_4_0/source/torture/libnet/libnet.c
   branches/SAMBA_4_0/source/torture/libnet/libnet_group.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/libnet/libnet.c
===
--- branches/SAMBA_4_0/source/torture/libnet/libnet.c   2007-12-19 00:39:27 UTC 
(rev 26529)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet.c   2007-12-19 00:44:01 UTC 
(rev 26530)
@@ -42,6 +42,7 @@
torture_suite_add_simple_test(suite, API-USERINFO, 
torture_userinfo_api);
torture_suite_add_simple_test(suite, API-USERLIST, torture_userlist);
torture_suite_add_simple_test(suite, API-GROUPINFO, 
torture_groupinfo_api);
+   torture_suite_add_simple_test(suite, API-GROUPLIST, 
torture_grouplist);
torture_suite_add_simple_test(suite, API-RPCCONN-BIND, 
torture_rpc_connect_binding);
torture_suite_add_simple_test(suite, API-RPCCONN-SRV, 
torture_rpc_connect_srv);
torture_suite_add_simple_test(suite, API-RPCCONN-PDC, 
torture_rpc_connect_pdc);

Modified: branches/SAMBA_4_0/source/torture/libnet/libnet_group.c
===
--- branches/SAMBA_4_0/source/torture/libnet/libnet_group.c 2007-12-19 
00:39:27 UTC (rev 26529)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet_group.c 2007-12-19 
00:44:01 UTC (rev 26530)
@@ -202,6 +202,25 @@
 }
 
 
+static bool test_lsa_close(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+  struct policy_handle *domain_handle)
+{
+   NTSTATUS status;
+   struct lsa_Close r;
+
+   r.in.handle = domain_handle;
+   r.out.handle = domain_handle;
+   
+   status = dcerpc_lsa_Close(p, mem_ctx, r);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(Close lsa domain failed - %s\n, nt_errstr(status));
+   return false;
+   }
+
+   return true;
+}
+
+
 bool torture_groupinfo_api(struct torture_context *torture)
 {
const char *name = TEST_GROUPNAME;
@@ -269,3 +288,64 @@
talloc_free(mem_ctx);
return ret;
 }
+
+
+bool torture_grouplist(struct torture_context *torture)
+{
+   bool ret = true;
+   NTSTATUS status;
+   TALLOC_CTX *mem_ctx = NULL;
+   struct libnet_context *ctx;
+   struct lsa_String domain_name;
+   struct libnet_GroupList req;
+   int i;
+
+   ctx = libnet_context_init(NULL, torture-lp_ctx);
+   ctx-cred = cmdline_credentials;
+
+   domain_name.string = lp_workgroup(torture-lp_ctx);
+   mem_ctx = talloc_init(torture group list);
+
+   ZERO_STRUCT(req);
+
+   printf(listing group accounts:\n);
+   
+   do {
+   req.in.domain_name  = domain_name.string;
+   req.in.page_size= 128;
+   req.in.resume_index = req.out.resume_index;
+
+   status = libnet_GroupList(ctx, mem_ctx, req);
+   if (!NT_STATUS_IS_OK(status) 
+   !NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)) break;
+
+   for (i = 0; i  req.out.count; i++) {
+   printf(\tgroup: %s, sid=%s\n,
+  req.out.groups[i].groupname, 
req.out.groups[i].sid);
+   }
+
+   } while (NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES));
+
+   if (!(NT_STATUS_IS_OK(status) ||
+ NT_STATUS_EQUAL(status, NT_STATUS_NO_MORE_ENTRIES))) {
+   printf(libnet_GroupList call failed: %s\n, nt_errstr(status));
+   ret = false;
+   goto done;
+   }
+
+   if (!test_samr_close(ctx-samr.pipe, mem_ctx, ctx-samr.handle)) {
+   printf(domain close failed\n);
+   ret = false;
+   }
+
+   if (!test_lsa_close(ctx-lsa.pipe, mem_ctx, ctx-lsa.handle)) {
+   printf(lsa domain close failed\n);
+   ret = false;
+   }
+
+   talloc_free(ctx);
+
+done:
+   talloc_free(mem_ctx);
+   return ret;
+}



svn commit: samba r26532 - in branches/SAMBA_4_0/source/libnet: .

2007-12-18 Thread mimir
Author: mimir
Date: 2007-12-19 00:46:43 + (Wed, 19 Dec 2007)
New Revision: 26532

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=26532

Log:
Fix mistake in assignment.


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_group.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_group.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_group.c 2007-12-19 00:45:07 UTC 
(rev 26531)
+++ branches/SAMBA_4_0/source/libnet/libnet_group.c 2007-12-19 00:46:43 UTC 
(rev 26532)
@@ -414,7 +414,7 @@
group_sid = dom_sid_add_rid(c, domain_sid, entry-idx);
if (composite_nomem(group_sid, c)) return;
 
-   s-groups[i].groupname = dom_sid_string(c, group_sid);
+   s-groups[i].groupname = talloc_strdup(c, 
entry-name.string);
if (composite_nomem(s-groups[i].groupname, c)) return;
 
s-groups[i].sid = dom_sid_string(c, group_sid);



svn commit: samba r26531 - in branches/SAMBA_4_0/source/torture/libnet: .

2007-12-18 Thread mimir
Author: mimir
Date: 2007-12-19 00:45:07 + (Wed, 19 Dec 2007)
New Revision: 26531

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=26531

Log:
Prevent from displaying the results if the function
call has failed.


Modified:
   branches/SAMBA_4_0/source/torture/libnet/libnet_user.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/libnet/libnet_user.c
===
--- branches/SAMBA_4_0/source/torture/libnet/libnet_user.c  2007-12-19 
00:44:01 UTC (rev 26530)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet_user.c  2007-12-19 
00:45:07 UTC (rev 26531)
@@ -691,6 +691,8 @@
req.in.resume_index = req.out.resume_index;
 
status = libnet_UserList(ctx, mem_ctx, req);
+   if (!NT_STATUS_IS_OK(status) 
+   !NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES)) break;
 
for (i = 0; i  req.out.count; i++) {
printf(\tuser: %s, sid=%s\n,



svn commit: samba r26519 - in branches/SAMBA_4_0/source/libnet: .

2007-12-17 Thread mimir
Author: mimir
Date: 2007-12-18 00:59:21 + (Tue, 18 Dec 2007)
New Revision: 26519

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=26519

Log:
Add libnet_GroupList function. Totally untested (yet), but
it builds for start.


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_group.c
   branches/SAMBA_4_0/source/libnet/libnet_group.h


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_group.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_group.c 2007-12-17 23:16:16 UTC 
(rev 26518)
+++ branches/SAMBA_4_0/source/libnet/libnet_group.c 2007-12-18 00:59:21 UTC 
(rev 26519)
@@ -22,6 +22,10 @@
 #include libnet/libnet.h
 #include libcli/composite/composite.h
 #include librpc/gen_ndr/lsa.h
+#include librpc/gen_ndr/ndr_lsa_c.h
+#include librpc/gen_ndr/samr.h
+#include librpc/gen_ndr/ndr_samr_c.h
+#include libcli/security/security.h
 
 
 struct group_info_state {
@@ -230,3 +234,249 @@
io, NULL);
return libnet_GroupInfo_recv(c, mem_ctx, io);
 }
+
+
+struct grouplist_state {
+   struct libnet_context *ctx;
+   const char *domain_name;
+   struct lsa_DomainInfo dominfo;
+   int page_size;
+   uint32_t resume_index;
+   struct grouplist *groups;
+   uint32_t count;
+
+   struct libnet_DomainOpen domain_open;
+   struct lsa_QueryInfoPolicy query_domain;
+   struct samr_EnumDomainGroups group_list;
+
+   void (*monitor_fn)(struct monitor_msg*);
+};
+
+
+static void continue_lsa_domain_opened(struct composite_context *ctx);
+static void continue_domain_queried(struct rpc_request *req);
+static void continue_samr_domain_opened(struct composite_context *ctx);
+static void continue_domain_queried(struct rpc_request *req);
+static void continue_groups_enumerated(struct rpc_request *req);
+
+
+struct composite_context *libnet_GroupList_send(struct libnet_context *ctx,
+   TALLOC_CTX *mem_ctx,
+   struct libnet_GroupList *io,
+   void (*monitor)(struct 
monitor_msg*))
+{
+   struct composite_context *c;
+   struct grouplist_state *s;
+   struct rpc_request *query_req;
+   bool prereq_met = false;
+   
+   c = composite_create(mem_ctx, ctx-event_ctx);
+   if (c == NULL) return NULL;
+
+   s = talloc_zero(c, struct grouplist_state);
+   if (composite_nomem(s, c)) return c;
+   
+   c-private_data = s;
+   
+   s-ctx  = ctx;
+   s-page_size= io-in.page_size;
+   s-resume_index = (uint32_t)io-in.resume_index;
+   s-domain_name  = talloc_strdup(c, io-in.domain_name);
+   s-monitor_fn   = monitor;
+
+   prereq_met = lsa_domain_opened(ctx, s-domain_name, c, s-domain_open,
+  continue_lsa_domain_opened, monitor);
+   if (!prereq_met) return c;
+
+   s-query_domain.in.handle = ctx-lsa.handle;
+   s-query_domain.in.level  = LSA_POLICY_INFO_DOMAIN;
+   
+   query_req = dcerpc_lsa_QueryInfoPolicy_send(ctx-lsa.pipe, c, 
s-query_domain);
+   if (composite_nomem(query_req, c)) return c;
+   
+   composite_continue_rpc(c, query_req, continue_domain_queried, c);
+   return c;
+}
+
+
+static void continue_lsa_domain_opened(struct composite_context *ctx)
+{
+   struct composite_context *c;
+   struct grouplist_state *s;
+   struct rpc_request *query_req;
+   
+   c = talloc_get_type(ctx-async.private_data, struct composite_context);
+   s = talloc_get_type(c-private_data, struct grouplist_state);
+   
+   c-status = libnet_DomainOpen_recv(ctx, s-ctx, c, s-domain_open);
+   if (!composite_is_ok(c)) return;
+
+   s-query_domain.in.handle = s-ctx-lsa.handle;
+   s-query_domain.in.level  = LSA_POLICY_INFO_DOMAIN;
+   
+   query_req = dcerpc_lsa_QueryInfoPolicy_send(s-ctx-lsa.pipe, c, 
s-query_domain);
+   if (composite_nomem(query_req, c)) return;
+
+   composite_continue_rpc(c, query_req, continue_domain_queried, c);
+}
+
+
+static void continue_domain_queried(struct rpc_request *req)
+{
+   struct composite_context *c;
+   struct grouplist_state *s;
+   struct rpc_request *enum_req;
+   bool prereq_met = false;
+   
+   c = talloc_get_type(req-async.private_data, struct composite_context);
+   s = talloc_get_type(c-private_data, struct grouplist_state);
+
+   /* receive result of rpc request */
+   c-status = dcerpc_ndr_request_recv(req);
+   if (!composite_is_ok(c)) return;
+
+   /* get the returned domain info */
+   s-dominfo = s-query_domain.out.info-domain;
+
+   /* make sure we have samr domain handle before continuing */
+   prereq_met = samr_domain_opened(s-ctx, s-domain_name, c, 
s-domain_open

svn commit: samba r25375 - in branches/SAMBA_4_0/source/torture/libnet: .

2007-09-27 Thread mimir
Author: mimir
Date: 2007-09-27 15:47:43 + (Thu, 27 Sep 2007)
New Revision: 25375

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25375

Log:
Put commonly used functions in one place.


rafal


Added:
   branches/SAMBA_4_0/source/torture/libnet/utils.c
   branches/SAMBA_4_0/source/torture/libnet/utils.h


Changeset:
Added: branches/SAMBA_4_0/source/torture/libnet/utils.c
===
--- branches/SAMBA_4_0/source/torture/libnet/utils.c2007-09-27 03:40:04 UTC 
(rev 25374)
+++ branches/SAMBA_4_0/source/torture/libnet/utils.c2007-09-27 15:47:43 UTC 
(rev 25375)
@@ -0,0 +1,313 @@
+/* 
+   Unix SMB/CIFS implementation.
+   Test suite for libnet calls.
+
+   Copyright (C) Rafal Szczesniak 2007
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see http://www.gnu.org/licenses/.
+*/
+
+/*
+ * These are more general use functions shared among the tests.
+ */
+
+#include includes.h
+#include torture/rpc/rpc.h
+#include libnet/libnet.h
+#include librpc/gen_ndr/ndr_samr_c.h
+#include param/param.h
+
+
+BOOL test_opendomain(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+struct policy_handle *handle, struct lsa_String *domname,
+struct dom_sid2 *sid)
+{
+   NTSTATUS status;
+   struct policy_handle h, domain_handle;
+   struct samr_Connect r1;
+   struct samr_LookupDomain r2;
+   struct samr_OpenDomain r3;
+   
+   printf(connecting\n);
+   
+   r1.in.system_name = 0;
+   r1.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
+   r1.out.connect_handle = h;
+   
+   status = dcerpc_samr_Connect(p, mem_ctx, r1);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(Connect failed - %s\n, nt_errstr(status));
+   return False;
+   }
+   
+   r2.in.connect_handle = h;
+   r2.in.domain_name = domname;
+
+   printf(domain lookup on %s\n, domname-string);
+
+   status = dcerpc_samr_LookupDomain(p, mem_ctx, r2);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(LookupDomain failed - %s\n, nt_errstr(status));
+   return False;
+   }
+
+   r3.in.connect_handle = h;
+   r3.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
+   r3.in.sid = r2.out.sid;
+   r3.out.domain_handle = domain_handle;
+
+   printf(opening domain\n);
+
+   status = dcerpc_samr_OpenDomain(p, mem_ctx, r3);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(OpenDomain failed - %s\n, nt_errstr(status));
+   return False;
+   } else {
+   *handle = domain_handle;
+   }
+
+   *sid = *r2.out.sid;
+   return True;
+}
+
+
+BOOL test_user_cleanup(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+  struct policy_handle *domain_handle,
+  const char *name)
+{
+   NTSTATUS status;
+   struct samr_LookupNames r1;
+   struct samr_OpenUser r2;
+   struct samr_DeleteUser r3;
+   struct lsa_String names[2];
+   uint32_t rid;
+   struct policy_handle user_handle;
+
+   names[0].string = name;
+
+   r1.in.domain_handle  = domain_handle;
+   r1.in.num_names  = 1;
+   r1.in.names  = names;
+   
+   printf(user account lookup '%s'\n, name);
+
+   status = dcerpc_samr_LookupNames(p, mem_ctx, r1);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(LookupNames failed - %s\n, nt_errstr(status));
+   return False;
+   }
+
+   rid = r1.out.rids.ids[0];
+   
+   r2.in.domain_handle  = domain_handle;
+   r2.in.access_mask= SEC_FLAG_MAXIMUM_ALLOWED;
+   r2.in.rid= rid;
+   r2.out.user_handle   = user_handle;
+
+   printf(opening user account\n);
+
+   status = dcerpc_samr_OpenUser(p, mem_ctx, r2);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(OpenUser failed - %s\n, nt_errstr(status));
+   return False;
+   }
+
+   r3.in.user_handle  = user_handle;
+   r3.out.user_handle = user_handle;
+
+   printf(deleting user account\n);
+   
+   status = dcerpc_samr_DeleteUser(p, mem_ctx, r3);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(DeleteUser failed - %s\n, nt_errstr(status));
+   return False;
+   }
+   
+   return True;
+}
+
+
+BOOL

svn commit: samba r25376 - in branches/SAMBA_4_0/source/torture: .

2007-09-27 Thread mimir
Author: mimir
Date: 2007-09-27 15:48:33 + (Thu, 27 Sep 2007)
New Revision: 25376

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25376

Log:
Add the new file to the build.


rafal


Modified:
   branches/SAMBA_4_0/source/torture/config.mk


Changeset:
Modified: branches/SAMBA_4_0/source/torture/config.mk
===
--- branches/SAMBA_4_0/source/torture/config.mk 2007-09-27 15:47:43 UTC (rev 
25375)
+++ branches/SAMBA_4_0/source/torture/config.mk 2007-09-27 15:48:33 UTC (rev 
25376)
@@ -277,6 +277,7 @@
libnet/proto.h
 OBJ_FILES = \
libnet/libnet.o \
+   libnet/utils.o \
libnet/userinfo.o \
libnet/userman.o \
libnet/groupinfo.o \



svn commit: samba r25377 - in branches/SAMBA_4_0/source/torture/libnet: .

2007-09-27 Thread mimir
Author: mimir
Date: 2007-09-27 15:51:07 + (Thu, 27 Sep 2007)
New Revision: 25377

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25377

Log:
Simplify code a little by employing commonly used functions.


rafal


Modified:
   branches/SAMBA_4_0/source/torture/libnet/groupinfo.c
   branches/SAMBA_4_0/source/torture/libnet/groupman.c
   branches/SAMBA_4_0/source/torture/libnet/userinfo.c
   branches/SAMBA_4_0/source/torture/libnet/userman.c


Changeset:
Sorry, the patch is too large (895 lines) to include; please use WebSVN to see 
it!
WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25377


svn commit: samba r25353 - in branches/SAMBA_4_0/source/libcli: .

2007-09-26 Thread mimir
Author: mimir
Date: 2007-09-26 17:39:39 + (Wed, 26 Sep 2007)
New Revision: 25353

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25353

Log:
Disable one more swig link to for 'make install' to work.


rafal


Modified:
   branches/SAMBA_4_0/source/libcli/config.mk


Changeset:
Modified: branches/SAMBA_4_0/source/libcli/config.mk
===
--- branches/SAMBA_4_0/source/libcli/config.mk  2007-09-26 16:53:35 UTC (rev 
25352)
+++ branches/SAMBA_4_0/source/libcli/config.mk  2007-09-26 17:39:39 UTC (rev 
25353)
@@ -64,6 +64,7 @@
 LIBRARY_REALNAME = swig/_libcli_smb.$(SHLIBEXT)
 OBJ_FILES = swig/libcli_smb_wrap.o
 PUBLIC_DEPENDENCIES = LIBCLI_SMB DYNCONFIG LIBSAMBA-CONFIG
+ENABLE = NO
 
 [SUBSYSTEM::LIBCLI_DGRAM]
 OBJ_FILES = \



svn commit: samba r25356 - in branches/SAMBA_4_0/source/libnet: .

2007-09-26 Thread mimir
Author: mimir
Date: 2007-09-26 19:05:51 + (Wed, 26 Sep 2007)
New Revision: 25356

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25356

Log:
Conversion from the old-style composite functions take 2.
Let's find out if NET-USERMOD test passes this time on
the build farm...


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/userman.c


Changeset:
Sorry, the patch is too large (910 lines) to include; please use WebSVN to see 
it!
WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25356


svn commit: samba r25367 - in branches/SAMBA_4_0/source/libnet: .

2007-09-26 Thread mimir
Author: mimir
Date: 2007-09-27 00:25:54 + (Thu, 27 Sep 2007)
New Revision: 25367

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25367

Log:
Add initial implementation of internal group add function.


rafal


Added:
   branches/SAMBA_4_0/source/libnet/groupman.c
   branches/SAMBA_4_0/source/libnet/groupman.h
Modified:
   branches/SAMBA_4_0/source/libnet/config.mk
   branches/SAMBA_4_0/source/libnet/libnet.h


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/config.mk
===
--- branches/SAMBA_4_0/source/libnet/config.mk  2007-09-27 00:00:38 UTC (rev 
25366)
+++ branches/SAMBA_4_0/source/libnet/config.mk  2007-09-27 00:25:54 UTC (rev 
25367)
@@ -28,6 +28,7 @@
userinfo.o \
groupinfo.o \
userman.o \
+   groupman.o \
prereq_domain.o
 PUBLIC_DEPENDENCIES = CREDENTIALS dcerpc dcerpc_samr RPC_NDR_LSA 
RPC_NDR_SRVSVC RPC_NDR_DRSUAPI LIBCLI_COMPOSITE LIBCLI_RESOLVE LIBCLI_FINDDCS 
LIBSAMBA3 LIBCLI_CLDAP LIBCLI_FINDDCS gensec_schannel
 PRIVATE_DEPENDENCIES = CREDENTIALS_KRB5

Added: branches/SAMBA_4_0/source/libnet/groupman.c
===
--- branches/SAMBA_4_0/source/libnet/groupman.c 2007-09-27 00:00:38 UTC (rev 
25366)
+++ branches/SAMBA_4_0/source/libnet/groupman.c 2007-09-27 00:25:54 UTC (rev 
25367)
@@ -0,0 +1,138 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Copyright (C) Rafal Szczesniak 2007
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see http://www.gnu.org/licenses/.
+*/
+
+/*
+  a composite function for manipulating (add/edit/del) groups via samr pipe
+*/
+
+#include includes.h
+#include libcli/composite/composite.h
+#include libnet/composite.h
+#include libnet/groupman.h
+#include librpc/gen_ndr/ndr_samr_c.h
+
+
+struct groupadd_state {
+   struct dcerpc_pipe *pipe;
+   struct policy_handle domain_handle;
+   struct samr_CreateDomainGroup creategroup;
+   struct policy_handle group_handle;
+   uint32_t group_rid;
+   
+   void (*monitor_fn)(struct monitor_msg*);
+};
+
+
+static void continue_groupadd_created(struct rpc_request *req);
+
+
+struct composite_context* libnet_rpc_groupadd_send(struct dcerpc_pipe *p,
+  struct libnet_rpc_groupadd 
*io,
+  void (*monitor)(struct 
monitor_msg*))
+{
+   struct composite_context *c;
+   struct groupadd_state *s;
+   struct rpc_request *create_req;
+
+   if (!p || !io) return NULL;
+
+   c = composite_create(p, dcerpc_event_context(p));
+   if (c == NULL) return NULL;
+
+   s = talloc_zero(c, struct groupadd_state);
+   if (composite_nomem(s, c)) return c;
+
+   c-private_data = s;
+
+   s-domain_handle = io-in.domain_handle;
+   s-pipe  = p;
+   s-monitor_fn= monitor;
+
+   s-creategroup.in.domain_handle  = s-domain_handle;
+
+   s-creategroup.in.name   = talloc_zero(c, struct lsa_String);
+   if (composite_nomem(s-creategroup.in.name, c)) return c;
+
+   s-creategroup.in.name-string   = talloc_strdup(c, io-in.groupname);
+   if (composite_nomem(s-creategroup.in.name-string, c)) return c;
+   
+   s-creategroup.in.access_mask= 0;
+   
+   s-creategroup.out.group_handle  = s-group_handle;
+   s-creategroup.out.rid   = s-group_rid;
+   
+   create_req = dcerpc_samr_CreateDomainGroup_send(s-pipe, c, 
s-creategroup);
+   if (composite_nomem(create_req, c)) return c;
+
+   composite_continue_rpc(c, create_req, continue_groupadd_created, c);
+   return c;
+}
+
+
+NTSTATUS libnet_rpc_groupadd_recv(struct composite_context *c, TALLOC_CTX 
*mem_ctx,
+ struct libnet_rpc_groupadd *io)
+{
+   NTSTATUS status;
+   struct groupadd_state *s;
+   
+   status = composite_wait(c);
+   if (NT_STATUS_IS_OK(status)) {
+   s = talloc_get_type(c, struct groupadd_state);
+   }
+
+   return status;
+}
+
+
+static void continue_groupadd_created(struct rpc_request *req)
+{
+   struct composite_context *c;
+   struct groupadd_state *s;
+
+   c = talloc_get_type(req-async.private_data, struct composite_context);
+   s = talloc_get_type(c

svn commit: samba r25368 - in branches/SAMBA_4_0/source/torture: . libnet

2007-09-26 Thread mimir
Author: mimir
Date: 2007-09-27 00:27:26 + (Thu, 27 Sep 2007)
New Revision: 25368

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25368

Log:
Add the test of group add routine.


rafal


Added:
   branches/SAMBA_4_0/source/torture/libnet/groupman.c
   branches/SAMBA_4_0/source/torture/libnet/grouptest.h
Modified:
   branches/SAMBA_4_0/source/torture/config.mk
   branches/SAMBA_4_0/source/torture/libnet/libnet.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/config.mk
===
--- branches/SAMBA_4_0/source/torture/config.mk 2007-09-27 00:25:54 UTC (rev 
25367)
+++ branches/SAMBA_4_0/source/torture/config.mk 2007-09-27 00:27:26 UTC (rev 
25368)
@@ -280,6 +280,7 @@
libnet/userinfo.o \
libnet/userman.o \
libnet/groupinfo.o \
+   libnet/groupman.o \
libnet/domain.o \
libnet/libnet_lookup.o \
libnet/libnet_user.o \

Added: branches/SAMBA_4_0/source/torture/libnet/groupman.c
===
--- branches/SAMBA_4_0/source/torture/libnet/groupman.c 2007-09-27 00:25:54 UTC 
(rev 25367)
+++ branches/SAMBA_4_0/source/torture/libnet/groupman.c 2007-09-27 00:27:26 UTC 
(rev 25368)
@@ -0,0 +1,197 @@
+/* 
+   Unix SMB/CIFS implementation.
+   Test suite for libnet calls.
+
+   Copyright (C) Rafal Szczesniak 2007
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see http://www.gnu.org/licenses/.
+*/
+
+#include includes.h
+#include torture/rpc/rpc.h
+#include torture/libnet/grouptest.h
+#include libnet/libnet.h
+#include librpc/gen_ndr/ndr_samr_c.h
+#include param/param.h
+
+
+static BOOL test_opendomain(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+   struct policy_handle *handle, struct lsa_String 
*domname)
+{
+   NTSTATUS status;
+   struct policy_handle h, domain_handle;
+   struct samr_Connect r1;
+   struct samr_LookupDomain r2;
+   struct samr_OpenDomain r3;
+   
+   printf(connecting\n);
+   
+   r1.in.system_name = 0;
+   r1.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
+   r1.out.connect_handle = h;
+   
+   status = dcerpc_samr_Connect(p, mem_ctx, r1);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(Connect failed - %s\n, nt_errstr(status));
+   return False;
+   }
+   
+   r2.in.connect_handle = h;
+   r2.in.domain_name = domname;
+
+   printf(domain lookup on %s\n, domname-string);
+
+   status = dcerpc_samr_LookupDomain(p, mem_ctx, r2);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(LookupDomain failed - %s\n, nt_errstr(status));
+   return False;
+   }
+
+   r3.in.connect_handle = h;
+   r3.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
+   r3.in.sid = r2.out.sid;
+   r3.out.domain_handle = domain_handle;
+
+   printf(opening domain\n);
+
+   status = dcerpc_samr_OpenDomain(p, mem_ctx, r3);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(OpenDomain failed - %s\n, nt_errstr(status));
+   return False;
+   } else {
+   *handle = domain_handle;
+   }
+
+   return True;
+}
+
+
+static BOOL test_cleanup(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+struct policy_handle *domain_handle, const char 
*groupname)
+{
+   NTSTATUS status;
+   struct samr_LookupNames r1;
+   struct samr_OpenGroup r2;
+   struct samr_DeleteDomainGroup r3;
+   struct lsa_String names[2];
+   uint32_t rid;
+   struct policy_handle group_handle;
+
+   names[0].string = groupname;
+
+   r1.in.domain_handle  = domain_handle;
+   r1.in.num_names  = 1;
+   r1.in.names  = names;
+   
+   printf(group account lookup '%s'\n, groupname);
+
+   status = dcerpc_samr_LookupNames(p, mem_ctx, r1);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(LookupNames failed - %s\n, nt_errstr(status));
+   return False;
+   }
+
+   rid = r1.out.rids.ids[0];
+   
+   r2.in.domain_handle  = domain_handle;
+   r2.in.access_mask= SEC_FLAG_MAXIMUM_ALLOWED;
+   r2.in.rid= rid;
+   r2.out.group_handle   = group_handle;
+
+   printf(opening group account\n

svn commit: samba r25315 - in branches/SAMBA_4_0/source/libnet: .

2007-09-25 Thread mimir
Author: mimir
Date: 2007-09-25 05:59:57 + (Tue, 25 Sep 2007)
New Revision: 25315

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25315

Log:
Revert my last change until I find out what's causing the
problem spotted by the builfarm.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/userman.c


Changeset:
Sorry, the patch is too large (900 lines) to include; please use WebSVN to see 
it!
WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25315


svn commit: samba r25312 - in branches/SAMBA_4_0/source/libnet: .

2007-09-24 Thread mimir
Author: mimir
Date: 2007-09-25 04:24:39 + (Tue, 25 Sep 2007)
New Revision: 25312

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25312

Log:
Replace the old-style composite calls.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/userman.c


Changeset:
Sorry, the patch is too large (900 lines) to include; please use WebSVN to see 
it!
WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25312


svn commit: samba r25256 - in branches/SAMBA_4_0/source/libnet: .

2007-09-20 Thread mimir
Author: mimir
Date: 2007-09-20 10:23:02 + (Thu, 20 Sep 2007)
New Revision: 25256

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=25256

Log:
Fix missing field set in libnet_ModifyUser routine.

Submitted by Matthias Dieter Wallnoefer [EMAIL PROTECTED]


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_user.c
   branches/SAMBA_4_0/source/libnet/libnet_user.h


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_user.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_user.c  2007-09-20 09:47:18 UTC 
(rev 25255)
+++ branches/SAMBA_4_0/source/libnet/libnet_user.c  2007-09-20 10:23:02 UTC 
(rev 25256)
@@ -1,7 +1,7 @@
 /* 
Unix SMB/CIFS implementation.

-   Copyright (C) Rafal Szczesniak [EMAIL PROTECTED] 2005
+   Copyright (C) Rafal Szczesniak  2005

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -533,6 +533,9 @@
/* account expiry change */
SET_FIELD_NTTIME(r-in, user, mod, acct_expiry, 
USERMOD_FIELD_ACCT_EXPIRY);
 
+   /* account flags change */
+   SET_FIELD_UINT32(r-in, user, mod, acct_flags, 
USERMOD_FIELD_ACCT_FLAGS);
+
return NT_STATUS_OK;
 }
 

Modified: branches/SAMBA_4_0/source/libnet/libnet_user.h
===
--- branches/SAMBA_4_0/source/libnet/libnet_user.h  2007-09-20 09:47:18 UTC 
(rev 25255)
+++ branches/SAMBA_4_0/source/libnet/libnet_user.h  2007-09-20 10:23:02 UTC 
(rev 25256)
@@ -85,7 +85,13 @@
} \
}
 
+#define SET_FIELD_UINT32(new, current, mod, field, flag) \
+   if (current-field != new.field) { \
+   mod-field = new.field; \
+   mod-fields |= flag; \
+   }
 
+
 struct libnet_UserInfo {
struct {
const char *user_name;



svn commit: samba r24977 - in branches/SAMBA_3_2/source/nsswitch: .

2007-09-06 Thread mimir
Author: mimir
Date: 2007-09-06 11:07:58 + (Thu, 06 Sep 2007)
New Revision: 24977

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24977

Log:
Ensure negative caching for name2sid, sid2name and rids2names
mappings.


rafal


Modified:
   branches/SAMBA_3_2/source/nsswitch/winbindd_cache.c


Changeset:
Modified: branches/SAMBA_3_2/source/nsswitch/winbindd_cache.c
===
--- branches/SAMBA_3_2/source/nsswitch/winbindd_cache.c 2007-09-06 11:07:13 UTC 
(rev 24976)
+++ branches/SAMBA_3_2/source/nsswitch/winbindd_cache.c 2007-09-06 11:07:58 UTC 
(rev 24977)
@@ -353,6 +353,19 @@
return True;
 }
 
+
+/*
+  pull a NTSTATUS from a cache entry
+*/
+static NTSTATUS centry_ntstatus(struct cache_entry *centry)
+{
+   NTSTATUS status;
+
+   status = NT_STATUS(centry_uint32(centry));
+   return status;
+}
+
+
 /* the server is considered down if it can't give us a sequence number */
 static BOOL wcache_server_down(struct winbindd_domain *domain)
 {
@@ -587,7 +600,7 @@
return NULL;
}

-   centry-status = NT_STATUS(centry_uint32(centry));
+   centry-status = centry_ntstatus(centry);
centry-sequence_number = centry_uint32(centry);
 
return centry;
@@ -746,7 +759,18 @@
centry_put_string(centry, sid_to_string(sid_string, sid));
 }
 
+
 /*
+  put NTSTATUS into a centry
+*/
+static void centry_put_ntstatus(struct cache_entry *centry, NTSTATUS status)
+{
+   uint32 status_value = NT_STATUS_V(status);
+   centry_put_uint32(centry, status_value);
+}
+
+
+/*
   push a NTTIME into a centry 
 */
 static void centry_put_nttime(struct cache_entry *centry, NTTIME nt)
@@ -784,7 +808,7 @@
centry-data = SMB_XMALLOC_ARRAY(uint8, centry-len);
centry-ofs = 0;
centry-sequence_number = domain-sequence_number;
-   centry_put_uint32(centry, NT_STATUS_V(status));
+   centry_put_ntstatus(centry, status);
centry_put_uint32(centry, centry-sequence_number);
return centry;
 }
@@ -842,18 +866,16 @@
struct cache_entry *centry;
fstring sid_string;
 
-   if (is_null_sid(sid)) {
-   return;
-   }
-
centry = centry_start(domain, status);
if (!centry)
return;
+
if (NT_STATUS_IS_OK(status)) {
centry_put_uint32(centry, type);
centry_put_string(centry, domain_name);
centry_put_string(centry, name);
}
+
centry_end(centry, SN/%s, sid_to_string(sid_string, sid));
DEBUG(10,(wcache_save_sid_to_name: %s - %s (%s)\n, sid_string, 
  name, nt_errstr(status)));
@@ -1376,9 +1398,10 @@
centry = wcache_fetch(cache, domain, NS/%s/%s, domain_name, uname);
if (!centry)
goto do_query;
-   *type = (enum lsa_SidType)centry_uint32(centry);
+
status = centry-status;
if (NT_STATUS_IS_OK(status)) {
+   *type = (enum lsa_SidType)centry_uint32(centry);
centry_sid(centry, mem_ctx, sid);
}
 
@@ -1411,17 +1434,18 @@
/* and save it */
refresh_sequence_number(domain, False);
 
-   if (domain-online  !is_null_sid(sid)) {
+   if (domain-online 
+   (NT_STATUS_IS_OK(status) || NT_STATUS_EQUAL(status, 
NT_STATUS_NONE_MAPPED))) {
wcache_save_name_to_sid(domain, status, domain_name, name, sid, 
*type);
-   }
 
-   /* Only save the reverse mapping if this was not a UPN */
-   if (NT_STATUS_IS_OK(status)  !strchr(name, '@')) {
-   strupper_m(CONST_DISCARD(char *,domain_name));
-   strlower_m(CONST_DISCARD(char *,name));
-   wcache_save_sid_to_name(domain, status, sid, domain_name, name, 
*type);
+   /* Only save the reverse mapping if this was not a UPN */
+   if (!strchr(name, '@')) {
+   strupper_m(CONST_DISCARD(char *,domain_name));
+   strlower_m(CONST_DISCARD(char *,name));
+   wcache_save_sid_to_name(domain, status, sid, 
domain_name, name, *type);
+   }
}
-
+   
return status;
 }
 
@@ -1445,12 +1469,13 @@
centry = wcache_fetch(cache, domain, SN/%s, sid_to_string(sid_string, 
sid));
if (!centry)
goto do_query;
-   if (NT_STATUS_IS_OK(centry-status)) {
+
+   status = centry-status;
+   if (NT_STATUS_IS_OK(status)) {
*type = (enum lsa_SidType)centry_uint32(centry);
*domain_name = centry_string(centry, mem_ctx);
*name = centry_string(centry, mem_ctx);
}
-   status = centry-status;
 
DEBUG(10,(sid_to_name: [Cached] - cached name for domain %s status: 
%s\n,
domain-name, nt_errstr(status) ));
@@ -1547,15 +1572,23 @@
char *dom;
have_mapped

svn commit: samba r24979 - in branches/SAMBA_3_2_0/source/nsswitch: .

2007-09-06 Thread mimir
Author: mimir
Date: 2007-09-06 12:45:12 + (Thu, 06 Sep 2007)
New Revision: 24979

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24979

Log:
Ensure negative caching for name2sid, sid2name and rids2names
mappings.


rafal


Modified:
   branches/SAMBA_3_2_0/source/nsswitch/winbindd_cache.c


Changeset:
Modified: branches/SAMBA_3_2_0/source/nsswitch/winbindd_cache.c
===
--- branches/SAMBA_3_2_0/source/nsswitch/winbindd_cache.c   2007-09-06 
11:08:44 UTC (rev 24978)
+++ branches/SAMBA_3_2_0/source/nsswitch/winbindd_cache.c   2007-09-06 
12:45:12 UTC (rev 24979)
@@ -353,6 +353,19 @@
return True;
 }
 
+
+/*
+  pull a NTSTATUS from a cache entry
+*/
+static NTSTATUS centry_ntstatus(struct cache_entry *centry)
+{
+   NTSTATUS status;
+
+   status = NT_STATUS(centry_uint32(centry));
+   return status;
+}
+
+
 /* the server is considered down if it can't give us a sequence number */
 static BOOL wcache_server_down(struct winbindd_domain *domain)
 {
@@ -587,7 +600,7 @@
return NULL;
}

-   centry-status = NT_STATUS(centry_uint32(centry));
+   centry-status = centry_ntstatus(centry);
centry-sequence_number = centry_uint32(centry);
 
return centry;
@@ -746,7 +759,18 @@
centry_put_string(centry, sid_to_string(sid_string, sid));
 }
 
+
 /*
+  put NTSTATUS into a centry
+*/
+static void centry_put_ntstatus(struct cache_entry *centry, NTSTATUS status)
+{
+   uint32 status_value = NT_STATUS_V(status);
+   centry_put_uint32(centry, status_value);
+}
+
+
+/*
   push a NTTIME into a centry 
 */
 static void centry_put_nttime(struct cache_entry *centry, NTTIME nt)
@@ -784,7 +808,7 @@
centry-data = SMB_XMALLOC_ARRAY(uint8, centry-len);
centry-ofs = 0;
centry-sequence_number = domain-sequence_number;
-   centry_put_uint32(centry, NT_STATUS_V(status));
+   centry_put_ntstatus(centry, status);
centry_put_uint32(centry, centry-sequence_number);
return centry;
 }
@@ -842,18 +866,16 @@
struct cache_entry *centry;
fstring sid_string;
 
-   if (is_null_sid(sid)) {
-   return;
-   }
-
centry = centry_start(domain, status);
if (!centry)
return;
+
if (NT_STATUS_IS_OK(status)) {
centry_put_uint32(centry, type);
centry_put_string(centry, domain_name);
centry_put_string(centry, name);
}
+
centry_end(centry, SN/%s, sid_to_string(sid_string, sid));
DEBUG(10,(wcache_save_sid_to_name: %s - %s (%s)\n, sid_string, 
  name, nt_errstr(status)));
@@ -1376,9 +1398,10 @@
centry = wcache_fetch(cache, domain, NS/%s/%s, domain_name, uname);
if (!centry)
goto do_query;
-   *type = (enum lsa_SidType)centry_uint32(centry);
+
status = centry-status;
if (NT_STATUS_IS_OK(status)) {
+   *type = (enum lsa_SidType)centry_uint32(centry);
centry_sid(centry, mem_ctx, sid);
}
 
@@ -1411,17 +1434,18 @@
/* and save it */
refresh_sequence_number(domain, False);
 
-   if (domain-online  !is_null_sid(sid)) {
+   if (domain-online 
+   (NT_STATUS_IS_OK(status) || NT_STATUS_EQUAL(status, 
NT_STATUS_NONE_MAPPED))) {
wcache_save_name_to_sid(domain, status, domain_name, name, sid, 
*type);
-   }
 
-   /* Only save the reverse mapping if this was not a UPN */
-   if (NT_STATUS_IS_OK(status)  !strchr(name, '@')) {
-   strupper_m(CONST_DISCARD(char *,domain_name));
-   strlower_m(CONST_DISCARD(char *,name));
-   wcache_save_sid_to_name(domain, status, sid, domain_name, name, 
*type);
+   /* Only save the reverse mapping if this was not a UPN */
+   if (!strchr(name, '@')) {
+   strupper_m(CONST_DISCARD(char *,domain_name));
+   strlower_m(CONST_DISCARD(char *,name));
+   wcache_save_sid_to_name(domain, status, sid, 
domain_name, name, *type);
+   }
}
-
+   
return status;
 }
 
@@ -1445,12 +1469,13 @@
centry = wcache_fetch(cache, domain, SN/%s, sid_to_string(sid_string, 
sid));
if (!centry)
goto do_query;
-   if (NT_STATUS_IS_OK(centry-status)) {
+
+   status = centry-status;
+   if (NT_STATUS_IS_OK(status)) {
*type = (enum lsa_SidType)centry_uint32(centry);
*domain_name = centry_string(centry, mem_ctx);
*name = centry_string(centry, mem_ctx);
}
-   status = centry-status;
 
DEBUG(10,(sid_to_name: [Cached] - cached name for domain %s status: 
%s\n,
domain-name, nt_errstr(status) ));
@@ -1547,15 +1572,23 @@
char *dom

svn commit: samba r24853 - in branches/SAMBA_3_2/source/utils: .

2007-08-31 Thread mimir
Author: mimir
Date: 2007-08-31 21:25:53 + (Fri, 31 Aug 2007)
New Revision: 24853

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24853

Log:
Rename function as Jerry asked.
s/net_use_upn_machine_account/net_use_krb_machine_account/


rafal


Modified:
   branches/SAMBA_3_2/source/utils/net.c
   branches/SAMBA_3_2/source/utils/net_ads.c


Changeset:
Modified: branches/SAMBA_3_2/source/utils/net.c
===
--- branches/SAMBA_3_2/source/utils/net.c   2007-08-31 19:06:30 UTC (rev 
24852)
+++ branches/SAMBA_3_2/source/utils/net.c   2007-08-31 21:25:53 UTC (rev 
24853)
@@ -341,10 +341,10 @@
 }
 
 /
- Use the local machine account (upn) and password for this session.
+ Use the local machine account (krb) and password for this session.
 /
 
-int net_use_upn_machine_account(void) 
+int net_use_krb_machine_account(void) 
 {
char *user_name = NULL;
 
@@ -1066,7 +1066,7 @@
/* it is very useful to be able to make ads queries as the
   machine account for testing purposes and for domain leave */
 
-   net_use_upn_machine_account();
+   net_use_krb_machine_account();
}
 
if (!opt_password) {

Modified: branches/SAMBA_3_2/source/utils/net_ads.c
===
--- branches/SAMBA_3_2/source/utils/net_ads.c   2007-08-31 19:06:30 UTC (rev 
24852)
+++ branches/SAMBA_3_2/source/utils/net_ads.c   2007-08-31 21:25:53 UTC (rev 
24853)
@@ -882,7 +882,7 @@
return NT_STATUS_ACCESS_DENIED;
}
 
-   net_use_upn_machine_account();
+   net_use_krb_machine_account();
 
status = ads_startup(True, ads);
if (!ADS_ERR_OK(status)) {
@@ -2187,7 +2187,7 @@
return -1;
}
 
-   net_use_upn_machine_account();
+   net_use_krb_machine_account();
 
use_in_memory_ccache();
 



svn commit: samba r24854 - in branches/SAMBA_3_2_0/source/utils: .

2007-08-31 Thread mimir
Author: mimir
Date: 2007-08-31 21:43:09 + (Fri, 31 Aug 2007)
New Revision: 24854

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24854

Log:
Rename function as Jerry asked.
s/net_use_upn_machine_account/net_use_krb_machine_account/


rafal


Modified:
   branches/SAMBA_3_2_0/source/utils/net.c
   branches/SAMBA_3_2_0/source/utils/net_ads.c


Changeset:
Modified: branches/SAMBA_3_2_0/source/utils/net.c
===
--- branches/SAMBA_3_2_0/source/utils/net.c 2007-08-31 21:25:53 UTC (rev 
24853)
+++ branches/SAMBA_3_2_0/source/utils/net.c 2007-08-31 21:43:09 UTC (rev 
24854)
@@ -341,10 +341,10 @@
 }
 
 /
- Use the local machine account (upn) and password for this session.
+ Use the local machine account (krb) and password for this session.
 /
 
-int net_use_upn_machine_account(void) 
+int net_use_krb_machine_account(void) 
 {
char *user_name = NULL;
 
@@ -1066,7 +1066,7 @@
/* it is very useful to be able to make ads queries as the
   machine account for testing purposes and for domain leave */
 
-   net_use_upn_machine_account();
+   net_use_krb_machine_account();
}
 
if (!opt_password) {

Modified: branches/SAMBA_3_2_0/source/utils/net_ads.c
===
--- branches/SAMBA_3_2_0/source/utils/net_ads.c 2007-08-31 21:25:53 UTC (rev 
24853)
+++ branches/SAMBA_3_2_0/source/utils/net_ads.c 2007-08-31 21:43:09 UTC (rev 
24854)
@@ -882,7 +882,7 @@
return NT_STATUS_ACCESS_DENIED;
}
 
-   net_use_upn_machine_account();
+   net_use_krb_machine_account();
 
status = ads_startup(True, ads);
if (!ADS_ERR_OK(status)) {
@@ -2187,7 +2187,7 @@
return -1;
}
 
-   net_use_upn_machine_account();
+   net_use_krb_machine_account();
 
use_in_memory_ccache();
 



svn commit: samba r24770 - in branches/SAMBA_3_0/source: rpc_parse utils

2007-08-29 Thread mimir
Author: mimir
Date: 2007-08-29 10:42:53 + (Wed, 29 Aug 2007)
New Revision: 24770

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24770

Log:
Use infolevel 25 to set the machine account's password (just like winxp).
This correctly updates pwdLastSet field on win2k3 server.


rafal


Modified:
   branches/SAMBA_3_0/source/rpc_parse/parse_samr.c
   branches/SAMBA_3_0/source/utils/net_domain.c


Changeset:
Modified: branches/SAMBA_3_0/source/rpc_parse/parse_samr.c
===
--- branches/SAMBA_3_0/source/rpc_parse/parse_samr.c2007-08-29 10:12:43 UTC 
(rev 24769)
+++ branches/SAMBA_3_0/source/rpc_parse/parse_samr.c2007-08-29 10:42:53 UTC 
(rev 24770)
@@ -5940,6 +5940,25 @@
}
 }
 
+
+/*
+ init_samr_user_info25P
+ fields_present = ACCT_NT_PWD_SET | ACCT_LM_PWD_SET | ACCT_FLAGS
+*/
+
+void init_sam_user_info25P(SAM_USER_INFO_25 * usr,
+  uint32 fields_present, uint32 acb_info,
+  char newpass[532])
+{
+   usr-fields_present = fields_present;
+   ZERO_STRUCT(usr-padding1);
+   ZERO_STRUCT(usr-padding2);
+
+   usr-acb_info = acb_info;
+   memcpy(usr-pass, newpass, sizeof(usr-pass));
+}
+
+
 /***
 reads or writes a structure.
 /

Modified: branches/SAMBA_3_0/source/utils/net_domain.c
===
--- branches/SAMBA_3_0/source/utils/net_domain.c2007-08-29 10:12:43 UTC 
(rev 24769)
+++ branches/SAMBA_3_0/source/utils/net_domain.c2007-08-29 10:42:53 UTC 
(rev 24770)
@@ -209,10 +209,14 @@
uint32 num_rids, *name_types, *user_rids;
uint32 flags = 0x3e8;
uint32 acb_info = ACB_WSTRUST;
-   uchar pwbuf[516];
+   uint32 fields_present;
+   uchar pwbuf[532];
SAM_USERINFO_CTR ctr;
-   SAM_USER_INFO_24 p24;
-   SAM_USER_INFO_16 p16;
+   SAM_USER_INFO_25 p25;
+   const int infolevel = 25;
+   struct MD5Context md5ctx;
+   uchar md5buffer[16];
+   DATA_BLOB digested_session_key;
uchar md4_trust_password[16];
 
/* Open the domain */
@@ -283,24 +287,49 @@
 
status = rpccli_samr_open_user(pipe_hnd, mem_ctx, domain_pol,
SEC_RIGHTS_MAXIMUM_ALLOWED, user_rid, user_pol);
+   if (!NT_STATUS_IS_OK(status)) {
+   return status;
+   }

-   /* Create a random machine account password */
+   /* Create a random machine account password and generate the hash */
 
-   E_md4hash( clear_pw, md4_trust_password);
+   E_md4hash(clear_pw, md4_trust_password);
encode_pw_buffer(pwbuf, clear_pw, STR_UNICODE);
+   
+   generate_random_buffer((uint8*)md5buffer, sizeof(md5buffer));
+   digested_session_key = data_blob_talloc(mem_ctx, 0, 16);
+   
+   MD5Init(md5ctx);
+   MD5Update(md5ctx, md5buffer, sizeof(md5buffer));
+   MD5Update(md5ctx, cli-user_session_key.data, 
cli-user_session_key.length);
+   MD5Final(digested_session_key.data, md5ctx);
+   
+   SamOEMhashBlob(pwbuf, sizeof(pwbuf), digested_session_key);
+   memcpy(pwbuf[516], md5buffer, sizeof(md5buffer));
 
-   /* Set password on machine account */
+   /* Fill in the additional account flags now */
 
+   acb_info |= ACB_PWNOEXP;
+   if ( dom_type == ND_TYPE_AD ) {
+#if !defined(ENCTYPE_ARCFOUR_HMAC)
+   acb_info |= ACB_USE_DES_KEY_ONLY;
+#endif
+   ;;
+   }
+
+   /* Set password and account flags on machine account */
+
ZERO_STRUCT(ctr);
-   ZERO_STRUCT(p24);
+   ZERO_STRUCT(p25);
 
-   init_sam_user_info24(p24, (char *)pwbuf,24);
+   fields_present = ACCT_NT_PWD_SET | ACCT_LM_PWD_SET | ACCT_FLAGS;
+   init_sam_user_info25P(p25, fields_present, acb_info, (char *)pwbuf);
 
-   ctr.switch_value = 24;
-   ctr.info.id24 = p24;
+   ctr.switch_value = infolevel;
+   ctr.info.id25= p25;
 
-   status = rpccli_samr_set_userinfo(pipe_hnd, mem_ctx, user_pol, 
-   24, cli-user_session_key, ctr);
+   status = rpccli_samr_set_userinfo2(pipe_hnd, mem_ctx, user_pol,
+  infolevel, cli-user_session_key, 
ctr);
 
if ( !NT_STATUS_IS_OK(status) ) {
d_fprintf( stderr, Failed to set password for machine account 
(%s)\n, 
@@ -308,35 +337,6 @@
return status;
}
 
-
-   /* Why do we have to try to (re-)set the ACB to be the same as what
-  we passed in the samr_create_dom_user() call?  When a NT
-  workstation is joined to a domain by an administrator the
-  acb_info

svn commit: samba r24771 - in branches/SAMBA_3_2/source: rpc_parse utils

2007-08-29 Thread mimir
Author: mimir
Date: 2007-08-29 11:02:04 + (Wed, 29 Aug 2007)
New Revision: 24771

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24771

Log:
Use infolevel 25 to set the machine account's password (just like winxp).
This correctly updates pwdLastSet field on win2k3 server.


rafal


Modified:
   branches/SAMBA_3_2/source/rpc_parse/parse_samr.c
   branches/SAMBA_3_2/source/utils/net_domain.c


Changeset:
Modified: branches/SAMBA_3_2/source/rpc_parse/parse_samr.c
===
--- branches/SAMBA_3_2/source/rpc_parse/parse_samr.c2007-08-29 10:42:53 UTC 
(rev 24770)
+++ branches/SAMBA_3_2/source/rpc_parse/parse_samr.c2007-08-29 11:02:04 UTC 
(rev 24771)
@@ -5930,6 +5930,25 @@
}
 }
 
+
+/*
+ init_samr_user_info25P
+ fields_present = ACCT_NT_PWD_SET | ACCT_LM_PWD_SET | ACCT_FLAGS
+*/
+
+void init_sam_user_info25P(SAM_USER_INFO_25 * usr,
+  uint32 fields_present, uint32 acb_info,
+  char newpass[532])
+{
+   usr-fields_present = fields_present;
+   ZERO_STRUCT(usr-padding1);
+   ZERO_STRUCT(usr-padding2);
+
+   usr-acb_info = acb_info;
+   memcpy(usr-pass, newpass, sizeof(usr-pass));
+}
+
+
 /***
 reads or writes a structure.
 /

Modified: branches/SAMBA_3_2/source/utils/net_domain.c
===
--- branches/SAMBA_3_2/source/utils/net_domain.c2007-08-29 10:42:53 UTC 
(rev 24770)
+++ branches/SAMBA_3_2/source/utils/net_domain.c2007-08-29 11:02:04 UTC 
(rev 24771)
@@ -208,10 +208,14 @@
uint32 num_rids, *name_types, *user_rids;
uint32 flags = 0x3e8;
uint32 acb_info = ACB_WSTRUST;
-   uchar pwbuf[516];
+   uint32 fields_present;
+   uchar pwbuf[532];
SAM_USERINFO_CTR ctr;
-   SAM_USER_INFO_24 p24;
-   SAM_USER_INFO_16 p16;
+   SAM_USER_INFO_25 p25;
+   const int infolevel = 25;
+   struct MD5Context md5ctx;
+   uchar md5buffer[16];
+   DATA_BLOB digested_session_key;
uchar md4_trust_password[16];
 
/* Open the domain */
@@ -282,24 +286,49 @@
 
status = rpccli_samr_open_user(pipe_hnd, mem_ctx, domain_pol,
SEC_RIGHTS_MAXIMUM_ALLOWED, user_rid, user_pol);
+   if (!NT_STATUS_IS_OK(status)) {
+   return status;
+   }

-   /* Create a random machine account password */
+   /* Create a random machine account password and generate the hash */
 
-   E_md4hash( clear_pw, md4_trust_password);
+   E_md4hash(clear_pw, md4_trust_password);
encode_pw_buffer(pwbuf, clear_pw, STR_UNICODE);
+   
+   generate_random_buffer((uint8*)md5buffer, sizeof(md5buffer));
+   digested_session_key = data_blob_talloc(mem_ctx, 0, 16);
+   
+   MD5Init(md5ctx);
+   MD5Update(md5ctx, md5buffer, sizeof(md5buffer));
+   MD5Update(md5ctx, cli-user_session_key.data, 
cli-user_session_key.length);
+   MD5Final(digested_session_key.data, md5ctx);
+   
+   SamOEMhashBlob(pwbuf, sizeof(pwbuf), digested_session_key);
+   memcpy(pwbuf[516], md5buffer, sizeof(md5buffer));
 
-   /* Set password on machine account */
+   /* Fill in the additional account flags now */
 
+   acb_info |= ACB_PWNOEXP;
+   if ( dom_type == ND_TYPE_AD ) {
+#if !defined(ENCTYPE_ARCFOUR_HMAC)
+   acb_info |= ACB_USE_DES_KEY_ONLY;
+#endif
+   ;;
+   }
+
+   /* Set password and account flags on machine account */
+
ZERO_STRUCT(ctr);
-   ZERO_STRUCT(p24);
+   ZERO_STRUCT(p25);
 
-   init_sam_user_info24(p24, (char *)pwbuf,24);
+   fields_present = ACCT_NT_PWD_SET | ACCT_LM_PWD_SET | ACCT_FLAGS;
+   init_sam_user_info25P(p25, fields_present, acb_info, (char *)pwbuf);
 
-   ctr.switch_value = 24;
-   ctr.info.id24 = p24;
+   ctr.switch_value = infolevel;
+   ctr.info.id25= p25;
 
-   status = rpccli_samr_set_userinfo(pipe_hnd, mem_ctx, user_pol, 
-   24, cli-user_session_key, ctr);
+   status = rpccli_samr_set_userinfo2(pipe_hnd, mem_ctx, user_pol,
+  infolevel, cli-user_session_key, 
ctr);
 
if ( !NT_STATUS_IS_OK(status) ) {
d_fprintf( stderr, Failed to set password for machine account 
(%s)\n, 
@@ -307,35 +336,6 @@
return status;
}
 
-
-   /* Why do we have to try to (re-)set the ACB to be the same as what
-  we passed in the samr_create_dom_user() call?  When a NT
-  workstation is joined to a domain by an administrator the
-  acb_info

svn commit: samba r24789 - in branches/SAMBA_3_2/source/utils: .

2007-08-29 Thread mimir
Author: mimir
Date: 2007-08-29 19:55:13 + (Wed, 29 Aug 2007)
New Revision: 24789

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24789

Log:
Add implementation of machine-authenticated connection to netlogon
pipe used when connecting to win2k and newer domain controllers. The
server may be configured to deny anonymous netlogon connections which
would stop domain join verification step. Still, winnt domains require
such smb sessions not to be authenticated using machine credentials.
Creds employed in smb session cannot have a username in upn form, so
provide the separate function to use machine account.


rafal


Modified:
   branches/SAMBA_3_2/source/utils/net.c
   branches/SAMBA_3_2/source/utils/net_ads.c
   branches/SAMBA_3_2/source/utils/net_rpc_join.c


Changeset:
Modified: branches/SAMBA_3_2/source/utils/net.c
===
--- branches/SAMBA_3_2/source/utils/net.c   2007-08-29 19:03:20 UTC (rev 
24788)
+++ branches/SAMBA_3_2/source/utils/net.c   2007-08-29 19:55:13 UTC (rev 
24789)
@@ -341,10 +341,10 @@
 }
 
 /
- Use the local machine's password for this session.
+ Use the local machine account (upn) and password for this session.
 /
 
-int net_use_machine_password(void) 
+int net_use_upn_machine_account(void) 
 {
char *user_name = NULL;
 
@@ -353,7 +353,6 @@
exit(1);
}
 
-   user_name = NULL;
opt_password = secrets_fetch_machine_password(opt_target_workgroup, 
NULL, NULL);
if (asprintf(user_name, [EMAIL PROTECTED], global_myname(), 
lp_realm()) == -1) {
return -1;
@@ -362,6 +361,27 @@
return 0;
 }
 
+/
+ Use the machine account name and password for this session.
+/
+
+int net_use_machine_account(void)
+{
+   char *user_name = NULL;
+   
+   if (!secrets_init()) {
+   d_fprintf(stderr, ERROR: Unable to open secrets database\n);
+   exit(1);
+   }
+
+   opt_password = secrets_fetch_machine_password(opt_target_workgroup, 
NULL, NULL);
+   if (asprintf(user_name, %s$, global_myname()) == -1) {
+   return -1;
+   }
+   opt_user_name = user_name;
+   return 0;
+}
+
 BOOL net_find_server(const char *domain, unsigned flags, struct in_addr 
*server_ip, char **server_name)
 {
const char *d = domain ? domain : opt_target_workgroup;
@@ -1044,7 +1064,7 @@
/* it is very useful to be able to make ads queries as the
   machine account for testing purposes and for domain leave */
 
-   net_use_machine_password();
+   net_use_upn_machine_account();
}
 
if (!opt_password) {

Modified: branches/SAMBA_3_2/source/utils/net_ads.c
===
--- branches/SAMBA_3_2/source/utils/net_ads.c   2007-08-29 19:03:20 UTC (rev 
24788)
+++ branches/SAMBA_3_2/source/utils/net_ads.c   2007-08-29 19:55:13 UTC (rev 
24789)
@@ -882,7 +882,7 @@
return NT_STATUS_ACCESS_DENIED;
}
 
-   net_use_machine_password();
+   net_use_upn_machine_account();
 
status = ads_startup(True, ads);
if (!ADS_ERR_OK(status)) {
@@ -2187,7 +2187,7 @@
return -1;
}
 
-   net_use_machine_password();
+   net_use_upn_machine_account();
 
use_in_memory_ccache();
 

Modified: branches/SAMBA_3_2/source/utils/net_rpc_join.c
===
--- branches/SAMBA_3_2/source/utils/net_rpc_join.c  2007-08-29 19:03:20 UTC 
(rev 24788)
+++ branches/SAMBA_3_2/source/utils/net_rpc_join.c  2007-08-29 19:55:13 UTC 
(rev 24789)
@@ -42,14 +42,29 @@
  **/
 int net_rpc_join_ok(const char *domain, const char *server, struct in_addr *ip 
)
 {
+   enum security_types sec;
+   unsigned int conn_flags = NET_FLAGS_PDC;
uint32 neg_flags = NETLOGON_NEG_AUTH2_FLAGS|NETLOGON_NEG_SCHANNEL;
struct cli_state *cli = NULL;
struct rpc_pipe_client *pipe_hnd = NULL;
struct rpc_pipe_client *netlogon_pipe = NULL;
NTSTATUS ntret = NT_STATUS_UNSUCCESSFUL;
 
+   sec = (enum security_types)lp_security();
+
+   if (sec == SEC_ADS) {
+   /* Connect to IPC$ using machine account's credentials. We 
don't use anonymous
+  connection here, as it may be denied by server's local 
policy. */
+   net_use_machine_account();
+
+   } else {
+   /* some servers (e.g. WinNT) don't accept machine-authenticated
+  smb connections */
+   conn_flags

svn commit: samba r24792 - in branches/SAMBA_3_2_0/source/utils: .

2007-08-29 Thread mimir
Author: mimir
Date: 2007-08-29 20:53:09 + (Wed, 29 Aug 2007)
New Revision: 24792

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24792

Log:
Merge from 3_2:

Add machine-authenticated connections to netlogon pipe of win2k and newer
(which may have anonymous connections restricted) and leave anonymous
for winnt domain.


rafal


Modified:
   branches/SAMBA_3_2_0/source/utils/net.c
   branches/SAMBA_3_2_0/source/utils/net_ads.c
   branches/SAMBA_3_2_0/source/utils/net_rpc_join.c


Changeset:
Modified: branches/SAMBA_3_2_0/source/utils/net.c
===
--- branches/SAMBA_3_2_0/source/utils/net.c 2007-08-29 20:49:09 UTC (rev 
24791)
+++ branches/SAMBA_3_2_0/source/utils/net.c 2007-08-29 20:53:09 UTC (rev 
24792)
@@ -341,10 +341,10 @@
 }
 
 /
- Use the local machine's password for this session.
+ Use the local machine account (upn) and password for this session.
 /
 
-int net_use_machine_password(void) 
+int net_use_upn_machine_account(void) 
 {
char *user_name = NULL;
 
@@ -353,7 +353,6 @@
exit(1);
}
 
-   user_name = NULL;
opt_password = secrets_fetch_machine_password(opt_target_workgroup, 
NULL, NULL);
if (asprintf(user_name, [EMAIL PROTECTED], global_myname(), 
lp_realm()) == -1) {
return -1;
@@ -362,6 +361,27 @@
return 0;
 }
 
+/
+ Use the machine account name and password for this session.
+/
+
+int net_use_machine_account(void)
+{
+   char *user_name = NULL;
+   
+   if (!secrets_init()) {
+   d_fprintf(stderr, ERROR: Unable to open secrets database\n);
+   exit(1);
+   }
+
+   opt_password = secrets_fetch_machine_password(opt_target_workgroup, 
NULL, NULL);
+   if (asprintf(user_name, %s$, global_myname()) == -1) {
+   return -1;
+   }
+   opt_user_name = user_name;
+   return 0;
+}
+
 BOOL net_find_server(const char *domain, unsigned flags, struct in_addr 
*server_ip, char **server_name)
 {
const char *d = domain ? domain : opt_target_workgroup;
@@ -1044,7 +1064,7 @@
/* it is very useful to be able to make ads queries as the
   machine account for testing purposes and for domain leave */
 
-   net_use_machine_password();
+   net_use_upn_machine_account();
}
 
if (!opt_password) {

Modified: branches/SAMBA_3_2_0/source/utils/net_ads.c
===
--- branches/SAMBA_3_2_0/source/utils/net_ads.c 2007-08-29 20:49:09 UTC (rev 
24791)
+++ branches/SAMBA_3_2_0/source/utils/net_ads.c 2007-08-29 20:53:09 UTC (rev 
24792)
@@ -882,7 +882,7 @@
return NT_STATUS_ACCESS_DENIED;
}
 
-   net_use_machine_password();
+   net_use_upn_machine_account();
 
status = ads_startup(True, ads);
if (!ADS_ERR_OK(status)) {
@@ -2187,7 +2187,7 @@
return -1;
}
 
-   net_use_machine_password();
+   net_use_upn_machine_account();
 
use_in_memory_ccache();
 

Modified: branches/SAMBA_3_2_0/source/utils/net_rpc_join.c
===
--- branches/SAMBA_3_2_0/source/utils/net_rpc_join.c2007-08-29 20:49:09 UTC 
(rev 24791)
+++ branches/SAMBA_3_2_0/source/utils/net_rpc_join.c2007-08-29 20:53:09 UTC 
(rev 24792)
@@ -42,14 +42,29 @@
  **/
 int net_rpc_join_ok(const char *domain, const char *server, struct in_addr *ip 
)
 {
+   enum security_types sec;
+   unsigned int conn_flags = NET_FLAGS_PDC;
uint32 neg_flags = NETLOGON_NEG_AUTH2_FLAGS|NETLOGON_NEG_SCHANNEL;
struct cli_state *cli = NULL;
struct rpc_pipe_client *pipe_hnd = NULL;
struct rpc_pipe_client *netlogon_pipe = NULL;
NTSTATUS ntret = NT_STATUS_UNSUCCESSFUL;
 
+   sec = (enum security_types)lp_security();
+
+   if (sec == SEC_ADS) {
+   /* Connect to IPC$ using machine account's credentials. We 
don't use anonymous
+  connection here, as it may be denied by server's local 
policy. */
+   net_use_machine_account();
+
+   } else {
+   /* some servers (e.g. WinNT) don't accept machine-authenticated
+  smb connections */
+   conn_flags |= NET_FLAGS_ANONYMOUS;
+   }
+
/* Connect to remote machine */
-   if (!(cli = net_make_ipc_connection_ex(domain, server, ip, 
(NET_FLAGS_ANONYMOUS|NET_FLAGS_PDC {
+   if (!(cli = net_make_ipc_connection_ex(domain, server, ip, 
conn_flags))) {
return -1;
}
 



svn commit: samba r24732 - in branches/SAMBA_4_0/source/libnet: .

2007-08-28 Thread mimir
Author: mimir
Date: 2007-08-28 09:57:47 + (Tue, 28 Aug 2007)
New Revision: 24732

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24732

Log:
Add comments and fix memory leak.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_group.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_group.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_group.c 2007-08-28 05:43:26 UTC 
(rev 24731)
+++ branches/SAMBA_4_0/source/libnet/libnet_group.c 2007-08-28 09:57:47 UTC 
(rev 24732)
@@ -41,7 +41,15 @@
 static void continue_name_found(struct composite_context *ctx);
 static void continue_group_info(struct composite_context *ctx);
 
-
+/**
+ * Sends request to get group information
+ *
+ * @param ctx initialised libnet context
+ * @param mem_ctx memory context of this call
+ * @param io pointer to structure containing arguments the call
+ * @param monitor function pointer for receiving monitor messages
+ * @return composite context of this request
+ */
 struct composite_context* libnet_GroupInfo_send(struct libnet_context *ctx,
TALLOC_CTX *mem_ctx,
struct libnet_GroupInfo *io,
@@ -61,9 +69,9 @@
 
c-private_data = s;
 
+   /* store arguments in the state structure */
s-monitor_fn = monitor;
-   s-ctx = ctx;
-   
+   s-ctx = ctx;   
s-domain_name = talloc_strdup(c, io-in.domain_name);
s-group_name  = talloc_strdup(c, io-in.group_name);
 
@@ -71,18 +79,24 @@
prereq_met = samr_domain_opened(ctx, s-domain_name, c, s-domopen,
continue_domain_open_info, monitor);
if (!prereq_met) return c;
-
+   
+   /* prepare arguments for LookupName call */
s-lookup.in.name= s-group_name;
s-lookup.in.domain_name = s-domain_name;
 
+   /* send the request */
lookup_req = libnet_LookupName_send(s-ctx, c, s-lookup, 
s-monitor_fn);
if (composite_nomem(lookup_req, c)) return c;
 
+   /* set the next stage */
composite_continue(c, lookup_req, continue_name_found, c);
return c;
 }
 
 
+/*
+ * Stage 0.5 (optional): receive opened domain and send lookup name request
+ */
 static void continue_domain_open_info(struct composite_context *ctx)
 {
struct composite_context *c;
@@ -92,19 +106,26 @@
c = talloc_get_type(ctx-async.private_data, struct composite_context);
s = talloc_get_type(c-private_data, struct group_info_state);

+   /* receive domain handle */
c-status = libnet_DomainOpen_recv(ctx, s-ctx, c, s-domopen);
if (!composite_is_ok(c)) return;
 
+   /* prepare arguments for LookupName call */
s-lookup.in.name= s-group_name;
s-lookup.in.domain_name = s-domain_name;
-   
+
+   /* send the request */
lookup_req = libnet_LookupName_send(s-ctx, c, s-lookup, 
s-monitor_fn);
if (composite_nomem(lookup_req, c)) return;

+   /* set the next stage */
composite_continue(c, lookup_req, continue_name_found, c);
 }
 
 
+/*
+ * Stage 1: Receive SID found and send request for group info
+ */
 static void continue_name_found(struct composite_context *ctx)
 {
struct composite_context *c;
@@ -113,27 +134,36 @@
 
c = talloc_get_type(ctx-async.private_data, struct composite_context);
s = talloc_get_type(c-private_data, struct group_info_state);
-   
+
+   /* receive SID assiociated with name found */
c-status = libnet_LookupName_recv(ctx, c, s-lookup);
if (!composite_is_ok(c)) return;
-
+   
+   /* Is is a group SID actually ? */
if (s-lookup.out.sid_type != SID_NAME_DOM_GRP 
s-lookup.out.sid_type != SID_NAME_ALIAS) {
composite_error(c, NT_STATUS_NO_SUCH_GROUP);
}
 
+   /* prepare arguments for groupinfo call */
s-info.in.domain_handle = s-ctx-samr.handle;
s-info.in.groupname = s-group_name;
s-info.in.sid   = s-lookup.out.sidstr;
+   /* we're looking for all information available */
s-info.in.level = GROUPINFOALL;
-   
+
+   /* send the request */
info_req = libnet_rpc_groupinfo_send(s-ctx-samr.pipe, s-info, 
s-monitor_fn);
if (composite_nomem(info_req, c)) return;
 
+   /* set the next stage */
composite_continue(c, info_req, continue_group_info, c);
 }
 
 
+/*
+ * Stage 2: Receive group information
+ */
 static void continue_group_info(struct composite_context *ctx)
 {
struct composite_context *c;
@@ -142,13 +172,23 @@
c = talloc_get_type(ctx-async.private_data, struct composite_context);
s = talloc_get_type(c-private_data, struct group_info_state);
 
+   /* receive group information */
c-status = libnet_rpc_groupinfo_recv

svn commit: samba r24679 - in branches/SAMBA_4_0/source/libnet: .

2007-08-26 Thread mimir
Author: mimir
Date: 2007-08-26 20:25:39 + (Sun, 26 Aug 2007)
New Revision: 24679

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24679

Log:
Add (raw and untested) implementation of libnet_GroupInfo function.


rafal


Added:
   branches/SAMBA_4_0/source/libnet/libnet_group.c
   branches/SAMBA_4_0/source/libnet/libnet_group.h
Modified:
   branches/SAMBA_4_0/source/libnet/config.mk
   branches/SAMBA_4_0/source/libnet/libnet.h


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/config.mk
===
--- branches/SAMBA_4_0/source/libnet/config.mk  2007-08-26 20:14:28 UTC (rev 
24678)
+++ branches/SAMBA_4_0/source/libnet/config.mk  2007-08-26 20:25:39 UTC (rev 
24679)
@@ -21,6 +21,7 @@
libnet_samdump_keytab.o \
libnet_samsync_ldb.o \
libnet_user.o \
+   libnet_group.o \
libnet_share.o \
libnet_lookup.o \
libnet_domain.o \

Modified: branches/SAMBA_4_0/source/libnet/libnet.h
===
--- branches/SAMBA_4_0/source/libnet/libnet.h   2007-08-26 20:14:28 UTC (rev 
24678)
+++ branches/SAMBA_4_0/source/libnet/libnet.h   2007-08-26 20:25:39 UTC (rev 
24679)
@@ -65,6 +65,7 @@
 #include libnet/libnet_unbecome_dc.h
 #include libnet/libnet_vampire.h
 #include libnet/libnet_user.h
+#include libnet/libnet_group.h
 #include libnet/libnet_share.h
 #include libnet/libnet_lookup.h
 #include libnet/libnet_domain.h

Added: branches/SAMBA_4_0/source/libnet/libnet_group.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_group.c 2007-08-26 20:14:28 UTC 
(rev 24678)
+++ branches/SAMBA_4_0/source/libnet/libnet_group.c 2007-08-26 20:25:39 UTC 
(rev 24679)
@@ -0,0 +1,179 @@
+/* 
+   Unix SMB/CIFS implementation.
+   
+   Copyright (C) Rafal Szczesniak  2007
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see http://www.gnu.org/licenses/.
+*/
+
+
+#include includes.h
+#include libnet/libnet.h
+#include libcli/composite/composite.h
+#include librpc/gen_ndr/lsa.h
+
+
+struct group_info_state {
+   struct libnet_context *ctx;
+   const char *domain_name;
+   const char *group_name;
+   struct libnet_LookupName lookup;
+   struct libnet_DomainOpen domopen;
+   struct libnet_rpc_groupinfo info;
+   
+   /* information about the progress */
+   void (*monitor_fn)(struct monitor_msg *);
+};
+
+
+static void continue_domain_open_info(struct composite_context *ctx);
+static void continue_name_found(struct composite_context *ctx);
+static void composite_group_info(struct composite_context *ctx);
+
+
+struct composite_context* libnet_GroupInfo_send(struct libnet_context *ctx,
+   TALLOC_CTX *mem_ctx,
+   struct libnet_GroupInfo *io,
+   void (*monitor)(struct 
monitor_msg*))
+{
+   struct composite_context *c;
+   struct group_info_state *s;
+   BOOL prereq_met = False;
+   struct composite_context *lookup_req;
+
+   /* composite context allocation and setup */
+   c = composite_create(mem_ctx, ctx-event_ctx);
+   if (c == NULL) return NULL;
+
+   s = talloc_zero(c, struct group_info_state);
+   if (composite_nomem(s, c)) return c;
+
+   c-private_data = s;
+
+   s-monitor_fn = monitor;
+   s-ctx = ctx;
+   
+   s-domain_name = talloc_strdup(c, io-in.domain_name);
+   s-group_name  = talloc_strdup(c, io-in.group_name);
+
+   /* prerequisite: make sure the domain is opened */
+   prereq_met = samr_domain_opened(ctx, s-domain_name, c, s-domopen,
+   continue_domain_open_info, monitor);
+   if (!prereq_met) return c;
+
+   s-lookup.in.name= s-group_name;
+   s-lookup.in.domain_name = s-domain_name;
+
+   lookup_req = libnet_LookupName_send(s-ctx, c, s-lookup, 
s-monitor_fn);
+   if (!composite_nomem(s, c)) return c;
+
+   composite_continue(c, lookup_req, continue_name_found, c);
+   return c;
+}
+
+
+static void continue_domain_open_info(struct composite_context *ctx)
+{
+   struct composite_context *c;
+   struct group_info_state *s

svn commit: samba r24680 - in branches/SAMBA_4_0/source/libnet: .

2007-08-26 Thread mimir
Author: mimir
Date: 2007-08-26 21:47:16 + (Sun, 26 Aug 2007)
New Revision: 24680

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24680

Log:
fix a couple of stupid typos from previous commit.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_group.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_group.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_group.c 2007-08-26 20:25:39 UTC 
(rev 24679)
+++ branches/SAMBA_4_0/source/libnet/libnet_group.c 2007-08-26 21:47:16 UTC 
(rev 24680)
@@ -39,7 +39,7 @@
 
 static void continue_domain_open_info(struct composite_context *ctx);
 static void continue_name_found(struct composite_context *ctx);
-static void composite_group_info(struct composite_context *ctx);
+static void continue_group_info(struct composite_context *ctx);
 
 
 struct composite_context* libnet_GroupInfo_send(struct libnet_context *ctx,
@@ -76,7 +76,7 @@
s-lookup.in.domain_name = s-domain_name;
 
lookup_req = libnet_LookupName_send(s-ctx, c, s-lookup, 
s-monitor_fn);
-   if (!composite_nomem(s, c)) return c;
+   if (composite_nomem(lookup_req, c)) return c;
 
composite_continue(c, lookup_req, continue_name_found, c);
return c;
@@ -99,7 +99,7 @@
s-lookup.in.domain_name = s-domain_name;

lookup_req = libnet_LookupName_send(s-ctx, c, s-lookup, 
s-monitor_fn);
-   if (!composite_nomem(s, c)) return;
+   if (composite_nomem(lookup_req, c)) return;

composite_continue(c, lookup_req, continue_name_found, c);
 }
@@ -117,7 +117,7 @@
c-status = libnet_LookupName_recv(ctx, c, s-lookup);
if (!composite_is_ok(c)) return;
 
-   if (s-lookup.out.sid_type != SID_NAME_DOM_GRP ||
+   if (s-lookup.out.sid_type != SID_NAME_DOM_GRP 
s-lookup.out.sid_type != SID_NAME_ALIAS) {
composite_error(c, NT_STATUS_NO_SUCH_GROUP);
}
@@ -130,11 +130,11 @@
info_req = libnet_rpc_groupinfo_send(s-ctx-samr.pipe, s-info, 
s-monitor_fn);
if (composite_nomem(info_req, c)) return;
 
-   composite_continue(c, info_req, composite_group_info, c);
+   composite_continue(c, info_req, continue_group_info, c);
 }
 
 
-static void composite_group_info(struct composite_context *ctx)
+static void continue_group_info(struct composite_context *ctx)
 {
struct composite_context *c;
struct group_info_state *s;



svn commit: samba r24681 - in branches/SAMBA_4_0/source/torture/libnet: .

2007-08-26 Thread mimir
Author: mimir
Date: 2007-08-26 21:48:26 + (Sun, 26 Aug 2007)
New Revision: 24681

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24681

Log:
add basic test of libnet_GroupInfo function.


rafal


Added:
   branches/SAMBA_4_0/source/torture/libnet/libnet_group.c
Modified:
   branches/SAMBA_4_0/source/torture/libnet/libnet.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/libnet/libnet.c
===
--- branches/SAMBA_4_0/source/torture/libnet/libnet.c   2007-08-26 21:47:16 UTC 
(rev 24680)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet.c   2007-08-26 21:48:26 UTC 
(rev 24681)
@@ -40,6 +40,7 @@
torture_suite_add_simple_test(suite, API-MODIFYUSER, 
torture_modifyuser);
torture_suite_add_simple_test(suite, API-USERINFO, 
torture_userinfo_api);
torture_suite_add_simple_test(suite, API-USERLIST, torture_userlist);
+   torture_suite_add_simple_test(suite, API-GROUPINFO, 
torture_groupinfo_api);
torture_suite_add_simple_test(suite, API-RPCCONN-BIND, 
torture_rpc_connect_binding);
torture_suite_add_simple_test(suite, API-RPCCONN-SRV, 
torture_rpc_connect_srv);
torture_suite_add_simple_test(suite, API-RPCCONN-PDC, 
torture_rpc_connect_pdc);

Added: branches/SAMBA_4_0/source/torture/libnet/libnet_group.c
===
--- branches/SAMBA_4_0/source/torture/libnet/libnet_group.c 2007-08-26 
21:47:16 UTC (rev 24680)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet_group.c 2007-08-26 
21:48:26 UTC (rev 24681)
@@ -0,0 +1,272 @@
+/* 
+   Unix SMB/CIFS implementation.
+   Test suite for libnet calls.
+
+   Copyright (C) Rafal Szczesniak  2007
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see http://www.gnu.org/licenses/.
+*/
+
+
+#include includes.h
+#include lib/cmdline/popt_common.h
+#include libnet/libnet.h
+#include librpc/gen_ndr/ndr_samr_c.h
+#include librpc/gen_ndr/ndr_lsa_c.h
+#include torture/torture.h
+#include torture/rpc/rpc.h
+
+
+#define TEST_GROUPNAME  libnetgrouptest
+
+
+static BOOL test_cleanup(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+struct policy_handle *domain_handle, const char 
*groupname)
+{
+   NTSTATUS status;
+   struct samr_LookupNames r1;
+   struct samr_OpenGroup r2;
+   struct samr_DeleteDomainGroup r3;
+   struct lsa_String names[2];
+   uint32_t rid;
+   struct policy_handle group_handle;
+
+   names[0].string = groupname;
+
+   r1.in.domain_handle  = domain_handle;
+   r1.in.num_names  = 1;
+   r1.in.names  = names;
+   
+   printf(group account lookup '%s'\n, groupname);
+
+   status = dcerpc_samr_LookupNames(p, mem_ctx, r1);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(LookupNames failed - %s\n, nt_errstr(status));
+   return False;
+   }
+
+   rid = r1.out.rids.ids[0];
+   
+   r2.in.domain_handle  = domain_handle;
+   r2.in.access_mask= SEC_FLAG_MAXIMUM_ALLOWED;
+   r2.in.rid= rid;
+   r2.out.group_handle  = group_handle;
+
+   printf(opening group account\n);
+
+   status = dcerpc_samr_OpenGroup(p, mem_ctx, r2);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(OpenGroup failed - %s\n, nt_errstr(status));
+   return False;
+   }
+
+   r3.in.group_handle  = group_handle;
+   r3.out.group_handle = group_handle;
+
+   printf(deleting group account\n);
+   
+   status = dcerpc_samr_DeleteDomainGroup(p, mem_ctx, r3);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(DeleteGroup failed - %s\n, nt_errstr(status));
+   return False;
+   }
+
+   return True;
+}
+
+
+static BOOL test_creategroup(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+struct policy_handle *handle, const char *name)
+{
+   NTSTATUS status;
+   struct lsa_String groupname;
+   struct samr_CreateDomainGroup r;
+   struct policy_handle group_handle;
+   uint32_t group_rid;
+   
+   groupname.string = name;
+   
+   r.in.domain_handle  = handle;
+   r.in.name   = groupname;
+   r.in.access_mask= SEC_FLAG_MAXIMUM_ALLOWED;
+   r.out.group_handle  = group_handle;
+   r.out.rid   = group_rid

svn commit: samba r24682 - in branches/SAMBA_4_0/source/torture: .

2007-08-26 Thread mimir
Author: mimir
Date: 2007-08-26 21:49:23 + (Sun, 26 Aug 2007)
New Revision: 24682

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24682

Log:
forgot to actually make the new test buil...


rafal


Modified:
   branches/SAMBA_4_0/source/torture/config.mk


Changeset:
Modified: branches/SAMBA_4_0/source/torture/config.mk
===
--- branches/SAMBA_4_0/source/torture/config.mk 2007-08-26 21:48:26 UTC (rev 
24681)
+++ branches/SAMBA_4_0/source/torture/config.mk 2007-08-26 21:49:23 UTC (rev 
24682)
@@ -280,6 +280,7 @@
libnet/domain.o \
libnet/libnet_lookup.o \
libnet/libnet_user.o \
+   libnet/libnet_group.o \
libnet/libnet_share.o \
libnet/libnet_rpc.o \
libnet/libnet_domain.o \



svn commit: samba r24554 - in branches/SAMBA_4_0/source/libnet: .

2007-08-19 Thread mimir
Author: mimir
Date: 2007-08-19 21:07:11 + (Sun, 19 Aug 2007)
New Revision: 24554

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24554

Log:
Add internal implementation (before api function) of group
info call.


rafal


Added:
   branches/SAMBA_4_0/source/libnet/groupinfo.c
   branches/SAMBA_4_0/source/libnet/groupinfo.h
Modified:
   branches/SAMBA_4_0/source/libnet/composite.h
   branches/SAMBA_4_0/source/libnet/config.mk
   branches/SAMBA_4_0/source/libnet/libnet.h


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/composite.h
===
--- branches/SAMBA_4_0/source/libnet/composite.h2007-08-19 20:48:02 UTC 
(rev 24553)
+++ branches/SAMBA_4_0/source/libnet/composite.h2007-08-19 21:07:11 UTC 
(rev 24554)
@@ -39,6 +39,8 @@
 #define  mon_LsaOpenPolicy (0x000D)
 #define  mon_LsaQueryPolicy(0x000E)
 #define  mon_LsaClose  (0x000F)
+#define  mon_SamrOpenGroup (0x0010)
+#define  mon_SamrQueryGroup(0x0011)
 
 #define  mon_NetLookupDc   (0x0100)
 #define  mon_NetRpcConnect (0x0200)

Modified: branches/SAMBA_4_0/source/libnet/config.mk
===
--- branches/SAMBA_4_0/source/libnet/config.mk  2007-08-19 20:48:02 UTC (rev 
24553)
+++ branches/SAMBA_4_0/source/libnet/config.mk  2007-08-19 21:07:11 UTC (rev 
24554)
@@ -25,6 +25,7 @@
libnet_lookup.o \
libnet_domain.o \
userinfo.o \
+   groupinfo.o \
userman.o \
prereq_domain.o
 PUBLIC_DEPENDENCIES = CREDENTIALS dcerpc dcerpc_samr RPC_NDR_LSA 
RPC_NDR_SRVSVC RPC_NDR_DRSUAPI LIBCLI_COMPOSITE LIBCLI_RESOLVE LIBCLI_FINDDCS 
LIBSAMBA3 LIBCLI_CLDAP LIBCLI_FINDDCS gensec_schannel

Added: branches/SAMBA_4_0/source/libnet/groupinfo.c
===
--- branches/SAMBA_4_0/source/libnet/groupinfo.c2007-08-19 20:48:02 UTC 
(rev 24553)
+++ branches/SAMBA_4_0/source/libnet/groupinfo.c2007-08-19 21:07:11 UTC 
(rev 24554)
@@ -0,0 +1,360 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   Copyright (C) Rafal Szczesniak 2007
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see http://www.gnu.org/licenses/.
+*/
+
+/*
+  a composite function for getting group information via samr pipe
+*/
+
+
+#include includes.h
+#include libcli/composite/composite.h
+#include libnet/composite.h
+#include librpc/gen_ndr/security.h
+#include libcli/security/security.h
+#include libnet/userman.h
+#include libnet/groupinfo.h
+#include librpc/gen_ndr/ndr_samr_c.h
+
+
+struct groupinfo_state {
+   struct dcerpc_pipe *pipe;
+   struct policy_handle   domain_handle;
+   struct policy_handle   group_handle;
+   uint16_t   level;
+   struct samr_LookupNameslookup;
+   struct samr_OpenGroup  opengroup;
+   struct samr_QueryGroupInfo querygroupinfo;
+   struct samr_Close  samrclose;
+   union  samr_GroupInfo  *info;
+
+   /* information about the progress */
+   void (*monitor_fn)(struct monitor_msg *);
+};
+
+
+static void continue_groupinfo_lookup(struct rpc_request *req);
+static void continue_groupinfo_opengroup(struct rpc_request *req);
+static void continue_groupinfo_getgroup(struct rpc_request *req);
+static void continue_groupinfo_closegroup(struct rpc_request *req);
+
+
+/**
+ * Stage 1 (optional): Look for a group name in SAM server.
+ */
+static void continue_groupinfo_lookup(struct rpc_request *req)
+{
+   struct composite_context *c;
+   struct groupinfo_state *s;
+   struct rpc_request *opengroup_req;
+   struct monitor_msg msg;
+   struct msg_rpc_lookup_name *msg_lookup;
+
+   c = talloc_get_type(req-async.private_data, struct composite_context);
+   s = talloc_get_type(c-private_data, struct groupinfo_state);
+
+   /* receive samr_Lookup reply */
+   c-status = dcerpc_ndr_request_recv(req);
+   if (!composite_is_ok(c)) return;
+   
+   /* there could be a problem with name resolving itself */
+   if (!NT_STATUS_IS_OK(s-lookup.out.result)) {
+   composite_error(c, s-lookup.out.result);
+   return;
+   }
+
+   /* issue a monitor message

svn commit: samba r24555 - in branches/SAMBA_4_0/source/torture: . libnet

2007-08-19 Thread mimir
Author: mimir
Date: 2007-08-19 21:09:15 + (Sun, 19 Aug 2007)
New Revision: 24555

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24555

Log:
Add a test for libnet's group info call.


rafal


Added:
   branches/SAMBA_4_0/source/torture/libnet/groupinfo.c
Modified:
   branches/SAMBA_4_0/source/torture/config.mk
   branches/SAMBA_4_0/source/torture/libnet/libnet.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/config.mk
===
--- branches/SAMBA_4_0/source/torture/config.mk 2007-08-19 21:07:11 UTC (rev 
24554)
+++ branches/SAMBA_4_0/source/torture/config.mk 2007-08-19 21:09:15 UTC (rev 
24555)
@@ -276,6 +276,7 @@
libnet/libnet.o \
libnet/userinfo.o \
libnet/userman.o \
+   libnet/groupinfo.o \
libnet/domain.o \
libnet/libnet_lookup.o \
libnet/libnet_user.o \

Added: branches/SAMBA_4_0/source/torture/libnet/groupinfo.c
===
--- branches/SAMBA_4_0/source/torture/libnet/groupinfo.c2007-08-19 
21:07:11 UTC (rev 24554)
+++ branches/SAMBA_4_0/source/torture/libnet/groupinfo.c2007-08-19 
21:09:15 UTC (rev 24555)
@@ -0,0 +1,275 @@
+/* 
+   Unix SMB/CIFS implementation.
+   Test suite for libnet calls.
+
+   Copyright (C) Rafal Szczesniak 2007
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see http://www.gnu.org/licenses/.
+*/
+
+#include includes.h
+#include torture/rpc/rpc.h
+#include libnet/libnet.h
+#include libcli/security/security.h
+#include librpc/gen_ndr/ndr_samr_c.h
+
+#define TEST_GROUPNAME  libnetgroupinfotest
+
+
+static BOOL test_opendomain(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+   struct policy_handle *handle, struct lsa_String 
*domname,
+   struct dom_sid2 *sid)
+{
+   NTSTATUS status;
+   struct policy_handle h, domain_handle;
+   struct samr_Connect r1;
+   struct samr_LookupDomain r2;
+   struct samr_OpenDomain r3;
+   
+   printf(connecting\n);
+   
+   r1.in.system_name = 0;
+   r1.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
+   r1.out.connect_handle = h;
+   
+   status = dcerpc_samr_Connect(p, mem_ctx, r1);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(Connect failed - %s\n, nt_errstr(status));
+   return False;
+   }
+   
+   r2.in.connect_handle = h;
+   r2.in.domain_name = domname;
+
+   printf(domain lookup on %s\n, domname-string);
+
+   status = dcerpc_samr_LookupDomain(p, mem_ctx, r2);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(LookupDomain failed - %s\n, nt_errstr(status));
+   return False;
+   }
+
+   r3.in.connect_handle = h;
+   r3.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
+   r3.in.sid = r2.out.sid;
+   r3.out.domain_handle = domain_handle;
+
+   printf(opening domain\n);
+
+   status = dcerpc_samr_OpenDomain(p, mem_ctx, r3);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(OpenDomain failed - %s\n, nt_errstr(status));
+   return False;
+   } else {
+   *handle = domain_handle;
+   }
+
+   *sid = *r2.out.sid;
+   return True;
+}
+
+
+static BOOL test_cleanup(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+struct policy_handle *domain_handle, const char 
*groupname)
+{
+   NTSTATUS status;
+   struct samr_LookupNames r1;
+   struct samr_OpenGroup r2;
+   struct samr_DeleteDomainGroup r3;
+   struct lsa_String names[2];
+   uint32_t rid;
+   struct policy_handle group_handle;
+
+   names[0].string = groupname;
+
+   r1.in.domain_handle  = domain_handle;
+   r1.in.num_names  = 1;
+   r1.in.names  = names;
+   
+   printf(group account lookup '%s'\n, groupname);
+
+   status = dcerpc_samr_LookupNames(p, mem_ctx, r1);
+   if (!NT_STATUS_IS_OK(status)) {
+   printf(LookupNames failed - %s\n, nt_errstr(status));
+   return False;
+   }
+
+   rid = r1.out.rids.ids[0];
+   
+   r2.in.domain_handle  = domain_handle;
+   r2.in.access_mask= SEC_FLAG_MAXIMUM_ALLOWED;
+   r2.in.rid= rid;
+   r2.out.group_handle

svn commit: samba r24051 - in branches/SAMBA_4_0/source: libnet torture/libnet

2007-07-25 Thread mimir
Author: mimir
Date: 2007-07-25 23:17:02 + (Wed, 25 Jul 2007)
New Revision: 24051

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=24051

Log:
more monitor function calls and monitor msg names
convention change.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/composite.h
   branches/SAMBA_4_0/source/libnet/libnet_domain.c
   branches/SAMBA_4_0/source/libnet/libnet_rpc.c
   branches/SAMBA_4_0/source/libnet/userinfo.c
   branches/SAMBA_4_0/source/libnet/userman.c
   branches/SAMBA_4_0/source/torture/libnet/userinfo.c
   branches/SAMBA_4_0/source/torture/libnet/userman.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/composite.h
===
--- branches/SAMBA_4_0/source/libnet/composite.h2007-07-25 20:01:03 UTC 
(rev 24050)
+++ branches/SAMBA_4_0/source/libnet/composite.h2007-07-25 23:17:02 UTC 
(rev 24051)
@@ -24,24 +24,29 @@
  */
 
 
-#define  rpc_create_user(0x0001)
-#define  rpc_open_user  (0x0002)
-#define  rpc_query_user (0x0003)
-#define  rpc_close_user (0x0004)
-#define  rpc_lookup_name(0x0005)
-#define  rpc_delete_user(0x0006)
-#define  rpc_set_user   (0x0007)
-#define  rpc_close  (0x0008)
-#define  rpc_connect(0x0009)
-#define  rpc_lookup_domain  (0x0010)
-#define  rpc_open_domain(0x0011)
-#define  rpc_open_policy(0x0012)
-#define  rpc_query_policy   (0x0013)
+#define  mon_SamrCreateUser(0x0001)
+#define  mon_SamrOpenUser  (0x0002)
+#define  mon_SamrQueryUser (0x0003)
+#define  mon_SamrCloseUser (0x0004)
+#define  mon_SamrLookupName(0x0005)
+#define  mon_SamrDeleteUser(0x0006)
+#define  mon_SamrSetUser   (0x0007)
+#define  mon_SamrClose (0x0008)
+#define  mon_SamrConnect   (0x0009)
+#define  mon_SamrLookupDomain  (0x000A)
+#define  mon_SamrOpenDomain(0x000B)
+#define  mon_SamrEnumDomains   (0x000C)
+#define  mon_LsaOpenPolicy (0x000D)
+#define  mon_LsaQueryPolicy(0x000E)
+#define  mon_LsaClose  (0x000F)
 
-#define  net_lookup_dc  (0x0100)
-#define  net_rpc_connect(0x0200)
+#define  mon_NetLookupDc   (0x0100)
+#define  mon_NetRpcConnect (0x0200)
 
+#define  mon_Mask_Rpc  (0x00FF)
+#define  mon_Mask_Net  (0xFF00)
 
+
 struct monitor_msg {
uint32_t   type;
void   *data;

Modified: branches/SAMBA_4_0/source/libnet/libnet_domain.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_domain.c2007-07-25 20:01:03 UTC 
(rev 24050)
+++ branches/SAMBA_4_0/source/libnet/libnet_domain.c2007-07-25 23:17:02 UTC 
(rev 24051)
@@ -103,7 +103,7 @@
if (s-monitor_fn) {
struct monitor_msg msg;

-   msg.type = rpc_close;
+   msg.type = mon_SamrClose;
msg.data = NULL;
msg.data_size = 0;
s-monitor_fn(msg);
@@ -148,7 +148,7 @@
if (s-monitor_fn) {
struct monitor_msg msg;
 
-   msg.type = rpc_connect;
+   msg.type = mon_SamrConnect;
msg.data = NULL;
msg.data_size = 0;
s-monitor_fn(msg);
@@ -189,7 +189,7 @@
 
data.domain_name = s-domain_name.string;
 
-   msg.type = rpc_lookup_domain;
+   msg.type = mon_SamrLookupDomain;
msg.data = (void*)data;
msg.data_size = sizeof(data);
s-monitor_fn(msg);
@@ -237,7 +237,7 @@
if (s-monitor_fn) {
struct monitor_msg msg;

-   msg.type = rpc_open_domain;
+   msg.type = mon_SamrOpenDomain;
msg.data = NULL;
msg.data_size = 0;
s-monitor_fn(msg);
@@ -518,6 +518,15 @@
c-status = dcerpc_ndr_request_recv(req);
if (!composite_is_ok(c)) return;
 
+   if (s-monitor_fn) {
+   struct monitor_msg msg;
+   
+   msg.type  = mon_LsaOpenPolicy;
+   msg.data  = NULL;
+   msg.data_size = 0;
+   s-monitor_fn(msg);
+   }
+
composite_done(c);
 }
 
@@ -709,6 +718,15 @@
c-status = dcerpc_ndr_request_recv(req);
if (!composite_is_ok(c)) return;
 
+   if (s-monitor_fn) {
+   struct monitor_msg msg;
+
+   msg.type  = mon_LsaClose;
+   msg.data  = NULL;
+   msg.data_size = 0;
+   s-monitor_fn(msg);
+   }
+
composite_done(c);
 }
 
@@ -801,6 +819,15 @@

c-status = dcerpc_ndr_request_recv

svn commit: samba r23959 - in branches/SAMBA_4_0/source/libnet: .

2007-07-18 Thread mimir
Author: mimir
Date: 2007-07-18 21:24:37 + (Wed, 18 Jul 2007)
New Revision: 23959

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=23959

Log:
add more monitor messages support that's been sitting around on my
laptop for a while.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/composite.h
   branches/SAMBA_4_0/source/libnet/libnet_domain.c
   branches/SAMBA_4_0/source/libnet/libnet_domain.h
   branches/SAMBA_4_0/source/libnet/libnet_lookup.h
   branches/SAMBA_4_0/source/libnet/libnet_rpc.c
   branches/SAMBA_4_0/source/libnet/libnet_rpc.h


Changeset:
Sorry, the patch is too large (556 lines) to include; please use WebSVN to see 
it!
WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=23959


svn commit: samba r23292 - in branches/SAMBA_4_0/source/libnet: .

2007-06-01 Thread mimir
Author: mimir
Date: 2007-06-01 12:29:22 + (Fri, 01 Jun 2007)
New Revision: 23292

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=23292

Log:
check for errors returned in a call result.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/userman.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/userman.c
===
--- branches/SAMBA_4_0/source/libnet/userman.c  2007-06-01 12:24:57 UTC (rev 
23291)
+++ branches/SAMBA_4_0/source/libnet/userman.c  2007-06-01 12:29:22 UTC (rev 
23292)
@@ -246,8 +246,13 @@
 {
/* receive samr_LookupNames result */
c-status = dcerpc_ndr_request_recv(s-req);
+
+   /* check rpc layer status */
NT_STATUS_NOT_OK_RETURN(c-status);
 
+   /* check the call itself status */
+   NT_STATUS_NOT_OK_RETURN(s-lookupname.out.result);
+
/* what to do when there's no user account to delete
   and what if there's more than one rid resolved */
if (!s-lookupname.out.rids.count) {



svn commit: samba r23179 - in branches/SAMBA_4_0/source/selftest: .

2007-05-29 Thread mimir
Author: mimir
Date: 2007-05-29 06:33:55 + (Tue, 29 May 2007)
New Revision: 23179

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=23179

Log:
I forgot ejsnet.js script is one of tests. Disable it temporarily.


rafal


Modified:
   branches/SAMBA_4_0/source/selftest/test_ejs.sh


Changeset:
Modified: branches/SAMBA_4_0/source/selftest/test_ejs.sh
===
--- branches/SAMBA_4_0/source/selftest/test_ejs.sh  2007-05-29 05:49:35 UTC 
(rev 23178)
+++ branches/SAMBA_4_0/source/selftest/test_ejs.sh  2007-05-29 06:33:55 UTC 
(rev 23179)
@@ -15,7 +15,7 @@
 plantest base.js dc $SCRIPTDIR/base.js $CONFIGURATION
 plantest samr.js dc $SCRIPTDIR/samr.js $CONFIGURATION ncalrpc: 
-U\$USERNAME%\$PASSWORD
 plantest echo.js dc $SCRIPTDIR/echo.js $CONFIGURATION ncalrpc: 
-U\$USERNAME%\$PASSWORD
-plantest ejsnet.js dc $SCRIPTDIR/ejsnet.js $CONFIGURATION 
-U\$USERNAME%\$PASSWORD \$DOMAIN ejstestuser
+#plantest ejsnet.js dc $SCRIPTDIR/ejsnet.js $CONFIGURATION 
-U\$USERNAME%\$PASSWORD \$DOMAIN ejstestuser
 plantest ldb.js none $SCRIPTDIR/ldb.js `pwd` $CONFIGURATION
 plantest samba3sam.js none $SCRIPTDIR/samba3sam.js $CONFIGURATION `pwd` 
$DATADIR/samba3/
 plantest winreg dc scripting/bin/winreg $CONFIGURATION ncalrpc: 'HKLM' 
-U\$USERNAME%\$PASSWORD



svn commit: samba r23178 - in branches/SAMBA_4_0/testprogs/ejs: . ejsnet

2007-05-28 Thread mimir
Author: mimir
Date: 2007-05-29 05:49:35 + (Tue, 29 May 2007)
New Revision: 23178

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=23178

Log:
add simple js code I use for testing and which starts to look like
ejsnet command line utility (perhaps to be moved to utils later...)


rafal


Added:
   branches/SAMBA_4_0/testprogs/ejs/ejsnet/
   branches/SAMBA_4_0/testprogs/ejs/ejsnet/nethost.js
   branches/SAMBA_4_0/testprogs/ejs/ejsnet/netusr.js
Modified:
   branches/SAMBA_4_0/testprogs/ejs/ejsnet.js


Changeset:
Added: branches/SAMBA_4_0/testprogs/ejs/ejsnet/nethost.js
===
--- branches/SAMBA_4_0/testprogs/ejs/ejsnet/nethost.js  2007-05-29 01:20:47 UTC 
(rev 23177)
+++ branches/SAMBA_4_0/testprogs/ejs/ejsnet/nethost.js  2007-05-29 05:49:35 UTC 
(rev 23178)
@@ -0,0 +1,45 @@
+function PrintNetHostHelp()
+{
+   println(Host management - available commands:);
+   println(\t domainlist - list users in specified domain);
+}
+
+
+function ListDomains(hostCtx)
+{
+   var domain;
+
+   var list = hostCtx.DomainList();
+   if (list == undefined) {
+   println(Error when listing domains);
+   return -1;
+   }
+
+   for (var i = 0; i  list.Count; i++) {
+   domain = list.Domains[i];
+   printf(%s\n, domain.Name);
+   }
+
+   printf(\nResult: %s\n, list.Status.errstr);
+}
+
+
+function HostManager(ctx, options)
+{
+   var hostCtx;
+
+   if (options.ARGV.length  2) {
+   PrintNetHostHelp();
+   return -1;
+   }
+
+   var hostCmd = options.ARGV[1];
+
+   if (hostCmd == domainlist) {
+   hostCtx = ctx.HostMgr();
+   ListDomains(hostCtx);
+
+   } else {
+   println(unknown command);
+   }
+}

Added: branches/SAMBA_4_0/testprogs/ejs/ejsnet/netusr.js
===
--- branches/SAMBA_4_0/testprogs/ejs/ejsnet/netusr.js   2007-05-29 01:20:47 UTC 
(rev 23177)
+++ branches/SAMBA_4_0/testprogs/ejs/ejsnet/netusr.js   2007-05-29 05:49:35 UTC 
(rev 23178)
@@ -0,0 +1,86 @@
+function PrintNetUsrHelp(options)
+{
+   println(User management - available commands:);
+   println(\t list - list users in specified domain);
+   println(\t info - display user account information);
+}
+
+
+function ListUsers(usrCtx)
+{
+   var list, user;
+   var finished = false;
+
+   for (list = usrCtx.List(list); list.Status.is_ok  !finished; list = 
usrCtx.List(list)) {
+   for (i = 0; i  list.Count; i++) {
+   user = list.Users[i];
+   printf(%s\n, user.Username);
+   }
+   
+   finished = list.EndOfList;
+   }
+
+   printf(\nResult: %s\n, list.Status.errstr);
+}
+
+
+function UserInfo(usrCtx, username)
+{
+   var info;
+
+   info = usrCtx.Info(username);
+   if (info == null) {
+   println(Account unknown);
+   return -1;
+   }
+
+   println(User account info:\n);
+   printf(AccountName = %s\n, info.AccountName);
+   printf(Description = %s\n, info.Description);
+   printf(FullName= %s\n, info.FullName);
+   printf(AcctExpiry  = %s\n, info.AcctExpiry);
+}
+
+
+function UserManager(ctx, options)
+{
+   var usrCtx;
+
+   if (options.ARGV.length  2) {
+   PrintNetUsrHelp(options);
+   return -1;
+
+   }
+   
+   var usrCmd = options.ARGV[1];
+
+   if (usrCmd == create) {
+
+   } else if (usrCmd == info) {
+   var userName;
+
+   if (options.ARGV.length  2) {
+   userName = options.ARGV[2];
+   } else {
+   println(No username provided);
+   return -1;
+   }
+   usrCtx = ctx.UserMgr();
+
+   UserInfo(usrCtx, userName);
+
+   } else if (usrCmd == list) {
+
+   if (options.ARGV.length  2) {
+   usrCtx = ctx.UserMgr(options.ARGV[2]);
+   } else {
+   usrCtx = ctx.UserMgr();
+   }
+
+   ListUsers(usrCtx);
+
+   } else {
+   println(Unknown command specified.);
+   PrintNetUsrHelp(options);
+   }
+}

Modified: branches/SAMBA_4_0/testprogs/ejs/ejsnet.js
===
--- branches/SAMBA_4_0/testprogs/ejs/ejsnet.js  2007-05-29 01:20:47 UTC (rev 
23177)
+++ branches/SAMBA_4_0/testprogs/ejs/ejsnet.js  2007-05-29 05:49:35 UTC (rev 
23178)
@@ -1,52 +1,46 @@
 #!/usr/bin/env smbscript
 
+libinclude(base.js);
+
+/* note: these require specifying a proper path in js include parameter */
+libinclude(ejsnet/netusr.js);
+libinclude(ejsnet/nethost.js);
+
+function PrintNetHelp()
+{
+   println(Usage: ejsnet.js cmd [options

svn commit: samba r23124 - in branches/SAMBA_4_0/source/scripting/ejs/ejsnet: .

2007-05-24 Thread mimir
Author: mimir
Date: 2007-05-24 21:44:27 + (Thu, 24 May 2007)
New Revision: 23124

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=23124

Log:
add host subcontext providing (at the moment) list of domains
hosted on the server.


rafal


Added:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/mpr_host.c
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_host.c
Modified:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/config.mk


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet/config.mk
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet/config.mk2007-05-24 
21:29:15 UTC (rev 23123)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet/config.mk2007-05-24 
21:44:27 UTC (rev 23124)
@@ -2,7 +2,9 @@
 OBJ_FILES = \
net_ctx.o \
net_user.o \
-   mpr_user.o
+   mpr_user.o \
+   net_host.o \
+   mpr_host.o
 SUBSYSTEM = smbcalls
 INIT_FUNCTION = smb_setup_ejs_net
 PRIVATE_PROTO_HEADER = proto.h

Added: branches/SAMBA_4_0/source/scripting/ejs/ejsnet/mpr_host.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet/mpr_host.c   2007-05-24 
21:29:15 UTC (rev 23123)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet/mpr_host.c   2007-05-24 
21:44:27 UTC (rev 23124)
@@ -0,0 +1,75 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   provides interfaces to libnet calls from ejs scripts
+
+   Copyright (C) Rafal Szczesniak  2005-2007
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+
+#include includes.h
+#include lib/appweb/ejs/ejs.h
+#include libnet/libnet.h
+#include scripting/ejs/smbcalls.h
+#include events/events.h
+#include auth/credentials/credentials.h
+
+
+/*
+  Properties:
+  DomainsList.Domains[0]
+  DomainsList.Status
+*/
+struct MprVar mprDomainsList(TALLOC_CTX *mem_ctx, struct libnet_DomainList 
*list, NTSTATUS result)
+{
+   const char *name = DomainsList;
+   NTSTATUS status;
+   struct MprVar mprDomainList, mprDomains;
+   struct MprVar mprSid, mprDomainName;
+   struct MprVar mprDomain;
+   int i;
+
+   if (list == NULL || mem_ctx == NULL) {
+   mprDomainList = mprCreateNullVar();
+   goto done;
+   }
+
+   mprDomains = mprArray(Domains);
+   for (i = 0; i  list-out.count; i++) {
+   struct domainlist d = list-out.domains[i];
+
+   /* get domainlist fields */
+   mprSid= mprString(d.sid);
+   mprDomainName = mprString(d.name);
+
+   mprDomain = mprObject(Domain);
+   mprSetVar(mprDomain, Name, mprDomainName);
+   mprSetVar(mprDomain, SID, mprSid);
+
+   mprAddArray(mprDomains, i, mprDomain);
+   }
+
+   mprDomainList = mprObject(name);
+   status = mprSetVar(mprDomainList, Domains, mprDomains);
+   if (!NT_STATUS_IS_OK(status)) goto done;
+   status = mprSetVar(mprDomainList, Count, 
mprCreateIntegerVar(list-out.count));
+   if (!NT_STATUS_IS_OK(status)) goto done;
+   status = mprSetVar(mprDomainList, Status, mprNTSTATUS(result));
+
+done:
+   return mprDomainList;
+}

Added: branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_host.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_host.c   2007-05-24 
21:29:15 UTC (rev 23123)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_host.c   2007-05-24 
21:44:27 UTC (rev 23124)
@@ -0,0 +1,125 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   provides interfaces to libnet calls from ejs scripts
+
+   Copyright (C) Rafal Szczesniak  2005-2007
+   
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+   
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+   
+   You should

svn commit: samba r23125 - in branches/SAMBA_4_0/source/scripting/ejs/ejsnet: .

2007-05-24 Thread mimir
Author: mimir
Date: 2007-05-24 21:45:29 + (Thu, 24 May 2007)
New Revision: 23125

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=23125

Log:
add host manager subcontext function.


rafal


Modified:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_ctx.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_ctx.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_ctx.c2007-05-24 
21:44:27 UTC (rev 23124)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_ctx.c2007-05-24 
21:45:29 UTC (rev 23125)
@@ -29,6 +29,7 @@
 
 
 int ejs_net_userman(MprVarHandle eid, int argc, struct MprVar** argv);
+int ejs_net_hostman(MprVarHandle eid, int argc, struct MprVar** argv);
 
 static int ejs_net_join_domain(MprVarHandle eid, int argc, struct MprVar 
**argv);
 static int ejs_net_samsync_ldb(MprVarHandle eid, int argc, struct MprVar 
**argv);
@@ -105,6 +106,7 @@

/* add methods to the object */
mprSetCFunction(obj, UserMgr, ejs_net_userman);
+   mprSetCFunction(obj, HostMgr, ejs_net_hostman);
mprSetCFunction(obj, JoinDomain, ejs_net_join_domain);
mprSetCFunction(obj, SamSyncLdb, ejs_net_samsync_ldb);
 



svn commit: samba r23126 - in branches/SAMBA_4_0/source/scripting/ejs/ejsnet: .

2007-05-24 Thread mimir
Author: mimir
Date: 2007-05-24 21:51:25 + (Thu, 24 May 2007)
New Revision: 23126

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=23126

Log:
this was sitting on my laptop for a while...

change the way the ejs object is being created and return listing
context (with status) rather than collecting all entries gathered
from libnet call.


rafal


Modified:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/mpr_user.c
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet/mpr_user.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet/mpr_user.c   2007-05-24 
21:45:29 UTC (rev 23125)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet/mpr_user.c   2007-05-24 
21:51:25 UTC (rev 23126)
@@ -101,6 +101,7 @@
   UserListCtx.ResumeIndex
   UserListCtx.Count
   UserListCtx.EndOfList
+  UserListCtx.Status
  */
 struct MprVar mprUserListCtx(TALLOC_CTX *mem_ctx, struct libnet_UserList 
*list, NTSTATUS result)
 {
@@ -144,6 +145,8 @@
status = mprSetVar(mprListCtx, ResumeIndex, 
mprCreateIntegerVar((int)list-out.resume_index));
if (!NT_STATUS_IS_OK(status)) goto done;
status = mprSetVar(mprListCtx, EndOfList, 
mprCreateBoolVar(endOfList));
+   if (!NT_STATUS_IS_OK(status)) goto done;
+   status = mprSetVar(mprListCtx, Status, mprNTSTATUS(result));
 
 done:
return mprListCtx;

Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c   2007-05-24 
21:45:29 UTC (rev 23125)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c   2007-05-24 
21:51:25 UTC (rev 23126)
@@ -43,7 +43,7 @@
 {
struct libnet_context *ctx;
const char *userman_domain = NULL;
-   struct MprVar *obj = NULL;
+   struct MprVar obj;
 
/* libnet context */
ctx = mprGetThisPtr(eid, ctx);
@@ -74,21 +74,24 @@
}
 
/* create 'net user' subcontext */
-   obj = mprInitObject(eid, NetUsrCtx, argc, argv);
+   obj = mprObject(NetUsrCtx);
 
/* we need to make a copy of the string for this object */
userman_domain = talloc_strdup(ctx, userman_domain);
 
/* add properties */
-   mprSetPtrChild(obj, ctx, ctx);
-   mprSetPtrChild(obj, domain, userman_domain);
+   mprSetPtrChild(obj, ctx, ctx);
+   mprSetPtrChild(obj, domain, userman_domain);
 
/* add methods */
-   mprSetStringCFunction(obj, Create, ejs_net_createuser);
-   mprSetStringCFunction(obj, Delete, ejs_net_deleteuser);
-   mprSetStringCFunction(obj, Info, ejs_net_userinfo);
-   mprSetCFunction(obj, List, ejs_net_userlist);
+   mprSetStringCFunction(obj, Create, ejs_net_createuser);
+   mprSetStringCFunction(obj, Delete, ejs_net_deleteuser);
+   mprSetStringCFunction(obj, Info, ejs_net_userinfo);
+   mprSetCFunction(obj, List, ejs_net_userlist);
 
+   /* set the object returned by this function */
+   mpr_Return(eid, obj);
+
return 0;
 }
 
@@ -347,16 +350,6 @@
req.in.page_size = page_size;

status = libnet_UserList(ctx, mem_ctx, req);
-   if (!NT_STATUS_IS_OK(status) 
-   !NT_STATUS_EQUAL(status, STATUS_MORE_ENTRIES) 
-   !NT_STATUS_EQUAL(status, NT_STATUS_NO_MORE_ENTRIES)) {
-
-   ejsSetErrorMsg(eid, %s, req.out.error_string);
-   
-   mprListCtx = mprCreateNullVar();
-   goto done;
-   }
-
mprListCtx = mprUserListCtx(mem_ctx, req, status);
 
 done:



svn commit: samba r23065 - in branches/SAMBA_4_0/source/scripting/ejs: .

2007-05-22 Thread mimir
Author: mimir
Date: 2007-05-22 06:34:14 + (Tue, 22 May 2007)
New Revision: 23065

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=23065

Log:
revert local includes to prevent security problems (at least
temporarily...)


rafal


Modified:
   branches/SAMBA_4_0/source/scripting/ejs/smbcalls.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/smbcalls.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/smbcalls.c  2007-05-22 05:22:18 UTC 
(rev 23064)
+++ branches/SAMBA_4_0/source/scripting/ejs/smbcalls.c  2007-05-22 06:34:14 UTC 
(rev 23065)
@@ -124,23 +124,6 @@
char *path, *emsg;
int ret;
 
-   /* First, try to include file from current working directory.
-  This allows local includes which is handy sometimes. */
-   path = talloc_asprintf(mprMemCtx(), %s, script);
-   if (path == NULL) {
-   return -1;
-   }
-   
-   if (file_exist(path)) {
-   ret = ejsEvalFile(eid, path, result, emsg);
-   talloc_free(path);
-   if (ret  0) {
-   ejsSetErrorMsg(eid, %s: %s, script, emsg);
-   return -1;
-   }
-   continue;
-   }
-
/* use specfied path to search for requested file */
for (j=0;js_include[j];j++) {
path = talloc_asprintf(mprMemCtx(), %s/%s, 
js_include[j], script);



svn commit: samba r23047 - in branches/SAMBA_4_0/source/scripting/ejs: .

2007-05-21 Thread mimir
Author: mimir
Date: 2007-05-21 19:53:57 + (Mon, 21 May 2007)
New Revision: 23047

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=23047

Log:
Allow local inclusion of js files as well as from predefined
path(s).


rafal


Modified:
   branches/SAMBA_4_0/source/scripting/ejs/smbcalls.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/smbcalls.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/smbcalls.c  2007-05-21 19:12:14 UTC 
(rev 23046)
+++ branches/SAMBA_4_0/source/scripting/ejs/smbcalls.c  2007-05-21 19:53:57 UTC 
(rev 23047)
@@ -120,17 +120,34 @@
 
for (i = 0; i  argc; i++) {
const char *script = argv[i];
+   struct MprVar result;
+   char *path, *emsg;
+   int ret;
 
+   /* First, try to include file from current working directory.
+  This allows local includes which is handy sometimes. */
+   path = talloc_asprintf(mprMemCtx(), %s, script);
+   if (path == NULL) {
+   return -1;
+   }
+   
+   if (file_exist(path)) {
+   ret = ejsEvalFile(eid, path, result, emsg);
+   talloc_free(path);
+   if (ret  0) {
+   ejsSetErrorMsg(eid, %s: %s, script, emsg);
+   return -1;
+   }
+   continue;
+   }
+
+   /* use specfied path to search for requested file */
for (j=0;js_include[j];j++) {
-   char *path;
path = talloc_asprintf(mprMemCtx(), %s/%s, 
js_include[j], script);
if (path == NULL) {
return -1;
}
if (file_exist(path)) {
-   int ret;
-   struct MprVar result;
-   char *emsg;
 
ret = ejsEvalFile(eid, path, result, emsg);
talloc_free(path);
@@ -142,6 +159,7 @@
}
talloc_free(path);
}
+
if (js_include[j] == NULL) {
ejsSetErrorMsg(eid, unable to include '%s', script);
return -1;



svn commit: samba r22871 - in branches/SAMBA_4_0/source/selftest: .

2007-05-14 Thread mimir
Author: mimir
Date: 2007-05-14 23:24:50 + (Mon, 14 May 2007)
New Revision: 22871

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22871

Log:
restore testing against host name instead of ip address


rafal


Modified:
   branches/SAMBA_4_0/source/selftest/test_net.sh


Changeset:
Modified: branches/SAMBA_4_0/source/selftest/test_net.sh
===
--- branches/SAMBA_4_0/source/selftest/test_net.sh  2007-05-14 21:58:23 UTC 
(rev 22870)
+++ branches/SAMBA_4_0/source/selftest/test_net.sh  2007-05-14 23:24:50 UTC 
(rev 22871)
@@ -18,7 +18,7 @@
  esac
for t in $tests; do
 name=$t on $transport with $bindoptions
-plantest $name dc $VALGRIND bin/smbtorture $TORTURE_OPTIONS 
$transport:\$SERVER_IP[$bindoptions] -U\$USERNAME%\$PASSWORD -W 
\$DOMAIN $t $*
+plantest $name dc $VALGRIND bin/smbtorture $TORTURE_OPTIONS 
$transport:\$SERVER[$bindoptions] -U\$USERNAME%\$PASSWORD -W \$DOMAIN 
$t $*
done
  done
 done



svn commit: samba r22804 - in branches/SAMBA_4_0/source/libnet: .

2007-05-11 Thread mimir
Author: mimir
Date: 2007-05-11 19:10:34 + (Fri, 11 May 2007)
New Revision: 22804

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22804

Log:
convert libnet_rpc_userinfo function to use continue functions
instead of a single handler.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/userinfo.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/userinfo.c
===
--- branches/SAMBA_4_0/source/libnet/userinfo.c 2007-05-11 15:28:07 UTC (rev 
22803)
+++ branches/SAMBA_4_0/source/libnet/userinfo.c 2007-05-11 19:10:34 UTC (rev 
22804)
@@ -31,14 +31,9 @@
 #include libnet/userinfo.h
 #include librpc/gen_ndr/ndr_samr_c.h
 
-static void userinfo_handler(struct rpc_request *req);
 
-enum userinfo_stage { USERINFO_LOOKUP, USERINFO_OPENUSER, USERINFO_GETUSER, 
USERINFO_CLOSEUSER };
-
 struct userinfo_state {
-   enum userinfo_stage   stage;
struct dcerpc_pipe*pipe;
-   struct rpc_request*req;
struct policy_handle  domain_handle;
struct policy_handle  user_handle;
uint16_t  level;
@@ -53,23 +48,53 @@
 };
 
 
+static void continue_userinfo_lookup(struct rpc_request *req);
+static void continue_userinfo_openuser(struct rpc_request *req);
+static void continue_userinfo_getuser(struct rpc_request *req);
+static void continue_userinfo_closeuser(struct rpc_request *req);
+
+
 /**
  * Stage 1 (optional): Look for a username in SAM server.
  */
-static NTSTATUS userinfo_lookup(struct composite_context *c,
-   struct userinfo_state *s)
+static void continue_userinfo_lookup(struct rpc_request *req)
 {
+   struct composite_context *c;
+   struct userinfo_state *s;
+   struct rpc_request *openuser_req;
+   struct monitor_msg msg;
+   struct msg_rpc_lookup_name *msg_lookup;
+
+   c = talloc_get_type(req-async.private, struct composite_context);
+   s = talloc_get_type(c-private_data, struct userinfo_state);
+
/* receive samr_Lookup reply */
-   c-status = dcerpc_ndr_request_recv(s-req);
-   NT_STATUS_NOT_OK_RETURN(c-status);
+   c-status = dcerpc_ndr_request_recv(req);
+   if (!composite_is_ok(c)) return;

/* there could be a problem with name resolving itself */
-   NT_STATUS_NOT_OK_RETURN(s-lookup.out.result);
+   if (!NT_STATUS_IS_OK(s-lookup.out.result)) {
+   composite_error(c, s-lookup.out.result);
+   return;
+   }
 
+   /* issue a monitor message */
+   if (s-monitor_fn) {
+   msg.type = rpc_lookup_name;
+   msg_lookup = talloc(s, struct msg_rpc_lookup_name);
+   msg_lookup-rid = s-lookup.out.rids.ids;
+   msg_lookup-count = s-lookup.out.rids.count;
+   msg.data = (void*)msg_lookup;
+   msg.data_size = sizeof(*msg_lookup);
+   
+   s-monitor_fn(msg);
+   }
+   
+
/* have we actually got name resolved
   - we're looking for only one at the moment */
if (s-lookup.out.rids.count == 0) {
-   return NT_STATUS_NO_SUCH_USER;
+   composite_error(c, NT_STATUS_NO_SUCH_USER);
}
 
/* TODO: find proper status code for more than one rid found */
@@ -81,168 +106,143 @@
s-openuser.out.user_handle   = s-user_handle;
 
/* send request */
-   s-req = dcerpc_samr_OpenUser_send(s-pipe, c, s-openuser);
-   if (s-req == NULL) goto failure;
+   openuser_req = dcerpc_samr_OpenUser_send(s-pipe, c, s-openuser);
+   if (composite_nomem(openuser_req, c)) return;
 
-   s-req-async.callback = userinfo_handler;
-   s-req-async.private  = c;
-   s-stage = USERINFO_OPENUSER;
-
-   return NT_STATUS_OK;
-
-failure:
-   return NT_STATUS_UNSUCCESSFUL;
+   composite_continue_rpc(c, openuser_req, continue_userinfo_openuser, c);
 }
 
 
 /**
  * Stage 2: Open user policy handle.
  */
-static NTSTATUS userinfo_openuser(struct composite_context *c,
- struct userinfo_state *s)
+static void continue_userinfo_openuser(struct rpc_request *req)
 {
+   struct composite_context *c;
+   struct userinfo_state *s;
+   struct rpc_request *queryuser_req;
+   struct monitor_msg msg;
+   struct msg_rpc_open_user *msg_open;
+
+   c = talloc_get_type(req-async.private, struct composite_context);
+   s = talloc_get_type(c-private_data, struct userinfo_state);
+
/* receive samr_OpenUser reply */
-   c-status = dcerpc_ndr_request_recv(s-req);
-   NT_STATUS_NOT_OK_RETURN(c-status);
+   c-status = dcerpc_ndr_request_recv(req);
+   if (!composite_is_ok(c)) return;
+
+   if (!NT_STATUS_IS_OK(s-queryuserinfo.out.result)) {
+   composite_error(c, s-queryuserinfo.out.result);
+   return;
+   }
+
+   /* issue a monitor message

svn commit: samba r22808 - in branches/SAMBA_4_0/source/libnet: .

2007-05-11 Thread mimir
Author: mimir
Date: 2007-05-11 21:44:18 + (Fri, 11 May 2007)
New Revision: 22808

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22808

Log:
store default buffer size for samr operations in libnet context.
This allows not requiring it as an argument in some function calls
and still enables specifying any size if it's necessary via libnet
context.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet.c
   branches/SAMBA_4_0/source/libnet/libnet.h


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet.c
===
--- branches/SAMBA_4_0/source/libnet/libnet.c   2007-05-11 20:57:04 UTC (rev 
22807)
+++ branches/SAMBA_4_0/source/libnet/libnet.c   2007-05-11 21:44:18 UTC (rev 
22808)
@@ -47,7 +47,10 @@
 
/* connected services' params */
ZERO_STRUCT(ctx-samr);
-   ZERO_STRUCT(ctx-lsa);
+   ZERO_STRUCT(ctx-lsa);  
 
+   /* default buffer size for various operations requiring specifying a 
buffer */
+   ctx-samr.buf_size = 128;
+
return ctx;
 }

Modified: branches/SAMBA_4_0/source/libnet/libnet.h
===
--- branches/SAMBA_4_0/source/libnet/libnet.h   2007-05-11 20:57:04 UTC (rev 
22807)
+++ branches/SAMBA_4_0/source/libnet/libnet.h   2007-05-11 21:44:18 UTC (rev 
22808)
@@ -32,6 +32,7 @@
const char *name;
uint32_t access_mask;
struct policy_handle handle;
+   int buf_size;
} samr;
 
/* lsa connection parameters - opened handles and related properties */



svn commit: samba r22809 - in branches/SAMBA_4_0/source/libnet: .

2007-05-11 Thread mimir
Author: mimir
Date: 2007-05-11 21:45:03 + (Fri, 11 May 2007)
New Revision: 22809

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22809

Log:
use buffer size specified in libnet context.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_domain.c
   branches/SAMBA_4_0/source/libnet/libnet_domain.h


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_domain.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_domain.c2007-05-11 21:44:18 UTC 
(rev 22808)
+++ branches/SAMBA_4_0/source/libnet/libnet_domain.c2007-05-11 21:45:03 UTC 
(rev 22809)
@@ -956,7 +956,7 @@
/* prepare next round of enumeration */
s-enumdom.in.connect_handle = s-connect_handle;
s-enumdom.in.resume_handle  = s-resume_handle;
-   s-enumdom.in.buf_size   = s-buf_size;
+   s-enumdom.in.buf_size   = s-ctx-samr.buf_size;
s-enumdom.out.resume_handle = s-resume_handle;
 
/* send the request */
@@ -1073,9 +1073,6 @@
s-hostname = talloc_strdup(c, io-in.hostname);
if (composite_nomem(s-hostname, c)) return c;
 
-   /* set the default buffer size if not stated explicitly */
-   s-buf_size = (io-in.buf_size == 0) ? 512 : io-in.buf_size;
-
/* check whether samr pipe has already been opened */
if (ctx-samr.pipe == NULL) {
/* prepare rpc connect call */

Modified: branches/SAMBA_4_0/source/libnet/libnet_domain.h
===
--- branches/SAMBA_4_0/source/libnet/libnet_domain.h2007-05-11 21:44:18 UTC 
(rev 22808)
+++ branches/SAMBA_4_0/source/libnet/libnet_domain.h2007-05-11 21:45:03 UTC 
(rev 22809)
@@ -52,7 +52,6 @@
 struct libnet_DomainList {
struct {
const char *hostname;
-   const int buf_size;
} in;
struct {
int count;



svn commit: samba r22810 - in branches/SAMBA_4_0/source/torture/libnet: .

2007-05-11 Thread mimir
Author: mimir
Date: 2007-05-11 21:48:29 + (Fri, 11 May 2007)
New Revision: 22810

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22810

Log:
when a test runs against domain controller use domain name
instead of target host name specified in binding string.


metze: this fixes the problem with passing name resolution
down the socket wrapper calls. NET tests now run against
$SERVER flawlessly.


rafal


Modified:
   branches/SAMBA_4_0/source/torture/libnet/libnet_domain.c
   branches/SAMBA_4_0/source/torture/libnet/libnet_rpc.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/libnet/libnet_domain.c
===
--- branches/SAMBA_4_0/source/torture/libnet/libnet_domain.c2007-05-11 
21:45:03 UTC (rev 22809)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet_domain.c2007-05-11 
21:48:29 UTC (rev 22810)
@@ -129,17 +129,14 @@
struct libnet_context *ctx;
struct libnet_DomainOpen r;
struct lsa_Close lsa_close;
-   struct dcerpc_binding *binding;
struct policy_handle h;
-   const char *bindstr;
-   
-   bindstr = torture_setting_string(torture, binding, NULL);
-   status = dcerpc_parse_binding(torture, bindstr, binding);
-   if (!NT_STATUS_IS_OK(status)) {
-   d_printf(failed to parse binding string\n);
-   return False;
-   }
+   const char *domain_name;
 
+   /* we're accessing domain controller so the domain name should be
+  passed (it's going to be resolved to dc name and address) instead
+  of specific server name. */
+   domain_name = lp_workgroup();
+
ctx = libnet_context_init(NULL);
if (ctx == NULL) {
d_printf(failed to create libnet context\n);
@@ -150,7 +147,7 @@
 
ZERO_STRUCT(r);
r.in.type = DOMAIN_LSA;
-   r.in.domain_name = binding-host;
+   r.in.domain_name = domain_name;
r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
 
status = libnet_DomainOpen(ctx, torture, r);
@@ -229,7 +226,7 @@
ctx-lsa.access_mask = access_mask;
ctx-lsa.handle  = h;
/* we have to use pipe's event context, otherwise the call will
-  hang indefinately */
+  hang indefinitely */
ctx-event_ctx   = p-conn-event_ctx;
 
ZERO_STRUCT(r);
@@ -257,9 +254,9 @@
struct event_context *evt_ctx=NULL;
TALLOC_CTX *mem_ctx;
struct policy_handle domain_handle, handle;
-   struct lsa_String name;
struct libnet_DomainOpen io;
struct samr_Close r;
+   const char *domain_name;
BOOL ret = True;
 
mem_ctx = talloc_init(test_domainopen_lsa);
@@ -268,7 +265,10 @@
ctx = libnet_context_init(evt_ctx);
ctx-cred = cmdline_credentials;
 
-   name.string = lp_workgroup();
+   /* we're accessing domain controller so the domain name should be
+  passed (it's going to be resolved to dc name and address) instead
+  of specific server name. */
+   domain_name = lp_workgroup();
 
/*
 * Testing synchronous version
@@ -276,7 +276,7 @@
printf(opening domain\n);

io.in.type = DOMAIN_SAMR;
-   io.in.domain_name  = name.string;
+   io.in.domain_name  = domain_name;
io.in.access_mask  = SEC_FLAG_MAXIMUM_ALLOWED;
 
status = libnet_DomainOpen(ctx, mem_ctx, io);
@@ -411,6 +411,10 @@

mem_ctx = talloc_init(torture_domain_close_samr);
 
+   /*
+* querying the domain list using default buffer size
+*/
+
ZERO_STRUCT(r);
r.in.hostname = binding-host;
 
@@ -420,12 +424,33 @@
goto done;
}
 
-   d_printf(Received list or domains:\n);
+   d_printf(Received list or domains (everything in one piece):\n);

for (i = 0; i  r.out.count; i++) {
d_printf(Name[%d]: %s\n, i, r.out.domains[i].name);
}
 
+   /*
+* querying the domain list using specified (much smaller) buffer size
+*/
+
+   ctx-samr.buf_size = 32;
+
+   ZERO_STRUCT(r);
+   r.in.hostname = binding-host;
+
+   status = libnet_DomainList(ctx, mem_ctx, r);
+   if (!NT_STATUS_IS_OK(status)) {
+   ret = False;
+   goto done;
+   }
+
+   d_printf(Received list or domains (collected in more than one 
round):\n);
+   
+   for (i = 0; i  r.out.count; i++) {
+   d_printf(Name[%d]: %s\n, i, r.out.domains[i].name);
+   }
+
 done:
d_printf(\nStatus: %s\n, nt_errstr(status));
 

Modified: branches/SAMBA_4_0/source/torture/libnet/libnet_rpc.c
===
--- branches/SAMBA_4_0/source/torture/libnet/libnet_rpc.c   2007-05-11 
21:45:03 UTC (rev 22809)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet_rpc.c   2007-05-11 
21:48:29 UTC (rev

svn commit: samba r22811 - in branches/SAMBA_4_0/source/libnet: .

2007-05-11 Thread mimir
Author: mimir
Date: 2007-05-11 21:51:53 + (Fri, 11 May 2007)
New Revision: 22811

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22811

Log:
two more memory allocation checks.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_lookup.c
   branches/SAMBA_4_0/source/libnet/userinfo.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_lookup.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_lookup.c2007-05-11 21:48:29 UTC 
(rev 22810)
+++ branches/SAMBA_4_0/source/libnet/libnet_lookup.c2007-05-11 21:51:53 UTC 
(rev 22811)
@@ -74,6 +74,8 @@
 
/* parameters */
s-hostname.name   = talloc_strdup(s, io-in.hostname);
+   if (composite_nomem(s-hostname.name, c)) return c;
+
s-hostname.type   = io-in.type;
s-hostname.scope  = NULL;
 

Modified: branches/SAMBA_4_0/source/libnet/userinfo.c
===
--- branches/SAMBA_4_0/source/libnet/userinfo.c 2007-05-11 21:48:29 UTC (rev 
22810)
+++ branches/SAMBA_4_0/source/libnet/userinfo.c 2007-05-11 21:51:53 UTC (rev 
22811)
@@ -296,9 +296,10 @@
s-lookup.in.domain_handle= s-domain_handle;
s-lookup.in.num_names= 1;
s-lookup.in.names= talloc_array(s, struct 
lsa_String, 1);
-   
if (composite_nomem(s-lookup.in.names, c)) return c;
+
s-lookup.in.names[0].string  = talloc_strdup(s, 
io-in.username);
+   if (composite_nomem(s-lookup.in.names[0].string, c)) return c;

/* send request */
lookup_req = dcerpc_samr_LookupNames_send(p, c, s-lookup);



svn commit: samba r22763 - in branches/SAMBA_4_0/source/libnet: .

2007-05-08 Thread mimir
Author: mimir
Date: 2007-05-08 22:04:28 + (Tue, 08 May 2007)
New Revision: 22763

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22763

Log:
replace talloc_zero calls with composite_create and add more
allocation checks.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/userinfo.c
   branches/SAMBA_4_0/source/libnet/userman.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/userinfo.c
===
--- branches/SAMBA_4_0/source/libnet/userinfo.c 2007-05-08 21:17:58 UTC (rev 
22762)
+++ branches/SAMBA_4_0/source/libnet/userinfo.c 2007-05-08 22:04:28 UTC (rev 
22763)
@@ -262,24 +262,22 @@
 
if (!p || !io) return NULL;

-   c = talloc_zero(p, struct composite_context);
-   if (c == NULL) goto failure;
+   c = composite_create(p, dcerpc_event_context(p));
+   if (c == NULL) return c;

s = talloc_zero(c, struct userinfo_state);
-   if (s == NULL) goto failure;
+   if (composite_nomem(s, c)) return c;
 
+   c-private_data = s;
+
s-level = io-in.level;
s-pipe  = p;
s-domain_handle = io-in.domain_handle;
s-monitor_fn= monitor;
 
-   c-state= COMPOSITE_STATE_IN_PROGRESS;
-   c-private_data = s;
-   c-event_ctx= dcerpc_event_context(p);
-
if (io-in.sid) {
sid = dom_sid_parse_talloc(s, io-in.sid);
-   if (sid == NULL) goto failure;  
+   if (composite_nomem(sid, c)) return c;
 
s-openuser.in.domain_handle  = s-domain_handle;
s-openuser.in.access_mask= SEC_FLAG_MAXIMUM_ALLOWED;
@@ -288,7 +286,7 @@

/* send request */
s-req = dcerpc_samr_OpenUser_send(p, c, s-openuser);
-   if (s-req == NULL) goto failure;
+   if (composite_nomem(s-req, c)) return c;

s-stage = USERINFO_OPENUSER;
 
@@ -303,7 +301,7 @@

/* send request */
s-req = dcerpc_samr_LookupNames_send(p, c, s-lookup);
-   if (s-req == NULL) goto failure;
+   if (composite_nomem(s-req, c)) return c;

s-stage = USERINFO_LOOKUP;
}
@@ -313,10 +311,6 @@
s-req-async.private = c;
 
return c;
-   
-failure:
-   talloc_free(c);
-   return NULL;
 }
 
 

Modified: branches/SAMBA_4_0/source/libnet/userman.c
===
--- branches/SAMBA_4_0/source/libnet/userman.c  2007-05-08 21:17:58 UTC (rev 
22762)
+++ branches/SAMBA_4_0/source/libnet/userman.c  2007-05-08 22:04:28 UTC (rev 
22763)
@@ -127,16 +127,16 @@
struct composite_context *c;
struct useradd_state *s;
 
+   if (!p || !io) return NULL;
+
/* composite allocation and setup */
-   c = talloc_zero(p, struct composite_context);
+   c = composite_create(p, dcerpc_event_context(p));
if (c == NULL) return NULL;

s = talloc_zero(c, struct useradd_state);
if (composite_nomem(s, c)) return c;

-   c-state= COMPOSITE_STATE_IN_PROGRESS;
c-private_data = s;
-   c-event_ctx= dcerpc_event_context(p);
 
/* put passed arguments to the state structure */
s-domain_handle = io-in.domain_handle;
@@ -145,8 +145,13 @@

/* preparing parameters to send rpc request */
s-createuser.in.domain_handle = io-in.domain_handle;
+
s-createuser.in.account_name  = talloc_zero(c, struct 
lsa_String);
+   if (composite_nomem(s-createuser.in.account_name, c)) return c;
+
s-createuser.in.account_name-string  = talloc_strdup(c, 
io-in.username);
+   if (composite_nomem(s-createuser.in.account_name-string, c)) return c;
+
s-createuser.out.user_handle  = s-user_handle;
s-createuser.out.rid  = s-user_rid;
 



svn commit: samba r22764 - in branches/SAMBA_4_0/source/libnet: .

2007-05-08 Thread mimir
Author: mimir
Date: 2007-05-08 22:08:26 + (Tue, 08 May 2007)
New Revision: 22764

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22764

Log:
- replace talloc_zero with composite_create
- use event context provided with libnet context instead of creating
  a new one


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_lookup.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_lookup.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_lookup.c2007-05-08 22:04:28 UTC 
(rev 22763)
+++ branches/SAMBA_4_0/source/libnet/libnet_lookup.c2007-05-08 22:08:26 UTC 
(rev 22764)
@@ -59,22 +59,14 @@
const char** methods;
 
/* allocate context and state structures */
-   c = talloc_zero(NULL, struct composite_context);
+   c = composite_create(ctx, ctx-event_ctx);
if (c == NULL) return NULL;
 
s = talloc_zero(c, struct lookup_state);
-   if (s == NULL) {
-   composite_error(c, NT_STATUS_NO_MEMORY);
-   return c;
-   }
-   
-   /* prepare event context */
-   c-event_ctx = event_context_find(c);
-   if (c-event_ctx == NULL) {
-   composite_error(c, NT_STATUS_NO_MEMORY);
-   return c;
-   }
+   if (composite_nomem(s, c)) return c;
 
+   c-private_data = s;
+
if (io == NULL || io-in.hostname == NULL) {
composite_error(c, NT_STATUS_INVALID_PARAMETER);
return c;
@@ -92,14 +84,11 @@
methods = ctx-name_res_methods;
}
 
-   c-private_data = s;
-   c-state= COMPOSITE_STATE_IN_PROGRESS;
-
/* send resolve request */
cresolve_req = resolve_name_send(s-hostname, c-event_ctx, methods);
+   if (composite_nomem(cresolve_req, c)) return c;
 
composite_continue(c, cresolve_req, continue_name_resolved, c);
-
return c;
 }
 



svn commit: samba r22734 - in branches/SAMBA_4_0/source/libnet: .

2007-05-06 Thread mimir
Author: mimir
Date: 2007-05-07 05:42:26 + (Mon, 07 May 2007)
New Revision: 22734

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22734

Log:
- use samr pipe if it is already opened
- close connection handle after domains enumeration
- collect domain names in subsequent rounds of enumeration
  (if there are more than one)


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_domain.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_domain.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_domain.c2007-05-07 03:16:54 UTC 
(rev 22733)
+++ branches/SAMBA_4_0/source/libnet/libnet_domain.c2007-05-07 05:42:26 UTC 
(rev 22734)
@@ -852,6 +852,7 @@
struct libnet_RpcConnect rpcconn;
struct samr_Connect samrconn;
struct samr_EnumDomains enumdom;
+   struct samr_Close samrclose;
const char *hostname;
struct policy_handle connect_handle;
int buf_size;
@@ -866,6 +867,7 @@
 static void continue_rpc_connect(struct composite_context *c);
 static void continue_samr_connect(struct rpc_request *c);
 static void continue_samr_enum_domains(struct rpc_request *req);
+static void continue_samr_close_handle(struct rpc_request *req);
 
 static struct domainlist* get_domain_list(TALLOC_CTX *mem_ctx, struct 
domain_list_state *s);
 
@@ -927,13 +929,15 @@
 
 /*
   Stage 3: Receive domain names available and repeat the request
-  enumeration is not complete yet
+  enumeration is not complete yet. Close samr connection handle
+  upon completion.
 */
 static void continue_samr_enum_domains(struct rpc_request *req)
 {
struct composite_context *c;
struct domain_list_state *s;
struct rpc_request *enumdom_req;
+   struct rpc_request *samrclose_req;
 
c = talloc_get_type(req-async.private, struct composite_context);
s = talloc_get_type(c-private_data, struct domain_list_state);
@@ -944,17 +948,18 @@
if (NT_STATUS_IS_OK(s-enumdom.out.result)) {
 
s-domains = get_domain_list(c, s);
-   composite_done(c);
 
} else if (NT_STATUS_EQUAL(s-enumdom.out.result, STATUS_MORE_ENTRIES)) 
{

s-domains = get_domain_list(c, s);

+   /* prepare next round of enumeration */
s-enumdom.in.connect_handle = s-connect_handle;
s-enumdom.in.resume_handle  = s-resume_handle;
s-enumdom.in.buf_size   = s-buf_size;
s-enumdom.out.resume_handle = s-resume_handle;
 
+   /* send the request */
enumdom_req = dcerpc_samr_EnumDomains_send(s-ctx-samr.pipe, 
c, s-enumdom);
if (composite_nomem(enumdom_req, c)) return;
 
@@ -962,11 +967,45 @@
 
} else {
composite_error(c, s-enumdom.out.result);
+   return;
}
+
+   /* close samr connection handle */
+   s-samrclose.in.handle  = s-connect_handle;
+   s-samrclose.out.handle = s-connect_handle;
+   
+   /* send the request */
+   samrclose_req = dcerpc_samr_Close_send(s-ctx-samr.pipe, c, 
s-samrclose);
+   if (composite_nomem(samrclose_req, c)) return;
+
+   composite_continue_rpc(c, samrclose_req, continue_samr_close_handle, c);
 }
 
 
 /*
+  Stage 4: Receive result of closing samr connection handle.
+*/
+static void continue_samr_close_handle(struct rpc_request *req)
+{
+   struct composite_context *c;
+   struct domain_list_state *s;
+
+   c = talloc_get_type(req-async.private, struct composite_context);
+   s = talloc_get_type(c-private_data, struct domain_list_state);
+
+   c-status = dcerpc_ndr_request_recv(req);
+   if (!composite_is_ok(c)) return;
+
+   /* did everything go fine ? */
+   if (!NT_STATUS_IS_OK(s-samrclose.out.result)) {
+   composite_error(c, s-samrclose.out.result);
+   }
+
+   composite_done(c);
+}
+
+
+/*
   Utility function to copy domain names from result of samr_EnumDomains call
 */
 static struct domainlist* get_domain_list(TALLOC_CTX *mem_ctx, struct 
domain_list_state *s)
@@ -974,20 +1013,28 @@
int i;
if (mem_ctx == NULL || s == NULL) return NULL;
 
-   /* number of entries returned (domains enumerated) */
-   s-count = s-enumdom.out.num_entries;
-   
/* copy domain names returned from samr_EnumDomains call */
-   s-domains = talloc_array(mem_ctx, struct domainlist, 
s-enumdom.out.num_entries);
-   for (i = 0; i  s-enumdom.out.num_entries; i++)
+   if (s-domains == NULL) {
+   s-domains = talloc_array(mem_ctx, struct domainlist,
+ s-enumdom.out.num_entries);
+   } else {
+   s-domains = talloc_realloc(mem_ctx, s-domains, struct 
domainlist,
+   s-count + 
s-enumdom.out.num_entries

svn commit: samba r22735 - in branches/SAMBA_4_0/source/libnet: .

2007-05-06 Thread mimir
Author: mimir
Date: 2007-05-07 05:55:40 + (Mon, 07 May 2007)
New Revision: 22735

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22735

Log:
correct some comments


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_domain.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_domain.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_domain.c2007-05-07 05:42:26 UTC 
(rev 22734)
+++ branches/SAMBA_4_0/source/libnet/libnet_domain.c2007-05-07 05:55:40 UTC 
(rev 22735)
@@ -1013,7 +1013,7 @@
int i;
if (mem_ctx == NULL || s == NULL) return NULL;
 
-   /* copy domain names returned from samr_EnumDomains call */
+   /* prepare domains array */
if (s-domains == NULL) {
s-domains = talloc_array(mem_ctx, struct domainlist,
  s-enumdom.out.num_entries);
@@ -1022,6 +1022,7 @@
s-count + 
s-enumdom.out.num_entries);
}
 
+   /* copy domain names returned from samr_EnumDomains call */
for (i = s-count; i  s-count + s-enumdom.out.num_entries; i++)
{
struct lsa_String *domain_name = s-enumdom.out.sam-entries[i 
- s-count].name;



svn commit: samba r22672 - in branches/SAMBA_4_0/source/libnet: .

2007-05-04 Thread mimir
Author: mimir
Date: 2007-05-04 18:59:51 + (Fri, 04 May 2007)
New Revision: 22672

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22672

Log:
use composite_create calls instead of talloc_zero.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_rpc.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_rpc.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_rpc.c   2007-05-04 18:18:53 UTC 
(rev 22671)
+++ branches/SAMBA_4_0/source/libnet/libnet_rpc.c   2007-05-04 18:59:51 UTC 
(rev 22672)
@@ -57,15 +57,13 @@
struct composite_context *pipe_connect_req;
 
/* composite context allocation and setup */
-   c = talloc_zero(mem_ctx, struct composite_context);
-   if (c == NULL) return NULL;
+   c = composite_create(ctx, ctx-event_ctx);
+   if (c == NULL) return c;
 
s = talloc_zero(c, struct rpc_connect_srv_state);
if (composite_nomem(s, c)) return c;
 
-   c-state = COMPOSITE_STATE_IN_PROGRESS;
c-private_data = s;
-   c-event_ctx = ctx-event_ctx;
 
s-ctx = ctx;
s-r = *r;
@@ -218,15 +216,13 @@
struct composite_context *lookup_dc_req;
 
/* composite context allocation and setup */
-   c = talloc_zero(mem_ctx, struct composite_context);
-   if (c == NULL) return NULL;
+   c = composite_create(ctx, ctx-event_ctx);
+   if (c == NULL) return c;
 
s = talloc_zero(c, struct rpc_connect_dc_state);
if (composite_nomem(s, c)) return c;
 
-   c-state = COMPOSITE_STATE_IN_PROGRESS;
c-private_data = s;
-   c-event_ctx = ctx-event_ctx;
 
s-ctx = ctx;
s-r   = *r;
@@ -433,15 +429,13 @@
struct rpc_connect_dci_state *s;
 
/* composite context allocation and setup */
-   c = talloc_zero(mem_ctx, struct composite_context);
-   if (c == NULL) return NULL;
+   c = composite_create(ctx, ctx-event_ctx);
+   if (c == NULL) return c;
 
s = talloc_zero(c, struct rpc_connect_dci_state);
if (composite_nomem(s, c)) return c;
 
-   c-state = COMPOSITE_STATE_IN_PROGRESS;
c-private_data = s;
-   c-event_ctx = ctx-event_ctx;
 
s-ctx = ctx;
s-r   = *r;



svn commit: samba r22565 - in branches/SAMBA_4_0/source/libnet: .

2007-04-29 Thread mimir
Author: mimir
Date: 2007-04-29 12:31:09 + (Sun, 29 Apr 2007)
New Revision: 22565

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22565

Log:
add libnet_DomainList function.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_domain.c
   branches/SAMBA_4_0/source/libnet/libnet_domain.h


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_domain.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_domain.c2007-04-29 00:09:22 UTC 
(rev 22564)
+++ branches/SAMBA_4_0/source/libnet/libnet_domain.c2007-04-29 12:31:09 UTC 
(rev 22565)
@@ -845,3 +845,250 @@
c = libnet_DomainClose_send(ctx, io, NULL);
return libnet_DomainClose_recv(c, ctx, mem_ctx, io);
 }
+
+
+struct domain_list_state { 
+   struct libnet_context *ctx;
+   struct libnet_RpcConnect rpcconn;
+   struct samr_Connect samrconn;
+   struct samr_EnumDomains enumdom;
+   const char *hostname;
+   struct policy_handle connect_handle;
+   int buf_size;
+   struct domainlist *domains;
+   uint32_t resume_handle;
+   uint32_t count;
+
+   void (*monitor_fn)(struct monitor_msg*);
+};
+
+
+static void continue_rpc_connect(struct composite_context *c);
+static void continue_samr_connect(struct rpc_request *c);
+static void continue_samr_enum_domains(struct rpc_request *req);
+
+static struct domainlist* get_domain_list(TALLOC_CTX *mem_ctx, struct 
domain_list_state *s);
+
+
+/*
+  Stage 1: Receive connected rpc pipe and send connection
+  request to SAMR service
+*/
+static void continue_rpc_connect(struct composite_context *ctx)
+{
+   struct composite_context *c;
+   struct domain_list_state *s;
+   struct rpc_request *samrconn_req;
+
+   c = talloc_get_type(ctx-async.private_data, struct composite_context);
+   s = talloc_get_type(c-private_data, struct domain_list_state);
+   
+   c-status = libnet_RpcConnect_recv(ctx, s-ctx, c, s-rpcconn);
+   if (!composite_is_ok(c)) return;
+
+   s-samrconn.in.system_name = 0;
+   s-samrconn.in.access_mask = SEC_GENERIC_READ; /* should be 
enough */
+   s-samrconn.out.connect_handle = s-connect_handle;
+
+   samrconn_req = dcerpc_samr_Connect_send(s-ctx-samr.pipe, c, 
s-samrconn);
+   if (composite_nomem(samrconn_req, c)) return;
+
+   composite_continue_rpc(c, samrconn_req, continue_samr_connect, c);
+}
+
+
+/*
+  Stage 2: Receive policy handle to the connected SAMR service and issue
+  a request to enumerate domain databases available
+*/
+static void continue_samr_connect(struct rpc_request *req)
+{
+   struct composite_context *c;
+   struct domain_list_state *s;
+   struct rpc_request *enumdom_req;
+
+   c = talloc_get_type(req-async.private, struct composite_context);
+   s = talloc_get_type(c-private_data, struct domain_list_state);
+   
+   c-status = dcerpc_ndr_request_recv(req);
+   if (!composite_is_ok(c)) return;
+
+   s-enumdom.in.connect_handle = s-connect_handle;
+   s-enumdom.in.resume_handle  = s-resume_handle;
+   s-enumdom.in.buf_size   = s-buf_size;
+   s-enumdom.out.resume_handle = s-resume_handle;
+
+   enumdom_req = dcerpc_samr_EnumDomains_send(s-ctx-samr.pipe, c, 
s-enumdom);
+   if (composite_nomem(enumdom_req, c)) return;
+
+   composite_continue_rpc(c, enumdom_req, continue_samr_enum_domains, c);
+}
+
+
+/*
+  Stage 3: Receive domain names available and repeat the request
+  enumeration is not complete yet
+*/
+static void continue_samr_enum_domains(struct rpc_request *req)
+{
+   struct composite_context *c;
+   struct domain_list_state *s;
+   struct rpc_request *enumdom_req;
+
+   c = talloc_get_type(req-async.private, struct composite_context);
+   s = talloc_get_type(c-private_data, struct domain_list_state);
+   
+   c-status = dcerpc_ndr_request_recv(req);
+   if (!composite_is_ok(c)) return;
+
+   if (NT_STATUS_IS_OK(s-enumdom.out.result)) {
+
+   s-domains = get_domain_list(c, s);
+   composite_done(c);
+
+   } else if (NT_STATUS_EQUAL(s-enumdom.out.result, STATUS_MORE_ENTRIES)) 
{
+   
+   s-domains = get_domain_list(c, s);
+   
+   s-enumdom.in.connect_handle = s-connect_handle;
+   s-enumdom.in.resume_handle  = s-resume_handle;
+   s-enumdom.in.buf_size   = s-buf_size;
+   s-enumdom.out.resume_handle = s-resume_handle;
+
+   enumdom_req = dcerpc_samr_EnumDomains_send(s-ctx-samr.pipe, 
c, s-enumdom);
+   if (composite_nomem(enumdom_req, c)) return;
+
+   composite_continue_rpc(c, enumdom_req, 
continue_samr_enum_domains, c);
+
+   } else {
+   composite_error(c, s-enumdom.out.result);
+   }
+}
+
+
+/*
+  Utility function to copy domain names from result

svn commit: samba r22566 - in branches/SAMBA_4_0/source/torture/libnet: .

2007-04-29 Thread mimir
Author: mimir
Date: 2007-04-29 12:32:17 + (Sun, 29 Apr 2007)
New Revision: 22566

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22566

Log:
add a simple test of libnet_DomainList function.


rafal


Modified:
   branches/SAMBA_4_0/source/torture/libnet/libnet.c
   branches/SAMBA_4_0/source/torture/libnet/libnet_domain.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/libnet/libnet.c
===
--- branches/SAMBA_4_0/source/torture/libnet/libnet.c   2007-04-29 12:31:09 UTC 
(rev 22565)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet.c   2007-04-29 12:32:17 UTC 
(rev 22566)
@@ -52,6 +52,7 @@
torture_suite_add_simple_test(suite, API-DOMOPENSAMR, 
torture_domain_open_samr);
torture_suite_add_simple_test(suite, API-DOMCLOSESAMR, 
torture_domain_close_samr);
torture_suite_add_simple_test(suite, API-BECOME-DC, 
torture_net_become_dc);
+   torture_suite_add_simple_test(suite, API-DOMLIST, 
torture_domain_list);
 
suite-description = talloc_strdup(suite, libnet convenience interface 
tests);
 

Modified: branches/SAMBA_4_0/source/torture/libnet/libnet_domain.c
===
--- branches/SAMBA_4_0/source/torture/libnet/libnet_domain.c2007-04-29 
12:31:09 UTC (rev 22565)
+++ branches/SAMBA_4_0/source/torture/libnet/libnet_domain.c2007-04-29 
12:32:17 UTC (rev 22566)
@@ -312,7 +312,7 @@
 {
BOOL ret = True;
NTSTATUS status;
-   TALLOC_CTX *mem_ctx=NULL;
+   TALLOC_CTX *mem_ctx = NULL;
struct libnet_context *ctx;
struct lsa_String domain_name;
struct dcerpc_binding *binding;
@@ -340,7 +340,7 @@
 
mem_ctx = talloc_init(torture_domain_close_samr);
status = dcerpc_pipe_connect(mem_ctx, p, bindstr, dcerpc_table_samr,
-cmdline_credentials, NULL);
+ctx-cred, NULL);
if (!NT_STATUS_IS_OK(status)) {
d_printf(failed to connect to server %s: %s\n, bindstr,
 nt_errstr(status));
@@ -361,7 +361,8 @@
ctx-samr.access_mask = access_mask;
ctx-samr.handle  = h;
/* we have to use pipe's event context, otherwise the call will
-  hang indefinately */
+  hang indefinitely - this wouldn't be the case if pipe was opened
+  by means of libnet call */
ctx-event_ctx   = p-conn-event_ctx;
 
ZERO_STRUCT(r);
@@ -379,3 +380,56 @@
talloc_free(ctx);
return ret;
 }
+
+
+BOOL torture_domain_list(struct torture_context *torture)
+{
+   BOOL ret = True;
+   NTSTATUS status;
+   TALLOC_CTX *mem_ctx = NULL;
+   const char *bindstr;
+   struct dcerpc_binding *binding;
+   struct libnet_context *ctx;
+   struct libnet_DomainList r;
+   int i;
+
+   bindstr = torture_setting_string(torture, binding, NULL);
+   status = dcerpc_parse_binding(torture, bindstr, binding);
+   if (!NT_STATUS_IS_OK(status)) {
+   d_printf(failed to parse binding string\n);
+   return False;
+   }
+
+   ctx = libnet_context_init(NULL);
+   if (ctx == NULL) {
+   d_printf(failed to create libnet context\n);
+   ret = False;
+   goto done;
+   }
+
+   ctx-cred = cmdline_credentials;
+   
+   mem_ctx = talloc_init(torture_domain_close_samr);
+
+   ZERO_STRUCT(r);
+   r.in.hostname = binding-host;
+
+   status = libnet_DomainList(ctx, mem_ctx, r);
+   if (!NT_STATUS_IS_OK(status)) {
+   ret = False;
+   goto done;
+   }
+
+   d_printf(Received list or domains:\n);
+   
+   for (i = 0; i  r.out.count; i++) {
+   d_printf(Name[%d]: %s\n, i, r.out.domains[i].name);
+   }
+
+done:
+   d_printf(\nStatus: %s\n, nt_errstr(status));
+
+   talloc_free(mem_ctx);
+   talloc_free(ctx);
+   return ret;
+}



svn commit: samba r22567 - in branches/SAMBA_4_0/source/script/tests: .

2007-04-29 Thread mimir
Author: mimir
Date: 2007-04-29 12:33:04 + (Sun, 29 Apr 2007)
New Revision: 22567

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22567

Log:
add NET-API-DOMLIST test to automatic testing.


rafal


Modified:
   branches/SAMBA_4_0/source/script/tests/test_net.sh


Changeset:
Modified: branches/SAMBA_4_0/source/script/tests/test_net.sh
===
--- branches/SAMBA_4_0/source/script/tests/test_net.sh  2007-04-29 12:32:17 UTC 
(rev 22566)
+++ branches/SAMBA_4_0/source/script/tests/test_net.sh  2007-04-29 12:33:04 UTC 
(rev 22567)
@@ -2,9 +2,9 @@
 
 # add tests to this list as they start passing, so we test
 # that they stay passing
-ncacn_np_tests=NET-API-LOOKUP NET-API-LOOKUPHOST NET-API-LOOKUPPDC 
NET-API-RPCCONN-BIND NET-API-RPCCONN-SRV NET-API-RPCCONN-PDC NET-API-RPCCONN-DC 
NET-API-RPCCONN-DCINFO NET-API-LISTSHARES NET-API-CREATEUSER NET-API-DELETEUSER
-ncalrpc_tests=NET-API-RPCCONN-SRV NET-API-RPCCONN-DC NET-API-RPCCONN-DCINFO 
NET-API-LISTSHARES NET-API-CREATEUSER NET-API-DELETEUSER NET-USERINFO 
NET-USERADD NET-USERDEL NET-USERMOD NET-API-LOOKUPNAME NET-API-USERINFO 
NET-API-USERLIST NET-API-DOMOPENLSA NET-API-DOMCLOSELSA NET-API-DOMOPENSAMR 
NET-API-DOMCLOSESAMR
-ncacn_ip_tcp_tests=NET-API-LOOKUP NET-API-LOOKUPHOST NET-API-LOOKUPPDC 
NET-API-RPCCONN-SRV NET-API-RPCCONN-DC NET-API-RPCCONN-DCINFO 
NET-API-LISTSHARES NET-API-CREATEUSER NET-API-DELETEUSER NET-API-MODIFYUSER
+ncacn_np_tests=NET-API-LOOKUP NET-API-LOOKUPHOST NET-API-LOOKUPPDC 
NET-API-RPCCONN-BIND NET-API-RPCCONN-SRV NET-API-RPCCONN-PDC NET-API-RPCCONN-DC 
NET-API-RPCCONN-DCINFO NET-API-LISTSHARES NET-API-CREATEUSER NET-API-DELETEUSER 
NET-API-DOMLIST
+ncalrpc_tests=NET-API-RPCCONN-SRV NET-API-RPCCONN-DC NET-API-RPCCONN-DCINFO 
NET-API-LISTSHARES NET-API-CREATEUSER NET-API-DELETEUSER NET-USERINFO 
NET-USERADD NET-USERDEL NET-USERMOD NET-API-LOOKUPNAME NET-API-USERINFO 
NET-API-USERLIST NET-API-DOMOPENLSA NET-API-DOMCLOSELSA NET-API-DOMOPENSAMR 
NET-API-DOMCLOSESAMR NET-API-DOMLIST
+ncacn_ip_tcp_tests=NET-API-LOOKUP NET-API-LOOKUPHOST NET-API-LOOKUPPDC 
NET-API-RPCCONN-SRV NET-API-RPCCONN-DC NET-API-RPCCONN-DCINFO 
NET-API-LISTSHARES NET-API-CREATEUSER NET-API-DELETEUSER NET-API-MODIFYUSER 
NET-API-DOMLIST
 
 incdir=`dirname $0`
 . $incdir/test_functions.sh



svn commit: samba r22519 - in branches/SAMBA_4_0/source/libnet: .

2007-04-25 Thread mimir
Author: mimir
Date: 2007-04-25 15:24:01 + (Wed, 25 Apr 2007)
New Revision: 22519

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22519

Log:
convert libnet_DomainOpenSamr function from state-handling routine
to composite_continue.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_domain.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_domain.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_domain.c2007-04-25 14:18:22 UTC 
(rev 22518)
+++ branches/SAMBA_4_0/source/libnet/libnet_domain.c2007-04-25 15:24:01 UTC 
(rev 22519)
@@ -1,4 +1,4 @@
-/* 
+ /* 
Unix SMB/CIFS implementation.
 
Copyright (C) Rafal Szczesniak 2005
@@ -28,22 +28,15 @@
 #include librpc/gen_ndr/ndr_samr_c.h
 #include librpc/gen_ndr/ndr_lsa_c.h
 
-static void domain_open_handler(struct rpc_request*);
 
-enum domain_open_stage { DOMOPEN_CONNECT, DOMOPEN_LOOKUP, DOMOPEN_OPEN,
-DOMOPEN_CLOSE_EXISTING, DOMOPEN_RPC_CONNECT };
-
 struct domain_open_samr_state {
-   enum domain_open_stagestage;
struct libnet_context *ctx;
struct dcerpc_pipe*pipe;
-   struct rpc_request*req;
-   struct composite_context  *rpcconn_req;
+   struct libnet_RpcConnect  rpcconn;
struct samr_Connect   connect;
struct samr_LookupDomain  lookup;
struct samr_OpenDomainopen;
struct samr_Close close;
-   struct libnet_RpcConnect  rpcconn;
struct lsa_String domain_name;
uint32_t  access_mask;
struct policy_handle  connect_handle;
@@ -54,13 +47,20 @@
 };
 
 
+static void continue_domain_open_close(struct rpc_request *req);
+static void continue_domain_open_connect(struct rpc_request *req);
+static void continue_domain_open_lookup(struct rpc_request *req);
+static void continue_domain_open_open(struct rpc_request *req);
+
+
 /**
  * Stage 0.5 (optional): Connect to samr rpc pipe
  */
-static void domain_open_rpc_connect(struct composite_context *ctx)
+static void continue_domain_open_rpc_connect(struct composite_context *ctx)
 {
struct composite_context *c;
struct domain_open_samr_state *s;
+   struct rpc_request *conn_req;
 
c = talloc_get_type(ctx-async.private_data, struct composite_context);
s = talloc_get_type(c-private_data, struct domain_open_samr_state);
@@ -76,13 +76,11 @@
s-connect.out.connect_handle  = s-connect_handle;
 
/* send request */
-   s-req = dcerpc_samr_Connect_send(s-pipe, c, s-connect);
-   if (composite_nomem(s-req, c)) return;
+   conn_req = dcerpc_samr_Connect_send(s-pipe, c, s-connect);
+   if (composite_nomem(conn_req, c)) return;
 
/* callback handler */
-   s-req-async.callback = domain_open_handler;
-   s-req-async.private  = c;
-   s-stage = DOMOPEN_CONNECT;
+   composite_continue_rpc(c, conn_req, continue_domain_open_connect, c);
 }
 
 
@@ -90,12 +88,18 @@
  * Stage 0.5 (optional): Close existing (in libnet context) domain
  * handle
  */
-static NTSTATUS domain_open_close(struct composite_context *c,
- struct domain_open_samr_state *s)
+static void continue_domain_open_close(struct rpc_request *req)
 {
+   struct composite_context *c;
+   struct domain_open_samr_state *s;
+   struct rpc_request *conn_req;
+
+   c = talloc_get_type(req-async.private, struct composite_context);
+   s = talloc_get_type(c-private_data, struct domain_open_samr_state);
+
/* receive samr_Close reply */
-   c-status = dcerpc_ndr_request_recv(s-req);
-   NT_STATUS_NOT_OK_RETURN(c-status);
+   c-status = dcerpc_ndr_request_recv(req);
+   if (!composite_is_ok(c)) return;
 
/* reset domain handle and associated data in libnet_context */
s-ctx-samr.name= NULL;
@@ -108,135 +112,100 @@
s-connect.out.connect_handle  = s-connect_handle;

/* send request */
-   s-req = dcerpc_samr_Connect_send(s-pipe, c, s-connect);
-   if (s-req == NULL) return NT_STATUS_NO_MEMORY;
+   conn_req = dcerpc_samr_Connect_send(s-pipe, c, s-connect);
+   if (composite_nomem(conn_req, c)) return;
 
/* callback handler */
-   s-req-async.callback = domain_open_handler;
-   s-req-async.private  = c;
-   s-stage = DOMOPEN_CONNECT;
-   
-   return NT_STATUS_OK;
+   composite_continue_rpc(c, conn_req, continue_domain_open_connect, c);
 }
 
 
 /**
  * Stage 1: Connect to SAM server.
  */
-static NTSTATUS domain_open_connect(struct composite_context *c,
-   struct domain_open_samr_state *s)
+static void continue_domain_open_connect(struct rpc_request *req)
 {
-   struct samr_LookupDomain *r = s-lookup;
+   struct composite_context *c;
+   struct domain_open_samr_state *s;
+   struct

svn commit: samba r22499 - in branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr: .

2007-04-24 Thread mimir
Author: mimir
Date: 2007-04-24 08:36:41 + (Tue, 24 Apr 2007)
New Revision: 22499

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22499

Log:
UsrCtx should be created within UsersView. Tree widget just
opens it and passes the domain name(s) to operate on (selectable
via combo box).


rafal


Modified:
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/UsersView.js


Changeset:
Modified: branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js  
2007-04-24 07:57:44 UTC (rev 22498)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js  
2007-04-24 08:36:41 UTC (rev 22499)
@@ -73,6 +73,13 @@
  Transition_Idle_to_Idle_via_tree_selection_changed
   },
 
+  changeSelected:
+  {
+// this one is dispatched from UsersView widget
+   domainName:
+  Transition_Idle_to_AwaitRpcResult_via_domainName_changed
+  },
+
  changeNetCtx :
  {
swat.module.netmgr.Gui :
@@ -120,7 +127,7 @@
   var trans = new qx.util.fsm.Transition(
 Transition_Idle_to_Idle_via_tree_selection_changed,
 {
-  nextState : State_AwaitRpcResult,
+  nextState : State_Idle,
 
   ontransition : function(fsm, event)
   {
@@ -135,15 +142,14 @@
 {
  module.setNetCtx(parentNode.netCtx);
}
-
+   
+   var domainName = parentNode.label;
var nodeName = selectedNode.label;
-   var callName = undefined;   // rpc call name
-   var callArgs = [ gui.getNetCtx() ];   // NetContex goes first
 
switch (nodeName)
 {
case Users:
- callName = UserMgr;
+ gui.openUserManager(module, domainName);
  break;
 
case Groups:
@@ -155,14 +161,26 @@
default:
  alert(Undefined call selected for node=[' + nodeName + ']);
}
+  }
+  
+});
 
-   // Bail out if no appropriate call name has been found
-   if (callName == undefined) return;
+  // Add the new transition
+  state.addTransition(trans);
 
-   var req = _this.callRpc(fsm, samba.ejsnet, callName, callArgs);
+  var trans = new qx.util.fsm.Transition(
+Transition_Idle_to_AwaitRpcResult_via_domainName_changed,
+{
+  nextState : State_AwaitRpcResult,
+
+  ontransition : function(fsm, event)
+  {
+   var domainName = fsm.getObject(domainName).getValue();
+   var netCtxId = swat.module.netmgr.Gui.getInstance().getNetCtx();
+   
+   var req = _this.callRpc(fsm, samba.ejsnet, UserMgr, [ netCtxId, 
domainName ]);
req.setUserData(requestType, UserMgr);
   }
-  
 });
 
   // Add the new transition
@@ -175,7 +193,8 @@
 
   ontransition : function(fsm, event)
   {
-   var netCtxId = 0;
+   var netCtxId = swat.module.netmgr.Gui.getInstance().getNetCtx();
+
var req = _this.callRpc(fsm, samba.ejsnet, NetContextCreds, [ 
netCtxId ]);
req.setUserData(requestType, NetContextCreds);
   }

Modified: branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js  
2007-04-24 07:57:44 UTC (rev 22498)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js  
2007-04-24 08:36:41 UTC (rev 22499)
@@ -213,6 +213,20 @@
 };
 
 
+qx.Proto.openUserManager = function(module, domainName)
+{
+  // Remove existing panel if there is any
+  if (this._panel.getChildrenLength()  0)
+  {
+this._panel.removeAll();
+  }
+
+  // Create user view, pass the context and the view to the panel
+  var view = new swat.module.netmgr.UsersView(module.fsm, domainName);
+  this._panel.add(view);
+};
+
+
 qx.Proto._addHostNode = function(module, rpcRequest, local)
 {
   var fsm = module.fsm;
@@ -260,14 +274,8 @@
 
 qx.Proto._initUserManager = function(module, rpcRequest)
 {
-  // Get obtained UsrCtx handle
+  // Get obtained usrCtx handle
   var usrCtx = rpcRequest.getUserData(result).data;
-
-  // Create user view and pass the context
-  var view = new swat.module.netmgr.UsersView(module.fsm);
-  view.setUsrCtx(usrCtx);
-  
-  this._panel.add(view);
 };
 
 

Modified: 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/UsersView.js
===
--- 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/UsersView.js
2007-04-24 07:57:44 UTC (rev 22498)
+++ 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/UsersView.js
2007-04-24 08:36:41

svn commit: samba r22500 - in branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr: .

2007-04-24 Thread mimir
Author: mimir
Date: 2007-04-24 09:10:43 + (Tue, 24 Apr 2007)
New Revision: 22500

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22500

Log:
there's a better way to find out if there are any children


rafal


Modified:
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js


Changeset:
Modified: branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js  
2007-04-24 08:36:41 UTC (rev 22499)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js  
2007-04-24 09:10:43 UTC (rev 22500)
@@ -215,8 +215,8 @@
 
 qx.Proto.openUserManager = function(module, domainName)
 {
-  // Remove existing panel if there is any
-  if (this._panel.getChildrenLength()  0)
+  // Remove existing panel if there is any - there can be only one at the time
+  if (this._panel.hasChildren())
   {
 this._panel.removeAll();
   }



svn commit: samba r22501 - in branches/SAMBA_4_0/webapps/swat/source/class/swat/module: ldbbrowse netmgr

2007-04-24 Thread mimir
Author: mimir
Date: 2007-04-24 09:35:55 + (Tue, 24 Apr 2007)
New Revision: 22501

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22501

Log:
dispatching events explicitly is not necessary.


rafal


Modified:
   
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/LdbBrowse.js
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/UsersView.js


Changeset:
Modified: 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/LdbBrowse.js
===
--- 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/LdbBrowse.js 
2007-04-24 09:10:43 UTC (rev 22500)
+++ 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/LdbBrowse.js 
2007-04-24 09:35:55 UTC (rev 22501)
@@ -42,7 +42,6 @@
   // Force the global database to be opened
   var dbName = module.fsm.getObject(dbName);
   dbName.setSelected(dbName.getList().getFirstChild());
-  dbName.dispatchEvent(new qx.event.type.Event(changeSelection), true);
 };
 
 

Modified: 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/UsersView.js
===
--- 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/UsersView.js
2007-04-24 09:10:43 UTC (rev 22500)
+++ 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/UsersView.js
2007-04-24 09:35:55 UTC (rev 22501)
@@ -69,7 +69,6 @@
 
   // Set default selection and dispatch the respective event to initialise the 
view
   cmbDomain.setSelected(selectedItem);
-  cmbDomain.dispatchEvent(new qx.event.type.Event(changeSelected), true);
 
   // Create an empty list view with sample column
   this._columns = { username : { label: Username, width: 150, type: text 
}};



svn commit: samba r22487 - in branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr: .

2007-04-23 Thread mimir
Author: mimir
Date: 2007-04-23 13:37:33 + (Mon, 23 Apr 2007)
New Revision: 22487

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22487

Log:
Add a separate widget class for listing users and reposition
things on NetManager's screen. Qooxdoo layout positioning can
be tricky sometimes...


rafal


Added:
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/UsersView.js
Modified:
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js


Changeset:
Modified: branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js  
2007-04-23 12:31:12 UTC (rev 22486)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js  
2007-04-23 13:37:33 UTC (rev 22487)
@@ -2,6 +2,7 @@
  * Copyright (C)  Rafal Szczesniak 2007
  */
 
+
 /**
  * Swat Net Manager class graphical user interface
  */
@@ -14,7 +15,6 @@
 
 //qx.OO.addProperty({ name : _tree, type : object });
 //qx.OO.addProperty({ name : _panel, type : object });
-//qx.OO.addProperty({ name : _view, type : object });
 //qx.OO.addProperty({ name : _txtDomain, type : object });
 //qx.OO.addProperty({ name : _txtUsername, type : object });
 
@@ -30,9 +30,9 @@
   // Main layout composing the whole form
   var vlayout = new qx.ui.layout.VerticalBoxLayout();
   vlayout.set({
-top: 20,
-left: 20,
-width: 100%,
+top: 10,
+left: 10,
+right: 10,
 bottom: 20
   });
 
@@ -70,37 +70,17 @@
   // Panel for list view
   this._panel = new qx.ui.layout.VerticalBoxLayout();
   var panel = this._panel;
-  
+
+  // TODO: Find out what's causing this bug - specifying 'width' works fine,
+  // but setting 'right' instead does not which makes impossible to position
+  // the panel against right boundary of a box
   panel.set({
   top: 0,
   left: 10,
-  width: 80%,
+  width:80%,
   height: 100%
 });
 
-  // Setup some initial columns and (empty) item list - to be replaced soon
-  // with default view loading
-  var columns = { name : { label: Name, width: 120, type: text }};
-  var items = [];
-
-  // Setup the list view
-  this._view = new qx.ui.listview.ListView(items, columns);
-  var view = this._view;
-  view.setBorder(qx.renderer.border.BorderPresets.getInstance().shadow);
-  view.setBackgroundColor(white);
-  view.set({
- top: 0,
- left: 0,
- width: 80%,
- height: 100%
-   });
-
-  // Give a list view name to handle
-  fsm.addObject(view, view);
-
-  // and the list view to the panel
-  panel.add(view);
-  
   // Add the tree view and panel for list view to the layout
   hlayout.add(tree);
   hlayout.add(panel);
@@ -110,8 +90,8 @@
   statusLayout.set({
  top: 10,
  left: 0,
- right: 0,
- height: 100%
+ width: 100%,
+ height: 20%
});
 
   // First column of status fields
@@ -119,13 +99,13 @@
   colALayout.set({
   top: 0,
   left: 0,
-  width: 150,
+  width: 25%,
   height: 100%
 });
 
   // Domain name (credentials) - label and text box
   var statusDomain = new qx.ui.layout.HorizontalBoxLayout();
-  statusDomain.set({ top: 0, left: 0, width: 100%, height: 20,
+  statusDomain.set({ top: 0, left: 0, width: 100%, height: auto,
   verticalChildrenAlign: middle });
   
   var lblDomain = new qx.ui.basic.Atom();
@@ -141,7 +121,7 @@
   
   // Username (credentials) - label and text box
   var statusUsername = new qx.ui.layout.HorizontalBoxLayout();
-  statusUsername.set({ top: 0, left: 0, width: 100%, height: 20,
+  statusUsername.set({ top: 0, left: 0, width: 100%, height: auto,
verticalChildrenAlign: middle });
 
   var lblUsername = new qx.ui.basic.Atom();
@@ -281,7 +261,13 @@
 qx.Proto._initUserManager = function(module, rpcRequest)
 {
   // Get obtained UsrCtx handle
-  var result = rpcRequest.getUserData(result).data;
+  var usrCtx = rpcRequest.getUserData(result).data;
+
+  // Create user view and pass the context
+  var view = new swat.module.netmgr.UsersView(module.fsm);
+  view.setUsrCtx(usrCtx);
+  
+  this._panel.add(view);
 };
 
 

Added: 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/UsersView.js
===
--- 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/UsersView.js
2007-04-23 12:31:12 UTC (rev 22486)
+++ 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/UsersView.js
2007-04-23 13:37:33 UTC

svn commit: samba r22346 - in branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr: .

2007-04-18 Thread mimir
Author: mimir
Date: 2007-04-18 22:16:34 + (Wed, 18 Apr 2007)
New Revision: 22346

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22346

Log:
Fix small mistake - after sending rpc request we should go to await
rpc result state instead of idle.


rafal


Modified:
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js


Changeset:
Modified: branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js  
2007-04-18 22:02:30 UTC (rev 22345)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js  
2007-04-18 22:16:34 UTC (rev 22346)
@@ -120,7 +120,7 @@
   var trans = new qx.util.fsm.Transition(
 Transition_Idle_to_Idle_via_tree_selection_changed,
 {
-  nextState : State_Idle,
+  nextState : State_AwaitRpcResult,
 
   ontransition : function(fsm, event)
   {



svn commit: samba r22323 - in branches/SAMBA_4_0/source/scripting/ejs/ejsnet: .

2007-04-17 Thread mimir
Author: mimir
Date: 2007-04-17 23:06:43 + (Tue, 17 Apr 2007)
New Revision: 22323

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22323

Log:
- add credentials property to NetContext object
- change a comment (matches the idea better)


rafal


Modified:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_ctx.c
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_ctx.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_ctx.c2007-04-17 
22:35:01 UTC (rev 22322)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_ctx.c2007-04-17 
23:06:43 UTC (rev 22323)
@@ -43,7 +43,7 @@
TALLOC_CTX *event_mem_ctx = talloc_new(mprMemCtx());
struct cli_credentials *creds;
struct libnet_context *ctx;
-   struct MprVar obj;
+   struct MprVar obj, mprCreds;
struct event_context *ev;
 
if (!event_mem_ctx) {
@@ -59,6 +59,9 @@
talloc_steal(ctx, event_mem_ctx);
 
if (argc == 0 || (argc == 1  argv[0]-type == MPR_TYPE_NULL)) {
+   /* 
+  create the default credentials
+   */
creds = cli_credentials_init(ctx);
if (creds == NULL) {
ejsSetErrorMsg(eid, cli_credential_init() failed);
@@ -68,11 +71,16 @@
cli_credentials_set_conf(creds);
cli_credentials_set_anonymous(creds);
 
+   mprCreds = mprCredentials(creds);
+
} else if (argc == 1  argv[0]-type == MPR_TYPE_OBJECT) {
-   /* get credential values from credentials object */
-   creds = mprGetPtr(argv[0], creds);
+   /*
+ get credential values from credentials object
+   */
+   mprCreds = *(argv[0]);
+   creds = mprGetPtr(mprCreds, creds);
if (creds == NULL) {
-   ejsSetErrorMsg(eid, userAuth requires a 'creds' first 
parameter);
+   ejsSetErrorMsg(eid, invalid credentials parameter);
talloc_free(ctx);
return -1;
}
@@ -82,15 +90,25 @@
talloc_free(ctx);
return -1;
}
-
+   
+   /* setup libnet_context credentials */
ctx-cred = creds;
 
-   obj = mprObject(NetCtx);
+   /* create the NetContext object */
+   obj = mprObject(NetContext);
+
+   /* add internal libnet_context pointer to the NetContext object */
mprSetPtrChild(obj, ctx, ctx);
+
+   /* add properties publicly available from js code */
+   mprCreateProperty(obj, credentials, mprCreds);

+   /* add methods to the object */
mprSetCFunction(obj, UserMgr, ejs_net_userman);
mprSetCFunction(obj, JoinDomain, ejs_net_join_domain);
mprSetCFunction(obj, SamSyncLdb, ejs_net_samsync_ldb);
+
+   /* return the object */
mpr_Return(eid, obj);
 
return 0;

Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c   2007-04-17 
22:35:01 UTC (rev 22322)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c   2007-04-17 
23:06:43 UTC (rev 22323)
@@ -59,7 +59,7 @@
 
} else if (argc == 1  mprVarIsString(argv[0]-type)) {
/* domain name can also be specified explicitly 
-  (e.g. to connect remote domain) */
+  (e.g. to connect BUILTIN domain) */
userman_domain = mprToString(argv[0]);
 
} else {



svn commit: samba r22324 - in branches/SAMBA_4_0: services/samba webapps/swat/source/class/swat/module/netmgr

2007-04-17 Thread mimir
Author: mimir
Date: 2007-04-17 23:10:57 + (Tue, 17 Apr 2007)
New Revision: 22324

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22324

Log:
Another step closer to nice listing of user accounts.


rafal


Modified:
   branches/SAMBA_4_0/services/samba/ejsnet.esp
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js


Changeset:
Sorry, the patch is too large (540 lines) to include; please use WebSVN to see 
it!
WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22324


svn commit: samba r22325 - in branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse: .

2007-04-17 Thread mimir
Author: mimir
Date: 2007-04-17 23:11:40 + (Tue, 17 Apr 2007)
New Revision: 22325

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22325

Log:
Typo fix


rafal


Modified:
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js


Changeset:
Modified: 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js   
2007-04-17 23:10:57 UTC (rev 22324)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js   
2007-04-17 23:11:40 UTC (rev 22325)
@@ -279,7 +279,7 @@
 
   hlayout.add(cbScope);
 
-  // Add a sapcer
+  // Add a spacer
   hlayout.add(new qx.ui.basic.HorizontalSpacer());
 
   // Create the 'Search' button



svn commit: samba r22179 - in branches/SAMBA_4_0/services: .

2007-04-11 Thread mimir
Author: mimir
Date: 2007-04-11 23:01:48 + (Wed, 11 Apr 2007)
New Revision: 22179

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22179

Log:
Store resource id along with the object itself to be able to return
it as number type. This fixes a small problem with resource set
method returning id of type number whereas find method was returning
id of type string.


rafal


Modified:
   branches/SAMBA_4_0/services/resources.esp


Changeset:
Modified: branches/SAMBA_4_0/services/resources.esp
===
--- branches/SAMBA_4_0/services/resources.esp   2007-04-11 14:30:42 UTC (rev 
22178)
+++ branches/SAMBA_4_0/services/resources.esp   2007-04-11 23:01:48 UTC (rev 
22179)
@@ -52,6 +52,7 @@
 /* Save the resource and its type */
 r.resource = resource;
 r.type = type;
+   r.id = this.resourceList.id;
 
 /* Add this resource to the list */
 this.resourceList[this.resourceList.id] = r;
@@ -110,7 +111,7 @@
 if (r.type == type)
 {
 /* Yup, this is the one they want. */
-return resourceId;
+ return r.id;
 }
 }
 }



svn commit: samba r22136 - in branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse: .

2007-04-09 Thread mimir
Author: mimir
Date: 2007-04-09 12:06:42 + (Mon, 09 Apr 2007)
New Revision: 22136

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22136

Log:
Fix incorrect event handling.
Submitted by John Jorgensen [EMAIL PROTECTED]


rafal


Modified:
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/Fsm.js
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js


Changeset:
Modified: 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/Fsm.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/Fsm.js   
2007-04-09 10:38:55 UTC (rev 22135)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/Fsm.js   
2007-04-09 12:06:42 UTC (rev 22136)
@@ -61,7 +61,7 @@
 {
   // Yup.  Re-open the database
   var dbName = fsm.getObject(dbName);
-  dbName.dispatchEvent(new qx.event.type.Event(changeSelection),
+  dbName.dispatchEvent(new qx.event.type.Event(changeSelected),
true);
 }
 else
@@ -104,8 +104,14 @@
   changeSelection:
   {
 tree :
-  Transition_Idle_to_AwaitRpcResult_via_tree_selection_changed,
+  Transition_Idle_to_AwaitRpcResult_via_tree_selection_changed
 
+  },
+
+ // If another database is selected, try to open it and refresh
+  // the tree
+  changeSelected:
+  {
 dbName:
   Transition_Idle_to_AwaitRpcResult_via_db_changed
   }

Modified: 
branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js   
2007-04-09 10:38:55 UTC (rev 22135)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/ldbbrowse/Gui.js   
2007-04-09 12:06:42 UTC (rev 22136)
@@ -52,9 +52,9 @@
   // Add our global database name (the only option, for now)
   var item = new qx.ui.form.ListItem(module.dbFile);
   o.add(item);
-  
+
   // We want to be notified if the selection changes
-  o.addEventListener(changeSelection, fsm.eventListener, fsm);
+  o.addEventListener(changeSelected, fsm.eventListener, fsm);
 
   // Save the database name object so we can react to changes
   fsm.addObject(dbName, o);



svn commit: samba r22005 - in branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr: .

2007-03-28 Thread mimir
Author: mimir
Date: 2007-03-28 23:01:35 + (Wed, 28 Mar 2007)
New Revision: 22005

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=22005

Log:
Add more code (doesn't work at the moment) preparing a place for
listing user accounts.


rafal


Modified:
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js


Changeset:
Modified: branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js  
2007-03-28 22:52:37 UTC (rev 22004)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js  
2007-03-28 23:01:35 UTC (rev 22005)
@@ -62,7 +62,9 @@
   appear :
   {
 swat.main.canvas :
-  Transition_Idle_to_AwaitRpcResult_via_canvas_appear
+  Transition_Idle_to_AwaitRpcResult_via_canvas_appear,
+vlayout:
+  Transition_Idle_to_AwaitRpcResult_via_vlayout_appear
   },
 
  changeSelection :
@@ -80,14 +82,29 @@
 Transition_Idle_to_AwaitRpcResult_via_canvas_appear,
 {
   nextState : State_AwaitRpcResult,
-   
+
+  ontransition : function(fsm, event)
+  {
+var request = _this.callRpc(fsm, samba.ejsnet, NetContext, []);
+   request.setUserData(requestType, NetContext);
+  }
+});
+
+  // Add the new transition
+  state.addTransition(trans);
+
+  var trans = new qx.util.fsm.Transition(
+Transition_Idle_to_AwaitRpcResult_via_vlayout_appear,
+{
+  nextState : State_AwaitRpcResult,
+
   ontransition :
-   function(fsm, event)
-   {
+function(fsm, event)
+{
  // Request our netbios name to add proper node to the tree
  var request = _this.callRpc(fsm, samba.config, lp_get, [ netbios 
name ]);
  request.setUserData(requestType, hostname);
-   }
+}
 });
 
   // Add the new transition
@@ -98,25 +115,15 @@
 {
   nextState : State_AwaitRpcResult,
 
-  ontransition :
-  function(fsm, event)
+  ontransition : function(fsm, event)
   {
var nodes = event.getData();
var selectedNode = nodes[0];
 
var gui = swat.module.netmgr.Gui.getInstance();
var parentNode = gui.getParentNode(module, selectedNode);
-
-   if (typeof(parentNode.credentials) == object)
-   {
- var creds = parentNode.credentials;
- var request = _this.callRpc(samba.ejsnet, NetContext, [ creds ]);
- request.setUserData(requestType, NetContext);
-   }
-   else
-   {
- // TODO: display a login dialog
-   }
+   
+var params = (parentNode.credentials == undefined) ? [] : [ 
parentNode.credentials ];
   }
   
 });
@@ -128,10 +135,12 @@
   {
 appear:
 {
-  tree : qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED
+  tree : qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED,
+  vlayout : qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED
 }
   }
 
+  // Add blocked events
   this.addAwaitRpcResultState(module, blockedEvents);
   
 };

Modified: branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js  
2007-03-28 22:52:37 UTC (rev 22004)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js  
2007-03-28 23:01:35 UTC (rev 22005)
@@ -13,22 +13,22 @@
 
 
 //qx.OO.addProperty({ name : _tree, type : object });
+//qx.OO.addProperty({ name : _panel, type : object });
 
 qx.Proto.buildGui = function(module)
 {
   var fsm = module.fsm;
 
-  // We need a horizontal box layout for the database name
-  var vlayout = new qx.ui.layout.VerticalBoxLayout();
-  vlayout.set({
-  top: 20,
-  left: 20,
-  right: 20,
-  bottom: 20
+  var hlayout = new qx.ui.layout.HorizontalBoxLayout();
+  hlayout.set({
+top: 0,
+left: 0,
+right: 0,
+   height: 80%
   });
-  
+
   // Create a hosts tree
-  this._tree = new qx.ui.treevirtual.TreeVirtual([Net]);
+  this._tree = new qx.ui.treevirtual.TreeVirtual([Hosts]);
   var tree = this._tree;
 
   // Set the tree's properties
@@ -36,8 +36,8 @@
  backgroundColor: 255,
 border: qx.renderer.border.BorderPresets.getInstance().thinInset,
  overflow: hidden,
- width: 30%,
- height: 1*,
+ width: 20%,
+ height: 100%,
  alwaysShowOpenCloseSymbol: true
});
 
@@ -48,10 +48,44 @@
 
   // Give a tree widget nicer name to handle
   fsm.addObject(tree, tree

svn commit: samba r21893 - in branches/SAMBA_3_0/source/libsmb: .

2007-03-20 Thread mimir
Author: mimir
Date: 2007-03-20 21:21:04 + (Tue, 20 Mar 2007)
New Revision: 21893

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=21893

Log:
Update comments so they actually reflect reality...


rafal


Modified:
   branches/SAMBA_3_0/source/libsmb/trustdom_cache.c


Changeset:
Modified: branches/SAMBA_3_0/source/libsmb/trustdom_cache.c
===
--- branches/SAMBA_3_0/source/libsmb/trustdom_cache.c   2007-03-20 20:47:17 UTC 
(rev 21892)
+++ branches/SAMBA_3_0/source/libsmb/trustdom_cache.c   2007-03-20 21:21:04 UTC 
(rev 21893)
@@ -99,7 +99,7 @@
 
 /**
  * Store trusted domain in gencache as the domain name (key)
- * and ip address of domain controller (value)
+ * and trusted domain's SID (value)
  *
  * @param name trusted domain name
  * @param alt_name alternative trusted domain name (used in ADS domains)
@@ -152,7 +152,7 @@
 
 
 /**
- * Fetch trusted domain's dc from the gencache.
+ * Fetch trusted domain's SID from the gencache.
  * This routine can also be used to check whether given
  * domain is currently trusted one.
  *
@@ -189,7 +189,7 @@
DEBUG(5, (trusted domain %s found (%s)\n, name, value));
}
 
-   /* convert ip string representation into in_addr structure */
+   /* convert sid string representation into DOM_SID structure */
if(! string_to_sid(sid, value)) {
sid = NULL;
SAFE_FREE(value);



svn commit: samba r21896 - in branches/SAMBA_4_0/services/samba: .

2007-03-20 Thread mimir
Author: mimir
Date: 2007-03-20 22:44:22 + (Tue, 20 Mar 2007)
New Revision: 21896

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=21896

Log:
- Enable creating default NetContext when no explicit credentials are
  passed. In such case use what's been provided on swat session logon.
- Create a proper NetContext object only once and add it to the resources
  for later use.


rafal


Modified:
   branches/SAMBA_4_0/services/samba/ejsnet.esp


Changeset:
Modified: branches/SAMBA_4_0/services/samba/ejsnet.esp
===
--- branches/SAMBA_4_0/services/samba/ejsnet.esp2007-03-20 22:25:14 UTC 
(rev 21895)
+++ branches/SAMBA_4_0/services/samba/ejsnet.esp2007-03-20 22:44:22 UTC 
(rev 21896)
@@ -11,53 +11,67 @@
 
 function _NetContext(params, error)
 {
+  var credParams, credentials;
+  var resName;
+
   if (params.length  1)
   {
-error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
-  too few parameters(usage: [ credentials ]));
-return error;
+/* create default NetContext based on already provided credentials */
+credentials = session.authinfo.credentials;
+resName = netCtx;
   }
-  
-  var creds = params[0];
-  if (creds == undefined)
+  else
   {
-error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
-  credentials parameter is undefined);
-return error;
-  }
+/* create user specified credentials object */
+credParams = params[0];
+if (typeof(credParams) != object)
+{
+  error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
+credentials parameter is expected to be an object);
+  return error;
+}
   
-  if (creds.domain == undefined ||
-  typeof(creds.domain) != string)
-  {
-error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
-  a valid string is expected in credentials.domain);
-return error;
-  }
+if (typeof(credParams.domain) != string)
+{
+  error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
+a valid string is expected in credentials.domain);
+  return error;
+}
   
-  if (creds.username == undefined ||
-  typeof(creds.username) != string)
-  {
-error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
-  a valid string is expected in credentials.username);
-return error;
+if (typeof(credParams.username) != string)
+{
+  error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
+a valid string is expected in credentials.username);
+  return error;
+}
+  
+if (typeof(credParams.username) != string)
+{
+  error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
+a valid string is expected in credentials.password);
+  return error;
+}
+  
+credentials = credentials_init();
+credentials.set_domain(credParams.domain);
+credentials.set_username(credParams.username);
+credentials.set_password(credParams.password);
+
+resName = netCtx[ + credParams.domain + / + credParams.username + ];
   }
-  
-  if (creds.password == undefined ||
-  typeof(creds.username) != string)
+
+  /* was this NetContext created yet ? */
+  var resId = session.resources.find(key, error);
+  if (resId != undefined)
   {
-error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
-  a valid string is expected in credentials.password);
-return error;
+/* yes, return its resource id */
+return resId;
   }
-  
-  var credentials = credentials_init();
-  credentials.set_domain(creds.domain);
-  credentials.set_username(creds.username);
-  credentials.set_password(creds.password);
-  
+
+  /* no, create the new context and assign it a resource id */
   var netCtx = NetContext(credentials);
-
-  return session.resources.set(netCtx, netCtx, error);
+  resId = session.resources.set(netCtx, resName, error);
+  return resId;
 }
 jsonrpc.method.NetContext = _NetContext;
 



svn commit: samba r21852 - in branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr: .

2007-03-15 Thread mimir
Author: mimir
Date: 2007-03-16 00:19:40 + (Fri, 16 Mar 2007)
New Revision: 21852

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=21852

Log:
Further work on initialising libnet context from netmgr.


rafal


Modified:
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js


Changeset:
Modified: branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js  
2007-03-15 22:48:30 UTC (rev 21851)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js  
2007-03-16 00:19:40 UTC (rev 21852)
@@ -43,7 +43,7 @@
result.data.origin == origins.Server 
result.data.code == serverErrors.ResourceError)
{
- this.debug(error + result);
+ alert(Error when receiving rpc: ' + result.id + ' +  
exception:  + result.data);
}
else
{
@@ -63,7 +63,13 @@
   {
 swat.main.canvas :
   Transition_Idle_to_AwaitRpcResult_via_canvas_appear
-  }
+  },
+
+ changeSelection :
+ {
+   tree :
+ Transition_Idle_to_AwaitRpcResult_via_tree_selection_changed
+ }
 }
 });
 
@@ -87,6 +93,37 @@
   // Add the new transition
   state.addTransition(trans);
 
+  var trans = new qx.util.fsm.Transition(
+Transition_Idle_to_AwaitRpcResult_via_tree_selection_changed,
+{
+  nextState : State_AwaitRpcResult,
+
+  ontransition :
+  function(fsm, event)
+  {
+   var nodes = event.getData();
+   var selectedNode = nodes[0];
+
+   var gui = swat.module.netmgr.Gui.getInstance();
+   var parentNode = gui.getParentNode(module, selectedNode);
+
+   if (typeof(parentNode.credentials) == object)
+   {
+ var creds = parentNode.credentials;
+ var request = _this.callRpc(samba.ejsnet, NetContext, [ creds ]);
+ request.setUserData(requestType, NetContext);
+   }
+   else
+   {
+ // TODO: display a login dialog
+   }
+  }
+  
+});
+
+  // Add the new transition
+  state.addTransition(trans);
+  
   blockedEvents =
   {
 appear:

Modified: branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js  
2007-03-15 22:48:30 UTC (rev 21851)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js  
2007-03-16 00:19:40 UTC (rev 21852)
@@ -85,6 +85,26 @@
 };
 
 
+qx.Proto.getParentNode = function(module, node)
+{
+  var tree = this._tree;
+  var nodes = tree.getTableModel().getData();
+  if (nodes == undefined)
+  {
+return undefined;
+  }
+
+  if (node.parentNodeId == 0)
+  {
+// there is no parent node
+return node;
+  }
+  
+  var parentNode = nodes[node.parentNodeId];
+  return parentNode;
+};
+
+
 qx.Proto._addHostNode = function(module, rpcRequest)
 {
   var fsm = module.fsm;
@@ -93,22 +113,20 @@
   // Get the tree widget
   var tree = this._tree;
   var dataModel = tree.getDataModel();
-
-  // Add new host and its service branches
+  
+  // Add new host and its service leaves
   var hostNodeId = dataModel.addBranch(null, hostname, false);
   
-  var domainNodeId = dataModel.addBranch(hostNodeId, Domain, false);
-  var usersNodeId = dataModel.addBranch(hostNodeId, Users, false);
-  var groupsNodeId = dataModel.addBranch(hostNodeId, Groups, false);
-  var srvcsNodeId = dataModel.addBranch(hostNodeId, Services, false);
-
-  // Services don't expand
-  dataModel.setState(domainNodeId, { bHideOpenClose : true });
-  dataModel.setState(usersNodeId, { bHideOpenClose : true });
-  dataModel.setState(groupsNodeId, { bHideOpenClose : true });
-  dataModel.setState(srvcsNodeId, { bHideOpenClose : true });
+  var domainNodeId = dataModel.addLeaf(hostNodeId, Domain, false);
+  var usersNodeId = dataModel.addLeaf(hostNodeId, Users, false);
+  var groupsNodeId = dataModel.addLeaf(hostNodeId, Groups, false);
+  var srvcsNodeId = dataModel.addLeaf(hostNodeId, Services, false);
   
   dataModel.setData();
+  tree.addEventListener(changeSelection, fsm.eventListener, fsm);
+
+  var hostNode = dataModel.getData()[hostNodeId];
+  hostNode.credentials = undefined;
 };
 
 



svn commit: samba r21841 - in branches/SAMBA_4_0/services/samba: .

2007-03-14 Thread mimir
Author: mimir
Date: 2007-03-14 23:25:54 + (Wed, 14 Mar 2007)
New Revision: 21841

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=21841

Log:
Rename the method and check parameters more strictly.


rafal


Modified:
   branches/SAMBA_4_0/services/samba/ejsnet.esp


Changeset:
Modified: branches/SAMBA_4_0/services/samba/ejsnet.esp
===
--- branches/SAMBA_4_0/services/samba/ejsnet.esp2007-03-14 22:15:21 UTC 
(rev 21840)
+++ branches/SAMBA_4_0/services/samba/ejsnet.esp2007-03-14 23:25:54 UTC 
(rev 21841)
@@ -9,7 +9,7 @@
 jsonrpc_include(resources.esp);
 
 
-function _init_ctx(params, error)
+function _NetContext(params, error)
 {
   if (params.length  1)
   {
@@ -26,24 +26,27 @@
 return error;
   }
   
-  if (creds.domain == undefined)
+  if (creds.domain == undefined ||
+  typeof(creds.domain) != string)
   {
 error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
-  credentials.domain is undefined);
+  a valid string is expected in credentials.domain);
 return error;
   }
   
-  if (creds.username == undefined)
+  if (creds.username == undefined ||
+  typeof(creds.username) != string)
   {
 error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
-  credentials.username is undefined);
+  a valid string is expected in credentials.username);
 return error;
   }
   
-  if (creds.password == undefined)
+  if (creds.password == undefined ||
+  typeof(creds.username) != string)
   {
 error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
-  credentials.password is undefined);
+  a valid string is expected in credentials.password);
 return error;
   }
   
@@ -56,7 +59,7 @@
 
   return session.resources.set(netCtx, netCtx, error);
 }
-jsonrpc.method.init_ctx = _init_ctx;
+jsonrpc.method.NetContext = _NetContext;
 
 
 /*



svn commit: samba r21786 - in branches/SAMBA_4_0/webapps/swat/source/class/swat/module: . netmgr

2007-03-11 Thread mimir
Author: mimir
Date: 2007-03-11 18:35:19 + (Sun, 11 Mar 2007)
New Revision: 21786

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=21786

Log:
My initial attempts in qooxdoo coding. Derrell, please take
a look and I'll have a lot of questions to you.


rafal


Added:
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js
   branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/NetManager.js


Changeset:
Added: branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js  
2007-03-11 18:32:26 UTC (rev 21785)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Fsm.js  
2007-03-11 18:35:19 UTC (rev 21786)
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C)  Rafal Szczesniak 2007
+ */
+
+/**
+ * Swat Net Manager class finite state machine
+ */
+qx.OO.defineClass(swat.module.netmgr.Fsm, swat.main.AbstractModuleFsm,
+function()
+{
+  swat.main.AbstractModuleFsm.call(this);
+});
+
+
+qx.Proto.buildFsm = function(module)
+{
+  var fsm = module.fsm;
+  var _this = this;
+
+  /*
+   * State: Idle
+   *
+   * Actions upon entry
+   *   - if returning from RPC, display the result
+   *
+   * Transition on:
+   *   changeselection on tree
+   */
+  var state = new qx.util.fsm.State(
+State_Idle,
+{
+  onentry :
+function(fsm, event)
+   {
+ if (fsm.getPreviousState() == State_AwaitRpcResult)
+ {
+   var rpcRequest = _this.popRpcRequest();
+   var result = rpcRequest.getUserData(result);
+   var origins = swat.main.AbstractModuleFsm.JsonRpc_Origin;
+   var serverErrors = swat.main.AbstractModuleFsm.JsonRpc_ServerError;
+
+   if (result.type == failed 
+   result.data.origin == origins.Server 
+   result.data.code == serverErrors.ResourceError)
+   {
+ this.debug(error + result);
+   }
+   else
+   {
+ // get the result of the call and apply it
+  var gui = swat.module.netmgr.Gui.getInstance();
+ gui.displayData(module, rpcRequest);
+   }
+   
+   rpcRequest.request.dispose();
+   rpcRequest.request = null;
+ }
+   },
+
+  events :
+{
+  appear :
+  {
+tree :
+  Transition_Idle_to_AwaitRpcResult_via_tree_appear
+  }
+}
+});
+
+  // Replace the initial Idle state with this one
+  fsm.replaceState(state, true);
+
+  var trans = new qx.util.fsm.Transition(
+Transition_Idle_to_AwaitRpcResult_via_tree_appear,
+{
+  nextState : State_AwaitRpcResult,
+   
+  ontransition :
+   function(fsm, event)
+   {
+ // Request our netbios name to add proper node to the tree
+ var request = _this.callRpc(fsm, samba.config, lp_get, [ netbios 
name ]);
+ request.setUserData(requestType, hostname);
+   }
+});
+
+  // Add the new transition
+  state.addTransition(trans);
+
+  blockedEvents =
+  {
+appear:
+{
+  tree : qx.util.fsm.FiniteStateMachine.EventHandling.BLOCKED
+}
+  }
+
+  this.addAwaitRpcResultState(module, blockedEvents);
+  
+};
+
+
+/**
+ * Singleton Instance Getter
+ */
+qx.Class.getInstance = qx.lang.Function.returnInstance;

Added: branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js  
2007-03-11 18:32:26 UTC (rev 21785)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/module/netmgr/Gui.js  
2007-03-11 18:35:19 UTC (rev 21786)
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C)  Rafal Szczesniak 2007
+ */
+
+/**
+ * Swat Net Manager class graphical user interface
+ */
+qx.OO.defineClass(swat.module.netmgr.Gui, qx.core.Object,
+function()
+{
+  qx.core.Object.call(this);
+});
+
+
+//qx.OO.addProperty({ name : _tree, type : object });
+
+qx.Proto.buildGui = function(module)
+{
+  var fsm = module.fsm;
+
+  // We need a horizontal box layout for the database name
+  var vlayout = new qx.ui.layout.VerticalBoxLayout();
+  vlayout.set({
+  top: 20,
+  left: 20,
+  right: 20,
+  height: 100%
+  });
+  
+  // Create a hosts tree
+  this._tree = new qx.ui.treevirtual.TreeVirtual([Net]);
+  var tree = this._tree;
+
+  // Set the tree's properties
+  tree.set({
+ backgroundColor: 255,
+border: qx.renderer.border.BorderPresets.getInstance().thinInset,
+ overflow: hidden,
+ width: 30%,
+ height: 1

svn commit: samba r21787 - in branches/SAMBA_4_0/webapps/swat/source/class/swat/main: .

2007-03-11 Thread mimir
Author: mimir
Date: 2007-03-11 18:36:36 + (Sun, 11 Mar 2007)
New Revision: 21787

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=21787

Log:
Add new module to the swat application.


rafal


Modified:
   branches/SAMBA_4_0/webapps/swat/source/class/swat/main/Main.js


Changeset:
Modified: branches/SAMBA_4_0/webapps/swat/source/class/swat/main/Main.js
===
--- branches/SAMBA_4_0/webapps/swat/source/class/swat/main/Main.js  
2007-03-11 18:35:19 UTC (rev 21786)
+++ branches/SAMBA_4_0/webapps/swat/source/class/swat/main/Main.js  
2007-03-11 18:36:36 UTC (rev 21787)
@@ -35,6 +35,10 @@
 new swat.main.Module(LDB Browser,
  swat.module.ldbbrowse.LdbBrowse);
 
+//#require(swat.module.netmgr.NetManager)
+new swat.main.Module(Net Manager,
+ swat.module.netmgr.NetManager);
+
 //#require(swat.module.documentation.Documentation)
 //#require(apiviewer.Viewer)
 new swat.main.Module(API Documentation,



svn commit: samba r21788 - in branches/SAMBA_4_0/services/samba: .

2007-03-11 Thread mimir
Author: mimir
Date: 2007-03-11 18:37:45 + (Sun, 11 Mar 2007)
New Revision: 21788

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=21788

Log:
Add new JSON-RPC services.


rafal


Added:
   branches/SAMBA_4_0/services/samba/config.esp
   branches/SAMBA_4_0/services/samba/ejsnet.esp


Changeset:
Added: branches/SAMBA_4_0/services/samba/config.esp
===
--- branches/SAMBA_4_0/services/samba/config.esp2007-03-11 18:36:36 UTC 
(rev 21787)
+++ branches/SAMBA_4_0/services/samba/config.esp2007-03-11 18:37:45 UTC 
(rev 21788)
@@ -0,0 +1,26 @@
+%
+
+/*
+ * Copyright (C)  Rafal Szczesniak 2007
+ */
+
+/* Simple JSON-RPC access to the configuration parameters */
+
+function _lp_get(params, error)
+{
+  if (params.length  1)
+  {
+error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
+  no parameter specified);
+return error;
+  }
+
+  var lp = loadparm_init();
+  var name = params[0];
+  var value = lp.get(name);
+
+  return value;
+}
+jsonrpc.method.lp_get = _lp_get;
+
+%

Added: branches/SAMBA_4_0/services/samba/ejsnet.esp
===
--- branches/SAMBA_4_0/services/samba/ejsnet.esp2007-03-11 18:36:36 UTC 
(rev 21787)
+++ branches/SAMBA_4_0/services/samba/ejsnet.esp2007-03-11 18:37:45 UTC 
(rev 21788)
@@ -0,0 +1,68 @@
+%
+
+/*
+ * Copyright (C)  Rafal Szczesniak 2007
+ */
+
+/* JSON-RPC mappings to the libnet functions */
+
+jsonrpc_include(resources.esp);
+
+
+function _init_ctx(params, error)
+{
+  if (params.length  1)
+  {
+error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
+  too few parameters(usage: [ credentials ]));
+return error;
+  }
+  
+  var creds = params[0];
+  if (creds == undefined)
+  {
+error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
+  credentials parameter is undefined);
+return error;
+  }
+  
+  if (creds.domain == undefined)
+  {
+error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
+  credentials.domain is undefined);
+return error;
+  }
+  
+  if (creds.username == undefined)
+  {
+error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
+  credentials.username is undefined);
+return error;
+  }
+  
+  if (creds.password == undefined)
+  {
+error.setError(jsonrpc.Constant.ServerError.ParameterMismatch,
+  credentials.password is undefined);
+return error;
+  }
+  
+  var credentials = credentials_init();
+  credentials.set_domain(creds.domain);
+  credentials.set_username(creds.username);
+  credentials.set_password(creds.password);
+  
+  var netCtx = NetContext(credentials);
+
+  return session.resources.set(netCtx, netCtx, error);
+}
+jsonrpc.method.init_ctx = _init_ctx;
+
+
+/*
+ * Local Variables:
+ * mode: c
+ * End:
+ */
+
+%



svn commit: samba r20881 - in branches/SAMBA_4_0/source/scripting/ejs/ejsnet: .

2007-01-18 Thread mimir
Author: mimir
Date: 2007-01-18 21:50:24 + (Thu, 18 Jan 2007)
New Revision: 20881

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20881

Log:
Sorting out NetUsrCtx methods. Still a couple of things left.


rafal


Modified:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c   2007-01-18 
19:18:43 UTC (rev 20880)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c   2007-01-18 
21:50:24 UTC (rev 20881)
@@ -37,7 +37,7 @@
 
 /*
   Usage:
-  usrCtx = net.UserMgr(domain);
+  usrCtx = net.UserMgr(domain = default from credentials);
 */
 int ejs_net_userman(MprVarHandle eid, int argc, struct MprVar **argv)
 {
@@ -46,68 +46,102 @@
const char *userman_domain = NULL;
struct MprVar *obj = NULL;
 
-   ctx = mprGetThisPtr(eid, ctx);
-   mem_ctx = talloc_new(mprMemCtx());
-
+   /* fetch the arguments: domain name */
if (argc == 0) {
+   /* default domain name is supplied in credentials */
userman_domain = cli_credentials_get_domain(ctx-cred);
 
} else if (argc == 1  mprVarIsString(argv[0]-type)) {
+   /* domain name can also be specified explicitly 
+  (e.g. to connect remote domain) */
userman_domain = talloc_strdup(ctx, mprToString(argv[0]));
 
} else {
ejsSetErrorMsg(eid, too many arguments);
goto done;
}
+
+   /* libnet context */
+   ctx = mprGetThisPtr(eid, ctx);
+   if (ctx == NULL) {
+   ejsSetErrorMsg(eid, ctx property returns null pointer);
+   goto done;
+   }

-   if (!userman_domain) {
+   mem_ctx = talloc_new(mprMemCtx());
+
+   /* any domain name must be specified anyway */
+   if (userman_domain == NULL) {
ejsSetErrorMsg(eid, a domain must be specified for user 
management);
goto done;
}
+   
+   /* create 'net user' subcontext */
+   obj = mprInitObject(eid, NetUsrCtx, argc, argv);
 
-   obj = mprInitObject(eid, NetUsrCtx, argc, argv);
+   /* add properties */
mprSetPtrChild(obj, ctx, ctx);
mprSetPtrChild(obj, domain, userman_domain);
 
+   /* add methods */
mprSetStringCFunction(obj, Create, ejs_net_createuser);
mprSetStringCFunction(obj, Delete, ejs_net_deleteuser);
mprSetStringCFunction(obj, Info, ejs_net_userinfo);
mprSetCFunction(obj, List, ejs_net_userlist);
 
-   return 0;
 done:
talloc_free(mem_ctx);
-   return -1;
+   return 0;
 }
 
 
+/*
+  Usage:
+  NTSTATUS = NetUsrCtx.Create(Username)
+*/
 static int ejs_net_createuser(MprVarHandle eid, int argc, char **argv)
 {
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
TALLOC_CTX *mem_ctx;
struct libnet_context *ctx;
const char *userman_domain = NULL;
+   const char *username = NULL;
struct libnet_CreateUser req;
 
-   if (argc != 1) {
-   ejsSetErrorMsg(eid, argument 1 must be a string);
-   return -1;
+   mem_ctx = talloc_new(mprMemCtx());
+   if (mem_ctx == NULL) {
+   ejsSetErrorMsg(eid, could not create memory context - out of 
memory);
+   goto done;
}
 
+   /* fetch the arguments: username */
+   if (argc == 0) {
+   ejsSetErrorMsg(eid, too little arguments);
+   goto done;
+
+   } else if (argc == 1) {
+   username = argv[0];
+
+   } else {
+   ejsSetErrorMsg(eid, too many arguments);
+   goto done;
+   }
+   
+   /* libnet context */
ctx = mprGetThisPtr(eid, ctx);
-   if (!ctx) {
+   if (ctx == NULL) {
ejsSetErrorMsg(eid, ctx property returns null pointer);
-   return -1;
+   goto done;
}
 
+   /* domain where the account is to be created */
userman_domain = mprGetThisPtr(eid, domain);
-   if (!userman_domain) {
+   if (userman_domain == NULL) {
ejsSetErrorMsg(eid, domain property returns null pointer);
-   return -1;
+   goto done;
}

-   mem_ctx = talloc_new(mprMemCtx());
-
+   /* call the libnet function */
req.in.domain_name = userman_domain;
req.in.user_name   = argv[0];
 
@@ -116,83 +150,125 @@
ejsSetErrorMsg(eid, %s, req.out.error_string);
}
 
+done:
talloc_free(mem_ctx);
mpr_Return(eid, mprNTSTATUS(status));
return 0;
 }
 
 
+/*
+  Usage:
+  NTSTATUS = NetUsrCtx.Delete(Username)
+*/
 static int ejs_net_deleteuser(MprVarHandle eid, int argc, char **argv)
 {
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
TALLOC_CTX

svn commit: samba r20882 - in branches/SAMBA_4_0/source/scripting/ejs/ejsnet: .

2007-01-18 Thread mimir
Author: mimir
Date: 2007-01-18 21:50:46 + (Thu, 18 Jan 2007)
New Revision: 20882

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20882

Log:
Formatting.


rafal


Modified:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_ctx.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_ctx.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_ctx.c2007-01-18 
21:50:24 UTC (rev 20881)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_ctx.c2007-01-18 
21:50:46 UTC (rev 20882)
@@ -51,6 +51,7 @@
return -1;
}
ev = event_context_find(event_mem_ctx);
+
ctx = libnet_context_init(ev);
/* IF we generated a new event context, it will be under here,
 * and we need it to last as long as the libnet context, so



svn commit: samba r20885 - in branches/SAMBA_4_0/source/scripting/ejs/ejsnet: .

2007-01-18 Thread mimir
Author: mimir
Date: 2007-01-18 23:21:59 + (Thu, 18 Jan 2007)
New Revision: 20885

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20885

Log:
- I forgot the page size passed to enumeration function is actually
  size of a buffer for result returned, not number of entries
- pass libnet function returned status to UserListCtx creation
  to properly mark the last chunk of the list


rafal


Modified:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/mpr_user.c
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet/mpr_user.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet/mpr_user.c   2007-01-18 
22:08:38 UTC (rev 20884)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet/mpr_user.c   2007-01-18 
23:21:59 UTC (rev 20885)
@@ -100,11 +100,13 @@
   UserListCtx.Users[]
   UserListCtx.ResumeIndex
   UserListCtx.Count
+  UserListCtx.EndOfList
  */
-struct MprVar mprUserListCtx(TALLOC_CTX *mem_ctx, struct libnet_UserList *list)
+struct MprVar mprUserListCtx(TALLOC_CTX *mem_ctx, struct libnet_UserList 
*list, NTSTATUS result)
 {
const char *name = UserListCtx;
NTSTATUS status;
+   bool endOfList;
struct MprVar mprListCtx, mprUserList;
struct MprVar mprUser, mprSid, mprUsername;
int i;
@@ -114,6 +116,9 @@
goto done;
}
 
+   endOfList = (NT_STATUS_EQUAL(result, NT_STATUS_NO_MORE_ENTRIES) ||
+NT_STATUS_IS_OK(result));
+
mprUserList = mprArray(Users);
for (i = 0; i  list-out.count; i++) {
struct userlist u = list-out.users[i];
@@ -128,7 +133,7 @@
mprSetVar(mprUser, SID, mprSid);

/* add the object to the array being constructed */
-   mprAddArray(mprUserList, 0, mprUser);
+   mprAddArray(mprUserList, i, mprUser);
}
 
mprListCtx = mprObject(name);
@@ -138,6 +143,7 @@
if (!NT_STATUS_IS_OK(status)) goto done;
status = mprSetVar(mprListCtx, ResumeIndex, 
mprCreateIntegerVar((int)list-out.resume_index));
if (!NT_STATUS_IS_OK(status)) goto done;
+   status = mprSetVar(mprListCtx, EndOfList, 
mprCreateBoolVar(endOfList));
 
 done:
return mprListCtx;

Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c   2007-01-18 
22:08:38 UTC (rev 20884)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c   2007-01-18 
23:21:59 UTC (rev 20885)
@@ -299,7 +299,7 @@
NTSTATUS status;
struct libnet_context *ctx;
const char *userlist_domain;
-   int page_size = 10; /* TODO: this should be specified in a 
nicer way */
+   int page_size = 512; /* TODO: this should be specified in a 
nicer way */
struct libnet_UserList req;
struct MprVar mprListCtx, *mprInListCtx;

@@ -359,7 +359,7 @@
goto done;
}
 
-   mprListCtx = mprUserListCtx(mem_ctx, req);
+   mprListCtx = mprUserListCtx(mem_ctx, req, status);
 
 done:
talloc_free(mem_ctx);



svn commit: samba r20782 - in branches/SAMBA_4_0/source/scripting/ejs: . ejsnet

2007-01-14 Thread mimir
Author: mimir
Date: 2007-01-14 20:37:14 + (Sun, 14 Jan 2007)
New Revision: 20782

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20782

Log:
Place ejsnet files in a separate directory.


rafal


Added:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/mpr_user.c
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_ctx.c
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/net_user.c


Changeset:
Sorry, the patch is too large (668 lines) to include; please use WebSVN to see 
it!
WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20782


svn commit: samba r20783 - in branches/SAMBA_4_0/source: . scripting/ejs scripting/ejs/ejsnet

2007-01-14 Thread mimir
Author: mimir
Date: 2007-01-14 20:47:46 + (Sun, 14 Jan 2007)
New Revision: 20783

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20783

Log:
Ejsnet files are now moved into a separate directory. I need to commit
this as the change is getting bigger and bigger.

Jelmer, Metze, I don't know enough of our build system so please check
if .mk files are ok.


rafal


Added:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet/config.mk
Removed:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet.h
Modified:
   branches/SAMBA_4_0/source/main.mk
   branches/SAMBA_4_0/source/scripting/ejs/config.mk


Changeset:
Sorry, the patch is too large (515 lines) to include; please use WebSVN to see 
it!
WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20783


svn commit: samba r20328 - in branches/SAMBA_4_0/source/libnet: .

2006-12-22 Thread mimir
Author: mimir
Date: 2006-12-22 22:34:45 + (Fri, 22 Dec 2006)
New Revision: 20328

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20328

Log:
use prereq function instead of local implementation.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_lookup.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_lookup.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_lookup.c2006-12-22 21:31:57 UTC 
(rev 20327)
+++ branches/SAMBA_4_0/source/libnet/libnet_lookup.c2006-12-22 22:34:45 UTC 
(rev 20328)
@@ -227,45 +227,6 @@
 }
 
 
-static struct composite_context* lsa_policy_opened(struct libnet_context *ctx,
-  const char *domain_name,
-  struct composite_context 
*parent_ctx,
-  struct libnet_DomainOpen 
*domain_open,
-  void (*continue_fn)(struct 
composite_context*),
-  void (*monitor)(struct 
monitor_msg*))
-{
-   struct composite_context *domopen_req;
-
-   if (domain_name == NULL) {
-   if (policy_handle_empty(ctx-lsa.handle)) {
-   domain_open-in.type= DOMAIN_LSA;
-   domain_open-in.domain_name = 
cli_credentials_get_domain(ctx-cred);
-   domain_open-in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
-
-   } else {
-   composite_error(parent_ctx, 
NT_STATUS_INVALID_PARAMETER);
-   return parent_ctx;
-   }
-   } else {
-   if (policy_handle_empty(ctx-lsa.handle) ||
-   !strequal(domain_name, ctx-lsa.name)) {
-   domain_open-in.type= DOMAIN_LSA;
-   domain_open-in.domain_name = domain_name;
-   domain_open-in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
-
-   } else {
-   return NULL;
-   }
-   }
-
-   domopen_req = libnet_DomainOpen_send(ctx, domain_open, monitor);
-   if (composite_nomem(domopen_req, parent_ctx)) return parent_ctx;
-
-   composite_continue(parent_ctx, domopen_req, continue_fn, parent_ctx);
-   return parent_ctx;
-}
-
-
 /**
  * Synchronous version of LookupDCs
  */
@@ -305,8 +266,8 @@
 {
struct composite_context *c;
struct lookup_name_state *s;
-   struct composite_context *prereq_ctx;
struct rpc_request *lookup_req;
+   BOOL prereq_met = False;
 
c = composite_create(mem_ctx, ctx-event_ctx);
if (c == NULL) return NULL;
@@ -320,9 +281,9 @@
s-monitor_fn = monitor;
s-ctx = ctx;
 
-   prereq_ctx = lsa_policy_opened(ctx, io-in.domain_name, c, s-domopen,
+   prereq_met = lsa_domain_opened(ctx, io-in.domain_name, c, s-domopen,
   continue_lookup_name, monitor);
-   if (prereq_ctx) return prereq_ctx;
+   if (!prereq_met) return c;
 
if (!prepare_lookup_params(ctx, c, s)) return c;
 



svn commit: samba r20222 - in branches/SAMBA_4_0/source/libnet: .

2006-12-17 Thread mimir
Author: mimir
Date: 2006-12-17 13:01:35 + (Sun, 17 Dec 2006)
New Revision: 20222

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20222

Log:
return status unsuccessful when null pointers are returned
from lookup call.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_lookup.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_lookup.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_lookup.c2006-12-17 02:19:56 UTC 
(rev 20221)
+++ branches/SAMBA_4_0/source/libnet/libnet_lookup.c2006-12-17 13:01:35 UTC 
(rev 20222)
@@ -418,7 +418,9 @@
struct lsa_RefDomainList *domains = 
s-lookup.out.domains;
struct lsa_TransSidArray *sids = s-lookup.out.sids;
 
-   /* TODO: verify if returned pointers are non-null */
+   if (domains == NULL || sids == NULL) {
+   composite_error(c, NT_STATUS_UNSUCCESSFUL);
+   }
 
if (sids-count  0) {
io-out.rid= sids-sids[0].rid;



svn commit: samba r20175 - in branches/SAMBA_4_0/source/scripting/ejs: .

2006-12-14 Thread mimir
Author: mimir
Date: 2006-12-14 22:12:53 + (Thu, 14 Dec 2006)
New Revision: 20175

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20175

Log:
use libnet context instead mem_ctx as the latter gets
freed just before the function returns.


rafal


Modified:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c2006-12-14 22:11:17 UTC 
(rev 20174)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c2006-12-14 22:12:53 UTC 
(rev 20175)
@@ -375,7 +375,7 @@
 
/* create UserInfo object */
mprUserInfo = mprObject(UserInfo);
-   
+
mprAccountName = mprString(req.out.account_name);
mprFullName = mprString(req.out.full_name);
mprDescription = mprString(req.out.description);
@@ -384,8 +384,8 @@
mprComment = mprString(req.out.comment);
mprLogonScript = mprString(req.out.logon_script);
mprAcctExpiry = mprString(timestring(mem_ctx, 
req.out.acct_expiry-tv_sec));
-   mprAllowPassChange = mprString(timestring(mem_ctx, 
req.out.allow_password_change-tv_sec));
-   mprForcePassChange = mprString(timestring(mem_ctx, 
req.out.force_password_change-tv_sec));
+   mprAllowPassChange = mprString(timestring(ctx, 
req.out.allow_password_change-tv_sec));
+   mprForcePassChange = mprString(timestring(ctx, 
req.out.force_password_change-tv_sec));
 
status = mprSetVar(mprUserInfo, AccountName, mprAccountName);
if (!NT_STATUS_IS_OK(status)) goto done;
@@ -407,7 +407,6 @@
if (!NT_STATUS_IS_OK(status)) goto done;
status = mprSetVar(mprUserInfo, ForcePasswordChange, 
mprForcePassChange);
if (!NT_STATUS_IS_OK(status)) goto done;
-
 done:
talloc_free(mem_ctx);
mpr_Return(eid, mprUserInfo);



svn commit: samba r20176 - in branches/SAMBA_4_0/testprogs/ejs: .

2006-12-14 Thread mimir
Author: mimir
Date: 2006-12-14 22:14:07 + (Thu, 14 Dec 2006)
New Revision: 20176

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20176

Log:
Info method returns null object if the user is not found.


rafal


Modified:
   branches/SAMBA_4_0/testprogs/ejs/ejsnet.js


Changeset:
Modified: branches/SAMBA_4_0/testprogs/ejs/ejsnet.js
===
--- branches/SAMBA_4_0/testprogs/ejs/ejsnet.js  2006-12-14 22:12:53 UTC (rev 
20175)
+++ branches/SAMBA_4_0/testprogs/ejs/ejsnet.js  2006-12-14 22:14:07 UTC (rev 
20176)
@@ -30,12 +30,18 @@
return -1;
 }
 
+
 var info = usr_ctx.Info(options.ARGV[1]);
-println(UserInfo.AccountName =  + info.AccountName);
-println(UserInfo.Description =  + info.Description);
-println(UserInfo.FullName =  + info.FullName);
-println(UserInfo.AcctExpiry =  + info.AcctExpiry);
+if (info != null) {
+   println(UserInfo.AccountName =  + info.AccountName);
+   println(UserInfo.Description =  + info.Description);
+   println(UserInfo.FullName =  + info.FullName);
+   println(UserInfo.AcctExpiry =  + info.AcctExpiry);
+} else {
+   println(Null UserInfo returned - account unknown);
+}
 
+
 var status = usr_ctx.Delete(options.ARGV[1]);
 if (status.is_ok != true) {
println(Failed to delete user account  + options.ARGV[1] + :  + 
status.errstr);



svn commit: samba r20177 - in branches/SAMBA_4_0/source/libnet: .

2006-12-14 Thread mimir
Author: mimir
Date: 2006-12-14 22:45:12 + (Thu, 14 Dec 2006)
New Revision: 20177

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20177

Log:
return the actual function status code.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_lookup.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_lookup.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_lookup.c2006-12-14 22:14:07 UTC 
(rev 20176)
+++ branches/SAMBA_4_0/source/libnet/libnet_lookup.c2006-12-14 22:45:12 UTC 
(rev 20177)
@@ -392,6 +392,8 @@
c-status = dcerpc_ndr_request_recv(req);
if (!composite_is_ok(c)) return;
 
+   c-status = s-lookup.out.result;
+
composite_done(c);
 }
 



svn commit: samba r20161 - in branches/SAMBA_4_0/source/libnet: .

2006-12-13 Thread mimir
Author: mimir
Date: 2006-12-13 23:35:50 + (Wed, 13 Dec 2006)
New Revision: 20161

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20161

Log:
Prevent potential segfault in case account is unknown.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_lookup.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_lookup.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_lookup.c2006-12-13 22:19:10 UTC 
(rev 20160)
+++ branches/SAMBA_4_0/source/libnet/libnet_lookup.c2006-12-13 23:35:50 UTC 
(rev 20161)
@@ -418,14 +418,18 @@
 
/* TODO: verify if returned pointers are non-null */
 
-   io-out.domain_sid = *domains-domains[0].sid;
-   io-out.rid= sids-sids[0].rid;
-   io-out.sid_type   = sids-sids[0].sid_type;
+   if (sids-count  0) {
+   io-out.rid= sids-sids[0].rid;
+   io-out.sid_type   = sids-sids[0].sid_type;
+   }
 
-   num_auths = io-out.domain_sid.num_auths++;
-   io-out.domain_sid.sub_auths[num_auths] = io-out.rid;
+   if (domains-count  0) {
+   io-out.domain_sid = *domains-domains[0].sid;
+   num_auths = io-out.domain_sid.num_auths++;
+   io-out.domain_sid.sub_auths[num_auths] = 
io-out.rid;
 
-   io-out.sidstr = dom_sid_string(mem_ctx, 
io-out.domain_sid);
+   io-out.sidstr = dom_sid_string(mem_ctx, 
io-out.domain_sid);
+   }
}
 
io-out.error_string = talloc_strdup(mem_ctx, Success);



svn commit: samba r20162 - in branches/SAMBA_4_0/source/libnet: .

2006-12-13 Thread mimir
Author: mimir
Date: 2006-12-13 23:36:34 + (Wed, 13 Dec 2006)
New Revision: 20162

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20162

Log:
Always return some error string.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_user.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_user.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_user.c  2006-12-13 23:35:50 UTC 
(rev 20161)
+++ branches/SAMBA_4_0/source/libnet/libnet_user.c  2006-12-13 23:36:34 UTC 
(rev 20162)
@@ -804,6 +804,9 @@
r-out.acct_flags = info-acct_flags;
 
r-out.error_string = talloc_strdup(mem_ctx, Success);
+
+   } else {
+   r-out.error_string = talloc_asprintf(mem_ctx, Error: %s, 
nt_errstr(status));
}
 
talloc_free(c);



svn commit: samba r20163 - in branches/SAMBA_4_0/source/scripting/ejs: .

2006-12-13 Thread mimir
Author: mimir
Date: 2006-12-13 23:37:22 + (Wed, 13 Dec 2006)
New Revision: 20163

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20163

Log:
Return null object if no user is found.


rafal


Modified:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c2006-12-13 23:36:34 UTC 
(rev 20162)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c2006-12-13 23:37:22 UTC 
(rev 20163)
@@ -367,11 +367,15 @@
status = libnet_UserInfo(ctx, mem_ctx, req);
if (!NT_STATUS_IS_OK(status)) {
ejsSetErrorMsg(eid, %s, req.out.error_string);
+   
+   /* create null object to return */
+   mprUserInfo = mprCreateNullVar();
+   goto done;
}
 
/* create UserInfo object */
mprUserInfo = mprObject(UserInfo);
-
+   
mprAccountName = mprString(req.out.account_name);
mprFullName = mprString(req.out.full_name);
mprDescription = mprString(req.out.description);



svn commit: samba r20164 - in branches/SAMBA_4_0/source/script/tests: .

2006-12-13 Thread mimir
Author: mimir
Date: 2006-12-13 23:53:42 + (Wed, 13 Dec 2006)
New Revision: 20164

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20164

Log:
Disable the test till tomorrow when I find out what caused
the crash.


rafal


Modified:
   branches/SAMBA_4_0/source/script/tests/test_ejs.sh


Changeset:
Modified: branches/SAMBA_4_0/source/script/tests/test_ejs.sh
===
--- branches/SAMBA_4_0/source/script/tests/test_ejs.sh  2006-12-13 23:37:22 UTC 
(rev 20163)
+++ branches/SAMBA_4_0/source/script/tests/test_ejs.sh  2006-12-13 23:53:42 UTC 
(rev 20164)
@@ -27,7 +27,7 @@
 testit $f $SCRIPTDIR/$f $CONFIGURATION ncalrpc: -U$USERNAME%$PASSWORD || 
failed=`expr $failed + 1`
 done
 
-testit ejsnet.js $SCRIPTDIR/ejsnet.js $CONFIGURATION -U$USERNAME%$PASSWORD 
$DOMAIN ejstestuser || failed=`expr $failed + 1`
+#testit ejsnet.js $SCRIPTDIR/ejsnet.js $CONFIGURATION -U$USERNAME%$PASSWORD 
$DOMAIN ejstestuser || failed=`expr $failed + 1`
 
 testit ldb.js $SCRIPTDIR/ldb.js `pwd` $CONFIGURATION || failed=`expr $failed 
+ 1`
 



svn commit: samba r20137 - in branches/SAMBA_4_0/source/libnet: .

2006-12-12 Thread mimir
Author: mimir
Date: 2006-12-12 22:28:33 + (Tue, 12 Dec 2006)
New Revision: 20137

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20137

Log:
return the proper status.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/userman.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/userman.c
===
--- branches/SAMBA_4_0/source/libnet/userman.c  2006-12-12 22:05:48 UTC (rev 
20136)
+++ branches/SAMBA_4_0/source/libnet/userman.c  2006-12-12 22:28:33 UTC (rev 
20137)
@@ -59,9 +59,12 @@
 {
c-status = dcerpc_ndr_request_recv(s-req);
NT_STATUS_NOT_OK_RETURN(c-status);
+
+   /* return the actual function call status */
+   c-status = s-createuser.out.result;

c-state = COMPOSITE_STATE_DONE;
-   return NT_STATUS_OK;
+   return c-status;
 }
 
 



svn commit: samba r20138 - in branches/SAMBA_4_0/source/libnet: .

2006-12-12 Thread mimir
Author: mimir
Date: 2006-12-12 22:34:35 + (Tue, 12 Dec 2006)
New Revision: 20138

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20138

Log:
return the proper status for the other functions as well.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/userman.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/userman.c
===
--- branches/SAMBA_4_0/source/libnet/userman.c  2006-12-12 22:28:33 UTC (rev 
20137)
+++ branches/SAMBA_4_0/source/libnet/userman.c  2006-12-12 22:34:35 UTC (rev 
20138)
@@ -309,10 +309,13 @@
/* receive samr_DeleteUser result */
c-status = dcerpc_ndr_request_recv(s-req);
NT_STATUS_NOT_OK_RETURN(c-status);
+   
+   /* return the actual function call status */
+   c-status = s-deleteuser.out.result;
 
c-state = COMPOSITE_STATE_DONE;
 
-   return NT_STATUS_OK;
+   return c-status;
 }
 
 
@@ -778,7 +781,8 @@
c-status = dcerpc_ndr_request_recv(s-req);
NT_STATUS_NOT_OK_RETURN(c-status);
 
-   NT_STATUS_NOT_OK_RETURN(s-setuser.out.result);
+   /* return the actual function call status */
+   c-status = s-setuser.out.result;
 
if (s-change.fields == 0) {
/* all fields have been set - we're done */
@@ -788,7 +792,7 @@
return usermod_change(c, s);
}
 
-   return NT_STATUS_OK;
+   return c-status;
 }
 
 



svn commit: samba r20143 - in branches/SAMBA_4_0: source/scripting/ejs testprogs/ejs

2006-12-12 Thread mimir
Author: mimir
Date: 2006-12-12 23:01:51 + (Tue, 12 Dec 2006)
New Revision: 20143

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=20143

Log:
a bit of experiments before doing serious changes in ejsnet.


rafal


Modified:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c
   branches/SAMBA_4_0/testprogs/ejs/ejsnet.js


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c2006-12-12 22:57:43 UTC 
(rev 20142)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c2006-12-12 23:01:51 UTC 
(rev 20143)
@@ -336,6 +336,11 @@
struct libnet_context *ctx;
const char *userman_domain = NULL;
struct libnet_UserInfo req;
+   struct MprVar mprUserInfo;
+   struct MprVar mprAccountName, mprFullName, mprDescription;
+   struct MprVar mprHomeDir, mprHomeDrive, mprComment;
+   struct MprVar mprLogonScript;
+   struct MprVar mprAcctExpiry, mprAllowPassChange, mprForcePassChange;
 
if (argc != 1) {
ejsSetErrorMsg(eid, argument 1 must be a string);
@@ -364,9 +369,44 @@
ejsSetErrorMsg(eid, %s, req.out.error_string);
}
 
-   /* TODO: create user info object and pass received properties */
+   /* create UserInfo object */
+   mprUserInfo = mprObject(UserInfo);
 
+   mprAccountName = mprString(req.out.account_name);
+   mprFullName = mprString(req.out.full_name);
+   mprDescription = mprString(req.out.description);
+   mprHomeDir = mprString(req.out.home_directory);
+   mprHomeDrive = mprString(req.out.home_drive);
+   mprComment = mprString(req.out.comment);
+   mprLogonScript = mprString(req.out.logon_script);
+   mprAcctExpiry = mprString(timestring(mem_ctx, 
req.out.acct_expiry-tv_sec));
+   mprAllowPassChange = mprString(timestring(mem_ctx, 
req.out.allow_password_change-tv_sec));
+   mprForcePassChange = mprString(timestring(mem_ctx, 
req.out.force_password_change-tv_sec));
+
+   status = mprSetVar(mprUserInfo, AccountName, mprAccountName);
+   if (!NT_STATUS_IS_OK(status)) goto done;
+   status = mprSetVar(mprUserInfo, FullName, mprFullName);
+   if (!NT_STATUS_IS_OK(status)) goto done;
+   status = mprSetVar(mprUserInfo, Description, mprDescription);
+   if (!NT_STATUS_IS_OK(status)) goto done;
+   status = mprSetVar(mprUserInfo, HomeDirectory, mprHomeDir);
+   if (!NT_STATUS_IS_OK(status)) goto done;
+   status = mprSetVar(mprUserInfo, HomeDrive, mprHomeDrive);
+   if (!NT_STATUS_IS_OK(status)) goto done;
+   status = mprSetVar(mprUserInfo, Comment, mprComment);
+   if (!NT_STATUS_IS_OK(status)) goto done;
+   status = mprSetVar(mprUserInfo, LogonScript, mprLogonScript);
+   if (!NT_STATUS_IS_OK(status)) goto done;
+   status = mprSetVar(mprUserInfo, AcctExpiry, mprAcctExpiry);
+   if (!NT_STATUS_IS_OK(status)) goto done;
+   status = mprSetVar(mprUserInfo, AllowPasswordChange, 
mprAllowPassChange);
+   if (!NT_STATUS_IS_OK(status)) goto done;
+   status = mprSetVar(mprUserInfo, ForcePasswordChange, 
mprForcePassChange);
+   if (!NT_STATUS_IS_OK(status)) goto done;
+
+done:
talloc_free(mem_ctx);
+   mpr_Return(eid, mprUserInfo);
return 0;
 }
 

Modified: branches/SAMBA_4_0/testprogs/ejs/ejsnet.js
===
--- branches/SAMBA_4_0/testprogs/ejs/ejsnet.js  2006-12-12 22:57:43 UTC (rev 
20142)
+++ branches/SAMBA_4_0/testprogs/ejs/ejsnet.js  2006-12-12 23:01:51 UTC (rev 
20143)
@@ -30,6 +30,12 @@
return -1;
 }
 
+var info = usr_ctx.Info(options.ARGV[1]);
+println(UserInfo.AccountName =  + info.AccountName);
+println(UserInfo.Description =  + info.Description);
+println(UserInfo.FullName =  + info.FullName);
+println(UserInfo.AcctExpiry =  + info.AcctExpiry);
+
 var status = usr_ctx.Delete(options.ARGV[1]);
 if (status.is_ok != true) {
println(Failed to delete user account  + options.ARGV[1] + :  + 
status.errstr);



svn commit: samba r19970 - in branches/SAMBA_4_0/source/libnet: .

2006-11-30 Thread mimir
Author: mimir
Date: 2006-11-30 19:51:58 + (Thu, 30 Nov 2006)
New Revision: 19970

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=19970

Log:
more comments and fixes


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_user.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_user.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_user.c  2006-11-30 13:34:17 UTC 
(rev 19969)
+++ branches/SAMBA_4_0/source/libnet/libnet_user.c  2006-11-30 19:51:58 UTC 
(rev 19970)
@@ -893,9 +893,11 @@
   continue_lsa_domain_opened, monitor);
if (prereq_ctx) return prereq_ctx;
 
+   /* prepare arguments of QueryDomainInfo call */
s-query_domain.in.handle = ctx-lsa.handle;
s-query_domain.in.level  = LSA_POLICY_INFO_DOMAIN;

+   /* send the request */
query_req = dcerpc_lsa_QueryInfoPolicy_send(ctx-lsa.pipe, c, 
s-query_domain);
if (composite_nomem(query_req, c)) return c;
 
@@ -905,7 +907,8 @@
 
 
 /*
- * receive samr domain handle and request to enumerate accounts
+ * Stage 0.5 (optional): receive lsa domain handle and send
+ * request to query domain info
  */
 static void continue_lsa_domain_opened(struct composite_context *ctx)
 {
@@ -915,14 +918,16 @@

c = talloc_get_type(ctx-async.private_data, struct composite_context);
s = talloc_get_type(c-private_data, struct userlist_state);
-
+   
/* receive lsa domain handle */
c-status = libnet_DomainOpen_recv(ctx, s-ctx, c, s-domain_open);
if (!composite_is_ok(c)) return;
 
+   /* prepare arguments of QueryDomainInfo call */
s-query_domain.in.handle = s-ctx-lsa.handle;
s-query_domain.in.level  = LSA_POLICY_INFO_DOMAIN;
-   
+
+   /* send the request */
query_req = dcerpc_lsa_QueryInfoPolicy_send(s-ctx-lsa.pipe, c, 
s-query_domain);
if (composite_nomem(query_req, c)) return;
 
@@ -931,7 +936,8 @@
 
 
 /*
- * receive domain info and request to enum users, provided a valid samr handle 
is opened
+ * Stage 1: receive domain info and request to enum users,
+ * provided a valid samr handle is opened
  */
 static void continue_domain_queried(struct rpc_request *req)
 {
@@ -943,23 +949,26 @@
c = talloc_get_type(req-async.private, struct composite_context);
s = talloc_get_type(c-private_data, struct userlist_state);
 
+   /* receive result of rpc request */
c-status = dcerpc_ndr_request_recv(req);
if (!composite_is_ok(c)) return;
 
+   /* get the returned domain info */
s-dominfo = s-query_domain.out.info-domain;
 
+   /* make sure we have samr domain handle before continuing */
prereq_ctx = samr_domain_opened(s-ctx, s-domain_name, c, 
s-domain_open,
continue_samr_domain_opened, 
s-monitor_fn);
if (prereq_ctx) return;
 
-   /* prepare arguments */
+   /* prepare arguments od EnumDomainUsers call */
s-user_list.in.domain_handle = s-ctx-samr.handle;
s-user_list.in.max_size = s-page_size;
s-user_list.in.resume_handle = s-resume_index;
s-user_list.in.acct_flags = ACB_NORMAL;
s-user_list.out.resume_handle = s-resume_index;
 
-   /* send request */
+   /* send the request */
enum_req = dcerpc_samr_EnumDomainUsers_send(s-ctx-samr.pipe, c, 
s-user_list);
if (composite_nomem(enum_req, c)) return;
 
@@ -968,7 +977,8 @@
 
 
 /*
- * receive samr domain handle and request to enumerate accounts
+ * Stage 1.5 (optional): receive samr domain handle
+ * and request to enumerate accounts
  */
 static void continue_samr_domain_opened(struct composite_context *ctx)
 {
@@ -979,18 +989,18 @@
c = talloc_get_type(ctx-async.private_data, struct composite_context);
s = talloc_get_type(c-private_data, struct userlist_state);
 
-   /* receive lsa domain handle */
+   /* receive samr domain handle */
c-status = libnet_DomainOpen_recv(ctx, s-ctx, c, s-domain_open);
if (!composite_is_ok(c)) return;
 
-   /* prepare arguments */
+   /* prepare arguments od EnumDomainUsers call */
s-user_list.in.domain_handle = s-ctx-samr.handle;
s-user_list.in.max_size = s-page_size;
s-user_list.in.resume_handle = s-resume_index;
s-user_list.in.acct_flags = ACB_NORMAL;
s-user_list.out.resume_handle = s-resume_index;

-   /* send request */
+   /* send the request */
enum_req = dcerpc_samr_EnumDomainUsers_send(s-ctx-samr.pipe, c, 
s-user_list);
if (composite_nomem(enum_req, c)) return;
 
@@ -999,7 +1009,7 @@
 
 
 /*
- * receive enumerated users and their rids
+ * Stage 2: receive enumerated users and their rids
  */
 static void continue_users_enumerated(struct rpc_request *req)
 {
@@ -1010,40 +1020,50 @@
c = talloc_get_type

svn commit: samba r19971 - in branches/SAMBA_4_0/testprogs/ejs: .

2006-11-30 Thread mimir
Author: mimir
Date: 2006-11-30 20:28:12 + (Thu, 30 Nov 2006)
New Revision: 19971

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=19971

Log:
typo fix


rafal


Modified:
   branches/SAMBA_4_0/testprogs/ejs/ejsnet.js


Changeset:
Modified: branches/SAMBA_4_0/testprogs/ejs/ejsnet.js
===
--- branches/SAMBA_4_0/testprogs/ejs/ejsnet.js  2006-11-30 19:51:58 UTC (rev 
19970)
+++ branches/SAMBA_4_0/testprogs/ejs/ejsnet.js  2006-11-30 20:28:12 UTC (rev 
19971)
@@ -20,7 +20,7 @@
 var ctx = NetContext(creds);
 var usr_ctx = ctx.UserMgr(options.ARGV[0]);
 if (usr_ctx == undefined) {
-   println(Couln't get user management context.);
+   println(Couldn't get user management context.);
return -1;
 }
 



svn commit: samba r19972 - in branches/SAMBA_4_0/source/scripting/ejs: .

2006-11-30 Thread mimir
Author: mimir
Date: 2006-11-30 20:29:49 + (Thu, 30 Nov 2006)
New Revision: 19972

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=19972

Log:
put a placeholder of a new js function and use error strings
returned by each libnet call.


rafal


Modified:
   branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c


Changeset:
Modified: branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c
===
--- branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c2006-11-30 20:28:12 UTC 
(rev 19971)
+++ branches/SAMBA_4_0/source/scripting/ejs/ejsnet.c2006-11-30 20:29:49 UTC 
(rev 19972)
@@ -28,14 +28,16 @@
 #include events/events.h
 #include auth/credentials/credentials.h
 
-static int ejs_net_userman(MprVarHandle, int, struct MprVar**);
-static int ejs_net_createuser(MprVarHandle, int, char**);
+static int ejs_net_userman(MprVarHandle eid, int argc, struct MprVar** argv);
+static int ejs_net_createuser(MprVarHandle eid, int argc, char **argv);
 static int ejs_net_deleteuser(MprVarHandle eid, int argc, char **argv);
+static int ejs_net_userinfo(MprVarHandle eid, int argc, char **argv);
 static int ejs_net_join_domain(MprVarHandle eid, int argc, struct MprVar 
**argv);
 static int ejs_net_samsync_ldb(MprVarHandle eid, int argc, struct MprVar 
**argv);
 
-/* Usage:
-   net = NetContext(credentials);
+/*
+  Usage:
+  net = NetContext(credentials);
 */
 
 static int ejs_net_context(MprVarHandle eid, int argc, struct MprVar **argv)
@@ -92,6 +94,7 @@
return 0;
 }
 
+
 static int ejs_net_join_domain(MprVarHandle eid, int argc, struct MprVar 
**argv)
 {
TALLOC_CTX *mem_ctx;
@@ -150,6 +153,7 @@
return 0;
 }
 
+
 static int ejs_net_samsync_ldb(MprVarHandle eid, int argc, struct MprVar 
**argv)
 {
TALLOC_CTX *mem_ctx;
@@ -197,6 +201,11 @@
return 0;
 }
 
+
+/*
+  Usage:
+  usrCtx = net.UserMgr(domain);
+*/
 static int ejs_net_userman(MprVarHandle eid, int argc, struct MprVar **argv)
 {
TALLOC_CTX *mem_ctx;
@@ -229,6 +238,7 @@
 
mprSetStringCFunction(obj, Create, ejs_net_createuser);
mprSetStringCFunction(obj, Delete, ejs_net_deleteuser);
+   mprSetStringCFunction(obj, Info, ejs_net_userinfo);
 
return 0;
 done:
@@ -269,7 +279,7 @@
 
status = libnet_CreateUser(ctx, mem_ctx, req);
if (!NT_STATUS_IS_OK(status)) {
-   ejsSetErrorMsg(eid, error when creating user: %s, 
nt_errstr(status));
+   ejsSetErrorMsg(eid, %s, req.out.error_string);
}
 
talloc_free(mem_ctx);
@@ -277,6 +287,7 @@
return 0;
 }
 
+
 static int ejs_net_deleteuser(MprVarHandle eid, int argc, char **argv)
 {
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
@@ -309,7 +320,7 @@
 
status = libnet_DeleteUser(ctx, mem_ctx, req);
if (!NT_STATUS_IS_OK(status)) {
-   ejsSetErrorMsg(eid, error when creating user: %s, 
nt_errstr(status));
+   ejsSetErrorMsg(eid, %s, req.out.error_string);
}
 
talloc_free(mem_ctx);
@@ -318,6 +329,48 @@
 }
 
 
+static int ejs_net_userinfo(MprVarHandle eid, int argc, char **argv)
+{
+   NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
+   TALLOC_CTX *mem_ctx;
+   struct libnet_context *ctx;
+   const char *userman_domain = NULL;
+   struct libnet_UserInfo req;
+
+   if (argc != 1) {
+   ejsSetErrorMsg(eid, argument 1 must be a string);
+   return -1;
+   }
+
+   ctx = mprGetThisPtr(eid, ctx);
+   if (!ctx) {
+   ejsSetErrorMsg(eid, ctx property returns null pointer);
+   return -1;
+   }
+
+   userman_domain = mprGetThisPtr(eid, domain);
+   if (!userman_domain) {
+   ejsSetErrorMsg(eid, domain property returns null pointer);
+   return -1;
+   }
+
+   mem_ctx = talloc_new(mprMemCtx());
+   
+   req.in.domain_name = userman_domain;
+   req.in.user_name   = argv[0];
+   
+   status = libnet_UserInfo(ctx, mem_ctx, req);
+   if (!NT_STATUS_IS_OK(status)) {
+   ejsSetErrorMsg(eid, %s, req.out.error_string);
+   }
+
+   /* TODO: create user info object and pass received properties */
+
+   talloc_free(mem_ctx);
+   return 0;
+}
+
+
 void ejsnet_setup(void)
 {
ejsDefineCFunction(-1, NetContext, ejs_net_context, NULL, 
MPR_VAR_SCRIPT_HANDLE);



svn commit: samba r19956 - in branches/SAMBA_4_0/source/libnet: .

2006-11-29 Thread mimir
Author: mimir
Date: 2006-11-29 22:10:15 + (Wed, 29 Nov 2006)
New Revision: 19956

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=19956

Log:
remove unused function


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_user.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_user.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_user.c  2006-11-29 20:40:37 UTC 
(rev 19955)
+++ branches/SAMBA_4_0/source/libnet/libnet_user.c  2006-11-29 22:10:15 UTC 
(rev 19956)
@@ -31,64 +31,6 @@
 #include libcli/security/security.h
 
 
-/**
- * Verify, before actually doing anything with user accounts, whether
- * required domain is already opened and thus ready for operation.
- * If it is not, or if the opened domain is not the one requested, open
- * the requested domain.
- */
-static struct composite_context* domain_opened(struct libnet_context *ctx,
-  const char *domain_name,
-  struct composite_context 
*parent_ctx,
-  struct libnet_DomainOpen 
*domain_open,
-  void (*continue_fn)(struct 
composite_context*),
-  void (*monitor)(struct 
monitor_msg*))
-{
-   struct composite_context *domopen_req;
-
-   if (domain_name == NULL) {
-   /*
-* Try to guess the domain name from credentials,
-* if it's not been explicitly specified.
-*/
-
-   if (policy_handle_empty(ctx-samr.handle)) {
-   domain_open-in.domain_name = 
cli_credentials_get_domain(ctx-cred);
-   domain_open-in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
-
-   } else {
-   composite_error(parent_ctx, 
NT_STATUS_INVALID_PARAMETER);
-   return parent_ctx;
-   }
-
-   } else {
-   /*
-* The domain name has been specified, so check whether the same
-* domain is already opened. If it is - just return NULL. Start
-* opening a new domain otherwise.
-*/
-
-   if (policy_handle_empty(ctx-samr.handle) ||
-   !strequal(domain_name, ctx-samr.name)) {
-   domain_open-in.domain_name = domain_name;
-   domain_open-in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED; 

-
-   } else {
-   /* domain has already been opened and it's the same 
domain
-  as requested */
-   return NULL;
-   }
-   }
-
-   /* send request to open the domain */
-   domopen_req = libnet_DomainOpen_send(ctx, domain_open, monitor);
-   if (composite_nomem(domopen_req, parent_ctx)) return parent_ctx;
-   
-   composite_continue(parent_ctx, domopen_req, continue_fn, parent_ctx);
-   return parent_ctx;
-}
-
-
 struct create_user_state {
struct libnet_CreateUser r;
struct libnet_DomainOpen domain_open;



svn commit: samba r19937 - in branches/SAMBA_4_0/source/libnet: .

2006-11-28 Thread mimir
Author: mimir
Date: 2006-11-28 21:01:10 + (Tue, 28 Nov 2006)
New Revision: 19937

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=19937

Log:
fix sending monitor message (spotted by metze).


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_rpc.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_rpc.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_rpc.c   2006-11-28 18:51:49 UTC 
(rev 19936)
+++ branches/SAMBA_4_0/source/libnet/libnet_rpc.c   2006-11-28 21:01:10 UTC 
(rev 19937)
@@ -330,14 +330,14 @@
s-r.out.dcerpc_pipe = s-r2.out.dcerpc_pipe;
 
/* prepare a monitor message and post it */
-   msg.type   = net_pipe_connected;
-   msg.data   = NULL;
-   msg.data_size  = 0;
-/* TODO: something is really wrong here!!! */
data.host  = s-r.out.dcerpc_pipe-binding-host;
data.endpoint  = s-r.out.dcerpc_pipe-binding-endpoint;
data.transport = s-r.out.dcerpc_pipe-binding-transport;
 
+   msg.type   = net_pipe_connected;
+   msg.data   = (void*)data;
+   msg.data_size  = sizeof(data);
+   
if (s-monitor_fn) s-monitor_fn(msg);
 
composite_done(c);



svn commit: samba r19938 - in branches/SAMBA_4_0/source/libnet: .

2006-11-28 Thread mimir
Author: mimir
Date: 2006-11-28 21:03:39 + (Tue, 28 Nov 2006)
New Revision: 19938

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=19938

Log:
Return function status instead of rpc layer status. This is
needed to correctly return STATUS_MORE_ENTRIES and the like.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_user.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_user.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_user.c  2006-11-28 21:01:10 UTC 
(rev 19937)
+++ branches/SAMBA_4_0/source/libnet/libnet_user.c  2006-11-28 21:03:39 UTC 
(rev 19938)
@@ -1070,7 +1070,11 @@
 
/* receive result of lsa_EnumAccounts request */
c-status = dcerpc_ndr_request_recv(req);
+   if (!composite_is_ok(c)) return;
 
+   /* get the actual status of the rpc call result */
+   c-status = s-user_list.out.result;
+
if (NT_STATUS_IS_OK(c-status) ||
NT_STATUS_EQUAL(c-status, STATUS_MORE_ENTRIES) ||
NT_STATUS_EQUAL(c-status, NT_STATUS_NO_MORE_ENTRIES)) {



svn commit: samba r19922 - in branches/SAMBA_4_0/source/libnet: .

2006-11-27 Thread mimir
Author: mimir
Date: 2006-11-27 21:55:24 + (Mon, 27 Nov 2006)
New Revision: 19922

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=revroot=sambarev=19922

Log:
Use new composite_create functions in composite context
initialisation.
Redesign libnet_UserList function to actually do what it
was intended to do.


rafal


Modified:
   branches/SAMBA_4_0/source/libnet/libnet_user.c
   branches/SAMBA_4_0/source/libnet/libnet_user.h


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_user.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_user.c  2006-11-27 19:06:58 UTC 
(rev 19921)
+++ branches/SAMBA_4_0/source/libnet/libnet_user.c  2006-11-27 21:55:24 UTC 
(rev 19922)
@@ -25,7 +25,7 @@
 #include auth/credentials/credentials.h
 #include librpc/ndr/libndr.h
 #include librpc/gen_ndr/samr.h
-#include librpc/gen_ndr/ndr_samr.h
+#include librpc/gen_ndr/ndr_samr_c.h
 #include librpc/gen_ndr/lsa.h
 #include librpc/gen_ndr/ndr_lsa_c.h
 #include libcli/security/security.h
@@ -124,15 +124,13 @@
struct composite_context *prereq_ctx;
 
/* composite context allocation and setup */
-   c = talloc_zero(mem_ctx, struct composite_context);
+   c = composite_create(mem_ctx, ctx-event_ctx);
if (c == NULL) return NULL;
 
s = talloc_zero(c, struct create_user_state);
if (composite_nomem(s, c)) return c;
 
-   c-state = COMPOSITE_STATE_IN_PROGRESS;
c-private_data = s;
-   c-event_ctx = ctx-event_ctx;
 
/* store arguments in the state structure */
s-ctx = ctx;
@@ -140,8 +138,8 @@
ZERO_STRUCT(s-r.out);
 
/* prerequisite: make sure the domain is opened */
-   prereq_ctx = domain_opened(ctx, s-r.in.domain_name, c, s-domain_open,
-  continue_domain_open_create, monitor);
+   prereq_ctx = samr_domain_opened(ctx, s-r.in.domain_name, c, 
s-domain_open,
+   continue_domain_open_create, monitor);
if (prereq_ctx) return prereq_ctx;
 
/* prepare arguments for useradd call */
@@ -295,15 +293,13 @@
struct composite_context *prereq_ctx;
 
/* composite context allocation and setup */
-   c = talloc_zero(mem_ctx, struct composite_context);
+   c = composite_create(mem_ctx, ctx-event_ctx);
if (c == NULL) return NULL;
 
s = talloc_zero(c, struct delete_user_state);
if (composite_nomem(s, c)) return c;
 
c-private_data = s;
-   c-state = COMPOSITE_STATE_IN_PROGRESS;
-   c-event_ctx = ctx-event_ctx;
 
/* store arguments in state structure */
s-ctx = ctx;
@@ -311,8 +307,8 @@
ZERO_STRUCT(s-r.out);

/* prerequisite: make sure the domain is opened before proceeding */
-   prereq_ctx = domain_opened(ctx, s-r.in.domain_name, c, s-domain_open,
-  continue_domain_open_delete, monitor);
+   prereq_ctx = samr_domain_opened(ctx, s-r.in.domain_name, c, 
s-domain_open,
+   continue_domain_open_delete, monitor);
if (prereq_ctx) return prereq_ctx;
 
/* prepare arguments for userdel call */
@@ -467,21 +463,19 @@
struct composite_context *prereq_ctx;
struct composite_context *userinfo_req;
 
-   c = talloc_zero(mem_ctx, struct composite_context);
+   c = composite_create(mem_ctx, ctx-event_ctx);
if (c == NULL) return NULL;
 
s = talloc_zero(c, struct modify_user_state);
if (composite_nomem(s, c)) return c;
 
-   c-state = COMPOSITE_STATE_IN_PROGRESS;
c-private_data = s;
-   c-event_ctx = ctx-event_ctx;
 
s-ctx = ctx;
s-r = *r;
 
-   prereq_ctx = domain_opened(ctx, s-r.in.domain_name, c, s-domain_open,
-  continue_domain_open_modify, monitor);
+   prereq_ctx = samr_domain_opened(ctx, s-r.in.domain_name, c, 
s-domain_open,
+   continue_domain_open_modify, monitor);
if (prereq_ctx) return prereq_ctx;
 
s-user_info.in.username  = r-in.user_name;
@@ -709,8 +703,8 @@
s-user_name = talloc_strdup(c, r-in.user_name);
 
/* prerequisite: make sure the domain is opened */
-   prereq_ctx = domain_opened(ctx, s-domain_name, c, s-domopen,
-  continue_domain_open_info, monitor);
+   prereq_ctx = samr_domain_opened(ctx, s-domain_name, c, s-domopen,
+   continue_domain_open_info, monitor);
if (prereq_ctx) return prereq_ctx;
 
/* prepare arguments for LookupName call */
@@ -896,25 +890,25 @@
 
 struct userlist_state {
struct libnet_context *ctx;
+   const char *domain_name;
+   struct lsa_DomainInfo dominfo;
int page_size;
-   uint32_t resume;
-   struct lsa_SidArray sids;
-   struct lsa_TransNameArray

  1   2   3   4   5   6   >