#include "librpc/gen_ndr/ndr_dnsp.h"
#include <ldb.h>
#include "param/param.h"
+#include "param/loadparm.h"
#include "dsdb/samdb/samdb.h"
#include "dsdb/common/util.h"
#include "smbd/service_task.h"
#include "dns_server/dns_server.h"
-#include "dns_server/dns_update.h"
static WERROR dns_rr_to_dnsp(TALLOC_CTX *mem_ctx,
const struct dns_res_rec *rrec,
rrec->rdata.srv_record.target);
W_ERROR_HAVE_NO_MEMORY(r->data.srv.nameTarget);
break;
+ case DNS_QTYPE_PTR:
+ r->data.ptr = talloc_strdup(mem_ctx, rrec->rdata.ptr_record);
+ W_ERROR_HAVE_NO_MEMORY(r->data.ptr);
+ break;
case DNS_QTYPE_MX:
r->data.mx.wPriority = rrec->rdata.mx_record.preference;
r->data.mx.nameTarget = talloc_strdup(mem_ctx,
WERROR werror;
bool needs_add = false;
- DEBUG(1, ("Looking at record: \n"));
- NDR_PRINT_DEBUG(dns_res_rec, discard_const(update));
+ DEBUG(2, ("Looking at record: \n"));
+ if (DEBUGLVL(2)) {
+ NDR_PRINT_DEBUG(dns_res_rec, discard_const(update));
+ }
switch (update->rr_type) {
case DNS_QTYPE_A:
- break;
case DNS_QTYPE_NS:
- break;
case DNS_QTYPE_CNAME:
- break;
case DNS_QTYPE_SOA:
- break;
case DNS_QTYPE_PTR:
- break;
case DNS_QTYPE_MX:
- break;
case DNS_QTYPE_AAAA:
- break;
case DNS_QTYPE_SRV:
- break;
case DNS_QTYPE_TXT:
break;
default:
ZERO_STRUCT(recs[i]);
}
}
+
+ werror = dns_replace_records(dns, mem_ctx, dn,
+ needs_add, recs, rcount);
+ W_ERROR_NOT_OK_RETURN(werror);
}
return WERR_OK;
}
WERROR dns_server_process_update(struct dns_server *dns,
+ struct dns_request_state *state,
TALLOC_CTX *mem_ctx,
struct dns_name_packet *in,
struct dns_res_rec **prereqs, uint16_t *prereq_count,
return DNS_ERR(FORMAT_ERROR);
}
- DEBUG(0, ("Got a dns update request.\n"));
+ DEBUG(2, ("Got a dns update request.\n"));
for (z = dns->zones; z != NULL; z = z->next) {
bool match;
}
if (z == NULL) {
- DEBUG(0, ("We're not authorative for this zone\n"));
+ DEBUG(0, ("We're not authoritative for this zone\n"));
return DNS_ERR(NOTAUTH);
}
/* TODO: Check if update is allowed, we probably want "always",
* key-based GSSAPI, key-based bind-style TSIG and "never" as
* smb.conf options. */
- if (lpcfg_allow_dns_updates(dns->task->lp_ctx) != DNS_UPDATE_ON) {
- DEBUG(0, ("Update not allowed."));
+ if (lpcfg_allow_dns_updates(dns->task->lp_ctx) == DNS_UPDATE_OFF) {
+ DEBUG(0, ("Update not allowed.\n"));
+ return DNS_ERR(REFUSED);
+ }
+ if (lpcfg_allow_dns_updates(dns->task->lp_ctx) == DNS_UPDATE_SIGNED &&
+ state->authenticated == false ) {
+ DEBUG(0, ("Update not allowed for unsigned packet.\n"));
return DNS_ERR(REFUSED);
}