1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-24 21:34:56 +03:00

r2689: Use consistent naming Del -> Delete

Add delete functionality to ldb simple lda server backend
add some const in ldap.h
(This used to be commit 5ed9a6eb18)
This commit is contained in:
Simo Sorce 2004-09-27 14:11:11 +00:00 committed by Gerald (Jerry) Carter
parent 718bb5e8ff
commit 456e2f82e8
6 changed files with 73 additions and 32 deletions

View File

@ -330,21 +330,21 @@ static NTSTATUS ldapsrv_AddRequest(struct ldapsrv_call *call)
return part->ops->Add(part, call, req); return part->ops->Add(part, call, req);
} }
static NTSTATUS ldapsrv_DelRequest(struct ldapsrv_call *call) static NTSTATUS ldapsrv_DeleteRequest(struct ldapsrv_call *call)
{ {
struct ldap_DelRequest *req = &call->request.r.DelRequest; struct ldap_DeleteRequest *req = &call->request.r.DeleteRequest;
struct ldapsrv_partition *part; struct ldapsrv_partition *part;
DEBUG(10, ("DelRequest")); DEBUG(10, ("DeleteRequest"));
DEBUGADD(10, (" dn: %s", req->dn)); DEBUGADD(10, (" dn: %s", req->dn));
part = ldapsrv_get_partition(call->conn, req->dn); part = ldapsrv_get_partition(call->conn, req->dn);
if (!part->ops->Del) { if (!part->ops->Delete) {
return ldapsrv_unwilling(call, 53); return ldapsrv_unwilling(call, 53);
} }
return part->ops->Del(part, call, req); return part->ops->Delete(part, call, req);
} }
static NTSTATUS ldapsrv_ModifyDNRequest(struct ldapsrv_call *call) static NTSTATUS ldapsrv_ModifyDNRequest(struct ldapsrv_call *call)
@ -419,8 +419,8 @@ static NTSTATUS ldapsrv_do_call(struct ldapsrv_call *call)
return ldapsrv_ModifyRequest(call); return ldapsrv_ModifyRequest(call);
case LDAP_TAG_AddRequest: case LDAP_TAG_AddRequest:
return ldapsrv_AddRequest(call); return ldapsrv_AddRequest(call);
case LDAP_TAG_DelRequest: case LDAP_TAG_DeleteRequest:
return ldapsrv_DelRequest(call); return ldapsrv_DeleteRequest(call);
case LDAP_TAG_ModifyDNRequest: case LDAP_TAG_ModifyDNRequest:
return ldapsrv_ModifyDNRequest(call); return ldapsrv_ModifyDNRequest(call);
case LDAP_TAG_CompareRequest: case LDAP_TAG_CompareRequest:

View File

@ -82,7 +82,7 @@ struct ldapsrv_partition_ops {
NTSTATUS (*Search)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_SearchRequest *r); NTSTATUS (*Search)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_SearchRequest *r);
NTSTATUS (*Modify)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_ModifyRequest *r); NTSTATUS (*Modify)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_ModifyRequest *r);
NTSTATUS (*Add)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_AddRequest *r); NTSTATUS (*Add)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_AddRequest *r);
NTSTATUS (*Del)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_DelRequest *r); NTSTATUS (*Delete)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_DeleteRequest *r);
NTSTATUS (*ModifyDN)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_ModifyDNRequest *r); NTSTATUS (*ModifyDN)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_ModifyDNRequest *r);
NTSTATUS (*Compare)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_CompareRequest *r); NTSTATUS (*Compare)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_CompareRequest *r);
NTSTATUS (*Abandon)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_AbandonRequest *r); NTSTATUS (*Abandon)(struct ldapsrv_partition *partition, struct ldapsrv_call *call, struct ldap_AbandonRequest *r);

View File

