svn commit: samba r20047 - in branches/SAMBA_4_0/source/rpc_server/remote: .

2006-12-06 Thread metze
Author: metze
Date: 2006-12-06 09:25:26 + (Wed, 06 Dec 2006)
New Revision: 20047

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

Log:
patch from Julien Kerihuel [EMAIL PROTECTED]
to make the remote rpc proxy work for outlook and exchange

metze
Modified:
   branches/SAMBA_4_0/source/rpc_server/remote/dcesrv_remote.c


Changeset:
Modified: branches/SAMBA_4_0/source/rpc_server/remote/dcesrv_remote.c
===
--- branches/SAMBA_4_0/source/rpc_server/remote/dcesrv_remote.c 2006-12-05 
16:20:39 UTC (rev 20046)
+++ branches/SAMBA_4_0/source/rpc_server/remote/dcesrv_remote.c 2006-12-06 
09:25:26 UTC (rev 20047)
@@ -30,6 +30,11 @@
struct dcerpc_pipe *c_pipe;
 };
 
+static NTSTATUS remote_op_reply(struct dcesrv_call_state *dce_call, TALLOC_CTX 
*mem_ctx, void *r)
+{
+   return NT_STATUS_OK;
+}
+
 static NTSTATUS remote_op_bind(struct dcesrv_call_state *dce_call, const 
struct dcesrv_interface *iface)
 {
 NTSTATUS status;
@@ -256,6 +261,7 @@
 
iface-ndr_pull = remote_op_ndr_pull;
iface-dispatch = remote_op_dispatch;
+   iface-reply = remote_op_reply;
iface-ndr_push = remote_op_ndr_push;
 
iface-private = if_tabl;



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

2006-12-06 Thread metze
Author: metze
Date: 2006-12-06 12:08:32 + (Wed, 06 Dec 2006)
New Revision: 20051

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

Log:
handle the case where the server object exist, but doesn't have a 
serverReference

metze
Modified:
   branches/SAMBA_4_0/source/libnet/libnet_become_dc.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_become_dc.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_become_dc.c 2006-12-06 11:45:33 UTC 
(rev 20050)
+++ branches/SAMBA_4_0/source/libnet/libnet_become_dc.c 2006-12-06 12:08:32 UTC 
(rev 20051)
@@ -629,21 +629,22 @@
return NT_STATUS_INVALID_NETWORK_RESPONSE;
}
 
-   server_reference_dn_str = samdb_result_string(r-msgs[0], 
serverReference, NULL);
-   if (!server_reference_dn_str) return NT_STATUS_INVALID_NETWORK_RESPONSE;
-   server_reference_dn = ldb_dn_new(r, s-ldap1.ldb, 
server_reference_dn_str);
-   NT_STATUS_HAVE_NO_MEMORY(server_reference_dn);
+   server_reference_dn_str = samdb_result_string(r-msgs[0], 
serverReference, NULL);
+   if (server_reference_dn_str) {
+   server_reference_dn = ldb_dn_new(r, s-ldap1.ldb, 
server_reference_dn_str);
+   NT_STATUS_HAVE_NO_MEMORY(server_reference_dn);
 
-   computer_dn = ldb_dn_new(r, s-ldap1.ldb, 
s-dest_dsa.computer_dn_str);
-   NT_STATUS_HAVE_NO_MEMORY(computer_dn);
+   computer_dn = ldb_dn_new(r, s-ldap1.ldb, 
s-dest_dsa.computer_dn_str);
+   NT_STATUS_HAVE_NO_MEMORY(computer_dn);
 
-   /*
-* if the server object belongs to another DC in another domain in the 
forest,
-* we should not touch this object!
-*/
-   if (ldb_dn_compare(computer_dn, server_reference_dn) != 0) {
-   talloc_free(r);
-   return NT_STATUS_OBJECT_NAME_COLLISION;
+   /*
+* if the server object belongs to another DC in another domain 
in the forest,
+* we should not touch this object!
+*/
+   if (ldb_dn_compare(computer_dn, server_reference_dn) != 0) {
+   talloc_free(r);
+   return NT_STATUS_OBJECT_NAME_COLLISION;
+   }
}
 
/* if the server object is already for the dest_dsa, then we don't need 
to create it */
@@ -749,6 +750,56 @@
return NT_STATUS_OK;
 }
 
