/* Copyright (C) 1991, Marcus J. Ranum. All rights reserved. */ #ifndef lint static char RCSid[] = "$Header: /usr/users/mjr/hacks/umud/RCS/cron.c,v 1.6 91/05/25 22:56:04 mjr Exp $"; #endif /* useable by an mwhod wizard to send a command to a remote mwhod. It is assumed that the user knows all the syntax EXACTLY for the command to send. heh. primarily useful for defining new peers while the server is running without having to kill and restart the server for example: sample of a mwhocmd to define a mud to a running server note that the actual tabs here must be converted when you type it. mwhocmd -s hussar -c 'W\twizard\twizardpasswd\tC hostname MUDname MUDpw desc' */ #include <stdio.h> #include <ctype.h> #include <fcntl.h> #include <sys/file.h> #include <sys/time.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #define DGRAMPORT 6888 #ifndef NO_HUGE_RESOLVER_CODE extern struct hostent *gethostbyname(); #endif extern char *optarg; main(ac,av) int ac; char *av[]; { int dgramfd; struct sockaddr_in addr; #ifndef NO_HUGE_RESOLVER_CODE struct hostent *hp; #endif char *p; char *mycmd; char *server; while((dgramfd = getopt(ac,av,"c:s:")) != EOF) { switch(dgramfd) { case 's': server = optarg; break; case 'c': mycmd = optarg; break; default: fprintf(stderr,"usage.\n"); exit(1); } } p = server; while(*p != '\0' && (*p == '.' || isdigit(*p))) p++; if(*p != '\0') { #ifndef NO_HUGE_RESOLVER_CODE if((hp = gethostbyname(server)) == (struct hostent *)0) return(1); (void)bcopy(hp->h_addr,(char *)&addr.sin_addr,hp->h_length); #else return(1); #endif } else { unsigned long f; if((f = inet_addr(server)) == -1L) return(1); (void)bcopy((char *)&f,(char *)&addr.sin_addr,sizeof(f)); } addr.sin_port = htons(DGRAMPORT); addr.sin_family = AF_INET; if((dgramfd = socket(AF_INET,SOCK_DGRAM,0)) < 0) return(1); sendto(dgramfd,mycmd,strlen(mycmd),0,&addr,sizeof(addr)); exit(0); }