git.samba.org
/
ira
/
wip.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' of ssh://git.samba.org/data/git/samba
[ira/wip.git]
/
source3
/
nmbd
/
asyncdns.c
diff --git
a/source3/nmbd/asyncdns.c
b/source3/nmbd/asyncdns.c
index f572aefc784081e2d8b5243a10fdb5175192a1ce..baa88bc44b5be24d6a392329eb8cbef78f897d17 100644
(file)
--- a/
source3/nmbd/asyncdns.c
+++ b/
source3/nmbd/asyncdns.c
@@
-87,8
+87,13
@@
static void asyncdns_process(void)
DEBUGLEVEL = -1;
while (1) {
DEBUGLEVEL = -1;
while (1) {
- if (read_data(fd_in, (char *)&r, sizeof(r)) != sizeof(r))
+ NTSTATUS status;
+
+ status = read_data(fd_in, (char *)&r, sizeof(r));
+
+ if (!NT_STATUS_IS_OK(status)) {
break;
break;
+ }
pull_ascii_nstring( qname, sizeof(qname), r.name.name);
r.result.s_addr = interpret_addr(qname);
pull_ascii_nstring( qname, sizeof(qname), r.name.name);
r.result.s_addr = interpret_addr(qname);
@@
-159,6
+164,12
@@
void start_async_dns(void)
CatchSignal(SIGHUP, SIG_IGN);
CatchSignal(SIGTERM, SIGNAL_CAST sig_term );
CatchSignal(SIGHUP, SIG_IGN);
CatchSignal(SIGTERM, SIGNAL_CAST sig_term );
+ if (!reinit_after_fork(nmbd_messaging_context(),
+ nmbd_event_context(), true)) {
+ DEBUG(0,("reinit_after_fork() failed\n"));
+ smb_panic("reinit_after_fork() failed");
+ }
+
asyncdns_process();
}
asyncdns_process();
}
@@
-166,7
+177,7
@@
void start_async_dns(void)
/***************************************************************************
check if a particular name is already being queried
****************************************************************************/
/***************************************************************************
check if a particular name is already being queried
****************************************************************************/
-static
BOOL
query_current(struct query_record *r)
+static
bool
query_current(struct query_record *r)
{
return dns_current &&
nmb_name_equal(&r->name,
{
return dns_current &&
nmb_name_equal(&r->name,
@@
-177,7
+188,7
@@
static BOOL query_current(struct query_record *r)
/***************************************************************************
write a query to the child process
****************************************************************************/
/***************************************************************************
write a query to the child process
****************************************************************************/
-static
BOOL
write_child(struct packet_struct *p)
+static
bool
write_child(struct packet_struct *p)
{
struct query_record r;
{
struct query_record r;
@@
-194,7
+205,7
@@
void run_dns_queue(void)
struct query_record r;
struct packet_struct *p, *p2;
struct name_record *namerec;
struct query_record r;
struct packet_struct *p, *p2;
struct name_record *namerec;
-
int size
;
+
NTSTATUS status
;
if (fd_in == -1)
return;
if (fd_in == -1)
return;
@@
-208,11
+219,11
@@
void run_dns_queue(void)
start_async_dns();
}
start_async_dns();
}
- if ((size=read_data(fd_in, (char *)&r, sizeof(r))) != sizeof(r)) {
- if (size) {
- DEBUG(0,("Incomplete DNS answer from child!\n"));
-
fd_in = -1
;
- }
+ status = read_data(fd_in, (char *)&r, sizeof(r));
+
+ if (!NT_STATUS_IS_OK(status)) {
+
DEBUG(0, ("read from child failed: %s\n", nt_errstr(status)))
;
+ fd_in = -1;
BlockSignals(True, SIGTERM);
return;
}
BlockSignals(True, SIGTERM);
return;
}
@@
-285,7
+296,7
@@
void run_dns_queue(void)
queue a DNS query
****************************************************************************/
queue a DNS query
****************************************************************************/
-
BOOL
queue_dns_query(struct packet_struct *p,struct nmb_name *question)
+
bool
queue_dns_query(struct packet_struct *p,struct nmb_name *question)
{
if (in_dns || fd_in == -1)
return False;
{
if (in_dns || fd_in == -1)
return False;
@@
-317,7
+328,7
@@
BOOL queue_dns_query(struct packet_struct *p,struct nmb_name *question)
we use this when we can't do async DNS lookups
****************************************************************************/
we use this when we can't do async DNS lookups
****************************************************************************/
-
BOOL
queue_dns_query(struct packet_struct *p,struct nmb_name *question)
+
bool
queue_dns_query(struct packet_struct *p,struct nmb_name *question)
{
struct name_record *namerec = NULL;
struct in_addr dns_ip;
{
struct name_record *namerec = NULL;
struct in_addr dns_ip;