Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions

Source needed for ENCTYPE receiving program

Posted on 1997-07-03
Last Modified: 2008-03-06
I'm in desperate need of some C source for a CGI program that will receive a file via the ENCTYPE tag that Netscape supports and then write it into onto the disk. The source needs to be for Windows (I use the Micro$oft compiler).

Yes I know that this sort of thing is asking for security problems but I have a specific, Intranet application for it.

Question by:mravell
  • 2

Author Comment

ID: 1251981
Adjusted points to 150

Accepted Solution

ernst earned 150 total points
ID: 1251982
#include <string.h>
here's some c-code that I use. I'll include the html that goes
with it so you can substitute variables.  It's not for
windows, but the algorithm should be portable. It's really thrown
together, but you'll get the idea....

#include <stdio.h>
#include <unistd.h>
#ifndef NO_STDLIB_H
#include <stdlib.h>
#include <fcntl.h>
char *getenv();

typedef struct {
    char *name;
    char *val;
} entry;

#define MAX_ENTRIES 10

main(int argc, char *argv[]) {
   entry entries[MAX_ENTRIES];
        register int x,m=0;
        char header[50], openfile[128], endline[128];
        int cl, readlen, ctr, filenum;
        char *breakline, *wline, *ptr;
        FILE *out;

        sprintf(header,"Content-type: text/html%c%c",10,10);
        write(STDOUT_FILENO, header, strlen(header));
        printf("<BODY BGCOLOR=#404040 TEXT=#FFFFFF>\n");
        if(strcmp(getenv("REQUEST_METHOD"),"POST")) {
            printf("This script should be referenced with a METHOD of POST.\n");

        cl = atoi(getenv("CONTENT_LENGTH"));
        total = malloc(cl);
        ctr = 0;
        while(cl > 0){
           read(STDIN_FILENO, &total[ctr++], 1);
        total[ctr] = 0;
        ptr = strchr(total, 13);
        breakline = total;
        *ptr++ = 0;
        total = ++ptr;
        sprintf(endline, "\n%s", breakline);
        do {
           ptr = strchr(total, 13);
           *ptr = 0;
           for (ctr = 0;ctr < 2;ctr++)
           total = ptr;
           ptr = strchr(total, 13);
           for (ctr = 0;ctr < 2;ctr++)
           total = ptr;
           ptr = strstr(wline,"name=");
           for (ctr = 0;ctr < 6;ctr++)
           entries[m].name = ptr;
           ptr = strchr(entries[m].name,'"');
           *ptr = 0;
           if (strcmp(entries[m].name, "fileitself") == 0) {
           ptr = strstr(entries[m].val, breakline);
           x = strlen(breakline) + 4;
           for (ctr = 0;ctr < x;ctr++)
           total = ptr;
        } while (strstr(total, "Content") != NULL);
   for (x = 0; x < m; x++) {
      if (strcmp(entries[x].name,"filenam") == 0)
         filenam = entries[x].val;
      else if (strcmp(entries[x].name,"userid") == 0)
         userid = entries[x].val;
      else if (strcmp(entries[x].name,"password") == 0)
         password = entries[x].val;
      else if (strcmp(entries[x].name,"fileitself") == 0)
         file = entries[x].val;
  if (strcmp(userid,"userid") != 0 || strcmp(password,"passwd") != 0) {
      printf("<H1>BAD USERID OR PASSWORD</H1>\n");
   if ((out = fopen(openfile, "w")) == NULL) {
      printf("file open error\n");
      printf("%s\n", openfile);
   while (strstr(ptr,breakline) != ptr) {
      fprintf(out, "%c", *ptr);
   printf("<H1>File uploaded</H1>\n");

########################Begin Html###########
<TITLE>Upload a file</TITLE>
<H3>upload a file to your directory</H3>
<FORM ENCTYPE="multipart/form-data" ACTION=/cgi-bin/upload METHOD=POST>
the name you want the file to be called on the server:
<INPUT TYPE=text NAME=filenam><BR>
your userid: <INPUT TYPE=text NAME=userid><BR>
your password: <INPUT TYPE=password NAME=password><BR>
file: <INPUT TYPE=file NAME=fileitself><BR>
<INPUT TYPE=submit value="go for it!">


Author Comment

ID: 1251983
Thanks Ernst,

This has given me enough to get started. I am porting it to Micro$oft C for use on NT.


Featured Post

ScreenConnect 6.0 Free Trial

Want empowering updates? You're in the right place! Discover new features in ScreenConnect 6.0, based on partner feedback, to keep you business operating smoothly and optimally (the way it should be). Explore all of the extras and enhancements for yourself!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Convert image to byte array 8 209
Passing a array as parameter - C 2 101
Acrinis True image 2 92
Windows Server 2008 R2: %HOMEDRIVE%%HOMEPATH% Incorrect 4 14
Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
The goal of this video is to provide viewers with basic examples to understand and use structures in the C programming language.
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.

829 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question