summaryrefslogtreecommitdiffstats
path: root/lib/base
diff options
context:
space:
mode:
Diffstat (limited to 'lib/base')
-rw-r--r--lib/base/Makefile37
-rw-r--r--lib/base/crit.cpp22
-rw-r--r--lib/base/dns.cpp38
-rw-r--r--lib/base/dnsdmain.cpp2
-rw-r--r--lib/base/ereport.cpp227
-rw-r--r--lib/base/eventlog.cpp1
-rw-r--r--lib/base/file.cpp1
-rw-r--r--lib/base/lexer.cpp12
-rw-r--r--lib/base/net.cpp516
-rw-r--r--lib/base/plist_pvt.h3
-rw-r--r--lib/base/pool.cpp34
-rw-r--r--lib/base/system.cpp11
-rw-r--r--lib/base/systhr.cpp1
-rw-r--r--lib/base/util.cpp977
14 files changed, 46 insertions, 1836 deletions
diff --git a/lib/base/Makefile b/lib/base/Makefile
index d646be03..6676436a 100644
--- a/lib/base/Makefile
+++ b/lib/base/Makefile
@@ -38,62 +38,33 @@ $(OBJDEST):
mkdir -p $(OBJDEST)
ifeq ($(ARCH), WINNT)
-OSOBJS = nterrors.o eventlog.o eventhandler.o ntpipe.o pathnames.o
+OSOBJS = nterrors.o eventlog.o
else
OSOBJS =
endif
OBJS = $(addprefix $(OBJDEST)/, \
- dstats.o \
- daemon.o \
shexp.o \
- regexp.o \
- pblock.o \
plist.o \
- buffer.o \
- netbuf.o \
file.o \
- net.o \
- session.o \
- cinfo.o \
util.o \
- ereport.o \
- sem.o \
+ net.o \
fsmutex.o \
systhr.o \
crit.o \
rwlock.o \
dns.o \
dnsdmain.o \
- shmem.o \
- dll.o \
- servssl.o \
lexer.o \
- restart.o \
- objndx.o \
- cache.o \
pool.o \
- time_cache.o \
- dns_cache.o \
system.o \
- xp.o \
nscperror.o \
- language.o \
- fasttime.o \
- secpwd.o \
+ ereport.o \
$(OSOBJS) \
)
-MODULE_CFLAGS=-I$(BUILD_ROOT)/include/base
-
-ifeq ($(PRODUCT),"Netscape Catalog Server")
-ifeq ($(ARCH), WINNT)
-MCC_INCLUDE := $(subst -I$(BUILD_ROOT)/lib/libnet,,$(MCC_INCLUDE))
-endif
-endif
-#$(OBJDEST)/fasttime.o : $(OBJDIR)/fasttime.o
-# cp $< $@
+MODULE_CFLAGS=-I$(BUILD_ROOT)/include/base -I$(BUILD_ROOT)/ldap/servers/slapd
$(LIBS): $(OBJS)
rm -f $@
diff --git a/lib/base/crit.cpp b/lib/base/crit.cpp
index 06f5fba4..ceb9a634 100644
--- a/lib/base/crit.cpp
+++ b/lib/base/crit.cpp
@@ -18,7 +18,6 @@
#include "netsite.h"
#include "crit.h"
#include "pool.h"
-#include "ereport.h"
#include "base/dbtbase.h"
@@ -29,13 +28,6 @@
*/
#include "nspr.h"
-/* private/primpl.h is gone fromnspr21 19971028 */
-#if 0
-#ifdef XP_WIN32
-#include "private/primpl.h"
-#endif /* XP_WIN32 */
-#endif
-
#include "prthread.h"
#include "prlock.h"
#include "prcvar.h"
@@ -97,12 +89,12 @@ NSAPI_PUBLIC void crit_enter(CRITICAL id)
PRThread *me = PR_GetCurrentThread();
if ( crit->owner == me) {
- NS_ASSERT(crit->count > 0);
+ PR_ASSERT(crit->count > 0);
crit->count++;
}
else {
PR_Lock(crit->lock);
- NS_ASSERT(crit->count == 0);
+ PR_ASSERT(crit->count == 0);
crit->count = 1;
crit->owner = me;
}
@@ -121,7 +113,7 @@ NSAPI_PUBLIC void crit_exit(CRITICAL id)
crit->owner = 0;
PR_Unlock(crit->lock);
}
- NS_ASSERT(crit->count >= 0);
+ PR_ASSERT(crit->count >= 0);
#endif
}
@@ -165,7 +157,7 @@ NSAPI_PUBLIC void condvar_wait(CONDVAR _cv)
int saveCount = cv->lock->count;
PRThread *saveOwner = cv->lock->owner;
- NS_ASSERT(cv->lock->owner == PR_GetCurrentThread());
+ PR_ASSERT(cv->lock->owner == PR_GetCurrentThread());
cv->lock->count = 0;
cv->lock->owner = 0;
@@ -185,7 +177,7 @@ NSAPI_PUBLIC void condvar_timed_wait(CONDVAR _cv, long secs)
int saveCount = cv->lock->count;
PRThread *saveOwner = cv->lock->owner;
- NS_ASSERT(cv->lock->owner == PR_GetCurrentThread());
+ PR_ASSERT(cv->lock->owner == PR_GetCurrentThread());
cv->lock->count = 0;
cv->lock->owner = 0;
@@ -205,7 +197,7 @@ NSAPI_PUBLIC void condvar_notify(CONDVAR _cv)
{
#ifdef USE_NSPR
condvar_t *cv = (condvar_t *)_cv;
- NS_ASSERT(cv->lock->owner == PR_GetCurrentThread());
+ PR_ASSERT(cv->lock->owner == PR_GetCurrentThread());
PR_NotifyCondVar(cv->cvar);
#endif
}
@@ -214,7 +206,7 @@ NSAPI_PUBLIC void condvar_notifyAll(CONDVAR _cv)
{
#ifdef USE_NSPR
condvar_t *cv = (condvar_t *)_cv;
- NS_ASSERT(cv->lock->owner == PR_GetCurrentThread());
+ PR_ASSERT(cv->lock->owner == PR_GetCurrentThread());
PR_NotifyAllCondVar(cv->cvar);
#endif
}
diff --git a/lib/base/dns.cpp b/lib/base/dns.cpp
index f9e38886..3760cac5 100644
--- a/lib/base/dns.cpp
+++ b/lib/base/dns.cpp
@@ -17,8 +17,6 @@
#include "base/systems.h"
#endif /* XP_WIN32 */
-#include "net.h" /* SYS_NETFD, various headers to do DNS */
-
/* Under NT, these are taken care of by net.h including winsock.h */
#ifdef XP_UNIX
#include <arpa/inet.h> /* inet_ntoa */
@@ -27,13 +25,8 @@
extern "C" int gethostname (char *name, size_t namelen);
#endif
#endif
-#ifdef DNS_CACHE
-#include "base/dns_cache.h"
-#include "base/ereport.h"
-#endif /* DNS_CACHE */
#include <stdio.h>
#include <nspr.h>
-#include "frame/conf.h"
/* ---------------------------- dns_find_fqdn ----------------------------- */
@@ -75,9 +68,6 @@ char *dns_ip2host(char *ip, int verify)
/* struct in_addr iaddr; */
PRNetAddr iaddr;
char *hn;
-#ifdef DNS_CACHE
- dns_cache_entry_t *dns_entry;
-#endif
static unsigned long laddr = 0;
static char myhostname[256];
PRHostEnt hent;
@@ -90,23 +80,6 @@ char *dns_ip2host(char *ip, int verify)
if((iaddr.inet.ip = inet_addr(ip)) == -1)
goto bong;
-#ifdef DNS_CACHE
- if ( (dns_entry = dns_cache_lookup_ip((unsigned int)iaddr.inet.ip)) ) {
- hn = NULL;
- if ( dns_entry->host &&
- /* Only use entry if the cache entry has been verified or if
- * verify is off...
- */
- (dns_entry->verified || !verify) ) {
- hn = STRDUP( dns_entry->host );
- (void)dns_cache_use_decrement(dns_entry);
- return hn;
- }
- dns_cache_delete(dns_entry);
- dns_entry = 0;
- }
-#endif
-
/*
* See if it happens to be the localhost IP address, and try
* the local host name if so.
@@ -159,18 +132,7 @@ char *dns_ip2host(char *ip, int verify)
goto bong;
}
-#ifdef DNS_CACHE
- if ( (dns_entry = dns_cache_insert(hn, (unsigned int)iaddr.inet.ip, verify)) ) {
- (void) dns_cache_use_decrement(dns_entry);
- }
-#endif /* DNS_CACHE */
return hn;
bong:
-#ifdef DNS_CACHE
- /* Insert the lookup failure */
- if ( (dns_entry = dns_cache_insert(NULL, (unsigned int)iaddr.inet.ip, verify)) ) {
- (void) dns_cache_use_decrement(dns_entry);
- }
-#endif /* DNS_CACHE */
return NULL;
}
diff --git a/lib/base/dnsdmain.cpp b/lib/base/dnsdmain.cpp
index f37e475c..6972dcb5 100644
--- a/lib/base/dnsdmain.cpp
+++ b/lib/base/dnsdmain.cpp
@@ -10,7 +10,6 @@
#include "netsite.h"
-#include "base/net.h"
#include <string.h>
#include <stdio.h>
#ifdef XP_UNIX
@@ -26,7 +25,6 @@
extern "C" {
#include <nspr.h>
}
-#include "frame/conf.h"
diff --git a/lib/base/ereport.cpp b/lib/base/ereport.cpp
index 3454d01f..e7acad19 100644
--- a/lib/base/ereport.cpp
+++ b/lib/base/ereport.cpp
@@ -13,10 +13,9 @@
#include "private/pprio.h" /* for nspr20 binary release */
#include "netsite.h"
#include "file.h" /* system_fopenWA, system_write_atomic */
-#include "pblock.h"
-#include "session.h"
#include "util.h" /* util_vsprintf */
#include "ereport.h"
+#include "slapi-plugin.h"
#include "base/dbtbase.h"
@@ -25,217 +24,33 @@
#include <string.h> /* strcpy */
#include <time.h> /* localtime */
-#ifdef XP_UNIX
-#include <syslog.h> /* error logging to syslog */
-
-static SYS_FILE _error_fd;
-#else /* WIN32 */
-#include <nt/regparms.h>
-#include <nt/messages.h>
-#include "eventlog.h"
-
-static SYS_FILE _error_fd;
-#endif /* XP_UNIX */
-
-static PRBool _ereport_initialized = PR_FALSE;
-
-
-NSAPI_PUBLIC SYS_FILE ereport_getfd(void) { return _error_fd; }
-
-
-
-/* ----------------------------- ereport_init ----------------------------- */
-
-
-NSAPI_PUBLIC char *ereport_init(char *err_fn, char *email,
- PASSWD pwuser, char *version)
-{
- char err[MAGNUS_ERROR_LEN];
- SYS_FILE new_fd;
-
-#ifdef XP_UNIX
- if(!strcmp(err_fn, "SYSLOG")) {
-#ifdef NET_SSL
- openlog("secure-httpd", LOG_PID, LOG_DAEMON);
-#else
- openlog("httpd", LOG_PID, LOG_DAEMON);
-#endif
- _error_fd = PR_ImportFile(ERRORS_TO_SYSLOG);
-
- _ereport_initialized = PR_TRUE;
- return NULL;
- }
-#endif /* XP_UNIX */
- if( (new_fd = system_fopenWA(err_fn)) == SYS_ERROR_FD) {
- util_snprintf(err, MAGNUS_ERROR_LEN, "can't open error log %s (%s)", err_fn,
- system_errmsg());
-#ifdef XP_UNIX
- _error_fd = PR_ImportFile(STDERR_FILENO);
-#else
- _error_fd = PR_ImportFile(NULL);
-#endif
- return STRDUP(err);
- }
- _error_fd = new_fd;
-
-#ifdef XP_UNIX
- if(pwuser)
- chown(err_fn, pwuser->pw_uid, pwuser->pw_gid);
-#endif /* XP_UNIX */
-
- _ereport_initialized = PR_TRUE;
-
- ereport(LOG_INFORM, XP_GetAdminStr(DBT_successfulServerStartup_));
- ereport(LOG_INFORM, XP_GetAdminStr(DBT_SBS_), MAGNUS_VERSION_STRING, BUILD_NUM);
- if (strcasecmp(BUILD_NUM, version)) {
- ereport(LOG_WARN, XP_GetAdminStr(DBT_netscapeExecutableAndSharedLibra_));
- ereport(LOG_WARN, XP_GetAdminStr(DBT_executableVersionIsS_), version);
- ereport(LOG_WARN, XP_GetAdminStr(DBT_sharedLibraryVersionIsS_), BUILD_NUM);
-
- }
-
- /* Initialize thread-specific error handling */
- system_errmsg_init();
-
- return NULL;
-}
-
-
-
-/* -------------------------- ereport_terminate --------------------------- */
-
-
-NSAPI_PUBLIC void ereport_terminate(void)
-{
- if (!_ereport_initialized)
- return;
-
-#ifdef XP_UNIX
- ereport(LOG_INFORM, XP_GetAdminStr(DBT_errorReportingShuttingDown_));
- if(PR_FileDesc2NativeHandle(_error_fd) != ERRORS_TO_SYSLOG)
- system_fclose(_error_fd);
- else
- closelog();
-#else /* WIN32 */
- if(PR_FileDesc2NativeHandle(_error_fd) != NULL)
- system_fclose(_error_fd);
-#endif /* XP_UNIX */
-
-}
-
-
-/* ------------------------------- ereport -------------------------------- */
-
-
-static int degree_msg[] = {
- DBT_warning_,
- DBT_config_,
- DBT_security_,
- DBT_failure_,
- DBT_catastrophe_,
- DBT_info_,
- DBT_verbose_
- };
-
-#ifdef XP_UNIX
-static int degree_syslog[] = {
- LOG_WARNING, LOG_ERR, LOG_NOTICE, LOG_ALERT, LOG_CRIT, LOG_INFO, LOG_INFO
-};
-#endif/* XP_UNIX */
-
+/* taken from ACL plugin acl.h */
+#define ACL_PLUGIN_NAME "NSACLPlugin"
NSAPI_PUBLIC int ereport_v(int degree, char *fmt, va_list args)
{
char errstr[MAX_ERROR_LEN];
- int pos = 0;
- struct tm *tms, tmss;
- time_t t;
-#ifdef MCC_PROXY
- char *p;
- int i;
-#endif /* MCC_PROXY */
- if (!_ereport_initialized)
- return IO_OKAY;
-
-#ifdef XP_UNIX
- if(PR_FileDesc2NativeHandle(_error_fd) != ERRORS_TO_SYSLOG) {
-#endif /* XP_UNIX */
- t = time(NULL);
- tms = system_localtime(&t, &tmss);
- util_strftime(errstr, ERR_TIMEFMT, tms);
- pos = strlen(errstr);
-
- pos += util_snprintf(&errstr[pos], MAX_ERROR_LEN - pos, " %s: ",
- XP_GetAdminStr(degree_msg[degree]));
-#ifdef XP_UNIX
+ util_vsnprintf(errstr, MAX_ERROR_LEN, fmt, args);
+ switch (degree)
+ {
+ case LOG_WARN:
+ case LOG_FAILURE:
+ case LOG_INFORM:
+ case LOG_VERBOSE:
+ case LOG_MISCONFIG:
+// slapi_log_error(SLAPI_LOG_PLUGIN, ACL_PLUGIN_NAME, errstr);
+ break;
+ case LOG_SECURITY:
+// slapi_log_error(SLAPI_LOG_ACL, ACL_PLUGIN_NAME, errstr);
+ break;
+ case LOG_CATASTROPHE:
+// slapi_log_error(SLAPI_LOG_FATAL, ACL_PLUGIN_NAME, errstr);
+ break;
+ default:
+ break;
}
-#endif /* XP_UNIX */
-
- pos += util_vsnprintf(&errstr[pos], sizeof(errstr) - pos, fmt, args);
-
- pos += util_snprintf(&errstr[pos], sizeof(errstr) - pos, ENDLINE);
-
-#ifdef MCC_PROXY
- /* Thanx to netlib, the proxy sometimes generates multiline err msgs */
- for(p=errstr, i=pos-1; i>0; i--, p++) {
- if (*p == '\n' || *p == '\r') *p = ' ';
- }
-#endif /* MCC_PROXY */
-
-#if defined XP_UNIX
- if(PR_FileDesc2NativeHandle(_error_fd) != ERRORS_TO_SYSLOG)
- return system_fwrite_atomic(_error_fd, errstr, pos);
- syslog(degree_syslog[degree], errstr);
return IO_OKAY;
-#elif defined XP_WIN32 /* XP_WIN32 */
- if(PR_FileDesc2NativeHandle(_error_fd) != NULL)
- {
-#ifdef MCC_HTTPD
- /* also write to NT Event Log if error is serious */
- switch (degree)
- {
- case LOG_MISCONFIG:
- case LOG_SECURITY:
- case LOG_CATASTROPHE:
- LogErrorEvent(NULL, EVENTLOG_ERROR_TYPE,
- 0, MSG_BAD_PARAMETER,
- errstr, NULL);
- break;
- default:
- break;
- }
-#endif
- return system_fwrite_atomic(_error_fd, errstr, pos);
- }
- else { /* log to the EventLogger */
- /* Write to the event logger... */
- switch (degree) {
- case LOG_WARN:
- LogErrorEvent(NULL, EVENTLOG_WARNING_TYPE,
- 0, MSG_BAD_PARAMETER,
- errstr, NULL);
- break;
- case LOG_MISCONFIG:
- case LOG_SECURITY:
- case LOG_FAILURE:
- case LOG_CATASTROPHE:
- LogErrorEvent(NULL, EVENTLOG_ERROR_TYPE,
- 0, MSG_BAD_PARAMETER,
- errstr, NULL);
- break;
-
- case LOG_INFORM:
- default:
- LogErrorEvent(NULL, EVENTLOG_INFORMATION_TYPE,
- 0, MSG_BAD_PARAMETER,
- errstr, NULL);
- break;
- }
- return (IO_OKAY);
- }
-#endif /* XP_WIN32 */
-
}
NSAPI_PUBLIC int ereport(int degree, char *fmt, ...)
diff --git a/lib/base/eventlog.cpp b/lib/base/eventlog.cpp
index b8762842..26149c1a 100644
--- a/lib/base/eventlog.cpp
+++ b/lib/base/eventlog.cpp
@@ -22,7 +22,6 @@
#include <stdlib.h>
#include "netsite.h"
#include "base/eventlog.h"
-#include "frame/conf.h"
#include <nt/regparms.h>
#include <nt/messages.h>
diff --git a/lib/base/file.cpp b/lib/base/file.cpp
index 7382be46..0833cde5 100644
--- a/lib/base/file.cpp
+++ b/lib/base/file.cpp
@@ -13,7 +13,6 @@
#include "base/file.h"
-#include "ereport.h"
#ifdef BSD_RLIMIT
#include <sys/time.h>
#include <sys/resource.h>
diff --git a/lib/base/lexer.cpp b/lib/base/lexer.cpp
index e521c51f..18327d0a 100644
--- a/lib/base/lexer.cpp
+++ b/lib/base/lexer.cpp
@@ -13,7 +13,7 @@
*/
#include "netsite.h"
-#include "base/nsassert.h"
+#include "prlog.h"
#include "lexer_pvt.h"
#include "base/lexer.h"
@@ -104,7 +104,7 @@ int lex_class_create(int classc, char * classv[], void **pchtab)
int i; /* class index */
/* Get number of bytes per bit vector */
- NS_ASSERT(classc > 0);
+ PR_ASSERT(classc > 0);
bvbytes = (classc + 7) >> 3;
/* Allocate the character class table */
@@ -137,7 +137,7 @@ int lex_class_create(int classc, char * classv[], void **pchtab)
}
/* Return pointer to table */
- NS_ASSERT(pchtab != NULL);
+ PR_ASSERT(pchtab != NULL);
*pchtab = (void *)ct;
return classc;
@@ -273,7 +273,7 @@ int lex_token_new(pool_handle_t * pool, int initlen, int growlen, void **token)
if (growlen > 0) lt->lt_inclen = growlen;
- NS_ASSERT(token != NULL);
+ PR_ASSERT(token != NULL);
*token = (void *)lt;
return 0;
@@ -533,8 +533,8 @@ int lex_token_append(void * token, int nbytes, char * src)
int bufsize;
int length;
- NS_ASSERT(nbytes >= 0);
- NS_ASSERT((src != NULL) || (nbytes == 0));
+ PR_ASSERT(nbytes >= 0);
+ PR_ASSERT((src != NULL) || (nbytes == 0));
if (nbytes > 0) {
diff --git a/lib/base/net.cpp b/lib/base/net.cpp
index 0d15b121..1ccfdbd7 100644
--- a/lib/base/net.cpp
+++ b/lib/base/net.cpp
@@ -14,19 +14,9 @@
#include "netsite.h"
-#include "prio.h"
-#include "private/pprio.h"
#include <nspr.h>
-#include <frame/conf.h>
-/* Removed for ns security integration
-#include "sslio/sslio.h"
-*/
-
-#include "net.h"
#include "util.h"
-#include "daemon.h" /* child_exit */
-#include "ereport.h" /* error reporting */
#include <string.h>
#ifdef XP_UNIX
#include <arpa/inet.h> /* inet_ntoa */
@@ -39,521 +29,18 @@ extern "C" int gethostname (char *name, size_t namelen);
#include <sys/ioctl.h> /* ioctl */
#endif
-extern "C" {
-#include "ssl.h"
-}
-
-#if defined(OSF1)
-#include <stropts.h>
-#endif
-#include "base/systems.h"
-#include "base/dbtbase.h"
-
-#if defined(OSF1)
-#include <stropts.h>
-#endif
-
-#ifdef IRIX
-#include <bstring.h> /* fd_zero uses bzero */
-#endif
-#include "netio.h"
-
-net_io_t net_io_functions;
-/* removed for ns security integration
-#include "xp_error.h"
-*/
-
#include "libadmin/libadmin.h"
-int net_enabledns = 1;
-int net_enableAsyncDNS = 0;
-int net_listenqsize = DAEMON_LISTEN_SIZE;
-unsigned int NET_BUFFERSIZE = NET_DEFAULT_BUFFERSIZE;
-unsigned int NET_READ_TIMEOUT = NET_DEFAULT_READ_TIMEOUT;
-unsigned int NET_WRITE_TIMEOUT = NET_DEFAULT_WRITE_TIMEOUT;
-unsigned int SSL_HANDSHAKE_TIMEOUT = SSL_DEFAULT_HANDSHAKE_TIMEOUT;
-
-
-/* ------------------------------ net_init -------------------------------- */
-NSAPI_PUBLIC int net_init(int security_on)
-{
- return 0;
-}
-
-/* ------------------------------ net_socket ------------------------------ */
-NSAPI_PUBLIC SYS_NETFD net_socket(int domain, int type, int protocol)
-{
- SYS_NETFD sock;
- SYS_NETFD prsock;
-
- if (security_active) {
- if (protocol == IPPROTO_TCP)
- prsock = PR_NewTCPSocket();
- else
- prsock = PR_NewUDPSocket();
- if(prsock)
- sock = SSL_ImportFD(NULL, prsock);
- else sock = NULL;
- }
- else {
- if (protocol == IPPROTO_TCP) sock = PR_NewTCPSocket();
- else sock = PR_NewUDPSocket();
- }
-
- if (sock == NULL)
- return (SYS_NETFD)SYS_NET_ERRORFD;
- return sock;
-}
-
-
-/* ---------------------------- net_getsockopt ---------------------------- */
-NSAPI_PUBLIC int net_getsockopt(SYS_NETFD s, int level, int optname,
- void *optval, int *optlen)
-{
- return getsockopt(PR_FileDesc2NativeHandle(s), level, optname,
- (char *)optval, (TCPLEN_T *)optlen);
-}
-
-
-/* ---------------------------- net_setsockopt ---------------------------- */
-
-
-NSAPI_PUBLIC int net_setsockopt(SYS_NETFD s, int level, int optname,
- const void *optval, int optlen)
-{
- return setsockopt(PR_FileDesc2NativeHandle(s), level, optname,
- (const char *)optval, optlen);
-}
-/* ------------------------------ net_listen ------------------------------ */
-
-
-NSAPI_PUBLIC int net_listen(SYS_NETFD s, int backlog)
-{
- return PR_Listen(s, backlog)==PR_FAILURE?IO_ERROR:0;
-}
-
-
-/* ------------------------- net_create_listener -------------------------- */
-
-
-NSAPI_PUBLIC SYS_NETFD net_create_listener(char *ipstr, int port)
-{
- SYS_NETFD sd;
- /*
- struct sockaddr_in sa_server;
- */
- PRNetAddr sa_server;
- PRStatus status;
- PRInt32 flags;
-
- if ((sd = net_socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) == SYS_NET_ERRORFD) {
- return SYS_NET_ERRORFD;
- }
-
-#ifdef SOLARIS
- /*
- * unset NONBLOCK flag;
- */
- /* Have no idea why Solaris want to unset NONBLOCK flag when it should
- be in NON-BLOCK mode, and new NSPR20 does not give file descriptor
- back, so the code are removed --- yjh
- flags = fcntl(sd->osfd, F_GETFL, 0);
- fcntl(sd->osfd, F_SETFL, flags & ~O_NONBLOCK);
- */
-#endif
- /* Convert to NSPR21 for ns security integration
- ZERO((char *) &sa_server, sizeof(sa_server));
- sa_server.sin_family=AF_INET;
- sa_server.sin_addr.s_addr = (ipstr ? inet_addr(ipstr) : htonl(INADDR_ANY));
- sa_server.sin_port=htons(port);
- if(net_bind(sd, (struct sockaddr *) &sa_server,sizeof(sa_server)) < 0) {
- return SYS_NET_ERRORFD;
- }
- net_listen(sd, net_listenqsize);
- */
-
- if (ipstr) {
- status = PR_InitializeNetAddr(PR_IpAddrNull, port, &sa_server);
- if (status == PR_SUCCESS) sa_server.inet.ip = inet_addr(ipstr);
- else return SYS_NET_ERRORFD;
- }
- else {
- status = PR_InitializeNetAddr(PR_IpAddrAny, port, &sa_server);
- if (status == PR_FAILURE) return SYS_NET_ERRORFD;
- }
-
- status = PR_Bind(sd, &sa_server);
- if (status == PR_FAILURE) return SYS_NET_ERRORFD;
-
-
- status = PR_Listen(sd, net_listenqsize);
- if (status == PR_FAILURE) return SYS_NET_ERRORFD;
-
- return sd;
-}
-/* ------------------------------ net_select ------------------------------ */
-
-/*
-NSAPI_PUBLIC int net_select(int nfds, fd_set *r, fd_set *w, fd_set *e,
- struct timeval *timeout)
-{
- PR_fd_set rd, wr, ex;
- int index;
- int rv;
-
- if (nfds > (64*1024))
- return -1;
-
- PR_FD_ZERO(&rd);
- PR_FD_ZERO(&wr);
- PR_FD_ZERO(&ex);
-
- for (index=0; index<nfds; index++) {
- if (FD_ISSET(index, r))
- PR_FD_NSET(index, &rd);
- if (FD_ISSET(index, w))
- PR_FD_NSET(index, &wr);
- if (FD_ISSET(index, e))
- PR_FD_NSET(index, &ex);
- }
-
- rv = PR_Select(0, &rd, &wr, &ex, PR_SecondsToInterval(timeout->tv_sec));
- if (rv > 0) {
- FD_ZERO(r);
- FD_ZERO(w);
- FD_ZERO(e);
- for (index=0; index<nfds; index++) {
- if (PR_FD_NISSET(index, &rd))
- FD_SET(index, r);
- if (PR_FD_NISSET(index, &wr))
- FD_SET(index, w);
- if (PR_FD_NISSET(index, &ex))
- FD_SET(index, e);
- }
- }
-
- return rv;
-}
-*/
-
-NSAPI_PUBLIC int net_select(int nfds, fd_set *r, fd_set *w, fd_set *e,
- struct timeval *timeout)
-{
- return 1;
-}
-
-
-/* ----------------------------- net_isalive ------------------------------ */
-
-
-/*
- * XXXmikep As suggested by shaver@ingenia.com. If everyone was POSIX
- * compilent, a write() of 0 bytes would work as well
- */
-NSAPI_PUBLIC int net_isalive(SYS_NETFD sd)
-{
- char c;
- if (PR_RecvFrom(sd, &c, 1, MSG_PEEK, NULL, 0) == -1 ) {
- return 0;
- }
- return 1;
-}
-
-
-/* ------------------------------ net_connect ------------------------------ */
-
-NSAPI_PUBLIC int net_connect(SYS_NETFD s, const void *sockaddr, int namelen)
-{
- int rv;
-
- child_status(CHILD_WRITING);
- rv = PR_Connect(s, (PRNetAddr *)sockaddr, PR_INTERVAL_NO_TIMEOUT);
- child_status(CHILD_PROCESSING);
-
- return rv==PR_FAILURE?IO_ERROR:0;
-}
-
-
-/* ------------------------------ net_ioctl ------------------------------ */
-
-
-NSAPI_PUBLIC int net_ioctl(SYS_NETFD s, int tag, void *result)
-{
-#if defined(NET_WINSOCK)
- return ioctlsocket(PR_FileDesc2NativeHandle(s),tag,(unsigned long *)result);
-#elif defined(XP_UNIX)
- return ioctl(PR_FileDesc2NativeHandle(s), tag, result);
-#else
- write me;
-#endif
-
-}
-/* --------------------------- net_getpeername ---------------------------- */
-
-
-NSAPI_PUBLIC int net_getpeername(SYS_NETFD s, struct sockaddr *name,
- int *namelen)
-{
-#if defined (SNI) || defined (UnixWare)
- return getpeername(PR_FileDesc2NativeHandle(s), name, (size_t *)namelen);
-#else /* defined (SNI) || defined (UnixWare) */
- return getpeername(PR_FileDesc2NativeHandle(s), name, (TCPLEN_T *)namelen);
-#endif /* defined (SNI) || defined (UnixWare) */
-}
-
-
-/* ------------------------------ net_close ------------------------------- */
-
-
-NSAPI_PUBLIC int net_close(SYS_NETFD s)
-{
- return PR_Close(s)==PR_FAILURE?IO_ERROR:0;
-}
-
-NSAPI_PUBLIC int net_shutdown(SYS_NETFD s, int how)
-{
- switch (how) {
- case 0:
- return PR_Shutdown(s, PR_SHUTDOWN_RCV);
- break;
- case 1:
- return PR_Shutdown(s, PR_SHUTDOWN_SEND);
- break;
- case 2:
- return PR_Shutdown(s, PR_SHUTDOWN_BOTH);
- break;
- default:
- return -1;
- }
-
- return 0;
-}
-
-
-
-/* ------------------------------- net_bind ------------------------------- */
-
-NSAPI_PUBLIC int net_bind(SYS_NETFD s, const struct sockaddr *name,
- int namelen)
-{
- return PR_Bind(s, (const PRNetAddr *)name)==PR_FAILURE?IO_ERROR:0;
-}
-
-
-/* ------------------------------ net_accept ------------------------------ */
-
-
-NSAPI_PUBLIC SYS_NETFD net_accept(SYS_NETFD sd, struct sockaddr *addr,
- int *addrlen)
-{
- SYS_NETFD sock = PR_Accept(sd, (PRNetAddr *)addr, PR_INTERVAL_NO_TIMEOUT);
-
- if (sock == NULL)
- return SYS_NET_ERRORFD;
- return sock;
-}
-
-/* ------------------------------- net_read ------------------------------- */
-
-NSAPI_PUBLIC int net_read(SYS_NETFD fd, char *buf, int sz, int timeout)
-{
- int rv;
-
- if (timeout == NET_ZERO_TIMEOUT)
- timeout = PR_INTERVAL_NO_WAIT;
- else if (timeout == NET_INFINITE_TIMEOUT)
- timeout = PR_INTERVAL_NO_TIMEOUT;
- else
- timeout = PR_SecondsToInterval(timeout);
-
- child_status(CHILD_READING);
- rv = PR_Recv(fd, buf, sz, 0, timeout);
-
- child_status(CHILD_PROCESSING);
- return rv;
-}
-
-
-/* ------------------------------ net_write ------------------------------- */
-
-#ifndef NEEDS_WRITEV
-int net_writev(SYS_NETFD fd, struct iovec *iov, int iov_size)
-{
- int rv;
-
- child_status(CHILD_WRITING);
- rv = PR_Writev(fd, (PRIOVec *)iov, iov_size, PR_INTERVAL_NO_TIMEOUT);
- child_status(CHILD_PROCESSING);
- return rv;
-}
-
-#else /* NEEDS_WRITEV */
-
-/* Since SSL and NT do not support writev(), we just emulate it.
- * This does not lead to the optimal number of packets going out...
- */
-int net_writev(SYS_NETFD fd, struct iovec *iov, int iov_size)
-{
- int index;
-
- child_status(CHILD_WRITING);
-
- for (index=0; index<iov_size; index++) {
-
- /* net_write already does the buffer for nonblocked IO */
- if ( net_write(fd, iov[index].iov_base, iov[index].iov_len) ==IO_ERROR){
- child_status(CHILD_PROCESSING);
- return IO_ERROR;
- }
- }
-
- child_status(CHILD_PROCESSING);
- return IO_OKAY;
-}
-#endif /* NEEDS_WRITEV */
-
-
-NSAPI_PUBLIC int net_write(SYS_NETFD fd, char *buf, int sz)
-{
- int rv;
-
- child_status(CHILD_WRITING);
- rv = PR_Send(fd, buf, sz, 0, PR_INTERVAL_NO_TIMEOUT);
- child_status(CHILD_PROCESSING);
- if(rv < 0) {
- return IO_ERROR;
- }
- return rv;
-}
-
-NSAPI_PUBLIC int net_socketpair(SYS_NETFD *pair)
-{
- return PR_NewTCPSocketPair(pair);
-}
-
-#ifdef XP_UNIX
-NSAPI_PUBLIC SYS_NETFD net_dup2(SYS_NETFD prfd, int osfd)
-{
- SYS_NETFD newfd = NULL;
-
- if (prfd && PR_FileDesc2NativeHandle(prfd) != osfd) {
- if (dup2(PR_FileDesc2NativeHandle(prfd), osfd) != -1) {
- newfd = PR_ImportFile(osfd);
- if (!newfd)
- close(osfd);
- }
- }
-
- return newfd;
-}
-
-NSAPI_PUBLIC int net_is_STDOUT(SYS_NETFD prfd)
-{
- int fd = PR_FileDesc2NativeHandle(prfd);
- if (fd == STDOUT_FILENO) return 1;
- return 0;
-}
-
-NSAPI_PUBLIC int net_is_STDIN(SYS_NETFD prfd)
-{
- int fd = PR_FileDesc2NativeHandle(prfd);
- if (fd == STDIN_FILENO) return 1;
- return 0;
-}
-
-#endif /* XP_UNIX */
-
-/* -------------------------- Accept mutex crap --------------------------- */
-
-
-#ifndef NET_WINSOCK
-
-
-#include "sem.h"
-static SEMAPHORE mob_sem;
-static int have_mob_sem;
-
-
-void net_accept_enter(void)
-{
- if(sem_grab(mob_sem) == -1)
- ereport(LOG_CATASTROPHE, "sem_grab failed (%s)", system_errmsg());
- have_mob_sem = 1;
-}
-
-int net_accept_tenter(void)
-{
- int ret = sem_tgrab(mob_sem);
- if(ret != -1)
- have_mob_sem = 1;
- return ret;
-}
-
-void net_accept_exit(void)
-{
- if(sem_release(mob_sem) == -1)
- ereport(LOG_CATASTROPHE, "sem_release failed (%s)", system_errmsg());
- have_mob_sem = 0;
-}
-
-#ifdef AIX
-#undef accept
-#define accept naccept
-#endif
-
-void net_accept_texit(void)
-{
- if(have_mob_sem && (sem_release(mob_sem) == -1))
- ereport(LOG_CATASTROPHE, "sem_release failed (%s)", system_errmsg());
- have_mob_sem = 0;
-}
-
-int net_accept_init(int port)
-{
- /* XXXMB how to translate this to nspr? */
- /* since SSL_AcceptHook is no longer in ns security (HCL_1_5),
- so this is gone! (It does exist in HCL_101)
- SSL_AcceptHook((SSLAcceptFunc)PR_Accept);
- */
- have_mob_sem = 0;
- mob_sem = sem_init("netsite", port);
- return (mob_sem == SEM_ERROR ? -1 : 0);
-}
-
-void net_accept_terminate(void)
-{
- sem_terminate(mob_sem);
-}
-
-#endif /* !NET_WINSOCK */
-
-
-/* ----------------------------- net_ip2host ------------------------------ */
-
-
-char *dns_ip2host(char *ip, int verify);
-
-NSAPI_PUBLIC char *net_ip2host(char *ip, int verify)
-{
- if(!net_enabledns)
- return NULL;
-
- return dns_ip2host(ip, verify);
-}
-
-
-
/* ---------------------------- util_hostname ----------------------------- */
-
#ifdef XP_UNIX
#include <sys/param.h>
#else /* WIN32 */
#define MAXHOSTNAMELEN 255
#endif /* XP_UNIX */
-/* Defined in dns.c */
+/* Defined in dns.cpp */
char *net_find_fqdn(PRHostEnt *p);
NSAPI_PUBLIC char *util_hostname(void)
@@ -575,4 +62,3 @@ NSAPI_PUBLIC char *util_hostname(void)
return net_find_fqdn(&hent);
}
-
diff --git a/lib/base/plist_pvt.h b/lib/base/plist_pvt.h
index e4b861c5..3f18b4af 100644
--- a/lib/base/plist_pvt.h
+++ b/lib/base/plist_pvt.h
@@ -35,9 +35,6 @@ typedef struct PListStruct_s PListStruct_t;
* the property value data.
*/
-#ifndef PBLOCK_H
-#include "base/pblock.h"
-#endif /* PBLOCK_H */
#include <stddef.h>
struct PLValueStruct_s {
diff --git a/lib/base/pool.cpp b/lib/base/pool.cpp
index 56232e3f..e33acd44 100644
--- a/lib/base/pool.cpp
+++ b/lib/base/pool.cpp
@@ -27,9 +27,6 @@
#ifdef MALLOC_POOLS
#include "base/pool.h"
#include "base/ereport.h"
-#include "base/session.h"
-#include "frame/req.h"
-#include "frame/http.h"
#include "base/util.h"
#include "base/crit.h"
@@ -107,40 +104,11 @@ pool_internal_init()
known_pools_lock = crit_init();
freelist_lock = crit_init();
}
- } else
- ereport(LOG_INFORM, XP_GetAdminStr(DBT_poolInitMemoryPoolsDisabled_));
-
- return 0;
-}
-
-NSAPI_PUBLIC int
-pool_init(pblock *pb, Session *sn, Request *rq)
-{
- char *str_free_size = pblock_findval("free-size", pb);
- char *str_pool_disable = pblock_findval("disable", pb);
-
- if (str_free_size != NULL) {
- if ( (freelist_max = atoi(str_free_size)) <= 0) {
- ereport(LOG_WARN, XP_GetAdminStr(DBT_poolInitFreeSize0UsingD_),
- MAX_FREELIST_SIZE);
- freelist_max = MAX_FREELIST_SIZE;
- }
}
- if (str_pool_disable && strcasecmp(str_pool_disable, "false") )
- pool_disable = 1;
- else
- pool_disable = 0;
-
- if (known_pools_lock == NULL) {
- known_pools_lock = crit_init();
- freelist_lock = crit_init();
- }
-
- return REQ_PROCEED;
+ return 0;
}
-
static block_t *
_create_block(int size)
{
diff --git a/lib/base/system.cpp b/lib/base/system.cpp
index e58538b4..d138b400 100644
--- a/lib/base/system.cpp
+++ b/lib/base/system.cpp
@@ -10,7 +10,7 @@
*/
#include "netsite.h"
-#include "base/nsassert.h"
+#include "prlog.h"
#include "base/ereport.h"
#ifdef XP_WIN32
@@ -52,6 +52,7 @@ static int thread_malloc_key = -1;
#define DEBUG_FREE_CHAR 'X'
#endif /* DEBUG_MALLOC */
+
/* On NT, the server version string is not statically encoded based
* upon a product compile define but dynamically set by the server
* exe at startup.
@@ -113,14 +114,14 @@ NSAPI_PUBLIC void system_free(void *ptr)
#if defined(MALLOC_POOLS) && defined(MCC_HTTPD) && defined(THREAD_ANY)
pool_free(MALLOC_KEY, ptr);
#else
- NS_ASSERT(ptr);
+ PR_ASSERT(ptr);
free(ptr);
#endif
}
NSAPI_PUBLIC char *system_strdup(const char *ptr)
{
- NS_ASSERT(ptr);
+ PR_ASSERT(ptr);
#if defined(MALLOC_POOLS) && defined(MCC_HTTPD) && defined(THREAD_ANY)
return pool_strdup(MALLOC_KEY, ptr);
#else
@@ -202,7 +203,7 @@ NSAPI_PUBLIC void system_free_perm(void *ptr)
char *baseptr, *cptr;
int index;
- NS_ASSERT(ptr);
+ PR_ASSERT(ptr);
cptr = baseptr = ((char *)ptr) - DEBUG_MARGIN - 2*sizeof(int);
@@ -239,7 +240,7 @@ NSAPI_PUBLIC void system_free_perm(void *ptr)
NSAPI_PUBLIC char *system_strdup_perm(const char *ptr)
{
#ifndef DEBUG_MALLOC
- NS_ASSERT(ptr);
+ PR_ASSERT(ptr);
return strdup(ptr);
#else
int len = strlen(ptr);
diff --git a/lib/base/systhr.cpp b/lib/base/systhr.cpp
index ac29121a..169405d6 100644
--- a/lib/base/systhr.cpp
+++ b/lib/base/systhr.cpp
@@ -10,7 +10,6 @@
*/
#include "systhr.h"
-#include "ereport.h"
#define USE_NSPR
#ifdef USE_NSPR
diff --git a/lib/base/util.cpp b/lib/base/util.cpp
index 55d6ca56..d775e00f 100644
--- a/lib/base/util.cpp
+++ b/lib/base/util.cpp
@@ -20,625 +20,12 @@
#include "base/util.h"
#include "base/dbtbase.h"
-#include "base/ereport.h"
#ifdef XP_UNIX
#include <sys/types.h>
#endif /* WIN32 */
-/* ----------------------------- util_getline ----------------------------- */
-
-#define LF 10
-#define CR 13
-
-NSAPI_PUBLIC int util_getline(filebuf_t *buf, int lineno, int maxlen, char *l) {
- int i, x;
-
- x = 0;
- while(1) {
- i = filebuf_getc(buf);
- switch(i) {
- case IO_EOF:
- l[x] = '\0';
- return 1;
- case LF:
- if(x && (l[x-1] == '\\')) {
- --x;
- continue;
- }
- l[x] = '\0';
- return 0;
- case IO_ERROR:
- util_sprintf(l, "I/O error reading file at line %d", lineno);
- return -1;
- case CR:
- continue;
- default:
- l[x] = (char) i;
- if(++x == maxlen) {
- util_sprintf(l, "line %d is too long", lineno);
- return -1;
- }
- break;
- }
- }
-}
-
-
-/* ---------------------------- util_can_exec ----------------------------- */
-
-#ifdef XP_UNIX
-NSAPI_PUBLIC int util_can_exec(struct stat *fi, uid_t uid, gid_t gid)
-{
- if(!uid)
- return 1;
- if((fi->st_mode & S_IXOTH) ||
- ((gid == fi->st_gid) && (fi->st_mode & S_IXGRP)) ||
- ((uid == fi->st_uid) && (fi->st_mode & S_IXUSR)))
- return 1;
- return 0;
-}
-#endif /* XP_UNIX */
-
-
-/* --------------------------- util_env_create ---------------------------- */
-
-
-NSAPI_PUBLIC char **util_env_create(char **env, int n, int *pos)
-{
- int x;
-
- if(!env) {
- *pos = 0;
- return (char **) MALLOC((n + 1)*sizeof(char *));
- }
- else {
- for(x = 0; (env[x]); x++);
- env = (char **) REALLOC(env, (n + x + 1)*(sizeof(char *)));
- *pos = x;
- return env;
- }
-}
-
-
-/* ---------------------------- util_env_free ----------------------------- */
-
-
-NSAPI_PUBLIC void util_env_free(char **env)
-{
- register char **ep = env;
-
- for(ep = env; *ep; ep++)
- FREE(*ep);
- FREE(env);
-}
-
-/* ----------------------------- util_env_str ----------------------------- */
-
-
-NSAPI_PUBLIC char *util_env_str(char *name, char *value) {
- char *t,*tp;
-
- t = (char *) MALLOC(strlen(name)+strlen(value)+2); /* 2: '=' and '\0' */
-
- for(tp=t; (*tp = *name); tp++,name++);
- for(*tp++ = '='; (*tp = *value); tp++,value++);
- return t;
-}
-
-
-/* --------------------------- util_env_replace --------------------------- */
-
-
-NSAPI_PUBLIC void util_env_replace(char **env, char *name, char *value)
-{
- int x, y, z;
- char *i;
-
- for(x = 0; env[x]; x++) {
- i = strchr(env[x], '=');
- *i = '\0';
- if(!strcmp(env[x], name)) {
- y = strlen(env[x]);
- z = strlen(value);
-
- env[x] = (char *) REALLOC(env[x], y + z + 2);
- util_sprintf(&env[x][y], "=%s", value);
- return;
- }
- *i = '=';
- }
-}
-
-
-/* ---------------------------- util_env_find ----------------------------- */
-
-
-NSAPI_PUBLIC char *util_env_find(char **env, char *name)
-{
- char *i;
- int x, r;
-
- for(x = 0; env[x]; x++) {
- i = strchr(env[x], '=');
- *i = '\0';
- r = !strcmp(env[x], name);
- *i = '=';
- if(r)
- return i + 1;
- }
- return NULL;
-}
-
-
-/* ---------------------------- util_env_copy ----------------------------- */
-
-
-NSAPI_PUBLIC char **util_env_copy(char **src, char **dst)
-{
- char **src_ptr;
- int src_cnt;
- int index;
-
- if (!src)
- return NULL;
-
- for (src_cnt = 0, src_ptr = src; *src_ptr; src_ptr++, src_cnt++);
-
- if (!src_cnt)
- return NULL;
-
- dst = util_env_create(dst, src_cnt, &index);
-
- for (src_ptr = src, index=0; *src_ptr; index++, src_ptr++)
- dst[index] = STRDUP(*src_ptr);
- dst[index] = NULL;
-
- return dst;
-}
-
-/* ---------------------------- util_hostname ----------------------------- */
-
-
-/*
- * MOVED TO NET.C TO AVOID INTERDEPENDENCIES
- */
-
-
-/* --------------------------- util_chdir2path ---------------------------- */
-
-
-NSAPI_PUBLIC int util_chdir2path(char *path)
-{
- /* use FILE_PATHSEP to accomodate WIN32 */
- char *t = strrchr(path, FILE_PATHSEP);
- int ret;
-
- if(!t)
- return -1;
-
- *t = '\0';
-#ifdef XP_UNIX
- ret = chdir(path);
-#else /* WIN32 */
- ret = SetCurrentDirectory(path);
-#endif /* XP_UNIX */
-
- /* use FILE_PATHSEP instead of chdir to accomodate WIN32 */
- *t = FILE_PATHSEP;
-
- return ret;
-}
-
-
-/* --------------------------- util_is_mozilla ---------------------------- */
-
-
-NSAPI_PUBLIC int util_is_mozilla(char *ua, char *major, char *minor)
-{
- if((!ua) || strncasecmp(ua, "Mozilla/", 8))
- return 0;
-
- /* Major version. I punted on supporting versions like 10.0 */
- if(ua[8] > major[0])
- return 1;
- else if((ua[8] < major[0]) || (ua[9] != '.'))
- return 0;
-
- /* Minor version. Support version numbers like 0.96 */
- if(ua[10] < minor[0])
- return 0;
- else if((ua[10] > minor[0]) || (!minor[1]))
- return 1;
-
- if((!isdigit(ua[11])) || (ua[11] < minor[1]))
- return 0;
- else
- return 1;
-}
-
-
-/* ----------------------------- util_is_url ------------------------------ */
-
-
-#include <ctype.h> /* isalpha */
-
-NSAPI_PUBLIC int util_is_url(char *url)
-{
- char *t = url;
-
- while(*t) {
- if(*t == ':')
- return 1;
- if(!isalpha(*t))
- return 0;
- ++t;
- }
- return 0;
-}
-
-
-/* --------------------------- util_later_than ---------------------------- */
-
-
-int _mstr2num(char *str) {
- if(!strcasecmp(str, "Jan")) return 0;
- if(!strcasecmp(str, "Feb")) return 1;
- if(!strcasecmp(str, "Mar")) return 2;
- if(!strcasecmp(str, "Apr")) return 3;
- if(!strcasecmp(str, "May")) return 4;
- if(!strcasecmp(str, "Jun")) return 5;
- if(!strcasecmp(str, "Jul")) return 6;
- if(!strcasecmp(str, "Aug")) return 7;
- if(!strcasecmp(str, "Sep")) return 8;
- if(!strcasecmp(str, "Oct")) return 9;
- if(!strcasecmp(str, "Nov")) return 10;
- if(!strcasecmp(str, "Dec")) return 11;
- return -1;
-}
-
-int _time_compare(struct tm *lms, char *ims, int later_than_op)
-{
- int y = 0, mnum = 0, d = 0, h = 0, m = 0, s = 0, x;
- char t[128];
-
- /* Supported formats start with weekday (which we don't care about) */
- /* The sizeof(t) is to avoid buffer overflow with t */
- if((!(ims = strchr(ims,' '))) || (strlen(ims) > (sizeof(t) - 2)))
- return 0;
-
- while(*ims && isspace(*ims)) ++ims;
- if((!(*ims)) || (strlen(ims) < 2))
- return 0;
-
- /* Standard HTTP (RFC 850) starts with dd-mon-yy */
- if(ims[2] == '-') {
- sscanf(ims, "%s %d:%d:%d", t, &h, &m, &s);
- if(strlen(t) < 6)
- return 0;
- t[2] = '\0';
- t[6] = '\0';
- d = atoi(t);
- mnum = _mstr2num(&t[3]);
- x = atoi(&t[7]);
- /* Postpone wraparound until 2070 */
- y = x + (x < 70 ? 2000 : 1900);
- }
- /* The ctime format starts with a month name */
- else if(isalpha(*ims)) {
- sscanf(ims,"%s %d %d:%d:%d %*s %d", t, &d, &h, &m, &s, &y);
- mnum = _mstr2num(t);
- }
- /* RFC 822 */
- else {
- sscanf(ims, "%d %s %d %d:%d:%d", &d, t, &y, &h, &m, &s);
- mnum = _mstr2num(t);
- }
-
- if (later_than_op) {
- if( (x = (1900 + lms->tm_year) - y) )
- return x < 0;
-
- if(mnum == -1)
- return 0;
-
- /* XXXMB - this will fail if you check if december 31 1996 is later
- * than january 1 1997
- */
- if((x = lms->tm_mon - mnum) || (x = lms->tm_mday - d) ||
- (x = lms->tm_hour - h) || (x = lms->tm_min - m) ||
- (x = lms->tm_sec - s))
- return x < 0;
-
- return 1;
- }
- else {
- return (mnum != -1 &&
- 1900 + lms->tm_year == y &&
- lms->tm_mon == mnum &&
- lms->tm_mday == d &&
- lms->tm_hour == h &&
- lms->tm_min == m &&
- lms->tm_sec == s);
- }
-}
-
-
-/* Returns 0 if lms later than ims
- * Returns 1 if equal
- * Returns 1 if ims later than lms
- */
-NSAPI_PUBLIC int util_later_than(struct tm *lms, char *ims)
-{
- return _time_compare(lms, ims, 1);
-}
-
-
-NSAPI_PUBLIC int util_time_equal(struct tm *lms, char *ims)
-{
- return _time_compare(lms, ims, 0);
-}
-
-/* util_str_time_equal()
- *
- * Function to compare if two time strings are equal
- *
- * Acceptible date formats:
- * Saturday, 17-Feb-96 19:41:34 GMT <RFC850>
- * Sat, 17 Mar 1996 19:41:34 GMT <RFC1123>
- *
- * Argument t1 MUST be RFC1123 format.
- *
- * Note- it is not the intention of this routine to *always* match
- * There are cases where we would return != when the strings might
- * be equal (especially with case). The converse should not be true.
- *
- * Return 0 if equal, -1 if not equal.
- */
-#define MINIMUM_LENGTH 18
-#define RFC1123_DAY 5
-#define RFC1123_MONTH 8
-#define RFC1123_YEAR 12
-#define RFC1123_HOUR 17
-#define RFC1123_MINUTE 20
-#define RFC1123_SECOND 23
-NSAPI_PUBLIC int util_str_time_equal(char *t1, char *t2)
-{
- int index;
-
- /* skip over leading whitespace... */
- while(*t1 && isspace(*t1)) ++t1;
- while(*t2 && isspace(*t2)) ++t2;
-
- /* Check weekday */
- if ( (t1[0] != t2[0]) || (t1[1] != t2[1]) )
- return -1;
-
- /* Skip to date */
- while(*t2 && !isspace(*t2)) ++t2;
- t2++;
-
- /* skip if not strings not long enough */
- if ( (strlen(t1) < MINIMUM_LENGTH) || (strlen(t2) < MINIMUM_LENGTH) )
- return -1;
-
- if ( (t1[RFC1123_DAY] != t2[0]) || (t1[RFC1123_DAY+1] != t2[1]) )
- return -1;
-
- /* Skip to the month */
- t2 += 3;
-
- if ( (t1[RFC1123_MONTH] != t2[0]) || (t1[RFC1123_MONTH+1] != t2[1]) ||
- (t1[RFC1123_MONTH+2] != t2[2]) )
- return -1;
-
- /* Skip to year */
- t2 += 4;
-
- if ( (t1[RFC1123_YEAR] != t2[0]) ) {
- /* Assume t2 is RFC 850 format */
- if ( (t1[RFC1123_YEAR+2] != t2[0]) || (t1[RFC1123_YEAR+3] != t2[1]) )
- return -1;
-
- /* skip to hour */
- t2 += 3;
- } else {
- /* Assume t2 is RFC 1123 format */
- if ( (t1[RFC1123_YEAR+1] != t2[1]) || (t1[RFC1123_YEAR+2] != t2[2]) ||
- (t1[RFC1123_YEAR+3] != t2[3]) )
- return -1;
-
- /* skip to hour */
- t2 += 5;
- }
-
- /* check date */
- for (index=0; index<8; index++) {
- if ( t1[RFC1123_HOUR+index] != t2[index] )
- return -1;
- }
-
- /* Ignore timezone */
-
- return 0;
-}
-
-
-/* --------------------------- util_uri_is_evil --------------------------- */
-
-
-NSAPI_PUBLIC int util_uri_is_evil(char *t)
-{
- register int x;
-
- for(x = 0; t[x]; ++x) {
- if(t[x] == '/') {
- if(t[x+1] == '/')
- return 1;
- if(t[x+1] == '.') {
- switch(t[x+2]) {
- case '.':
- if((!t[x+3]) || (t[x+3] == '/'))
- return 1;
- case '/':
- case '\0':
- return 1;
- }
- }
- }
-#ifdef XP_WIN32
- /* On NT, the directory "abc...." is the same as "abc"
- * The only cheap way to catch this globally is to disallow
- * names with the trailing "."s. Hopefully this is not over
- * restrictive
- */
- if ((t[x] == '.') && ( (t[x+1] == '/') || (t[x+1] == '\0') )) {
- return 1;
- }
-#endif
- }
- return 0;
-}
-
-/* ---------------------------- util_uri_parse ---------------------------- */
-
-NSAPI_PUBLIC void util_uri_parse(char *uri)
-{
- int spos = 0, tpos = 0;
- int l = strlen(uri);
-
- while(uri[spos]) {
- if(uri[spos] == '/') {
- if((spos != l) && (uri[spos+1] == '.')) {
- if(uri[spos+2] == '/')
- spos += 2;
- else
- if((spos <= (l-3)) &&
- (uri[spos+2] == '.') && (uri[spos+3] == '/')) {
- spos += 3;
- while((tpos > 0) && (uri[--tpos] != '/'))
- uri[tpos] = '\0';
- } else
- uri[tpos++] = uri[spos++];
- } else {
- if(uri[spos+1] != '/')
- uri[tpos++] = uri[spos++];
- else
- spos++;
- }
- } else
- uri[tpos++] = uri[spos++];
- }
- uri[tpos] = '\0';
-}
-
-
-/* -------------------- util_uri_unescape_and_normalize -------------------- */
-
-#ifdef XP_WIN32
-/* The server calls this function to unescape the URI and also normalize
- * the uri. Normalizing the uri converts all "\" characters in the URI
- * and pathinfo portion to "/". Does not touch "\" in query strings.
- */
-void util_uri_unescape_and_normalize(char *s)
-{
- char *t, *u;
-
- for(t = s, u = s; *t; ++t, ++u) {
- if((*t == '%') && t[1] && t[2]) {
- *u = ((t[1] >= 'A' ? ((t[1] & 0xdf) - 'A')+10 : (t[1] - '0'))*16) +
- (t[2] >= 'A' ? ((t[2] & 0xdf) - 'A')+10 : (t[2] - '0'));
- t += 2;
- }
- else
- if(u != t)
- *u = *t;
- if (*u == '\\') /* normalize */
- *u = '/';
- }
- *u = *t;
-}
-#endif /* XP_WIN32 */
-
-/* -------------------------- util_uri_unescape --------------------------- */
-
-NSAPI_PUBLIC void util_uri_unescape(char *s)
-{
- char *t, *u;
-
- for(t = s, u = s; *t; ++t, ++u) {
- if((*t == '%') && t[1] && t[2]) {
- *u = ((t[1] >= 'A' ? ((t[1] & 0xdf) - 'A')+10 : (t[1] - '0'))*16) +
- (t[2] >= 'A' ? ((t[2] & 0xdf) - 'A')+10 : (t[2] - '0'));
- t += 2;
- }
- else
- if(u != t)
- *u = *t;
- }
- *u = *t;
-}
-
-
-/* --------------------------- util_uri_escape ---------------------------- */
-
-
-NSAPI_PUBLIC char *util_uri_escape(char *od, char *s)
-{
- char *d;
-
- if(!od)
- od = (char *) MALLOC((strlen(s)*3) + 1);
- d = od;
-
- while(*s) {
- if(strchr("% ?#:+&*\"<>\r\n", *s)) {
- sprintf(d, "%%%2x", *s);
- ++s; d += 3;
- }
- else
- *d++ = *s++;
- }
- *d = '\0';
- return od;
-}
-
-
-/* --------------------------- util_url_escape ---------------------------- */
-
-
-NSAPI_PUBLIC char *util_url_escape(char *od, char *s)
-{
- char *d;
-
- if(!od)
- od = (char *) MALLOC((strlen(s)*3) + 1);
- d = od;
-
- while(*s) {
- if(strchr("% +*\"<>\r\n", *s)) {
- sprintf(d, "%%%.2x", *s);
- ++s; d += 3;
- }
- else
- *d++ = *s++;
- }
- *d = '\0';
- return od;
-}
-
-
-/* ------------------------- util_mime_separator -------------------------- */
-
-
-NSAPI_PUBLIC int util_mime_separator(char *sep)
-{
- srand(time(NULL));
- return util_sprintf(sep, "%c%c--%d%d%d", CR, LF, rand(), rand(), rand());
-}
-
-
/* ------------------------------ util_itoa ------------------------------- */
@@ -714,23 +101,6 @@ NSAPI_PUBLIC int util_sprintf(char *s, const char *fmt, ...)
return PR_vsnprintf(s, UTIL_PRF_MAXSIZE, fmt, args);
}
-/* ---------------------------- util_sh_escape ---------------------------- */
-
-
-NSAPI_PUBLIC char *util_sh_escape(char *s)
-{
- char *ns = (char *) MALLOC(strlen(s) * 2 + 1); /* worst case */
- register char *t, *u;
-
- for(t = s, u = ns; *t; ++t, ++u) {
- if(strchr("&;`'\"|*?~<>^()[]{}$\\ #!", *t))
- *u++ = '\\';
- *u = *t;
- }
- *u = '\0';
- return ns;
-}
-
/* --------------------------- util_strcasecmp ---------------------------- */
@@ -777,67 +147,6 @@ int util_strncasecmp(CASECMPARG_T char *one, CASECMPARG_T char *two, int n)
}
#endif /* NEED_STRNCASECMP */
-#ifdef XP_WIN32
-
-
-/* util_delete_directory()
- * This routine deletes all the files in a directory. If delete_directory is
- * TRUE it will also delete the directory itself.
- */
-VOID
-util_delete_directory(char *FileName, BOOL delete_directory)
-{
- HANDLE firstFile;
- WIN32_FIND_DATA findData;
- char *TmpFile, *NewFile;
-
- if (FileName == NULL)
- return;
-
- TmpFile = (char *)MALLOC(strlen(FileName) + 5);
- sprintf(TmpFile, "%s\\*.*", FileName);
- firstFile = FindFirstFile(TmpFile, &findData);
- FREE(TmpFile);
-
- if (firstFile == INVALID_HANDLE_VALUE)
- return;
-
- if(strcmp(findData.cFileName, ".") &&
- strcmp(findData.cFileName, "..")) {
- NewFile = (char *)MALLOC(strlen(FileName) + 1 +
- strlen(findData.cFileName) + 1);
- sprintf(NewFile, "%s\\%s",FileName, findData.cFileName);
- DeleteFile(NewFile);
- FREE(NewFile);
- }
- while (TRUE) {
- if(!(FindNextFile(firstFile, &findData))) {
- if (GetLastError() != ERROR_NO_MORE_FILES) {
- ereport(LOG_WARN, XP_GetAdminStr(DBT_couldNotRemoveTemporaryDirectory_), FileName, GetLastError());
- } else {
- FindClose(firstFile);
- if (delete_directory)
- if(!RemoveDirectory(FileName)) {
- ereport(LOG_WARN,
- XP_GetAdminStr(DBT_couldNotRemoveTemporaryDirectory_1),
- FileName, GetLastError());
- }
- return;
- }
- } else {
- if(strcmp(findData.cFileName, ".") &&
- strcmp(findData.cFileName, "..")) {
- NewFile = (char *)MALLOC(strlen(FileName) + 5 +
- strlen(findData.cFileName) + 1);
- sprintf(NewFile,"%s\\%s", FileName, findData.cFileName);
- DeleteFile(NewFile);
- FREE(NewFile);
- }
- }
- }
-}
-#endif
-
/* ------------------------------ util_strftime --------------------------- */
/*
* Copyright (c) 1989 The Regents of the University of California.
@@ -1118,30 +427,6 @@ _util_strftime_conv(char *pt, int n, int digits, char pad)
return;
}
-
-#ifdef XP_UNIX
-/*
- * Local Thread Safe version of waitpid. This prevents the process
- * from blocking in the system call.
- */
-NSAPI_PUBLIC pid_t
-util_waitpid(pid_t pid, int *statptr, int options)
-{
- pid_t rv;
-
- for(rv = 0; !rv; PR_Sleep(500)) {
- rv = waitpid(pid, statptr, options | WNOHANG);
- if (rv == -1) {
- if (errno == EINTR)
- rv = 0; /* sleep and try again */
- else
- ereport(LOG_WARN, "waitpid failed for pid %d:%s", pid, system_errmsg());
- }
- }
- return rv;
-}
-#endif
-
/*
* Various reentrant routines by mikep. See util.h and systems.h
*/
@@ -1164,111 +449,6 @@ util_waitpid(pid_t pid, int *statptr, int options)
#endif
-NSAPI_PUBLIC char *
-util_strtok(register char *s,
- register const char *delim,
- register char **lasts)
-{
-#ifdef HAVE_STRTOK_R
- return strtok_r(s, delim, lasts);
-#else
- /*
- * THIS IS THE THREAD SAFE VERSION OF strtok captured from
- * public NetBSD. Note that no locks are needed
- */
- register char *spanp;
- register int c, sc;
- char *tok;
-
- if (s == NULL && (s = *lasts) == NULL)
- return (NULL);
-
- /*
- * Skip (span) leading delimiters (s += strspn(s, delim),
- * sort of).
- */
-
-cont:
- c = *s++;
- for (spanp = (char *)delim; (sc = *spanp++) != 0;) {
- if (c == sc)
- goto cont;
- }
-
- if (c == 0) { /* no non-delimiter characters */
- *lasts = NULL;
- return (NULL);
- }
- tok = s - 1;
-
- /*
- * Scan token (scan for delimiters: s += strcspn(s, delim),
- * sort of).
- * Note that delim must have one NUL; we stop if we see that, too.
- */
- for (;;) {
- c = *s++;
- spanp = (char *)delim;
- do {
- if ((sc = *spanp++) == c) {
- if (c == 0)
- s = NULL;
- else
- s[-1] = 0;
- *lasts = s;
- return (tok);
- }
- } while (sc != 0);
- }
- /* NOTREACHED */
-#endif /* no strtok_r */
-}
-
-#ifndef XP_WIN32
-NSAPI_PUBLIC struct passwd *
-util_getpwnam(const char *name, struct passwd *result, char *buffer,
- int buflen)
-{
-#ifdef HAVE_PW_R
-
-#ifdef AIX
-#if OSVERSION >= 4320
- return ((int)getpwnam_r(name, result, buffer, buflen, 0) == 0 ? result : NULL);
-#else
- return ((int)getpwnam_r(name, result, buffer, buflen) == 0 ? result : NULL);
-#endif
-#else
- return getpwnam_r(name, result, buffer, buflen);
-#endif /* AIX */
-
-#else
- char *lastp;
- struct passwd *r;
- RE_LOCK(pw);
- r = getpwnam(name);
- if (!r)
- return r;
-
- result->pw_gid = r->pw_gid;
- result->pw_uid = r->pw_uid;
- /* Hope this buffer is long enough */
- if (buffer)
- util_snprintf(buffer, buflen, "%s:%s:%d:%d:%s:%s:%s", r->pw_name, r->pw_passwd,
- r->pw_uid, r->pw_gid, r->pw_gecos, r->pw_dir, r->pw_shell);
- RE_UNLOCK(pw);
-
- result->pw_name = util_strtok(buffer, ":", &lastp);
- result->pw_passwd = util_strtok(NULL, ":", &lastp);
- (void) util_strtok(NULL, ":", &lastp);
- (void) util_strtok(NULL, ":", &lastp);
- result->pw_gecos = util_strtok(NULL, ":", &lastp);
- result->pw_dir = util_strtok(NULL, ":", &lastp);
- result->pw_shell = util_strtok(NULL, ":", &lastp);
- return result;
-#endif
-}
-#endif
-
NSAPI_PUBLIC struct tm *
util_localtime(const time_t *clock, struct tm *res)
{
@@ -1290,160 +470,3 @@ util_localtime(const time_t *clock, struct tm *res)
return res;
#endif
}
-
-
-NSAPI_PUBLIC char *
-util_ctime(const time_t *clock, char *buf, int buflen)
-{
-/*
- * From cgi-src/restore.c refering to XP_WIN32:
- * MLM - gross, but it works, better now FLC
- */
-#if !defined(HAVE_TIME_R) || defined(XP_WIN32)
- RE_LOCK(ctime);
- strncpy(buf, ctime(clock), buflen);
- buf[buflen - 1] = '\0';
- RE_UNLOCK(ctime);
- return buf;
-#elif HAVE_TIME_R == 2
- return ctime_r(clock, buf);
-#else /* HAVE_TIME_R == 3 */
- return ctime_r(clock, buf, buflen);
-#endif
-}
-
-NSAPI_PUBLIC struct tm *
-util_gmtime(const time_t *clock, struct tm *res)
-{
-#ifdef HAVE_TIME_R
- return gmtime_r(clock, res);
-#else
- struct tm *rv;
- time_t zero = 0x7fffffff;
-
- RE_LOCK(gmtime);
- rv = gmtime(clock);
- RE_UNLOCK(gmtime);
- if (!rv)
- rv = gmtime(&zero);
- if (rv)
- *res = *rv;
- else
- return NULL;
-
- return res;
-#endif
-}
-
-NSAPI_PUBLIC char *
-util_asctime(const struct tm *tm, char *buf, int buflen)
-{
-#if HAVE_TIME_R == 2
- return asctime_r(tm, buf);
-#elif HAVE_TIME_R == 3
- return asctime_r(tm, buf, buflen);
-#else
- RE_LOCK(asctime);
- strncpy(buf, asctime(tm), buflen);
- buf[buflen - 1] = '\0';
- RE_UNLOCK(asctime);
- return buf;
-#endif
-}
-
-NSAPI_PUBLIC char *
-util_strerror(int errnum, char *msg, int buflen)
-{
-#ifdef HAVE_STRERROR_R
- /* More IBM real-genius */
- return ((int)strerror_r(errnum, msg, buflen) > 0) ? msg : NULL;
-#else
- /* RE_LOCK(strerror); I don't think this is worth the trouble */
- (void)strncpy(msg, strerror(errnum), buflen);
- msg[buflen - 1] = '\0';
- return msg;
- /* RE_UNLOCK(strerror); */
-#endif
-}
-
-
-
-/* ------------------------------- OLD CODE ------------------------------- */
-
-
-#if 0
-
-NSAPI_PUBLIC int util_vsnprintf(char *s, int n, register char *fmt,
- va_list args)
-{
- register int pos = 0, max = (n > 2 ? n-2 : -1), boundson;
- register char c, *t;
-
- if((max == -1) && (n != -1))
- goto punt;
-
- boundson = (n != -1);
- while(*fmt) {
- if(boundson && (pos > max))
- break;
- c = *fmt++;
- switch(c) {
- case '%':
- switch(*fmt++) {
- case 'd':
- if(boundson && ((pos + 10) > max))
- goto punt;
- pos += util_itoa(va_arg(args, int), &s[pos]);
- break;
- case 's':
- t = va_arg(args, char *);
- while(*t) {
- s[pos++] = *t++;
- if(boundson && (pos > max))
- goto punt;
- }
- break;
- case 'c':
- s[pos++] = (char) va_arg(args, int);
- break;
- case '%':
- s[pos++] = '%';
- break;
- }
- break;
- case '\\':
- if( (s[pos++] = *fmt) )
- ++fmt;
- break;
- default:
- s[pos++] = c;
- }
- }
- punt:
- s[pos] = '\0';
-
- va_end(args);
- return pos;
-}
-
-NSAPI_PUBLIC int util_snprintf(char *s, int n, char *fmt, ...)
-{
- va_list args;
-
- va_start(args, fmt);
- return util_vsnprintf(s, n, fmt, args);
-}
-
-NSAPI_PUBLIC int util_vsprintf(char *s, register char *fmt, va_list args)
-{
- return util_vsnprintf(s, -1, fmt, args);
-}
-
-NSAPI_PUBLIC int util_sprintf(char *s, char *fmt, ...)
-{
- va_list args;
-
- va_start(args, fmt);
- return util_vsnprintf(s, -1, fmt, args);
-}
-#endif