summaryrefslogtreecommitdiff
path: root/pith/osdep/canonicl.c
diff options
context:
space:
mode:
Diffstat (limited to 'pith/osdep/canonicl.c')
-rw-r--r--pith/osdep/canonicl.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/pith/osdep/canonicl.c b/pith/osdep/canonicl.c
new file mode 100644
index 00000000..09791148
--- /dev/null
+++ b/pith/osdep/canonicl.c
@@ -0,0 +1,71 @@
+#if !defined(lint) && !defined(DOS)
+static char rcsid[] = "$Id: canonicl.c 764 2007-10-23 23:44:49Z hubert@u.washington.edu $";
+#endif
+
+/*
+ * ========================================================================
+ * Copyright 2006 University of Washington
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * ========================================================================
+ */
+
+#include "../../c-client/mail.h"
+extern unsigned char *lcase(unsigned char *);
+
+#ifdef _WINDOWS
+/* wingdi.h uses ERROR (!) and we aren't using the c-client ERROR so... */
+#undef ERROR
+#endif
+
+#include <system.h>
+
+#include "canonicl.h"
+
+
+/*----------------------------------------------------------------------
+ Return canonical form of host name ala c-client (UNIX version).
+
+ Args: host -- The host name
+
+ Result: Canonical form, or input argument (worst case)
+
+ You can call it twice without worrying about copying
+ the results, but not more than twice.
+ ----*/
+char *
+canonical_name(char *host)
+{
+ struct hostent *hent;
+ char tmp[MAILTMPLEN];
+ static int whichbuf = 0;
+ static char buf[2][NETMAXHOST+1];
+ char *b;
+
+ whichbuf = (whichbuf + 1) % 2;
+ b = buf[whichbuf];
+
+ /* domain literal is easy */
+ if (host[0] == '[' && host[(strlen (host))-1] == ']')
+ strncpy(b, host, NETMAXHOST);
+ else{
+ strncpy(tmp, host, sizeof(tmp)-1);
+ tmp[sizeof(tmp)-1] = '\0';
+
+ hent = gethostbyname((char *) lcase((unsigned char *) tmp));
+ if(hent && hent->h_name)
+ strncpy(b, hent->h_name, NETMAXHOST);
+ else
+ strncpy(b, host, NETMAXHOST);
+ }
+
+ b[NETMAXHOST] = '\0';
+ return(b);
+}
+
+