#include main() { /* ** cloned.c - inetd service for well-known port 5050 */ int fd; int len; char *p; char name[64]; char file[256]; char buffer[1024]; /* ** Packet #1 contains binary's name */ len = read(0, buffer, sizeof(buffer)); /* executable name is in the buffer */ sscanf(buffer, "%s", name); /* acknowledge bytes received */ sprintf(buffer, "ACK %d", len); write(1, buffer, len); /* ** Create a copy into our local /tmp area */ sprintf(file, "/tmp/%s", name); fd = open(file, O_CREAT|O_WRONLY|O_TRUNC, 00777); /* ** Read and copy transmitted binary file's data */ while((len = read(0, buffer, sizeof(buffer))) > 0) { /* write data to /tmp */ write(fd, buffer, len); /* acknowledge bytes received */ sprintf(buffer, "ACK %d", len); write(1, buffer, strlen(buffer)+1); } close(fd); close(1); close(0); /* ** Transfer control to ** the newly created ** executable */ execl(file, name, NULL); /* never returns */ }