+static NTSTATUS becomeDC_ldap1_server_object_modify(struct 
libnet_BecomeDC_state *s)
+{
+   int ret;
+   struct ldb_message *msg;
+   uint32_t i;
+
+   /* make a 'modify' msg, and only for serverReference */
+   msg = ldb_msg_new(s);
+   NT_STATUS_HAVE_NO_MEMORY(msg);
+   msg-dn = ldb_dn_new(msg, s-ldap1.ldb, s-dest_dsa.server_dn_str);
+   NT_STATUS_HAVE_NO_MEMORY(msg-dn);
+
+   ret = ldb_msg_add_string(msg, serverReference, 
s-dest_dsa.computer_dn_str);
+   if (ret != 0) {
+   talloc_free(msg);
+   return NT_STATUS_NO_MEMORY;
+   }
+
+   /* mark all the message elements (should be just one)
+  as LDB_FLAG_MOD_ADD */
+   for (i=0;imsg-num_elements;i++) {
+   msg-elements[i].flags = LDB_FLAG_MOD_ADD;
+   }
+
+   ret = ldb_modify(s-ldap1.ldb, msg);
+   if (ret == LDB_SUCCESS) {
+   talloc_free(msg);
+   return NT_STATUS_OK;
+   } else if (ret == LDB_ERR_ATTRIBUTE_OR_VALUE_EXISTS) {
+   /* retry with LDB_FLAG_MOD_REPLACE */
+   } else {
+   talloc_free(msg);
+   return NT_STATUS_LDAP(ret);
+   }
+
+   /* mark all the message elements (should be just one)
+  as LDB_FLAG_MOD_REPLACE */
+   for (i=0;imsg-num_elements;i++) {
+   msg-elements[i].flags = LDB_FLAG_MOD_REPLACE;
+   }
+
+   ret = ldb_modify(s-ldap1.ldb, msg);
+   talloc_free(msg);
+   if (ret != LDB_SUCCESS) {
+   return NT_STATUS_LDAP(ret);
+   }
+
+   return NT_STATUS_OK;
+}
+
 static void becomeDC_connect_ldap2(struct libnet_BecomeDC_state *s);
 
 static void becomeDC_connect_ldap1(struct libnet_BecomeDC_state *s)
@@ -794,6 +845,9 @@
c-status = becomeDC_ldap1_server_object_add(s);
if (!composite_is_ok(c)) return;
 
+   c-status = becomeDC_ldap1_server_object_modify(s);
+   if (!composite_is_ok(c)) return;
+
becomeDC_connect_ldap2(s);
 }
 



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

2006-12-06 Thread metze
Author: metze
Date: 2006-12-06 12:15:07 + (Wed, 06 Dec 2006)
New Revision: 20052

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

Log:
implement the first drsuapi connection

metze
Modified:
   branches/SAMBA_4_0/source/libnet/libnet_become_dc.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_become_dc.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_become_dc.c 2006-12-06 12:08:32 UTC 
(rev 20051)
+++ branches/SAMBA_4_0/source/libnet/libnet_become_dc.c 2006-12-06 12:15:07 UTC 
(rev 20052)
@@ -27,6 +27,7 @@
 #include lib/db_wrap.h
 #include dsdb/samdb/samdb.h
 #include dsdb/common/flags.h
+#include librpc/gen_ndr/ndr_drsuapi_c.h
 
 struct libnet_BecomeDC_state {
struct composite_context *creq;
@@ -44,6 +45,15 @@
const struct ldb_message *rootdse;
} ldap1, ldap2;
 
+   struct becomeDC_drsuapi {
+   struct libnet_BecomeDC_state *s;
+   struct dcerpc_binding *binding;
+   struct dcerpc_pipe *pipe;
+   struct drsuapi_DsBind bind_r;
+   struct GUID bind_guid;
+   struct policy_handle bind_handle;
+   } drsuapi1;
+
struct {
/* input */
const char *dns_name;
@@ -800,6 +810,10 @@
return NT_STATUS_OK;
 }
 
+static void becomeDC_drsuapi_connect_send(struct libnet_BecomeDC_state *s,
+ struct becomeDC_drsuapi *drsuapi,
+ void (*recv_fn)(struct 
composite_context *req));
+static void becomeDC_drsuapi1_connect_recv(struct composite_context *req);
 static void becomeDC_connect_ldap2(struct libnet_BecomeDC_state *s);
 
 static void becomeDC_connect_ldap1(struct libnet_BecomeDC_state *s)
@@ -848,6 +862,40 @@
c-status = becomeDC_ldap1_server_object_modify(s);
if (!composite_is_ok(c)) return;
 
+   becomeDC_drsuapi_connect_send(s, s-drsuapi1, 
becomeDC_drsuapi1_connect_recv);
+}
+
+static void becomeDC_drsuapi_connect_send(struct libnet_BecomeDC_state *s,
+ struct becomeDC_drsuapi *drsuapi,
+ void (*recv_fn)(struct 
composite_context *req))
+{
+   struct composite_context *c = s-creq;
+   struct composite_context *creq;
+   char *binding_str;
+
+   drsuapi-s = s;
+
+   binding_str = talloc_asprintf(s, ncacn_ip_tcp:%s[krb5,seal], 
s-source_dsa.dns_name);
+   if (composite_nomem(binding_str, c)) return;
+
+   c-status = dcerpc_parse_binding(s, binding_str, drsuapi-binding);
+   talloc_free(binding_str);
+   if (!composite_is_ok(c)) return;
+
+   creq = dcerpc_pipe_connect_b_send(s, drsuapi-binding, 
dcerpc_table_drsuapi,
+ s-libnet-cred, 
s-libnet-event_ctx);
+   composite_continue(c, creq, recv_fn, s);
+}
+
+static void becomeDC_drsuapi1_connect_recv(struct composite_context *req)
+{
+   struct libnet_BecomeDC_state *s = 
talloc_get_type(req-async.private_data,
+ struct libnet_BecomeDC_state);
+   struct composite_context *c = s-creq;
+
+   c-status = dcerpc_pipe_connect_b_recv(req, s, s-drsuapi1.pipe);
+   if (!composite_is_ok(c)) return;
+
becomeDC_connect_ldap2(s);
 }
 



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

