#include #include #ifdef ULTRIX char *strdup(); #endif #define MAX_BUF 1025 char obj[1025],par[1025],file[1025]; char *getenv(); char *parptr[250]; static char *env[200],option[256]; static int envmax=0; int dctsearch(); extern char **environ; int putenv(str) char *str; { int i; char *sp,sv; sp=strchr(str,'='); if(sp == NULL)return -1; sp++; sv = *sp; *sp = 0; i=0; while(env[i] != NULL && i<200){ if(strstr(env[i],str)==env[i]) break; i++; }; if (i >= 199)return -1; if (i >= envmax && env[i] != NULL)free(env[i]); *sp = sv; if(env[i] == NULL)env[i+1]=NULL; env[i]=strdup(str); return 0; } main(argc,argv,envp) int argc; char *argv[]; char **envp; { char *sp; int j,np; envmax=0; while(envp[envmax]){env[envmax]=envp[envmax];envmax++;}; env[envmax]=NULL; environ=env; sp=getenv("PATH_INFO"); if(sp==NULL){ printf("Content-type: text/html\n\n"); printf("&x No object specified\n"); exit(1); }; strcpy(obj,sp); sp=strchr(obj,'{'); if(sp) *sp = 0; sp=strrchr(obj,'.'); if(sp) *sp = 0; sp=getenv("QUERY_STRING"); if(sp) strcpy(par,sp) ; else *par = 0; strcpy(option,"OPTIONSERVER="); strcat(option,OPTIONSERVER); putenv(option); j=dctsearch(obj,file,par,0); if(!j){ printf("Content-type: text/html\n\n"); printf("&x Error: %s %s.\n",file,obj); exit(1); }; j=0; parptr[j]=file; parptr[++j]=par; np=0; sp=par; while(*sp){ switch(*sp){ case '(':np++;break; case ')':np--;break; case ',':if(np)break; *sp=0; parptr[++j]=sp+1; break; }; sp++; }; parptr[++j]=NULL; execvp(file,parptr); printf("Content-type: text/html\n\n"); printf("&x Method not found: %s\n",file); exit(1); } #ifdef ULTRIX char *strdup(s) char *s; { char *t; if(s==NULL)return NULL; t=malloc(strlen(s)+1); strcpy(t,s); return t; } #endif