DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T c

⟦481e33922⟧ TextFile

    Length: 1905 (0x771)
    Types: TextFile
    Names: »cvmotd.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Crystal/cvmotd.c« 

TextFile

/* cvmotd.c
 *************************************************************************/

#include	<stdio.h>
#include	<time.h>
#include	<filehdr.h>
#include	<ldfcn.h>
#include	"cvmisc.h"

#define	MLEN	500

extern long time();
extern char *crypt();
extern char *malloc();
extern void free();
extern char *word1;

static char msg[MLEN] = "\nUNIX PC Crystal version 1.7\n";
static char salt[2] = '\0\0'; /* To get this in the .data section */
static char password[14] = '\0';
static char nums[65] = /* remember the terminating null */
		"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

void
motd() {
	(void) fputs(msg, stdout);
}

static void
newmotd() {
	register char *m, *line;
#define	lim	70
	printf("\nLimit lines to %d bytes.  End with a null line.\n",lim);
	m = msg;
	line = malloc(lim+2);
	do {
		fgets(line,lim+2,stdin);
		if (strlen(line) == lim+1 && *(line+lim) != '\n') {
			while (getchar() != '\n') ;
			puts("\nLine too long, retype:");
		} else {
			if (*line == '\n') break;
			strcpy(m,line);
			m += strlen(line);
			*m = '\0';
			if (m - msg + 71 > MLEN) {
				puts("\nNot enough room for another line.  Ending here.\n");
				*line = '\n';
			}
		}
	} while (*line != '\n');
	free(line);
}

static int
wizard() {
	auto long now;
	auto struct tm *local;

	if (!yes(227,0,228)) return FALSE;
	if (password[0] != '\0') {
		puts("\nProve it!  Say the magic word!\n");
		getin();
		if (strcmp(crypt(word1,salt),password)) {
			puts("\nFoo, you are nothing but a charlatan!\n");
			return FALSE;
		}
	}
	return TRUE;
}

void
maint(argv) char *argv;
{
	auto long now;

	if (!wizard()) return;
	blklin = FALSE;
	puts("\nNew magic word (null to leave it unchanged):");
	getin();
	now = time((long *)0);
	*salt = nums[(now/64)%64];
	*(salt+1) = nums[now%64];
	strcpy(password,crypt(word1,salt));

	if (yes(229,0,0)) newmotd();

	puts("Okay.  Now being saved.\n");

	

	return;
}