home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / sendmail / sendmail-5.65c+IDA-1.4.4.1 / ida / aux / mkdomext.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-07-01  |  2.3 KB  |  112 lines

  1. /*
  2. **  MKDOMEXT -- Extend domain names
  3. **  Copyright (c) 1987 Lennart Lovstrand
  4. **  CIS Dept, Univ of Linkoping, Sweden
  5. **
  6. **  Use it, abuse it, but don't sell it.
  7. */
  8.  
  9. #include "sendmail.h"
  10.  
  11. #ifndef lint
  12. static char    SccsId[] = "@(#)mkdomext.c 1.5 (lel@ida.liu.se) 4/24/87";
  13. #endif /* !lint */
  14.  
  15. #ifdef __STDC__
  16. int instring(const char *, const char *);
  17. int ispart(const char *, const char *, int);
  18. #else /* !__STDC__ */
  19. # define    const
  20. int instring();
  21. int ispart();
  22. #endif /* __STDC__ */
  23. char * index();
  24.  
  25. char *Progname;
  26.  
  27. main(argc, argv)
  28.      int argc;
  29.      char **argv;
  30. {
  31.     char buf[BUFSIZ];
  32.     char domains[BUFSIZ];
  33.     char *tab, *p, *index();
  34.  
  35.     Progname = argv[0];
  36.  
  37.     if (argc == 1) {
  38.     fprintf(stderr, "%s: no domains?\n", Progname);
  39.     exit(1);
  40.     }
  41.  
  42.     /* collect the argument domain names */
  43.     domains[0] = '\0';
  44.     for (argc--, argv++; argc > 0; argc--, argv++) {
  45.     if (strlen(*argv) + 3 > sizeof(domains)) {
  46.         fprintf(stderr, "%s: too many domain arguments--\n %s %s %s\n",
  47.             Progname,
  48.             "chain two instances of", Progname,
  49.             "together or recompile with larger ``domains'' array");
  50.         exit(1);
  51.     }
  52.     (void) strcat(domains, " .");
  53.     (void) strcat(domains, *argv);
  54.     }
  55.  
  56.     while (gets(buf) != NULL) {
  57.     tab = index(buf, '\t');
  58.     if (tab != NULL)
  59.         *tab = '\0';
  60.  
  61.     for (p = index(buf, '.'); p != NULL; p = index(p + 1, '.')) {
  62.         if (instring(domains, p)) {
  63.         for (; p != NULL; p = index(p + 1, '.')) {
  64.             *p = '\0';
  65.             if (tab != NULL)
  66.             printf("%s\t%s\n", buf, tab + 1);
  67.             else
  68.             printf("%s\n", buf);
  69.             *p = '.';
  70.         }
  71.         break;
  72.         }
  73.     }
  74.     if (tab != NULL)
  75.         *tab = '\t';
  76.     puts(buf);
  77.     }
  78. }
  79.  
  80. /*
  81. **    INSTRING -- Returns TRUE if the source string ``s'' can be found
  82. **        as a substring in target string ``t''.
  83. */
  84.  
  85. instring(t, s)
  86.      const char *t, *s;
  87. {
  88.     register const char *p;
  89.     register int len = strlen(s);
  90.  
  91.     for (p = index(t, *s); p != NULL; p = index(p + 1, *s))
  92.     if (ispart(p, s, len))
  93.         return TRUE;
  94.     return FALSE;
  95. }
  96.  
  97. /*
  98. **    ISPART -- Compare at most the first n chars of two strings
  99. **        without respect to upper/lower case.
  100. */
  101.  
  102. ispart(s, t, n)
  103.      register const char *s, *t;
  104.      register int n;
  105. {
  106.     for (; n > 0 && *s != '\0' && *t != '\0'; s++, t++, n--)
  107.     if ((isupper(*s) ? tolower(*s) : *s) !=
  108.         (isupper(*t) ? tolower(*t) : *t))
  109.         break;
  110.     return (n == 0 || *s == *t); /* really *s == 0 && *t == 0 */
  111. }
  112.