@ -138,8 +138,51 @@ static NTSTATUS sldb_Search(struct ldapsrv_partition *partition, struct ldapsrv_
return ldapsrv_queue_reply(call, done_r); return ldapsrv_queue_reply(call, done_r);
} }
static NTSTATUS sldb_Delete(struct ldapsrv_partition *partition, struct ldapsrv_call *call,
struct ldap_DeleteRequest *r)
{
struct ldap_Result *delete_result;
struct ldapsrv_reply *delete_reply;
int ldb_ret;
struct samdb_context *samdb;
struct ldb_context *ldb;
DEBUG(0, ("sldb_Delete: %s\n", r->dn));
samdb = samdb_connect(call);
ldb = samdb->ldb;
ldb_set_alloc(ldb, talloc_ldb_alloc, samdb);
ldb_ret = ldb_delete(ldb, r->dn);
delete_reply = ldapsrv_init_reply(call, LDAP_TAG_DeleteResponse);
delete_result = &delete_reply->msg.r.DeleteResponse;
delete_result->dn = talloc_steal(delete_reply, r->dn);
if (ldb_ret != 0) {
/* currently we have no way to tell if there was an internal ldb error
* or if the object was not found, return the most probable error
*/
delete_result->resultcode = LDAP_NO_SUCH_OBJECT;
delete_result->errormessage = ldb_errstring(ldb);
delete_result->referral = NULL;
} else {
delete_result->resultcode = LDAP_SUCCESS;
delete_result->errormessage = NULL;
delete_result->referral = NULL;
}
ldapsrv_queue_reply(call, delete_reply);
talloc_free(samdb);
return NT_STATUS_OK;
}
static const struct ldapsrv_partition_ops sldb_ops = { static const struct ldapsrv_partition_ops sldb_ops = {
.Search = sldb_Search .Search = sldb_Search,
.Delete = sldb_Delete
}; };
const struct ldapsrv_partition_ops *ldapsrv_get_sldb_partition_ops(void) const struct ldapsrv_partition_ops *ldapsrv_get_sldb_partition_ops(void)

View File

@ -547,16 +547,16 @@ BOOL ldap_encode(struct ldap_message *msg, DATA_BLOB *result)
ldap_encode_response(msg->type, r, &data); ldap_encode_response(msg->type, r, &data);
break; break;
} }
case LDAP_TAG_DelRequest: { case LDAP_TAG_DeleteRequest: {
struct ldap_DelRequest *r = &msg->r.DelRequest; struct ldap_DeleteRequest *r = &msg->r.DeleteRequest;
asn1_push_tag(&data, asn1_push_tag(&data,
ASN1_APPLICATION_SIMPLE(LDAP_TAG_DelRequest)); ASN1_APPLICATION_SIMPLE(LDAP_TAG_DeleteRequest));
asn1_write(&data, r->dn, strlen(r->dn)); asn1_write(&data, r->dn, strlen(r->dn));
asn1_pop_tag(&data); asn1_pop_tag(&data);
break; break;
} }
case LDAP_TAG_DelResponse: { case LDAP_TAG_DeleteResponse: {
struct ldap_Result *r = &msg->r.DelResponse; struct ldap_Result *r = &msg->r.DeleteResponse;
ldap_encode_response(msg->type, r, &data); ldap_encode_response(msg->type, r, &data);
break; break;
} }
@ -1009,13 +1009,13 @@ BOOL ldap_decode(ASN1_DATA *data, struct ldap_message *msg)
break; break;
} }
case ASN1_APPLICATION_SIMPLE(LDAP_TAG_DelRequest): { case ASN1_APPLICATION_SIMPLE(LDAP_TAG_DeleteRequest): {
struct ldap_DelRequest *r = &msg->r.DelRequest; struct ldap_DeleteRequest *r = &msg->r.DeleteRequest;
int len; int len;
char *dn; char *dn;
msg->type = LDAP_TAG_DelRequest; msg->type = LDAP_TAG_DeleteRequest;
asn1_start_tag(data, asn1_start_tag(data,
ASN1_APPLICATION_SIMPLE(LDAP_TAG_DelRequest)); ASN1_APPLICATION_SIMPLE(LDAP_TAG_DeleteRequest));
len = asn1_tag_remaining(data); len = asn1_tag_remaining(data);
dn = talloc(msg->mem_ctx, len+1); dn = talloc(msg->mem_ctx, len+1);
if (dn == NULL) if (dn == NULL)
@ -1027,11 +1027,11 @@ BOOL ldap_decode(ASN1_DATA *data, struct ldap_message *msg)
break; break;
} }
case ASN1_APPLICATION(LDAP_TAG_DelResponse): { case ASN1_APPLICATION(LDAP_TAG_DeleteResponse): {
struct ldap_Result *r = &msg->r.DelResponse; struct ldap_Result *r = &msg->r.DeleteResponse;
msg->type = LDAP_TAG_DelResponse; msg->type = LDAP_TAG_DeleteResponse;
ldap_decode_response(msg->mem_ctx, data, ldap_decode_response(msg->mem_ctx, data,
LDAP_TAG_DelResponse, r); LDAP_TAG_DeleteResponse, r);
break; break;
} }

