From 21305115e547133a0122c44b7e9956ef78dc94be Mon Sep 17 00:00:00 2001 From: Rob Crittenden Date: Wed, 23 Feb 2005 18:19:13 +0000 Subject: 149510 Strip down ACL code and support libraries to the bare minimum. --- include/base/crit.h | 6 +- include/base/ereport.h | 29 - include/base/pool.h | 16 - include/base/util.h | 123 -- include/libaccess/acl.h | 1 - include/libaccess/las.h | 1 - include/libadmin/libadmin.h | 1309 +----------------- include/nt/nsapi.h | 246 +--- include/public/nsapi.h | 3210 +------------------------------------------ 9 files changed, 24 insertions(+), 4917 deletions(-) (limited to 'include') 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 #include -#include #include #include 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 #include -#include #include #include #include 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 #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 "" 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 #include -#include #include -#include #include #include #include -#include -#include -#include -#include -#include -#include #include -#include #include #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - #include -#include - 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,2874 +269,35 @@ 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); +#define strcasecmp(s1, s2) util_strcasecmp(s1, s2) #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); +#define strncasecmp(s1, s2, n) util_strncasecmp(s1, s2, n) #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); +#define dir_open opendir +#define dir_read readdir +#define dir_close closedir +#define dir_create(path) mkdir(path, 0755) +#define dir_remove rmdir +#define system_chdir chdir +#define file_unix2local(path,p2) strcpy(p2,path) #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) +#define dir_create _mkdir +#define dir_remove _rmdir +#define system_chdir SetCurrentDirectory #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 -#define dir_create(path) mkdir(path, 0755) -#define dir_remove rmdir -#define system_chdir chdir -#define file_unix2local(path,p2) strcpy(p2,path) -#endif /* XP_UNIX */ - -#ifdef XP_WIN32 -#define dir_create _mkdir -#define dir_remove _rmdir -#define system_chdir SetCurrentDirectory -#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 */ -- cgit