r14860: create libcli/security/security.h
[bbaumbach/samba-autobuild/.git] / source4 / rpc_server / samr / dcesrv_samr.c
index b7d770af84a7e17fbd4b9dc55ae8567b529d6ad0..ab8144c7358ccf43a28962b17431557cebe2e610 100644 (file)
 #include "rpc_server/dcerpc_server.h"
 #include "rpc_server/common/common.h"
 #include "rpc_server/samr/dcesrv_samr.h"
+#include "librpc/gen_ndr/ndr_security.h"
 #include "system/time.h"
 #include "lib/ldb/include/ldb.h"
 #include "ads.h"
 #include "dsdb/samdb/samdb.h"
 #include "libcli/ldap/ldap.h"
+#include "libcli/security/security.h"
+#include "rpc_server/samr/proto.h"
+#include "db_wrap.h"
 
 
 /*
@@ -877,7 +881,7 @@ static NTSTATUS samr_CreateUser2(struct dcesrv_call_state *dce_call, TALLOC_CTX
                return NT_STATUS_NO_MEMORY;
        }
 
-       msg->dn = a_state->account_dn;
+       msg->dn = ldb_dn_copy(msg, a_state->account_dn);
 
        if (samdb_msg_add_uint(a_state->sam_ctx, mem_ctx, msg, 
                               "userAccountControl", 
@@ -1556,7 +1560,7 @@ static NTSTATUS samr_OpenGroup(struct dcesrv_call_state *dce_call, TALLOC_CTX *m
                                                           a_state->domain_state->domain_dn, msg, attr);
 #define QUERY_FPASSC(msg, field, attr) \
        r->out.info->field = samdb_result_force_password_change(a_state->sam_ctx, mem_ctx, \
-                                                          a_state->domain_state->domain_dn, msg, attr);
+                                                          a_state->domain_state->domain_dn, msg);
 #define QUERY_LHOURS(msg, field, attr) \
        r->out.info->field = samdb_result_logon_hours(mem_ctx, msg, attr);
 #define QUERY_AFLAGS(msg, field, attr) \
@@ -1903,7 +1907,7 @@ static NTSTATUS samr_QueryGroupMember(struct dcesrv_call_state *dce_call, TALLOC
                        struct ldb_message **res2;
                        const char * const attrs2[2] = { "objectSid", NULL };
                        ret = gendb_search_dn(a_state->sam_ctx, mem_ctx,
-                                          ldb_dn_explode(mem_ctx, el->values[i].data),
+                                          ldb_dn_explode(mem_ctx, (const char *)el->values[i].data),
                                           &res2, attrs2);
                        if (ret != 1)
                                return NT_STATUS_INTERNAL_DB_CORRUPTION;
@@ -2341,7 +2345,7 @@ static NTSTATUS samr_GetMembersInAlias(struct dcesrv_call_state *dce_call, TALLO
                        struct ldb_message **msgs2;
                        const char * const attrs2[2] = { "objectSid", NULL };
                        ret = gendb_search_dn(a_state->sam_ctx, mem_ctx,
-                                          ldb_dn_explode(mem_ctx, el->values[i].data),
+                                          ldb_dn_explode(mem_ctx, (const char *)el->values[i].data),
                                           &msgs2, attrs2);
                        if (ret != 1)
                                return NT_STATUS_INTERNAL_DB_CORRUPTION;
@@ -2880,6 +2884,10 @@ static NTSTATUS samr_SetUserInfo(struct dcesrv_call_state *dce_call, TALLOC_CTX
        /* modify the samdb record */
        ret = samdb_replace(a_state->sam_ctx, mem_ctx, msg);
        if (ret != 0) {
+               DEBUG(1,("Failed to modify record %s: %s\n",
+                        ldb_dn_linearize(mem_ctx, a_state->account_dn),
+                        ldb_errstring(a_state->sam_ctx)));
+
                /* we really need samdb.c to return NTSTATUS */
                return NT_STATUS_UNSUCCESSFUL;
        }