View File

@ -33,8 +33,8 @@ enum ldap_request_tag {
LDAP_TAG_ModifyResponse = 7, LDAP_TAG_ModifyResponse = 7,
LDAP_TAG_AddRequest = 8, LDAP_TAG_AddRequest = 8,
LDAP_TAG_AddResponse = 9, LDAP_TAG_AddResponse = 9,
LDAP_TAG_DelRequest = 10, LDAP_TAG_DeleteRequest = 10,
LDAP_TAG_DelResponse = 11, LDAP_TAG_DeleteResponse = 11,
LDAP_TAG_ModifyDNRequest = 12, LDAP_TAG_ModifyDNRequest = 12,
LDAP_TAG_ModifyDNResponse = 13, LDAP_TAG_ModifyDNResponse = 13,
LDAP_TAG_CompareRequest = 14, LDAP_TAG_CompareRequest = 14,
@ -53,6 +53,7 @@ enum ldap_auth_mechanism {
enum ldap_result_code { enum ldap_result_code {
LDAP_SUCCESS = 0, LDAP_SUCCESS = 0,
LDAP_SASL_BIND_IN_PROGRESS = 0x0e, LDAP_SASL_BIND_IN_PROGRESS = 0x0e,
LDAP_NO_SUCH_OBJECT = 0x20,
LDAP_INVALID_CREDENTIALS = 0x31, LDAP_INVALID_CREDENTIALS = 0x31,
LDAP_OTHER = 0x50 LDAP_OTHER = 0x50
}; };
@ -154,7 +155,7 @@ struct ldap_AddRequest {
struct ldap_attribute *attributes; struct ldap_attribute *attributes;
}; };
struct ldap_DelRequest { struct ldap_DeleteRequest {
const char *dn; const char *dn;
}; };
@ -198,8 +199,8 @@ union ldap_Request {
struct ldap_Result ModifyResponse; struct ldap_Result ModifyResponse;
struct ldap_AddRequest AddRequest; struct ldap_AddRequest AddRequest;
struct ldap_Result AddResponse; struct ldap_Result AddResponse;
struct ldap_DelRequest DelRequest; struct ldap_DeleteRequest DeleteRequest;
struct ldap_Result DelResponse; struct ldap_Result DeleteResponse;
struct ldap_ModifyDNRequest ModifyDNRequest; struct ldap_ModifyDNRequest ModifyDNRequest;
struct ldap_Result ModifyDNResponse; struct ldap_Result ModifyDNResponse;
struct ldap_CompareRequest CompareRequest; struct ldap_CompareRequest CompareRequest;

View File

@ -3,9 +3,6 @@
LDAP protocol helper functions for SAMBA LDAP protocol helper functions for SAMBA
Copyright (C) Andrew Tridgell 2004 Copyright (C) Andrew Tridgell 2004
Copyright (C) Volker Lendecke 2004
Copyright (C) Stefan Metzmacher 2004
Copyright (C) Simo Sorce 2004
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@ -352,8 +349,8 @@ static struct ldap_message *ldif_read(int (*fgetc_fn)(void *),
} }
if (strequal(value.data, "delete")) { if (strequal(value.data, "delete")) {
msg->type = LDAP_TAG_DelRequest; msg->type = LDAP_TAG_DeleteRequest;
msg->r.DelRequest.dn = dn; msg->r.DeleteRequest.dn = dn;
return msg; return msg;
} }