From 6c8e44a54c692f6e62d376aa6e3c3e16c7db57bb Mon Sep 17 00:00:00 2001 From: ian Date: Wed, 2 Jul 2003 18:53:26 +0000 Subject: [PATCH] found in davenant:/usr/local/src/misc --- www-cgi/ucgi | Bin 0 -> 17687 bytes www-cgi/ucgi.c~ | 37 +++++++++++++++++++ www-cgi/ucgi.h~ | 15 ++++++++ www-cgi/ucgicommon.c~ | 61 +++++++++++++++++++++++++++++++ www-cgi/ucgitarget | Bin 0 -> 19331 bytes www-cgi/ucgitarget.c~ | 81 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 194 insertions(+) create mode 100755 www-cgi/ucgi create mode 100644 www-cgi/ucgi.c~ create mode 100644 www-cgi/ucgi.h~ create mode 100644 www-cgi/ucgicommon.c~ create mode 100755 www-cgi/ucgitarget create mode 100644 www-cgi/ucgitarget.c~ diff --git a/www-cgi/ucgi b/www-cgi/ucgi new file mode 100755 index 0000000000000000000000000000000000000000..4f42c866831db7074664e5db3e153e9c924bfe75 GIT binary patch literal 17687 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 MAX_USERNAME_LEN) error("PATH_INFO username too long"); + username= xmalloc(usernamelen+1); memcpy(username,pathi+2); username[usernamelen]= 0; + if (!isalpha(username[0])) error("username 1st character is not alphabetic"); + if (setenv("PATH_INFO",slash2,1)) syserror("setenv PATH_INFO"); + + arguments= xmalloc(sizeof(const char*)*(nenvok+argc+10)); + nargs= 0; + arguments[0]= "userv"; + for (ep= envok; (en= *ep); ep++) { + ev= getenv(en); if (!ev) continue; + l= strlen(ev); if (l > MAX_ENVVAR_VALUE) error("environment variable too long"); + defarg= xmalloc(strlen(en)+l+5); + sprintf(defarg,"-D%s=%s",en,ev); + arguments[nargs++]= defarg; + } + arguments[nargs++]= username; + arguments[nargs++]= "www-cgi"; + while ((av= (*++argv))) arguments[nargs++]= av; + arguments[nargs++]= 0; +} diff --git a/www-cgi/ucgi.h~ b/www-cgi/ucgi.h~ new file mode 100644 index 0000000..f5bda11 --- /dev/null +++ b/www-cgi/ucgi.h~ @@ -0,0 +1,15 @@ +/**/ + +#ifndef UCGI_H +#define UCGI_H + +#include "ucgicommon.h" + +void syserror(const char *m); +void error(const char *m); +void *xmalloc(size_t sz); + +extern const char *const envok[]; +extern const int nenvok; + +#endif diff --git a/www-cgi/ucgicommon.c~ b/www-cgi/ucgicommon.c~ new file mode 100644 index 0000000..327beae --- /dev/null +++ b/www-cgi/ucgicommon.c~ @@ -0,0 +1,61 @@ +/**/ + +#include "ucgicommon.h" + +const char *const envok[]= { + "CONTENT_LENGTH", + "CONTENT_TYPE", + "DOCUMENT_ROOT", + "GATEWAY_INTERFACE", + "HTTP_ACCEPT", + "HTTP_ACCEPT_ENCODING", + "HTTP_ACCEPT_LANGUAGE", + "HTTP_CACHE_CONTROL", + "HTTP_HOST", + "HTTP_NEGOTIATE", + "HTTP_PRAGMA", + "HTTP_USER_AGENT", + "PATH_INFO", + "PATH_TRANSLATED", + "QUERY_STRING", + "REMOTE_ADDR", + "REMOTE_HOST", + "REMOTE_USER", + "REMOTE_IDENT", + "REQUEST_METHOD", + "SCRIPT_FILENAME", + "SCRIPT_NAME", + "SCRIPT_URI", + "SCRIPT_URL", + "SERVER_ADMIN", + "SERVER_NAME", + "SERVER_PORT", + "SERVER_PROTOCOL", + "SERVER_SOFTWARE", + 0 +}; +const int nenvok= sizeof(envok)/sizeof(envok[0]); + +void syserror(const char *m) { + if (printf("Content-Type: text/plain\n\n" + "ucgi: system call error:\n" + "%s: %s\n", + m,strerror(errno))==EOF || fflush(stdout)) outerror(); + exit(0); +} + +void error(const char *m) { + if (printf("Content-Type: text/plain\n\n" + "ucgi: error:\n" + "%s\n", + m)==EOF || fflush(stdout)) outerror(); + exit(0); +} + +void *xmalloc(size_t sz) { + void *r; + + r= malloc(sz); + if (!r) syserror("malloc failed"); + return r; +} diff --git a/www-cgi/ucgitarget b/www-cgi/ucgitarget new file mode 100755 index 0000000000000000000000000000000000000000..8ce16f4a3f707d28310acb3944551b0e48e30154 GIT binary patch literal 19331 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 DMN?DV literal 0 HcmV?d00001 diff --git a/www-cgi/ucgitarget.c~ b/www-cgi/ucgitarget.c~ new file mode 100644 index 0000000..5299b6a --- /dev/null +++ b/www-cgi/ucgitarget.c~ @@ -0,0 +1,81 @@ +/* + * Usage: as CGI script, but called by userv + * environment variables are USERV_U_E_... + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "ucgi.h" + +void *xrealloc(void *ptr, size_t sz) { + void *r; + + r= realloc(ptr,sz); + if (!r) syserror("realloc failed"); + return r; +} + +int main(int argc, const char **argv) { + char *uservar, *scriptpath; + const char *nextslash, *lastslash, *pathi, *ev, *en, *scriptdir; + const char *const *ep; + const char **arguments; + size_t scriptdirlen, scriptpathlen, l, uservarnl; + struct stat stab; + + ev= getenv("USERV_U_DEBUG"); + if (ev && *ev) debugmode= 1; + + if (argc > MAX_ARGS) error("too many arguments"); + + scriptdir= *++argv; + if (!scriptdir) error("no argv[1] (script directory)"); + scriptdirlen= strlen(scriptdir); + + for (ep= envok; (en= *ep); ep++) { + l= strlen(en)+11; + if (uservarnl MAX_ENVVAR_VALUE) error("environment variable too long"); + if (setenv(en,ev,1)) syserror("setenv"); + if (unsetenv(uservarn)) syserror("unsetenv"); + } + + pathi= getenv("PATH_INFO"); + if (!pathi) error("PATH_INFO not found"); + if (pathi[0] != '/') error("PATH_INFO must start with /"); + lastslash= pathi; + for (;;) { + nextslash= strchr(lastslash+1,'/'); + if (!nextslash) error("insufficient slashes in PATH_INFO beyond directory"); + if (nextslash[1]=='.' || nextslash[1]=='#' || !nextslash[1]) error("bad char begin"); + if (nextslash-pathi > MAX_SCRIPTPATH_LEN) error("PATH_INFO script dir too long"); + scriptpathlen= scriptdirlen+(nextslash-pathi); + scriptpath= xrealloc(scriptpath,scriptpathlen); + memcpy(scriptpath,pathi,scriptpathlen); scriptpath[scriptpathlen]= 0; + if (scriptpath[scriptpathlen-1]=='~') error("bad char end"); + r= stat(scriptpath,&stab); if (r) syserror("stat script"); + if (S_ISREG(stab.st_mode)) break; + if (!S_ISDIR(stab.st_mode)) syserror("script not directory or file"); + lastlash= nextslash; + } + if (setenv("PATH_INFO",nextslash,1)) syserror("setenv PATH_INFO"); + + arguments= xmalloc(sizeof(const char*)*(argc+5)); + nargs= 0; + + arguments[nargs++]= scriptpath; + while ((av= (*++argv))) arguments[nargs++]= av; + arguments[nargs++]= 0; + + execvp(scriptpath,(char*const*)arguments); + syserror("exec script"); + return -1; +} -- 2.30.2