+ /* sanity check host vendor: must start with a letter, contain only
+ * letters, numerals, and hyphen, and end with an alphanumeric.
+ */
+ if (*argv[row+1] && (row == 0 || strcmp(argv[2], cl->args->mr_argv[2]))) {
+ char *p = argv[row+1];
+
+ if (!isalpha(*p)) return(MR_BAD_CHAR);
+ for (; *p; p++) {
+ if ((!isalnum(*p) && *p != '-' && *p != '.') ||
+ (*p == '-' && p[1] == '.'))
+ return(MR_BAD_CHAR);
+ }
+ if (!isalnum(*(p-1))) return(MR_BAD_CHAR);
+ }
+
+ /* sanity check host type: must start with a letter, contain only
+ * letters, numerals, and hyphen, and end with an alphanumeric.
+ */
+ if (*argv[row+2] && (row == 0 || strcmp(argv[3], cl->args->mr_argv[3]))) {
+ char *p = argv[row+2];
+
+ if (!isalpha(*p)) return(MR_BAD_CHAR);
+ for (; *p; p++) {
+ if ((!isalnum(*p) && *p != '-' && *p != '.') ||
+ (*p == '-' && p[1] == '.'))
+ return(MR_BAD_CHAR);
+ }
+ if (!isalnum(*(p-1))) return(MR_BAD_CHAR);
+ }
+
+ /* sanity check host vendor: must start with a letter, contain only
+ * letters, numerals, and hyphen, and end with an hyphen alphanumeric.
+ */
+ if (*argv[row+3] && (row == 0 || strcmp(argv[4], cl->args->mr_argv[4]))) {
+ char *p = argv[row+3];
+
+ if (!isalpha(*p)) return(MR_BAD_CHAR);
+ for (; *p; p++) {
+ if ((!isalnum(*p) && *p != '-' && *p != '.') ||
+ (*p == '-' && p[1] == '.'))
+ return(MR_BAD_CHAR);
+ }
+ if (!isalnum(*(p-1))) return(MR_BAD_CHAR);
+ }
+