summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorRob Crittenden <rcritten@redhat.com>2005-02-23 18:19:13 +0000
committerRob Crittenden <rcritten@redhat.com>2005-02-23 18:19:13 +0000
commit21305115e547133a0122c44b7e9956ef78dc94be (patch)
treeb72f28ba737b35c0f13003478f5e777146789ef3 /include
parentf64e827b9c3011b07b5d78dd52466236dc77346e (diff)
downloadds-21305115e547133a0122c44b7e9956ef78dc94be.tar.gz
ds-21305115e547133a0122c44b7e9956ef78dc94be.tar.xz
ds-21305115e547133a0122c44b7e9956ef78dc94be.zip
149510
Strip down ACL code and support libraries to the bare minimum.
Diffstat (limited to 'include')
-rw-r--r--include/base/crit.h6
-rw-r--r--include/base/ereport.h29
-rw-r--r--include/base/pool.h16
-rw-r--r--include/base/util.h123
-rw-r--r--include/libaccess/acl.h1
-rw-r--r--include/libaccess/las.h1
-rw-r--r--include/libadmin/libadmin.h1309
-rw-r--r--include/nt/nsapi.h246
-rw-r--r--include/public/nsapi.h3182
9 files changed, 10 insertions, 4903 deletions
diff --git a/include/base/crit.h b/include/base/crit.h
index 1ff7e957..e9a3498a 100644
--- a/include/base/crit.h
+++ b/include/base/crit.h
@@ -32,9 +32,7 @@
/* Define C++ interface */
#ifdef __cplusplus
-#ifndef BASE_NSASSERT_H
-#include "nsassert.h"
-#endif /* !BASE_NSASSERT_H */
+#include "prlog.h" /* NSPR */
#ifndef prmon_h___
#include "prmon.h"
@@ -55,7 +53,7 @@ private:
inline CriticalSection::CriticalSection():_crtsec(0)
{
_crtsec = PR_NewMonitor();
- NS_ASSERT(_crtsec);
+ PR_ASSERT(_crtsec);
}
inline CriticalSection::~CriticalSection()
diff --git a/include/base/ereport.h b/include/base/ereport.h
index 0c74e957..16a4bc68 100644
--- a/include/base/ereport.h
+++ b/include/base/ereport.h
@@ -16,10 +16,6 @@
* Rob McCool
*/
-#ifndef BASE_SESSION_H
-#include "session.h"
-#endif /* !BASE_SESSION_H */
-
#ifndef PUBLIC_BASE_EREPORT_H
#include "public/base/ereport.h"
#endif /* !PUBLIC_BASE_EREPORT_H */
@@ -39,37 +35,12 @@ NSPR_BEGIN_EXTERN_C
NSAPI_PUBLIC int INTereport(int degree, char *fmt, ...);
NSAPI_PUBLIC int INTereport_v(int degree, char *fmt, va_list args);
-/*
- * INTereport_init initializes the error logging subsystem and opens the static
- * file descriptors. It returns NULL upon success and an error string upon
- * error. If a userpw is given, the logs will be chowned to that user.
- *
- * email is the address of a person to mail upon catastrophic error. It
- * can be NULL if no e-mail is desired. INTereport_init will not duplicate
- * its own copy of this string; you must make sure it stays around and free
- * it when you shut down the server.
- */
-
-NSAPI_PUBLIC
-char *INTereport_init(char *err_fn, char *email, PASSWD pwuser, char *version);
-
-/*
- * log_terminate closes the error and common log file descriptors.
- */
-NSAPI_PUBLIC void INTereport_terminate(void);
-
-/* For restarts */
-NSAPI_PUBLIC SYS_FILE INTereport_getfd(void);
-
NSPR_END_EXTERN_C
/* --- End function prototypes --- */
#define ereport INTereport
#define ereport_v INTereport_v
-#define ereport_init INTereport_init
-#define ereport_terminate INTereport_terminate
-#define ereport_getfd INTereport_getfd
#endif /* INTNSAPI */
diff --git a/include/base/pool.h b/include/base/pool.h
index bca055c7..a76dc483 100644
--- a/include/base/pool.h
+++ b/include/base/pool.h
@@ -30,18 +30,6 @@
#include "netsite.h"
#endif /* !NETSITE_H */
-#ifndef BASE_PBLOCK_H
-#include "pblock.h"
-#endif /* !BASE_PBLOCK_H */
-
-#ifndef BASE_SESSION_H
-#include "session.h"
-#endif /* !BASE_SESSION_H */
-
-#ifndef FRAME_REQ_H
-#include "frame/req.h"
-#endif /* !FRAME_REQ_H */
-
#ifndef PUBLIC_BASE_POOL_H
#include "public/base/pool.h"
#endif /* !PUBLIC_BASE_POOL_H */
@@ -54,8 +42,6 @@ NSPR_BEGIN_EXTERN_C
int pool_internal_init(void);
-NSAPI_PUBLIC int INTpool_init(pblock *pb, Session *sn, Request *rq);
-
#ifdef DEBUG_CACHES
NSAPI_PUBLIC int INTpool_service_debug(pblock *pb, Session *sn, Request *rq);
#endif
@@ -81,8 +67,6 @@ char *INTpool_strdup(pool_handle_t *pool_handle, const char *orig_str );
NSPR_END_EXTERN_C
-#define pool_init INTpool_init
-
#ifdef DEBUG_CACHES
#define pool_service_debug INTpool_service_debug
#endif /* DEBUG_CACHES */
diff --git a/include/base/util.h b/include/base/util.h
index 7778b924..c33a7c39 100644
--- a/include/base/util.h
+++ b/include/base/util.h
@@ -17,15 +17,6 @@
* Rob McCool
*/
-/* Needed for various reentrant functions */
-#define DEF_CTIMEBUF 26
-#define DEF_ERRBUF 256
-#define DEF_PWBUF 256
-
-#ifndef BASE_BUFFER_H
-#include "buffer.h" /* filebuf for getline */
-#endif /* !BASE_BUFFER_H */
-
#ifndef PUBLIC_BASE_UTIL_H
#include "public/base/util.h"
#endif /* !PUBLIC_BASE_UTIL_H */
@@ -36,49 +27,8 @@
NSPR_BEGIN_EXTERN_C
-NSAPI_PUBLIC
-int INTutil_getline(filebuffer *buf, int lineno, int maxlen, char *l);
-
-NSAPI_PUBLIC char **INTutil_env_create(char **env, int n, int *pos);
-
-NSAPI_PUBLIC char *INTutil_env_str(char *name, char *value);
-
-NSAPI_PUBLIC void INTutil_env_replace(char **env, char *name, char *value);
-
-NSAPI_PUBLIC void INTutil_env_free(char **env);
-
-NSAPI_PUBLIC char **INTutil_env_copy(char **src, char **dst);
-
-NSAPI_PUBLIC char *INTutil_env_find(char **env, char *name);
-
NSAPI_PUBLIC char *INTutil_hostname(void);
-NSAPI_PUBLIC int INTutil_chdir2path(char *path);
-
-NSAPI_PUBLIC int INTutil_is_mozilla(char *ua, char *major, char *minor);
-
-NSAPI_PUBLIC int INTutil_is_url(char *url);
-
-NSAPI_PUBLIC int INTutil_later_than(struct tm *lms, char *ims);
-
-NSAPI_PUBLIC int INTutil_time_equal(struct tm *lms, char *ims);
-
-NSAPI_PUBLIC int INTutil_str_time_equal(char *t1, char *t2);
-
-NSAPI_PUBLIC int INTutil_uri_is_evil(char *t);
-
-NSAPI_PUBLIC void INTutil_uri_parse(char *uri);
-
-NSAPI_PUBLIC void INTutil_uri_unescape(char *s);
-
-NSAPI_PUBLIC char *INTutil_uri_escape(char *d, char *s);
-
-NSAPI_PUBLIC char *INTutil_url_escape(char *d, char *s);
-
-NSAPI_PUBLIC char *INTutil_sh_escape(char *s);
-
-NSAPI_PUBLIC int INTutil_mime_separator(char *sep);
-
NSAPI_PUBLIC int INTutil_itoa(int i, char *a);
NSAPI_PUBLIC
@@ -93,18 +43,8 @@ NSAPI_PUBLIC int INTutil_snprintf(char *s, int n, const char *fmt, ...);
NSAPI_PUBLIC int INTutil_strftime(char *s, const char *format, const struct tm *t);
-NSAPI_PUBLIC char *INTutil_strtok(char *s1, const char *s2, char **lasts);
-
NSAPI_PUBLIC struct tm *INTutil_localtime(const time_t *clock, struct tm *res);
-NSAPI_PUBLIC char *INTutil_ctime(const time_t *clock, char *buf, int buflen);
-
-NSAPI_PUBLIC char *INTutil_strerror(int errnum, char *msg, int buflen);
-
-NSAPI_PUBLIC struct tm *INTutil_gmtime(const time_t *clock, struct tm *res);
-
-NSAPI_PUBLIC char *INTutil_asctime(const struct tm *tm,char *buf, int buflen);
-
#ifdef NEED_STRCASECMP
NSAPI_PUBLIC int INTutil_strcasecmp(CASECMPARG_T char *one, CASECMPARG_T char *two);
#endif /* NEED_STRCASECMP */
@@ -115,56 +55,9 @@ NSAPI_PUBLIC int INTutil_strncasecmp(CASECMPARG_T char *one, CASECMPARG_T char *
/* --- End common function prototypes --- */
-/* --- Begin Unix-only function prototypes --- */
-
-#ifdef XP_UNIX
-
-NSAPI_PUBLIC int INTutil_can_exec(struct stat *finfo, uid_t uid, gid_t gid);
-
-NSAPI_PUBLIC
-struct passwd *INTutil_getpwnam(const char *name, struct passwd *result,
- char *buffer, int buflen);
-
-NSAPI_PUBLIC pid_t INTutil_waitpid(pid_t pid, int *statptr, int options);
-
-#endif /* XP_UNIX */
-
-/* --- End Unix-only function prototypes --- */
-
-/* --- Begin Windows-only function prototypes --- */
-
-#ifdef XP_WIN32
-
-NSAPI_PUBLIC
-VOID INTutil_delete_directory(char *FileName, BOOL delete_directory);
-
-#endif /* XP_WIN32 */
-
-/* --- End Windows-only function prototypes --- */
-
NSPR_END_EXTERN_C
-#define util_getline INTutil_getline
-#define util_env_create INTutil_env_create
-#define util_env_str INTutil_env_str
-#define util_env_replace INTutil_env_replace
-#define util_env_free INTutil_env_free
-#define util_env_copy INTutil_env_copy
-#define util_env_find INTutil_env_find
#define util_hostname INTutil_hostname
-#define util_chdir2path INTutil_chdir2path
-#define util_is_mozilla INTutil_is_mozilla
-#define util_is_url INTutil_is_url
-#define util_later_than INTutil_later_than
-#define util_time_equal INTutil_time_equal
-#define util_str_time_equal INTutil_str_time_equal
-#define util_uri_is_evil INTutil_uri_is_evil
-#define util_uri_parse INTutil_uri_parse
-#define util_uri_unescape INTutil_uri_unescape
-#define util_uri_escape INTutil_uri_escape
-#define util_url_escape INTutil_url_escape
-#define util_sh_escape INTutil_sh_escape
-#define util_mime_separator INTutil_mime_separator
#define util_itoa INTutil_itoa
#define util_vsprintf INTutil_vsprintf
#define util_sprintf INTutil_sprintf
@@ -173,22 +66,7 @@ NSPR_END_EXTERN_C
#define util_strftime INTutil_strftime
#define util_strcasecmp INTutil_strcasecmp
#define util_strncasecmp INTutil_strncasecmp
-#define util_strtok INTutil_strtok
#define util_localtime INTutil_localtime
-#define util_ctime INTutil_ctime
-#define util_strerror INTutil_strerror
-#define util_gmtime INTutil_gmtime
-#define util_asctime INTutil_asctime
-
-#ifdef XP_UNIX
-#define util_can_exec INTutil_can_exec
-#define util_getpwnam INTutil_getpwnam
-#define util_waitpid INTutil_waitpid
-#endif /* XP_UNIX */
-
-#ifdef XP_WIN32
-#define util_delete_directory INTutil_delete_directory
-#endif /* XP_WIN32 */
#ifdef NEED_STRCASECMP
#define util_strcasecmp INTutil_strcasecmp
@@ -207,4 +85,3 @@ NSPR_END_EXTERN_C
#endif /* INTNSAPI */
#endif /* !BASE_UTIL_H */
-
diff --git a/include/libaccess/acl.h b/include/libaccess/acl.h
index 88ac07f4..2429a426 100644
--- a/include/libaccess/acl.h
+++ b/include/libaccess/acl.h
@@ -12,7 +12,6 @@
#include <netsite.h>
#include <base/pool.h>
-#include <base/pblock.h>
#include <base/plist.h>
#include <libaccess/nserror.h>
diff --git a/include/libaccess/las.h b/include/libaccess/las.h
index 252e3619..c678486f 100644
--- a/include/libaccess/las.h
+++ b/include/libaccess/las.h
@@ -15,7 +15,6 @@
#include <plhash.h>
#include <prclist.h>
-#include <base/pblock.h>
#include <base/plist.h>
#include <libaccess/nserror.h>
#include <libaccess/acl.h>
diff --git a/include/libadmin/libadmin.h b/include/libadmin/libadmin.h
index 8fdd4fa2..713fa663 100644
--- a/include/libadmin/libadmin.h
+++ b/include/libadmin/libadmin.h
@@ -19,9 +19,6 @@
#include "base/systhr.h"
#include "base/util.h"
-#include "frame/objset.h"
-#include "frame/req.h"
-
#ifdef XP_UNIX
#include <unistd.h>
#else /* XP_WIN32 */
@@ -34,151 +31,8 @@
#define NSPR_INIT(Program) (PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 8))
-#undef howmany
-
-#define ADM_CONF "admin.conf"
-#define MAGNUS_CONF "magnus.conf"
-#define OBJ_DATABASE "obj.conf"
-#define MIME_TYPES "mime.types"
-#define NSADMIN_CONF "ns-admin.conf"
-#define CERT_LOG "cert.log"
-
-#define SERVER_KEY_NAME "Server-Key"
-#define SERVER_CERT_NAME "Server-Cert"
-
-#define DBPW_USER "admin"
-#define DB_BAD_INPUT_CHARS "<>\""
-#define AUTHDB_ACL_FAIL -1
-#define AUTHDB_ACL_ODD_ACL -2
-#define AUTHDB_ACL_NOT_FOUND -3
-
-#define ACLNAME_READ_COOKIE "formgen-READ-ACL"
-#define ACLNAME_WRITE_COOKIE "formgen-WRITE-ACL"
-
-#define USERNAME_KEYWORD "USERNAME"
-
-typedef struct authInfo_s authInfo_t;
-struct authInfo_s {
- char *type;
- char *db_path;
- char *prompt;
-};
-
-/* Not defined in any nspr header file, why? */
-PRNetAddr *PR_CreateNetAddr(int PR_IpAddrNull, PRUint16 port);
-
NSPR_BEGIN_EXTERN_C
-NSAPI_PUBLIC char *get_ip_and_mask(char *candidate);
-NSAPI_PUBLIC int groupOrUser(char *dbname, char *name,
- int *is_user, int *is_group);
-NSAPI_PUBLIC int is_readacl(char *name);
-NSAPI_PUBLIC int is_writeacl(char *name);
-NSAPI_PUBLIC char *get_acl_file(void); /* Full path to file used by server. */
-NSAPI_PUBLIC char *get_workacl_file(void); /* Full path to file updated by ACL forms. */
-NSAPI_PUBLIC int get_acl_names(char **readaclname,
- char **writeaclname, char *dir);
-NSAPI_PUBLIC int get_acl_info(char *acl_file, char *acl_name,
- void **acl_context, char ***hosts,
- authInfo_t **authinfo,
- char ***users, char ***userhosts,
- int *fdefaultallow);
-NSAPI_PUBLIC int set_acl_info(char *acl_file, char *acl_name, int prefix,
- void **pacl, char **rights,
- char **hosts, authInfo_t *authinfo,
- char **users, char **userhosts,
- int fdefaultallow);
-NSAPI_PUBLIC int delete_acl_by_name(char *acl_file, char *acl_name);
-
-NSAPI_PUBLIC int str_flag_to_int(char *str_flag);
-NSAPI_PUBLIC int admin_is_ipaddr(char *p);
-NSAPI_PUBLIC void get_hostnames_and_ipaddrs(char **hosts,
- char **hostnames, char **ipaddrs);
-NSAPI_PUBLIC void load_host_array(char ***hosts,
- char *hostnames, char *ipaddrs);
-NSAPI_PUBLIC void load_users_array(char ***users,
- char *usernames, char *groups);
-NSAPI_PUBLIC void get_users_and_groups(char **users, char **usernames,
- char **groups, char *dbname);
-NSAPI_PUBLIC char * str_unquote(char * str);
-
-extern NSAPI_PUBLIC char *acl_read_rights[];
-extern NSAPI_PUBLIC char *acl_write_rights[];
-
-#ifdef USE_ADMSERV
-#define CONFDIR(x) get_conf_dir(x)
-#define ACLDIR(x) get_acl_dir(x)
-#define COMMDEST(x) get_commit_dest(x)
-#define SERVER_NAMES getenv("SERVER_NAMES")
-#define ADMCONFDIR getenv("ADMSERV_ROOT")
-#else
-#define ACLDIR(x) "../../httpacl/"
-#define CONFDIR(x) "../config/"
-#define ADMCONFDIR "../config/"
-#endif
-
-#ifdef XP_UNIX
-#define FILE_PATHSEP '/'
-#define OPEN_MODE "r"
-#define QUOTE ""
-#define CONVERT_TO_NATIVE_FS(Filename)
-#define CONVERT_TO_HTTP_FORMAT(Filename)
-#define WSACleanup()
-
-#undef GET_QUERY_STRING
-#define GET_QUERY_STRING() (getenv("QUERY_STRING"))
-#define NOT_ABSOLUTE_PATH(str) (str[0] != '/')
-#define CREATE_DIRECTORY(Directory)
-#define FILE_LOCK_PATH (get_flock_path())
-
-#else /* XP_WIN32 */
-#define verify_adm_dbm
-#define add_user_dbm
-#define find_user_dbm
-#define list_users_dbm
-#define modify_user_dbm
-#define remove_user_dbm
-#define dbm_open
-#define dbm_close
-#define dbm_store
-#define lstat stat
-#define popen _popen
-#define pclose _pclose
-
-#define CONVERT_TO_NATIVE_FS(Filename) \
-{ \
- register char *s; \
- if (Filename) \
- for (s = Filename; *s; s++) \
- if ( *s == '/') \
- *s = '\\'; \
-}
-#define CONVERT_TO_HTTP_FORMAT(Filename) \
-{ \
- register char *s; \
- if (Filename) \
- for (s = Filename; *s; s++) \
- if ( *s == '\\') \
- *s = '/'; \
-}
-#define FILE_PATHSEP '/'
-#define OPEN_MODE "r+b"
-#define QUOTE "\""
-
-
-#undef GET_QUERY_STRING
-#define GET_QUERY_STRING() (GetQueryNT())
-/* Defined in util.c */
-NSAPI_PUBLIC char *GetQueryNT(void);
-#define NOT_ABSOLUTE_PATH(str) \
- ((str[0] != '/') && (str[0] != '\\') && (str[2] != '/') && (str[2] != '\\'))
-
-#define CREATE_DIRECTORY(Directory) CreateDirectory(Directory, NULL)
-#define FILE_LOCK_PATH (get_flock_path())
-
-#endif /* XP_WIN32 */
-
-
/* error types */
#define FILE_ERROR 0
#define MEMORY_ERROR 1
@@ -196,220 +50,19 @@ NSAPI_PUBLIC char *GetQueryNT(void);
/* The default error type (in case something goes wrong */
#define DEFAULT_ERROR 3
-/* The change types for admin logging */
-#define TO_MAGNUS "magnus.conf"
-#define TO_OBJCONF "obj.conf"
-#define TO_ACLFILE "generated.acl"
-#define TO_STATUS "status"
-#define TO_ADMIN "admserv"
-#define TO_USERDB "userdb"
-#define TO_SEC "security"
-#define TO_BACKUP "backup"
-#define TO_CACHE "cache"
-#define TO_BUCONF "bu.conf"
-#define TO_LDAP "ldap"
-
-/* The indexes for conf file backup purposes */
-#define BK_MAGNUS 0
-#define BK_OBJ 1
-#define BK_MIMETYPES 2
-#define BK_BU 3
-#define BK_ACLFILE 4
-
-/* The extension for backup files to use. Emacs weenies like "%s.~%d~" */
-/* But real vi men like this one */
-#define BACKUP_EXT "%s.v%d"
-/* Need also a way to identify the backup files when we're doing an ls */
-#define BACKUP_SHORT ".v"
-
-/* User database defines */
-#define IS_A_DBM 1
-#define IS_A_NCSA 2
-
-#define REMOVE_FROM_DB "-REMOVE_THIS_USER"
-#define DB_INC "inc"
-#define NCSA_EXT "pwf"
-
-/* We now use the client DB libs, so they're all '.db' with no second file. */
-#define DBM_EXT_1 "db"
-#define DBM_EXT_2 NULL
-
-/* Define the functions in a central place so that obj.conf viewer can get
- * to them */
-#ifdef MCC_PROXY
-#define BASIC_NCSA_FN "proxy-auth"
-#define REQUIRE_AUTH_FN "require-proxy-auth"
-#define CHECK_ACL_FN "check-acl"
-#else
-#define BASIC_NCSA_FN "basic-ncsa"
-#define REQUIRE_AUTH_FN "require-auth"
-#define CHECK_ACL_FN "check-acl"
-#endif
-
-
-/* Frame window names. */
-#define INDEX_NAME "index"
-#define MESSAGE_NAME "msgs"
-#define TOP_NAME "tabs"
-#define BOTTOM_NAME "category"
-#define OPTIONS_NAME "options"
-#define CONTENT_NAME "content"
-#define COPY_NAME "copy"
-
#define INFO_IDX_NAME "infowin"
#define INFO_TOPIC_NAME "infotopic"
#define HELP_WIN_OPTIONS "'resizable=1,width=500,height=500'"
-
-/* pblock types, either it's a ppath, or it's a name. */
-#define PB_NAME 1
-#define PB_PATH 2
-
-/* Resource types */
-#define NAME "name"
-#define FILE_OR_DIR "path"
-#define TEMPLATE "tmpl"
-#define WILDCARD "wild"
-
-/* A really big form line */
-#define BIG_LINE 1024
-
-/* Max size for a pathname */
-#ifndef PATH_MAX
-#define PATH_MAX 256
-#endif
-
-
-/* Boundary string for uploading / downloading config files. */
-#define CF_BOUNDARY "--Config_File_Boundary--"
-#define CF_NEWCONFIG "--NewConfigFile:"
-#define CF_MTIME "--LastMod:"
-#define CF_ERRSTR "--Error: "
-#define CFTRANS_BIN "bin/cftrans"
-#define CF_REMOTE_URL "#RemoteUrl "
-
-#define HTML_ERRCOLOR "#AA0000"
-
-#define MOCHA_NAME "JavaScript"
-
-/* Internationalization stuffs. If we define MSG_RETURN, then create a
- * function which will return a string of the given identifier. If we
- * define MSG_DBM, it creates a function you can call to create the DBM
- * properly. Finally, if nothing else, it will create a mapping from
- * the string's name to its proper ID number. */
-/* store_msg is in mkdbm.c, in the admin stuff */
-/* get_msg.c */
-NSAPI_PUBLIC char *get_msg(int msgid);
-NSAPI_PUBLIC void store_msg(int msgid, char *msg);
-
-#if defined(MSG_RETURN)
-#define BGN_MSG(arg) static char *(arg)(int i) { switch(i) {
-#define STR(name, id, msg) case (id): return(msg);
-#define END_MSG(arg) } return 0; }
-
-#elif defined(MSG_DBM)
-#define BGN_MSG(arg) void (arg)() {
-#define STR(name, id, msg) store_msg(id, msg);
-#define END_MSG(arg) }
-
-#else
-#define BGN_MSG(arg) enum {
-#define STR(name, id, msg) name=id,
-#define END_MSG(arg) arg=0 };
-#endif
-
-/* The files where the messages are kept. */
-#define LA_BASE 1000
-#define LA_BASE_END 1999
-#define LA_DBM_LOC "./la_msgs"
-
-#define HADM_BASE 2000
-#define HADM_BASE_END 5999
-#define HADM_DBM_LOC "./hadm_msgs"
-
-#include "la_msgs.i"
-#include "hadm_msgs.i"
-
/* Initialize libadmin. Should be called by EVERY CGI. */
/* util.c */
NSAPI_PUBLIC int ADM_Init(void);
-/* Open a .html file to parse it. Returns a file ptr (simple fn, really) */
-/* error one doesn't call report_error so we lose the infinite loop prob */
-/* form_get.c */
-NSAPI_PUBLIC FILE *open_html_file(char *filename);
-NSAPI_PUBLIC FILE *open_error_file(char *filename);
-
-/* Same as open_html_file, but opens the html file from the specified */
-/* language subdirectory, if available, else from the default language */
-/* subdirectory. */
-/* form_get.c */
-NSAPI_PUBLIC FILE* open_html_file_lang(char* filename,char* language);
-
-/* Parse an HTML file and return it to the client. */
-/* form_get.c */
-NSAPI_PUBLIC void return_html_file(char *filename);
-
-/* Parse an HTML file, return it to the client, but don't set the referer */
-/* form_get.c */
-NSAPI_PUBLIC void return_html_noref(char *filename);
-
-/* Output an input of an arbitrary type. Not really that flexible. */
-/* form_get.c */
-NSAPI_PUBLIC void output_input(char *type, char *name, char *value, char *other);
-
-/* Get the next line from the file. Returns 0 when EOF is encountered. */
-/* form_get.c */
-NSAPI_PUBLIC int next_html_line(FILE *f, char *line);
-
-
-
-/* Get the referer from the config file */
-/* referer.c */
-NSAPI_PUBLIC char *get_referer(char **config);
-
-/* Set the referer and write out the config file */
-/* referer.c */
-NSAPI_PUBLIC void set_referer(char **config);
-
-/* Sets the referer to a script that's not you. If new_ref is an absolute ref,
- * it will cat that with SERVER_URL; if it's not, it will replace the
- * current script name with new_ref. */
-/* referer.c */
-NSAPI_PUBLIC void set_fake_referer(char *new_ref);
-
-/* Redirect the person to the Referer, or give a short error message */
-/* referer.c */
-NSAPI_PUBLIC void redirect_to_referer(char *addition);
-
-/* Opens the referer in the content window using JavaScript */
-/* referer.c */
-NSAPI_PUBLIC void js_open_referer(void);
-
-/* Redirect to the given script. Assumes that SCRIPT_NAME is set to a script */
-/* referer.c */
-NSAPI_PUBLIC void redirect_to_script(char *script);
-
-
-/* Filter a line using templates, and spit the results to stdout */
-/* template.c */
-NSAPI_PUBLIC int parse_line(char *line, char **input);
-
/* Since everyone seems to be doing this independently, at least centralize
the code. Useful for onClicks and automatic help */
NSAPI_PUBLIC char *helpJavaScript();
NSAPI_PUBLIC char *helpJavaScriptForTopic( char *topic );
-/* Check to see if a directive the parser didn't know about is a given
- * directive */
-/* template.c */
-NSAPI_PUBLIC int directive_is(char *target, char *directive);
-
-/* Export the pageheader because sec-icrt uses it --MLM */
-/* template.c */
-NSAPI_PUBLIC void pageheader(char **vars, char **config);
-
-
/* Report an error. Takes 3 args: 1. Category of error
* 2. Some more specific category info (opt)
* 3. A short explanation of the error.
@@ -421,701 +74,6 @@ NSAPI_PUBLIC void output_alert(int type, char *info, char *details, int wait);
NSAPI_PUBLIC void report_error(int type, char *info, char *details);
NSAPI_PUBLIC void report_warning(int type, char *info, char *details);
-/* Read the administrative config from the server admin root */
-/* Mult adm gets a particular adm config (for multiple server config) */
-/* admconf.c */
-NSAPI_PUBLIC char **get_adm_config(void);
-NSAPI_PUBLIC char **get_mult_adm_config(int whichone);
-
-/* Write the administrative config back to the file */
-/* Mult adm saves a particular adm config (for multiple server config) */
-/* admconf.c */
-NSAPI_PUBLIC int write_adm_config(char **config);
-NSAPI_PUBLIC int write_mult_adm_config(int whichone, char **config);
-
-/* An additional level of abstraction for resource grabbing. Gets the current
- * resource from the config set. */
-/* admconf.c */
-NSAPI_PUBLIC char *get_current_resource(char **config);
-
-/* Gets the string of the current resource type */
-/* admconf.c */
-NSAPI_PUBLIC char *get_current_typestr(char **config);
-
-/* Gets the pblock type of the current resource from the config set. */
-/* admconf.c */
-NSAPI_PUBLIC int get_current_restype(char **config);
-
-/* Sets the current resource given its type and its data. */
-/* admconf.c */
-NSAPI_PUBLIC void set_current_resource(char **config, char *nrestype, char *nres);
-
-
-/* Get the value of a particular variable in magnus.conf */
-/* get_num_mag_var: get only a particular server's value for it */
-/* magconf.c */
-NSAPI_PUBLIC char *get_mag_var(char *var);
-NSAPI_PUBLIC char *get_num_mag_var(int whichsrv, char *var);
-
-/* Set the value of a particular variable in magnus.conf */
-/* magconf.c */
-NSAPI_PUBLIC void set_mag_var(char *name, char *value);
-
-/* Get the value of a particular variable in cert.log */
-NSAPI_PUBLIC char *get_cert_var(char *var);
-NSAPI_PUBLIC char *get_num_cert_var(int whichsrv, char *var);
-
-/* Set the value of a particular variable in cert.log */
-NSAPI_PUBLIC void set_cert_var(char *name, char *value);
-
-/* Get the value of a particular variable in ns-admin.conf */
-/* admserv.c */
-NSAPI_PUBLIC char *get_nsadm_var(char *var);
-NSAPI_PUBLIC char **scan_server_instance(char *, char **);
-
-
-/* Set the value of a particular variable in ns-admin.conf */
-/* admserv.c */
-NSAPI_PUBLIC void set_nsadm_var(char *name, char *value);
-
-/* List all of the installed servers on the admin server. */
-/* Takes 1 arg (string list of identifiers for servers, such as */
-/* httpd, https, proxy, news) */
-/* admserv.c */
-NSAPI_PUBLIC char **list_installed_servers(char **namelist);
-
-/* Reads in the list of servers installed on this machine. Fills in
- * two string lists (one of names, one of descriptions.) *servlist and
- * *desclist will be allocated for you. */
-NSAPI_PUBLIC void read_server_lst(char ***namelist, char ***desclist);
-NSAPI_PUBLIC void read_keyalias_lst(char ***namelist);
-NSAPI_PUBLIC void read_certalias_lst(char ***namelist);
-NSAPI_PUBLIC void get_key_cert_files(char *alias, char **keyfile, char **certfile);
-NSAPI_PUBLIC void display_aliases(char *keyfile, char **aliaslist);
-
-/* Create a new object (i.e. empty "<Object name=foo></Object>" in the
- * config files. */
-/* objconf.c */
-NSAPI_PUBLIC void add_object(int objtype, char *id);
-
-/* Destroy a given object and all its contents. */
-/* objconf.c */
-NSAPI_PUBLIC void delete_object(int objtype, char *id);
-
-/* Grab a given object */
-/* objconf.c */
-NSAPI_PUBLIC httpd_object *grab_object(int objtype, char *id);
-
-/* List all objects of the given type. */
-/* objconf.c */
-NSAPI_PUBLIC char **list_objects(int objtype);
-
-/* Count how many objects there are of the given type. */
-/* objconf.c */
-NSAPI_PUBLIC int count_objects(int objtype);
-
-/* Return the total number of objects in the configuration. */
-/* objconf.c */
-NSAPI_PUBLIC int total_object_count(void);
-
-/* Find a particular instance of a parameter in a particular object and a
- * particular directive. id_type and id_value are optional parameter
- * specifiers if you want not just the first instance of a function.
- */
-/* objconf.c */
-NSAPI_PUBLIC pblock *grab_pblock(int objtype, char *object, char *directive,
- char *function, char *id_type, char *id_value);
-
-/* Grab a pblock, but don't use the "fn" parameter. Instead of "fn",
- * use the string "fname" to identify the block. */
-/* objconf.c */
-NSAPI_PUBLIC pblock *grab_pblock_byid(int objtype, char *object, char *directive,
- char *fname, char *function, char *id_type,
- char *id_value);
-
-/* Add a new parameter block into the given object, of the given directive
- * type, using the given function, and with the list of parameters given
- * (should be called like this:)
- *
- * add_pblock(PB_NAME, "default", "NameTrans", "pfx2dir",
- * 4, "from", "/foo", "dir", "/bar");
- * Returns the new pblock for posterity
- */
-/* objconf.c */
-NSAPI_PUBLIC pblock *add_pblock(int objtype, char *object, char *directive, char *function,
- int nargs, ...);
-
-/* Create a new pblock, but don't save it or anything. */
-/* objconf.c */
-NSAPI_PUBLIC pblock *new_pblock(char *function, int nargs, ...);
-
-/* Destroy a paramter block. Same call patterns as grab_pblock. */
-/* objconf.c */
-NSAPI_PUBLIC void delete_pblock(int objtype, char *object, char *directive, char *function,
- char *id_type, char *id_value);
-
-/* Set the values of a given pblock to these new values. Arg passing is same
- * as for add_pblock()
- */
-/* objconf.c */
-NSAPI_PUBLIC void set_pblock_vals(pblock *pb, int nargs, ...);
-
-/* List all the pblocks you can find with the given object, directive, and
- * function. Returns a pointer to a list of pblock *'s just like a strlist.
- */
-/* objconf.c */
-NSAPI_PUBLIC pblock **list_pblocks(int objtype, char *object, char *direct, char *function);
-
-/* Get the client pblock from a given directive, specified as above in
- * grab_pblock.
- */
-/* objconf.c */
-NSAPI_PUBLIC pblock *grab_client(int objtype, char *object, char *directive,
- char *function, char *id_type, char *id_value);
-
-/* Add a client pblock to a given object. If you have a pblock, send it
- * in oldpb, if not, send NULL and it will create one with a
- * "PathCheck fn=deny-existence" directive for you.
- *
- * Send the nargs just like above; assumedly there's only two: client and ip.
- */
-/* objconf.c */
-NSAPI_PUBLIC void add_client(int objtype, char *object, char *direct,
- pblock *oldpb, int nargs, ...);
-
-/* List all the clients you can find with the given object, directive, and
- * function. Returns a pointer to a list of directive *'s (struct with
- * two pblock ptrs: param and client)
- */
-/* objconf.c */
-NSAPI_PUBLIC directive **list_clients(int objtype, char *object, char *direct,
- char *function);
-
-/* Delete a client, as identified by directive, path=blah in param part,
- * dns=blah in client part, and ip=blah in client part. */
-/* objconf.c */
-NSAPI_PUBLIC void delete_client(int objtype, char *object, char *direct, char *path,
- char *dns, char *ip);
-
-/* Gets the directive associated with a given pblock. */
-/* objconf.c */
-NSAPI_PUBLIC directive *get_pb_directive(int objtype, char *object,
- char *directive, pblock *pb);
-NSAPI_PUBLIC directive *get_cl_directive(int objtype, char *object,
- char *directive, pblock *cl);
-
-/* Delete a pblock by its pointer. (Note: I should have done this function
- * long ago. Grr. */
-/* objconf.c */
-NSAPI_PUBLIC void delete_pblock_byptr(int objtype, char *object,
- char *directive, pblock *pb);
-
-/* Init directives are now in obj.conf, deal with them there. */
-/* ---------------------------------------------------------- */
-
-/* Get the value of an init variable in pblock form. */
-/* objconf.c */
-NSAPI_PUBLIC pblock *get_mag_init(char *fn);
-
-/* Get only a particular mag init */
-/* objconf.c */
-NSAPI_PUBLIC pblock *get_specific_mag_init(char *fn, char *name, char *value);
-
-/* Get all instances of the same Init function as an array of pblock ptrs */
-/* objconf.c */
-NSAPI_PUBLIC pblock **get_all_mag_inits(char *fn);
-
-/* Set the value of an init variable. If it exists, modify existing, if not,
- * create it.
- * If the key_nam and key_val are set, also the parameter named key_val
- * will be used when matching against the specific directive. This will
- * allow multiple calls to the same Init function, with a specific parameter
- * value together with the function name uniquely identifying the specific
- * Init function call.
- */
-/* objconf.c */
-NSAPI_PUBLIC void set_mag_init(char *fn, char *key_nam, char *key_val, int nargs, ...);
-
-/* Delete an instance of an Init variable. */
-/* objconf.c */
-NSAPI_PUBLIC void delete_mag_init(char *fn);
-NSAPI_PUBLIC void delete_specific_mag_init(char *fn, char *key_nam, char *key_val);
-
-
-/* Commit all outstanding config stuff from admin directory to the actual
- * server. Does not restart the server. */
-/* Argument authlist is a string list of authorization strings
- * (username:password) to send to remote servers (or NULL if it is a
- * local machine.) */
-/* commit.c */
-NSAPI_PUBLIC int do_commit(char **authlist);
-
-/* Back out from outstanding changes. Authlist same as above. */
-/* commit.c */
-NSAPI_PUBLIC int do_undo(char **authlist);
-
-/* Prints outstanding changes to server to stdout. */
-/* commit.c */
-NSAPI_PUBLIC void output_uncommitted(void);
-
-/* Returns a flag saying whether there are outstanding changes that need to
- * be committed. If you've already read in admin.conf, send a pointer to
- * it here. Or else send NULL, and it'll read it in. */
-/* commit.c */
-NSAPI_PUBLIC int needs_commit(char **config);
-
-/* Sets the flag to say whether we need to commit or not. 1 means "yes,
- * we need to commit." 0 means "No, I just committed the changes."
- * whichsrv is which server to set the bit in (if you're configuring
- * multiple servers.) */
-/* commit.c */
-NSAPI_PUBLIC void set_commit(int whichsrv, int needscommit);
-
-/* Returns an int for which backup number to use. 0=magnus, 1=obj*/
-/* index is which server among the list you want to use (mult config) */
-/* commit.c */
-NSAPI_PUBLIC int get_bknum(int which, int index);
-
-/* Sets the current backup number. */
-/* index is which server among the list you want to use. */
-/* commit.c */
-NSAPI_PUBLIC void set_bknum(int num, int which, int index);
-
-/* Backs up given file, using number in admconf. */
-/* commit.c */
-NSAPI_PUBLIC void conf_backup(char *whichfile, int index, int whichsrv);
-
-/* Gets the last known modification time for a config file.
- * When you do a commit, this is set to the mod time after you do
- * the commit. Later, when you want to see if the file you're about
- * to upload has changed, you check this value. */
-/* commit.c */
-NSAPI_PUBLIC time_t get_org_mtime(int whichsrv, int whichfile);
-
-/* Gets and sets the three modification times as they were stored in
- * admin.conf. */
-/* Useful in remote transactions. */
-/* commit.c */
-NSAPI_PUBLIC char *get_mtime_str(int whichsrv);
-NSAPI_PUBLIC void set_mtime_str(int whichsrv, char *str);
-
-/* Sets that same value (see above) */
-/* commit.c */
-NSAPI_PUBLIC void set_org_mtime(int whichsrv, int whichfile, time_t mtime);
-
-/* Set the modification times for *all* of the files needing this check,
- * assuming admin.conf got lost or hasn't been created yet. */
-/* When it doubt, set to zero. */
-NSAPI_PUBLIC void set_all_org_mtimes(void);
-
-
-/* Create an internal list of the servers which are being changed. */
-/* Returns the total number of servers in the list. */
-/* multconf.c */
-NSAPI_PUBLIC int make_conflist(void);
-
-/* Don't use this function. It's a grotesque hack. It's used by the admin
- * page to fake the on/off buttons for the servers. */
-/* multconf.c */
-NSAPI_PUBLIC int fake_conflist(char *fakename);
-
-/* Get the current admin config directory. Takes an int to say which one
- * (of the list of servers to configure) you're interested in, so you can
- * for loop through them. Always use 0 if you want the first one. */
-/* multconf.c */
-NSAPI_PUBLIC char *get_conf_dir(int whichone);
-NSAPI_PUBLIC char *get_alias_dir(void);
-NSAPI_PUBLIC void read_alias_files(char ***aliasfiles);
-NSAPI_PUBLIC void read_aliases(char ***aliaslist);
-
-/* Return 1 if this server number whichone is a not on the local machine. */
-/* multconf.c */
-NSAPI_PUBLIC int is_remote_server(int whichone);
-
-/* Return 1 if we are configuring the admin server. */
-/* multconf.c */
-NSAPI_PUBLIC int is_admserv(void);
-
-/* Return 1 if there is a remote server in the list of servers to config. */
-/* Return 0 if not. */
-/* multconf.c */
-NSAPI_PUBLIC int remote_server_inlist(void);
-
-/* Get the ultimate destination for a particular config file set. Same
- * arg as above function. */
-/* multconf.c */
-NSAPI_PUBLIC char *get_commit_dest(int whichone);
-
-/* Get the name of the indicated server (for logging purposes etc.) */
-/* Send -1 for a string with all of them. */
-/* multconf.c */
-NSAPI_PUBLIC char *get_srvname(int whichsrv);
-
-
-/* Some simple buffering tools */
-/* Keeps a buffer for network info, and a buffer for returning lines */
-/* httpcon.c */
-typedef struct bufstruct {
- char *buf;
- int bufsize;
- int curpos;
- int inbuf;
- char *hbuf;
- int hbufsize;
- int hbufpos;
-} bufstruct;
-
-/* Make a new buffer. Flush the rest of a buffer (leaving the contents
- * unread. Delete a buffer structure. */
-/* httpcon.c */
-NSAPI_PUBLIC bufstruct *new_buffer(int bufsize);
-NSAPI_PUBLIC void flush_buffer(bufstruct *buf);
-NSAPI_PUBLIC void delete_buffer(bufstruct *buf);
-
-/* stdio replacement for a network connection (so shoot me) */
-/* httpcon.c */
-NSAPI_PUBLIC char *get_line_from_fd(PRFileDesc *fd, bufstruct *buf);
-
-/* send a line to a remote server (equivalent to write()) */
-/* httpcon.c */
-NSAPI_PUBLIC int send_line_to_fd(PRFileDesc *fd, char *line, int linesize);
-
-/* Decompose a URL into protocol, server, port, and URI. You needn't allocate
- * the strings you're passing, will be done for you. */
-/* httpcon.c */
-NSAPI_PUBLIC int decompose_url(char *url, char **protocol, char **server, unsigned int *port, char **uri);
-
-/* Take a status line "HTTP/1.0 200 OK" or some such and produce a protocol
- * status number. */
-/* httpcon.c */
-NSAPI_PUBLIC int parse_status_line(char *statusline);
-
-/* Returns whether the headers have now ended (with the line you give it) */
-/* httpcon.c */
-NSAPI_PUBLIC int is_end_of_headers(char *hline);
-
-/* Make an HTTP request to a given server, running on a given port,
- * with the given initial request. Returns a FD that can be used
- * to read / write to the connection. */
-/* Note: Reports status to stdout in HTML form. Bad? Perhaps... */
-/* httpcon.c */
-NSAPI_PUBLIC PRFileDesc *make_http_request(char *protocol, char *server, unsigned int port, char *request, int *errcode);
-
-/* Terminate an HTTP request session (see above) */
-/* httpcon.c */
-NSAPI_PUBLIC void end_http_request(PRFileDesc *req_socket);
-
-/* Verify that given server is an admin server. */
-NSAPI_PUBLIC int verify_is_admin(char *protocol, char *server, int port);
-
-
-/* Log a change in the verbose admin log. kind is a string representing
- * what kind of change it was (see #defines at top of file, such as MAGNUS_LOG)
- * Change is the text of the change, in printf format (so you can give args). */
-/* admlog.c */
-NSAPI_PUBLIC void log_change(char *kind, char *change, ...);
-
-/* Get a pretty string for the current resource for logging. */
-/* admlog.c */
-NSAPI_PUBLIC char *log_curres(char **config);
-
-
-/* List all the user databases (actually, all files) in a given path into a
- * strlist. */
-/* userdb.c */
-NSAPI_PUBLIC char **list_user_dbs(char *fullpath);
-
-NSAPI_PUBLIC char **list_auth_dbs(char *fullpath);
-
-/* Output the 1.x database selector. Path is the path to the DB's, element is
- * the desired SELECT name, current is the one that should currently be
- * selected. */
-/* userdb.c */
-NSAPI_PUBLIC void output_db_selector(char *path, char *element, char *current);
-
-/* Output the 2.x database selector. Path is the path to the DB's, element is
- * the desired SELECT name, current is the one that should currently be
- * selected. */
-NSAPI_PUBLIC void output_authdb_selector(char *path, char *element, char *current);
-
-/* Sets which DB is considered current. */
-/* userdb.c */
-NSAPI_PUBLIC void set_current_db(char *current); /* obsolete 1.x */
-
-/* Sets which DB is considered current (2.x version). */
-NSAPI_PUBLIC void set_current_authdb(char *current);
-NSAPI_PUBLIC char *get_current_authdb(void);
-
-/* Detect the type of the given database. */
-/* WARNING: REMOVES THE EXTENSION!!! */
-/* userdb.c */
-NSAPI_PUBLIC int detect_db_type(char *db_name);
-
-/* Find a user within an NCSA database, and return */
-/* userdb.c */
-NSAPI_PUBLIC char *find_user_ncsa(char *db, char *user);
-
-/* Add a user to an NCSA style database */
-/* userdb.c */
-NSAPI_PUBLIC void add_user_ncsa(char *db, char *user, char *password, int enc);
-
-/* List all the users in an NCSA style database */
-/* userdb.c */
-NSAPI_PUBLIC char **list_users_ncsa(char *db);
-
-/* Modify a user in an NCSA style database */
-/* userdb.c */
-NSAPI_PUBLIC int modify_user_ncsa(char *db, char *user, char *pw);
-
-/* Verify the admin password, or die. Returns 1 if there is one, 0 if not */
-/* userdb.c */
-NSAPI_PUBLIC int verify_adm_ncsa(char *db, char *pw);
-
-/* Remove a user from an NCSA style database */
-/* userdb.c */
-NSAPI_PUBLIC int remove_user_ncsa(char *db, char *user);
-
-#ifdef XP_UNIX /* WIN32 has no DBM */
-/* Find a user within a DBM database, and return */
-/* userdb.c */
-char *find_user_dbm(char *db, char *user);
-
-/* Add a user to a DBM database */
-/* userdb.c */
-void add_user_dbm(char *db, char *user, char *password, int enc);
-
-/* List all the users in a DBM */
-/* userdb.c */
-char **list_users_dbm(char *db);
-
-/* Modify a user in a DBM database */
-/* userdb.c */
-int modify_user_dbm(char *db, char *user, char *pw);
-
-/* Verify the admin password, or die. Returns 1 if there is one, 0 if not */
-/* userdb.c */
-int verify_adm_dbm(char *db, char *pw);
-
-/* Remove a user from a DBM */
-/* userdb.c */
-int remove_user_dbm(char *db, char *user);
-
-#endif /* WIN32 */
-
-
-/* Checks to see if server is running. Doesn't work over network. Returns 0
- * if it's down, 1 if it's up, -1 if an error occurred. */
-/* pcontrol.c */
-NSAPI_PUBLIC int is_server_running(int whichsrv);
-
-/* Starts up the HTTP server. Puts the errors into /tmp/startup.[pid] */
-/* Returns 0 on success, 1 on failure */
-/* Restart restarts it, shutdown shuts it down */
-/* pcontrol.c */
-NSAPI_PUBLIC int startup_http(int, char*, char *);
-NSAPI_PUBLIC int restart_http(int, char*, char *);
-NSAPI_PUBLIC int shutdown_http(int, char*);
-
-/* As above, but for SNMP HTTP subagent */
-/* pcontrol.c */
-NSAPI_PUBLIC int startup_snmp();
-NSAPI_PUBLIC int restart_snmp();
-NSAPI_PUBLIC int shutdown_snmp();
-
-/* Performs the request rq, for server (in list) whichsrv, using auth as
- * auth info.
- *
- * successmsg is the prefix on lines that are returned from the remote
- * server that indicate success. */
-/* pcontrol.c */
-NSAPI_PUBLIC int perform_request(char *req, int whichsrv, char *auth, char *successmsg);
-
-/* Escapes a shell command for system() calls. NOTE: This string should
- * be large enough to handle expansion!!!! */
-/* util.c */
-NSAPI_PUBLIC void escape_for_shell(char *cmd);
-
-/* Lists all files in a directory. If dashA list .files except . and .. */
-/* util.c */
-NSAPI_PUBLIC char **list_directory(char *path, int dashA);
-
-/* Does a given file exist? */
-/* util.c */
-NSAPI_PUBLIC int file_exists(char *filename);
-
-/* What's the size of a given file? */
-/* util.c */
-NSAPI_PUBLIC int get_file_size(char *path);
-
-/* Create a directory path if it does not exist (mkdir -p) */
-/* util.c */
-NSAPI_PUBLIC int ADM_mkdir_p(char *dir, int mode);
-
-/* Copy a directory recursively. */
-/* util.c */
-NSAPI_PUBLIC int ADM_copy_directory(char *src_dir, char *dest_dir);
-
-/* Remove a directory recursively. Same as remove_directory except that
- filenames arent printed on stdout */
-/* util.c */
-NSAPI_PUBLIC void ADM_remove_directory(char *path);
-
-#ifdef XP_UNIX
-/* Obtain Unix SuiteSpot user/group information */
-/* util.c */
-NSAPI_PUBLIC int ADM_GetUXSSid(char *, char **, char **);
-#endif
-
-/* Return: LastModificationTime(f1) < LastModificationTime(f2) ? */
-/* util.c */
-NSAPI_PUBLIC int mtime_is_earlier(char *file1, char *file2);
-
-/* Return: the last mod time of fn */
-/* util.c */
-NSAPI_PUBLIC time_t get_mtime(char *fn);
-
-/* Does this string have all numbers? */
-/* util.c */
-NSAPI_PUBLIC int all_numbers(char *target);
-/* Valid floating point number? */
-NSAPI_PUBLIC int all_numbers_float(char *target);
-
-/* Get the [ServerRoot]/config directory. */
-/* whichone is which server you're interested in. */
-/* 0 if you want the first one.*/
-/* util.c */
-NSAPI_PUBLIC char *get_admcf_dir(int whichone);
-
-/* Get the admin server's [ServerRoot]/config directory */
-NSAPI_PUBLIC char *get_admservcf_dir(void);
-
-/* Get the admin/userdb directory. */
-/* util.c */
-NSAPI_PUBLIC char *get_userdb_dir(void);
-/* Get the V2.x admin/userdb directory. */
-/* util.c */
-NSAPI_PUBLIC char *get_authdb_dir(void);
-NSAPI_PUBLIC char *get_httpacl_dir(void);
-
-
-/* V2.x User admin functions. They take a full path of
- the directory where the databases live, and perform
- various operations on the databases. They open and
- close the DBM, so they can not be called when the
- database is already open. The output_xxx ones spit
- out various HTMLized admin data.
-*/
-NSAPI_PUBLIC int getfullname(char *dbname, char *user, char **fullname);
-NSAPI_PUBLIC int setfullname(char *dbname, char *user, char *fullname);
-NSAPI_PUBLIC int setpw(char *dbname, char *user, char *pwd);
-NSAPI_PUBLIC int setdbpw(char *dbname, char *pwd);
-NSAPI_PUBLIC int checkdbpw(char *dbname, char *pwd);
-NSAPI_PUBLIC int addusertogroup(char *dbname, char *user, char *group);
-NSAPI_PUBLIC int remuserfromgroup(char *dbname, char *user, char *group);
-NSAPI_PUBLIC int addgrouptogroup(char *dbname, char *memgroup, char *group);
-NSAPI_PUBLIC int remgroupfromgroup(char *dbname, char *memgroup, char *group);
-NSAPI_PUBLIC int output_users_list(char *line, char *userfilter);
-NSAPI_PUBLIC int output_groups_list(char *dbname, char *groupfilter);
-NSAPI_PUBLIC void output_group_membership(char *dbname, char *user);
-NSAPI_PUBLIC void output_nonmembership(char *dbname, char *user);
-NSAPI_PUBLIC void output_grpgroup_membership(char *dbname, char *group, char *filter);
-NSAPI_PUBLIC void output_user_membership(char *dbname, char *group, char *filter);
-NSAPI_PUBLIC void output_nongrpgroup_membership(char *dbname, char *group, char *filter);
-NSAPI_PUBLIC void output_nonuser_membership(char *dbname, char *group, char *filter);
-
-/* Set a user's login name */
-NSAPI_PUBLIC int setusername(char *db_path, char *user, char *newname);
-
-/* Output a selector box with name "name", an option "NONE" if none=1,
- * and make it a multiple selector box if multiple=1. If multiple != 1,
- * then make it a pulldown list if the number of groups is less than
- * SELECT_OVERFLOW. */
-/* If highlight is non-null, specifically highlight that entry. */
-/* If user is non-null, and it's a multiple box, correctly set the group
- * membership in the multiple list (Groups they're in are on, groups they're
- * not in are off. */
-/* If group_user is one, then the variable "user" refers to *group* members,
- * not *user* members. */
-/* If except is non-null, output all entries except the "except" item. */
-/* (note: this methodology is known as the "Garbage pail method", just
- * keep adding parameters till it does everything you want) MLM */
-#define SELECT_OVERFLOW 25
-NSAPI_PUBLIC void output_group_selector(char *db_path,
- int group_user, char *user,
- char *highlight, char *except,
- char *name, int none, int multiple);
-
-/* Same as above, except output a list of users, highlighting those in a
- * particular group. MLM */
-NSAPI_PUBLIC void output_user_selector(char *db_path, char *group,
- char *highlight, char *except,
- char *name, int none, int multiple);
-
-/* Take a char ** null terminated list of group names, and change a user's
- * memberships so those are the only groups he's in. MLM */
-NSAPI_PUBLIC void change_user_membership(char *db_path, char *user,
- char **new_groups);
-
-/* Take a char ** null terminated list of group names, and change a user's
- * memberships so those are the only groups he's in. MLM */
-/* If group_users is 1, then new_users are assumed to be groups. */
-NSAPI_PUBLIC void change_group_membership(char *db_path, char *group,
- int group_users, char **new_users);
-
-
-/* Get the server's URL. */
-/* util.c */
-NSAPI_PUBLIC char *get_serv_url(void);
-
-/* Run a command and check the output */
-struct runcmd_s {
- char *title;
- char *msg;
- char *arg;
- int sysmsg;
-};
-/* util.c */
-NSAPI_PUBLIC int run_cmd(char *cmd, FILE *closeme, struct runcmd_s *rm);
-
-/* This is basically copy_file from the install section, with the error
- * reporting changed to match the admin stuff. Since some stuff depends
- * on copy_file being the install version, I'll cheat and call this one
- * cp_file. */
-/* util.c */
-NSAPI_PUBLIC void cp_file(char *sfile, char *dfile, int mode);
-
-/* Delete the file with the given path. Returns positive value on failure.*/
-/* util.c */
-NSAPI_PUBLIC int delete_file(char *path);
-
-/* Delete the directory with the given path. Returns positive value on failure.*/
-/* BEWARE! Be sure to verify you're not deleting things you */
-/* shouldn't. Testing the directory with "util_uri_is_evil" */
-/* is often a good idea. */
-/* util.c */
-NSAPI_PUBLIC void remove_directory(char *path);
-
-/* Simply creates a directory that you give it. Checks for errors and
- * all that. (Not to be confused with create_subdirs in install, since
- * it relies on some installation stuff.) */
-/* util.c */
-NSAPI_PUBLIC void create_dir(char *dir, int mode);
-
-/* Open a file, with file locking. Close a file, releasing the lock. */
-/* util.c */
-NSAPI_PUBLIC FILE *fopen_l(char *pathname, char *mode);
-NSAPI_PUBLIC void fclose_l(FILE *f);
-
-/* helper function to figure out where to put the lock */
-/* util.c */
-NSAPI_PUBLIC char *get_flock_path(void);
-
-/* uuencode a given buffer. both src and dst need to be allocated. dst
- * should be 1 1/4 as big as src (i saved some math and just made it twice
- * as big when I called it) */
-/* util.c */
-NSAPI_PUBLIC int do_uuencode(unsigned char *src, unsigned char *dst, int srclen);
-
/* Word wrap a string to fit into a JavaScript alert box. */
/* str is the string, width is the width to wrap to, linefeed is the string
* to use as a linefeed. */
@@ -1123,63 +81,9 @@ NSAPI_PUBLIC int do_uuencode(unsigned char *src, unsigned char *dst, int srclen)
#define WORD_WRAP_WIDTH 80
NSAPI_PUBLIC char *alert_word_wrap(char *str, int width, char *linefeed);
-
-/* Writes the given object set as the current database */
-/* Takes an argument for which server in the list to dump to */
-/* ns-util.c */
-NSAPI_PUBLIC void dump_database(int whichsrv, httpd_objset *os);
-NSAPI_PUBLIC void dump_database_tofile(int whichsrv, char *fn, httpd_objset *os);
-
-/* Scans the given database and returns its object set. */
-/* ns-util.c */
-NSAPI_PUBLIC httpd_objset *read_config_from_file(char *objconf);
-
-/* Scans the current database and returns its object set. */
-/* Takes a number for which server in multiple list to read */
-/* ns-util.c */
-NSAPI_PUBLIC httpd_objset *read_config(int x);
-
-/* Inserts a new pfx2dir name translation into the object, making sure there
- * are no name conflicts. Name conflict resolution is simple: Keep the longest
- * from fields first in the file. */
-/* ns-util.c */
-NSAPI_PUBLIC void insert_ntrans(pblock *p, pblock *c, httpd_object *obj);
-
-/* Inserts a new assign-name and mkssi-version into the object, making sure
- * that they come first and are sorted. */
-NSAPI_PUBLIC void insert_ntrans_an(pblock *p, pblock *c, httpd_object *obj);
-
-/* Inserts a new mkssi-pcheck into the object, making sure that they come
- * first and are sorted. */
-NSAPI_PUBLIC void insert_pcheck_mp(pblock *p, pblock *c, httpd_object *obj);
-
-/* Inserts a new alias in the database (before all other entries) */
-/* ns-util.c */
-NSAPI_PUBLIC void insert_alias(pblock *p, pblock *c, httpd_object *obj);
-
-/* Scans a file and puts all of its lines into a char * array. Strips
- * trailing whitespace */
-/* ns-util.c */
-NSAPI_PUBLIC char **scan_tech(char *fn);
-
-/* Writes the lines to the given file */
-/* ns-util.c */
-NSAPI_PUBLIC int write_tech(char *fn, char **lines);
-
-/* Finds an object by its ppath */
-/* ns-util.c */
-NSAPI_PUBLIC httpd_object *findliteralppath(char *qs, httpd_objset *os);
-
-
-/* Compares two passwords, one plaintext and one encrypted. Returns strcmp()
- * like integer (0 good, anything else bad) */
-/* password.c */
-NSAPI_PUBLIC int pw_cmp(char *pw, char *enc);
-
-/* Encrypts a plaintext password. */
-/* password.c */
-NSAPI_PUBLIC char *pw_enc(char *pw);
-
+/* Get the admin/userdb directory. */
+/* util.c */
+NSAPI_PUBLIC char *get_userdb_dir(void);
/* Maintain what amounts to a handle to a list of strings */
/* strlist.c */
@@ -1189,215 +93,8 @@ NSAPI_PUBLIC char **grow_strlist(char **strlist, int newsize);
NSAPI_PUBLIC void free_strlist(char **strlist);
*/
-/* Handle INN config.data which are now called nsnews.conf files */
-/* nsnews.c */
-char *find_nsnews_var(char *var, char **lines);
-void set_nsnews_var(char *name, char *val, char **lines);
-int find_nsnews_line(char *var, char **lines);
-void remove_nsnews_var(char *name, char **lines);
-void replace_nsnews_prefix(char *opfx, char *npfx, char **lines);
-
-char **scan_nsnews_admin(char *filename);
-char **scan_nsnews_install(char *filename);
-void nsnews_file2path_admin(char *filename, char *path);
-void nsnews_file2path_install(char *filename, char *path);
-void write_nsnews_admin(char *filename, char **lines);
-void write_nsnews_install(char *filename, char **lines);
-
-void run_ctlinnd(char *cmd);
-char **nsnews_status(void);
-void set_moderator(char *group, char *email);
-char *find_moderator(char *group, char **lines);
-char **scan_active(char **nscnf);
-int find_active_group(char *grp, char **active);
-char *active_flags(char *line);
-int active_groupmatch(char *grppat, char *line);
-char **scan_expirectl(char *fn);
-void write_expirectl(char *fn, char **lines);
-void set_expire_remember(char *days, char **lines);
-void set_expire_default(char *def, char *keep, char *purge, char **lines);
-
-#define EXPREM_STRING "/remember/:"
-#define EXPREM_LEN 11
-#define EXPDEF_STRING "*:A:"
-#define EXPDEF_LEN 4
-
-#define find_expire_remember(lines) (find_expire_string(EXPREM_STRING, lines))
-#define find_expire_default(lines) (find_expire_string(EXPDEF_STRING, lines))
-char *find_expire_string(char *find, char **lines);
-
-typedef struct {
- char *patterns;
- char flag;
- char *keep;
- char *def;
- char *purge;
-} expire_s;
-int expire_entry(char *line, expire_s *ret);
-expire_s *expire_entry_default(char **lines);
-expire_s *find_expire_entry(char *find, char **lines);
-void new_expire_entry(expire_s *ex, char **lines);
-void change_expire_entry(char *find, expire_s *ex, char **lines);
-void remove_expire_entry(char *find, char **lines);
-
-typedef struct {
- char *grp;
- char *hostpats;
- char *flags;
- char *userpat;
-} permission_s;
-char **scan_nsaccess(char *fn);
-void write_nsaccess(char *fn, char **lines);
-permission_s *find_nsaccess_default(char **lines);
-permission_s *find_nsaccess_entry(char *find, char **lines);
-void new_nsaccess_entry(permission_s *ps, char **lines);
-void change_nsaccess_entry(char *find, permission_s *ps, char **lines);
-void remove_nsaccess_entry(char *find, char **lines);
-
-/* Handle newsfeeds files */
-void feed_read_file();
-void feed_write_file();
-char *feed_get_ind_var(int *x);
-char *feed_get_host_var(char *host);
-char *feed_get_newsgroups(char *feedline);
-char *feed_get_param(char *feedline);
-void feed_split_newsgroups(char *ngroups, char **allow, char **deny);
-char *add_bangs(char *string);
-void compress_whitespace(char *source);
-char *feed_merge_newsgroups(char *allow_in, char *deny_in);
-void feed_set_groups(char *host, char *groups);
-void feed_set_entry(char *id, char *ngroups, char *feedtype, char *params);
-void feed_delete_host(char *host);
-void feed_dump_vars(char *feedtype, char *dest);
-
-void nnhost_add(char *hostname);
-void nnhost_delete(char *hostname);
-
-void nnctl_add(char *hostname);
-void nnctl_delete(char *hostname);
-
-int nsnews_running(char **nscnf);
-
-
-#ifdef MCC_PROXY
-
-extern long inst_cache_size_tbl[];
-extern long inst_cache_capacity_tbl[];
-extern long cache_size_tbl[];
-extern long cache_capacity_tbl[];
-extern float lm_factor_tbl[];
-extern long time_interval_tbl[];
-extern long timeout_tbl[];
-extern int percent_tbl[];
-
-char *mb_str(long mb);
-char *lm_str(float f);
-
-void output_interval_select(char *name, char *other, long selected, long *tbl);
-void output_mb_select(char *name, char *other, long selected, long *tbl);
-void output_lm_select(char *name, char *other, float selected, float *tbl);
-void output_percentage_select(char *name, char *other, int selected, int *tbl);
-
-#endif /* MCC_PROXY */
-
-#ifdef MCC_NEWS
-
-char * get_active_news_authdb(char **nscnf);
-void set_active_news_authdb(char *name, char **nscnf);
-void output_active_news_authdb(char **nscnf);
-
-#endif /* MCC_NEWS */
-
-#if 0 /* move cron_conf to libadminutil */
-
-/* read and write to cron.conf, cron_conf.c */
-/* Alex Feygin, 3/22/96 */
-typedef struct cron_conf_obj
-{
- char *name;
- char *command;
- char *dir;
- char *user;
- char *start_time;
- char *days;
-}
-cron_conf_obj;
-
-typedef struct cron_conf_list
-{
- char *name;
- cron_conf_obj *obj;
- struct cron_conf_list *next;
-}
-cron_conf_list;
-
-/* Reads cron.conf to a null terminated list of cron_conf_objects; returns
- 0 if unable to do a read; 1 otherwise */
-NSAPI_PUBLIC int cron_conf_read();
-
-/* gets a cron object, NULL if it doesnt exist */
-NSAPI_PUBLIC cron_conf_obj *cron_conf_get(char *name);
-
-/* returns a NULL-terminated cron_conf_list of all the cron conf objects */
-NSAPI_PUBLIC cron_conf_list *cron_conf_get_list();
-
-/* Creates a cron conf object; all these args get STRDUP'd in the function
- so make sure to free up the space later if need be */
-NSAPI_PUBLIC cron_conf_obj *cron_conf_create_obj(char *name, char *command,
- char *dir, char *user,
- char *start_time, char *days);
-
-/* Puts a cron conf object into list or updates it if it already in there.
- Returns either the object passed or the object in there already;
- cco may be FREE'd during this operation so if you need the object
- back, call it like so:
-
- cco = cron_conf_set(cco->name, cco);
-
- calling cron_conf_set with a NULL cco will cause the 'name' object
- to be deleted.
-*/
-NSAPI_PUBLIC cron_conf_obj *cron_conf_set(char *name, cron_conf_obj *cco);
-
-/* write out current list of cron_conf_objects to cron.conf file */
-NSAPI_PUBLIC void cron_conf_write();
-
-/* free all cron conf data structures */
-NSAPI_PUBLIC void cron_conf_free();
-
-
-#endif /* move cron_conf to libadminutil */
-
-
-/**************************************************************************
- * This is should really be in base/file.h, but we don't want to tread on
- * toes.
- * Implement fgets without the error complaints the util_getline has. The
- * calling function is smart enough to deal with partial lines.
- * Also include a sleep that has the same functionality as Unix for NT.
- *************************************************************************/
-
-NSAPI_PUBLIC char *system_gets( char *, int, filebuffer * );
-
-#ifdef XP_UNIX
-NSAPI_PUBLIC int system_zero( SYS_FILE );
-#else /* XP_WIN32 */
-#define system_zero( f ) \
- SetFilePointer( PR_FileDesc2NativeHandle( f ), 0, NULL, FILE_BEGIN );\
- SetEndOfFile( PR_FileDesc2NativeHandle( f ) )
-#define sleep( t ) Sleep( (t) * 1000 )
-#endif /* XP_WIN32 */
-
NSAPI_PUBLIC char *cookieValue( char *, char * );
-NSAPI_PUBLIC void jsPWDialogSrc( int inScript, char *otherJS );
-
-NSAPI_PUBLIC int IsCurrentTemplateNSPlugin(char* templateName);
-
-/************************** Miscellaneous *************************/
-NSAPI_PUBLIC char * jsEscape(char *src);
-NSAPI_PUBLIC int read_AbbrDescType_file(char *path, char ***namelist, char ***desclist);
-
NSPR_END_EXTERN_C
#endif /* libadmin_h */
diff --git a/include/nt/nsapi.h b/include/nt/nsapi.h
index f286dc1f..82c46bb7 100644
--- a/include/nt/nsapi.h
+++ b/include/nt/nsapi.h
@@ -10,78 +10,20 @@
#include <windows.h>
#include <stdio.h>
-#include <base/buffer.h>
#include <base/file.h>
-#include <base/daemon.h>
#include <base/eventlog.h>
#include <base/util.h>
#include <base/shexp.h>
-#include <base/session.h>
-#include <base/sem.h>
-#include <base/pblock.h>
-#include <base/net.h>
-#include <base/ereport.h>
-#include <base/cinfo.h>
#include <base/systhr.h>
-#include <base/shmem.h>
#include <base/crit.h>
#include <base/systhr.h>
-#include <frame/objset.h>
-#include <frame/conf.h>
-#include <frame/func.h>
-#include <frame/http.h>
-#include <frame/log.h>
-#include <frame/object.h>
-#include <frame/protocol.h>
-#include <frame/req.h>
-#include <frame/httpact.h>
-#include <frame/servact.h>
-
-#include <libmsgdisp/orb.h>
-#include <libmsgdisp/nsarray.h>
-#include <libmsgdisp/msgchnel.h>
-#include <libmsgdisp/mdbtree.h>
-#include <libmsgdisp/mdutil.h>
-
#include <ssl.h>
-#include <nt/magnus.h>
-
typedef void * (SafFunction)();
SafFunction **SafTable;
__declspec(dllexport) int InitSafTable(SafFunction *Table);
-/* Functions from ntbuffer.c */
-
-#define FILEBUF_OPEN 1
-#define NETBUF_OPEN 2
-#define FILEBUF_OPEN_NOSTAT 3
-
-#define PIPEBUF_OPEN 4
-#define PIPEBUF_CLOSE 5
-#define FILEBUF_NEXT 6
-#define NETBUF_NEXT 7
-
-#define PIPEBUF_NEXT 8
-#define FILEBUF_CLOSE 9
-#define NETBUF_CLOSE 10
-#define FILEBUF_GRAB 11
-#define NETBUF_GRAB 12
-#define PIPEBUF_GRAB 13
-#define NETBUF_BUF2SD 14
-#define FILEBUF_BUF2SD 15
-
-#define PIPEBUF_BUF2SD 16
-#define PIPEBUF_NETBUF2SD 17
-
-/* Functions from daemon.h */
-
-#define NTDAEMON_RUN 18
-#define CHILD_STATUS 19
-
/* Functions from file.h */
-#define SYSTEM_FREAD 20
-#define SYSTEM_PREAD 21
#define SYSTEM_FOPENRO 22
#define SYSTEM_FOPENWA 23
#define SYSTEM_FOPENRW 24
@@ -93,38 +35,14 @@ __declspec(dllexport) int InitSafTable(SafFunction *Table);
#define SYSTEM_WINSOCKERR 30
#define FILE_NOTFOUND 31
#define SYSTEM_STAT 32
-#define SYSTEM_INITLOCK 33
#define FILE_UNIX2LOCAL 34
#define DIR_OPEN 35
#define DIR_READ 36
#define DIR_CLOSE 37
-/* Functions from sem.h */
-#define SEM_INIT 40
-#define SEM_TERMINATE 41
-#define SEM_GRAB 42
-#define SEM_TGRAB 43
-#define SEM_RELEASE 44
-
-/* Functions from session.h */
-#define SESSION_CREATE 45
-#define SESSION_FREE 46
-#define SESSION_DNS_LOOKUP 47
-
-/* Functions from cinfo.h */
-#define CINFO_INIT 70
-#define CINFO_TERMINATE 71
-#define CINFO_MERGE 72
-#define CINFO_FIND 73
-#define CINFO_LOOKUP 74
-#define CINFO_DUMP_DATABASE 75
-
/* Functions from ereport.h */
#define EREPORT 80
-#define EREPORT_INIT 81
-#define EREPORT_TERMINATE 82
-#define EREPORT_GETFD 83
/* Functions from minissl.h */
#define SSL_CLOSE 90
@@ -138,30 +56,6 @@ __declspec(dllexport) int InitSafTable(SafFunction *Table);
#define SSL_WRITE 98
#define SSL_GETPEERNAME 99
-/* Functions from net.h */
-#define NET_BIND 110
-#define NET_READ 111
-#define NET_WRITE 112
-
-#define NET_FIND_FQDN 113
-#define NET_IP2HOST 114
-#define NET_SENDMAIL 115
-
-/* Functions from pblock.h */
-#define PARAM_CREATE 120
-#define PARAM_FREE 121
-#define PBLOCK_CREATE 122
-#define PBLOCK_FREE 123
-#define PBLOCK_FINDVAL 124
-#define PBLOCK_NVINSERT 125
-#define PBLOCK_NNINSERT 126
-#define PBLOCK_PINSERT 127
-#define PBLOCK_STR2PBLOCK 128
-#define PBLOCK_PBLOCK2STR 129
-#define PBLOCK_COPY 130
-#define PBLOCK_PB2ENV 131
-#define PBLOCK_FR 132
-
/* Functions from systhr.h */
#define SYSTHREAD_START 133
#define SYSTHREAD_ATTACH 134
@@ -172,19 +66,6 @@ __declspec(dllexport) int InitSafTable(SafFunction *Table);
#define SYSTHREAD_GETDATA 139
#define SYSTHREAD_SETDATA 140
-/* Functions from shmem.h */
-#define SHMEM_ALLOC 141
-#define SHMEM_FREE 142
-
-/* Functions from eventlog.h */
-#define INITIALIZE_ADMIN_LOGGING 143
-#define INITIALIZE_HTTPD_LOGGING 144
-#define INITIALIZE_HTTPS_LOGGING 145
-
-#define TERMINATE_ADMIN_LOGGING 146
-#define TERMINATE_HTTPD_LOGGING 147
-#define TERMINATE_HTTPS_LOGGING 148
-
#define LOG_ERROR_EVENT 149
/* Functions from shexp.h */
@@ -198,91 +79,15 @@ __declspec(dllexport) int InitSafTable(SafFunction *Table);
#define UTIL_STRNCASECMP 171
/* Functions from util.h */
-#define UTIL_GETLINE 180
-#define UTIL_ENV_CREATE 181
-#define UTIL_ENV_STR 182
-#define NTUTIL_ENV_STR 183
-#define UTIL_ENV_REPLACE 184
-#define UTIL_ENV_FREE 185
-#define UTIL_ENV_FIND 186
#define UTIL_HOSTNAME 187
-#define UTIL_CHDIR2PATH 188
-#define UTIL_IS_MOZILLA 189
-#define UTIL_IS_URL 190
-#define UTIL_LATER_THAN 191
-#define UTIL_URI_IS_EVIL 192
-#define UTIL_URI_PARSE 193
-#define UTIL_URI_UNESCAPE 194
-#define UTIL_URI_ESCAPE 195
-#define UTIL_URL_ESCAPE 196
-#define UTIL_SH_ESCAPE 197
#define UTIL_ITOA 198
#define UTIL_VSPRINTF 199
#define UTIL_SPRINTF 200
#define UTIL_VSNPRINTF 201
#define UTIL_SNPRINTF 202
-/* Functions from magnus.h */
-#define MAGNUS_ATRESTART 203
-
/* Functions from conf.h */
#define CONF_INIT 207
-#define CONF_TERMINATE 208
-#define CONF_GETGLOBALS 209
-#define CONF_VARS2DAEMON 210
-
-/* Functions from req.h */
-#define REQUEST_CREATE 211
-#define REQUEST_FREE 212
-#define REQUEST_RESTART_INTERNAL 213
-#define REQUEST_TRANSLATE_URI 214
-#define REQUEST_HEADER 215
-#define REQUEST_STAT_PATH 216
-#define REQUEST_URI2PATH 217
-#define REQUEST_PATHCHECKS 218
-#define REQUEST_FILEINFO 219
-#define REQUEST_HANDLE_PROCESSED 220
-#define REQUEST_SERVICE 221
-#define REQUEST_HANDLE 222
-
-/* Functions from object.h */
-#define DIRECTIVE_NAME2NUM 223
-#define DIRECTIVE_NUM2NAME 224
-#define OBJECT_CREATE 225
-#define OBJECT_FREE 226
-#define OBJECT_ADD_DIRECTIVE 227
-#define OBJECT_EXECUTE 228
-
-/* Functions from objset.h */
-#define OBJSET_SCAN_BUFFER 230
-#define OBJSET_CREATE 231
-#define OBJSET_FREE 232
-#define OBJSET_FREE_SETONLY 233
-#define OBJSET_NEW_OBJECT 234
-#define OBJSET_ADD_OBJECT 235
-#define OBJSET_FINDBYNAME 236
-#define OBJSET_FINDBYPPATH 237
-
-/* Functions from http.h */
-#define HTTP_PARSE_REQUEST 240
-#define HTTP_SCAN_HEADERS 241
-#define HTTP_START_RESPONSE 242
-#define HTTP_HDRS2_ENV 243
-#define HTTP_STATUS 244
-#define HTTP_SET_FINFO 245
-#define HTTP_DUMP822 246
-#define HTTP_FINISH_REQUEST 247
-#define HTTP_HANDLE_SESSION 248
-#define HTTP_URI2URL 249
-
-/* Functions from func.h */
-#define FUNC_INIT 251
-#define FUNC_FIND 252
-#define FUNC_EXEC 253
-#define FUNC_INSERT 254
-
-/* Functions from log.h */
-#define LOG_ERROR 260
/* robm Functions added in 2.0 */
#define SYSTEM_FOPENWT 261
@@ -291,56 +96,11 @@ __declspec(dllexport) int InitSafTable(SafFunction *Table);
#define SYSTEM_REALLOC 264
#define SYSTEM_STRDUP 265
-#define UPLOAD_FILE 266
-
#define CRIT_INIT 267
#define CRIT_ENTER 268
#define CRIT_EXIT 269
#define CRIT_TERMINATE 270
#define SYSTHREAD_CURRENT 271
-
-#define NET_ACCEPT 272
-#define NET_CLOSE 273
-#define NET_CONNECT 274
-#define NET_IOCTL 275
-#define NET_LISTEN 276
-#define NET_SETSOCKOPT 277
-#define NET_SOCKET 278
-
-/* Daryoush Functions added in 3.0 */
-#define NSORB_INIT 279
-#define NSORB_INST_ID 280
-#define NSORB_GET_INST 281
-#define NSORB_REG_INT 282
-#define NSORB_FIND_OBJ 283
-#define NSORB_GET_INTERFACE 284
-
-#define ARR_NEW 285
-#define ARR_FREE 286
-#define ARR_GET_OBJ 288
-#define ARR_GET_LAST_OBJ 289
-#define ARR_NEW_OBJ 290
-#define ARR_GET_NUM_OBJ 291
-#define ARR_RESET 292
-#define ARR_REMOVEOBJ 293
-#define ARR_GET_OBJ_NUM 294
-
-#define CM_BT_NEW 295
-#define CM_BT_ADD_NODE 296
-#define CM_BT_FIND_NODE 297
-#define CM_BT_DEL_NODE 298
-#define CM_BT_DESTROY 299
-#define CM_BT_GET_NUM 300
-#define CM_BT_TRAVEL 301
-
-#define CM_STR_NEW 302
-#define CM_STR_ADD 303
-#define CM_STR_REL 304
-#define CM_STR_FREE 305
-#define CM_STR_GET 306
-#define CM_STR_SIZE 307
-#define CM_COPY_STR 308
-#define CM_MAKE_UID 309
-
-#define MS_NEW 310
-#define MS_CREATE 311
+
+#define ACL_LISTCONCAT 312
+#define GETCLIENTLANG 313
diff --git a/include/public/nsapi.h b/include/public/nsapi.h
index 3544fd20..ef01aaad 100644
--- a/include/public/nsapi.h
+++ b/include/public/nsapi.h
@@ -26,29 +26,12 @@
/* Used in some places as a length limit on error messages */
#define MAGNUS_ERROR_LEN 1024
-/* Carriage return and line feed */
-#define CR 13
-#define LF 10
#ifdef XP_WIN32
#define ENDLINE "\r\n"
#else
#define ENDLINE "\n"
#endif
-/* mime.types file identification line */
-#define NCC_MT_MAGIC "#--Netscape Communications Corporation MIME Information"
-#define NCC_MT_MAGIC_LEN 55
-
-/* Deprecated */
-#define MCC_MT_MAGIC "#--Mosaic Communications Corporation MIME Information"
-#define MCC_MT_MAGIC_LEN 53
-
-/* The character which separates extensions with cinfo_find */
-#define CINFO_SEPARATOR '.'
-
-/* The maximum length of a line in a mime.types file */
-#define CINFO_MAX_LEN 1024
-
/*
* The maximum length of an error message. NOT RUN-TIME CHECKED
*/
@@ -110,8 +93,6 @@
#define IO_OKAY 1
#define IO_ERROR -1
#define IO_EOF 0
-#define NETBUF_EOF -1
-#define NETBUF_ERROR -2
/* The disk page size on this machine. */
#define FILE_BUFFERSIZE 4096
@@ -128,36 +109,6 @@
#endif /* XP_WIN32 */
-#define NET_INFINITE_TIMEOUT 0
-#define NET_ZERO_TIMEOUT -1
-
-
-/*
- * The following macros allow code to be written to use either the
- * shell expression API defined here, or the regular expression
- * pattern matching API defined in regexp.h. Regular expressions
- * have a more complicated syntax, but also are more powerful.
- * Define the symbol, USE_REGEX to use regular expressions. You
- * can include either or both of shexp.h and regexp.h, regardless
- * of whether USE_REGEX is defined or not, and the WILDPAT macros
- * will be defined appropriately.
- */
-
-#ifdef USE_REGEX
-
-#define WILDPAT_VALID(exp) regexp_valid(exp)
-#define WILDPAT_MATCH(str, exp) regexp_match(str, exp)
-#define WILDPAT_CMP(str, exp) regexp_cmp(str, exp)
-#define WILDPAT_CASECMP(str, exp) regexp_casecmp(str, exp)
-#define WILDPAT_USES_REGEXP 1
-
-/* Define return codes from WILDPAT_VALID */
-#define NON_WILDPAT -1 /* exp is ordinary string */
-#define INVALID_WILDPAT -2 /* exp is an invalid pattern */
-#define VALID_WILDPAT 1 /* exp is a valid pattern */
-
-#else
-
/* WILDPAT uses shell expressions */
#define WILDPAT_VALID(exp) shexp_valid(exp)
#define WILDPAT_MATCH(str, exp) shexp_match(str, exp)
@@ -170,89 +121,15 @@
#define INVALID_WILDPAT -2 /* exp is an invalid pattern */
#define VALID_WILDPAT 1 /* exp is a valid pattern */
-#endif /* USE_REGEX */
+//#endif /* USE_REGEX */
/* Define return codes from regexp_valid and shexp_valid */
#define NON_SXP NON_WILDPAT /* exp is an ordinary string */
#define INVALID_SXP INVALID_WILDPAT /* exp is an invalid shell exp */
#define VALID_SXP VALID_WILDPAT /* exp is a valid shell exp */
-#ifdef USE_REGEX
-/* and regexp versions */
-#define NON_REGEXP NON_SXP
-#define INVALID_REGEXP INVALID_SXP
-#define VALID_REGEXP VALID_SXP
-#endif
-
#define SYSTHREAD_DEFAULT_PRIORITY 16
-/* The longest line in the configuration file */
-#define CONF_MAXLEN 16384
-
-#define HTTP_DATE_LEN 128
-#ifdef XP_UNIX
-#define HTTP_DATE_FMT "%A, %d-%b-%y %T GMT"
-#else /* XP_WIN32 */
-#define HTTP_DATE_FMT "%A, %d-%b-%y %H:%M:%S GMT"
-#endif /* XP_WIN32 */
-
-/* HTTP status codes */
-#define PROTOCOL_CONTINUE 100 /* HTTP/1.1 */
-#define PROTOCOL_SWITCHING 101 /* HTTP/1.1 */
-#define PROTOCOL_OK 200
-#define PROTOCOL_CREATED 201
-#define PROTOCOL_NO_RESPONSE 204
-#define PROTOCOL_PARTIAL_CONTENT 206
-#define PROTOCOL_REDIRECT 302
-#define PROTOCOL_NOT_MODIFIED 304
-#define PROTOCOL_BAD_REQUEST 400
-#define PROTOCOL_UNAUTHORIZED 401
-#define PROTOCOL_FORBIDDEN 403
-#define PROTOCOL_NOT_FOUND 404
-#define PROTOCOL_METHOD_NOT_ALLOWED 405 /*HTTP/1.1 */
-#define PROTOCOL_PROXY_UNAUTHORIZED 407
-#define PROTOCOL_CONFLICT 409 /* HTTP/1.1 */
-#define PROTOCOL_LENGTH_REQUIRED 411 /*HTTP/1.1 */
-#define PROTOCOL_PRECONDITION_FAIL 412 /*HTTP/1.1 */
-#define PROTOCOL_ENTITY_TOO_LARGE 413 /*HTTP/1.1 */
-#define PROTOCOL_URI_TOO_LARGE 414 /*HTTP/1.1 */
-#define PROTOCOL_SERVER_ERROR 500
-#define PROTOCOL_NOT_IMPLEMENTED 501
-#define PROTOCOL_VERSION_NOT_SUPPORTED 505 /*HTTP/1.1 */
-
-#define CURRENT_PROTOCOL_VERSION 101
-
-/* Definitions for HTTP over SSL */
-#define HTTPS_PORT 443
-#define HTTPS_URL "https"
-
-/* Definitions for HTTP over TCP */
-#define HTTP_PORT 80
-#define HTTP_URL "http"
-
-
-#define REQ_MAX_LINE 4096
-
-/*
- * The REQ_ return codes. These codes are used to determine what the server
- * should do after a particular module completes its task.
- *
- * Func type functions return these as do many internal functions.
- */
-
-/* The function performed its task, proceed with the request */
-#define REQ_PROCEED 0
-/* The entire request should be aborted: An error occurred */
-#define REQ_ABORTED -1
-/* The function performed no task, but proceed anyway. */
-#define REQ_NOACTION -2
-/* Tear down the session and exit */
-#define REQ_EXIT -3
-/* Restart the entire request-response process */
-#define REQ_RESTART -4
-
-/* --- End miscellaneous definitions --- */
-
/* --- Begin native platform includes --- */
#if defined(FILE_UNIX) || defined(FILE_UNIX_MMAP)
@@ -309,180 +186,11 @@ typedef void *SYS_FILE;
#define SYS_ERROR_FD ((SYS_FILE)-1)
-#ifndef SYS_NETFD_T
-typedef void *SYS_NETFD;
-#define SYS_NETFD_T void *
-#endif /* !SYS_NETFD_T */
-
-/* Error value for a SYS_NETFD */
-#ifndef SYS_NET_ERRORFD
-#define SYS_NET_ERRORFD ((SYS_NETFD)-1)
-#endif /* !SYS_NET_ERRORFD */
-
-/*
- * Type: filebuffer, filebuf_t
- *
- * Description:
- *
- * This structure is used to represent a buffered file. On some
- * systems the file may be memory-mapped. A filebuffer is created
- * by filebuf_open(), and destroyed by filebuf_close().
- *
- * Notes:
- *
- * Direct access to the members of this structure, not using
- * macros defined here, is discouraged.
- *
- * The filebuf alias that used to be defined for this type was
- * found to conflict with a C++ class of the same name, so it
- * has been renamed to filebuf_t.
- *
- * The inbuf field used to be (char *), but is now (unsigned char *)
- * to simplify handling of 8-bit data. The value returned by the
- * filebuf_getc() macro is the (unsigned char) casted to (int), or
- * an error code. Unfortunately, IO_EOF cannot be distinguished
- * from a zero byte, but a new function, filebuf_iseof(), is
- * provided that will indicate definitively whether EOF has been
- * reached.
- */
-
-#ifdef FILE_MMAP
-
-/* Version of filebuffer when memory-mapped files are supported */
-typedef struct {
- SYS_FILE fd;
-#ifdef FILE_UNIX_MMAP
- caddr_t fp;
-#else /* FILE_WIN32_MMAP */
- HANDLE fdmap;
- char *fp;
-#endif /* FILE_UNIX_MMAP */
- int len;
-
- unsigned char *inbuf; /* for buffer_grab */
- int cursize;
-
- int pos;
- char *errmsg;
-} filebuffer;
-
-/* Return next character or IO_EOF */
-#define filebuf_getc(b) ((b)->pos == (b)->len ? IO_EOF : (int)((unsigned char *)(b)->fp)[(b)->pos++])
-
-#define filebuf_iseof(b) ((b)->pos == (b)->len)
-
-#else
-
-/* Version of filebuffer with no memory-mapped file support */
-typedef struct {
- SYS_FILE fd;
-
- int pos, cursize, maxsize;
- unsigned char *inbuf;
- char *errmsg;
-} filebuffer;
-
-/* Return next character, IO_EOF, or IO_ERROR */
-#define filebuf_getc(b) \
- ((b)->pos != (b)->cursize ? (int)((b)->inbuf[(b)->pos++]) : filebuf_next(b,1))
-
-#endif /* FILE_MMAP */
-
-/* C++ streamio defines a filebuf class. */
-typedef filebuffer filebuf_t;
-
-#ifdef XP_WIN32
-/* Use a filebuffer to read data from a pipe */
-#define pipebuf_getc(b) \
- ((b)->pos != (b)->cursize ? (int)((b)->inbuf[(b)->pos++]) : pipebuf_next(b,1))
-#endif /* XP_WIN32 */
-
-/*
- * Type: netbuf
- *
- * Description:
- *
- * This structure is used to represent a buffered network socket.
- * It is created by netbuf_open(), and destroyed by netbuf_close().
- *
- * Notes:
- *
- * Direct access to the members of this structure, not using
- * macros defined here, is discouraged.
- *
- * The inbuf field used to be (unsigned char *), but is now
- * simply (char *). The value returned by the netbuf_getc()
- * macro is (int).
- */
-
-typedef struct {
- SYS_NETFD sd;
-
- int pos, cursize, maxsize, rdtimeout;
-#ifdef XP_WIN32
- CHAR address[64];
-#endif /* XP_WIN32 */
- unsigned char *inbuf;
- char *errmsg;
-#ifndef XP_WIN32
- char address[64];
-#endif /* !XP_WIN32 */
-} netbuf;
-
-/*
- * netbuf_getc gets a character from the given network buffer and returns
- * it. (as an integer).
- *
- * It will return (int) IO_ERROR for an error and (int) IO_EOF for
- * an error condition or EOF respectively.
- */
-
-#define netbuf_getc(b) \
- ((b)->pos != (b)->cursize ? (int)((b)->inbuf[(b)->pos++]) : netbuf_next(b,1))
-
-/*
- * buffer_error returns the last error that occurred with buffer. Don't use
- * this unless you know an error occurred. Independent of network/file type.
- */
-
-#define buffer_error(b) ((b)->errmsg)
-
-/*
- * Type: cinfo
- *
- * Description:
- *
- * This is a structure that captures the information in the name/value
- * pairs on one line of a mime.types file. A cinfo structure is
- * stored in the memory-resident database, indexed by each of the
- * file extensions specified in the "exts" name/value pair. It
- * defines various attributes of resources with names containing
- * the specified file extensions.
- *
- * Notes:
- *
- * Pointers to cinfo structures returned by this API may or may not
- * need to freed by the caller. See the individual function
- * descriptions.
- *
- * The strings referenced by the fields of cinfo structures returned
- * by this API should be considered read-only, and do not need to be
- * freed by the caller, even when the cinfo structure does.
- */
-
-typedef struct {
- char *type;
- char *encoding;
- char *language;
-} cinfo;
-
-
typedef void* CONDVAR;
typedef void *COUNTING_SEMAPHORE;
typedef void* CRITICAL;
#ifdef XP_UNIX
-typedef struct passwd *PASSWD;
typedef DIR* SYS_DIR;
typedef struct dirent SYS_DIRENT;
#endif /* XP_UNIX */
@@ -523,56 +231,9 @@ typedef struct {
typedef void *pool_handle_t;
#endif
-#ifndef SEMAPHORE_T
-typedef void *SEMAPHORE;
-#define SEMAPHORE_T void *
-#endif /* !SEMAPHORE_T */
-
-#define SESSION_HASHSIZE 5
-
typedef struct PListStruct_s PListStruct_s;
typedef struct ACLListHandle ACLListHandle;
-typedef struct Session {
- /* Client-specific information */
- pblock *client;
-
- SYS_NETFD csd;
- netbuf *inbuf;
- int csd_open;
-
- struct in_addr iaddr;
-
-#ifdef MCC_PROXY
- int req_cnt;
-#endif
-
-#ifdef MALLOC_POOLS
- pool_handle_t *pool;
-#endif /* MALLOC_POOLS */
-
- void *clauth; /* ACL client authentication information */
- struct Session *next;
- int fill;
- struct sockaddr_in local_addr; /* local addr for this session*/
-
- PListStruct_s *subject;
-} Session;
-
-#if defined (SHMEM_UNIX_MMAP) || defined (SHMEM_WIN32_MMAP)
-typedef struct {
- void *data; /* the data */
-#ifdef SHMEM_WIN32_MMAP
- HANDLE fdmap;
-#endif /* SHMEM_WIN32_MMAP */
- int size; /* the maximum length of the data */
-
- char *name; /* internal use: filename to unlink if exposed */
- SYS_FILE fd; /* internal use: file descriptor for region */
-} shmem_s;
-#endif /* SHMEM_UNIX_MMAP || SHMEM_WIN32_MMAP */
-
-
/* Define a handle for a thread */
typedef void* SYS_THREAD;
@@ -608,2760 +269,17 @@ typedef struct {
pblock *client;
} directive;
-/*
- * dtable is a structure for creating tables of directives
- */
-
-typedef struct {
- int ni;
- directive *inst;
-} dtable;
-
-/*
- * The httpd_object structure.
- *
- * The name pblock array contains the names for this object, such as its
- * virtual location, its physical location, or its identifier.
- *
- * tmpl contains any templates allocated to this object.
- */
-
-typedef struct {
- pblock *name;
-
- int nd;
- dtable *dt;
-} httpd_object;
-
-/*
- * httpd_objset is a container for a bunch of objects. obj is a
- * NULL-terminated array of objects. pos points to the entry after the last
- * one in the array. You should not mess with pos, but can read it to find
- * the last entry.
- *
- * The initfns array is a NULL-terminated array of the Init functions
- * associated with this object set. If there are no Init functions associated
- * with this object set, initfns can be NULL. Each pblock specifies the
- * parameters which are passed to the function when it's executed.
- */
-
-typedef struct {
- int pos;
- httpd_object **obj;
-
- pblock **initfns;
-} httpd_objset;
-
-
-typedef struct {
-
- /* What port we listen to */
- int Vport;
-#define server_portnum conf_getglobals()->Vport
-
- /* What address to bind to */
- char *Vaddr;
-
- /* User to run as */
-#define user_pw conf_getglobals()->Vuserpw
- struct passwd *Vuserpw;
-
- /* Directory to chroot to */
- char *Vchr;
-
- /* Where to log our pid to */
- char *Vpidfn;
-
-#define pool_max conf_getglobals()->Vpool_max
- int Vpool_max; /* OBSOLETE */
-#define pool_min conf_getglobals()->Vpool_min
- int Vpool_min; /* OBSOLETE */
-#define pool_life conf_getglobals()->Vpool_life
- int Vpool_life; /* OBSOLETE */
-
- /* For multiprocess UNIX servers, the maximum threads per process */
-#define pool_maxthreads conf_getglobals()->Vpool_maxthreads
- int Vpool_maxthreads;
-
-#define pool_minthreads conf_getglobals()->Vpool_minthreads
- int Vpool_minthreads; /* OBSOLETE */
-
- char *Vsecure_keyfn;
- char *Vsecure_certfn;
-
-#define security_active conf_getglobals()->Vsecurity_active
- int Vsecurity_active;
-#define ssl3_active conf_getglobals()->Vssl3_active
- int Vssl3_active;
-#define ssl2_active conf_getglobals()->Vssl2_active
- int Vssl2_active;
- int Vsecure_auth;
-#define security_session_timeout conf_getglobals()->Vsecurity_session_timeout
- int Vsecurity_session_timeout;
-#define ssl3_session_timeout conf_getglobals()->Vssl3_session_timeout
- long Vssl3_session_timeout;
-
- /* The server's hostname as should be reported in self-ref URLs */
-#define server_hostname conf_getglobals()->Vserver_hostname
- char *Vserver_hostname;
-
- /* The main object from which all are derived */
-#define root_object conf_getglobals()->Vroot_object
- char *Vroot_object;
-
- /* The object set the administrator has asked us to load */
-#define std_os conf_getglobals()->Vstd_os
- httpd_objset *Vstd_os;
-
- /* The root of ACL data structures */
- void *Vacl_root;
-#define acl_root conf_getglobals()->Vacl_root
-
- /* The main error log, where all errors are logged */
-#define master_error_log conf_getglobals()->Vmaster_error_log
- char *Vmaster_error_log;
-
- /* The server root ( in which the server sits while executing ) */
-#define server_root conf_getglobals()->Vserver_root
- char *Vserver_root;
-
- /* This server's id */
-#define server_id conf_getglobals()->Vserver_id
- char *Vserver_id;
-
- int single_accept; /* daemon mode Internal use only */
- int num_keep_alives; /* number of KA threads Internal use only */
- int log_verbose; /* Flag to log LOG_VERBOSE messages */
- int mmap_flags; /* mmap flags for file cache mmaping - internal use only */
- int mmap_prots; /* mmap prots for file cache mmaping - internal use only */
- int unused1;
- int unused2;
-
- /* Begin Enterprise 3.0 fields */
- int accept_language; /* turn accept-language on/off */
-
- char *mtahost; /* Hostname of the Mail Transport Agent :
- * typically "localhost" for the Unix boxes,
- * or the hostname of a POP server otherwise.
- * Needed by the Agents subsystem.
- */
- char *nntphost; /* NNTP server -> for Agents */
-
- /* The root of ACL data structures */
- void *Vacl_root_30;
-#define acl_root_30 conf_getglobals()->Vacl_root_30
-
- /* This is for the agent subsystem */
- /* The name of tha configuration parameter is: "AgentsFilePath" */
- char* agentFilePath; /* path to agent.conf */
-#define AgentFilePath (conf_getglobals()->agentFilePath)
-
- /* Default allowed methods - */
- int Allowed;
-#define AllowedMethods (conf_getglobals()->Allowed)
-
- pblock *genericGlobals; /* See conf_api.h for details on accessing
- * these
- */
-
- /*Agents ACL file */
- char* agentsACLFile;
- int wait_for_cgi;
- int cgiwatch_timeout;
-
-#ifdef FORTEZZA
- uint32 fortezza_card_mask;
- char *fortezza_personality;
- char *krlname;
-#endif
-} conf_global_vars_s;
-
-typedef struct {
- /* Server working variables */
- pblock *vars;
-
- /* The method, URI, and protocol revision of this request */
- pblock *reqpb;
- /* Protocol specific headers */
- int loadhdrs;
- pblock *headers;
-
- /* Server's response headers */
- int senthdrs;
- pblock *srvhdrs;
-
- /* The object set constructed to fulfill this request */
- httpd_objset *os;
- /* Array of objects that were created from .nsconfig files */
- httpd_objset *tmpos;
-
- /* The stat last returned by request_stat_path */
- char *statpath;
- char *staterr;
- struct stat *finfo;
-
- /* access control state */
- int aclstate; /* ACL decision state */
- int acldirno; /* deciding ACL directive number */
- char * aclname; /* name of deciding ACL */
- pblock * aclpb; /* parameter block for ACL PathCheck */
- /* 3.0 ACL list pointer */
- ACLListHandle *acllist;
-
-#ifdef MCC_PROXY
- struct hostent *hp; /* proxy NSAPI: DNS resolution result */
- char * host; /* proxy NSAPI: host to resolve/connect to */
- int port; /* proxy NSAPI: port to connect to */
-
- void * socks_rq; /* SOCKS request data */
-#endif
-
- int request_is_cacheable; /* default TRUE */
- int directive_is_cacheable; /* default FALSE */
-
- char *cached_headers;
- int cached_headers_len; /* length of the valid headers */
- char *unused;
-
- /* HTTP/1.1 features */
- time_t req_start; /* Time request arrived - used for determining weak or*/
- /* strong cache validation */
-#define REQ_TIME(x) (x)->req_start
- short protv_num; /* Protocol Version number */
- short method_num; /* Method number */
- struct rq_attr {
-#ifdef AIX
- unsigned abs_uri:1; /* 1=Absolute URI was used */
- unsigned chunked:1; /* chunked transfer-coding */
- unsigned keep_alive:1; /* connection keek-alive */
- unsigned pipelined:1; /* request packet is pipelined */
- unsigned reserved:28; /* If you add a bit flag, make */
- /* sure to subtract one from this */
-#else
- unsigned long abs_uri:1; /* 1=Absolute URI was used */
- unsigned long chunked:1; /* chunked transfer-coding */
- unsigned long keep_alive:1; /* connection keek-alive */
- unsigned pipelined:1; /* request packet is pipelined */
- unsigned long reserved:28; /* If you add a bit flag, make */
- /* sure to subtract one from this */
-#endif
- }rq_attr;
- char * hostname; /* Not NULL if abs_uri */
- int allowed; /* Allowed METHODs for this server */
- int byterange; /* number of byte ranges */
- short status_num; /* Status code */
-
- int staterrno; /* used for rqstat */
-} Request;
-
-/* Request attribute macros */
-#define ABS_URI(x) (x)->rq_attr.abs_uri
-#define CHUNKED(x) (x)->rq_attr.chunked
-#define KEEP_ALIVE(x) (x)->rq_attr.keep_alive
-#define PIPELINED(x) (x)->rq_attr.pipelined
-
-/* Define METHODS for HTTP/1.1 */
-#define METHOD_HEAD 0
-#define METHOD_GET 1
-#define METHOD_PUT 2
-#define METHOD_POST 3
-#define METHOD_DELETE 4
-#define METHOD_TRACE 5
-#define METHOD_OPTIONS 6
-/* The following methods are Netscape method extensions */
-#define METHOD_MOVE 7
-#define METHOD_INDEX 8
-#define METHOD_MKDIR 9
-#define METHOD_RMDIR 10
-#define METHOD_COPY 11
-#define METHOD_MAX 12 /* Number of methods available on this server */
-
-#define ISMGET(r) ((r)->method_num == METHOD_GET)
-#define ISMHEAD(r) ((r)->method_num == METHOD_HEAD)
-#define ISMPUT(r) ((r)->method_num == METHOD_PUT)
-#define ISMPOST(r) ((r)->method_num == METHOD_POST)
-#define ISMDELETE(r) ((r)->method_num == METHOD_DELETE)
-#define ISMMOVE(r) ((r)->method_num == METHOD_MOVE)
-#define ISMINDEX(r) ((r)->method_num == METHOD_INDEX)
-#define ISMMKDIR(r) ((r)->method_num == METHOD_MKDIR)
-#define ISMRMDIR(r) ((r)->method_num == METHOD_RMDIR)
-#define ISMCOPY(r) ((r)->method_num == METHOD_COPY)
-#define ISMTRACE(r) ((r)->method_num == METHOD_TRACE)
-#define ISMOPTIONS(r) ((r)->method_num == METHOD_OPTIONS)
-
-/*
- * FuncPtr is a pointer to our kind of functions
- */
-
-#ifdef XP_UNIX
-typedef int Func(pblock *, Session *, Request *);
-#else /* XP_WIN32 */
-typedef int _cdecl Func(pblock *, Session *, Request *);
-#endif /* XP_WIN32 */
-
-typedef Func *FuncPtr;
-
-/*
- * FuncStruct is a structure used in the static declaration of the
- * functions. This static declaration is parsed into a hash table at
- * startup. You should initialize the next entry to NULL.
- */
-
-struct FuncStruct {
- char *name;
- FuncPtr func;
- struct FuncStruct *next;
- int flags;
-};
-
/* --- End type definitions --- */
-/* --- Begin dispatch vector table definition --- */
-
-typedef struct nsapi_dispatch_s nsapi_dispatch_t;
-struct nsapi_dispatch_s {
- char *(*f_system_version)();
- void *(*f_system_malloc)(int size);
- void *(*f_system_calloc)(int size);
- void *(*f_system_realloc)(void *ptr, int size);
- void (*f_system_free)(void *ptr);
- char *(*f_system_strdup)(const char *ptr);
- void *(*f_system_malloc_perm)(int size);
- void *(*f_system_calloc_perm)(int size);
- void *(*f_system_realloc_perm)(void *ptr, int size);
- void (*f_system_free_perm)(void *ptr);
- char *(*f_system_strdup_perm)(const char *ptr);
- int (*f_getThreadMallocKey)(void);
- void (*f_magnus_atrestart)(void (*fn)(void *), void *data);
- filebuf_t *(*f_filebuf_open)(SYS_FILE fd, int sz);
- netbuf *(*f_netbuf_open)(SYS_NETFD sd, int sz);
- filebuf_t *(*f_filebuf_create)(SYS_FILE fd, caddr_t mmap_ptr,
- int mmap_len, int bufsz);
- void (*f_filebuf_close_buffer)(filebuf_t *buf, int clean_mmap);
-#ifdef FILE_MMAP
- filebuf_t *(*f_filebuf_open_nostat)(SYS_FILE fd, int sz,
- struct stat *finfo);
-#else
- void *(*f_filebuf_open_nostat)(void);
-#endif
-#ifdef XP_WIN32
- filebuf_t *(*f_pipebuf_open)(SYS_FILE fd, int sz, struct stat *finfo);
-#else
- void *(*f_pipebuf_open)(void);
-#endif /* XP_WIN32 */
-#ifndef FILE_MMAP
- int (*f_filebuf_next)(filebuf_t *buf, int advance);
-#else
- int (*f_filebuf_next)(void);
-#endif /* !FILE_MMAP */
- int (*f_netbuf_next)(netbuf *buf, int advance);
-#ifdef XP_WIN32
- int (*f_pipebuf_next)(filebuf_t *buf, int advance);
-#else
- int (*f_pipebuf_next)(void);
-#endif /* XP_WIN32 */
- void (*f_filebuf_close)(filebuf_t *buf);
- void (*f_netbuf_close)(netbuf *buf);
-#ifdef XP_WIN32
- void (*f_pipebuf_close)(filebuf_t *buf);
-#else
- void (*f_pipebuf_close)(void);
-#endif /* XP_WIN32 */
- int (*f_filebuf_grab)(filebuf_t *buf, int sz);
- int (*f_netbuf_grab)(netbuf *buf, int sz);
-#ifdef XP_WIN32
- int (*f_pipebuf_grab)(filebuf_t *buf, int sz);
-#else
- int (*f_pipebuf_grab)(void);
-#endif /* XP_WIN32 */
- int (*f_netbuf_buf2sd)(netbuf *buf, SYS_NETFD sd, int len);
- int (*f_filebuf_buf2sd)(filebuf_t *buf, SYS_NETFD sd);
-#ifdef XP_WIN32
- int (*f_pipebuf_buf2sd)(filebuf_t *buf, SYS_NETFD sd, int len);
- int (*f_pipebuf_netbuf2sd)(netbuf *buf, SYS_FILE sd, int len);
- int (*f_pipebuf_netbuf2pipe)(netbuf *buf, SYS_NETFD sd, int len);
-#else
- int (*f_pipebuf_buf2sd)(void);
- int (*f_pipebuf_netbuf2sd)(void);
- int (*f_pipebuf_netbuf2pipe)(void);
-#endif /* XP_WIN32 */
- void (*f_cinfo_init)(void);
- void (*f_cinfo_terminate)(void);
- char *(*f_cinfo_merge)(char *fn);
- cinfo *(*f_cinfo_find)(char *uri);
- cinfo *(*f_cinfo_lookup)(char *type);
- void (*f_cinfo_dump_database)(FILE *dump);
- CRITICAL (*f_crit_init)(void);
- void (*f_crit_enter)(CRITICAL id);
- void (*f_crit_exit)(CRITICAL id);
- void (*f_crit_terminate)(CRITICAL id);
- CONDVAR (*f_condvar_init)(CRITICAL id);
- void (*f_condvar_wait)(CONDVAR cv);
- void (*f_condvar_notify)(CONDVAR cv);
- void (*f_condvar_notifyAll)(CONDVAR cv);
- void (*f_condvar_terminate)(CONDVAR cv);
- COUNTING_SEMAPHORE (*f_cs_init)(int initial_count);
- void (*f_cs_terminate)(COUNTING_SEMAPHORE csp);
- int (*f_cs_wait)(COUNTING_SEMAPHORE csp);
- int (*f_cs_trywait)(COUNTING_SEMAPHORE csp);
- int (*f_cs_release)(COUNTING_SEMAPHORE csp);
- void (*f_daemon_atrestart)(void (*fn)(void *), void *data);
-#ifdef FORTEZZA
- /* THIS IS BOGUS... WHO Decided to export servssl_init!!! It should not
- * be a public function.
- */
- void (*f_servssl_init)(void);
-#else
- void (*f_servssl_init)(PsetHndl pset, PRFileDesc *fd, char *admRoot);
-#endif
- int (*f_ereport)(int degree, char *fmt, ...);
- int (*f_ereport_v)(int degree, char *fmt, va_list args);
- char *(*f_ereport_init)(char *err_fn, char *email,
- PASSWD pwuser, char *version);
- void (*f_ereport_terminate)(void);
- SYS_FILE (*f_ereport_getfd)(void);
- SYS_FILE (*f_system_fopenRO)(char *path);
- SYS_FILE (*f_system_fopenWA)(char *path);
- SYS_FILE (*f_system_fopenRW)(char *path);
- SYS_FILE (*f_system_fopenWT)(char *path);
- int (*f_system_fread)(SYS_FILE fd, char *buf, int sz);
- int (*f_system_fwrite)(SYS_FILE fd,char *buf,int sz);
- int (*f_system_fwrite_atomic)(SYS_FILE fd, char *buf, int sz);
- int (*f_system_lseek)(SYS_FILE fd, int off, int wh);
- int (*f_system_fclose)(SYS_FILE fd);
- int (*f_system_stat)(char *name, struct stat *finfo);
- int (*f_system_rename)(char *oldpath, char *newpath);
- int (*f_system_unlink)(char *path);
- int (*f_system_tlock)(SYS_FILE fd);
- int (*f_system_flock)(SYS_FILE fd);
- int (*f_system_ulock)(SYS_FILE fd);
-#ifdef XP_WIN32
- SYS_DIR (*f_dir_open)(char *path);
- SYS_DIRENT *(*f_dir_read)(SYS_DIR ds);
- void (*f_dir_close)(SYS_DIR ds);
-#else
- void *(*f_dir_open)(void);
- void *(*f_dir_read)(void);
- void (*f_dir_close)(void);
-#endif /* XP_WIN32 */
- int (*f_dir_create_all)(char *dir);
-#ifdef XP_WIN32
- char *(*f_system_winsockerr)(void);
- char *(*f_system_winerr)(void);
- int (*f_system_pread)(SYS_FILE fd, char *buf, int sz);
- int (*f_system_pwrite)(SYS_FILE fd, char *buf, int sz);
- void (*f_file_unix2local)(char *path, char *p2);
-#else
- void *(*f_system_winsockerr)(void);
- void *(*f_system_winerr)(void);
- int (*f_system_pread)(void);
- int (*f_system_pwrite)(void);
- void (*f_file_unix2local)(void);
-#endif /* XP_WIN32 */
- int (*f_system_nocoredumps)(void);
- int (*f_file_setinherit)(SYS_FILE fd, int value);
- int (*f_file_notfound)(void);
- char *(*f_system_errmsg)(void);
- int (*f_system_errmsg_fn)(char **buff, size_t maxlen);
- SYS_NETFD (*f_net_socket)(int domain, int type, int protocol);
- int (*f_net_listen)(SYS_NETFD s, int backlog);
- SYS_NETFD (*f_net_create_listener)(char *ipaddr, int port);
- int (*f_net_connect)(SYS_NETFD s, const void *sockaddr, int namelen);
- int (*f_net_getpeername)(SYS_NETFD s, struct sockaddr *name, int *namelen);
- int (*f_net_close)(SYS_NETFD s);
- int (*f_net_bind)(SYS_NETFD s, const struct sockaddr *name, int namelen);
- SYS_NETFD (*f_net_accept)(SYS_NETFD s, struct sockaddr *addr, int *addrlen);
- int (*f_net_read)(SYS_NETFD sd, char *buf, int sz, int timeout);
- int (*f_net_write)(SYS_NETFD sd, char *buf, int sz);
- int (*f_net_writev)(SYS_NETFD sd, struct iovec *iov, int iovlen);
- int (*f_net_isalive)(SYS_NETFD sd);
- char *(*f_net_ip2host)(char *ip, int verify);
- int (*f_net_getsockopt)(SYS_NETFD s, int level, int optname,
- void *optval, int *optlen);
- int (*f_net_setsockopt)(SYS_NETFD s, int level, int optname,
- const void *optval, int optlen);
- int (*f_net_select)(int nfds, fd_set *r, fd_set *w, fd_set *e,
- struct timeval *timeout);
- int (*f_net_ioctl)(SYS_NETFD s, int tag, void *result);
- pb_param *(*f_param_create)(char *name, char *value);
- int (*f_param_free)(pb_param *pp);
- pblock *(*f_pblock_create)(int n);
- void (*f_pblock_free)(pblock *pb);
- char *(*f_pblock_findval)(const char *name, pblock *pb);
- pb_param *(*f_pblock_nvinsert)(const char *name, const char *value, pblock *pb);
- pb_param *(*f_pblock_nninsert)(const char *name, int value, pblock *pb);
- void (*f_pblock_pinsert)(pb_param *pp, pblock *pb);
- int (*f_pblock_str2pblock)(const char *str, pblock *pb);
- char *(*f_pblock_pblock2str)(pblock *pb, char *str);
- void (*f_pblock_copy)(pblock *src, pblock *dst);
- pblock *(*f_pblock_dup)(pblock *src);
- char **(*f_pblock_pb2env)(pblock *pb, char **env);
- pb_param *(*f_pblock_fr)(const char *name, pblock *pb, int remove);
- char * (*f_pblock_replace)(const char *name,char * new_value,pblock *pb);
- pool_handle_t *(*f_pool_create)(void);
- void (*f_pool_destroy)(pool_handle_t *pool_handle);
- int (*f_pool_enabled)(void);
- void *(*f_pool_malloc)(pool_handle_t *pool_handle, size_t size );
- void (*f_pool_free)(pool_handle_t *pool_handle, void *ptr );
- void *(*f_pool_calloc)(pool_handle_t *pool_handle, size_t nelem, size_t elsize);
- void *(*f_pool_realloc)(pool_handle_t *pool_handle, void *ptr, size_t size );
- char *(*f_pool_strdup)(pool_handle_t *pool_handle, const char *orig_str );
-#if defined(MCC_PROXY) && defined(USE_REGEX)
- int (*f_regexp_valid)(char *exp);
- int (*f_regexp_match)(char *str, char *exp);
- int (*f_regexp_cmp)(char *str, char *exp);
- int (*f_regexp_casecmp)(char *str, char *exp);
-#else
- int (*f_regexp_valid)(void);
- int (*f_regexp_match)(void);
- int (*f_regexp_cmp)(void);
- int (*f_regexp_casecmp)(void);
-#endif
- SEMAPHORE (*f_sem_init)(char *name, int number);
- void (*f_sem_terminate)(SEMAPHORE id);
- int (*f_sem_grab)(SEMAPHORE id);
- int (*f_sem_tgrab)(SEMAPHORE id);
- int (*f_sem_release)(SEMAPHORE id);
- Session *(*f_session_alloc)(SYS_NETFD csd, struct sockaddr_in *sac); /* internal */
- Session *(*f_session_fill)(Session *sn); /* internal */
- Session *(*f_session_create)(SYS_NETFD csd, struct sockaddr_in *sac);
- void (*f_session_free)(Session *sn);
- char *(*f_session_dns_lookup)(Session *sn, int verify);
- int (*f_shexp_valid)(char *exp);
- int (*f_shexp_match)(char *str, char *exp);
- int (*f_shexp_cmp)(char *str, char *exp);
- int (*f_shexp_casecmp)(char *str, char *exp);
-#if defined (SHMEM_UNIX_MMAP) || defined (SHMEM_WIN32_MMAP)
- shmem_s *(*f_shmem_alloc)(char *name, int size, int expose);
- void (*f_shmem_free)(shmem_s *region);
-#else
- void *(*f_shmem_alloc)(void);
- void (*f_shmem_free)(void);
-#endif /* SHMEM_UNIX_MMAP || SHMEM_WIN32_MMAP */
- SYS_THREAD (*f_systhread_start)(int prio, int stksz, void (*fn)(void *), void *arg);
- SYS_THREAD (*f_systhread_current)(void);
- void (*f_systhread_yield)(void);
- SYS_THREAD (*f_systhread_attach)(void);
- void (*f_systhread_detach)(SYS_THREAD thr);
- void (*f_systhread_terminate)(SYS_THREAD thr);
- void (*f_systhread_sleep)(int milliseconds);
- void (*f_systhread_init)(char *name);
- void (*f_systhread_timerset)(int usec);
- int (*f_systhread_newkey)(void);
- void *(*f_systhread_getdata)(int key);
- void (*f_systhread_setdata)(int key, void *data);
- void (*f_systhread_set_default_stacksize)(unsigned long size);
- int (*f_util_getline)(filebuffer *buf, int lineno, int maxlen, char *l);
- char **(*f_util_env_create)(char **env, int n, int *pos);
- char *(*f_util_env_str)(char *name, char *value);
- void (*f_util_env_replace)(char **env, char *name, char *value);
- void (*f_util_env_free)(char **env);
- char **(*f_util_env_copy)(char **src, char **dst);
- char *(*f_util_env_find)(char **env, char *name);
- char *(*f_util_hostname)(void);
- int (*f_util_chdir2path)(char *path);
- int (*f_util_is_mozilla)(char *ua, char *major, char *minor);
- int (*f_util_is_url)(char *url);
- int (*f_util_later_than)(struct tm *lms, char *ims);
- int (*f_util_time_equal)(struct tm *lms, char *ims);
- int (*f_util_str_time_equal)(char *t1, char *t2);
- int (*f_util_uri_is_evil)(char *t);
- void (*f_util_uri_parse)(char *uri);
- void (*f_util_uri_unescape)(char *s);
- char *(*f_util_uri_escape)(char *d, char *s);
- char *(*f_util_url_escape)(char *d, char *s);
- char *(*f_util_sh_escape)(char *s);
- int (*f_util_mime_separator)(char *sep);
- int (*f_util_itoa)(int i, char *a);
- int (*f_util_vsprintf)(char *s, register const char *fmt, va_list args);
- int (*f_util_sprintf)(char *s, const char *fmt, ...);
- int (*f_util_vsnprintf)(char *s, int n, register const char *fmt,
- va_list args);
- int (*f_util_snprintf)(char *s, int n, const char *fmt, ...);
- int (*f_util_strftime)(char *s, const char *format, const struct tm *t);
- char *(*f_util_strtok)(char *s1, const char *s2, char **lasts);
- struct tm *(*f_util_localtime)(const time_t *clock, struct tm *res);
- char *(*f_util_ctime)(const time_t *clock, char *buf, int buflen);
- char *(*f_util_strerror)(int errnum, char *msg, int buflen);
- struct tm *(*f_util_gmtime)(const time_t *clock, struct tm *res);
- char *(*f_util_asctime)(const struct tm *tm,char *buf, int buflen);
-#ifdef NEED_STRCASECMP
- int (*f_util_strcasecmp)(CASECMPARG_T char *one, CASECMPARG_T char *two);
-#else
- int (*f_util_strcasecmp)(void);
-#endif /* NEED_STRCASECMP */
-#ifdef NEED_STRNCASECMP
- int (*f_util_strncasecmp)(CASECMPARG_T char *one, CASECMPARG_T char *two, int n);
-#else
- int (*f_util_strncasecmp)(void);
-#endif /* NEED_STRNCASECMP */
-#ifdef XP_UNIX
- int (*f_util_can_exec)(struct stat *finfo, uid_t uid, gid_t gid);
- struct passwd *(*f_util_getpwnam)(const char *name, struct passwd
- *result, char *buffer, int buflen);
- pid_t (*f_util_waitpid)(pid_t pid, int *statptr, int options);
-#else
- int (*f_util_can_exec)(void);
- void *(*f_util_getpwnam)(void);
- int (*f_util_waitpid)(void);
-#endif /* XP_UNIX */
-#ifdef XP_WIN32
- VOID (*f_util_delete_directory)(char *FileName, BOOL delete_directory);
-#else
- void (*f_util_delete_directory)(void);
-#endif /* XP_WIN32 */
- char *(*f_conf_init)(char *cfn);
- char *(*f_conf_run_init_functions)(void);
- void (*f_conf_terminate)(void);
- conf_global_vars_s *(*f_conf_getglobals)(void);
- void (*f_func_init)(struct FuncStruct *func_standard);
- FuncPtr (*f_func_find)(char *name);
- int (*f_func_exec)(pblock *pb, Session *sn, Request *rq);
- struct FuncStruct *(*f_func_insert)(char *name, FuncPtr fn);
- int (*f_object_execute)(directive *inst, Session *sn, void *rq);
- Request *(*f_http_find_request)(netbuf *buf, Session *sn, int *reply);
- int (*f_http_parse_request)(char *t, Request *rq, Session *sn);
- int (*f_http_scan_headers)(Session *sn, netbuf *buf, char *t,
- pblock *headers);
- int (*f_http_start_response)(Session *sn, Request *rq);
- char **(*f_http_hdrs2env)(pblock *pb);
- void (*f_http_status)(Session *sn, Request *rq, int n, char *r);
- int (*f_http_set_finfo)(Session *sn, Request *rq, struct stat *finfo);
- char *(*f_http_dump822)(pblock *pb, char *t, int *pos, int tsz);
- void (*f_http_finish_request)(Session *sn, Request *rq);
- void (*f_http_handle_session)(Session *sn);
- char *(*f_http_uri2url)(const char *prefix, const char *suffix);
- char *(*f_http_uri2url_dynamic)(const char *prefix, const char *suffix,
- Session *sn, Request *rq);
- void (*f_http_set_keepalive_timeout)(int secs);
- int (*f_log_error_v)(int degree, char *func, Session *sn, Request *rq,
- char *fmt, va_list args);
- int (*f_log_error)(int degree, char *func, Session *sn, Request *rq,
- char *fmt, ...);
- int (*f_log_ereport_v)(int degree, char *fmt, va_list args);
- int (*f_log_ereport)(int degree, char *fmt, ...);
- httpd_object *(*f_object_create)(int nd, pblock *name);
- void (*f_object_free)(httpd_object *obj);
- void (*f_object_add_directive)(int dc, pblock *p, pblock *c,
- httpd_object *obj);
- httpd_objset *(*f_objset_scan_buffer)(filebuffer *buf, char *errstr,
- httpd_objset *os);
- httpd_objset *(*f_objset_create)(void);
- void (*f_objset_free)(httpd_objset *os);
- void (*f_objset_free_setonly)(httpd_objset *os);
- httpd_object *(*f_objset_new_object)(pblock *name, httpd_objset *os);
- void (*f_objset_add_object)(httpd_object *obj, httpd_objset *os);
- void (*f_objset_add_init)(pblock *initfn, httpd_objset *os);
- httpd_object *(*f_objset_findbyname)(char *name, httpd_objset *ign,
- httpd_objset *os);
- httpd_object *(*f_objset_findbyppath)(char *ppath, httpd_objset *ign,
- httpd_objset *os);
- Request *(*f_request_create)(void);
- void (*f_request_free)(Request *req);
- Request *(*f_request_restart_internal)(char *uri, Request *rq);
- int (*f_request_header)(char *name, char **value, Session *sn,
- Request *rq);
- struct stat *(*f_request_stat_path)(char *path, Request *rq);
- char *(*f_conf_getServerString)(void);
- FuncPtr (*f_func_replace)(char *funcname, FuncPtr fn);
- int (*f_net_socketpair)(SYS_NETFD *pair);
-#ifdef XP_UNIX
- SYS_NETFD (*f_net_dup2)(SYS_NETFD prfd, int osfd);
- int (*f_net_is_STDOUT)(SYS_NETFD prfd);
- int (*f_net_is_STDIN)(SYS_NETFD prfd);
-#else
- void *(*f_net_dup2)(void);
- int (*f_net_is_STDOUT)(void);
- int (*f_net_is_STDIN)(void);
-#endif /* XP_UNIX */
- int (*f_func_set_native_thread_flag)(char *name, int flags);
- void *(*f_random_create)(void);
- void (*f_random_update)(void *rctx, unsigned char *inbuf, int length);
- void (*f_random_generate)(void *rctx, unsigned char *outbuf, int length);
- void (*f_random_destroy)(void *rctx);
- void *(*f_md5hash_create)(void);
- void *(*f_md5hash_copy)(void *hctx);
- void (*f_md5hash_begin)(void *hctx);
- void (*f_md5hash_update)(void *hctx, unsigned char *inbuf, int length);
- void (*f_md5hash_end)(void *hctx, unsigned char *outbuf);
- void (*f_md5hash_destroy)(void *hctx);
- void (*f_md5hash_data)(unsigned char *outbuf, unsigned char *src, int length);
- int (*f_ACL_SetupEval)(struct ACLListHandle *acllist, Session *sn, Request *rq, char **rights, char **map_generic, const char *user);
- int (*f_netbuf_getbytes)(netbuf *buf, char *buffer, int size);
- char *(*f_servact_translate_uri)(char *uri, Session *sn);
-
-};
-
-/* --- End dispatch vector table definition --- */
-
-/* --- Begin API macro definitions --- */
-
-#ifndef INTNSAPI
-
-#define system_version (*__nsapi30_table->f_system_version)
-
-/*
- Depending on the system, memory allocated via these macros may come from
- an arena. If these functions are called from within an Init function, they
- will be allocated from permanent storage. Otherwise, they will be freed
- when the current request is finished.
- */
-
-#define MALLOC (*__nsapi30_table->f_system_malloc)
-#define system_malloc (*__nsapi30_table->f_system_malloc)
-
-#define CALLOC (*__nsapi30_table->f_system_calloc)
-#define system_calloc (*__nsapi30_table->f_system_calloc)
-
-#define REALLOC (*__nsapi30_table->f_system_realloc)
-#define system_realloc (*__nsapi30_table->f_system_realloc)
-
-#define FREE (*__nsapi30_table->f_system_free)
-#define system_free (*__nsapi30_table->f_system_free)
-
-#define STRDUP (*__nsapi30_table->f_system_strdup)
-#define system_strdup (*__nsapi30_table->f_system_strdup)
-
-#ifndef NS_MALLOC_DEBUG
-
-/*
- These macros always provide permanent storage, for use in global variables
- and such. They are checked at runtime to prevent them from returning NULL.
- */
-
-#define PERM_MALLOC (*__nsapi30_table->f_system_malloc_perm)
-#define system_malloc_perm (*__nsapi30_table->f_system_malloc_perm)
-
-#define PERM_CALLOC (*__nsapi30_table->f_system_calloc_perm)
-#define system_calloc_perm (*__nsapi30_table->f_system_calloc_perm)
-
-#define PERM_REALLOC (*__nsapi30_table->f_system_realloc_perm)
-#define system_realloc_perm (*__nsapi30_table->f_system_realloc_perm)
-
-#define PERM_FREE (*__nsapi30_table->f_system_free_perm)
-#define system_free_perm (*__nsapi30_table->f_system_free_perm)
-
-#define PERM_STRDUP (*__nsapi30_table->f_system_strdup_perm)
-#define system_strdup_perm (*__nsapi30_table->f_system_strdup_perm)
-
-#endif /* !NS_MALLOC_DEBUG */
-
-/* Thread-Private data key index for accessing the thread-private memory pool.
- * Each thread creates its own pool for allocating data. The MALLOC/FREE/etc
- * macros have been defined to check the thread private data area with the
- * thread_malloc_key index to find the address for the pool currently in use.
- *
- * If a thread wants to use a different pool, it must change the thread-local-
- * storage[thread_malloc_key].
- */
-
-#define getThreadMallocKey (*__nsapi30_table->f_getThreadMallocKey)
-
-#define magnus_atrestart (*__nsapi30_table->f_magnus_atrestart)
-
-/*
- * buffer_open opens a new buffer reading the specified file, with an I/O
- * buffer of size sz, and returns a new buffer structure which will hold
- * the data.
- *
- * If FILE_UNIX_MMAP is defined, this may return NULL. If it does, check
- * system_errmsg to get a message about the error.
- */
-
-#define filebuf_open (*__nsapi30_table->f_filebuf_open)
-#define netbuf_open (*__nsapi30_table->f_netbuf_open)
-
-/*
- * filebuf_open_nostat is a convenience function for mmap() buffer opens,
- * if you happen to have the stat structure already.
- */
-
-#ifdef FILE_MMAP
-#define filebuf_open_nostat (*__nsapi30_table->f_filebuf_open_nostat)
-#endif /* FILE_MMAP */
-
-/*
- * filebuf_create is a convenience function if the file is already open
- * or mmap'd. It creates a new filebuf for use with the mmap'd file.
- * If mmap_ptr is NULL, or MMAP is not supported on this system, it
- * creates a buffer with buffer size bufsz.
- */
-
-#define filebuf_create (*__nsapi30_table->f_filebuf_create)
-
-/*
- * filebuf_close_buffer is provided to cleanup a filebuf without closing
- * the underlying file. If clean_mmap is 1, and the file is memory mapped,
- * the file will be unmapped. If clean_mmap is 0, the file will not
- * be unmapped.
- */
-#define filebuf_close_buffer (*__nsapi30_table->f_filebuf_close_buffer)
-
-#ifdef FILE_MMAP
-#define filebuf_open_nostat (*__nsapi30_table->f_filebuf_open_nostat)
-#endif
-
-#ifdef XP_WIN32
-#define pipebuf_open (*__nsapi30_table->f_pipebuf_open)
-#endif /* XP_WIN32 */
-
-/*
- * buffer_next loads size more bytes into the given buffer and returns the
- * first one, or BUFFER_EOF on EOF and BUFFER_ERROR on error.
- */
-
-#ifndef FILE_MMAP
-#define filebuf_next (*__nsapi30_table->f_filebuf_next)
-#endif /* !FILE_MMAP */
-#define netbuf_next (*__nsapi30_table->f_netbuf_next)
-#ifdef XP_WIN32
-#define pipebuf_next (*__nsapi30_table->f_pipebuf_next)
-#endif /* XP_WIN32 */
-
-/*
- * buffer_close deallocates a buffer and closes its associated files
- * (does not close a network socket).
- */
-
-#define filebuf_close (*__nsapi30_table->f_filebuf_close)
-#define netbuf_close (*__nsapi30_table->f_netbuf_close)
-#ifdef XP_WIN32
-#define pipebuf_close (*__nsapi30_table->f_pipebuf_close)
-#endif /* XP_WIN32 */
-
-/*
- * buffer_grab will set the buffer's inbuf array to an array of sz bytes
- * from the buffer's associated object. It returns the number of bytes
- * actually read (between 1 and sz). It returns IO_EOF upon EOF or IO_ERROR
- * upon error. The cursize entry of the structure will reflect the size
- * of the iobuf array.
- *
- * The buffer will take care of allocation and deallocation of this array.
- */
-
-#define filebuf_grab (*__nsapi30_table->f_filebuf_grab)
-#define netbuf_grab (*__nsapi30_table->f_netbuf_grab)
-#ifdef XP_WIN32
-#define pipebuf_grab (*__nsapi30_table->f_pipebuf_grab)
-#endif /* XP_WIN32 */
-
-/*
- * netbuf_getbytes will read bytes from the netbuf into the user
- * supplied buffer. Up to size bytes will be read.
- * If the call is successful, the number of bytes read is returned.
- * NETBUF_EOF is returned when no more data will arrive on the socket,
- * and NETBUF_ERROR is returned in the event of an error.
- *
- */
-#define netbuf_getbytes (*__nsapi30_table->f_netbuf_getbytes)
-
-
-/*
- * netbuf_buf2sd will send n bytes from the (probably previously read)
- * buffer and send them to sd. If sd is -1, they are discarded. If n is
- * -1, it will continue until EOF is recieved. Returns IO_ERROR on error
- * and the number of bytes sent any other time.
- */
-
-#define netbuf_buf2sd (*__nsapi30_table->f_netbuf_buf2sd)
-
-/*
- * filebuf_buf2sd assumes that nothing has been read from the filebuf,
- * and just sends the file out to the given socket. Returns IO_ERROR on error
- * and the number of bytes sent otherwise.
- *
- * Does not currently support you having read from the buffer previously. This
- * can be changed transparently.
- */
-
-#define filebuf_buf2sd (*__nsapi30_table->f_filebuf_buf2sd)
-
-#ifdef XP_WIN32
-
-/*
- * NT pipe version of filebuf_buf2sd.
- */
-#define pipebuf_buf2sd (*__nsapi30_table->f_pipebuf_buf2sd)
-
-/*
- * NT pipe version of netbuf_buf2sd.
- */
-
-#define pipebuf_netbuf2sd (*__nsapi30_table->f_pipebuf_netbuf2sd)
-#define pipebuf_netbuf2pipe (*__nsapi30_table->f_pipebuf_netbuf2pipe)
-#endif /* XP_WIN32 */
-
-/*
- * Notes:
- *
- * Format of a mime.types file
- *
- * A mime.types file passed to cinfo_merge() should begin with
- * a line containing NCC_MT_MAGIC as defined below (MCC_MT_MAGIC
- * is also still supported). Lines containing only whitespace
- * and lines beginning with "#" are ignored. Other lines contain
- * one or more name/value pairs, separated by whitespace. The
- * format of each of these is NAME=VALUE, where NAME is one of:
- *
- * type - VALUE is a mime type, e.g. text/html
- * exts - VALUE is a list of file extensions, e.g. htm,html
- * enc - VALUE specifies a content encoding, e.g. x-gzip
- * lang - VALUE specifies a content language, e.g. en-US
- * (see RFC1766)
- *
- * The VALUE may be enclosed in quotes (" "), and should be if it
- * contains whitespace.
- *
- * Each line in the file that contains at least one name/value
- * pair causes a cinfo structure to be created, containing the
- * specified information. These structures are kept in memory
- * and can be queried using cinfo_find().
- *
- * Related information
- *
- * See the NSAPI "load-types" function.
- */
-
-/*
- * Function: cinfo_init
- *
- * Description:
- *
- * This function initializes the memory resident content information
- * database to be empty.
- *
- * Notes:
- *
- * This function is called by the NSAPI "load-types" function,
- * which also sets up a call to cinfo_terminate() on server restart.
- * If "load-types" is used, it should be unnecessary to call this
- * function.
- */
-
-#define cinfo_init (*__nsapi30_table->f_cinfo_init)
-
-/*
- * Function: cinfo_terminate
- *
- * Description:
- *
- * This function frees all dynamic memory associated with the
- * memory resident content information database, and leaves the
- * database empty. cinfo_init() should be called before using
- * the database again.
- */
-
-#define cinfo_terminate (*__nsapi30_table->f_cinfo_terminate)
-
-/*
- * Function: cinfo_merge
- *
- * Description:
- *
- * This function reads a mime.types formatted file of the specified
- * name. Content information in the file is merged into the
- * memory resident content information database.
- *
- * Arguments:
- *
- * fn - name of mime.types formatted file
- *
- * Returns:
- *
- * If successful, NULL is returned. If an error occurs, the return
- * value is a pointer to a descriptive error string, which should
- * be freed by the caller (using FREE()). Information processed
- * prior to the error will still be added to the database.
- */
-
-#define cinfo_merge (*__nsapi30_table->f_cinfo_merge)
-
-
-/*
- * Function: cinfo_find
- *
- * Description:
- *
- * This function is used to retrieve content information based on
- * a file extension contained in the argument string, which might
- * be either a URI or a file name. It ignores any text up to and
- * including the last FILE_PATHSEP character in the argument
- * string. It looks for one or more file extensions in the
- * remaining string, each one starting with a CINFO_SEPARATOR
- * character. Each file extension is looked up in the database
- * and any information found there is used to build a composite
- * cinfo structure, containing information derived from each of
- * the file extensions. If more than one file extensions present
- * have a particular piece of information associated with them
- * in the database (e.g. type or language), the value returned in
- * the composite cinfo structure is taken from the data for the
- * last file extension to provide that attribute.
- *
- * Arguments:
- *
- * uri - pointer to the argument string
- *
- * Returns:
- *
- * If successful, a pointer to the composite cinfo structure is
- * returned. The fields of this structure reference values of
- * those fields in one or more cinfo structures in the database,
- * so these values should be copied if they are going to be
- * modified. The cinfo structure itself should be freed by the
- * caller using FREE(). If an error occurs, a null pointer is
- * returned. If no information is found for any of the extensions,
- * a null pointer is returned, although this is not necessarily
- * an error.
- *
- * Notes:
- *
- * The matching of extensions in the argument string to extensions
- * in the database is case-insensitive.
- *
- * The argument string is modified during parsing, but only
- * temporarily. It should be intact on return.
- */
-
-#define cinfo_find (*__nsapi30_table->f_cinfo_find)
-
-/*
- * Function: cinfo_lookup
- *
- * Description:
- *
- * This function returns a pointer to the last cinfo structure
- * added to the database for a specified mime type. Unlike
- * cinfo_find(), the returned pointer references a cinfo structure
- * that is part of the database, and corresponds to a single line
- * in a mime.types file. This structure should be considered
- * read-only, and should not be freed by the caller.
- *
- * Arguments:
- *
- * type - a pointer to a mime type string
- *
- * Returns:
- *
- * If the specified type is found, a pointer to the cinfo structure
- * returned. Otherwise a null pointer is returned.
- *
- * Notes:
- *
- * The search for the type is case-insensitive.
- */
-
-#define cinfo_lookup (*__nsapi30_table->f_cinfo_lookup)
-
-/*
- * Function: cinfo_dump_database
- *
- * Description:
- *
- * This function outputs, to a specified file, formatted text
- * describing the contents of the content information database.
- * This is intended for debugging purposes. It is not in mime.types
- * format.
- *
- * Arguments:
- *
- * dump - handle for already open output file
- */
-
-#define cinfo_dump_database (*__nsapi30_table->f_cinfo_dump_database)
-
-/*
- * Critical section abstraction. Used in threaded servers to protect
- * areas where two threads can interfere with each other.
- *
- * Condvars are condition variables that are used for thread-thread
- * synchronization.
- */
-
-/*
- * crit_init creates and returns a new critical section variable. At the
- * time of creation no one has entered it.
- */
-#define crit_init (*__nsapi30_table->f_crit_init)
-
-/*
- * crit_enter enters a critical section. If someone is already in the
- * section, the calling thread is blocked until that thread exits.
- */
-#define crit_enter (*__nsapi30_table->f_crit_enter)
-
-/*
- * crit_exit exits a critical section. If another thread is blocked waiting
- * to enter, it will be unblocked and given ownership of the section.
- */
-#define crit_exit (*__nsapi30_table->f_crit_exit)
-
-/*
- * crit_terminate removes a previously allocated critical section variable.
- */
-#define crit_terminate (*__nsapi30_table->f_crit_terminate)
-
-/*
- * condvar_init initializes and returns a new condition variable. You
- * must provide a critical section to be associated with this condition
- * variable.
- */
-#define condvar_init (*__nsapi30_table->f_condvar_init)
-
-/*
- * condvar_wait blocks on the given condition variable. The calling thread
- * will be blocked until another thread calls condvar_notify on this variable.
- * The caller must have entered the critical section associated with this
- * condition variable prior to waiting for it.
- */
-#define condvar_wait (*__nsapi30_table->f_condvar_wait)
-
-/*
- * condvar_notify awakens any threads blocked on the given condition
- * variable. The caller must have entered the critical section associated
- * with this variable first.
- */
-#define condvar_notify (*__nsapi30_table->f_condvar_notify)
-
-/*
- * condvar_notify awakens all threads blocked on the given condition
- * variable. The caller must have entered the critical section associated
- * with this variable first.
- */
-#define condvar_notifyAll (*__nsapi30_table->f_condvar_notifyAll)
-
-/*
- * condvar_terminate frees the given previously allocated condition variable
- */
-#define condvar_terminate (*__nsapi30_table->f_condvar_terminate)
-
-/*
- * Create a counting semaphore.
- * Return non-zero on success, 0 on failure.
- */
-#define cs_init (*__nsapi30_table->f_cs_init)
-
-/*
- * Destroy a counting semaphore
- */
-#define cs_terminate (*__nsapi30_table->f_cs_terminate)
-
-/*
- * Wait to "enter" the semaphore.
- * Return 0 on success, -1 on failure.
- */
-#define cs_wait (*__nsapi30_table->f_cs_wait)
-
-/*
- * Enter the semaphore if the count is > 0. Otherwise return -1.
- *
- */
-#define cs_trywait (*__nsapi30_table->f_cs_trywait)
-
-/*
- * Release the semaphore- allowing a thread to enter.
- * Return 0 on success, -1 on failure.
- */
-#define cs_release (*__nsapi30_table->f_cs_release)
-
-/*
- * daemon_atrestart registers a function to be called fn, with the given
- * void pointer as an argument, when the server is restarted.
- */
-#define daemon_atrestart (*__nsapi30_table->f_daemon_atrestart)
-
-#define servssl_init (*__nsapi30_table->f_servssl_init)
-
-/*
- * ereport logs an error of the given degree and formats the arguments with
- * the printf() style fmt. Returns whether the log was successful. Records
- * the current date.
- */
-
-#define ereport (*__nsapi30_table->f_ereport)
-#define ereport_v (*__nsapi30_table->f_ereport_v)
-
-/*
- * ereport_init initializes the error logging subsystem and opens the static
- * file descriptors. It returns NULL upon success and an error string upon
- * error. If a userpw is given, the logs will be chowned to that user.
- *
- * email is the address of a person to mail upon catastrophic error. It
- * can be NULL if no e-mail is desired. ereport_init will not duplicate
- * its own copy of this string; you must make sure it stays around and free
- * it when you shut down the server.
- */
-
-#define ereport_init (*__nsapi30_table->f_ereport_init)
-
-/*
- * log_terminate closes the error and common log file descriptors.
- */
-#define ereport_terminate (*__nsapi30_table->f_ereport_terminate)
-
-/* For restarts */
-#define ereport_getfd (*__nsapi30_table->f_ereport_getfd)
-
-/* FUNCTION: system_fopenXX
- * DESCRIPTION:
- * system_fopenRO - Open a disk file for read-only access.
- * system_fopenWA - Open a disk file for write and append access.
- * system_fopenRW - Open a disk file for read-write access.
- * system_fopenWT - Open a disk file for write and truncate access.
- * INPUTS:
- * path- the name of the file
- * OUTPUTS:
- * none
- * RETURNS:
- * SYS_ERRORFD on failure
- * A opaque file handle on success
- * RESTRICTIONS:
- * The return from this function should not be interpreted as a native
- * file handle. It may only be used in other calls to system_xxx().
- *
- * Note for unix programmers: Although this routine is called
- * "system_fopen" do not consider it to be equivalent to the unix
- * "fopen" call, which opens a buffered-IO file.
- */
-#define system_fopenRO (*__nsapi30_table->f_system_fopenRO)
-#define system_fopenWA (*__nsapi30_table->f_system_fopenWA)
-#define system_fopenRW (*__nsapi30_table->f_system_fopenRW)
-#define system_fopenWT (*__nsapi30_table->f_system_fopenWT)
-
-/* FUNCTION: system_fread
- * DESCRIPTION:
- * Read from a file
- * INPUTS:
- * fd- an open file handle to read from
- * buf- a buffer to receive data
- * sz- the number of bytes to read from the file
- * OUTPUTS:
- * none
- * RETURNS:
- * less-than-zero on failure
- * 0 for end-of-file
- * positive for number of bytes read
- * RESTRICTIONS:
- */
-#define system_fread (*__nsapi30_table->f_system_fread)
-
-/* FUNCTION: system_write
- * DESCRIPTION:
- * Writes sz bytes from buf to file fd.
- * INPUTS:
- * fd- the file to write to
- * buf- the buffer containing data to be written
- * sz- the size of data to write.
- * OUTPUTS:
- * none
- * RETURNS:
- * IO_OKAY on success
- * IO_ERROR on failure
- * RESTRICTIONS:
- * There is no way to determine if bytes were written when this call fails.
- * For more specific information, use PR_WRITE().
- */
-#define system_fwrite (*__nsapi30_table->f_system_fwrite)
-
-/* FUNCTION: system_fwrite_atomic
- * DESCRIPTION:
- * system_fwrite_atomic locks the given fd before writing to it. This
- * avoids interference between simultaneous writes.
- * INPUTS:
- * fd- the file to write to
- * buf- the buffer containing data to be written
- * sz- the size of data to write.
- * OUTPUTS:
- * none
- * RETURNS:
- * IO_OKAY on success
- * IO_ERROR on failure
- * RESTRICTIONS:
- */
-#define system_fwrite_atomic (*__nsapi30_table->f_system_fwrite_atomic)
-
-/* FUNCTION: system_lseek
- * DESCRIPTION:
- * Seek to a position in a file
- * INPUTS:
- * fd- an open file handle
- * off
- * wh
- * OUTPUTS:
- * RETURNS:
- * RESTRICTIONS:
- */
-#define system_lseek (*__nsapi30_table->f_system_lseek)
-
-/* FUNCTION: system_fclose
- * DESCRIPTION:
- * Close a file.
- * INPUTS:
- * fd- an open file handle from a previous system_fopenXX call.
- * OUTPUTS:
- * none
- * RETURNS:
- * IO_OKAY on success
- * IO_ERROR on failure
- * RESTRICTIONS:
- */
-#define system_fclose (*__nsapi30_table->f_system_fclose)
-
-/* FUNCTION: system_stat
- * DESCRIPTION:
- * Get information about a file on disk
- * INPUTS:
- * name- the name of the file to be queried
- * OUTPUTS:
- * finfo- a buffer to receive the file information.
- * RETURN:
- * less-than-zero on failure.
- * 0 on success.
- * RESTRICTIONS:
- * Within the stat structure, this routine is only guaranteed to return
- * st_mode, st_size, st_ctime, and st_mtime. Other stat fields are
- * undefined.
- */
-#define system_stat (*__nsapi30_table->f_system_stat)
-
-/* --- File manipulation --------------------------------------------- */
-
-/* FUNCTION: system_rename
- * DESCRIPTION:
- * Rename a file on disk.
- * INPUTS:
- * oldpath- old file name
- * newpath- new file name
- * OUTPUTS:
- * none
- * RETURNS:
- * less-than-zero on failure
- * 0 on success
- * RESTRICTIONS:
- * Not guaranteed to work portably on files which are in use.
- */
-#define system_rename (*__nsapi30_table->f_system_rename)
-
-/* FUNCTION: system_unlink
- * DESCRIPTION:
- * Remove a file from disk.
- * INPUTS:
- * path- the file to delete
- * OUTPUTS:
- * none
- * RETURNS:
- * less-than-zero on failure
- * 0 on success
- * RESTRICTIONS:
- * Not guaranteed to work portably on files which are in use.
- */
-#define system_unlink (*__nsapi30_table->f_system_unlink)
-
-/* --- File locking -------------------------------------------------- */
-
-#define system_initlock(fd) (0)
-
-/* FUNCTION: system_tlock
- * DESCRIPTION:
- * Test for a file lock and grab it if it is available
- * INPUTS:
- * fd- the file to lock
- * OUTPUTS:
- * none
- * RETURNS:
- * 0 - if we now hold the lock
- * less-than-zero if the lock is held by someone else
- * RESTRICTIONS:
- * 1. file locking is process based. Two threads in the same process
- * requesting exclusive access will both be allowed to access the file
- * at the same time.
- */
-#define system_tlock (*__nsapi30_table->f_system_tlock)
-
-/* FUNCTION: system_flock
- * DESCRIPTION:
- * Wait for exclusive access to a file
- * INPUTS:
- * fd- the file to lock
- * OUTPUTS:
- * none
- * RETURNS:
- * 0 - if we now hold the lock
- * less-than-zero if an error occurred
- * RESTRICTIONS:
- * 1. file locking is process based. Two threads in the same process
- * requesting exclusive access will both be allowed to access the file
- * at the same time.
- */
-#define system_flock (*__nsapi30_table->f_system_flock)
-
-/* FUNCTION: system_ulock
- * DESCRIPTION:
- * Release exclusive access to a file
- * INPUTS:
- * fd- the file to lock
- * OUTPUTS:
- * none
- * RETURNS:
- * 0 - if we released the lock
- * less-than-zero if an error occurred
- * RESTRICTIONS:
- * 1. file locking is process based. Two threads in the same process
- * requesting exclusive access will both be allowed to access the file
- * at the same time.
- */
-#define system_ulock (*__nsapi30_table->f_system_ulock)
-
-/* --- Directory manipulation routines ---------------------------------- */
-
-#ifdef XP_WIN32
-#define dir_open (*__nsapi30_table->f_dir_open)
-#define dir_read (*__nsapi30_table->f_dir_read)
-#define dir_close (*__nsapi30_table->f_dir_close)
-#endif /* XP_WIN32 */
-
-/*
- * create a directory and any of its parents
- */
-#define dir_create_all (*__nsapi30_table->f_dir_create_all)
-
-#ifdef XP_WIN32
-#define system_winsockerr (*__nsapi30_table->f_system_winsockerr)
-#define system_winerr (*__nsapi30_table->f_system_winerr)
-#define system_pread (*__nsapi30_table->f_system_pread)
-#define system_pwrite (*__nsapi30_table->f_system_pwrite)
-#define file_unix2local (*__nsapi30_table->f_file_unix2local)
-#endif /* XP_WIN32 */
-
-#define system_nocoredumps (*__nsapi30_table->f_system_nocoredumps)
-#define file_setinherit (*__nsapi30_table->f_file_setinherit)
-#define file_notfound (*__nsapi30_table->f_file_notfound)
-#define system_errmsg (*__nsapi30_table->f_system_errmsg)
-#define system_errmsg_fn (*__nsapi30_table->f_system_errmsg_fn)
-
-/* FUNCTION: net_socket
- * DESCRIPTION:
- * Create a new socket.
- * INPUTS:
- * domain- only supported type is AF_INET
- * type- only supported type is SOCK_STREAM
- * protocol- only supported value is 0
- * OUTPUTS:
- * none
- * RETURNS:
- * SYS_NET_ERRORFD on errro
- * a valid SYS_NETFD on success
- * RESTRICTIONS:
- */
-#define net_socket (*__nsapi30_table->f_net_socket)
-
-/* FUNCTION: net_listen
- * DESCRIPTION:
- * Set listen backlog for a socket.
- * INPUTS:
- * s- the socket
- * backlog- value of backlog to set
- * OUTPUTS:
- * RETURNS:
- * 0 on success
- * less-than-zero on failure
- * RESTRICTIONS:
- * Some systems do not return errors even when the requested backlog
- * cannot be set (it is too high). Consult your system manual for
- * details on the maximum value of the backlog.
- */
-#define net_listen (*__nsapi30_table->f_net_listen)
-
-/* FUNCTION: net_create_listener
- * DESCRIPTION:
- * Creates a socket for accepting new connection.
- * INPUTS:
- * OUTPUTS:
- * RETURNS:
- * SYS_NET_ERRORFD on error.
- * RESTRICTIONS:
- * This is a convenience routine which creates a socket, binds to
- * an IP address and port, and sets the listen backlog to
- * net_listenqsize.
- */
-#define net_create_listener (*__nsapi30_table->f_net_create_listener)
-
-/* FUNCTION: net_connect
- * DESCRIPTION:
- * Connect a socket to a remote listener
- * INPUTS:
- * OUTPUTS:
- * RETURNS:
- * 0 on success
- * less-than-zero on error
- * RESTRICTIONS:
- */
-#define net_connect (*__nsapi30_table->f_net_connect)
-
-/* FUNCTION: net_getpeername
- * DESCRIPTION:
- * Get the socket address (IP address/port) of the remote host.
- * INPUTS:
- * s- the socket
- * name - the socket address of the remote
- * OUTPUTS:
- * RETURNS:
- * RESTRICTIONS:
- */
-#define net_getpeername (*__nsapi30_table->f_net_getpeername)
-
-/* FUNCTION: net_close
- * DESCRIPTION:
- * Close an open socket
- * INPUTS:
- * s- the socket to close
- * OUTPUTS:
- * none
- * RETURNS:
- * 0 on success
- * less-than-zero on failure
- * RESTRICTIONS:
- */
-#define net_close (*__nsapi30_table->f_net_close)
-
-/* FUNCTION: net_bind
- * DESCRIPTION:
- * Bind to a socket address
- * INPUTS:
- * s-
- * name-
- * namelen-
- * OUTPUTS:
- * RETURNS:
- * RESTRICTIONS:
- */
-#define net_bind (*__nsapi30_table->f_net_bind)
-
-/* FUNCTION: net_accept
- * DESCRIPTION:
- * Accept a connection on a listener socket.
- * INPUTS:
- * s
- * addr
- * OUTPUTS:
- * addrlen
- * RETURNS:
- * RESTRICTIONS:
- */
-#define net_accept (*__nsapi30_table->f_net_accept)
-
-/* FUNCTION: net_read
- * DESCRIPTION:
- * sd
- * buf
- * sz
- * timeout
- * INPUTS:
- * OUTPUTS:
- * RETURNS:
- * IO_ERROR on error
- * 0 if the remote closes the socket
- * positive representing the number of bytes successfully read
- * RESTRICTIONS:
- * timeout must be NET_ZERO_TIMEOUT, NET_INFINITE_TIMEOUT, or a positive
- * value in seconds
- */
-#define net_read (*__nsapi30_table->f_net_read)
-
-/* FUNCTION: net_write
- * DESCRIPTION:
- * Write data to a socket.
- * INPUTS:
- * sd
- * buf
- * sz
- * OUTPUTS:
- * RETURNS:
- * RESTRICTIONS:
- * net_write() is unbuffered. Specifying many calls to net_write() for
- * small amounts of data is inefficient.
- */
-#define net_write (*__nsapi30_table->f_net_write)
-
-/* FUNCTION: net_writev
- * DESCRIPTION:
- * Write vectored data to the socket.
- * INPUTS:
- * OUTPUTS:
- * RETURNS:
- * RESTRICTIONS:
- * net_writev() is unbuffered. Specifying many calls to net_writev() for
- * small amounts of data is inefficient.
- */
-#define net_writev (*__nsapi30_table->f_net_writev)
-
-/* FUNCTION: net_isalive
- * DESCRIPTION:
- * Checks to see if the given socket is still connected to a remote
- * host. The remote host does not see any side effects from this call.
- * INPUTS:
- * sd - the socket
- * OUTPUTS:
- * none
- * RETURNS:
- * 0 if the socket is no longer connected
- * 1 if the socket is still connected.
- * RESTRICTIONS:
- */
-#define net_isalive (*__nsapi30_table->f_net_isalive)
-
-/* FUNCTION: net_ip2host
- * DESCRIPTION:
- * Transforms the given textual IP number into a fully qualified domain
- * name (FQDN). This is similar to calling gethostbyaddr().
- * INPUTS:
- * verify- If 1, specifies that the function should verify the hostname
- * returned from the lookup. This is similar to calling
- * gethostbyname() on the result of the call to gethostbyaddr().
- * OUTPUTS:
- * RETURNS:
- * The fully qualified domain name, or whatever it can find.
- * If it cannot resolve the name at all, returns NULL.
- * RESTRICTIONS:
- * This function is governed by the use of the Server DNS cache. If caching
- * is enabled it can take as long as 20 minutes before this function
- * does the lookup again.
- */
-#define net_ip2host (*__nsapi30_table->f_net_ip2host)
-
-
-/* --- OBSOLETE ----------------------------------------------------------
- * The following macros/functions are obsolete and are only maintained for
- * compatibility. Do not use them.
- * -----------------------------------------------------------------------
- */
-
-/* FUNCTION: net_getsockopt
- * DESCRIPTION:
- * Get socket options
- * INPUTS:
- * OUTPUTS:
- * RETURNS:
- * RESTRICTIONS:
- * Because this function is not portable (not all systems support the
- * same options), it should be used with caution.
- */
-#define net_getsockopt (*__nsapi30_table->f_net_getsockopt)
-
-/* FUNCTION: net_setsockopt
- * DESCRIPTION:
- * Set socket options
- * INPUTS:
- * OUTPUTS:
- * RETURNS:
- * RESTRICTIONS:
- * Because this function is not portable (not all systems support the
- * same options), it should be used with caution.
- */
-#define net_setsockopt (*__nsapi30_table->f_net_setsockopt)
-
-/* FUNCTION: net_select
- * DESCRIPTION:
- * Wait for IO on a set of sockets.
- * INPUTS:
- * OUTPUTS:
- * RETURNS:
- * -1 on error
- * 0 on timeout
- * positive value representing the number of IOs ready
- * RESTRICTIONS:
- * Because this function is not portable (not all systems support the
- * same options), it should be used with caution.
- */
-#define net_select (*__nsapi30_table->f_net_select)
-
-/* FUNCTION: net_ioctl
- * DESCRIPTION:
- * Set socket options.
- * INPUTS:
- * OUTPUTS:
- * RETURNS:
- * RESTRICTIONS:
- * Because this function is not portable (not all systems support the
- * same options), it should be used with caution.
- */
-#define net_ioctl (*__nsapi30_table->f_net_ioctl)
-
-/* FUNCTION: net_socketpair
- * DESCRIPTION:
- * Creates a TCP socketpair.
- * INPUTS:
- * OUTPUTS:
- * RETURNS:
- * 0 on success
- * -1 on failure
- * RESTRICTIONS:
- * Because this function is not portable (not all systems support the
- * same options), it should be used with caution.
- */
-#define net_socketpair (*__nsapi30_table->f_net_socketpair)
-
-#ifdef XP_UNIX
-/* FUNCTION: net_dup2
- * DESCRIPTION:
- * Duplicates a socket to a specific file descriptor
- * INPUTS:
- * OUTPUTS:
- * RETURNS:
- * RESTRICTIONS:
- * Because this function is not portable (not all systems support the
- * same options), it should be used with caution.
- */
-#define net_dup2 (*__nsapi30_table->f_net_dup2)
-
-/* FUNCTION: net_is_STDOUT
- * DESCRIPTION:
- * Checks if the underlying OS file descriptor for the given
- * SYS_NETFD is the STDOUT filedescriptor
- * INPUTS:
- * OUTPUTS:
- * RETURNS:
- * 1 if it is STDOUT (1)
- * 0 otherwise
- * RESTRICTIONS:
- * Because this function is not portable (not all systems support the
- * same options), it should be used with caution.
- */
-#define net_is_STDOUT (*__nsapi30_table->f_net_is_STDOUT)
-
-/* FUNCTION: net_is_STDIN
- * DESCRIPTION:
- * Checks if the underlying OS file descriptor for the given
- * SYS_NETFD is the STDIN filedescriptor
- * INPUTS:
- * OUTPUTS:
- * RETURNS:
- * 1 if it is STDIN (0)
- * 0 otherwise
- * RESTRICTIONS:
- * Because this function is not portable (not all systems support the
- * same options), it should be used with caution.
- */
-#define net_is_STDIN (*__nsapi30_table->f_net_is_STDIN)
-#endif /* XP_UNIX */
-
-/*
- * A parameter block is a set of name=value pairs which are generally used
- * as parameters, but can be anything. They are kept in a hash table for
- * reasonable speed, but if you are doing any intensive modification or
- * access of them you should probably make a local copy of each parameter
- * while working.
- *
- * When creating a pblock, you specify the hash table size for that pblock.
- * You should set this size larger if you know that many items will be in
- * that pblock, and smaller if only a few will be used or if speed is not
- * a concern.
- */
-
-/*
- * param_create creates a parameter with the given name and value. If name
- * and value are non-NULL, they are copied and placed into the new pb_param
- * struct.
- */
-
-#define param_create (*__nsapi30_table->f_param_create)
-
-/*
- * param_free frees a given parameter if it's non-NULL, and returns 1 if
- * p was non-NULL, and 0 if p was NULL.
- *
- * Useful for error checking pblock_remove.
- */
-
-#define param_free (*__nsapi30_table->f_param_free)
-
-/*
- * pblock_create creates a new pblock with hash table size n.
- *
- * It returns the newly allocated pblock.
- */
-
-#define pblock_create (*__nsapi30_table->f_pblock_create)
-
-/*
- * pblock_free frees the given pblock and any entries inside it.
- *
- * If you want to save anything in a pblock, remove its entities with
- * pblock_remove first and save the pointers you get.
- */
-
-#define pblock_free (*__nsapi30_table->f_pblock_free)
-
-/*
- * pblock_findval finds the entry with the given name in pblock pb, and
- * returns its value, otherwise returns NULL.
- */
-
-#define pblock_findval (*__nsapi30_table->f_pblock_findval)
-
-/*
- * pblock_nvinsert creates a new parameter with the given name and value
- * and inserts it into pblock pb. The name and value in the parameter are
- * also newly allocated. Returns the pb_param it allocated (in case you
- * need it).
- *
- * pblock_nninsert inserts a numerical value.
- */
-
-#define pblock_nvinsert (*__nsapi30_table->f_pblock_nvinsert)
-#define pblock_nninsert (*__nsapi30_table->f_pblock_nninsert)
-
-/*
- * pblock_pinsert inserts a pb_param into a pblock.
- */
-
-#define pblock_pinsert (*__nsapi30_table->f_pblock_pinsert)
-
-/*
- * pblock_str2pblock scans the given string str for parameter pairs
- * name=value, or name="value". Any \ must be followed by a literal
- * character. If a string value is found, with no unescaped = signs, it
- * will be added with the name 1, 2, 3, etc. depending on whether it was
- * first, second, third, etc. in the stream (zero doesn't count).
- *
- * Returns the number of parameters added to the table, or -1 upon error.
- */
-
-#define pblock_str2pblock (*__nsapi30_table->f_pblock_str2pblock)
-
-/*
- * pblock_pblock2str places all of the parameters in the given pblock
- * into the given string (NULL if it needs creation). It will re-allocate
- * more space for the string. Each parameter is separated by a space and of
- * the form name="value"
- */
-
-#define pblock_pblock2str (*__nsapi30_table->f_pblock_pblock2str)
-
-/*
- * pblock_copy copies the entries in the given source pblock to the
- * destination one. The entries are newly allocated so that the original
- * pblock may be freed or the new one changed without affecting the other.
- */
-
-#define pblock_copy (*__nsapi30_table->f_pblock_copy)
-
-/*
- * pblock_dup creates a new pblock and copies the given source pblock
- * into it. The entries are newly allocated so that the original pblock
- * may be freed or the new one changed without affecting the other.
- */
-
-#define pblock_dup (*__nsapi30_table->f_pblock_dup)
-
-/*
- * pblock_pb2env copies the given pblock into the given environment, with
- * one new env entry for each name/value pair in the pblock.
- */
-
-#define pblock_pb2env (*__nsapi30_table->f_pblock_pb2env)
-
-/* --------------------------- Internal things ---------------------------- */
-#define pblock_fr (*__nsapi30_table->f_pblock_fr)
-#define pblock_replace (*__nsapi30_table->f_pblock_replace)
-
-/* pool_create()
- * Function to create a new pool.
- * Returns non-NULL on success, NULL on failure.
- */
-#define pool_create (*__nsapi30_table->f_pool_create)
-
-/* pool_destroy()
- * Frees all memory associated with a pool and destroys the pool.
- */
-#define pool_destroy (*__nsapi30_table->f_pool_destroy)
-
-/* pool_enabled()
- * Check if the pools are enabled and a pool is currently set
- * for this thread. Return 1 if enabled, 0 if not enabled.
- */
-#define pool_enabled (*__nsapi30_table->f_pool_enabled)
-
-#define pool_malloc (*__nsapi30_table->f_pool_malloc)
-#define pool_free (*__nsapi30_table->f_pool_free)
-#define pool_calloc (*__nsapi30_table->f_pool_calloc)
-#define pool_realloc (*__nsapi30_table->f_pool_realloc)
-#define pool_strdup (*__nsapi30_table->f_pool_strdup)
-
-/*
- * regexp_valid takes a regular expression exp as input. It returns:
- *
- * NON_REGEXP if exp is a standard string
- * (above not used -- always returns VALID_REGEXP!!)
- * INVALID_REGEXP if exp is a regular expression, but invalid
- * VALID_REGEXP if exp is a valid regular expression
- */
-
-#define regexp_valid (*__nsapi30_table->f_regexp_valid)
-
-/*
- * regexp_match
- *
- * Takes a prevalidated shell expression exp, and a string str.
- *
- * Returns 0 on match and 1 on non-match.
- */
-
-#define regexp_match (*__nsapi30_table->f_regexp_match)
-
-/*
- * regexp_cmp
- *
- * Same as above, but validates the exp first. 0 on match, 1 on non-match,
- * -1 on invalid exp. regexp_casecmp does the same thing but is case
- * insensitive.
- */
-
-#define regexp_cmp (*__nsapi30_table->f_regexp_cmp)
-#define regexp_casecmp (*__nsapi30_table->f_regexp_casecmp)
-
-/*
- * sem_init creates a semaphore using the given name and unique
- * identification number. filename should be a file accessible to the
- * process. Returns SEM_ERROR on error.
- */
-
-#define sem_init (*__nsapi30_table->f_sem_init)
-
-/*
- * sem_terminate de-allocates the given semaphore.
- */
-
-#define sem_terminate (*__nsapi30_table->f_sem_terminate)
-
-/*
- * sem_grab attempts to gain exclusive access to the given semaphore. If
- * it can't get it, the caller will block. Returns -1 on error.
- */
-
-#define sem_grab (*__nsapi30_table->f_sem_grab)
-#define sem_tgrab (*__nsapi30_table->f_sem_tgrab)
-
-/*
- * sem_release releases this process's exclusive control over the given
- * semaphore. Returns -1 on error.
- */
-
-#define sem_release (*__nsapi30_table->f_sem_release)
-
-/*
- * session_create creates a new request structure for the client with the
- * given socket descriptor and sockaddr.
- */
-
-#define session_alloc (*__nsapi30_table->f_session_alloc)
-#define session_fill (*__nsapi30_table->f_session_fill)
-#define session_create (*__nsapi30_table->f_session_create)
-
-/*
- * session_free frees the given session
- */
-
-#define session_free (*__nsapi30_table->f_session_free)
-
-#define session_dns_lookup (*__nsapi30_table->f_session_dns_lookup)
-
-/*
- * This describes the API for matching a string with a "shell expression".
- * The expressions accepted are based loosely on the expressions accepted
- * by zsh. A shell expression is a string pattern made up of ordinary
- * characters and any of the types of pattern sequences listed below.
- *
- * Pattern Matches
- * * zero or more characters
- * ? exactly one character
- * $ matches the end of string
- * [abc] matches one instance of any of the characters
- * enclosed in []
- * [a-z] matches one instance of any character in the
- * specified range of characters
- * [^abc] matches one instance of any character not
- * in the enclosed set
- *
- * Backslash (\) is used to quote a character that would otherwise be
- * considered part of a pattern sequence, e.g. "2\*2=4".
- *
- * The following composite shell expression structures are also
- * recognized:
- *
- * shexp1~shexp2 matches any string that matches shexp1,
- * unless the string also matches shexp2
- *
- * Example: "*~*.netscape.com" matches any string that does
- * not end with ".netscape.com"
- *
- * (shexp1|...|shexpN) matches any string that matches any one of
- * the ()-enclosed, |-separated shell
- * expressions.
- */
-
-/* Determine whether exp is a valid shell expression */
-#define shexp_valid (*__nsapi30_table->f_shexp_valid)
-
-/*
- * shexp_match
- *
- * Takes a prevalidated shell expression exp, and a string str.
- *
- * Returns 0 on match and 1 on non-match.
- */
-
-#define shexp_match (*__nsapi30_table->f_shexp_match)
-
-
-/*
- * shexp_cmp
- *
- * Same as above, but validates the exp first. 0 on match, 1 on non-match,
- * -1 on invalid exp. shexp_casecmp does the same thing but is case
- * insensitive.
- */
-
-#define shexp_cmp (*__nsapi30_table->f_shexp_cmp)
-#define shexp_casecmp (*__nsapi30_table->f_shexp_casecmp)
-
-/*
- * Regular expression API - Analogous to shell expression API
- */
-
-#define regexp_valid (*__nsapi30_table->f_regexp_valid)
-#define regexp_match (*__nsapi30_table->f_regexp_match)
-#define regexp_cmp (*__nsapi30_table->f_regexp_cmp)
-#define regexp_casecmp (*__nsapi30_table->f_regexp_casecmp)
-
-
-#if defined (SHMEM_UNIX_MMAP) || defined (SHMEM_WIN32_MMAP)
-
-/*
- * shmem_alloc allocates a region of shared memory of the given size, using
- * the given name to avoid conflicts between multiple regions within the
- * program. The region will not be automatically grown if its boundaries
- * are over-run, use shmem_realloc for that.
- *
- * If expose is non-zero and the underlying system supports it, the
- * file used to create the shared region will be visible to other processes
- * running on the system.
- *
- * name should be unique to the program which calls this routine, otherwise
- * conflicts will arise.
- *
- * Returns a new shared memory region, with the data element being a
- * pointer to the shared memory. This function must be called before any
- * daemon workers are spawned, in order for the handle to the shared region
- * to be inherited by the children.
- *
- * Because of the requirement that the region must be inherited by the
- * children, the region cannot be re-allocated with a larger size when
- * necessary.
- */
-#define shmem_alloc (*__nsapi30_table->f_shmem_alloc)
-
-/*
- * shmem_free de-allocates the specified region of shared memory.
- */
-#define shmem_free (*__nsapi30_table->f_shmem_free)
-
-#endif /* SHMEM_UNIX_MMAP || SHMEM_WIN32_MMAP */
-
-/*
- * systhread_start creates a thread with the given priority, will allocate
- * a stack of stksz bytes, and calls fn with arg as its argument. stksz
- * of zero will allocate a default stack size.
- *
- * Returns a new SYS_THREAD pointer on success, SYS_THREAD_ERROR on failure.
- * XXX Priorities are system dependent
- */
-
-#define systhread_start (*__nsapi30_table->f_systhread_start)
-
-/*
- * systhread_current returns a handle for the current thread.
- */
-
-#define systhread_current (*__nsapi30_table->f_systhread_current)
-
-/*
- * systhread_yield yields the processor to another thread
- */
-
-#define systhread_yield (*__nsapi30_table->f_systhread_yield)
-
-/*
- * systhread_attach makes an existing thread an NSPR thread.
- */
-#define systhread_attach (*__nsapi30_table->f_systhread_attach)
-
-/*
- * Detaches a thread that was attached.
- */
-
-#define systhread_detach (*__nsapi30_table->f_systhread_detach)
-
-/*
- * systhread_terminate terminates the thread that is passed in.
- */
-#define systhread_terminate (*__nsapi30_table->f_systhread_terminate)
-
-/*
- * systhread_sleep puts the calling thread to sleep for the given number
- * of milliseconds.
- */
-#define systhread_sleep (*__nsapi30_table->f_systhread_sleep)
-
-/*
- * systhread_init initializes the threading system. name is a name for the
- * program for debugging.
- */
-
-#define systhread_init (*__nsapi30_table->f_systhread_init)
-
-/*
- * systhread_timerset starts or re-sets the interrupt timer for a thread
- * system. This should be considered a suggestion as most systems don't allow
- * the timer interval to be changed.
- */
-
-#define systhread_timerset (*__nsapi30_table->f_systhread_timerset)
-
-/*
- * newkey allocates a new integer id for thread-private data. Use this
- * key to identify a variable which you want to appear differently
- * between threads, and then use setdata to associate a value with this
- * key for each thread.
- */
-#define systhread_newkey (*__nsapi30_table->f_systhread_newkey)
-
-/*
- * Get data that has been previously associated with key in this thread.
- * Returns NULL if setkey has not been called with this key by this
- * thread previously, or the data that was previously used with setkey
- * by this thread with this key.
- */
-#define systhread_getdata (*__nsapi30_table->f_systhread_getdata)
-
-/*
- * Associate data with the given key number in this thread.
- */
-#define systhread_setdata (*__nsapi30_table->f_systhread_setdata)
-
-/*
- * Set the default stack size for threads created via systhr_start
- */
-#define systhread_set_default_stacksize (*__nsapi30_table->f_systhread_set_default_stacksize)
-
-/*
- * A hodge podge of utility functions and standard functions which
- * are unavailable on certain systems
- */
-
-/*
- * getline scans in buf until it finds a LF or CRLF, storing the string in
- * l. It will terminate the string and return:
- *
- * 0 when done, with the scanned line (minus CR or LF) in l
- * 1 upon EOF, with the scanned line (minus CR or LF) in l
- * -1 on error with the error description in l (uses lineno for information)
- */
-
-#define util_getline (*__nsapi30_table->f_util_getline)
-
-/*
- * env_create creates a new environment with the given env, with n new
- * entries, and places the current position that you should add your
- * entries with at pos.
- *
- * If env is NULL, it will allocate a new one. If not, it will reallocate
- * that one.
- */
-
-#define util_env_create (*__nsapi30_table->f_util_env_create)
-
-/*
- * util_env_str allocates a string from the given name and value and
- * returns it. It does not check for things like = signs in name.
- */
-
-#define util_env_str (*__nsapi30_table->f_util_env_str)
-
-/*
- * env_replace replaces the occurrence of the given variable with the
- * value you give.
- */
-
-#define util_env_replace (*__nsapi30_table->f_util_env_replace)
-
-/*
- * util_env_free frees an environment.
- */
-
-#define util_env_free (*__nsapi30_table->f_util_env_free)
-
-/*
- * util_env_copy copies an env
- */
-#define util_env_copy (*__nsapi30_table->f_util_env_copy)
-
-/*
- * util_env_find looks through env for the named string. Returns the
- * corresponding value if the named string is found, or NULL if not.
- */
-#define util_env_find (*__nsapi30_table->f_util_env_find)
-
-/*
- * hostname gets the local hostname. Returns NULL if it can't find a FQDN.
- * You are free to realloc or free this string.
- */
-
-#define util_hostname (*__nsapi30_table->f_util_hostname)
-
-/*
- * chdir2path changes the current directory to the one that the file
- * path is in. path should point to a file. Caveat: path must be a writable
- * string. It won't get modified permanently.
- */
-
-#define util_chdir2path (*__nsapi30_table->f_util_chdir2path)
-
-/*
- * is_mozilla checks if the given user-agent is mozilla, of at least
- * the given major and minor revisions. These are strings to avoid
- * ambiguities like 1.56 > 1.5
- */
-
-#define util_is_mozilla (*__nsapi30_table->f_util_is_mozilla)
-
-/*
- * is_url will return 1 if the given string seems to be a URL, or will
- * return 0 otherwise.
- *
- * Because of stupid news URLs, this will return 1 if the string has
- * all alphabetic characters up to the first colon and will not check for
- * the double slash.
- */
-
-#define util_is_url (*__nsapi30_table->f_util_is_url)
-
-/*
- * util_later_than checks the date in the string ims, and if that date is
- * later than or equal to the one in the tm struct lms, then it returns 1.
- *
- * util_time_equal is above, but checks for exact equality.
- *
- * Handles RFC 822, 850, and ctime formats.
- */
-
-#define util_later_than (*__nsapi30_table->f_util_later_than)
-#define util_time_equal (*__nsapi30_table->f_util_time_equal)
-
-/*
- * util_str_time_equal checks the character-string dates are equal.
- * Supports rfc1123 and rfc850 formats. t1 must be rfc1123
- * Returns 0 if equal, -1 otherwise
- */
-#define util_str_time_equal (*__nsapi30_table->f_util_str_time_equal)
-
-/*
- * util_uri_is_evil returns 1 if a URL has ../ or // in it.
- */
-#define util_uri_is_evil (*__nsapi30_table->f_util_uri_is_evil)
-
-/*
- * util_uri_parse gets rid of /../, /./, and //.
- *
- * Assumes that either the string starts with a /, or the string will
- * not .. right off of its beginning. As such, ../foo.gif will
- * not be changed, although /../foo.gif will become /foo.gif.
- */
-
-#define util_uri_parse (*__nsapi30_table->f_util_uri_parse)
-
-/*
- * util_uri_unescape unescapes the given URI in place (% conversions only).
- */
-
-#define util_uri_unescape (*__nsapi30_table->f_util_uri_unescape)
-
-/*
- * util_uri_escape escapes any nasty chars in s and copies the string into d.
- * If d is NULL, it will allocate and return a properly sized string.
- * Warning: does not check bounds on a given d.
- *
- * util_url_escape does the same thing but does it for a url, i.e. ?:+ is
- * not escaped.
- */
-
-#define util_uri_escape (*__nsapi30_table->f_util_uri_escape)
-#define util_url_escape (*__nsapi30_table->f_util_url_escape)
-
-/*
- * util_sh_escape places a \ in front of any shell-special characters.
- * Returns a newly-allocated copy of the string.
- */
-
-#define util_sh_escape (*__nsapi30_table->f_util_sh_escape)
-
-/*
- * util_mime_separator generates a new MIME separator into the given buffer.
- * The buffer should be more than 4 + 3*10 + 1 bytes long. A CRLF is prepended
- * to the beginning of the string, along with two dashes. The string is null
- * terminated, with no CRLF. The intent is that you create your content-type
- * header by accessing &sep[4], and afterwards print sep followed by CRLF
- * for message boundaries.
- *
- * Returns the length of the string.
- */
-#define util_mime_separator (*__nsapi30_table->f_util_mime_separator)
-
-/*
- * util_itoa converts the given integer to a string into a.
- */
-
-#define util_itoa (*__nsapi30_table->f_util_itoa)
-
-/*
- * util_vsprintf and util_sprintf are simplified clones of the System V
- * vsprintf and sprintf routines.
- *
- * Returns the number of characters printed. Only handles %d and %s,
- * does not handle any width or precision.
- */
-
-#define util_vsprintf (*__nsapi30_table->f_util_vsprintf)
-#define util_sprintf (*__nsapi30_table->f_util_sprintf)
-
-/* These routines perform bounds checks. */
-#define util_vsnprintf (*__nsapi30_table->f_util_vsnprintf)
-#define util_snprintf (*__nsapi30_table->f_util_snprintf)
-
-/* util_strftime()
- * Thread safe version of strftime.
- * No bounds checking is done s. t must be a valid tm structure.
- */
-#define util_strftime (*__nsapi30_table->f_util_strftime)
-
-/* Various thread safe routines. */
-
-#define util_strtok (*__nsapi30_table->f_util_strtok)
-#define util_localtime (*__nsapi30_table->f_util_localtime)
-#define util_ctime (*__nsapi30_table->f_util_ctime)
-#define util_strerror (*__nsapi30_table->f_util_strerror)
-#define util_gmtime (*__nsapi30_table->f_util_gmtime)
-#define util_asctime (*__nsapi30_table->f_util_asctime)
-
#ifdef NEED_STRCASECMP
-#define util_strcasecmp (*__nsapi30_table->f_util_strcasecmp)
#define strcasecmp(s1, s2) util_strcasecmp(s1, s2)
#endif /* NEED_STRCASECMP */
#ifdef NEED_STRNCASECMP
-#define util_strncasecmp (*__nsapi30_table->f_util_strncasecmp)
#define strncasecmp(s1, s2, n) util_strncasecmp(s1, s2, n)
#endif /* NEED_STRNCASECMP */
#ifdef XP_UNIX
-
-/*
- * can_exec returns 1 if you can execute the file described by finfo, and
- * 0 if you can't.
- */
-
-#define util_can_exec (*__nsapi30_table->f_util_can_exec)
-
-/*
- * Thread safe getpwnam
- */
-#define util_getpwnam (*__nsapi30_table->f_util_getpwnam)
-
-#define util_waitpid (*__nsapi30_table->f_util_waitpid)
-
-#endif /* XP_UNIX */
-
-#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.
- */
-#define util_delete_directory (*__nsapi30_table->f_util_delete_directory)
-
-#endif /* XP_WIN32 */
-
-/*
- * conf_init reads the given configuration file and sets any non-default
- * parameters to their given setting.
- */
-#define conf_init (*__nsapi30_table->f_conf_init)
-#define conf_run_init_functions (*__nsapi30_table->f_conf_run_init_functions)
-
-/*
- * conf_terminate frees any data the conf routines may be holding.
- */
-#define conf_terminate (*__nsapi30_table->f_conf_terminate)
-
-/*
- * conf_getServerString returns the Server ID string
- */
-#define conf_getServerString (*__nsapi30_table->f_conf_getServerString)
-
-/*
- * Get a structure with the global variables for this server.
- */
-#define conf_getglobals (*__nsapi30_table->f_conf_getglobals)
-
-/*
- * func_init reads the static FuncStruct arrays and creates the global
- * function table from them.
- *
- * func_init will only read from the static arrays defined in func.c.
- */
-#define func_init (*__nsapi30_table->f_func_init)
-
-/*
- * func_find returns a pointer to the function named name, or NULL if none
- * exists.
- */
-#define func_find (*__nsapi30_table->f_func_find)
-
-/* DO NOT USE this function.
- */
-#define func_set_native_thread_flag (*__nsapi30_table->f_func_set_native_thread_flag)
-
-/*
- * func_exec will try to execute the function whose name is the "fn" entry
- * in the given pblock. If name is not found, it will log a misconfig of
- * missing fn parameter. If it can't find it, it will log that. In these
- * cases it will return REQ_ABORTED. Otherwise, it will return what the
- * function being executed returns.
- */
-#define func_exec (*__nsapi30_table->f_func_exec)
-
-/*
- * func_replace will replace a function in the server's function table with
- * another. Returns the FuncPtr to the old function if it replaces the
- * function, otherwise it returns 0.
- */
-#define func_replace (*__nsapi30_table->f_func_replace)
-
-/*
- * func_insert dynamically inserts a named function into the server's
- * table of functions. Returns the FuncStruct it keeps in internal
- * databases, because on server restart you are responsible for freeing
- * (or not) its contents.
- */
-#define func_insert (*__nsapi30_table->f_func_insert)
-#define object_execute (*__nsapi30_table->f_object_execute)
-
-/*
- * gets the first line of an HTTP request
- */
-#define http_find_request (*__nsapi30_table->f_http_find_request)
-
-/*
- * parses the first line of an HTTP request
- */
-#define http_parse_request (*__nsapi30_table->f_http_parse_request)
-
-/*
- * Scans HTTP headers from the given netbuf, and places them in headers.
- * If netbuf is NULL, the session's inbuf is used.
- *
- * Folded lines are joined and the linefeed removed (but not the whitespace).
- * If there are any repeat headers they are joined and the two field bodies
- * separated by a comma and space.
- *
- * t should be a string of length REQ_MAX_LINE. This is a convenience to
- * req.c so that we don't use too much runtime stack.
- *
- * Session is an optional parameter. Use NULL if you wish. It's used for
- * error logs.
- */
-#define http_scan_headers (*__nsapi30_table->f_http_scan_headers)
-
-/*
- * Starts the HTTP response. If HTTP/0.9, does nothing. If 1.0, sends header.
- * If this returns REQ_NOACTION, the method was head and no body should be
- * sent. Otherwise, it will return REQ_PROCEED.
- */
-#define http_start_response (*__nsapi30_table->f_http_start_response)
-
-/*
- * http_hdrs2env takes the entries from the given pblock and converts them
- * to an environment.
- *
- * Each name entry will be made uppercase, prefixed with HTTP_ and any
- * occurrence of - will be converted to _.
- */
-#define http_hdrs2env (*__nsapi30_table->f_http_hdrs2env)
-
-/*
- * http_status sets status to the code n, with reason string r. If r is
- * NULL, the server will attempt to find one for the given status code.
- * If it finds none, it will give "Because I felt like it."
- */
-#define http_status (*__nsapi30_table->f_http_status)
-
-/*
- * http_set_finfo sets content-length and last-modified
- */
-
-#define http_set_finfo (*__nsapi30_table->f_http_set_finfo)
-
-/*
- * Takes the given pblock and prints headers into the given buffer at
- * position pos. Returns the buffer, reallocated if needed. Modifies pos.
- */
-#define http_dump822 (*__nsapi30_table->f_http_dump822)
-
-/*
- * Finishes a request. For HTTP, this just closes the socket.
- */
-#define http_finish_request (*__nsapi30_table->f_http_finish_request)
-
-/*
- * http_handle_session processes each request generated by Session
- */
-#define http_handle_session (*__nsapi30_table->f_http_handle_session)
-
-/*
- * http_uri2url takes the give URI prefix and URI suffix and creates a
- * newly-allocated full URL from them of the form
- * http://(server):(port)(prefix)(suffix)
- *
- * If you want either prefix or suffix to be skipped, use "" instead of NULL.
- *
- * Normally, the server hostname is taken from the ServerName parameter in
- * magnus.conf. The newer function http_uri2url_dynamic should be used when
- * a Session and Request structure are available, to ensure that the browser
- * gets redirected to the exact host they were originally referencing.
- */
-
-#define http_uri2url (*__nsapi30_table->f_http_uri2url)
-#define http_uri2url_dynamic (*__nsapi30_table->f_http_uri2url_dynamic)
-
-/*
- * http_set_keepalive_timeout sets the number of seconds to wait for a new
- * request to come from a persistent connection. Returns nothing. Intended
- * to be called at server startup only.
- *
- * Specifying a timeout of zero will disable persistent connections and allow
- * browsers to request only one file per connection.
- */
-#define http_set_keepalive_timeout (*__nsapi30_table->f_http_set_keepalive_timeout)
-
-/*
- * log_error logs an error of the given degree from the function func
- * and formats the arguments with the printf() style fmt. Returns whether the
- * log was successful. Records the current date.
- *
- * sn and rq are optional parameters. If given, information about the client
- * will be reported.
- */
-#define log_error_v (*__nsapi30_table->f_log_error_v)
-#define log_error (*__nsapi30_table->f_log_error)
-
-/*
- * Internal use only
- */
-#define log_ereport_v (*__nsapi30_table->f_log_ereport_v)
-#define log_ereport (*__nsapi30_table->f_log_ereport)
-
-/*
- * object_create will create a new object and return a pointer to it.
- * It will allocate space for nd directive types and set name accordingly.
- */
-#define object_create (*__nsapi30_table->f_object_create)
-
-/*
- * object_free will free an object and any data associated with it.
- */
-#define object_free (*__nsapi30_table->f_object_free)
-
-/*
- * object_add_directive will add a new directive to the dtable for
- * the directive class at position dc.
- */
-#define object_add_directive (*__nsapi30_table->f_object_add_directive)
-
-/*
- * Executes the directive specified by inst within the context of the
- * given session and request structures. Returns what the executed function
- * returned (one of the REQ_* codes defined in req.h).
- *
- * This prototype uses void * for Request * in order to avoid including
- * all of req.h.
- *
- */
-
-/*
- * objset_scan_buffer will scan through buffer, looking for object
- * configuration information, and adding them to the object set os if it
- * finds any. If os is NULL it will allocate a new object set.
- *
- * If any error occurs (syntax error, premature EOF) this function will
- * free os, print an error message into errstr, and return NULL.
- * This is because a config. file error is viewed as a catastrophic error
- * from which httpd should not try to recover. If httpd were to continue
- * after an error, it would not behave as the admin. expected and he/she
- * may not notice until it's too late.
- *
- * Upon EOF the file will not be closed.
- */
-#define objset_scan_buffer (*__nsapi30_table->f_objset_scan_buffer)
-
-/*
- * objset_create creates a new object set and returns a pointer to it.
- */
-#define objset_create (*__nsapi30_table->f_objset_create)
-
-/*
- * objset_free will free an object set, any associated objects, and any
- * associated Init functions.
- */
-#define objset_free (*__nsapi30_table->f_objset_free)
-
-/*
- * objset_free_setonly frees only the object set, and not the associated
- * objects or init functions.
- */
-#define objset_free_setonly (*__nsapi30_table->f_objset_free_setonly)
-
-/*
- * objset_new_object will add a new object to objset with the specified
- * name. It returns a pointer to the new object (which may be anywhere in
- * the objset).
- */
-#define objset_new_object (*__nsapi30_table->f_objset_new_object)
-
-/*
- * objset_add_object will add the existing object to os.
- */
-#define objset_add_object (*__nsapi30_table->f_objset_add_object)
-
-/*
- * objset_add_init will add the initialization function specified by
- * initfn to the given object set. Modifies os->initfns.
- */
-#define objset_add_init (*__nsapi30_table->f_objset_add_init)
-
-/*
- * objset_findbyname will find the object in objset having the given name,
- * and return the object if found, and NULL otherwise.
- * ign is a set of objects to ignore.
- */
-#define objset_findbyname (*__nsapi30_table->f_objset_findbyname)
-
-/*
- * objset_findbyppath will find the object in objset having the given
- * partial path entry. Returns object if found, NULL otherwise.
- * ign is a set of objects to ignore.
- */
-#define objset_findbyppath (*__nsapi30_table->f_objset_findbyppath)
-
-/*
- * request_create creates a new request structure.
- */
-#define request_create (*__nsapi30_table->f_request_create)
-
-/*
- * request_free destroys a request structure.
- */
-#define request_free (*__nsapi30_table->f_request_free)
-
-/*
- * Restarts a request for a given URI internally. If rq is non-NULL, the
- * function will keep the old request's headers and protocol, but with a new
- * URI and method of GET. If the previous method was HEAD, this is preserved.
- * Any other method becomes GET. You may assume that if you give it a request
- * structure that it will use the same structure.
- *
- * Once you have this new Request, you must then do what you want with
- * it (e.g. send the object back, perform uri2path translation, etc.)
- */
-#define request_restart_internal (*__nsapi30_table->f_request_restart_internal)
-
-/*
- * request_header finds the named header depending on the requesting
- * protocol. If possible, it will not load headers until the first is
- * requested. You have to watch out because this can return REQ_ABORTED.
- */
-#define request_header (*__nsapi30_table->f_request_header)
-
-/*
- * request_loadheaders just makes sure the headers have been loaded.
- */
-#define request_loadheaders (*__nsapi30_table->f_request_loadheaders)
-
-/*
- * request_stat_path tries to stat path. If path is NULL, it will look in
- * the vars pblock for "path". If the stat is successful, it returns the stat
- * structure. If not, returns NULL and leaves a message in rq->staterr. If a
- * previous call to this function was successful, and path is the same, the
- * function will simply return the previously found value.
- *
- * User functions should not free this structure.
- */
-
-#define request_stat_path (*__nsapi30_table->f_request_stat_path)
-
-/*
- * Random number generation
- *
- * random_create - create a new random number context
- * random_update - update a context with random data
- * random_generate - generate random bytes
- * random_destroy - destroy a random number context
- */
-
-#define random_create (*__nsapi30_table->f_random_create)
-#define random_update (*__nsapi30_table->f_random_update)
-#define random_generate (*__nsapi30_table->f_random_generate)
-#define random_destroy (*__nsapi30_table->f_random_destroy)
-
-/*
- * MD5 hash routines
- *
- * md5hash_create - create an MD5 hash context
- * md5hash_copy - make a copy of an MD5 hash context
- * md5hash_begin - initialize an MD5 hash context
- * md5hash_update - update MD5 hash with more input data
- * md5hash_end - finalize MD5 hash and get result
- * md5hash_destroy - destroy an MD5 hash context
- * md5hash_data - compute MD5 hash of data in one step
- */
-
-#define md5hash_create (*__nsapi30_table->f_md5hash_create)
-#define md5hash_copy (*__nsapi30_table->f_md5hash_copy)
-#define md5hash_begin (*__nsapi30_table->f_md5hash_begin)
-#define md5hash_update (*__nsapi30_table->f_md5hash_update)
-#define md5hash_end (*__nsapi30_table->f_md5hash_end)
-#define md5hash_destroy (*__nsapi30_table->f_md5hash_destroy)
-#define md5hash_data (*__nsapi30_table->f_md5hash_data)
-
-/*
- * ACL_SetupEval -
- * Setup environment and call ACL_EvalTestRights.
- */
-#define ACL_SetupEval (*__nsapi30_table->f_ACL_SetupEval)
-
-/*
- * servact_translate_uri
- * Returns the translated path (filename) for the given uri, NULL otherwise.
- * If authentication is required for the given uri, nothing is returned even
- * if the current user has authenticated to that area.
- */
-#define servact_translate_uri (*__nsapi30_table->f_servact_translate_uri)
-
-#endif /* !INTNSAPI */
-
-#ifndef FILE_MMAP
-#define filebuf_open_nostat(fd,sz,finfo) filebuf_open(fd,sz)
-#endif
-
-#ifdef XP_UNIX
#define dir_open opendir
#define dir_read readdir
#define dir_close closedir
@@ -3378,104 +296,8 @@ struct nsapi_dispatch_s {
#endif /* XP_WIN32 */
/*
- * Thread-safe variants of localtime and gmtime
+ * Thread-safe variant of localtime
*/
#define system_localtime(curtime, ret) util_localtime(curtime, ret)
-#define system_gmtime(curtime, ret) util_gmtime(curtime, ret)
-
-/*
- * pblock_find finds the entry with the given name in pblock pb.
- *
- * If it is successful, it returns the param block. If not, it returns NULL.
- */
-
-#define pblock_find(name, pb) (pblock_fr(name,pb,0))
-
-/*
- * pblock_remove behaves exactly like pblock_find, but removes the given
- * entry from pb.
- */
-
-#define pblock_remove(name, pb) (pblock_fr(name,pb,1))
-
-/*
- * session_dns returns the DNS hostname of the client of this session,
- * and inserts it into the client pblock. Returns NULL if unavailable.
- */
-
-#define session_dns(sn) session_dns_lookup(sn, 0)
-
-/*
- * session_maxdns looks up a hostname from an IP address, and then verifies
- * that the host is really who they claim to be.
- */
-
-#define session_maxdns(sn) session_dns_lookup(sn, 1)
-
-#define protocol_find_request http_find_request
-#define protocol_parse_request http_parse_request
-#define protocol_scan_headers http_scan_headers
-#define protocol_start_response http_start_response
-#define protocol_status http_status
-#define protocol_set_finfo http_set_finfo
-#define protocol_finish_request http_finish_request
-#define protocol_handle_session http_handle_session
-#define protocol_uri2url http_uri2url
-#define protocol_uri2url_dynamic http_uri2url_dynamic
-#define protocol_set_keepalive_timeout http_set_keepalive_timeout
-
-/* XXXrobm temporary compatibility */
-#define request_uri2path servact_uri2path
-#define request_pathchecks servact_pathchecks
-#define request_fileinfo servact_fileinfo
-#define request_service servact_service
-
-#define request_handle_processed servact_handle_processed
-#define request_translate_uri servact_translate_uri
-#define request_finderror servact_finderror
-
-/* --- OBSOLETE ----------------------------------------------------------
- * The following macros/functions are obsolete and are only maintained for
- * compatibility. Do not use them. 11-19-96
- * -----------------------------------------------------------------------
- */
-
-#define SYS_STDERR STDERR_FILENO
-
-#ifdef XP_WIN32
-
-typedef HANDLE pid_t;
-
-#define ERROR_PIPE \
- (ERROR_BROKEN_PIPE | ERROR_BAD_PIPE |\
- ERROR_PIPE_BUSY | ERROR_PIPE_LISTENING | ERROR_PIPE_NOT_CONNECTED)
-#define CONVERT_TO_PRINTABLE_FORMAT(Filename) \
-{ \
- register char *s; \
- if (Filename) \
- for (s = Filename; *s; s++) \
- if ( *s == '\\') \
- *s = '/'; \
-}
-#define CONVERT_TO_NATIVE_FS(Filename) \
-{ \
- register char *s; \
- if (Filename) \
- for (s = Filename; *s; s++) \
- if ( *s == '/') \
- *s = '\\'; \
-}
-
-#ifdef INTNSAPI
-NSAPI_PUBLIC extern nsapi_dispatch_t *__nsapi30_table;
-#else
-__declspec(dllimport) nsapi_dispatch_t *__nsapi30_table;
-#endif /* INTNSAPI */
-
-#else /* !XP_WIN32 */
-
-NSAPI_PUBLIC extern nsapi_dispatch_t *__nsapi30_table;
-
-#endif /* XP_WIN32 */
#endif /* !PUBLIC_NSAPI_H */