2006-12-06 Thread metze
Author: metze
Date: 2006-12-06 12:25:41 + (Wed, 06 Dec 2006)
New Revision: 20053

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

Log:
implement the DsBind on the 1st drsuapi connection

metze
Modified:
   branches/SAMBA_4_0/source/libnet/libnet_become_dc.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_become_dc.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_become_dc.c 2006-12-06 12:15:07 UTC 
(rev 20052)
+++ branches/SAMBA_4_0/source/libnet/libnet_become_dc.c 2006-12-06 12:25:41 UTC 
(rev 20053)
@@ -887,6 +887,11 @@
composite_continue(c, creq, recv_fn, s);
 }
 
+static void becomeDC_drsuapi_bind_send(struct libnet_BecomeDC_state *s,
+  struct becomeDC_drsuapi *drsuapi,
+  void (*recv_fn)(struct rpc_request 
*req));
+static void becomeDC_drsuapi1_bind_recv(struct rpc_request *req);
+
 static void becomeDC_drsuapi1_connect_recv(struct composite_context *req)
 {
struct libnet_BecomeDC_state *s = 
talloc_get_type(req-async.private_data,
@@ -896,6 +901,40 @@
c-status = dcerpc_pipe_connect_b_recv(req, s, s-drsuapi1.pipe);
if (!composite_is_ok(c)) return;
 
+   becomeDC_drsuapi_bind_send(s, s-drsuapi1, 
becomeDC_drsuapi1_bind_recv);
+}
+
+static void becomeDC_drsuapi_bind_send(struct libnet_BecomeDC_state *s,
+  struct becomeDC_drsuapi *drsuapi,
+  void (*recv_fn)(struct rpc_request *req))
+{
+   struct composite_context *c = s-creq;
+   struct rpc_request *req;
+
+   GUID_from_string(DRSUAPI_DS_BIND_GUID_W2K3, drsuapi-bind_guid);
+
+   drsuapi-bind_r.in.bind_guid = drsuapi-bind_guid;
+   drsuapi-bind_r.in.bind_info = NULL;
+   drsuapi-bind_r.out.bind_handle = drsuapi-bind_handle;
+
+   req = dcerpc_drsuapi_DsBind_send(drsuapi-pipe, s, drsuapi-bind_r);
+   composite_continue_rpc(c, req, recv_fn, s);
+}
+
+static void becomeDC_drsuapi1_bind_recv(struct rpc_request *req)
+{
+   struct libnet_BecomeDC_state *s = talloc_get_type(req-async.private,
+ struct libnet_BecomeDC_state);
+   struct composite_context *c = s-creq;
+
+   c-status = dcerpc_ndr_request_recv(req);
+   if (!composite_is_ok(c)) return;
+
+   if (!W_ERROR_IS_OK(s-drsuapi1.bind_r.out.result)) {
+   composite_error(c, 
werror_to_ntstatus(s-drsuapi1.bind_r.out.result));
+   return;
+   }
+
becomeDC_connect_ldap2(s);
 }
 



svn commit: samba r20054 - in branches/SAMBA_3_0/source/lib/ldb/ldb_tdb: .

2006-12-06 Thread vlendec
Author: vlendec
Date: 2006-12-06 14:40:47 + (Wed, 06 Dec 2006)
New Revision: 20054

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

Log:
Revert my changes, Simo promised to work on it :-)
Modified:
   branches/SAMBA_3_0/source/lib/ldb/ldb_tdb/ldb_index.c


Changeset:
Modified: branches/SAMBA_3_0/source/lib/ldb/ldb_tdb/ldb_index.c
===
--- branches/SAMBA_3_0/source/lib/ldb/ldb_tdb/ldb_index.c   2006-12-06 
12:25:41 UTC (rev 20053)
+++ branches/SAMBA_3_0/source/lib/ldb/ldb_tdb/ldb_index.c   2006-12-06 
14:40:47 UTC (rev 20054)
@@ -41,8 +41,7 @@
   find an element in a list, using the given comparison function and
   assuming that the list is already sorted using comp_fn
 
