home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-11-04 | 83.0 KB | 2,891 lines |
- *** ../../../../2.12/WWW/Library/Implementation/CommonMakefile Tue Oct 5 10:47:23 1993
- --- CommonMakefile Mon Oct 11 14:46:29 1993
- ***************
- *** 172,177 ****
- --- 172,179 ----
- (cd $(WWW)/..; WWW=WWW ABS=`pwd`/ make $(MFLAGS) \
- -f WWW/Library/Implementation/CommonMakefile \
- /pub/www/src/WWWLibrary_$(VC).tar.Z)
- + (cd ../Implementation; cvs tag \
- + `sed -e 's/VC = /v/' Version.make | sed -e 's?\.?/?'` )
- echo Distribution of Library version $(VC) up to date.
-
- /pub/www/src/WWWLibrary_$(VC).tar.Z : $(SOURCES)
- *** ../../../../2.12/WWW/Library/Implementation/HTAABrow.c Thu Oct 7 14:42:12 1993
- --- HTAABrow.c Wed Nov 3 16:20:18 1993
- ***************
- *** 35,42 ****
- ** AL Ari Luotonen luotonen@dxcern.cern.ch
- **
- ** HISTORY:
- ! **
- ! **
- ** BUGS:
- **
- **
- --- 35,47 ----
- ** AL Ari Luotonen luotonen@dxcern.cern.ch
- **
- ** HISTORY:
- ! ** Oct 17 AL Made corrections suggested by marca:
- ! ** Added if (!realm->username) return NULL;
- ! ** Changed some ""s to NULLs.
- ! ** Now doing calloc() to init uuencode source;
- ! ** otherwise HTUU_encode() reads uninitialized memory
- ! ** every now and then (not a real bug but not pretty).
- ! ** Corrected the formula for uuencode destination size.
- ** BUGS:
- **
- **
- ***************
- *** 113,123 ****
- --- 118,156 ----
- /* connect. */
- PRIVATE char *current_docname = NULL; /* The document's name we are */
- /* trying to access. */
- + PRIVATE char *HTAAForwardAuth = NULL; /* Authorization: line to forward */
- + /* (used by gateway httpds) */
-
-
- + /*** HTAAForwardAuth for enabling gateway-httpds to forward Authorization ***/
-
- + PUBLIC void HTAAForwardAuth_set ARGS2(CONST char *, scheme_name,
- + CONST char *, scheme_specifics)
- + {
- + int len = 20 + (scheme_name ? strlen(scheme_name) : 0)
- + + (scheme_specifics ? strlen(scheme_specifics) : 0);
-
- + FREE(HTAAForwardAuth);
- + if (!(HTAAForwardAuth = (char*)malloc(len)))
- + outofmem(__FILE__, "HTAAForwardAuth_set");
-
- + strcpy(HTAAForwardAuth, "Authorization: ");
- + if (scheme_name) {
- + strcat(HTAAForwardAuth, scheme_name);
- + strcat(HTAAForwardAuth, " ");
- + if (scheme_specifics) {
- + strcat(HTAAForwardAuth, scheme_specifics);
- + }
- + }
- + }
- +
- +
- + PUBLIC void HTAAForwardAuth_reset NOARGS
- + {
- + FREE(HTAAForwardAuth);
- + }
- +
- +
- /**************************** HTAAServer ***********************************/
-
-
- ***************
- *** 489,494 ****
- --- 522,528 ----
- ** (with, of course, a newly generated secret
- ** key and fresh timestamp, if Pubkey-scheme
- ** is being used).
- + ** NULL, if something fails.
- ** NOTE:
- ** Like throughout the entire AA package, no string or structure
- ** returned by AA package needs to (or should) be freed.
- ***************
- *** 514,523 ****
- if ((scheme != HTAA_BASIC && scheme != HTAA_PUBKEY) || !setup ||
- !setup->scheme_specifics || !setup->scheme_specifics[scheme] ||
- !setup->server || !setup->server->realms)
- ! return "";
-
- realmname = HTAssocList_lookup(setup->scheme_specifics[scheme], "realm");
- ! if (!realmname) return "";
-
- realm = HTAARealm_lookup(setup->server->realms, realmname);
- if (!realm || setup->retry) {
- --- 548,557 ----
- if ((scheme != HTAA_BASIC && scheme != HTAA_PUBKEY) || !setup ||
- !setup->scheme_specifics || !setup->scheme_specifics[scheme] ||
- !setup->server || !setup->server->realms)
- ! return NULL;
-
- realmname = HTAssocList_lookup(setup->scheme_specifics[scheme], "realm");
- ! if (!realmname) return NULL;
-
- realm = HTAARealm_lookup(setup->server->realms, realmname);
- if (!realm || setup->retry) {
- ***************
- *** 529,550 ****
- "not found -- creating");
- realm = HTAARealm_new(setup->server->realms, realmname, NULL,NULL);
- sprintf(msg,
- ! "Document is protected. Enter username for %s at %s: ",
- realm->realmname,
- setup->server->hostname ? setup->server->hostname : "??");
- - realm->username =
- - HTPrompt(msg, realm->username);
- }
- else {
- ! sprintf(msg,"Enter username for %s at %s: ", realm->realmname,
- setup->server->hostname ? setup->server->hostname : "??");
- - username = HTPrompt(msg, realm->username);
- - FREE(realm->username);
- - realm->username = username;
- }
- ! password = HTPromptPassword("Enter password: ");
- FREE(realm->password);
- realm->password = password;
- }
-
- len = strlen(realm->username ? realm->username : "") +
- --- 563,588 ----
- "not found -- creating");
- realm = HTAARealm_new(setup->server->realms, realmname, NULL,NULL);
- sprintf(msg,
- ! "Document is protected. Enter username for %s at %s",
- realm->realmname,
- setup->server->hostname ? setup->server->hostname : "??");
- }
- else {
- ! sprintf(msg,"Enter username for %s at %s", realm->realmname,
- setup->server->hostname ? setup->server->hostname : "??");
- }
- !
- ! username = realm->username;
- ! password = NULL;
- ! HTPromptUsernameAndPassword(msg, &username, &password);
- !
- ! FREE(realm->username);
- FREE(realm->password);
- + realm->username = username;
- realm->password = password;
- +
- + if (!realm->username)
- + return NULL; /* Suggested by marca; thanks! */
- }
-
- len = strlen(realm->username ? realm->username : "") +
- ***************
- *** 561,567 ****
- else
- FREE(secret_key);
-
- ! if (!(cleartext = (char*)malloc(len)))
- outofmem(__FILE__, "compose_auth_string");
-
- if (realm->username) strcpy(cleartext, realm->username);
- --- 599,605 ----
- else
- FREE(secret_key);
-
- ! if (!(cleartext = (char*)calloc(len, 1)))
- outofmem(__FILE__, "compose_auth_string");
-
- if (realm->username) strcpy(cleartext, realm->username);
- ***************
- *** 590,596 ****
- free(ciphertext);
- }
- else { /* scheme == HTAA_BASIC */
- ! if (!(result = (char*)malloc(len + len/2)))
- outofmem(__FILE__, "compose_auth_string");
- HTUU_encode(cleartext, strlen(cleartext), result);
- free(cleartext);
- --- 628,634 ----
- free(ciphertext);
- }
- else { /* scheme == HTAA_BASIC */
- ! if (!(result = (char*)malloc(4 * ((len+2)/3) + 1)))
- outofmem(__FILE__, "compose_auth_string");
- HTUU_encode(cleartext, strlen(cleartext), result);
- free(cleartext);
- ***************
- *** 661,666 ****
- --- 699,721 ----
- BOOL retry;
- HTAAScheme scheme;
-
- + /*
- + ** Make gateway httpds pass authorization field as it was received.
- + ** (This still doesn't really work because Authenticate: headers
- + ** from remote server are not forwarded to client yet so it cannot
- + ** really know that it should send authorization; I will not
- + ** implement it yet because I feel we will soon change radically
- + ** the way requests are represented to allow multithreading
- + ** on server-side. Life is hard.)
- + */
- + if (HTAAForwardAuth) {
- + if (TRACE) fprintf(stderr, "HTAA_composeAuth: %s\n",
- + "Forwarding received authorization");
- + StrAllocCopy(result, HTAAForwardAuth);
- + HTAAForwardAuth_reset(); /* Just a precaution */
- + return result;
- + }
- +
- FREE(result); /* From previous call */
-
- if (TRACE)
- ***************
- *** 707,718 ****
- "This client doesn't know how to compose authentication",
- "information for scheme", HTAAScheme_name(scheme));
- HTAlert(msg);
- ! auth_string = "";
- }
- } /* switch scheme */
-
- current_setup->retry = NO;
-
- if (!(result = (char*)malloc(sizeof(char) * (strlen(auth_string)+40))))
- outofmem(__FILE__, "HTAA_composeAuth");
- strcpy(result, "Authorization: ");
- --- 762,777 ----
- "This client doesn't know how to compose authentication",
- "information for scheme", HTAAScheme_name(scheme));
- HTAlert(msg);
- ! auth_string = NULL;
- }
- } /* switch scheme */
-
- current_setup->retry = NO;
-
- + /* Added by marca. */
- + if (!auth_string)
- + return NULL;
- +
- if (!(result = (char*)malloc(sizeof(char) * (strlen(auth_string)+40))))
- outofmem(__FILE__, "HTAA_composeAuth");
- strcpy(result, "Authorization: ");
- ***************
- *** 724,730 ****
-
-
-
- !
- /* BROWSER PUBLIC HTAA_shouldRetryWithAuth()
- **
- ** DETERMINES IF WE SHOULD RETRY THE SERVER
- --- 783,789 ----
-
-
-
- !
- /* BROWSER PUBLIC HTAA_shouldRetryWithAuth()
- **
- ** DETERMINES IF WE SHOULD RETRY THE SERVER
- *** ../../../../2.12/WWW/Library/Implementation/HTAABrow.h Tue Oct 5 10:48:54 1993
- --- HTAABrow.h Wed Nov 3 16:28:43 1993
- ***************
- *** 113,118 ****
- --- 113,132 ----
- int soc));
- /*
-
- + Enabling Gateway httpds to Forward Authorization
- +
- + These functions should only be called from daemon code, and HTAAForwardAuth_reset()
- + must be called before the next request is handled to make sure that authorization
- + string isn't cached in daemon so that other people can access private files using
- + somebody elses previous authorization information.
- +
- + */
- +
- + PUBLIC void HTAAForwardAuth_set PARAMS((CONST char * scheme_name,
- + CONST char * scheme_specifics));
- + PUBLIC void HTAAForwardAuth_reset NOPARAMS;
- + /*
- +
- */
-
- #endif /* NOT HTAABROW_H */
- *** ../../../../2.12/WWW/Library/Implementation/HTAAFile.c Mon Oct 4 20:36:30 1993
- --- HTAAFile.c Wed Oct 13 16:53:40 1993
- ***************
- *** 28,55 ****
-
-
- /* PUBLIC HTAAFile_nextRec()
- ! ** GO TO THE BEGINNING OF THE NEXT RECORD
- ** ON ENTRY:
- ** fp is the file from which records are read from.
- **
- ** ON EXIT:
- ** returns nothing. File read pointer is located at the beginning
- ! ** of the next record.
- **
- */
- PUBLIC void HTAAFile_nextRec ARGS1(FILE *, fp)
- {
- int ch = getc(fp);
-
- ! while (ch != EOF && ch != CR && ch != LF)
- ! ch = getc(fp); /* Skip until end-of-line */
- !
- ! while (ch != EOF &&
- ! (ch == CR || ch == LF)) /*Skip carriage returns and linefeeds*/
- ! ch = getc(fp);
- !
- ! if (ch != EOF)
- ! ungetc(ch, fp);
- }
-
-
- --- 28,61 ----
-
-
- /* PUBLIC HTAAFile_nextRec()
- ! ** GO TO THE BEGINNING OF THE NEXT RECORD
- ** ON ENTRY:
- ** fp is the file from which records are read from.
- **
- ** ON EXIT:
- ** returns nothing. File read pointer is located at the beginning
- ! ** of the next record. Handles continuation lines
- ! ** (lines ending in comma indicate a following
- ! ** continuation line).
- **
- */
- PUBLIC void HTAAFile_nextRec ARGS1(FILE *, fp)
- {
- int ch = getc(fp);
- + int last = (char)0;
-
- ! do {
- ! while (ch != EOF && ch != CR && ch != LF) {
- ! if (ch != ' ' && ch != '\t')
- ! last = ch; /* Last non-whitespace */
- ! ch = getc(fp); /* Skip until end-of-line */
- ! }
- ! while (ch != EOF &&
- ! (ch == CR || ch == LF))/*Skip carriage returns and linefeeds*/
- ! ch = getc(fp);
- ! if (ch != EOF)
- ! ungetc(ch, fp);
- ! } while (last == ',' && ch != EOF); /* Skip also continuation lines */
- }
-
-
- ***************
- *** 102,114 ****
- ch = getc(fp);
- } /* while not eol or eof or too many read */
-
- - /* Terminate the string, truncating trailing whitespace off.
- - ** Otherwise (if whitespace would be included), here would
- - ** be *dest='\0'; and cnt -= ... would be left out.
- - */
- - *end = '\0';
- - cnt -= dest-end;
- -
- if (cnt == max_len) {
- /* If the field was too long (or exactly maximum) ignore the rest */
- while (ch != FIELD_SEPARATOR &&
- --- 108,113 ----
- ***************
- *** 119,124 ****
- --- 118,130 ----
-
- if (ch == CR || ch == LF)
- ungetc(ch, fp); /* Push back the record separator (NL or LF) */
- +
- + /* Terminate the string, truncating trailing whitespace off.
- + ** Otherwise (if whitespace would be included), here would
- + ** be *dest='\0'; and cnt -= ... would be left out.
- + */
- + *end = '\0';
- + cnt -= dest-end;
-
- return ch; /* Return the terminating character */
- }
- *** ../../../../2.12/WWW/Library/Implementation/HTAAProt.c Thu Oct 7 14:42:16 1993
- --- HTAAProt.c Wed Nov 3 16:20:19 1993
- ***************
- *** 6,13 ****
- ** AL Ari Luotonen luotonen@dxcern.cern.ch
- **
- ** HISTORY:
- ! **
- ! **
- ** BUGS:
- **
- **
- --- 6,14 ----
- ** AL Ari Luotonen luotonen@dxcern.cern.ch
- **
- ** HISTORY:
- ! ** 20 Oct 93 AL Now finds uid/gid for nobody/nogroup by name
- ! ** (doesn't use default 65534 right away).
- ! ** Also understands negative uids/gids.
- ** BUGS:
- **
- **
- ***************
- *** 51,56 ****
- --- 52,60 ----
-
- if (!s || !*s) return NO;
-
- + if (*cur == '-')
- + cur++; /* Allow initial minus sign in a number */
- +
- while (*cur) {
- if (*cur < '0' || *cur > '9')
- return NO;
- ***************
- *** 96,101 ****
- --- 100,116 ----
- }
- }
- }
- + /*
- + ** Ok, then let's get uid for nobody.
- + */
- + if (NULL != (pw = getpwnam("nobody"))) {
- + if (TRACE) fprintf(stderr, "HTAA_getUid: Uid for `nobody' is %d\n",
- + pw->pw_uid);
- + return pw->pw_uid;
- + }
- + /*
- + ** Ok, then use default.
- + */
- return 65534; /* nobody */
- }
-
- ***************
- *** 135,140 ****
- --- 150,166 ----
- }
- }
- }
- + /*
- + ** Ok, then let's get gid for nogroup.
- + */
- + if (NULL != (gr = getgrnam("nogroup"))) {
- + if (TRACE) fprintf(stderr, "HTAA_getGid: Gid for `nogroup' is %d\n",
- + gr->gr_gid);
- + return gr->gr_gid;
- + }
- + /*
- + ** Ok, then use default.
- + */
- return 65534; /* nogroup */
- }
-
- *** ../../../../2.12/WWW/Library/Implementation/HTAAServ.c Thu Oct 7 14:42:17 1993
- --- HTAAServ.c Wed Nov 3 16:20:20 1993
- ***************
- *** 111,116 ****
- --- 111,123 ----
- case HTAA_SETUP_ERROR:
- return "Forbidden -- server protection setup error";
- break;
- + case HTAA_DOTDOT:
- + return "Forbidden -- URL containing /../ disallowed";
- + break;
- + /*
- + ** It ought to, using an executable script (TBL)
- + ** What do you mean, Tim?? (AL)
- + */
-
- /* 404 cases */
- case HTAA_NOT_FOUND:
- ***************
- *** 122,127 ****
- --- 129,138 ----
- return "AA: Access should be ok but something went wrong";
- break;
-
- + case HTAA_OK_GATEWAY:
- + return "AA check bypassed (gatewaying) but something went wrong";
- + break;
- +
- /* Others */
- default:
- return "Access denied -- unable to specify reason (bug)";
- ***************
- *** 159,164 ****
- --- 170,178 ----
- case HTAA_SETUP_ERROR:
- return "SETUP-ERROR";
- break;
- + case HTAA_DOTDOT:
- + return "SLASH-DOT-DOT";
- + break;
-
- /* 404 cases */
- case HTAA_NOT_FOUND:
- ***************
- *** 169,174 ****
- --- 183,191 ----
- case HTAA_OK:
- return "OK";
- break;
- + case HTAA_OK_GATEWAY:
- + return "OK-GATEWAY";
- + break;
-
- /* Others */
- default:
- ***************
- *** 427,443 ****
- if (keywords) *keywords = (char)0; /* Chop off keywords */
- }
- HTSimplify(local_copy); /* Remove ".." etc. */
- - pathname = HTTranslate(local_copy);
- - if (!HTSecure) {
- - char *localname = HTLocalName(pathname);
- - free(pathname);
- - pathname = localname;
- - }
- - FREE(local_copy);
-
- ! HTAAFailReason = check_authorization(pathname, method,
- ! scheme, scheme_specifics);
-
- if (htaa_logfile) {
- time(&theTime);
- fprintf(htaa_logfile, "%24.24s %s %s %s %s %s\n",
- --- 444,500 ----
- if (keywords) *keywords = (char)0; /* Chop off keywords */
- }
- HTSimplify(local_copy); /* Remove ".." etc. */
-
- ! /* HTSimplify will leave in a "/../" at the top, which can
- ! ** be a security hole.
- ! */
- ! if (strstr(local_copy, "/../")) {
- ! if (TRACE) fprintf(stderr, "HTAA_checkAuthorization: %s (`%s')\n",
- ! "Illegal attempt to use /../", url);
- ! HTAAFailReason = HTAA_DOTDOT;
- ! }
- ! else {
- ! pathname = HTTranslate(local_copy); /* Translate rules even if */
- ! /* a /htbin call to set up */
- ! /* protections. */
- ! if (0 == strncmp(local_copy, "/htbin/", 7)) {
- ! char *end = strchr(local_copy+7, '/');
- ! if (end)
- ! *end = (char)0;
- ! if (!HTBinDir)
- ! StrAllocCopy(HTBinDir, HTBINDIR);
- ! FREE(pathname);
- ! pathname = (char*)malloc(strlen(HTBinDir)+strlen(local_copy)-4);
- ! strcpy(pathname, HTBinDir);
- ! strcat(pathname, local_copy+6);
- ! }
-
- + if (!pathname) { /* Forbidden by rule */
- + if (TRACE) fprintf(stderr,
- + "HTAA_checkAuthorization: Forbidden by rule\n");
- + HTAAFailReason = HTAA_BY_RULE;
- + }
- + else { /* pathname != NULL */
- + char *access = HTParse(pathname, "", PARSE_ACCESS);
- + if (!*access || 0 == strcmp(access, "file")) { /*Local file, do AA*/
- + if (!HTSecure && 0 != strncmp(local_copy, "/htbin/", 7)) {
- + char *localname = HTLocalName(pathname);
- + free(pathname);
- + pathname = localname;
- + }
- + HTAAFailReason = check_authorization(pathname, method,
- + scheme, scheme_specifics);
- + }
- + else { /* Not local access */
- + HTAAFailReason = HTAA_OK_GATEWAY;
- + fprintf(stderr, "HTAA_checkAuthorization: %s (%s access)\n",
- + "Gatewaying -- skipping authorization check",
- + access);
- + }
- + } /* pathname */
- + }
- + FREE(local_copy);
- +
- if (htaa_logfile) {
- time(&theTime);
- fprintf(htaa_logfile, "%24.24s %s %s %s %s %s\n",
- ***************
- *** 471,476 ****
- --- 528,534 ----
- case HTAA_NO_ACL:
- case HTAA_NO_ENTRY:
- case HTAA_SETUP_ERROR:
- + case HTAA_DOTDOT:
- return 403;
- break;
-
- ***************
- *** 479,484 ****
- --- 537,543 ----
- break;
-
- case HTAA_OK:
- + case HTAA_OK_GATEWAY:
- return 200;
- break;
-
- *** ../../../../2.12/WWW/Library/Implementation/HTACL.c Tue Oct 5 10:02:37 1993
- --- HTACL.c Wed Oct 13 16:53:41 1993
- ***************
- *** 182,187 ****
- --- 182,191 ----
- HTList_delete(methods);
- free(buf);
- group_def = HTAA_parseGroupDef(acl_file);
- + /*
- + ** HTAA_parseGroupDef() already reads the record
- + ** separator so we don't call HTAAFile_nextRec().
- + */
- return group_def;
- }
- else if (TRACE) fprintf(stderr, " METHOD NOT FOUND\n");
- ***************
- *** 188,194 ****
- HTList_delete(methods);
- } /* if template match */
- else {
- - HTAAFile_nextRec(acl_file);
- if (TRACE) {
- fprintf(stderr,
- "Filename '%s' didn't match template '%s'\n",
- --- 192,197 ----
- *** ../../../../2.12/WWW/Library/Implementation/HTAlert.c Thu Oct 7 14:42:20 1993
- --- HTAlert.c Thu Nov 4 10:54:13 1993
- ***************
- *** 80,87 ****
- PUBLIC char * HTPromptPassword ARGS1(CONST char *, Msg)
- {
- char *result = NULL;
- ! char *pw = getpass(Msg ? Msg : "Password: ");
- StrAllocCopy(result, pw);
- return result;
- }
-
- --- 80,118 ----
- PUBLIC char * HTPromptPassword ARGS1(CONST char *, Msg)
- {
- char *result = NULL;
- ! char *pw = (char*)getpass(Msg ? Msg : "Password: ");
- !
- StrAllocCopy(result, pw);
- return result;
- + }
- +
- +
- + /* Prompt both username and password HTPromptUsernameAndPassword()
- + ** ---------------------------------
- + ** On entry,
- + ** Msg is the prompting message.
- + ** *username and
- + ** *password are char pointers; they are changed
- + ** to point to result strings.
- + **
- + ** If *username is not NULL, it is taken
- + ** to point to a default value.
- + ** Initial value of *password is
- + ** completely discarded.
- + **
- + ** On exit,
- + ** *username and *password point to newly allocated
- + ** strings -- original strings pointed to by them
- + ** are NOT freed.
- + **
- + */
- + PUBLIC void HTPromptUsernameAndPassword ARGS3(CONST char *, Msg,
- + char **, username,
- + char **, password)
- + {
- + if (Msg)
- + fprintf(stderr, "WWW: %s\n", Msg);
- + *username = HTPrompt("Username: ", *username);
- + *password = HTPromptPassword("Password: ");
- }
-
- *** ../../../../2.12/WWW/Library/Implementation/HTAlert.h Tue Oct 5 11:04:23 1993
- --- HTAlert.h Thu Nov 4 10:07:13 1993
- ***************
- *** 1,4 ****
- ! /* /Net/dxcern/userd/timbl/hypertext/WWW/Library/Implementation/HTAlert.html
- DISPLAYING MESSAGES AND GETTING INPUT FOR WWW LIBRARY
-
- This module may be overridden for GUI clients. It allows progress indications and
- --- 1,4 ----
- ! /* HTAlert: Handling user messages in libwww
- DISPLAYING MESSAGES AND GETTING INPUT FOR WWW LIBRARY
-
- This module may be overridden for GUI clients. It allows progress indications and
- ***************
- *** 13,18 ****
- --- 13,23 ----
- #include "HTUtils.h"
- #include "tcp.h"
-
- + #ifdef SHORT_NAMES
- + #define HTPrPass HTPromptPassword
- + #define HTPUnAPw HTPromptUsernameAndPassword
- + #endif /*SHORT_NAMES*/
- +
- /*
-
- HTPrompt and HTPromptPassword: Display a message and get the input
- ***************
- *** 34,40 ****
- --- 39,72 ----
- extern char * HTPrompt PARAMS((CONST char * Msg, CONST char * deflt));
- extern char * HTPromptPassword PARAMS((CONST char * Msg));
-
- + /*
-
- + HTPromptUsernameAndPassword: Get both username and password
- +
- + ON ENTRY,
- +
- + Msg String to be displayed.
- +
- + username Pointer to char pointer, i.e. *usernamepoints to a string. If
- + non-NULL it is taken to be a default value.
- +
- + password Pointer to char pointer, i.e. *passwordpoints to a string.
- + Initial value discarded.
- +
- + ON EXIT,
- +
- + *username and
- +
- + *password point to newly allocated strings representing the typed-in
- + username and password. Initial strings pointed to by them are
- + NOT freed!
- +
- + */
- +
- + extern void HTPromptUsernameAndPassword PARAMS((CONST char * Msg,
- + char ** username,
- + char ** password));
- +
- /*
-
- Display a message, don't wait for input
- ***************
- *** 76,81 ****
- --- 108,114 ----
- */
-
- extern BOOL HTConfirm PARAMS ((CONST char * Msg));
- +
-
-
-
- *** ../../../../2.12/WWW/Library/Implementation/HTAuth.c Thu Oct 7 14:42:20 1993
- --- HTAuth.c Wed Nov 3 16:20:27 1993
- ***************
- *** 6,13 ****
- ** AL Ari Luotonen luotonen@dxcern.cern.ch
- **
- ** HISTORY:
- **
- - **
- ** BUGS:
- **
- **
- --- 6,13 ----
- ** AL Ari Luotonen luotonen@dxcern.cern.ch
- **
- ** HISTORY:
- + ** AL 14.10.93 Fixed the colon-not-allowed-in-password-bug.
- **
- ** BUGS:
- **
- **
- ***************
- *** 44,50 ****
- char *inet_addr = NULL;
- char *timestamp = NULL;
- char *browsers_key = NULL;
- - char *extras = NULL;
-
- if (!user && !(user = (HTAAUser*)malloc(sizeof(HTAAUser)))) /* Allocated */
- outofmem(__FILE__, "decompose_auth_string"); /* only once */
- --- 44,49 ----
- ***************
- *** 120,135 ****
- "fields missing in authentication string");
- return NULL;
- }
- - extras = strchr(browsers_key, ':');
- - }
- - else extras = strchr(password, ':');
- -
- - if (extras) {
- - *(extras++) = '\0';
- - if (TRACE) fprintf(stderr, "%s `%s' %s `%s'\n",
- - "decompose_auth_string: extra field(s) in",
- - (scheme==HTAA_BASIC ? "Basic" : "Pubkey"),
- - "authorization string ignored:", extras);
- }
-
- /*
- --- 119,124 ----
- *** ../../../../2.12/WWW/Library/Implementation/HTChunk.h Thu Jun 10 11:55:20 1993
- --- HTChunk.h Thu Nov 4 10:07:11 1993
- ***************
- *** 1,4 ****
- ! /* /Net/dxcern/userd/timbl/hypertext/WWW/Library/Implementation/HTChunk.html
- CHUNK HANDLING:
- FLEXIBLE ARRAYS
-
- --- 1,4 ----
- ! /* HTChunk: Flexible array handling for libwww
- CHUNK HANDLING:
- FLEXIBLE ARRAYS
-
- ***************
- *** 105,115 ****
-
- ch A valid chunk pointer made by HTChunkCreate()
-
- ! c The character to be appended
-
- ON EXIT,
-
- ! *ch Is one character bigger
-
- */
- extern void HTChunkPutc PARAMS((HTChunk * ch, char c));
- --- 105,115 ----
-
- ch A valid chunk pointer made by HTChunkCreate()
-
- ! c The character to be appended
-
- ON EXIT,
-
- ! *ch Is one character bigger
-
- */
- extern void HTChunkPutc PARAMS((HTChunk * ch, char c));
- ***************
- *** 157,160 ****
-
- /*
-
- ! end */
- --- 157,160 ----
-
- /*
-
- ! end */
- *** ../../../../2.12/WWW/Library/Implementation/HTFTP.c Thu Sep 2 17:52:47 1993
- --- HTFTP.c Wed Nov 3 16:21:29 1993
- ***************
- *** 275,281 ****
- break;
- } /* if end of line */
-
- ! if (*(p-1) < 0) {
- if(TRACE) fprintf(stderr, "Error on rx: closing socket %d\n",
- control->socket);
- strcpy(response_text, "000 *** TCP read error on response\n");
- --- 275,281 ----
- break;
- } /* if end of line */
-
- ! if (*(p-1) == (char) EOF) {
- if(TRACE) fprintf(stderr, "Error on rx: closing socket %d\n",
- control->socket);
- strcpy(response_text, "000 *** TCP read error on response\n");
- *** ../../../../2.12/WWW/Library/Implementation/HTFWriter.c Tue Oct 5 11:20:30 1993
- --- HTFWriter.c Wed Nov 3 16:21:32 1993
- ***************
- *** 126,134 ****
- */
- PRIVATE void HTFWriter_free ARGS1(HTStream *, me)
- {
- ! fflush(me->fp);
- if (me->end_command) { /* Temp file */
- - fclose(me->fp);
- HTProgress(me->end_command); /* Tell user what's happening */
- system(me->end_command);
- free (me->end_command);
- --- 126,133 ----
- */
- PRIVATE void HTFWriter_free ARGS1(HTStream *, me)
- {
- ! fclose(me->fp);
- if (me->end_command) { /* Temp file */
- HTProgress(me->end_command); /* Tell user what's happening */
- system(me->end_command);
- free (me->end_command);
- ***************
- *** 146,154 ****
-
- PRIVATE void HTFWriter_abort ARGS2(HTStream *, me, HTError, e)
- {
- ! fflush(me->fp);
- if (me->end_command) { /* Temp file */
- - fclose(me->fp);
- if (TRACE) fprintf(stderr,
- "HTFWriter: Aborting: file not executed.\n");
- free (me->end_command);
- --- 145,152 ----
-
- PRIVATE void HTFWriter_abort ARGS2(HTStream *, me, HTError, e)
- {
- ! fclose(me->fp);
- if (me->end_command) { /* Temp file */
- if (TRACE) fprintf(stderr,
- "HTFWriter: Aborting: file not executed.\n");
- free (me->end_command);
- *** ../../../../2.12/WWW/Library/Implementation/HTFile.c Tue Oct 5 10:47:44 1993
- --- HTFile.c Thu Nov 4 10:54:15 1993
- ***************
- *** 97,102 ****
- --- 97,105 ----
- ** representation.
- ** Calling this with suffix set to "*.*" will set the default
- ** representation for unknown suffix files which contain a ".".
- + **
- + ** If filename suffix is already defined its previous
- + ** definition is overridden.
- */
- PUBLIC void HTSetSuffix ARGS4(
- CONST char *, suffix,
- ***************
- *** 106,122 ****
- {
-
- HTSuffix * suff;
- !
- if (strcmp(suffix, "*")==0) suff = &no_suffix;
- else if (strcmp(suffix, "*.*")==0) suff = &unknown_suffix;
- else {
- ! suff = (HTSuffix*) calloc(1, sizeof(HTSuffix));
- ! if (suff == NULL) outofmem(__FILE__, "HTSetSuffix");
-
- ! if (!HTSuffixes) HTSuffixes = HTList_new();
- ! HTList_addObject(HTSuffixes, suff);
-
- ! StrAllocCopy(suff->suffix, suffix);
- }
-
- suff->rep = HTAtom_for(representation);
- --- 109,133 ----
- {
-
- HTSuffix * suff;
- !
- if (strcmp(suffix, "*")==0) suff = &no_suffix;
- else if (strcmp(suffix, "*.*")==0) suff = &unknown_suffix;
- else {
- ! HTList *cur = HTSuffixes;
- !
- ! while (NULL != (suff = (HTSuffix*)HTList_nextObject(cur))) {
- ! if (suff->suffix && 0==strcmp(suff->suffix, suffix))
- ! break;
- ! }
- ! if (!suff) { /* Not found -- create a new node */
- ! suff = (HTSuffix*) calloc(1, sizeof(HTSuffix));
- ! if (suff == NULL) outofmem(__FILE__, "HTSetSuffix");
-
- ! if (!HTSuffixes) HTSuffixes = HTList_new();
- ! HTList_addObject(HTSuffixes, suff);
-
- ! StrAllocCopy(suff->suffix, suffix);
- ! }
- }
-
- suff->rep = HTAtom_for(representation);
- *** ../../../../2.12/WWW/Library/Implementation/HTGroup.c Thu Oct 7 14:42:22 1993
- --- HTGroup.c Wed Oct 13 16:53:42 1993
- ***************
- *** 639,644 ****
- --- 639,646 ----
- FILE *fp;
- GroupCache *group_cache;
-
- + if (!filename || !*filename) return NULL;
- +
- if (!group_cache_list)
- group_cache_list = HTList_new();
- else {
- ***************
- *** 739,745 ****
- } /* search for username */
- } /* IP address ok */
- else {
- ! return HTAA_IP_MASK;
- }
- } /* while items in group */
- } /* valid parameters */
- --- 741,747 ----
- } /* search for username */
- } /* IP address ok */
- else {
- ! reason = HTAA_IP_MASK;
- }
- } /* while items in group */
- } /* valid parameters */
- *** ../../../../2.12/WWW/Library/Implementation/HTGroup.h Tue Oct 5 11:04:36 1993
- --- HTGroup.h Thu Nov 4 10:07:16 1993
- ***************
- *** 30,35 ****
- --- 30,36 ----
- */
- typedef enum {
- HTAA_OK, /* 200 OK */
- + HTAA_OK_GATEWAY, /* 200 OK, acting as a gateway */
- HTAA_NO_AUTH, /* 401 Unauthorized, not authenticated */
- HTAA_NOT_MEMBER, /* 401 Unauthorized, not authorized */
- HTAA_IP_MASK, /* 403 Forbidden by IP mask */
- ***************
- *** 37,42 ****
- --- 38,44 ----
- HTAA_NO_ACL, /* 403 Forbidden, ACL non-existent */
- HTAA_NO_ENTRY, /* 403 Forbidden, no ACL entry */
- HTAA_SETUP_ERROR, /* 403 Forbidden, server setup error */
- + HTAA_DOTDOT, /* 403 Forbidden, URL with /../ illegal */
- HTAA_NOT_FOUND /* 404 Not found, or read protected */
- } HTAAFailReasonType;
-
- *** ../../../../2.12/WWW/Library/Implementation/HTInit.c Mon Sep 27 15:15:12 1993
- --- HTInit.c Wed Nov 3 16:20:30 1993
- ***************
- *** 23,56 ****
- PUBLIC void HTFormatInit NOARGS
- {
- #ifdef NeXT
- ! HTSetPresentation("application/postscript", "open %s", 1.0, 2.0, 0.0);
- ! /* The following needs the GIF previewer -- you might not have it. */
- ! HTSetPresentation("image/gif", "open %s", 0.3, 2.0, 0.0);
- ! HTSetPresentation("image/x-tiff", "open %s", 1.0, 2.0, 0.0);
- ! HTSetPresentation("audio/basic", "open %s", 1.0, 2.0, 0.0);
- ! HTSetPresentation("*", "open %s", 1.0, 0.0, 0.0);
- #else
- ! if (getenv("DISPLAY")) { /* Must have X11 */
- ! HTSetPresentation("application/postscript", "ghostview %s", 1.0, 3.0, 0.0);
- ! HTSetPresentation("image/gif", "xv %s", 1.0, 3.0, 0.0);
- ! HTSetPresentation("image/x-tiff", "xv %s", 1.0, 3.0, 0.0);
- ! HTSetPresentation("image/jpeg", "xv %s", 1.0, 3.0, 0.0);
- ! }
- #endif
- ! HTSetConversion("www/mime", "*", HTMIMEConvert, 1.0, 0.0, 0.0);
- ! HTSetConversion("application/x-wais-source",
- ! "*", HTWSRCConvert, 1.0, 0.0, 0.0);
- ! HTSetConversion("text/html", "text/x-c", HTMLToC, 0.5, 0.0, 0.0);
- ! HTSetConversion("text/html", "text/plain", HTMLToPlain, 0.5, 0.0, 0.0);
- ! HTSetConversion("text/html", "www/present", HTMLPresent, 1.0, 0.0, 0.0);
- ! HTSetConversion("text/plain", "text/html", HTPlainToHTML, 1.0, 0.0, 0.0);
- ! HTSetConversion("text/plain", "www/present", HTPlainPresent, 1.0, 0.0, 0.0);
- ! HTSetConversion("application/octet-stream", "www/present",
- ! HTSaveLocally, 0.1, 0.0, 0.0);
- ! HTSetConversion("www/unknown", "www/present",
- ! HTSaveLocally, 0.3, 0.0, 0.0);
- ! HTSetConversion("www/source", "www/present",
- ! HTSaveLocally, 0.3, 0.0, 0.0);
- }
-
-
- --- 23,52 ----
- PUBLIC void HTFormatInit NOARGS
- {
- #ifdef NeXT
- ! HTSetPresentation("application/postscript", "open %s", 1.0, 2.0, 0.0);
- ! /* The following needs the GIF previewer -- you might not have it. */
- ! HTSetPresentation("image/gif", "open %s", 0.3, 2.0, 0.0);
- ! HTSetPresentation("image/x-tiff", "open %s", 1.0, 2.0, 0.0);
- ! HTSetPresentation("audio/basic", "open %s", 1.0, 2.0, 0.0);
- ! HTSetPresentation("*", "open %s", 1.0, 0.0, 0.0);
- #else
- ! if (getenv("DISPLAY")) { /* Must have X11 */
- ! HTSetPresentation("application/postscript", "ghostview %s", 1.0, 3.0, 0.0);
- ! HTSetPresentation("image/gif", "xv %s", 1.0, 3.0, 0.0);
- ! HTSetPresentation("image/x-tiff", "xv %s", 1.0, 3.0, 0.0);
- ! HTSetPresentation("image/jpeg", "xv %s", 1.0, 3.0, 0.0);
- ! }
- #endif
- ! HTSetConversion("www/mime", "*", HTMIMEConvert, 1.0, 0.0, 0.0);
- ! HTSetConversion("application/x-wais-source","*", HTWSRCConvert, 1.0, 0.0, 0.0);
- ! HTSetConversion("text/html", "text/x-c", HTMLToC, 0.5, 0.0, 0.0);
- ! HTSetConversion("text/html", "text/plain", HTMLToPlain, 0.5, 0.0, 0.0);
- ! HTSetConversion("text/html", "www/present", HTMLPresent, 1.0, 0.0, 0.0);
- ! HTSetConversion("text/plain", "text/html", HTPlainToHTML, 1.0, 0.0, 0.0);
- ! HTSetConversion("text/plain", "www/present", HTPlainPresent, 1.0, 0.0, 0.0);
- ! HTSetConversion("application/octet-stream", "www/present", HTSaveLocally, 0.1, 0.0, 0.0);
- ! HTSetConversion("www/unknown", "www/present", HTSaveLocally, 0.3, 0.0, 0.0);
- ! HTSetConversion("www/source", "www/present", HTSaveLocally, 0.3, 0.0, 0.0);
- }
-
-
- ***************
- *** 68,116 ****
-
- #ifndef NO_INIT
- PUBLIC void HTFileInit NOARGS
- ! { /* Suffix Contenet-Type Content-Encoding Quality */
- !
- ! HTSetSuffix(".ai", "application/postscript", "8bit", 0.5); /* Adobe illustator */
- ! HTSetSuffix(".au", "audio/basic", "binary", 1.0);
- ! HTSetSuffix(".mime","www/mime", "8bit", 1.0); /* Internal -- MIME is not recursive? */
- !
- ! HTSetSuffix(".PS", "application/postscript", "8bit", 0.8);
- ! HTSetSuffix(".eps", "application/postscript", "8bit", 0.8);
- ! HTSetSuffix(".ps", "application/postscript", "8bit", 0.8);
-
- ! HTSetSuffix(".execme.csh", "application/x-csh", "7bit", 0.5);
-
- ! HTSetSuffix(".html","text/html", "8bit", 1.0);
- !
- ! HTSetSuffix(".c", "text/plain", "7bit", 0.5);
- ! HTSetSuffix(".h", "text/plain", "7bit", 0.5); /* html better */
- ! HTSetSuffix(".m", "text/plain", "7bit", 0.5); /* Objective-C code */
- ! HTSetSuffix(".f90", "text/plain", "7bit", 0.5); /* Fortran 90 */
- ! HTSetSuffix(".txt", "text/plain", "7bit", 0.5);
- !
- ! HTSetSuffix(".rtf", "application/x-rtf", "8bit", 1.0);
- !
- ! HTSetSuffix(".src", "application/x-wais-source", "7bit", 1.0);
- !
- ! HTSetSuffix(".snd", "audio/basic", "binary", 1.0);
- !
- ! HTSetSuffix(".bin", "application/octet-stream", "binary", 1.0);
- !
- ! HTSetSuffix(".Z", "application/x-compressed", "binary", 1.0);
- !
- ! HTSetSuffix(".gif", "image/gif", "binary", 1.0);
- !
- ! HTSetSuffix(".tiff","image/x-tiff", "binary", 1.0);
- !
- ! HTSetSuffix(".jpg", "image/jpeg", "binary", 1.0);
- ! HTSetSuffix(".JPG", "image/jpeg", "binary", 1.0);
- ! HTSetSuffix(".JPEG","image/jpeg", "binary", 1.0);
- ! HTSetSuffix(".jpeg","image/jpeg", "binary", 1.0);
- !
- ! HTSetSuffix(".MPEG","video/mpeg", "binary", 1.0);
- ! HTSetSuffix(".mpg","video/mpeg", "binary", 1.0);
- ! HTSetSuffix(".MPG","video/mpeg", "binary", 1.0);
- ! HTSetSuffix(".mpeg","video/mpeg", "binary", 1.0);
-
- }
- #endif /* NO_INIT */
- --- 64,160 ----
-
- #ifndef NO_INIT
- PUBLIC void HTFileInit NOARGS
- ! {
- ! /* Suffix Contenet-Type Content-Encoding Quality */
-
- ! HTSetSuffix(".mime", "www/mime", "8bit", 1.0); /* Internal -- MIME is */
- ! /* not recursive */
- ! HTSetSuffix(".bin", "application/octet-stream", "binary", 1.0); /* Uninterpreted binary */
- ! HTSetSuffix(".oda", "application/oda", "binary", 1.0);
- ! HTSetSuffix(".pdf", "application/pdf", "binary", 1.0);
- ! HTSetSuffix(".ai", "application/postscript", "8bit", 0.5); /* Adobe Illustrator */
- ! HTSetSuffix(".PS", "application/postscript", "8bit", 0.8); /* PostScript */
- ! HTSetSuffix(".eps", "application/postscript", "8bit", 0.8);
- ! HTSetSuffix(".ps", "application/postscript", "8bit", 0.8);
- ! HTSetSuffix(".rtf", "application/x-rtf", "7bit", 1.0); /* RTF */
- ! HTSetSuffix(".Z", "application/x-compressed", "binary", 1.0); /* Compressed data */
- ! HTSetSuffix(".csh", "application/x-csh", "7bit", 0.5); /* C-shell script */
- ! HTSetSuffix(".dvi", "application/x-dvi", "binary", 1.0); /* TeX DVI */
- ! HTSetSuffix(".hdf", "application/x-hdf", "binary", 1.0); /* NCSA HDF data file */
- ! HTSetSuffix(".latex", "application/x-latex", "8bit", 1.0); /* LaTeX source */
- ! HTSetSuffix(".nc", "application/x-netcdf", "binary", 1.0); /* Unidata netCDF data */
- ! HTSetSuffix(".cdf", "application/x-netcdf", "binary", 1.0);
- ! HTSetSuffix(".sh", "application/x-sh", "7bit", 0.5); /* Shell-script */
- ! HTSetSuffix(".tcl", "application/x-tcl", "7bit", 0.5); /* TCL-script */
- ! HTSetSuffix(".tex", "application/x-tex", "8bit", 1.0); /* TeX source */
- ! HTSetSuffix(".texi", "application/x-texinfo", "7bit", 1.0); /* Texinfo */
- ! HTSetSuffix(".texinfo","application/x-texinfo", "7bit", 1.0);
- ! HTSetSuffix(".t", "application/x-troff", "7bit", 0.5); /* Troff */
- ! HTSetSuffix(".roff", "application/x-troff", "7bit", 0.5);
- ! HTSetSuffix(".tr", "application/x-troff", "7bit", 0.5);
- ! HTSetSuffix(".man", "application/x-troff-man", "7bit", 0.5); /* Troff with man macros*/
- ! HTSetSuffix(".me", "application/x-troff-me", "7bit", 0.5); /* Troff with me macros */
- ! HTSetSuffix(".ms", "application/x-troff-ms", "7bit", 0.5); /* Troff with ms macros */
- ! HTSetSuffix(".src", "application/x-wais-source", "7bit", 1.0); /* WAIS source */
- ! HTSetSuffix(".zip", "application/zip", "binary", 1.0); /* PKZIP */
- ! HTSetSuffix(".bcpio", "application/x-bcpio", "binary", 1.0); /* Old binary CPIO */
- ! HTSetSuffix(".cpio", "application/x-cpio", "binary", 1.0); /* POSIX CPIO */
- ! HTSetSuffix(".gtar", "application/x-gtar", "binary", 1.0); /* Gnu tar */
- ! HTSetSuffix(".shar", "application/x-shar", "8bit", 1.0); /* Shell archive */
- ! HTSetSuffix(".sv4cpio","application/x-sv4cpio", "binary", 1.0); /* SVR4 CPIO */
- ! HTSetSuffix(".sv4crc", "application/x-sv4crc", "binary", 1.0); /* SVR4 CPIO with CRC */
- ! HTSetSuffix(".tar", "application/x-tar", "binary", 1.0); /* 4.3BSD tar */
- ! HTSetSuffix(".ustar", "application/x-ustar", "binary", 1.0); /* POSIX tar */
- ! HTSetSuffix(".snd", "audio/basic", "binary", 1.0); /* Audio */
- ! HTSetSuffix(".au", "audio/basic", "binary", 1.0);
- ! HTSetSuffix(".aiff", "audio/x-aiff", "binary", 1.0);
- ! HTSetSuffix(".aifc", "audio/x-aiff", "binary", 1.0);
- ! HTSetSuffix(".aif", "audio/x-aiff", "binary", 1.0);
- ! HTSetSuffix(".wav", "audio/x-wav", "binary", 1.0); /* Windows+ WAVE format */
- ! HTSetSuffix(".gif", "image/gif", "binary", 1.0); /* GIF */
- ! HTSetSuffix(".ief", "image/ief", "binary", 1.0); /* Image Exchange fmt */
- ! HTSetSuffix(".jpg", "image/jpeg", "binary", 1.0); /* JPEG */
- ! HTSetSuffix(".JPG", "image/jpeg", "binary", 1.0);
- ! HTSetSuffix(".JPE", "image/jpeg", "binary", 1.0);
- ! HTSetSuffix(".jpe", "image/jpeg", "binary", 1.0);
- ! HTSetSuffix(".JPEG", "image/jpeg", "binary", 1.0);
- ! HTSetSuffix(".jpeg", "image/jpeg", "binary", 1.0);
- ! HTSetSuffix(".tif", "image/tiff", "binary", 1.0); /* TIFF */
- ! HTSetSuffix(".tiff", "image/tiff", "binary", 1.0);
- ! HTSetSuffix(".ras", "image/cmu-raster", "binary", 1.0);
- ! HTSetSuffix(".pnm", "image/x-portable-anymap", "binary", 1.0); /* PBM Anymap format */
- ! HTSetSuffix(".pbm", "image/x-portable-bitmap", "binary", 1.0); /* PBM Bitmap format */
- ! HTSetSuffix(".pgm", "image/x-portable-graymap", "binary", 1.0); /* PBM Graymap format */
- ! HTSetSuffix(".ppm", "image/x-portable-pixmap", "binary", 1.0); /* PBM Pixmap format */
- ! HTSetSuffix(".rgb", "image/x-rgb", "binary", 1.0);
- ! HTSetSuffix(".xbm", "image/x-xbitmap", "binary", 1.0); /* X bitmap */
- ! HTSetSuffix(".xpm", "image/x-xpixmap", "binary", 1.0); /* X pixmap format */
- ! HTSetSuffix(".xwd", "image/x-xwindowdump", "binary", 1.0); /* X window dump (xwd) */
- ! HTSetSuffix(".html", "text/html", "8bit", 1.0); /* HTML */
- ! HTSetSuffix(".c", "text/plain", "7bit", 0.5); /* C source */
- ! HTSetSuffix(".h", "text/plain", "7bit", 0.5); /* C headers */
- ! HTSetSuffix(".C", "text/plain", "7bit", 0.5); /* C++ source */
- ! HTSetSuffix(".cc", "text/plain", "7bit", 0.5); /* C++ source */
- ! HTSetSuffix(".hh", "text/plain", "7bit", 0.5); /* C++ headers */
- ! HTSetSuffix(".m", "text/plain", "7bit", 0.5); /* Objective-C source */
- ! HTSetSuffix(".f90", "text/plain", "7bit", 0.5); /* Fortran 90 source */
- ! HTSetSuffix(".txt", "text/plain", "7bit", 0.5); /* Plain text */
- ! HTSetSuffix(".rtx", "text/richtext", "7bit", 1.0); /* MIME Richtext format */
- ! HTSetSuffix(".tsv", "text/tab-separated-values", "7bit", 1.0); /* Tab-separated values */
- ! HTSetSuffix(".etx", "text/x-setext", "7bit", 0.9); /* Struct Enchanced Txt */
- ! HTSetSuffix(".MPG", "video/mpeg", "binary", 1.0); /* MPEG */
- ! HTSetSuffix(".mpg", "video/mpeg", "binary", 1.0);
- ! HTSetSuffix(".MPE", "video/mpeg", "binary", 1.0);
- ! HTSetSuffix(".mpe", "video/mpeg", "binary", 1.0);
- ! HTSetSuffix(".MPEG", "video/mpeg", "binary", 1.0);
- ! HTSetSuffix(".mpeg", "video/mpeg", "binary", 1.0);
- ! HTSetSuffix(".qt", "video/quicktime", "binary", 1.0); /* QuickTime */
- ! HTSetSuffix(".mov", "video/quicktime", "binary", 1.0);
- ! HTSetSuffix(".avi", "video/x-msvideo", "binary", 1.0); /* MS Video for Windows */
- ! HTSetSuffix(".movie", "video/x-sgi-movie", "binary", 1.0); /* SGI "moviepalyer" */
-
- ! HTSetSuffix("*.*", "application/octet-stream", "binary", 0.1);
- ! HTSetSuffix("*", "text/plain", "7bit", 0.5);
-
- }
- #endif /* NO_INIT */
- *** ../../../../2.12/WWW/Library/Implementation/HTML.c Thu Sep 2 17:55:07 1993
- --- HTML.c Wed Nov 3 16:21:35 1993
- ***************
- *** 493,498 ****
- --- 493,512 ----
- HTAnchor_setIndex(me->node_anchor);
- break;
-
- + case HTML_BR:
- + UPDATE_STYLE;
- + HText_appendCharacter(me->text, '\n');
- + me->in_word = NO;
- + break;
- +
- + case HTML_HR:
- + UPDATE_STYLE;
- + HText_appendCharacter(me->text, '\n');
- + HText_appendCharacter(me->text, "___________________________________");
- + HText_appendCharacter(me->text, '\n');
- + me->in_word = NO;
- + break;
- +
- case HTML_P:
- UPDATE_STYLE;
- HText_appendParagraph(me->text);
- ***************
- *** 659,665 ****
- {
- HTML_put_string(me, ISO_Latin1[entity_number]); /* @@ Other representations */
- }
- -
-
-
- /* Free an HTML object
- --- 673,678 ----
- *** ../../../../2.12/WWW/Library/Implementation/HTML.h Mon Jun 21 16:13:15 1993
- --- HTML.h Thu Nov 4 10:07:11 1993
- ***************
- *** 1,6 ****
- --- 1,8 ----
- /* HTML to rich text converter for libwww
- THE HTML TO RTF OBJECT CONVERTER
-
- + This interprets the HTML semantics.
- +
- */
- #ifndef HTML_H
- #define HTML_H
- ***************
- *** 73,78 ****
- --- 75,81 ----
- CONST char * message));
-
- #endif
- +
-
- /*
-
- *** ../../../../2.12/WWW/Library/Implementation/HTMLDTD.c Thu Jul 8 12:17:36 1993
- --- HTMLDTD.c Thu Nov 4 15:35:11 1993
- ***************
- *** 89,95 ****
- ** Lists must be in alphatbetical order by attribute name
- ** The tag elements contain the number of attributes
- */
- ! static attr no_attr[] =
- {{ 0 }};
-
- static attr a_attr[] = { /* Anchor attributes */
- --- 89,95 ----
- ** Lists must be in alphatbetical order by attribute name
- ** The tag elements contain the number of attributes
- */
- ! static attr no_attr[1] =
- {{ 0 }};
-
- static attr a_attr[] = { /* Anchor attributes */
- ***************
- *** 103,111 ****
- { 0 } /* Terminate list */
- };
-
- ! static attr img_attr[] = { /* Anchor attributes */
- { "SRC"},
- - { "ISMAP"}, /* @@@ Use HTTP SpaceJump instead */
- { 0 } /* Terminate list */
- };
-
- --- 103,113 ----
- { 0 } /* Terminate list */
- };
-
- ! static attr img_attr[HTML_IMG_ATTRIBUTES+1] = { /* Anchor attributes */
- ! { "ALIGN" },
- ! { "ALT" },
- ! { "ISMAP"}, /* Use HTTP SpaceJump instead */
- { "SRC"},
- { 0 } /* Terminate list */
- };
-
- ***************
- *** 119,129 ****
- { 0 } /* Terminate list */
- };
-
- ! static attr nextid_attr[] = {
- ! { "N" }
- };
-
-
- /* Elements
- ** --------
- **
- --- 121,137 ----
- { 0 } /* Terminate list */
- };
-
- ! static attr nextid_attr[HTML_NEXTID_ATTRIBUTES+1] = {
- ! { "N" },
- ! { 0 } /* Terminate list */
- };
-
- + static attr pre_attr[HTML_PRE_ATTRIBUTES+1] = {
- + { "WIDTH" },
- + { 0 } /* Terminate list */
- + };
-
- +
- /* Elements
- ** --------
- **
- ***************
- *** 138,143 ****
- --- 146,152 ----
- { "B" , no_attr, 0, SGML_MIXED },
- { "BLOCKQUOTE", no_attr, 0, SGML_MIXED },
- { "BODY" , no_attr, 0, SGML_MIXED },
- + { "BR" , no_attr, 0, SGML_EMPTY },
- { "CITE" , no_attr, 0, SGML_MIXED },
- { "CODE" , no_attr, 0, SGML_MIXED },
- { "COMMENT", no_attr, 0, SGML_MIXED },
- ***************
- *** 156,161 ****
- --- 165,171 ----
- { "H5" , no_attr, 0, SGML_MIXED },
- { "H6" , no_attr, 0, SGML_MIXED },
- { "H7" , no_attr, 0, SGML_MIXED },
- + { "HR" , no_attr, 0, SGML_EMPTY },
- { "HTML" , no_attr, 0, SGML_MIXED },
- { "I" , no_attr, 0, SGML_MIXED },
- { "IMG" , img_attr, 2, SGML_EMPTY },
- ***************
- *** 169,175 ****
- { "OL" , list_attr, 1, SGML_MIXED },
- { "P" , no_attr, 0, SGML_EMPTY },
- { "PLAINTEXT", no_attr, 0, SGML_LITTERAL },
- ! { "PRE" , no_attr, 0, SGML_MIXED },
- { "SAMP" , no_attr, 0, SGML_MIXED },
- { "STRONG" , no_attr, 0, SGML_MIXED },
- { "TITLE", no_attr, 0, SGML_CDATA },
- --- 179,185 ----
- { "OL" , list_attr, 1, SGML_MIXED },
- { "P" , no_attr, 0, SGML_EMPTY },
- { "PLAINTEXT", no_attr, 0, SGML_LITTERAL },
- ! { "PRE" , pre_attr, 0, SGML_MIXED },
- { "SAMP" , no_attr, 0, SGML_MIXED },
- { "STRONG" , no_attr, 0, SGML_MIXED },
- { "TITLE", no_attr, 0, SGML_CDATA },
- ***************
- *** 224,229 ****
- --- 234,259 ----
- }
-
- (*obj->isa->start_element)(obj, HTML_A , present, value);
- +
- + }
- +
- + PUBLIC void HTNextID ARGS2(HTStructured *, obj,
- + int, next_one)
- + {
- + BOOL present[HTML_NEXTID_ATTRIBUTES];
- + CONST char* value[HTML_NEXTID_ATTRIBUTES];
- + char string[10];
- +
- + sprintf(string, "z%i", next_one);
- + {
- + int i;
- + for(i=0; i<HTML_NEXTID_ATTRIBUTES; i++)
- + present[i] = NO;
- + }
- + present[HTML_NEXTID_N] = YES;
- + value[HTML_NEXTID_N] = string;
- +
- + (*obj->isa->start_element)(obj, HTML_NEXTID , present, value);
-
- }
-
- *** ../../../../2.12/WWW/Library/Implementation/HTMLDTD.h Thu Sep 2 18:02:20 1993
- --- HTMLDTD.h Wed Nov 3 16:29:06 1993
- ***************
- *** 29,34 ****
- --- 29,35 ----
- typedef enum _HTMLElement {
- HTML_A, HTML_ADDRESS,
- HTML_B, HTML_BLOCKQUOTE, HTML_BODY,
- + HTML_BR,
- HTML_CITE, HTML_CODE, HTML_COMMENT,
- HTML_DD, HTML_DFN, HTML_DIR,
- HTML_DL, HTML_DLC, HTML_DT,
- ***************
- *** 36,41 ****
- --- 37,43 ----
- HTML_HEAD,
- HTML_H1, HTML_H2, HTML_H3,
- HTML_H4, HTML_H5, HTML_H6, HTML_H7,
- + HTML_HR,
- HTML_HTML,
- HTML_I, HTML_IMG, HTML_ISINDEX,
- HTML_KBD,
- ***************
- *** 47,53 ****
- HTML_U, HTML_UL,
- HTML_VAR, HTML_XMP } HTMLElement;
-
- ! #define HTML_ELEMENTS 45
-
- /*
-
- --- 49,55 ----
- HTML_U, HTML_UL,
- HTML_VAR, HTML_XMP } HTMLElement;
-
- ! #define HTML_ELEMENTS 48
-
- /*
-
- ***************
- *** 57,63 ****
-
- /*
-
- ! Identifier is HTML_<element>_<attribute>. These must match the tables in HTML.c!
-
- */
- #define HTML_A_HREF 0
- --- 59,65 ----
-
- /*
-
- ! Identifier is HTML_<element>_<attribute>. These must match the tables in HTMLDTD.c !
-
- */
- #define HTML_A_HREF 0
- ***************
- *** 71,80 ****
-
- #define DL_COMPACT 0
-
- ! #define HTML_IMG_SRC 0
-
- ! #define NEXTID_N 0
-
- extern CONST SGML_dtd HTML_dtd;
-
-
- --- 73,91 ----
-
- #define DL_COMPACT 0
-
- ! #define HTML_IMG_ALIGN 0
-
- ! #define HTML_IMG_ALT 1
- ! #define HTML_IMG_ISMAP 2 /* Obsolete but supported */
- ! #define HTML_IMG_SRC 3
- ! #define HTML_IMG_ATTRIBUTES 4
-
- + #define HTML_NEXTID_ATTRIBUTES 1
- + #define HTML_NEXTID_N 0
- +
- + #define HTML_PRE_WIDTH 0
- + #define HTML_PRE_ATTRIBUTES 1
- +
- extern CONST SGML_dtd HTML_dtd;
-
-
- ***************
- *** 99,104 ****
- --- 110,126 ----
-
-
- #endif /* HTMLDTD_H */
- +
- +
- + /*
- +
- + Specify next ID to be used
- +
- + This is anoter convenience routine, for specifying the next ID to be used by an editor
- + in the series z1. z2,...
- +
- + */
- + extern void HTNextID PARAMS((HTStructured * targetStream, int n));
-
- /*
-
- *** ../../../../2.12/WWW/Library/Implementation/HTMLGen.c Thu Sep 2 17:55:30 1993
- --- HTMLGen.c Wed Nov 3 16:21:46 1993
- ***************
- *** 8,17 ****
- ** Should convert old XMP, LISTING and PLAINTEXT to PRE.
- **
- ** It is not obvious to me right now whether the HEAD should be generated
- ! ** from the incomming data or the anchor. Currently itis from the former
- ** which is cleanest.
- */
-
- /* Implements:
- */
- #include "HTMLGen.h"
- --- 8,19 ----
- ** Should convert old XMP, LISTING and PLAINTEXT to PRE.
- **
- ** It is not obvious to me right now whether the HEAD should be generated
- ! ** from the incomming data or the anchor. Currently it is from the former
- ** which is cleanest.
- */
-
- + #define BUFFER_SIZE 80 /* Line buffer attempts to make neat breaks */
- +
- /* Implements:
- */
- #include "HTMLGen.h"
- ***************
- *** 23,29 ****
- #include "HTFormat.h"
-
- #define PUTC(c) (*me->targetClass.put_character)(me->target, c)
- ! #define PUTS(s) (*me->targetClass.put_string)(me->target, s)
- #define PUTB(s,l) (*me->targetClass.put_block)(me->target, s, l)
-
- /* HTML Object
- --- 25,31 ----
- #include "HTFormat.h"
-
- #define PUTC(c) (*me->targetClass.put_character)(me->target, c)
- ! /* #define PUTS(s) (*me->targetClass.put_string)(me->target, s) */
- #define PUTB(s,l) (*me->targetClass.put_block)(me->target, s, l)
-
- /* HTML Object
- ***************
- *** 40,54 ****
- CONST HTStructuredClass * isa;
- HTStream * target;
- HTStreamClass targetClass; /* COPY for speed */
- };
-
-
- /* Character handling
- ** ------------------
- */
- PRIVATE void HTMLGen_put_character ARGS2(HTStructured *, me, char, c)
- {
- ! PUTC(c);
- }
-
-
- --- 42,109 ----
- CONST HTStructuredClass * isa;
- HTStream * target;
- HTStreamClass targetClass; /* COPY for speed */
- +
- + char buffer[BUFFER_SIZE];
- + char * write_pointer;
- + char * line_break;
- + int cleanness;
- + BOOL preformatted;
- };
-
-
- + /* Flush Buffer
- + ** ------------
- + */
- + PRIVATE void HTMLGen_flush ARGS1(HTStructured *, me)
- + {
- + (*me->targetClass.put_block)(me->target,
- + me->buffer,
- + me->write_pointer - me->buffer);
- + me->write_pointer = me->buffer;
- + me->line_break = me->buffer;
- + me->cleanness = 0;
- + }
- +
- +
- /* Character handling
- ** ------------------
- */
- PRIVATE void HTMLGen_put_character ARGS2(HTStructured *, me, char, c)
- {
- !
- ! *me->write_pointer++ = c;
- !
- ! if (c=='\n') {
- ! HTMLGen_flush(me);
- ! return;
- ! }
- !
- ! if ((!me->preformatted && c==' ')) {
- ! me->line_break = me->write_pointer;
- ! me->cleanness = 1;
- ! }
- !
- ! /* Flush buffer out when full */
- ! if (me->write_pointer == me->buffer + BUFFER_SIZE) {
- ! if (me->cleanness) {
- ! me->line_break[-1] = '\n';
- ! (*me->targetClass.put_block)(me->target,
- ! me->buffer,
- ! me->line_break - me->buffer);
- ! { /* move next line in */
- ! char * p,*q;
- ! for(q=me->buffer, p=me->line_break; p < me->write_pointer; )
- ! *q++ = *p++;
- ! }
- ! me->cleanness = 0;
- ! } else {
- ! (*me->targetClass.put_block)(me->target,
- ! me->buffer,
- ! BUFFER_SIZE);
- ! }
- ! me->write_pointer = me->buffer;
- ! me->line_break = me->buffer;
- ! }
- }
-
-
- ***************
- *** 58,74 ****
- */
- PRIVATE void HTMLGen_put_string ARGS2(HTStructured *, me, CONST char*, s)
- {
- ! PUTS(s);
- }
-
- PRIVATE void HTMLGen_write ARGS3(HTStructured *, me, CONST char*, s, int, l)
- {
- ! PUTB(s,l);
- }
-
-
- /* Start Element
- ** -------------
- */
- PRIVATE void HTMLGen_start_element ARGS4(
- HTStructured *, me,
- --- 113,134 ----
- */
- PRIVATE void HTMLGen_put_string ARGS2(HTStructured *, me, CONST char*, s)
- {
- ! CONST char * p;
- ! for(p=s; *p; p++) HTMLGen_put_character(me, *p);
- }
-
- PRIVATE void HTMLGen_write ARGS3(HTStructured *, me, CONST char*, s, int, l)
- {
- ! CONST char * p;
- ! for(p=s; p<s+l; p++) HTMLGen_put_character(me, *p);
- }
-
-
- /* Start Element
- ** -------------
- + **
- + ** Within the opening tag, there may be spaces
- + ** and the line may be broken at these spaces.
- */
- PRIVATE void HTMLGen_start_element ARGS4(
- HTStructured *, me,
- ***************
- *** 77,98 ****
- CONST char **, value)
- {
- int i;
- !
- HTTag * tag = &HTML_dtd.tags[element_number];
- ! PUTC('<');
- ! PUTS(tag->name);
- if (present) for (i=0; i< tag->number_of_attributes; i++) {
- if (present[i]) {
- ! PUTC(' ');
- ! PUTS(tag->attributes[i].name);
- if (value[i]) {
- ! PUTS("=\"");
- ! PUTS(value[i]);
- ! PUTC('"');
- }
- }
- }
- ! PUTC('>');
- }
-
-
- --- 137,166 ----
- CONST char **, value)
- {
- int i;
- !
- ! BOOL was_preformatted = me->preformatted;
- HTTag * tag = &HTML_dtd.tags[element_number];
- !
- ! me->preformatted = NO;
- ! HTMLGen_put_character(me, '<');
- ! HTMLGen_put_string(me, tag->name);
- if (present) for (i=0; i< tag->number_of_attributes; i++) {
- if (present[i]) {
- ! HTMLGen_put_character(me, ' ');
- ! HTMLGen_put_string(me, tag->attributes[i].name);
- if (value[i]) {
- ! HTMLGen_put_string(me, "=\"");
- ! HTMLGen_put_string(me, value[i]);
- ! HTMLGen_put_character(me, '"');
- }
- }
- }
- ! HTMLGen_put_string(me, ">\n");
- !
- ! /* Make very specific HTML assumption that PRE can't be
- ! nested! */
- !
- ! me->preformatted = (element_number == HTML_PRE) ? YES : was_preformatted;
- }
-
-
- ***************
- *** 110,118 ****
- PRIVATE void HTMLGen_end_element ARGS2(HTStructured *, me,
- int , element_number)
- {
- ! PUTS("</");
- ! PUTS(HTML_dtd.tags[element_number].name);
- ! PUTC('>');
- }
-
-
- --- 178,187 ----
- PRIVATE void HTMLGen_end_element ARGS2(HTStructured *, me,
- int , element_number)
- {
- ! HTMLGen_put_string(me, "</");
- ! HTMLGen_put_string(me, HTML_dtd.tags[element_number].name);
- ! HTMLGen_put_character(me, '>');
- ! if (element_number == HTML_PRE) me->preformatted = NO;
- }
-
-
- ***************
- *** 123,131 ****
-
- PRIVATE void HTMLGen_put_entity ARGS2(HTStructured *, me, int, entity_number)
- {
- ! PUTC('&');
- ! PUTS(HTML_dtd.entity_names[entity_number]);
- ! PUTC(';');
- }
-
-
- --- 192,200 ----
-
- PRIVATE void HTMLGen_put_entity ARGS2(HTStructured *, me, int, entity_number)
- {
- ! HTMLGen_put_character(me, '&');
- ! HTMLGen_put_string(me, HTML_dtd.entity_names[entity_number]);
- ! HTMLGen_put_character(me, ';');
- }
-
-
- ***************
- *** 133,149 ****
- /* Free an HTML object
- ** -------------------
- **
- - ** Note that the SGML parsing context is freed, but the created object is not,
- - ** as it takes on an existence of its own unless explicitly freed.
- */
- PRIVATE void HTMLGen_free ARGS1(HTStructured *, me)
- {
- (*me->targetClass.free)(me->target); /* ripple through */
- free(me);
- }
-
-
-
- PRIVATE void HTMLGen_abort ARGS2(HTStructured *, me, HTError, e)
- {
- HTMLGen_free(me);
- --- 202,227 ----
- /* Free an HTML object
- ** -------------------
- **
- */
- PRIVATE void HTMLGen_free ARGS1(HTStructured *, me)
- {
- + (*me->targetClass.put_character)(me->target, '\n');
- + HTMLGen_flush(me);
- (*me->targetClass.free)(me->target); /* ripple through */
- free(me);
- }
-
-
- + PRIVATE void PlainToHTML_free ARGS1(HTStructured *, me)
- + {
- + HTMLGen_end_element(me, HTML_PRE);
- + HTMLGen_end_element(me, HTML_BODY);
- + HTMLGen_end_element(me, HTML_HTML);
- + HTMLGen_free(me);
- + }
-
- +
- +
- PRIVATE void HTMLGen_abort ARGS2(HTStructured *, me, HTError, e)
- {
- HTMLGen_free(me);
- ***************
- *** 152,158 ****
-
- PRIVATE void PlainToHTML_abort ARGS2(HTStructured *, me, HTError, e)
- {
- ! HTMLGen_free(me);
- }
-
-
- --- 230,236 ----
-
- PRIVATE void PlainToHTML_abort ARGS2(HTStructured *, me, HTError, e)
- {
- ! PlainToHTML_free(me);
- }
-
-
- ***************
- *** 183,189 ****
-
- me->target = output;
- me->targetClass = *me->target->isa; /* Copy pointers to routines for speed*/
- !
- return me;
- }
-
- --- 261,271 ----
-
- me->target = output;
- me->targetClass = *me->target->isa; /* Copy pointers to routines for speed*/
- !
- ! me->write_pointer = me->buffer;
- ! me->line_break = me->buffer;
- ! me->cleanness = 0;
- ! me->preformatted = NO;
- return me;
- }
-
- ***************
- *** 217,232 ****
- HTParentAnchor *, anchor,
- HTStream *, sink)
- {
- ! HTStream* me = (HTStream*)malloc(sizeof(*me));
- if (me == NULL) outofmem(__FILE__, "PlainToHTML");
- ! me->isa = (HTStreamClass*) &PlainToHTMLConversion;
-
- me->target = sink;
- me->targetClass = *me->target->isa;
- /* Copy pointers to routines for speed*/
-
- ! PUTS("<BODY>\n<PRE>\n");
- ! return me;
- }
-
-
- --- 299,315 ----
- HTParentAnchor *, anchor,
- HTStream *, sink)
- {
- ! HTStructured* me = (HTStructured*)malloc(sizeof(*me));
- if (me == NULL) outofmem(__FILE__, "PlainToHTML");
- ! me->isa = (HTStructuredClass*) &PlainToHTMLConversion;
-
- me->target = sink;
- me->targetClass = *me->target->isa;
- /* Copy pointers to routines for speed*/
-
- ! HTMLGen_put_string(me, "<HTML>\n<BODY>\n<PRE>\n");
- ! me->preformatted = YES;
- ! return (HTStream*) me;
- }
-
-
- *** ../../../../2.12/WWW/Library/Implementation/HTMLGen.h Thu Jun 10 11:55:22 1993
- --- HTMLGen.h Thu Nov 4 10:07:12 1993
- ***************
- *** 1,8 ****
- ! /* */
- !
- ! /* HTML generator
- ! */
- !
- #ifndef HTMLGEN_H
- #define HTMLGEN_H
-
- --- 1,10 ----
- ! /* /Net/dxcern/userd/timbl/hypertext/WWW/Library/Implementation/HTMLGen.html
- ! HTML GENERATOR
- !
- ! This module converts structed stream into stream. That is, given a stream to write to,
- ! it will give you a structured stream to
- !
- ! */
- #ifndef HTMLGEN_H
- #define HTMLGEN_H
-
- ***************
- *** 24,29 ****
- --- 26,32 ----
-
-
- #endif
- +
- /*
-
- */
- *** ../../../../2.12/WWW/Library/Implementation/HTPasswd.c Thu Oct 7 14:42:24 1993
- --- HTPasswd.c Wed Nov 3 16:20:34 1993
- ***************
- *** 28,33 ****
- --- 28,62 ----
- PRIVATE char salt_chars [65] =
- "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./";
-
- +
- + /* PRIVATE next_rec()
- + ** GO TO THE BEGINNING OF THE NEXT RECORD
- + ** Otherwise like HTAAFile_nextRec() but
- + ** does not handle continuation lines
- + ** (because password file has none).
- + ** ON ENTRY:
- + ** fp is the password file from which records are read from.
- + **
- + ** ON EXIT:
- + ** returns nothing. File read pointer is located at the beginning
- + ** of the next record.
- + */
- + PRIVATE void next_rec ARGS1(FILE *, fp)
- + {
- + int ch = getc(fp);
- +
- + while (ch != EOF && ch != CR && ch != LF)
- + ch = getc(fp); /* Skip until end-of-line */
- +
- + while (ch != EOF &&
- + (ch == CR || ch == LF)) /*Skip carriage returns and linefeeds*/
- + ch = getc(fp);
- +
- + if (ch != EOF)
- + ungetc(ch, fp);
- + }
- +
- +
- /* PUBLIC HTAA_encryptPasswd()
- ** ENCRYPT PASSWORD TO THE FORM THAT IT IS SAVED
- ** IN THE PASSWORD FILE.
- ***************
- *** 96,101 ****
- --- 125,136 ----
- ** ON EXIT:
- ** returns YES, if password matches the encrypted one.
- ** NO, if not, or if either parameter is NULL.
- + ** FIX:
- + ** Only the length of original encrypted password is
- + ** checked -- longer given passwords are accepted if
- + ** common length is correct (but not shorter).
- + ** This is to allow interoperation of servers and clients
- + ** who have a hard-coded limit of 8 to password.
- */
- PUBLIC BOOL HTAA_passwdMatch ARGS2(CONST char *, password,
- CONST char *, encrypted)
- ***************
- *** 104,114 ****
- int len;
- int status;
-
- ! if (!password || !encrypted ||
- ! 13*((strlen(password)+7)/8) != strlen(encrypted))
- return NO;
-
- ! len = strlen(encrypted);
-
- if (!(result = (char*)malloc(len + 1)))
- outofmem(__FILE__, "HTAA_encryptPasswd");
- --- 139,150 ----
- int len;
- int status;
-
- ! if (!password || !encrypted)
- return NO;
-
- ! len = 13*((strlen(password)+7)/8);
- ! if (len < strlen(encrypted))
- ! return NO;
-
- if (!(result = (char*)malloc(len + 1)))
- outofmem(__FILE__, "HTAA_encryptPasswd");
- ***************
- *** 137,143 ****
- len -= 13;
- } /* while */
-
- ! status = strcmp(result, encrypted);
-
- if (TRACE)
- fprintf(stderr,
- --- 173,179 ----
- len -= 13;
- } /* while */
-
- ! status = strncmp(result, encrypted, strlen(encrypted));
-
- if (TRACE)
- fprintf(stderr,
- ***************
- *** 155,161 ****
- }
-
-
- ! /* PUBLIC HTAAFile_readPasswdRec()
- ** READ A RECORD FROM THE PASSWORD FILE
- ** ON ENTRY:
- ** fp open password file
- --- 191,197 ----
- }
-
-
- ! /* PUBLIC HTAAFile_readPasswdRec()
- ** READ A RECORD FROM THE PASSWORD FILE
- ** ON ENTRY:
- ** fp open password file
- ***************
- *** 189,200 ****
- return EOF;
- }
- else if (terminator == CR || terminator == LF) { /* End of line */
- ! HTAAFile_nextRec(fp);
- return 1;
- }
- else {
- HTAAFile_readField(fp, out_password, MAX_PASSWORD_LEN);
- ! HTAAFile_nextRec(fp);
- return 2;
- }
- }
- --- 225,236 ----
- return EOF;
- }
- else if (terminator == CR || terminator == LF) { /* End of line */
- ! next_rec(fp);
- return 1;
- }
- else {
- HTAAFile_readField(fp, out_password, MAX_PASSWORD_LEN);
- ! next_rec(fp);
- return 2;
- }
- }
- *** ../../../../2.12/WWW/Library/Implementation/HTRules.c Tue Oct 5 10:47:51 1993
- --- HTRules.c Wed Nov 3 16:20:34 1993
- ***************
- *** 10,19 ****
- ** 17 Jun 92 Bug fix: pass and fail failed if didn't contain '*' TBL
- ** 1 Sep 93 Bug fix: no memory check - Nathan Torkington
- ** BYTE_ADDRESSING removed - Arthur Secret
- ! ** 11 Sep 93 MD Changed %i into %d in debug printf.
- ** VMS does not recognize %i.
- ** Bug Fix: in case of PASS, only one parameter to printf.
- ! ** 19 Sep 93 Added Access Authorization stuff - AL
- **
- */
-
- --- 10,20 ----
- ** 17 Jun 92 Bug fix: pass and fail failed if didn't contain '*' TBL
- ** 1 Sep 93 Bug fix: no memory check - Nathan Torkington
- ** BYTE_ADDRESSING removed - Arthur Secret
- ! ** 11 Sep 93 MD Changed %i into %d in debug printf.
- ** VMS does not recognize %i.
- ** Bug Fix: in case of PASS, only one parameter to printf.
- ! ** 19 Sep 93 AL Added Access Authorization stuff.
- ! ** 1 Nov 93 AL Added htbin.
- **
- */
-
- ***************
- *** 35,40 ****
- --- 36,47 ----
- char * equiv;
- } rule;
-
- + /* Global variables
- + ** ----------------
- + */
- + PUBLIC char *HTBinDir = NULL; /* Physical /htbin directory path. */
- + /* In future this should not be global. */
- +
- /* Module-wide variables
- ** ---------------------
- */
- ***************
- *** 341,347 ****
- status >= 1? quality : 1.0,
- status >= 2 ? secs : 0.0,
- status >= 3 ? secs_per_byte : 0.0 );
- !
- } else {
- op = 0==strcasecomp(word1, "map") ? HT_Map
- : 0==strcasecomp(word1, "pass") ? HT_Pass
- --- 348,357 ----
- status >= 1? quality : 1.0,
- status >= 2 ? secs : 0.0,
- status >= 3 ? secs_per_byte : 0.0 );
- !
- ! } else if (0==strcasecomp(word1, "htbin")) { /* Physical /htbin location */
- ! StrAllocCopy(HTBinDir, word2);
- !
- } else {
- op = 0==strcasecomp(word1, "map") ? HT_Map
- : 0==strcasecomp(word1, "pass") ? HT_Pass
- *** ../../../../2.12/WWW/Library/Implementation/HTRules.h Tue Oct 5 11:04:24 1993
- --- HTRules.h Thu Nov 4 10:07:13 1993
- ***************
- *** 27,32 ****
- --- 27,37 ----
- HT_Protect
- } HTRuleOp;
-
- + #ifndef HTBINDIR
- + #define HTBINDIR "/htbin" /* Default /htbin location */
- + #endif
- + extern char * HTBinDir; /* Physical /htbin location */
- +
- /*
-
- HTAddRule: Add rule to the list
- *** ../../../../2.12/WWW/Library/Implementation/HTStyle.h Thu Sep 2 18:02:22 1993
- --- HTStyle.h Thu Nov 4 10:07:12 1993
- ***************
- *** 7,13 ****
- A StyleSheet is a collection of styles, defining the translation necessary to represent
- a document. It is a linked list of styles.
-
- ! Overiding this module
-
- Why is the style structure declared in the HTStyle.h module, instead of having the user
- browser define the structure, and the HTStyle routines just use sizeof() for copying?
- --- 7,13 ----
- A StyleSheet is a collection of styles, defining the translation necessary to represent
- a document. It is a linked list of styles.
-
- ! Overriding this module
-
- Why is the style structure declared in the HTStyle.h module, instead of having the user
- browser define the structure, and the HTStyle routines just use sizeof() for copying?
- ***************
- *** 55,61 ****
- #endif
-
- #ifdef NeXT_suppressed
- ! #include 60;appkit/appkit.h>
- typedef NXCoord HTCoord;
- #define HTParagraphStyle NXTextStyle
- #define HTCoord NXCoord
- --- 55,61 ----
- #endif
-
- #ifdef NeXT_suppressed
- ! #include <appkit/appkit.h>
- typedef NXCoord HTCoord;
- #define HTParagraphStyle NXTextStyle
- #define HTCoord NXCoord
- ***************
- *** 174,179 ****
- --- 174,180 ----
- #endif
- #define CLEAR_POINTER ((void *)-1) /* Pointer value means "clear me" */
- #endif /* HTStyle_H */
- +
-
- /*
-
- *** ../../../../2.12/WWW/Library/Implementation/HTTP.c Tue Oct 5 10:47:53 1993
- --- HTTP.c Wed Oct 13 16:53:44 1993
- ***************
- *** 85,90 ****
- --- 85,91 ----
- char crlf[3]; /* A CR LF equivalent string */
- HTStream * target = NULL; /* Unconverted data */
- HTFormat format_in; /* Format arriving in the message */
- + char *auth = NULL; /* Authorization information */
-
- CONST char* gate = 0; /* disable this feature */
- SockA soc_address; /* Binary network address */
- ***************
- *** 124,129 ****
- --- 125,166 ----
- }
-
- retry:
- +
- + /*
- + ** Compose authorization information (this was moved here
- + ** from after the making of the connection so that the connection
- + ** wouldn't have to wait while prompting username and password
- + ** from the user). -- AL 13.10.93
- + */
- + #ifdef ACCESS_AUTH
- + #define FREE(x) if (x) {free(x); x=NULL;}
- + {
- + char *docname;
- + char *hostname;
- + char *colon;
- + int portnumber;
- +
- + docname = HTParse(arg, "", PARSE_PATH);
- + hostname = HTParse((gate ? gate : arg), "", PARSE_HOST);
- + if (hostname &&
- + NULL != (colon = strchr(hostname, ':'))) {
- + *(colon++) = NULL; /* Chop off port number */
- + portnumber = atoi(colon);
- + }
- + else portnumber = 80;
- +
- + auth = HTAA_composeAuth(hostname, portnumber, docname);
- +
- + if (TRACE) {
- + if (auth)
- + fprintf(stderr, "HTTP: Sending authorization: %s\n", auth);
- + else
- + fprintf(stderr, "HTTP: Not sending authorization (yet)\n");
- + }
- + FREE(hostname);
- + FREE(docname);
- + }
- + #endif /* ACCESS_AUTH */
-
- /* Now, let's get a socket set up from the server for the data:
- */
- ***************
- *** 199,233 ****
- StrAllocCat(command, line);
-
- #ifdef ACCESS_AUTH
- ! #define FREE(x) if (x) {free(x); x=NULL;}
- ! {
- ! char *docname;
- ! char *hostname;
- ! char *colon;
- ! int portnumber;
- ! char *auth;
- !
- ! docname = HTParse(arg, "", PARSE_PATH);
- ! hostname = HTParse((gate ? gate : arg), "", PARSE_HOST);
- ! if (hostname &&
- ! NULL != (colon = strchr(hostname, ':'))) {
- ! *(colon++) = NULL; /* Chop off port number */
- ! portnumber = atoi(colon);
- ! }
- ! else portnumber = 80;
- !
- ! if (NULL!=(auth=HTAA_composeAuth(hostname, portnumber, docname))) {
- ! sprintf(line, "%s%c%c", auth, CR, LF);
- ! StrAllocCat(command, line);
- ! }
- ! if (TRACE) {
- ! if (auth)
- ! fprintf(stderr, "HTTP: Sending authorization: %s\n", auth);
- ! else
- ! fprintf(stderr, "HTTP: Not sending authorization (yet)\n");
- ! }
- ! FREE(hostname);
- ! FREE(docname);
- }
- #endif /* ACCESS_AUTH */
- }
- --- 236,244 ----
- StrAllocCat(command, line);
-
- #ifdef ACCESS_AUTH
- ! if (auth != NULL) {
- ! sprintf(line, "%s%c%c", auth, CR, LF);
- ! StrAllocCat(command, line);
- }
- #endif /* ACCESS_AUTH */
- }
- *** ../../../../2.12/WWW/Library/Implementation/HTUtils.h Mon Oct 11 12:01:52 1993
- --- HTUtils.h Mon Oct 18 16:34:34 1993
- ***************
- *** 183,190 ****
- #define BOOL BOOLEAN
- #endif
- #ifndef YES
- ! #define YES (BOOLEAN)1
- ! #define NO (BOOLEAN)0
- #endif
-
- #ifndef min
- --- 183,190 ----
- #define BOOL BOOLEAN
- #endif
- #ifndef YES
- ! #define YES (BOOL)1
- ! #define NO (BOOL)0
- #endif
-
- #ifndef min
- *** ../../../../2.12/WWW/Library/Implementation/HText.h Mon Jun 21 16:13:19 1993
- --- HText.h Thu Nov 4 16:16:13 1993
- ***************
- *** 5,11 ****
-
- /*
-
- ! This is the C interface to the Objective-C (or whatever) HyperText class.
-
- */
- #ifndef HTEXT_H
- --- 5,13 ----
-
- /*
-
- ! This is the C interface to the Objective-C (or whatever) Style-oriented HyperText
- ! class. It is used when a style-oriented text object is available or craeted in order to
- ! display hypertext.
-
- */
- #ifndef HTEXT_H
- ***************
- *** 13,18 ****
- --- 15,21 ----
- #include "HTAnchor.h"
- #include "HTStyle.h"
- #include "HTStream.h"
- + #include "SGML.h"
-
- #ifdef SHORT_NAMES
- #define HTMainText HTMaText
- ***************
- *** 24,29 ****
- --- 27,33 ----
- #define HText_endAppend HTHTEnAp
- #define HText_setStyle HTHTSeSt
- #define HText_appendCharacter HTHTApCh
- + #define HText_appendImage HTHTApIm
- #define HText_appendText HTHTApTe
- #define HText_appendParagraph HTHTApPa
- #define HText_beginAnchor HTHTBeAn
- ***************
- *** 55,139 ****
- extern HText * HTMainText; /* Pointer to current main text */
- extern HTParentAnchor * HTMainAnchor; /* Pointer to current text's anchor */
-
- ! /* Creation and deletion
- ! **
- ! ** Create hypertext object HText_new
- ! */
- extern HText * HText_new PARAMS((HTParentAnchor * anchor));
- extern HText * HText_new2 PARAMS((HTParentAnchor * anchor,
- HTStream * output_stream));
-
- ! /* Free hypertext object HText_free
- ! */
- extern void HText_free PARAMS((HText * me));
-
-
- ! /* Object Building methods
- ! ** -----------------------
- ! **
- ! ** These are used by a parser to build the text in an object
- ! ** HText_beginAppend must be called, then any combination of other
- ! ** append calls, then HText_endAppend. This allows optimised
- ! ** handling using buffers and caches which are flushed at the end.
- ! */
- extern void HText_beginAppend PARAMS((HText * text));
-
- extern void HText_endAppend PARAMS((HText * text));
-
- ! /* Set the style for future text
- ! */
- extern void HText_setStyle PARAMS((HText * text, HTStyle * style));
-
- ! /* Add one character
- ! */
- extern void HText_appendCharacter PARAMS((HText * text, char ch));
-
- ! /* Add a zero-terminated string
- ! */
- extern void HText_appendText PARAMS((HText * text, CONST char * str));
-
- ! /* New Paragraph
- ! */
- extern void HText_appendParagraph PARAMS((HText * text));
-
- ! /* Start/end sensitive text
- ! **
- ! ** The anchor object is created and passed to HText_beginAnchor.
- ! ** The senstive text is added to the text object, and then HText_endAnchor
- ! ** is called. Anchors may not be nested.
- ! */
-
- extern void HText_beginAnchor PARAMS((HText * text, HTChildAnchor * anc));
- extern void HText_endAnchor PARAMS((HText * text));
-
-
- ! /* Dump diagnostics to stderr
- ! */
- extern void HText_dump PARAMS((HText * me));
-
- ! /* Return the anchor associated with this node
- ! */
- extern HTParentAnchor * HText_nodeAnchor PARAMS((HText * me));
-
-
- ! /* Browsing functions
- ! ** ------------------
- ! */
-
- ! /* Bring to front and highlight it
- ! */
-
- extern BOOL HText_select PARAMS((HText * text));
- extern BOOL HText_selectAnchor PARAMS((HText * text, HTChildAnchor* anchor));
-
- ! /* Editing functions
- ! ** -----------------
- ! **
- ! ** These are called from the application. There are many more functions
- ! ** not included here from the orginal text object. These functions
- ! ** NEED NOT BE IMPLEMENTED in a browser which cannot edit.
- ! */
-
- /* Style handling:
- */
- /* Apply this style to the selection
- --- 59,221 ----
- extern HText * HTMainText; /* Pointer to current main text */
- extern HTParentAnchor * HTMainAnchor; /* Pointer to current text's anchor */
-
- ! /*
- !
- ! Creation and deletion
- !
- ! HTEXT_NEW: CREATE HYPERTEXT OBJECT
- !
- ! There are several methods depending on how much you want to specify. The output stream
- ! is used with objects which need to output the hypertext to a stream. The structure is
- ! for objects which need to refer to the structure which is kep by the creating stream.
- !
- ! */
- extern HText * HText_new PARAMS((HTParentAnchor * anchor));
- +
- extern HText * HText_new2 PARAMS((HTParentAnchor * anchor,
- HTStream * output_stream));
-
- ! extern HText * HText_new3 PARAMS((HTParentAnchor * anchor,
- ! HTStream * output_stream,
- ! HTStructured * structure));
- !
- ! /*
- !
- ! FREE HYPERTEXT OBJECT
- !
- ! */
- extern void HText_free PARAMS((HText * me));
-
-
- ! /*
- !
- ! Object Building methods
- !
- ! These are used by a parser to build the text in an object HText_beginAppend must be
- ! called, then any combination of other append calls, then HText_endAppend. This allows
- ! optimised handling using buffers and caches which are flushed at the end.
- !
- ! */
- extern void HText_beginAppend PARAMS((HText * text));
-
- extern void HText_endAppend PARAMS((HText * text));
-
- ! /*
- !
- ! SET THE STYLE FOR FUTURE TEXT
- !
- ! */
- !
- extern void HText_setStyle PARAMS((HText * text, HTStyle * style));
-
- ! /*
- !
- ! ADD ONE CHARACTER
- !
- ! */
- extern void HText_appendCharacter PARAMS((HText * text, char ch));
-
- ! /*
- !
- ! ADD A ZERO-TERMINATED STRING
- !
- ! */
- !
- extern void HText_appendText PARAMS((HText * text, CONST char * str));
-
- ! /*
- !
- ! NEW PARAGRAPH
- !
- ! and similar things
- !
- ! */
- extern void HText_appendParagraph PARAMS((HText * text));
-
- ! extern void HText_appendLineBreak PARAMS((HText * text));
-
- + extern void HText_appendHorizontalRule PARAMS((HText * text));
- +
- +
- +
- + /*
- +
- + START/END SENSITIVE TEXT
- +
- + */
- +
- + /*
- +
- + The anchor object is created and passed to HText_beginAnchor. The senstive text is
- + added to the text object, and then HText_endAnchor is called. Anchors may not be
- + nested.
- +
- + */
- extern void HText_beginAnchor PARAMS((HText * text, HTChildAnchor * anc));
- extern void HText_endAnchor PARAMS((HText * text));
-
-
- ! /*
- !
- ! APPEND AN INLINE IMAGE
- !
- ! The image is handled by the creation of an anchor whose destination is the image
- ! document to be included. The semantics is the intended inline display of the image.
- !
- ! An alternative implementation could be, for example, to begin an anchor, append the
- ! alternative text or "IMAGE", then end the anchor. This would simply generate some text
- ! linked to the image itself as a separate document.
- !
- ! */
- ! extern void HText_appendImage PARAMS((
- ! HText * text,
- ! HTChildAnchor * anc,
- ! CONST char * alternative_text,
- ! int alignment,
- ! BOOL isMap));
- !
- ! /*
- !
- ! DUMP DIAGNOSTICS TO STDERR
- !
- ! */
- !
- extern void HText_dump PARAMS((HText * me));
-
- ! /*
- !
- ! RETURN THE ANCHOR ASSOCIATED WITH THIS NODE
- !
- ! */
- extern HTParentAnchor * HText_nodeAnchor PARAMS((HText * me));
-
-
- ! /*
-
- ! Browsing functions
-
- + */
- +
- +
- + /*
- +
- + BRING TO FRONT AND HIGHLIGHT IT
- +
- + */
- +
- +
- extern BOOL HText_select PARAMS((HText * text));
- extern BOOL HText_selectAnchor PARAMS((HText * text, HTChildAnchor* anchor));
-
- ! /*
-
- + Editing functions
- +
- + These are called from the application. There are many more functions not included here
- + from the orginal text object. These functions NEED NOT BE IMPLEMENTED in a browser
- + which cannot edit.
- +
- + */
- /* Style handling:
- */
- /* Apply this style to the selection
- ***************
- *** 177,180 ****
- #endif /* HTEXT_H */
- /*
-
- ! end */
- --- 259,262 ----
- #endif /* HTEXT_H */
- /*
-
- ! end */
- *** ../../../../2.12/WWW/Library/Implementation/SGML.c Thu Sep 2 19:03:14 1993
- --- SGML.c Thu Nov 4 15:43:09 1993
- ***************
- *** 265,271 ****
- ** NULL tag not found
- ** else address of tag structure in dtd
- */
- ! PRIVATE HTTag * find_tag ARGS2(CONST SGML_dtd*, dtd, char *, string)
- {
- int high, low, i, diff;
- for(low=0, high=dtd->number_of_tags;
- --- 265,271 ----
- ** NULL tag not found
- ** else address of tag structure in dtd
- */
- ! PUBLIC HTTag * SGMLFindTag ARGS2(CONST SGML_dtd*, dtd, CONST char *, string)
- {
- int high, low, i, diff;
- for(low=0, high=dtd->number_of_tags;
- ***************
- *** 424,430 ****
- }
- HTChunkTerminate(string) ;
-
- ! t = find_tag(dtd, string->data);
- if (!t) {
- if(TRACE) fprintf(stderr, "SGML: *** Unknown element %s\n",
- string->data);
- --- 424,430 ----
- }
- HTChunkTerminate(string) ;
-
- ! t = SGMLFindTag(dtd, string->data);
- if (!t) {
- if(TRACE) fprintf(stderr, "SGML: *** Unknown element %s\n",
- string->data);
- ***************
- *** 563,569 ****
- if (!*string->data) { /* Empty end tag */
- t = context->element_stack->tag;
- } else {
- ! t = find_tag(dtd, string->data);
- }
- if (!t) {
- if(TRACE) fprintf(stderr,
- --- 563,569 ----
- if (!*string->data) { /* Empty end tag */
- t = context->element_stack->tag;
- } else {
- ! t = SGMLFindTag(dtd, string->data);
- }
- if (!t) {
- if(TRACE) fprintf(stderr,
- *** ../../../../2.12/WWW/Library/Implementation/SGML.h Fri Sep 3 15:24:43 1993
- --- SGML.h Thu Nov 4 15:51:31 1993
- ***************
- *** 90,119 ****
-
- /*__________________________________________________________________________
- */
- - /* Structured Object definition
- - **
- - ** A structured object is something which can reasonably be
- - ** represented in SGML. I'll rephrase that. A structured
- - ** object is am ordered tree-structured arrangement of data
- - ** which is representable as text.
- - **
- - ** The SGML parer outputs to a Structured object.
- - ** A Structured object can output its contents
- - ** to another Structured Object.
- - ** It's a kind of typed stream. The architecure
- - ** is largely Dan Conolly's.
- - ** Elements and entities are passed to the sob by number, implying
- - ** a knowledge of the DTD.
- - ** Knowledge of the SGML syntax is not here, though.
- - **
- - ** Superclass: HTStream
- - */
-
-
- ! /* The creation methods will vary on the type of Structured Object.
- ! ** Maybe the callerData is enough info to pass along.
- ! */
-
- typedef struct _HTStructured HTStructured;
-
- typedef struct _HTStructuredClass{
- --- 90,114 ----
-
- /*__________________________________________________________________________
- */
-
- + /*
-
- ! Structured Object definition
-
- + A structured object is something which can reasonably be represented in SGML. I'll
- + rephrase that. A structured object is am ordered tree-structured arrangement of data
- + which is representable as text.The SGML parer outputs to a Structured object. A
- + Structured object can output its contents to another Structured Object. It's a kind of
- + typed stream. The architecure is largely Dan Conolly's. Elements and entities are
- + passed to the sob by number, implying a knowledge of the DTD. Knowledge of the SGML
- + syntax is not here, though.
- +
- + Superclass: HTStream
- +
- + The creation methods will vary on the type of Structured Object.Maybe the callerData is
- + enough info to pass along.
- +
- + */
- typedef struct _HTStructured HTStructured;
-
- typedef struct _HTStructuredClass{
- ***************
- *** 156,165 ****
-
- }HTStructuredClass;
-
-
-
- ! /* Create an SGML parser
- ! **
- ** On entry,
- ** dtd must point to a DTD structure as defined above
- ** callbacks must point to user routines.
- --- 151,172 ----
-
- }HTStructuredClass;
-
- + /*
-
- + Find a Tag by Name
-
- ! Returns a pointer to the tag within the DTD.
- !
- ! */
- ! extern HTTag * SGMLFindTag PARAMS((CONST SGML_dtd* dtd, CONST char * string));
- !
- !
- ! /*
- !
- ! Create an SGML parser
- !
- ! */
- ! /*
- ** On entry,
- ** dtd must point to a DTD structure as defined above
- ** callbacks must point to user routines.
- ***************
- *** 177,182 ****
- --- 184,194 ----
-
-
- #endif /* SGML_H */
- +
- +
- +
- +
- +
-
-
-
- *** ../../../../2.12/WWW/Library/Implementation/Version.make Thu Oct 7 17:50:45 1993
- --- Version.make Wed Nov 3 16:20:38 1993
- ***************
- *** 1 ****
- ! VC = 2.12
- --- 1 ----
- ! VC = 2.13
- *** ../../../../2.12/WWW/Library/Implementation/tcp.h Tue Oct 5 11:04:28 1993
- --- tcp.h Thu Nov 4 10:07:14 1993
- ***************
- *** 2,8 ****
- SYSTEM DEPENDENCIES
-
- System-system differences for TCP include files and macros. This file includes for each
- ! system the files necessary for network and file I/O.
-
- AUTHORS
-
- --- 2,8 ----
- SYSTEM DEPENDENCIES
-
- System-system differences for TCP include files and macros. This file includes for each
- ! system the files necessary for network and file I/O. Part of libwww.
-
- AUTHORS
-
- ***************
- *** 461,466 ****
- --- 461,475 ----
- #ifdef mips
- extern int errno;
- #endif
- +
- + /*
- +
- + OSF/1
- +
- + */
- + #ifdef __osf__
- + #define USE_DIRENT
- + #endif /* OSF1 AXP */
-
-
- /*
-