Google Grupper støtter ikke lenger nye Usenet-innlegg eller -abonnementer. Historisk innhold er fortsatt synlig.

Solved: Dynamic DNS Updates

Sett 0 ganger
Hopp til første uleste melding

Jan Marius Evang

ulest,
20. juni 1997, 03:00:0020.06.1997
til

#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>

/* Usage:
mynsupdate(*"news.bogus.linux", DELETE, NULL);
mynsupdate(*"news.bogus.linux", ADD, *"marius.bogus.linux");
*/

void mynsupdate(dhost,opcode,pointer)
char* dhost;
int opcode;
char* pointer;
{
int r_size;
ns_updrec *rrecp;
res_init();
/* set _res.nsaddr_list[0] to nameserver, otherwise default is queried
*/
/* struct sockaddr_in nsaddr_list[MAXNS]; /* address of name server
*/

/* Only Delete and ADD PTR implemented */
if (opcode=3D=3DDELETE){
rrecp=3Dres_mkupdrec(S_UPDATE, dhost, C_IN, T_ANY, 0);
rrecp->r_opcode =3D DELETE;
if ((res_update(rrecp)) < 0) =20
fprintf(stderr, "failed update packet\n");
}
if (opcode=3D=3DADD){
r_size=3D strlen(dhost);
if (!(rrecp=3Dres_mkupdrec( S_UPDATE, dhost, C_IN,T_PTR,
(u_long)10))
|| (r_size > 0 && !(rrecp->r_data =3D
(u_char*)malloc(r_size))))
{
fprintf(stderr, "saverrec error\n");
exit (1);
}
rrecp->r_opcode =3D ADD;
rrecp->r_data =3D (u_char *)malloc(strlen(pointer));
strcpy(rrecp->r_data, pointer);
rrecp->r_data=3Dpointer;
rrecp->r_size =3D strlen(rrecp->r_data);
if ((res_update(rrecp)) < 0)
fprintf(stderr, "failed update packet\n");
}
/* Is this neccessary? */
free(rrecp->r_data);
free(rrecp); =20
}
=20
=20
void main(argc, argv)
int argc;
char **argv;
{
if (argc<2){printf("Usage: nsupd name pointer\n");exit(1);}
=20
mynsupdate(argv[1],DELETE,NULL);
mynsupdate(argv[1],ADD,argv[2]);
}

Should be rather straightforward to extend according to your needs.
look at the source for nsupdate, and variuos header files.

compile with:
cc nsupd.c -DALLOW_UPDATES /home/jane/bind8/src/lib/libbind.a=20

MArius
--=20
-O /\/\
R=F8yskatt 0 0 \
\ /\ =20

0 nye meldinger