On Sat, 10 Jun 2000, Joel Lansden wrote: > I know it's cheesy, but you could use some of that free software that > publishes your dynamic IP address, and put it in one of those free hosting > services w/ a script... If you have any machine with a static IP, feel free to use the sources I've attached. (They won't work for you without some tampering; they're just the quick hack I'm using to get a static hostname. Make sure the DNS config file they're modifying has a time-to-live etc set to VERY low values (I'm using 1). server needs to be run from inetd.). LLaP bero
#include <unistd.h> #include <stdio.h> #include <netinet/in.h> #include <netdb.h> int main(int argc, char **argv) { struct sockaddr_in sock; struct hostent *hp; unsigned long addr; int sck, conn; if(argc!=3) { puts("Usage: client hostname password"); exit(1); } memset(&sock, 0, sizeof(sock)); sock.sin_family=AF_INET; addr=inet_addr("bero.org"); if(addr!=(unsigned long)-1) memcpy(&sock.sin_addr, &addr, sizeof(addr)); else { hp=gethostbyname("bero.org"); if(hp==NULL) { perror("gethostbyname"); exit(1); } memcpy(&sock.sin_addr, hp->h_addr, hp->h_length); } sock.sin_port=htons(1234); sck=socket(AF_INET, SOCK_STREAM, 0); if(sck<0) { perror("socket"); exit(1); } conn=connect(sck, (struct sockaddr *)&sock, sizeof(sock)); if(conn<0) { perror("connect"); exit(1); } write(sck, argv[1], strlen(argv[1])); write(sck, "\n", 1); write(sck, argv[2], strlen(argv[2])); write(sck, "\n", 1); close(sck); }
#define _XOPEN_SOURCE #include <stdio.h> #include <unistd.h> #include <netinet/in.h> #include <string.h> #include <shadow.h> int main(int argc, char **argv) { struct sockaddr_in his_addr; struct servent *serv; int addrlen=sizeof(his_addr); unsigned long addr; unsigned char *s; char *remote_ip=(char *) malloc(16); char *host=(char *) malloc(128), *passwd=(char *) malloc(128); char *command=(char *) malloc(1024); struct spwd *p=(struct spwd *)malloc(sizeof(struct spwd)); char *cp=NULL; if(getpeername(0, (struct sockaddr *) &his_addr, &addrlen)<0) { /* perror("getpeername"); goto sucks; */ } addr=his_addr.sin_addr.s_addr; s=(unsigned char*)&addr; sprintf(remote_ip, "%u.%u.%u.%u", s[0], s[1], s[2], s[3]); fgets(host, 128, stdin); if(strchr(host, '\n')) *strchr(host, '\n')=0; if(strchr(host, '\r')) *strchr(host, '\r')=0; fgets(passwd, 128, stdin); if(strchr(passwd, '\n')) *strchr(passwd, '\n')=0; if(strchr(passwd, '\r')) *strchr(passwd, '\r')=0; p=getspnam(host); if(!p) { puts("Error"); goto sucks; } cp=crypt(passwd, p->sp_pwdp); if(strcmp(cp, p->sp_pwdp)) { puts("Error"); goto sucks; } sprintf(command, "/usr/bin/perl -pi -e \"s,^%s.*,%s\tIN\tA\t%s,g\" /var/named/dyn.bero.org", host, host, remote_ip); system(command); system("/usr/sbin/ndc reload &>/var/log/ndc.out"); sucks: if(host) free(host); if(passwd) free(passwd); if(remote_ip) free(remote_ip); if(command) free(command); }