Diff for /ansh/src/ansh3.c between versions 1.2 and 1.2.2.1

version 1.2, 2011/10/17 20:14:02 version 1.2.2.1, 2011/10/31 09:46:18
Line 57  extern char compiled[], compiledby[], compilehost[]; Line 57  extern char compiled[], compiledby[], compilehost[];
 static void  static void
 Usage()  Usage()
 {  {
        printf( " -= ansh =- ELWIX Layer3 remote management client over ICMP\n"        printf( " -= ansh3 =- ELWIX Layer3 remote management client over ICMP\n"
                 "=== %s === %s@%s ===\n\n"                  "=== %s === %s@%s ===\n\n"
                 " Syntax: ansh [options] <connect2host>\n\n"                  " Syntax: ansh [options] <connect2host>\n\n"
                   "\t-a <address>\tBind to address\n"
                 "\t-i <id>\tService ID (default is 42)\n"                  "\t-i <id>\tService ID (default is 42)\n"
                 "\t-t <timeout>\tClient session timeout (default is 0 sec)\n"                  "\t-t <timeout>\tClient session timeout (default is 0 sec)\n"
                 "\t-k <key>\tService cipher key\n"                  "\t-k <key>\tService cipher key\n"
Line 72  Usage() Line 73  Usage()
 int  int
 main(int argc, char **argv)  main(int argc, char **argv)
 {  {
        struct sockaddr sa = { 0 };        struct sockaddr sa = { 0 }, *ba = NULL;
        struct sockaddr_in *sin4 = (struct sockaddr_in*) &sa;        struct sockaddr_in *sin4;
        struct sockaddr_in6 *sin6 = (struct sockaddr_in6*) &sa;        struct sockaddr_in6 *sin6;
         struct hostent *host;          struct hostent *host;
         char ch;          char ch;
         int h, len;          int h, len;
Line 87  main(int argc, char **argv) Line 88  main(int argc, char **argv)
   
         strlcpy(Key, DEFAULT_KEY, sizeof Key);          strlcpy(Key, DEFAULT_KEY, sizeof Key);
   
        while ((ch = getopt(argc, argv, "hvui:t:k:")) != -1)        while ((ch = getopt(argc, argv, "hvui:t:k:a:")) != -1)
                 switch (ch) {                  switch (ch) {
                           case 'a':
                                   host = gethostbyname(optarg);
                                   if (!host) {
                                           printf("Error:: in bind address '%s' #%d - %s\n",
                                                   optarg, h_errno, hstrerror(h_errno));
                                           return 1;
                                   }
                                   switch (host->h_addrtype) {
                                           case AF_INET:
                                                   ba = malloc(sizeof(struct sockaddr_in));
                                                   if (!ba) {
                                                           printf("Error:: malloc() #%d - %s ...\n", 
                                                                           errno, strerror(errno));
                                                           return 1;
                                                   } else {
                                                           memset(ba, 0, sizeof(struct sockaddr_in));
                                                           sin4 = (struct sockaddr_in*) ba;
                                                   }
                                                   sin4->sin_len = sizeof(struct sockaddr_in);
                                                   sin4->sin_family = AF_INET;
                                                   memcpy(&sin4->sin_addr.s_addr, host->h_addr, host->h_length);
                                                   break;
                                           case AF_INET6:
                                                   ba = malloc(sizeof(struct sockaddr_in6));
                                                   if (!ba) {
                                                           printf("Error:: malloc() #%d - %s ...\n", 
                                                                           errno, strerror(errno));
                                                           return 1;
                                                   } else {
                                                           memset(ba, 0, sizeof(struct sockaddr_in6));
                                                           sin6 = (struct sockaddr_in6*) ba;
                                                   }
                                                   sin6->sin6_len = sizeof(struct sockaddr_in6);
                                                   sin6->sin6_family = AF_INET6;
                                                   memcpy(&sin6->sin6_addr.s6_addr, host->h_addr, host->h_length);
                                                   break;
                                           default:
                                                   printf("Error:: Unknown address type %d !!!\n", host->h_addrtype);
                                                   return 1;
                                   }
                                   break;
                         case 't':                          case 't':
                                 Timeout = abs(strtol(optarg, NULL, 0));                                  Timeout = abs(strtol(optarg, NULL, 0));
                                 break;                                  break;
Line 113  main(int argc, char **argv) Line 155  main(int argc, char **argv)
         argv += optind;          argv += optind;
         if (!argc) {          if (!argc) {
                 printf("Error:: not specified address for connect ...\n");                  printf("Error:: not specified address for connect ...\n");
                   if (ba)
                           free(ba);
                 return 1;                  return 1;
         }          }
   
Line 120  main(int argc, char **argv) Line 164  main(int argc, char **argv)
         if (!host) {          if (!host) {
                 printf("Error:: in bind address '%s' #%d - %s\n",                  printf("Error:: in bind address '%s' #%d - %s\n",
                                 argv[0], h_errno, hstrerror(h_errno));                                  argv[0], h_errno, hstrerror(h_errno));
                   if (ba)
                           free(ba);
                 return 1;                  return 1;
         }          }
         switch (host->h_addrtype) {          switch (host->h_addrtype) {
                 case AF_INET:                  case AF_INET:
                           sin4 = (struct sockaddr_in*) &sa;
                         sin4->sin_len = sizeof(struct sockaddr_in);                          sin4->sin_len = sizeof(struct sockaddr_in);
                         sin4->sin_family = AF_INET;                          sin4->sin_family = AF_INET;
                         memcpy(&sin4->sin_addr.s_addr, host->h_addr, host->h_length);                          memcpy(&sin4->sin_addr.s_addr, host->h_addr, host->h_length);
                         break;                          break;
                 case AF_INET6:                  case AF_INET6:
                           sin6 = (struct sockaddr_in6*) &sa;
                         sin6->sin6_len = sizeof(struct sockaddr_in6);                          sin6->sin6_len = sizeof(struct sockaddr_in6);
                         sin6->sin6_family = AF_INET6;                          sin6->sin6_family = AF_INET6;
                         memcpy(&sin6->sin6_addr.s6_addr, host->h_addr, host->h_length);                          memcpy(&sin6->sin6_addr.s6_addr, host->h_addr, host->h_length);
                         break;                          break;
                 default:                  default:
                         printf("Error:: Unknown address type %d !!!\n", host->h_addrtype);                          printf("Error:: Unknown address type %d !!!\n", host->h_addrtype);
                           if (ba)
                                   free(ba);
                         return 1;                          return 1;
         }          }
   
        h = PrepareL3(&sa, &len);        h = PrepareL3(ba, &len);
         if (h == -1) {          if (h == -1) {
                 printf("Error:: Descriptor not opened ... \n");                  printf("Error:: Descriptor not opened ... \n");
                   if (ba)
                           free(ba);
                 return 1;                  return 1;
         }          }
   
Line 148  main(int argc, char **argv) Line 200  main(int argc, char **argv)
   
         VERB(1) printf("\r\nFinish client.\r\n");          VERB(1) printf("\r\nFinish client.\r\n");
         close(h);          close(h);
           if (ba)
                   free(ba);
         return 0;          return 0;
 }  }

Removed from v.1.2  
changed lines
  Added in v.1.2.2.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>