summaryrefslogtreecommitdiff
path: root/imap/src/osdep/unix/os_ptx.c
diff options
context:
space:
mode:
Diffstat (limited to 'imap/src/osdep/unix/os_ptx.c')
-rw-r--r--imap/src/osdep/unix/os_ptx.c115
1 files changed, 115 insertions, 0 deletions
diff --git a/imap/src/osdep/unix/os_ptx.c b/imap/src/osdep/unix/os_ptx.c
new file mode 100644
index 00000000..d7f84d7d
--- /dev/null
+++ b/imap/src/osdep/unix/os_ptx.c
@@ -0,0 +1,115 @@
+/* ========================================================================
+ * Copyright 1988-2007 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
+ *
+ *
+ * ========================================================================
+ */
+
+/*
+ * Program: Operating-system dependent routines -- PTX version
+ *
+ * Author: Mark Crispin
+ * Networks and Distributed Computing
+ * Computing & Communications
+ * University of Washington
+ * Administration Building, AG-44
+ * Seattle, WA 98195
+ * Internet: MRC@CAC.Washington.EDU
+ *
+ * Date: 11 May 1989
+ * Last Edited: 16 August 2007
+ */
+
+#include "tcp_unix.h" /* must be before osdep includes tcp.h */
+#include "mail.h"
+#include "osdep.h"
+#include <ctype.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/tiuser.h>
+#include <sys/stropts.h>
+#include <sys/socket.h>
+#include <sys/poll.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <errno.h>
+#include <pwd.h>
+#include <shadow.h>
+#include <sys/select.h>
+#include "misc.h"
+
+extern int sys_nerr;
+extern char *sys_errlist[];
+
+#define DIR_SIZE(d) d->d_reclen
+
+#define toint(c) ((c)-'0')
+#define isodigit(c) (((unsigned)(c)>=060)&((unsigned)(c)<=067))
+
+
+#include "fs_unix.c"
+#include "ftl_unix.c"
+#include "nl_unix.c"
+#define env_init ENV_INIT
+#include "env_unix.c"
+#undef env_init
+#define getpeername Getpeername
+#define fork vfork
+#include "tcp_unix.c"
+#include "gr_waitp.c"
+#include "flocksim.c"
+#include "scandir.c"
+#include "tz_sv4.c"
+#include "utime.c"
+
+/* Jacket around env_init() to work around PTX inetd braindamage */
+
+static char may_need_server_init = T;
+
+long env_init (char *user,char *home)
+{
+ if (may_need_server_init) { /* maybe need to do server init cruft? */
+ may_need_server_init = NIL; /* not any more we don't */
+ if (!getuid ()) { /* if root, we're most likely a server */
+ t_sync (0); /* PTX inetd is stupid, stupid, stupid */
+ ioctl (0,I_PUSH,"tirdwr");/* it needs this cruft, else servers won't */
+ dup2 (0,1); /* work. How obnoxious!!! */
+ }
+ }
+ ENV_INIT (user,home); /* call the real routine */
+}
+
+/* Emulator for BSD gethostid() call
+ * Returns: unique identifier for this machine
+ */
+
+long gethostid (void)
+{
+ struct sockaddr_in sin;
+ int inet = t_open (TLI_TCP, O_RDWR, 0);
+ if (inet < 0) return 0;
+ getmyinaddr (inet,&sin,sizeof (sin));
+ close (inet);
+ return sin.sin_addr.s_addr;
+}
+
+
+/* Replaced version of getpeername() that jackets into getpeerinaddr()
+ * Accepts: file descriptor
+ * pointer to Internet socket addr
+ * length
+ * Returns: zero if success, data in socket addr
+ */
+
+int Getpeername (int s,struct sockaddr *name,int *namelen)
+{
+ return getpeerinaddr (s,(struct sockaddr_in *) name,*namelen);
+}