+
+int check_mail_string(char *mailstring)
+{
+ EXEC SQL BEGIN DECLARE SECTION;
+ char mname[MACHINE_NAME_SIZE];
+ EXEC SQL END DECLARE SECTION;
+ char *p, *host, *hostdomain;
+ struct hostent *hp;
+ int index;
+
+ p = strchr(mailstring, '@');
+ if (p)
+ {
+ host = strdup(++p);
+
+ /* Replace .LOCAL at end of host with .MIT.EDU if needed. */
+ hostdomain = strrchr(host, '.');
+ if (hostdomain && !strcasecmp(hostdomain, ".LOCAL"))
+ {
+ index = hostdomain - host;
+ host[index] = '\0';
+ host = realloc(host, strlen(host) + strlen(".MIT.EDU") + 1);
+ strcat(host, ".MIT.EDU");
+ }
+
+ hp = gethostbyname(host);
+ if (hp)
+ {
+ host = realloc(host, strlen(hp->h_name) + 1);
+ if (host)
+ strcpy(host, hp->h_name);
+ }
+ else
+ {
+ /* couldn't resolve hostname, return MR_PERM. */
+ free(host);
+ return MR_BAD_MAIL_STRING;
+ }
+
+ if (!strcasecmp(host, "MIT.EDU"))
+ {
+ free(host);
+ return MR_BAD_MAIL_STRING;
+ }
+
+ EXEC SQL DECLARE csr_listmem CURSOR FOR
+ SELECT UNIQUE m.name FROM machine m, serverhosts sh
+ WHERE m.mach_id = sh.mach_id
+ AND (sh.service = 'MAILHUB' or sh.service = 'POSTOFFICE');
+ if (dbms_errno)
+ {
+ free(host);
+ return mr_errcode;
+ }
+ EXEC SQL OPEN csr_listmem;
+ if (dbms_errno)
+ {
+ free(host);
+ return mr_errcode;
+ }
+ while (1)
+ {
+ EXEC SQL FETCH csr_listmem INTO :mname;
+ if (sqlca.sqlcode)
+ break;
+
+ if (!strcasecmp(host, strtrim(mname)))
+ {
+ free(host);
+ return MR_BAD_MAIL_STRING;
+ }
+ }
+ free(host);
+ }
+
+ return MR_SUCCESS;
+}