-  return -1 if not found, or the index of the first occurance of needle if
-  found
+  return -1 if not found, or the index of the first occurance of needle if 
found
 */
 static int ldb_list_find(const void *needle, 
 const void *base, size_t nmemb, size_t size, 
@@ -129,8 +128,7 @@
if (ldb_should_b64_encode(v)) {
char *vstr = ldb_base64_encode(ldb, (char *)v.data, v.length);
if (!vstr) return NULL;
-   dn = talloc_asprintf(ldb, %s:%s::%s, LTDB_INDEX, attr_folded,
-vstr);
+   dn = talloc_asprintf(ldb, %s:%s::%s, LTDB_INDEX, attr_folded, 
vstr);
talloc_free(vstr);
if (v.data != value-data) {
talloc_free(v.data);
@@ -140,8 +138,8 @@
goto done;
}
 
-   dn = talloc_asprintf(ldb, %s:%s:%.*s, LTDB_INDEX, attr_folded,
-(int)v.length, (char *)v.data);
+   dn = talloc_asprintf(ldb, %s:%s:%.*s, 
+ LTDB_INDEX, attr_folded, (int)v.length, (char 
*)v.data);
 
if (v.data != value-data) {
talloc_free(v.data);
@@ -166,8 +164,7 @@
const struct ldb_message_element *el = 
msg-elements[i];
for (j=0;jel-num_values;j++) {
-   if (ldb_attr_cmp((char *)el-values[j].data,
-attr) == 0) {
+   if (ldb_attr_cmp((char *)el-values[j].data, 
attr) == 0) {
if (v_idx) {
*v_idx = j;
}
@@ -204,8 +201,7 @@
 
/* if the attribute isn't in the list of indexed attributes then
   this node needs a full search */
-   if (ldb_msg_find_idx(index_list, tree-u.equality.attr, NULL,
-LTDB_IDXATTR) == -1) {
+   if (ldb_msg_find_idx(index_list, tree-u.equality.attr, NULL, 
LTDB_IDXATTR) == -1) {
return -1;
}
 
@@ -241,8 +237,8 @@
}
 
for (j=0;jel-num_values;j++) {
-   list-dn[list-count] = talloc_strdup(
-   list-dn, (char *)el-values[j].data);
+   list-dn[list-count] = 
+   talloc_strdup(list-dn, (char 
*)el-values[j].data);
if (!list-dn[list-count]) {
talloc_free(msg);
return -1;
@@ -254,16 +250,14 @@
talloc_free(msg);
 
if (list-count  1) {
-   qsort(list-dn, list-count, sizeof(char *),
- (comparison_fn_t) list_cmp);
+   qsort(list-dn, list-count, sizeof(char *), (comparison_fn_t) 
list_cmp);
}
 
return 1;
 }
 
 
-static int list_union(struct ldb_context *, struct dn_list *,
- const struct dn_list *);
+static int list_union(struct ldb_context *, struct dn_list *, const struct 
dn_list *);
 
 /*
   return a list of dn's that might match a simple indexed search on
@@ -296,6 +290,9 @@
struct dn_list *list2;
tree2.operation = LDB_OP_EQUALITY;
tree2.u.equality.attr = LTDB_OBJECTCLASS;
+   if (!tree2.u.equality.attr) {
+   return -1;
+   }
tree2.u.equality.value.data = 
(uint8_t *)talloc_strdup(list, subclasses[i]);
if (tree2.u.equality.value.data == NULL) {
@@ -332,8 +329,7 @@
  struct dn_list *list)
 {
if (ldb_attr_cmp(tree-u.equality.attr, LTDB_OBJECTCLASS) == 0) {
-   return ltdb_index_dn_objectclass(module, tree, index_list,
-list);
+   return ltdb_index_dn_objectclass(module, tree, index_list, 
list);
}
if (ldb_attr_dn(tree-u.equality.attr) == 0) {
list-dn = talloc_array(list, char *, 1);
@@ -341,8 +337,7 @@
   

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

2006-12-06 Thread metze
Author: metze
Date: 2006-12-06 15:29:01 + (Wed, 06 Dec 2006)
New Revision: 20055

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

Log:
implement dummy DsAddEntry call (without attributes yet)

metze
Modified:
   branches/SAMBA_4_0/source/libnet/libnet_become_dc.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_become_dc.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_become_dc.c 2006-12-06 14:40:47 UTC 
(rev 20054)
+++ branches/SAMBA_4_0/source/libnet/libnet_become_dc.c 2006-12-06 15:29:01 UTC 
(rev 20055)
@@ -921,6 +921,8 @@
composite_continue_rpc(c, req, recv_fn, s);
 }
 
+static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s);
+
 static void becomeDC_drsuapi1_bind_recv(struct rpc_request *req)
 {
struct libnet_BecomeDC_state *s = talloc_get_type(req-async.private,
@@ -935,6 +937,71 @@
return;
}
 
+   becomeDC_drsuapi1_add_entry_send(s);
+}
+
+static void becomeDC_drsuapi1_add_entry_recv(struct rpc_request *req);
+
+static void becomeDC_drsuapi1_add_entry_send(struct libnet_BecomeDC_state *s)
+{
+   struct composite_context *c = s-creq;
+   struct rpc_request *req;
+   struct drsuapi_DsAddEntry *r;
+   struct drsuapi_DsReplicaObjectIdentifier *identifier;
+   uint32_t num_attributes;
+   struct drsuapi_DsReplicaAttribute *attributes;
+   struct dom_sid zero_sid;
+
+   ZERO_STRUCT(zero_sid);
+
+   r = talloc_zero(s, struct drsuapi_DsAddEntry);
+   if (composite_nomem(r, c)) return;
+
+   /* setup identifier */
+   identifier  = talloc(r, struct 
drsuapi_DsReplicaObjectIdentifier);
+   if (composite_nomem(identifier, c)) return;
+   identifier-guid= GUID_zero();
+   identifier-sid = zero_sid;
+   identifier-dn  = talloc_asprintf(identifier, CN=NTDS 
Settings,%s,
+ s-dest_dsa.server_dn_str);
+   if (composite_nomem(identifier-dn, c)) return;
+
+   /* allocate attribute array */
+   num_attributes  = 0;
+   attributes  = talloc_array(r, struct drsuapi_DsReplicaAttribute, 
num_attributes);
+   if (composite_nomem(attributes, c)) return;
+
+   /* TODO: set real attributes! */
+
+   /* setup request structure */
+   r-in.bind_handle   = 
s-drsuapi1.bind_handle;
+   r-in.level = 2;
+   r-in.req.req2.first_object.next_object = NULL;
+   r-in.req.req2.first_object.object.identifier   = 
identifier;
+   r-in.req.req2.first_object.object.unknown1 = 
0x;   
+   r-in.req.req2.first_object.object.attribute_ctr.num_attributes = 
num_attributes;
+   r-in.req.req2.first_object.object.attribute_ctr.attributes = 
attributes;
+
+   req = dcerpc_drsuapi_DsAddEntry_send(s-drsuapi1.pipe, r, r);
+   composite_continue_rpc(c, req, becomeDC_drsuapi1_add_entry_recv, s);
+}
+
+static void becomeDC_drsuapi1_add_entry_recv(struct rpc_request *req)
+{
+   struct libnet_BecomeDC_state *s = talloc_get_type(req-async.private,
+ struct libnet_BecomeDC_state);
+   struct composite_context *c = s-creq;
+   struct drsuapi_DsAddEntry *r = talloc_get_type(req-ndr.struct_ptr,
+  struct drsuapi_DsAddEntry);
+
+   c-status = dcerpc_ndr_request_recv(req);
+   if (!composite_is_ok(c)) return;
+
+   if (!W_ERROR_IS_OK(r-out.result)) {
+   composite_error(c, werror_to_ntstatus(r-out.result));
+   return;
+   }
+
becomeDC_connect_ldap2(s);
 }
 



Re: svn commit: samba r19993 - in branches: SAMBA_3_0/source/smbd SAMBA_3_0_24/source/smbd

2006-12-06 Thread Jim McDonough

On 12/1/06, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:


Log:
Fix the problem with Linux clients requesting O_WRONLY
on write-only files. Jim please check. Should not affect
Windows clients - I ensured all the relevent Samba4
torture tests still pass.


Sorry, forgot to tell you, this works great now with the cifs client.


Rev 35: Implemented cm usage. in http://samba.org/~tridge/psomogyi/

2006-12-06 Thread psomogyi

revno: 35
revision-id: [EMAIL PROTECTED]
parent: [EMAIL PROTECTED]
committer: Peter Somogyi [EMAIL PROTECTED]
branch nick: ctdb
timestamp: Wed 2006-12-06 18:49:46 +0100
message:
  Implemented cm usage.
  TODO: implement verbs user logic.
modified:
  ib/ibwrapper.c ibwrapper.c-20061204130028-0125b4f5a72f4b11
  ib/ibwrapper.h ibwrapper.h-20061204130028-32755c6266dd3c49
  ib/ibwrapper_internal.h
ibwrapper_internal.h-20061204130028-47f0a7e658b16ca2
=== modified file 'ib/ibwrapper.c'
--- a/ib/ibwrapper.c2006-12-05 17:48:16 +
+++ b/ib/ibwrapper.c2006-12-06 17:49:46 +
@@ -51,16 +51,44 @@
ibw_ctx *pctx = talloc_get_type(ctx-internal, ibw_ctx_priv);
assert(pctx!=NULL);
 
+   /* free memory regions */
+   
+   /* destroy verbs */
+   if (pctx-cq) {
+   ibv_destroy_cq(pctx-cq);
+   pctx-cq = NULL;
+   }
+
+   if (pctx-verbs_channel) {
+   ibv_destroy_comp_channel(pctx-verbs_channel);
+   pctx-verbs_channel = NULL;
+   }
+
+   if (pctx-verbs_channel_event) {
+   /* TODO: do we have to do this here? */
+   talloc_free(pctx-verbs_channel_event);
+   pctx-verbs_channel_event = NULL;
+   }
+
+   if (pctx-pd) {
+   ibv_dealloc_pd(pctx-pd);
+   pctx-pd = NULL;
+   }
+
+   /* destroy cm */
+   if (pctx-cm_channel) {
+   rdma_destroy_event_channel(pctx-cm_channel);
+   pctx-cm_channel = NULL;
+   }
+   if (pctx-cm_channel_event) {
+   /* TODO: do we have to do this here? */
+   talloc_free(pctx-cm_channel_event);
+   pctx-cm_channel_event = NULL;
+   }
if (pctx-cm_id) {
rdma_destroy_id(pctx-cm_id);
pctx-cm_id = NULL;
}
-   if (pctx-cm_channel) {
-   rdma_destroy_event_channel(pctx-cm_channel);
-   pctx-cm_channel = NULL;
-   }
-
-   /* free memory regions */
 }
 
 static int ibw_ctx_destruct(void *ptr)
@@ -97,7 +125,7 @@
return 0;
 }
 
-static ibw_conn *ibw_new_conn(ibw_ctx *ctx)
+static ibw_conn *ibw_conn_new(ibw_ctx *ctx)
 {
ibw_conn *conn;
ibw_conn_priv *pconn;
@@ -117,7 +145,27 @@
return conn;
 }
 
-static void ibw_process_cm_event(struct event_context *ev,
+static int ibw_manage_connect(struct rdma_cm_id *cma_id)
+{
+   struct rdma_conn_param conn_param;
+   int rc;
+
+   /* TODO: setup verbs... */
+
+   /* cm connect */
+   memset(conn_param, 0, sizeof conn_param);
+   conn_param.responder_resources = 1;
+   conn_param.initiator_depth = 1;
+   conn_param.retry_count = 10;
+
+   rc = rdma_connect(cma_id, conn_param);
+   if (rc)
+   sprintf(ibw_lasterr, rdma_connect error %d\n, rc);
+
+   return rc;
+}
+
+static void ibw_event_handler_cm(struct event_context *ev,
struct fd_event *fde, uint16_t flags, void *private_data)
 {
int rc;
@@ -125,8 +173,9 @@
ibw_ctx_priv *pctx = talloc_get_type(ctx-internal, ibw_ctx_priv);
ibw_conn *conn = NULL;
ibw_conn_priv *pconn = NULL;
-   struct rdma_cm_id *id = NULL;
+   struct rdma_cm_id *cma_id = NULL;
struct rdma_cm_event *event = NULL;
+   int error = 0;
 
assert(ctx!=NULL);
 
@@ -137,42 +186,75 @@
DEBUG(0, ibw_lasterr);
return;
}
-   id = event-id;
-
-   /* find whose cm_id do we have */
-
-// DEBUG(10, cma_event type %d cma_id %p (%s)\n, event-event, event-id,
-//   (event-id == ctx-cm_id) ? parent : child);
+   cma_id = event-id;
+
+   DEBUG(10, cma_event type %d cma_id %p (%s)\n, event-event, id,
+ (cma_id == ctx-cm_id) ? parent : child);
 
switch (event-event) {
case RDMA_CM_EVENT_ADDR_RESOLVED:
+   /* continuing from ibw_connect ... */
assert(pctx-state==IWINT_INIT);
pctx-state = IWINT_ADDR_RESOLVED;
-   rc = rdma_resolve_route(event-id, 2000);
+   rc = rdma_resolve_route(cma_id, 2000);
if (rc) {
cb-state = ERROR;
sprintf(ibw_lasterr, rdma_resolve_route error %d\n, 
rc);
DEBUG(0, ibw_lasterr);
}
+   /* continued at RDMA_CM_EVENT_ROUTE_RESOLVED */
break;
 
case RDMA_CM_EVENT_ROUTE_RESOLVED:
+   /* after RDMA_CM_EVENT_ADDR_RESOLVED: */
assert(pctx-state==IWINT_ADDR_RESOLVED);
pctx-state = IWINT_ROUTE_RESOLVED;
+   conn = talloc_get_type(cma_id-context, ibw_conn);
+   pconn = talloc_get_type(conn-internal, ibw_conn_priv);
+
+   rc = ibw_manage_connect(cma_id);
+   if (rc)
+   

Build status as of Thu Dec 7 00:00:02 2006

2006-12-06 Thread build
URL: http://build.samba.org/

--- /home/build/master/cache/broken_results.txt.old 2006-12-06 
00:01:02.0 +
+++ /home/build/master/cache/broken_results.txt 2006-12-07 00:00:59.0 
+
@@ -1,22 +1,22 @@
-Build status as of Wed Dec  6 00:00:02 2006
+Build status as of Thu Dec  7 00:00:02 2006
 
 Build counts:
 Tree Total  Broken Panic 
 SOC  0  0  0 
 build_farm   0  0  0 
-ccache   43 8  0 
+ccache   44 8  0 
 ctdb 0  0  0 
 distcc   2  0  0 
-ldb  42 4  0 
-libreplace   40 2  0 
-lorikeet-heimdal 35 19 0 
-ppp  17 0  0 
-rsync43 4  0 
+ldb  43 4  0 
+libreplace   41 2  0 
+lorikeet-heimdal 36 20 0 
+ppp  18 0  0 
+rsync44 4  0 
 samba0  0  0 
 samba-docs   0  0  0 
-samba4   41 31 0 
-samba_3_043 15 0 
-smb-build39 2  0 
-talloc   43 2  0 
-tdb  42 2  0 
+samba4   42 32 0 
+samba_3_044 14 0 
+smb-build41 2  0 
+talloc   44 2  0 
+tdb  43 2  0 
 


svn commit: samba r20058 - in branches: SAMBA_3_0/source/nsswitch SAMBA_3_0_24/source/nsswitch

2006-12-06 Thread jra
Author: jra
Date: 2006-12-07 00:08:10 + (Thu, 07 Dec 2006)
New Revision: 20058

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

Log:
Ensure we actually do the increasing time
calculation when in offline mode.
Jeremy.

Modified:
   branches/SAMBA_3_0/source/nsswitch/winbindd_cm.c
   branches/SAMBA_3_0_24/source/nsswitch/winbindd_cm.c


Changeset:
Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_cm.c
===
--- branches/SAMBA_3_0/source/nsswitch/winbindd_cm.c2006-12-06 23:14:15 UTC 
(rev 20057)
+++ branches/SAMBA_3_0/source/nsswitch/winbindd_cm.c2006-12-07 00:08:10 UTC 
(rev 20058)
@@ -171,9 +171,7 @@
/* If we're in statup mode, check again in 10 seconds, not in
   lp_winbind_cache_time() seconds (which is 5 mins by default). */
 
-   if (domain-check_online_timeout == 0) {
-   calc_new_online_timeout(domain);
-   }
+   calc_new_online_timeout(domain);
 
domain-check_online_event = add_timed_event( NULL,

timeval_current_ofs(domain-check_online_timeout,0),

Modified: branches/SAMBA_3_0_24/source/nsswitch/winbindd_cm.c
===
--- branches/SAMBA_3_0_24/source/nsswitch/winbindd_cm.c 2006-12-06 23:14:15 UTC 
(rev 20057)
+++ branches/SAMBA_3_0_24/source/nsswitch/winbindd_cm.c 2006-12-07 00:08:10 UTC 
(rev 20058)
@@ -171,9 +171,7 @@
/* If we're in statup mode, check again in 10 seconds, not in
   lp_winbind_cache_time() seconds (which is 5 mins by default). */
 
-   if (domain-check_online_timeout == 0) {
-   calc_new_online_timeout(domain);
-   }
+   calc_new_online_timeout(domain);
 
domain-check_online_event = add_timed_event( NULL,

timeval_current_ofs(domain-check_online_timeout,0),



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

2006-12-06 Thread tridge
Author: tridge
Date: 2006-12-07 04:02:20 + (Thu, 07 Dec 2006)
New Revision: 20059

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

Log:

james was asking about CAP_LARGE_READX and reads close to the 64k
boundary. This test shows that both for Samba4 and w2k3, reads larger
than or equal to 64k don't work (return zero bytes).

Not that I claim this is very useful behaviour :-)

Modified:
   branches/SAMBA_4_0/source/torture/raw/read.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/raw/read.c
===
--- branches/SAMBA_4_0/source/torture/raw/read.c2006-12-07 00:08:10 UTC 
(rev 20058)
+++ branches/SAMBA_4_0/source/torture/raw/read.c2006-12-07 04:02:20 UTC 
(rev 20059)
@@ -513,6 +513,26 @@
CHECK_VALUE(io.readx.out.nread, io.readx.in.maxcnt);
CHECK_BUFFER(buf, seed, io.readx.out.nread);
 
+   if (cli-transport-negotiate.capabilities  CAP_LARGE_READX) {
+   printf(Trying large readx\n);
+   io.readx.in.offset = 0;
+   io.readx.in.mincnt = 0;
+   io.readx.in.maxcnt = 0x1 - 1;
+   status = smb_raw_read(cli-tree, io);
+   CHECK_STATUS(status, NT_STATUS_OK);
+   CHECK_VALUE(io.readx.out.nread, 0x);
+
+   io.readx.in.maxcnt = 0x1;
+   status = smb_raw_read(cli-tree, io);
+   CHECK_STATUS(status, NT_STATUS_OK);
+   CHECK_VALUE(io.readx.out.nread, 0);
+
+   io.readx.in.maxcnt = 0x10001;
+   status = smb_raw_read(cli-tree, io);
+   CHECK_STATUS(status, NT_STATUS_OK);
+   CHECK_VALUE(io.readx.out.nread, 0);
+   }
+
printf(Trying locked region\n);
cli-session-pid++;
if (NT_STATUS_IS_ERR(smbcli_lock(cli-tree, fnum, 103, 1, 0, 
WRITE_LOCK))) {



svn commit: samba r20060 - in branches: SAMBA_3_0/source/nsswitch SAMBA_3_0_24/source/nsswitch

2006-12-06 Thread jra
Author: jra
Date: 2006-12-07 05:48:01 + (Thu, 07 Dec 2006)
New Revision: 20060

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

Log:
Fix the timout calculation.
Jeremy.

Modified:
   branches/SAMBA_3_0/source/nsswitch/winbindd_cm.c
   branches/SAMBA_3_0_24/source/nsswitch/winbindd_cm.c


Changeset:
Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_cm.c
===
--- branches/SAMBA_3_0/source/nsswitch/winbindd_cm.c2006-12-07 04:02:20 UTC 
(rev 20059)
+++ branches/SAMBA_3_0/source/nsswitch/winbindd_cm.c2006-12-07 05:48:01 UTC 
(rev 20060)
@@ -72,16 +72,18 @@
  If we're still offline, exponentially increase the timeout check.
 /
 
-static void calc_new_online_timeout(struct winbindd_domain *domain)
+static void calc_new_online_timeout_check(struct winbindd_domain *domain)
 {
+   int wbc = lp_winbind_cache_time();
+
if (domain-startup) {
domain-check_online_timeout = 10;
-   } else if (domain-check_online_timeout == 0) {
-   domain-check_online_timeout = lp_winbind_cache_time();
+   } else if (domain-check_online_timeout  wbc) {
+   domain-check_online_timeout = wbc;
} else {
-   uint32 new_to = (domain-check_online_timeout * 
domain-check_online_timeout);
-   if (new_to  domain-check_online_timeout) {
-   new_to = 0x7FFF;
+   uint32 new_to = domain-check_online_timeout * 3;
+   if (new_to  (3*60*60)) {
+   new_to = 3*60*60; /* 3 hours. */
}
domain-check_online_timeout = new_to;
}
@@ -171,7 +173,7 @@
/* If we're in statup mode, check again in 10 seconds, not in
   lp_winbind_cache_time() seconds (which is 5 mins by default). */
 
-   calc_new_online_timeout(domain);
+   calc_new_online_timeout_check(domain);
 
domain-check_online_event = add_timed_event( NULL,

timeval_current_ofs(domain-check_online_timeout,0),

Modified: branches/SAMBA_3_0_24/source/nsswitch/winbindd_cm.c
===
--- branches/SAMBA_3_0_24/source/nsswitch/winbindd_cm.c 2006-12-07 04:02:20 UTC 
(rev 20059)
+++ branches/SAMBA_3_0_24/source/nsswitch/winbindd_cm.c 2006-12-07 05:48:01 UTC 
(rev 20060)
@@ -72,16 +72,18 @@
  If we're still offline, exponentially increase the timeout check.
 /
 
-static void calc_new_online_timeout(struct winbindd_domain *domain)
+static void calc_new_online_timeout_check(struct winbindd_domain *domain)
 {
+   int wbc = lp_winbind_cache_time();
+
if (domain-startup) {
domain-check_online_timeout = 10;
-   } else if (domain-check_online_timeout == 0) {
-   domain-check_online_timeout = lp_winbind_cache_time();
+   } else if (domain-check_online_timeout  wbc) {
+   domain-check_online_timeout = wbc;
} else {
-   uint32 new_to = (domain-check_online_timeout * 
domain-check_online_timeout);
-   if (new_to  domain-check_online_timeout) {
-   new_to = 0x7FFF;
+   uint32 new_to = domain-check_online_timeout * 3;
+   if (new_to  (3*60*60)) {
+   new_to = 3*60*60; /* 3 hours. */
}
domain-check_online_timeout = new_to;
}
@@ -171,7 +173,7 @@
/* If we're in statup mode, check again in 10 seconds, not in
   lp_winbind_cache_time() seconds (which is 5 mins by default). */
 
-   calc_new_online_timeout(domain);
+   calc_new_online_timeout_check(domain);
 
domain-check_online_event = add_timed_event( NULL,

timeval_current_ofs(domain-check_online_timeout,0),



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

2006-12-06 Thread metze
Author: metze
Date: 2006-12-07 06:41:24 + (Thu, 07 Dec 2006)
New Revision: 20061

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

Log:
use a DsBindInfo28 structure

metze
Modified:
   branches/SAMBA_4_0/source/libnet/libnet_unbecome_dc.c


Changeset:
Modified: branches/SAMBA_4_0/source/libnet/libnet_unbecome_dc.c
===
--- branches/SAMBA_4_0/source/libnet/libnet_unbecome_dc.c   2006-12-07 
05:48:01 UTC (rev 20060)
+++ branches/SAMBA_4_0/source/libnet/libnet_unbecome_dc.c   2006-12-07 
06:41:24 UTC (rev 20061)
@@ -49,6 +49,9 @@
struct dcerpc_pipe *pipe;
struct drsuapi_DsBind bind_r;
struct GUID bind_guid;
+   struct drsuapi_DsBindInfoCtr bind_info_ctr;
+   struct drsuapi_DsBindInfo28 local_info28;
+   struct drsuapi_DsBindInfo28 remote_info28;
struct policy_handle bind_handle;
struct drsuapi_DsRemoveDSServer rm_ds_srv_r;
} drsuapi;
@@ -397,11 +400,21 @@
 {
struct composite_context *c = s-creq;
struct rpc_request *req;
+   struct drsuapi_DsBindInfo28 *bind_info28;
 
GUID_from_string(DRSUAPI_DS_BIND_GUID, s-drsuapi.bind_guid);
 
+   bind_info28 = s-drsuapi.local_info28;
+   bind_info28-supported_extensions   = 0;
+   bind_info28-site_guid  = GUID_zero();
+   bind_info28-u1 = 508;
+   bind_info28-repl_epoch = 0;
+
+   s-drsuapi.bind_info_ctr.length = 28;
+   s-drsuapi.bind_info_ctr.info.info28= *bind_info28;
+
s-drsuapi.bind_r.in.bind_guid = s-drsuapi.bind_guid;
-   s-drsuapi.bind_r.in.bind_info = NULL;
+   s-drsuapi.bind_r.in.bind_info = s-drsuapi.bind_info_ctr;
s-drsuapi.bind_r.out.bind_handle = s-drsuapi.bind_handle;
 
req = dcerpc_drsuapi_DsBind_send(s-drsuapi.pipe, s, 
s-drsuapi.bind_r);
@@ -424,6 +437,24 @@
return;
}
 
+   ZERO_STRUCT(s-drsuapi.remote_info28);
+   if (s-drsuapi.bind_r.out.bind_info) {
+   switch (s-drsuapi.bind_r.out.bind_info-length) {
+   case 24: {
+   struct drsuapi_DsBindInfo24 *info24;
+   info24 = s-drsuapi.bind_r.out.bind_info-info.info24;
+   s-drsuapi.remote_info28.supported_extensions   = 
info24-supported_extensions;
+   s-drsuapi.remote_info28.site_guid  = 
info24-site_guid;
+   s-drsuapi.remote_info28.u1 = 
info24-u1;
+   s-drsuapi.remote_info28.repl_epoch = 0;
+   break;
+   }
+   case 28:
+   s-drsuapi.remote_info28 = 
s-drsuapi.bind_r.out.bind_info-info.info28;
+   break;
+   }
+   }
+
unbecomeDC_drsuapi_remove_ds_server_send(s);
 }