Discussion:
[fossil-users] Help with making a subroutine x-platform to windows
Richard Hipp
2018-06-27 19:24:03 UTC
Permalink
If anybody can suggest patches that will get this routine
(https://fossil-scm.org/fossil/info/5e083abf6?ln=47) to compile and
work on windows, that would really be helpful. Thanks.
--
D. Richard Hipp
***@sqlite.org
Scott Doctor
2018-06-27 21:22:19 UTC
Permalink
A way may be using the system() command to run nslookup. From
the windows command line help for the command:

Commands:   (identifiers are shown in uppercase, [] means
optional)NAME            - print info about the host/domain NAME
using default serverNAME1 NAME2     - as above, but use NAME2 as
serverhelp or ?       - print info on common commandsset
OPTION      - set an option    all                 - print
options, current server and host    [no]debug           - print
debugging information    [no]d2              - print exhaustive
debugging information    [no]defname         - append domain
name to each query    [no]recurse         - ask for recursive
answer to query    [no]search          - use domain search
list    [no]vc              - always use a virtual circuit   
domain=NAME         - set default domain name to NAME   
srchlist=N1[/N2/.../N6] - set domain to N1 and search list to
N1,N2, etc.    root=NAME           - set root server to NAME   
retry=X             - set number of retries to X   
timeout=X           - set initial time-out interval to X
seconds    type=X              - set query type (ex.
A,AAAA,A+AAAA,ANY,CNAME,MX,NS,PTR,SOA,SRV)   
querytype=X         - same as type    class=X             - set
query class (ex. IN (Internet), ANY)    [no]msxfr           -
use MS fast zone transfer    ixfrver=X           - current
version to use in IXFR transfer requestserver NAME     - set
default server to NAME, using current default serverlserver
NAME    - set default server to NAME, using initial
serverroot            - set current default server to the rootls
[opt] DOMAIN [> FILE] - list addresses in DOMAIN (optional:
output to FILE)    -a          -  list canonical names and
aliases    -d          -  list all records    -t TYPE     - 
list records of the given RFC record type (ex. A,CNAME,MX,NS,PTR
etc.)view FILE           - sort an 'ls' output file and view it
with pgexit            - exit the program

-------------------------
Scott Doctor
***@scottdoctor.com
-------------------------
Post by Richard Hipp
If anybody can suggest patches that will get this routine
(https://fossil-scm.org/fossil/info/5e083abf6?ln=47) to compile and
work on windows, that would really be helpful. Thanks.
Scott Doctor
2018-06-27 21:25:18 UTC
Permalink
Well thunderbird sure mucked up that formatting.

Launch windows command prompt

type nslookup

at the ">" prompt, type help

typing exit will exit out of nslookup

-------------------------
Scott Doctor
***@scottdoctor.com
-------------------------
Post by Scott Doctor
A way may be using the system() command to run nslookup. From
Commands:   (identifiers are shown in uppercase, [] means
optional)NAME            - print info about the host/domain
NAME using default serverNAME1 NAME2     - as above, but use
NAME2 as serverhelp or ?       - print info on common
commandsset OPTION      - set an option    all                
- print options, current server and host   
[no]debug           - print debugging information   
[no]d2              - print exhaustive debugging
information    [no]defname         - append domain name to
each query    [no]recurse         - ask for recursive answer
to query    [no]search          - use domain search list
[no]vc              - always use a virtual circuit
domain=NAME         - set default domain name to NAME
srchlist=N1[/N2/.../N6] - set domain to N1 and search list to
N1,N2, etc.    root=NAME           - set root server to NAME
retry=X             - set number of retries to X
timeout=X           - set initial time-out interval to X
seconds    type=X              - set query type (ex.
A,AAAA,A+AAAA,ANY,CNAME,MX,NS,PTR,SOA,SRV)    querytype=X -
same as type    class=X             - set query class (ex. IN
(Internet), ANY)    [no]msxfr           - use MS fast zone
transfer    ixfrver=X           - current version to use in
IXFR transfer requestserver NAME     - set default server to
NAME, using current default serverlserver NAME    - set
default server to NAME, using initial serverroot            -
set current default server to the rootls [opt] DOMAIN [> FILE]
- list addresses in DOMAIN (optional: output to FILE)   
-a          -  list canonical names and aliases    -d         
-  list all records    -t TYPE     -  list records of the
given RFC record type (ex. A,CNAME,MX,NS,PTR etc.)view
FILE           - sort an 'ls' output file and view it with
pgexit            - exit the program
-------------------------
Scott Doctor
-------------------------
Post by Richard Hipp
If anybody can suggest patches that will get this routine
(https://fossil-scm.org/fossil/info/5e083abf6?ln=47) to
compile and
work on windows, that would really be helpful.  Thanks.
_______________________________________________
fossil-users mailing list
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Antoine Chavasse
2018-06-28 08:29:33 UTC
Permalink
It seems to me it would be simpler and more robust to simply call the
relevant win32 api function:

https://docs.microsoft.com/en-us/windows/desktop/api/windns/nf-windns-dnsquery_a
Post by Scott Doctor
A way may be using the system() command to run nslookup. From
Commands: (identifiers are shown in uppercase, [] means
optional)NAME - print info about the host/domain NAME
using default serverNAME1 NAME2 - as above, but use NAME2 as
serverhelp or ? - print info on common commandsset
OPTION - set an option all - print
options, current server and host [no]debug - print
debugging information [no]d2 - print exhaustive
debugging information [no]defname - append domain
name to each query [no]recurse - ask for recursive
answer to query [no]search - use domain search
list [no]vc - always use a virtual circuit
domain=NAME - set default domain name to NAME
srchlist=N1[/N2/.../N6] - set domain to N1 and search list to
N1,N2, etc. root=NAME - set root server to NAME
retry=X - set number of retries to X
timeout=X - set initial time-out interval to X
seconds type=X - set query type (ex.
A,AAAA,A+AAAA,ANY,CNAME,MX,NS,PTR,SOA,SRV)
querytype=X - same as type class=X - set
query class (ex. IN (Internet), ANY) [no]msxfr -
use MS fast zone transfer ixfrver=X - current
version to use in IXFR transfer requestserver NAME - set
default server to NAME, using current default serverlserver
NAME - set default server to NAME, using initial
serverroot - set current default server to the rootls
output to FILE) -a - list canonical names and
aliases -d - list all records -t TYPE -
list records of the given RFC record type (ex. A,CNAME,MX,NS,PTR
etc.)view FILE - sort an 'ls' output file and view it
with pgexit - exit the program
-------------------------
Scott Doctor
-------------------------
Post by Richard Hipp
If anybody can suggest patches that will get this routine
(https://fossil-scm.org/fossil/info/5e083abf6?ln=47) to compile and
work on windows, that would really be helpful. Thanks.
_______________________________________________
fossil-users mailing list
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
Scott Doctor
2018-06-27 22:41:02 UTC
Permalink
I have an issue with the declarations of the local variables

unsigned char aDns[5000]; /* Raw DNS reply content */

char zHostname[5000]; /* Hostname for the MX */

Those two declarations result in using 10k of stack space. I
suggest making an external struct to hold that information.


-------------------------
Scott Doctor
***@scottdoctor.com
-------------------------
Post by Richard Hipp
If anybody can suggest patches that will get this routine
(https://fossil-scm.org/fossil/info/5e083abf6?ln=47) to compile and
work on windows, that would really be helpful. Thanks.
Thomas Schnurrenberger
2018-06-28 09:01:21 UTC
Permalink
Post by Richard Hipp
If anybody can suggest patches that will get this routine
(https://fossil-scm.org/fossil/info/5e083abf6?ln=47) to compile and
work on windows, that would really be helpful. Thanks.
Sample Windows program, needs the dnsapi.lib for linking:

#include <windows.h> /* Windows */
#include <windns.h> /* DNS API's */
#include <winsock.h> /* Windows sockets */
#include <string.h> /* For strdup() */
#include <stdio.h> /* Standard I/O */

char *smtp_mx_host(const char *zDomain){
DNS_STATUS status; /* Return status */
PDNS_RECORD pDnsRecord, p; /* Pointer to DNS_RECORD structure */
int iBestPriority = 9999999; /* Best priority */
unsigned char *pBest = 0; /* RDATA for the best answer */

status = DnsQuery_UTF8(zDomain, /* Domain name */
DNS_TYPE_MX, /* DNS record type */
DNS_QUERY_STANDARD, /* Query options */
NULL, /* List of DNS servers */
&pDnsRecord, /* Query results */
NULL); /* Reserved */
if( status ) return NULL;

p = pDnsRecord;
while( p ){
if( p->Data.MX.wPreference<iBestPriority ){
iBestPriority = p->Data.MX.wPreference;
pBest = p->Data.MX.pNameExchange;
}
p = p->pNext;
}
if( pBest ){
pBest = strdup(pBest);
}
DnsRecordListFree(pDnsRecord, DnsFreeRecordListDeep);
return pBest;
}



int main(int argc, char *argv[]){
int i;

for(i=1; i<argc; i++){
char *z = smtp_mx_host(argv[i]);
printf("%s: %s\n", argv[i], z);
free(z);
}
return 0;
}
--
Thomas Schnurrenberger
Loading...