francine-0.99.8orig/0000755000175000017500000000000010310232643013203 5ustar alfiealfiefrancine-0.99.8orig/etc/0000755000175000017500000000000007666571052014002 5ustar alfiealfiefrancine-0.99.8orig/etc/francine.sl0000644000175000017500000000212507223614216016114 0ustar alfiealfie% francine example configuration % written by and (c) 2000 Andreas Krennmair % Redistribute after the terms of the GNU General Public License. % most configuration entries are switches; 1 means yes (or true), 0 means % no (or false). % set whether /etc/securetty should be evaluated. support_securetty = 1; % set whether a standard $PATH environemt should be set. % switching it on means better compliance to standard login. set_path_env = 1; % set whether the system mailbox should be checked for new email. check_email = 1; % set whether speech output to /dev/speech should be supported. speech_support = 0; % set the speech device (default: /dev/speech) % set_speech_device("/dev/speech"); % set the number of seconds after which francine should time out. % 0 means no timeout. timeout = 0; % set another intro string (the string that is printed out for 1 second % at program startup). % set_intro_string("Welcome to francine!\n"); % set the theme dir (default: /usr/share/francine/default.theme). % modify this if you installed another theme. set_theme_dir("/usr/share/francine/default.theme"); francine-0.99.8orig/etc/Makefile.am0000644000175000017500000000003107213170751016015 0ustar alfiealfieEXTRA_DIST = francine.sl francine-0.99.8orig/etc/Makefile.in0000644000175000017500000001011607571474250016043 0ustar alfiealfie# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : CC = @CC@ MAKEINFO = @MAKEINFO@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ EXTRA_DIST = francine.sl mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../src/config.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps etc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = etc distdir: $(DISTFILES) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: francine-0.99.8orig/src/0000755000175000017500000000000010332647412014002 5ustar alfiealfiefrancine-0.99.8orig/src/md5crypt.c0000644000175000017500000003503307270573306015730 0ustar alfiealfie/* $Id: md5crypt.c,v 1.3 2001/04/22 15:20:38 japh Exp $ * md5crypt.c -- MD5 crypting * * fancylogin uses ncurses to display a colorful login- * screen with input-masks. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Written by Richard Bergmair. * ANSI-conformance testing by Andreas Krennmair */ /* * This code implements the MD5 message-digest algorithm. * The algorithm is due to Ron Rivest. This code was * written by Colin Plumb in 1993, no copyright is claimed. * This code is in the public domain; do with it what you wish. * * Equivalent code is available from RSA Data Security, Inc. * This code has been tested against that, and is equivalent, * except that you don't need to include two pages of legalese * with every copy. * * To compute the message digest of a chunk of bytes, declare an * MD5Context structure, pass it to MD5Init, call MD5Update as * needed on buffers full of bytes, and then call MD5Final, which * will fill a supplied 16-byte array with the digest. */ /* * ---------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * wrote this file. As long as you retain this notice you * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp * ---------------------------------------------------------------------------- */ /* * Ported from FreeBSD to Linux, only minimal changes. --marekm */ /* * modified to fancylogin's coding-style by Richard Bergmair */ #include #include #include "md5crypt.h" #include "limits.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif typedef unsigned long uint32; typedef struct MD5Context { uint32 buf[4]; uint32 bits[2]; unsigned char in[64]; } MD5_CTX; void MD5Init(struct MD5Context *context); void MD5Update(struct MD5Context *context, unsigned char const *buf, unsigned len); void MD5Final(unsigned char digest[16], struct MD5Context *context); void MD5Transform(uint32 buf[4], uint32 const in[16]); void byteReverse(unsigned char *buf, unsigned longs); /*****************************************************************************/ /* byteReverse: We have no idea what this does. Let's hope there will */ /* never be problems coming up with this :-/ */ /*****************************************************************************/ void byteReverse (unsigned char *buf, unsigned longs) { uint32 t; do { t = (uint32) ((unsigned) buf[3] << 8 | buf[2]) << 16 | ((unsigned) buf[1] << 8 | buf[0]); *(uint32 *) buf = t; buf += 4; } while (--longs); } /*****************************************************************************/ /* MD5Init: Start MD5 accumulation. Set bit count to 0 and buffer to */ /* mysterious initialization constants. */ /*****************************************************************************/ void MD5Init(struct MD5Context *ctx) { ctx->buf[0] = 0x67452301; ctx->buf[1] = 0xefcdab89; ctx->buf[2] = 0x98badcfe; ctx->buf[3] = 0x10325476; ctx->bits[0] = 0; ctx->bits[1] = 0; } /*****************************************************************************/ /* MD5-Update: Update context to reflect the concatenation of */ /* another buffer full of bytes. */ /*****************************************************************************/ void MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len) { uint32 t; /* Update bitcount */ t = ctx->bits[0]; if (((ctx->bits[0] = t+((uint32)len << 3))) < t) ctx->bits[1]++; /* Carry from low to high */ ctx->bits[1] += len >> 29; t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ /* Handle any leading odd-sized chunks */ if (t != 0) { unsigned char *p = (unsigned char *) ctx->in + t; t = 64 - t; if (len < t) { memcpy(p, buf, len); return; } memcpy(p, buf, t); byteReverse(ctx->in, 16); MD5Transform(ctx->buf, (uint32 *) ctx->in); buf += t; len -= t; } /* Process data in 64-byte chunks */ while (len >= 64) { memcpy(ctx->in, buf, 64); byteReverse(ctx->in, 16); MD5Transform(ctx->buf, (uint32 *) ctx->in); buf += 64; len -= 64; } /* Handle any remaining bytes of data. */ memcpy(ctx->in, buf, len); } /*****************************************************************************/ /* Final wrapup - pad to 64-byte boundary with the bit pattern */ /* 1 0* (64-bit count of bits processed, MSB-first) */ /*****************************************************************************/ void MD5Final(unsigned char digest[16], struct MD5Context *ctx) { unsigned count; unsigned char *p; /* Compute number of bytes mod 64 */ count = (ctx->bits[0] >> 3) & 0x3F; /* * Set the first char of padding to 0x80. This is safe since there is * always at least one byte free */ p = ctx->in + count; *p++ = 0x80; /* Bytes of padding needed to make 64 bytes */ count = 64 - 1 - count; /* Pad out to 56 mod 64 */ if (count < 8) { /* Two lots of padding: Pad the first block to 64 bytes */ memset(p, 0, count); byteReverse(ctx->in, 16); MD5Transform(ctx->buf, (uint32 *) ctx->in); /* Now fill the next block with 56 bytes */ memset(ctx->in, 0, 56); } else { /* Pad block to 56 bytes */ memset(p, 0, count - 8); } byteReverse(ctx->in, 14); /* Append length in bits and transform */ ((uint32 *) ctx->in)[14] = ctx->bits[0]; ((uint32 *) ctx->in)[15] = ctx->bits[1]; MD5Transform(ctx->buf, (uint32 *) ctx->in); byteReverse((unsigned char *) ctx->buf, 4); memcpy(digest, ctx->buf, 16); memset((char *) ctx, 0, sizeof(ctx)); /* In case it's sensitive */ } /* The four core functions */ #define F1(x, y, z) ((x & y) | (~x & z)) #define F2(x, y, z) F1(z, x, y) #define F3(x, y, z) (x ^ y ^ z) #define F4(x, y, z) (y ^ (x | ~z)) /* This is the central step in the MD5 algorithm. */ #define MD5STEP(f, w, x, y, z, data, s) \ (w += f(x, y, z) + data, w = w<>(32-s), w += x) /*****************************************************************************/ /* MD5Transform: The core of the MD5 algorithm, this alters an existing */ /* MD5 hash to reflect the addition of 16 longwords of new data*/ /* MD5Update blocks the data and converts bytes into longwords */ /* for this routine. */ /*****************************************************************************/ void MD5Transform(uint32 buf[4], uint32 const in[16]) { register uint32 a, b, c, d; a = buf[0]; b = buf[1]; c = buf[2]; d = buf[3]; MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); buf[0] += a; buf[1] += b; buf[2] += c; buf[3] += d; } static unsigned char itoa64[] = /* 0 ... 63 => ascii - 64 */ "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; static void to64(char *s, unsigned long v, int n) { while (--n >= 0) { *(s++) = itoa64[v&0x3f]; v >>= 6; } } /*****************************************************************************/ /* md5_crypt: MD5-Equivalent to what crypt is for DES. */ /*****************************************************************************/ char * md5crypt(const char *pw, const char *salt) { static char *magic = "$1$"; /* * This string is magic for * this algorithm. Having * it this way, we can get * get better later on */ static char passwd[__MAX_STR_LEN__]; static char *p; static const char *sp; static const char *ep; unsigned char final[16]; int sl; int pl; int i; int j; MD5_CTX ctx; MD5_CTX ctx1; unsigned long l; /* Refine the Salt first */ sp = salt; /* If it starts with the magic string, then skip that */ if (!strncmp(sp,magic,strlen(magic))) sp += strlen(magic); /* It stops at the first '$', max 8 chars */ for (ep=sp; ((*ep && *ep) != '$') && (ep < (sp+8)); ep++) continue; /* get the length of the true salt */ sl = ep - sp; MD5Init(&ctx); /* The password first, since that is what is most unknown */ MD5Update(&ctx,pw,strlen(pw)); /* Then our magic string */ MD5Update(&ctx,magic,strlen(magic)); /* Then the raw salt */ MD5Update(&ctx,sp,sl); /* Then just as many characters of the MD5(pw,salt,pw) */ MD5Init(&ctx1); MD5Update(&ctx1,pw,strlen(pw)); MD5Update(&ctx1,sp,sl); MD5Update(&ctx1,pw,strlen(pw)); MD5Final(final,&ctx1); for (pl = strlen(pw); pl > 0; pl -= 16) MD5Update(&ctx,final,pl>16 ? 16 : pl); /* Don't leave anything around in vm they could use. */ memset(final,0,sizeof final); /* Then something really weird... */ for (j=0,i = strlen(pw); i ; i >>= 1) if (i&1) MD5Update(&ctx, final+j, 1); else MD5Update(&ctx, pw+j, 1); /* Now make the output string */ strcpy(passwd,magic); strncat(passwd,sp,sl); strcat(passwd,"$"); MD5Final(final,&ctx); /* * and now, just to make sure things don't run too fast * On a 60 Mhz Pentium this takes 34 msec, so you would * need 30 seconds to build a 1000 entry dictionary... */ for (i=0;i<1000;i++) { MD5Init(&ctx1); if (i & 1) MD5Update(&ctx1,pw,strlen(pw)); else MD5Update(&ctx1,final,16); if ((i % 3) != 0) MD5Update(&ctx1,sp,sl); if ((i % 7) != 0) MD5Update(&ctx1,pw,strlen(pw)); if (i & 1) MD5Update(&ctx1,final,16); else MD5Update(&ctx1,pw,strlen(pw)); MD5Final(final,&ctx1); } p = passwd + strlen(passwd); l = (final[ 0]<<16) | (final[ 6]<<8) | final[12]; to64(p,l,4); p += 4; l = (final[ 1]<<16) | (final[ 7]<<8) | final[13]; to64(p,l,4); p += 4; l = (final[ 2]<<16) | (final[ 8]<<8) | final[14]; to64(p,l,4); p += 4; l = (final[ 3]<<16) | (final[ 9]<<8) | final[15]; to64(p,l,4); p += 4; l = (final[ 4]<<16) | (final[10]<<8) | final[ 5]; to64(p,l,4); p += 4; l = final[11] ; to64(p,l,2); p += 2; *p = '\0'; /* Don't leave anything around in vm they could use. */ memset(final,0,sizeof final); return passwd; } francine-0.99.8orig/src/md5crypt.h0000644000175000017500000000025607267026531015733 0ustar alfiealfie/* $Id: md5crypt.h,v 1.2 2001/04/17 11:47:37 japh Exp $ */ #ifndef __HAVE_MD5CRYPT_H__ #define __HAVE_MD5CRYPT_H__ char *md5crypt(const char *pw, const char *salt); #endif francine-0.99.8orig/src/speech.c0000644000175000017500000000165607267026531015433 0ustar alfiealfie/* $Id: speech.c,v 1.3 2001/04/17 11:47:37 japh Exp $ */ #include #include #include #include #include "conf.h" int speech_device_is_accessible(char *); void do_speech_output(char * str) { FILE * f; if (speech_device_is_accessible(get_speech_device())) { f = fopen(get_speech_device(),"a"); if (f!=NULL) { fprintf(f,"%s\n",str); fclose(f); } } } /* not a very clean solution, should be rewritten */ int speech_device_is_accessible(char * fn) { struct stat fn_stat; int rc = stat(fn,&fn_stat); /* if we couldn't stat the file, we can't access it, either */ if (-1 == rc) { return 0; } /* * if the speech device is neither a char device (dectalk, etc.) nor a * fifo (speechd + festival), we don't want to write to it. */ if (!(fn_stat.st_mode&S_IFCHR) && !(fn_stat.st_mode&S_IFIFO)) { return 0; } return 1; } francine-0.99.8orig/src/speech.h0000644000175000017500000000022407267026531015426 0ustar alfiealfie/* $Id: speech.h,v 1.2 2001/04/17 11:47:37 japh Exp $ */ #ifndef __HAVE_SPEECH_H__ #define __HAVE_SPEECH_H__ int do_speech_output(char *); #endif francine-0.99.8orig/src/definitions.h0000644000175000017500000000026007267026530016471 0ustar alfiealfie/* $Id: definitions.h,v 1.2 2001/04/17 11:47:36 japh Exp $ */ #ifndef __HAVE_DEFINITIONS_H__ #define __HAVE_DEFINITIONS_H__ #define TRUE (0==0) #define FALSE (0==1) #endif francine-0.99.8orig/src/environment.h0000644000175000017500000000564707271332577016546 0ustar alfiealfie/* $Id: environment.h,v 1.4 2001/04/24 17:18:55 japh Exp $ */ #ifndef __HAVE_ENVIRONMENT_H__ #define __HAVE_ENVIRONMENT_H__ /* * some information on your system-environment: * * these macros are strings of the complete file-names * including the whole path to them: * * FILENAME_LOGIN_LOGGING filename login.logging * FILENAME_USERTTY filename usertty * FILENAME_SECURETTY filename securetty * FILENAME_LASTLOG filename lastlog * SHELL_PARAMS parameters to pass to shell * EMERGENCY_LOGIN filename of program to execute * if fatal errors occur */ #define FILENAME_LOGIN_LOGGING "/etc/login.logging" #define FILENAME_USERTTY "/etc/usertty" #define FILENAME_SECURETTY "/etc/securetty" #define FILENAME_LASTLOG "/var/log/lastlog" #define FILENAME_DEFAULTFLT "/etc/default.flt" #define EMERGENCY_LOGIN "/bin/login" #define MAILBOX_PATH "/var/spool/mail" #define SPEECH_DEVICE "/dev/speech" /* * define SUPPORT_USERTTY to get support for /etc/usertty-files * if unsure, don't do it. */ /* #define SUPPORT_USERTTY */ /* * define SUPPORT_USERTTY_NETWORK to get support for /etc/usertty's * network-functionality * if unsure, don't do it. */ /* #define SUPPORT_USERTTY_NETWORK */ /* * define SUPPORT_USERTTY_TIME to get support for /etc/usertty's * time-functionality * if unsure, don't do it. */ /* #define SUPPORT_USERTTY_TIME */ /* * define SUPPORT_SYSLOG if you want francine to support * logging through syslogd. * if unsure don't do it. */ #define SUPPORT_SYSLOG /* * define SUPPORT_FILELOG if you want francine to support * logging through log-files. * if unsure define it. */ #define SUPPORT_FILELOG /* * define ALLOW_NORMAL if you want to allow non-shadow password-verification. * if unsure define it. */ #define ALLOW_NORMAL /* * set CLOSE_AFTER_FAILED if you want login to terminate * after CLOSE_AFTER_FAILED failed logins. * * #define CLOSE_AFTER_FAILED 3 * * for example means, that login terminates after 3 failed * logins * * if you don't want login to terminate at all, don't define it. */ #define CLOSE_AFTER_FAILED 5 /* * set EXECUTE_EMERGENCY_LOGIN if you want emergency-login * (EMERGENCY_LOGIN from environment.h) to be called on fatal * errors */ #define EXECUTE_EMERGENCY_LOGIN /* * define ALLOW_NORMAL if you want to allow authenticating * using DES-encryption. If you are unsure define it. */ #define ALLOW_DES /* * define ALLOW_MD5 if you want to allow authenticating * using MD5-encryption. If you are unsure define it. */ #define ALLOW_MD5 #define MSG_NEWMAIL "You've got mail!" #define MSG_SEENMAIL "You've got old mail." #define MSG_NOMAIL "No mails for you." #define SPEECH_LOGIN_SUCCESS "Log in successful." #define SPEECH_ENTER_USERNAME "Please enter your username and password." #define SPEECH_LOGIN_FAILED "Log in failed. Please try again." #endif francine-0.99.8orig/src/authenticated.c0000644000175000017500000002225207571474556017015 0ustar alfiealfie/* $Id: authenticated.c,v 1.6 2001/04/24 17:18:55 japh Exp $ * authenticated.c -- fancylogin user-authentication. * * fancylogin uses ncurses to display a colorful login- * screen with input-masks. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Written by Richard Bergmair. * ANSI-conformance testing by Andreas Krennmair */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #ifdef HAVE_SHADOW_H # include #endif #include "definitions.h" #include "limits.h" #include "log_message.h" #include "login_permissions.h" #include "md5crypt.h" #include "pam_login.h" #include "environment.h" #define __AUTHENTICATED__ 0 #define __WRONG_PASSWORD__ 1 #define __USER_EXPIRED__ 2 #define __CANT_FETCH_SPWD__ 3 static int check_password(char *crypted, char *clear); static int auth_normal(struct passwd *passwd, char *clear); static int auth_shadow(char * username, char *clear); struct passwd *authenticated(char *username, char *password, char *rmthost); /*****************************************************************************/ /* check_password: compares the given crypted password with the encrypted */ /* cleartextpassword. */ /*****************************************************************************/ static int check_password (char *crypted, char *clear) { /* * crypt the cleartext-password * using the salt-string, and finally * see if it's the same as entered * * to put it simply * * return (strcmp ((char *)crypt(clear, passwd->pw_passwd), * passwd->pw_passwd) == 0); */ #ifdef ALLOW_DES return (strcmp ((char *)crypt(clear, crypted), crypted)==0); #else # ifdef ALLOW_MD5 return (strcmp ((char *)md5crypt(clear,crypted), crypted)==0); # else # error "Either DES or MD5 must be allowed" # endif #endif #ifdef ALLOW_MD5 #ifdef ALLOW_DES if ((strcmp ((char *)crypt(clear, crypted), crypted) != 0)) return (strcmp ((char *)md5crypt(clear, crypted),crypted) == 0); else return TRUE; #endif #endif } #ifdef ALLOW_NORMAL /*****************************************************************************/ /* auth_normal: tries to authenticate the given password from passwd */ /* (passwd) and the password entered by the user (password) */ /* using standard-authentication. */ /*****************************************************************************/ static int auth_normal (struct passwd *passwd, char *clear) { if (check_password(passwd->pw_passwd, clear)) return __AUTHENTICATED__; else return __WRONG_PASSWORD__; } #endif #ifdef HAVE_SHADOW_H /*****************************************************************************/ /* auth_shadow: tries to authenticate the given password from passwd */ /* (passwd) and the password entered by the user (password) */ /* using shadow-authentication */ /*****************************************************************************/ static int auth_shadow (char * username, char *clear) { /* * same as auth_normal, but before * verifying the password, we first get it * from shadow */ struct spwd *entry; time_t now; entry = getspnam (username); /* entry will usually be NULL when the program runs with UID!=0. if (entry==NULL) return __CANT_FETCH_SPWD__; /* what time is it? */ time (&now); /* has the account expired? */ if ((entry->sp_expire != -1) && ((unsigned long)now/(60*60*24) > entry->sp_expire)) { char errormessage[__MAX_STR_LEN__]; sprintf (errormessage, "the account for %s has expired", username); log_message (40000, errormessage); log_message (49999, errormessage); return __USER_EXPIRED__; } if (check_password(entry->sp_pwdp, clear)) return __AUTHENTICATED__; else return __WRONG_PASSWORD__; } #endif /*****************************************************************************/ /* authenticated: determines whether username and password are correct */ /* returns NULL if not authenticated, else return the user- */ /* structure. */ /*****************************************************************************/ struct passwd * authenticated (char *username, char *password, char *rmthost) { struct passwd *passwd_entry; char errormessage [__MAX_STR_LEN__]; int x; int rc; /* has the user entered a name? */ if (username[0]=='\0') return NULL; /* is the user known to the system? */ if ((passwd_entry = getpwnam (username)) == NULL) { sprintf (errormessage, "%s is not known to the system!", username); log_message (49998, errormessage); log_message (49999, errormessage); return NULL; } /* * is root trying to log on to a terminal, he is not allowed * to log on to ? */ #ifdef SUPPORT_SECURETTY if ((passwd_entry->pw_uid==0) && !(root_allowed())) { sprintf (errormessage, "accorting to /etc/securetty root is not allowed to log here"); log_message (40000, errormessage); log_message (49999, errormessage); return NULL; } #endif /* * is the user locked? */ if ((passwd_entry->pw_passwd[0])=='!') { sprintf (errormessage, "%s is locked", passwd_entry->pw_name); log_message (40000+passwd_entry->pw_uid, errormessage); log_message (49999, errormessage); return NULL; } /* * Is the user allowed to log on to this terminal * at this time, according to /etc/usertty? */ #ifdef SUPPORT_USERTTY if ((passwd_entry->pw_uid != 0) && (!(user_allowed (passwd_entry, rmthost)))) { sprintf (errormessage, "according to /etc/usertty %s is not allowed to log on here.", passwd_entry->pw_name); log_message (40000+passwd_entry->pw_uid, errormessage); log_message (49999, errormessage); return NULL; } #endif /* * does the user have a password? */ if (passwd_entry->pw_passwd[0]=='\0') { sprintf (errormessage, "%s logged in", passwd_entry->pw_name); log_message (30000+passwd_entry->pw_uid, errormessage); log_message (39999, errormessage); return passwd_entry; } /* * can the user be authenticated to the system? */ #ifdef HAVE_LIBPAM rc=pam_authenticatepam(); if (rc!=PAM_SUCCESS) return NULL; #endif if (strcmp(passwd_entry->pw_passwd,"x")==0) /* Do we use shadow? */ { #ifdef HAVE_SHADOW_H switch (auth_shadow (username, password)) { case __AUTHENTICATED__: sprintf (errormessage, "%s logged in", passwd_entry->pw_name); log_message (30000+passwd_entry->pw_uid, errormessage); log_message (39999, errormessage); return passwd_entry; case __USER_EXPIRED__: sprintf (errormessage, "%s expired", passwd_entry->pw_name); log_message (40000+passwd_entry->pw_uid, errormessage); log_message (49999, errormessage); break; case __CANT_FETCH_SPWD__: sprintf(errormessage,"couldn't fetch struct spwd for %s." " Maybe not running as root?", passwd_entry->pw_name); log_message(40000+passwd_entry->pw_uid, errormessage); log_message(49999, errormessage); } return NULL; #endif } else { #ifdef ALLOW_NORMAL if (auth_normal (passwd_entry, password)==__AUTHENTICATED__) { sprintf (errormessage, "%s logged in", passwd_entry->pw_name); log_message (30000+passwd_entry->pw_uid, errormessage); log_message (39999, errormessage); return passwd_entry; } else { /* Log that the authentication failed */ sprintf (errormessage, "%s entered a wrong password", passwd_entry->pw_name); log_message (40000+passwd_entry->pw_uid, errormessage); log_message (49999, errormessage); return NULL; } #endif } return NULL; } /*****************************************************************************/ /* (c) Copyright 1999-2000 Richard Bergmair, 2000-2001 Andreas Krennmair */ /*****************************************************************************/ francine-0.99.8orig/src/authenticated.h0000644000175000017500000000035207270560256017004 0ustar alfiealfie/* $Id: authenticated.h,v 1.3 2001/04/22 13:46:22 japh Exp $ */ #ifndef __HAVE_AUTHENTICATED_H__ #define __HAVE_AUTHENTICATED_H__ #include struct passwd *authenticated(char *username, char *password, char *rmthost); #endif francine-0.99.8orig/src/macros.h0000644000175000017500000000123107267026531015442 0ustar alfiealfie/* $Id: macros.h,v 1.2 2001/04/17 11:47:37 japh Exp $ */ #ifndef __HAVE_MACROS_H__ #define __HAVE_MACROS_H__ #define put_out(value) \ for (i=0,k=0;c!=EOF && k<3;) \ { \ if (i #include #include #include #include #include #include #include #include #include #include #include #include #include "log_message.h" #include "emergency.h" #include "conf.h" #define KEY_BACKSPACE 127 #define KEY_RETURN 10 #define KEY_TAB 9 /* * couldn't find the header * again. */ int kill(pid_t pid, int sig); /* * simple imitiations of the ncurses * functions move() and clear() */ #define move(y,x) printf("%c[%d;%df",27,y,x) #define clear() printf("%c[2J",27);fflush(stdout) static struct termios oldtermios; static int pos_username_x; static int pos_username_y; static int pos_password_x; static int pos_password_y; static int len_username; static int len_password; static int color_username_fg; static int color_username_bg; static int color_password_fg; static int color_password_bg; static char normal_ansi_file[1024]; static char failed_ansi_file[1024]; static void set_pwfield_attrs(void); static void set_userfield_attrs(void); static void reset_field_attrs(void); static void init_screen(void); static int process_config(void); static int draw_ansifile(char *ansifile); static int draw_logon(void); static int inputmask(int ypos, int xpos, const int maxchars, char *getback, char mask, char emptyc); static char readkey(void); int initialize_prompt(void); void fancy_prompt(char *user, char *password); int close_prompt(void); int draw_faillogon(void); /***********************************************************************/ /* set_pwfield_attrs: sets the attributes for the password-mask from */ /* the themefile. */ /***********************************************************************/ static void set_pwfield_attrs(void) { printf("%c[%d;%dm",27,color_password_fg,color_password_bg); } /***********************************************************************/ /* set_userfield_attrs: sets the attributes for the username-mask from */ /* the themefile. */ /***********************************************************************/ static void set_userfield_attrs(void) { printf("%c[%d;%dm",27,color_username_fg,color_username_bg); } /************************************************************************/ /* reset_field_colors: resets the colors to the terminal's default */ /************************************************************************/ static void reset_field_attrs(void) { printf("%c[m",27); } /*************************************************************************/ /* init_screen: initializes the screen to show special characters, e.g. */ /* card symbols, arrows, the famous framebars, etc. */ /*************************************************************************/ static void init_screen(void) { printf("\033[m\033]R\033]R\033[H\033[J\033[0;10;1;11m"); } /*****************************************************************************/ /* process_config: processes a theme file */ /*****************************************************************************/ static int process_config(void) { int have_theme_fl = 0; char line[__MAX_STR_LEN__]; char normal_file[256]; char failed_file[256]; struct dirent * dir; char * theme_dir = get_theme_dir(); char * theme_config_file = NULL; DIR * xdir = opendir(theme_dir); FILE * f; if (errno) return 0; while ((dir=readdir(xdir))!=NULL) { /* * if we seem to have a theme directory, * we stop searching and confirm that we found a theme.fl */ if (strcmp(dir->d_name,"theme.fl")==0) { have_theme_fl = 1; break; } } /** not having found a valid theme means aborting. */ if (have_theme_fl==0) return 0; theme_config_file = malloc(strlen(theme_dir)+strlen("/theme.fl")+1); if (theme_config_file==NULL) return 0; /* concatenating all parts to get the whole file name of the theme.fl */ strcpy(theme_config_file,theme_dir); strcat(theme_config_file,"/theme.fl"); if ((f=fopen(theme_config_file,"rt"))==NULL) return 0; /* just to be sure */ while (fgets(line,sizeof line, f) !=NULL) { if (line[0]!='#' && line[0]!=0 && line[0]!=10) { switch (line[0]) { /* username */ case 'u': sscanf(line+8," %d %d %d %d %d",&pos_username_x, &pos_username_y, &len_username, &color_username_fg, &color_username_bg); break; /* password */ case 'p': sscanf(line+8," %d %d %d %d %d",&pos_password_x, &pos_password_y, &len_password, &color_password_fg, &color_password_bg); break; /* files */ case 'f': sscanf(line+5," %s %s", normal_file, failed_file); strcpy(normal_ansi_file,theme_dir); strcat(normal_ansi_file,"/"); strcat(normal_ansi_file,normal_file); strcpy(failed_ansi_file,theme_dir); strcat(failed_ansi_file,"/"); strcat(failed_ansi_file,failed_file); break; } } } closedir(xdir); fclose(f); return 1; } /*****************************************************************************/ /* close_prompt: stuff to do when terminating */ /*****************************************************************************/ int close_prompt (void) { /* set the new attributes */ if (tcsetattr(0,TCSADRAIN,&oldtermios)) return -1; setlinebuf(stdout); fflush(stdout); printf("%cc", 27); fflush(stdout); return 0; } /*****************************************************************************/ /* draw_ansiscreen: draws the logon-screen, defined in an ansi file. */ /*****************************************************************************/ static int draw_ansifile (char * ansifile) { char c; /* color-character-buffer */ FILE * f; struct utsname info; char * termname; /* * we try to get the hostname and the terminal-name; * if this fails, the hostname becomes an empty * string and the terminal-name is simply `tty'. */ termname = malloc(strlen(ttyname(0))-5+1); if (termname==NULL) termname = "tty"; else sscanf (ttyname(0), "/dev/%s", termname); uname(&info); init_screen(); clear(); move (0, 0); f = fopen(ansifile,"rt"); if (f==NULL) return 0; while ((c=fgetc(f))!=EOF) /* for every character you find in */ { /* the themefile...*/ if (c=='%') { int i; int k; int isopen=TRUE; c=fgetc(f); switch (c) { case 'h': put_out(info.nodename) case 't': put_out(termname) case 's': put_out(info.sysname) case 'm': put_out(info.machine) } } else putchar(c); } /* while */ fflush(stdout); fclose(f); return 1; } /*****************************************************************************/ /* draw_logon: paint the login-screen */ /*****************************************************************************/ static int draw_logon(void) { if(0==draw_ansifile(normal_ansi_file)) { move(0,0); printf("Error: couldn't write file %s to screen. Please check your" " current theme for errors.\n",normal_ansi_file); } return 1; } /*****************************************************************************/ /* draw_faillogin: draw the failed-login-screen, and wait for the user to */ /* press a key. */ /*****************************************************************************/ int draw_faillogon(void) { int x; if (0==draw_ansifile(failed_ansi_file)) { move(0,0); printf("Error: couldn't write file %s to screen. Please check your" " current theme for errors.\n",failed_ansi_file); } x=getchar(); return 1; } /*****************************************************************************/ /* readkey: read a key from stdin, that is >= 0x20 */ /*****************************************************************************/ static char readkey(void) { char c; do c=getchar(); while (!((c>=0x20) || (c==KEY_BACKSPACE) || (c==KEY_RETURN) || (c==KEY_TAB))); return c; } /*****************************************************************************/ /* inputmask: draws an input field at y, x which can take up to maxchars */ /* characters, returns the result in char *getback, uses char mask*/ /* to display an input-mask for example for password-input. If you*/ /* don't want a mask, set mask 0. char emptyc defines what */ /* character to use, if nothing is displayed, usually ' '. */ /* colp defines which color-pair to use. */ /* returns 0 if the user terminates the input with and */ /* 1 if the user terminates with . */ /*****************************************************************************/ static int inputmask(int ypos, int xpos, const int maxchars, char *getback, char mask, char emptyc) { int x=0; /* Indexcounter for the current editing position */ int c; /* Character-buffer */ int i; /* counter for several purposes */ /* clear the part of the screen we'll need */ move(ypos, xpos); for (i=0;i or */ switch (c) { case KEY_BACKSPACE: /* * the user hit */ if (x>1) /* are there characters left */ { /* to delete? */ x--; /* yes-> decrement counter */ move(ypos, xpos+x-1); /* move one position back */ getback[x-1]=0; /* delete char from string */ for (i=x;i<=maxchars;i++) putchar(emptyc); /* overwrite the ch on screen */ move(ypos, xpos+x-1); /* and go back again */ fflush (stdout); /* show everything */ } x--; /* decrement counter */ break; case 3: kill(getpid(), SIGINT); default: if (x <= maxchars) /* is there space left? */ { /* yes-> */ move(ypos, xpos+x-1); /* go back one character */ if (mask==0) /* do we need masks? */ putchar(c); /* no:write the char from inp.*/ else putchar(mask); /* yes: write the mask-char */ getback[x-1]=(char)c; /* add the char to the str. */ fflush(stdout); /* show everything */ } else x--; /* no: decrement counter */ break; } /* switch */ } /* for */ if (c==10) return 0; /* return 0 when exited with */ return 1; /* return 1 if not so () */ } /*****************************************************************************/ /* initialize_prompt: Initializes everything */ /*****************************************************************************/ int initialize_prompt (void) { struct termios tio; /* load the configuration, and, if anything fails abort by calling fatal(). */ if (process_config()==0) fatal(); /* get the current terminal attributes */ if (tcgetattr(0,&tio)) return -1; oldtermios=tio; tio.c_lflag &= ICANON; tio.c_lflag &= ECHO; /* set the new attributes */ if (tcsetattr(0,TCSADRAIN,&tio)) return -1; return 0; } /******************************************************************************/ /* main-function */ /******************************************************************************/ void fancy_prompt (char *user, char *password) { int rc; do { process_config (); draw_logon (); set_userfield_attrs(); inputmask (pos_username_y, pos_username_x, len_username, user, 0, ' '); call_after_username_hook(); set_pwfield_attrs(); rc = inputmask(pos_password_y,pos_password_x,len_password, password,'*',' '); call_after_password_hook(); } while (rc); reset_field_attrs(); } /*****************************************************************************/ /* (c) Copyright 1999-2000 Richard Bergmair, 2000-2001 Andreas Krennmair */ /*****************************************************************************/ francine-0.99.8orig/src/fancy.h0000644000175000017500000000036107267026530015260 0ustar alfiealfie/* $Id: fancy.h,v 1.2 2001/04/17 11:47:36 japh Exp $ */ #ifndef __HAVE_FANCY_H__ #define __HAVE_FANCY_H__ int initialize_prompt(void); void fancy_prompt(char *user, char *password); int close_prompt(void); int draw_faillogon(void); #endif francine-0.99.8orig/src/pam_login.c0000644000175000017500000000615207271332577016132 0ustar alfiealfie/* $Id: pam_login.c,v 1.12 2001/04/24 17:18:55 japh Exp $ */ #include "config.h" #include #include #include #include #ifdef HAVE_SECURITY_PAM_APPL_H #include "pam_login.h" #define eval(rc) if (rc!=PAM_SUCCESS) return rc; static pam_handle_t *pamh=NULL; static int end_stat; static struct pam_conv conv; static char * username = NULL; static char * password = NULL; static char * line = NULL; static char * rhost = NULL; FILE * username_log; /* remove this line and francine will segfault */ void pamd_set_user(char *usn, char *pswd) { username = strdup(usn); password = strdup(pswd); } void pamd_set_location(char *ln, char *rh) { line = strdup(ln); rhost = strdup(rh?rh:"localhost"); } int pam_pamconv(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) { int i; char buf[128]; char buf2[128]; *resp=(struct pam_response *)malloc(sizeof(struct pam_response) * num_msg); for (i=0;imsg_style == PAM_PROMPT_ECHO_ON) || (msg[i]->msg_style == PAM_PROMPT_ECHO_OFF)) { (*resp)[i].resp_retcode = 0; (*resp)[i].resp = (char *)malloc(128); if (strcmp(msg[i]->msg, "Password: ") == 0) strcpy((*resp)[i].resp, password); else { strcpy(buf, msg[i]->msg); fgets(buf2, sizeof(buf2)-1,stdin); strcpy((*resp)[i].resp, buf2); } } else printf("%s\n", msg[i]->msg); } return PAM_SUCCESS; } int pam_startpam(void) { int rc; /* remove the following line and francine will segfault: */ username_log = fopen("/dev/null","wb"); conv.conv = &pam_pamconv; conv.appdata_ptr = NULL; rc=pam_start("francine", username, &conv, &pamh); assert(pamh!=NULL); eval(rc); return PAM_SUCCESS; } int pam_endpam(void) { int rc; assert(pamh!=NULL); rc=pam_end(pamh,0); eval(rc); return PAM_SUCCESS; } int pam_authenticatepam(void) { int rc; /* * let PAM know what we know */ assert(pamh!=NULL); rc=pam_set_item(pamh, PAM_USER, &username); rc=pam_set_item(pamh, PAM_USER, username); eval(rc); rc=pam_set_item(pamh, PAM_TTY, line); eval(rc); if (strcmp(rhost,"")!=0) { rc=pam_set_item(pamh, PAM_RHOST, rhost); eval(rc); } pam_get_item(pamh,PAM_USER, (const void **)&pam_user); if (pam_user[0] == '\0') pam_set_item(pamh,PAM_USER,NULL); rc=pam_authenticate(pamh, 0); eval(rc); rc=pam_acct_mgmt(pamh, 0); eval(rc); return PAM_SUCCESS; } int pam_startpamsession(void) { int rc; /* * set the user's credentials */ rc=pam_setcred(pamh, PAM_ESTABLISH_CRED); eval(rc); /* * open up the session */ rc=pam_open_session(pamh, 0); eval(rc); return PAM_SUCCESS; } int pam_endpamsession(void) { int rc; assert(pamh!=NULL); rc=pam_setcred(pamh, PAM_DELETE_CRED); eval(rc); rc=pam_close_session(pamh, 0); fclose(username_log); /* remove this line and francine will segfault */ pam_end(pamh,rc); eval(rc); return PAM_SUCCESS; } #endif francine-0.99.8orig/src/pam_login.h0000644000175000017500000000114707270573306016132 0ustar alfiealfie/* $Id: pam_login.h,v 1.4 2001/04/22 15:20:38 japh Exp $ */ #ifndef __HAVE_PAM_LOGIN_H__ #define __HAVE_PAM_LOGIN_H__ #include "config.h" #if HAVE_SECURITY_PAM_APPL_H #include #endif void pamd_set_user(char *usn, char *pswd); void pamd_set_location(char *ln, char *rh); int pam_pamconv(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *appdata_ptr); int pam_startpam(void); int pam_endpam(void); int pam_authenticatepam(void); int pam_startpamsession(void); int pam_endpamsession(void); /* I know, this is ugly -- ak */ char * pam_user; #endif francine-0.99.8orig/src/login.c0000644000175000017500000001303207271332577015270 0ustar alfiealfie/* $Id: login.c,v 1.11 2001/04/24 17:18:55 japh Exp $ * login.c -- fancylogin-login program. * * fancylogin uses ncurses to display a colorful login- * screen with input-masks. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Written by Richard Bergmair. * ANSI-conformance testing by Andreas Krennmair */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #include #include #include #include #include #include #include #include #include "speech.h" #include "limits.h" #include "definitions.h" #include "fancy.h" #include "authenticated.h" #include "log_message.h" #include "system_logon.h" #include "signal_handle.h" #include "pam_login.h" #include "emergency.h" #include "conf.h" #include "environment.h" void timeout(int ); /*****************************************************************************/ /* system_reset: resets the permissions for tty's and logs the logout to wtmp*/ /*****************************************************************************/ void system_reset (void) { struct utmp *wtmpentry; /* * log the logout to wtmp */ wtmpentry = (struct utmp *) malloc (sizeof(struct utmp)); if (wtmpentry) { wtmpentry->ut_type = USER_PROCESS; wtmpentry->ut_user[0] = '\0'; #ifdef __linux__ time(&(wtmpentry->ut_tv.tv_sec)); #else time(&(wtmpentry->ut_time)); #endif sscanf (ttyname(0), "/dev/%s", wtmpentry->ut_line); #if HAVE_UPDWTMP updwtmp ("/var/log/wtmp", wtmpentry); #endif free (wtmpentry); } /* * reset the permissions of the terminal */ chown (ttyname(0), 0, 0); chmod (ttyname(0), 0600); } /*****************************************************************************/ /* timeout: action to be taken when the login times out */ /*****************************************************************************/ void timeout (int val) { log_message (20000, "Login timed out"); close_prompt (); exit (-1); } /*****************************************************************************/ /* Main-program */ /*****************************************************************************/ int main (int argc, char **argv, char **env) { char username[__LEN_USERNAME__+1]=""; char password[__LEN_PASSWORD__+1]=""; char errormsg[__MAX_STR_LEN__]; char * rmthost = NULL; int preserve=FALSE; int i; int cntwrong = 0; struct passwd *user=NULL; install_handlers (); init_conf(); if (get_intro_string()!=NULL) { printf (get_intro_string()); sleep (1); } /* call the init_hook optionally defined in /etc/francine.sl */ call_init_hook(); if ((argc>=3) && ((strcmp(argv[1], "-r")==0) || (strcmp(argv[1], "-h") == 0))) rmthost = strdup (argv[2]); set_rmthost (rmthost); for (i=1;i static RETSIGTYPE handle_sigint(int val); static RETSIGTYPE handle_sigterm(int val); static RETSIGTYPE handle_sigsegv(int val); static RETSIGTYPE handle_misc(int val); void install_handlers(void); /*****************************************************************************/ /* handle_sigint: handler for SIGINT */ /*****************************************************************************/ RETSIGTYPE handle_sigint (int val) { close_prompt (); exit (-1); } /*****************************************************************************/ /* handle_sigterm: handler for SIGTERM */ /*****************************************************************************/ RETSIGTYPE handle_sigterm (int val) { close_prompt (); exit (0); } /*****************************************************************************/ /* handle_misc: handler for some other error-signals */ /*****************************************************************************/ RETSIGTYPE handle_misc (int val) { close_prompt (); log_message (1, "OOPS! I recieved an error-signal, please report this error, \ sending us the core-dump, your configuration files, \ and some information on your system."); fatal (); } /*****************************************************************************/ /* install_handlers: installs the signal-handlers */ /*****************************************************************************/ void install_handlers (void) { signal (SIGINT, handle_sigint); signal (SIGILL, handle_misc); signal (SIGTERM, handle_sigterm); signal (SIGFPE, handle_misc); } /*****************************************************************************/ /* (c) Copyright 1999-2000 Richard Bergmair, 2000-2001 Andreas Krennmair */ /*****************************************************************************/ francine-0.99.8orig/src/signal_handle.h0000644000175000017500000000023707270560256016754 0ustar alfiealfie/* $Id: signal_handle.h,v 1.3 2001/04/22 13:46:22 japh Exp $ */ #ifndef __SIGNAL_HANDLE_H__ #define __SIGNAL_HANDLE_H__ void install_handlers (void); #endif francine-0.99.8orig/src/conf.c0000644000175000017500000001355110332647411015077 0ustar alfiealfie/* $Id: conf.c,v 1.5 2001/04/22 13:46:22 japh Exp $ * Written by and (c) 2000 Andreas Krennmair * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "config.h" #if HAVE_LIBSLANG # include #else # warning "In order to be able to configure francine, install libslang!" #endif #include #include #include "conf.h" static int CONF_support_securetty = 1; /* will be initialized with a string via init_conf: */ static char * CONF_intro_string = NULL; static int CONF_set_path_env = 1; static int CONF_check_email = 1; static int CONF_speech_support = 0; static char * CONF_speech_device = NULL; static char * CONF_theme_dir = NULL; static int CONF_timeout = 0; /* 0 means "no timeout" */ void init_conf(void) { #if HAVE_LIBSLANG SLang_Intrin_Var_Type Var_Table[] = { MAKE_VARIABLE("support_securetty",&CONF_support_securetty, SLANG_INT_TYPE,0), MAKE_VARIABLE("set_path_env",&CONF_set_path_env, SLANG_INT_TYPE,0), MAKE_VARIABLE("check_email",&CONF_check_email, SLANG_INT_TYPE,0), MAKE_VARIABLE("speech_support",&CONF_speech_support, SLANG_INT_TYPE,0), MAKE_VARIABLE("timeout",&CONF_timeout, SLANG_INT_TYPE,0), SLANG_END_TABLE }; #endif /* * PACKAGE and VERSION are defined via command line switch from the * Makefile. To change them, edit configure.in (AM_INIT_AUTOMAKE) */ set_intro_string("You're using " PACKAGE " " VERSION "\n" "\n\n"); set_speech_device("/dev/speech"); set_theme_dir("/usr/share/francine/default.theme"); #if HAVE_LIBSLANG /* initialize all slang functions */ if (SLang_init_all() == -1) return; /* register all available hooks */ SLang_load_string("define init_hook(){ }"); SLang_load_string("define after_username_hook(){ }"); SLang_load_string("define after_password_hook(){ }"); SLang_load_string("define successful_hook(){ }"); SLang_load_string("define failed_hook(){ }"); /* register all intrinsic variables */ SLadd_intrin_var_table(Var_Table,NULL); /* register all intrinsic functions */ SLadd_intrinsic_function("set_intro_string",(FVOID_STAR)set_intro_string, SLANG_VOID_TYPE,1,SLANG_STRING_TYPE); SLadd_intrinsic_function("set_speech_device",(FVOID_STAR)set_speech_device, SLANG_VOID_TYPE,1,SLANG_STRING_TYPE); SLadd_intrinsic_function("set_theme_dir",(FVOID_STAR)set_theme_dir, SLANG_VOID_TYPE,1,SLANG_STRING_TYPE); /* load the configuration */ if (SLang_load_file("/etc/francine.sl") == -1) { SLang_restart(1); SLang_set_error(0); printf("Error while interpreting /etc/francine.sl. Please fix this.\n"); sleep(10); } #endif } void end_conf(void) { if (CONF_speech_device!=NULL) free(CONF_speech_device); if (CONF_intro_string!=NULL) free(CONF_intro_string); } int get_timeout(void) { return CONF_timeout; } void set_timeout(int val) { CONF_timeout = val; } int get_speech_support(void) { return CONF_speech_support; } void set_speech_support(int val) { CONF_speech_support = val; } int get_set_path_env(void) { return CONF_set_path_env; } void set_set_path_env(int val) { CONF_set_path_env = val; } int get_check_email(void) { return CONF_check_email; } void set_check_email(int val) { CONF_check_email = val; } int get_support_securetty(void) { return CONF_support_securetty; } void set_support_securetty(int val) { CONF_support_securetty = val; } char * get_intro_string(void) { return CONF_intro_string; } int set_intro_string(char * new_intro_string) { /* reserve memory for the new intro string: */ char * tmp = malloc(strlen(new_intro_string)+1); /* should the malloc() fail, we leave the intro string untouched: */ if (tmp == NULL) return 0; /* free the old intro_string: */ if (CONF_intro_string!=NULL) free(CONF_intro_string); /* copy new_intro_string to CONF_intro_string: */ strcpy(tmp,new_intro_string); CONF_intro_string = tmp; /* success! */ return 1; } char * get_speech_device(void) { return CONF_speech_device; } int set_speech_device(char * new_speech_device) { /* for comments, see set_intro_string() */ char * tmp = malloc(strlen(new_speech_device)+1); if (tmp == NULL) return 0; if (CONF_speech_device!=NULL) free(CONF_speech_device); strcpy(tmp,new_speech_device); CONF_speech_device = tmp; return 1; } void call_init_hook(void) { #if HAVE_LIBSLANG SLang_load_string("init_hook();"); #endif } void call_after_username_hook(void) { #if HAVE_LIBSLANG SLang_load_string("after_username_hook();"); #endif } void call_after_password_hook(void) { #if HAVE_LIBSLANG SLang_load_string("after_password_hook();"); #endif } void call_successful_hook(void) { #if HAVE_LIBSLANG SLang_load_string("successful_hook();"); #endif } void call_failed_hook(void) { #if HAVE_LIBSLANG SLang_load_string("failed_hook();"); #endif } int set_theme_dir(char * new_theme_dir) { char * tmp = malloc(strlen(new_theme_dir)+1); if (tmp == NULL) return 0; if (CONF_theme_dir!=NULL) free(CONF_theme_dir); strcpy(tmp,new_theme_dir); CONF_theme_dir = tmp; return 1; } char * get_theme_dir(void) { return CONF_theme_dir; } francine-0.99.8orig/src/conf.h0000644000175000017500000000141207267026530015103 0ustar alfiealfie/* $Id: conf.h,v 1.2 2001/04/17 11:47:36 japh Exp $ */ #ifndef __CONF_H__ #define __CONF_H__ void init_conf(void); void end_conf(void); int get_timeout(void); void set_timeout(int); int get_speech_support(void); void set_speech_support(int); int get_set_path_env(void); void set_set_path_env(int); int get_check_email(void); void set_check_email(int); int get_support_securetty(void); void set_support_securetty(int); char * get_intro_string(void); int set_intro_string(char *); char * get_speech_device(void); int set_speech_device(char *); char * get_theme_dir(void); int set_theme_dir(char *); void call_init_hook(void); void call_after_username_hook(void); void call_after_password_hook(void); void call_successful_hook(void); void call_failed_hook(void); #endif francine-0.99.8orig/src/emergency.c0000644000175000017500000000402407270573306016133 0ustar alfiealfie/* $Id: emergency.c,v 1.4 2001/04/22 15:20:38 japh Exp $ * emergency.c -- fancylogin emergency-handling * * fancylogin uses ncurses to display a colorful login- * screen with input-masks. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Written by Richard Bergmair. * ANSI-conformance testing by Andreas Krennmair */ #include #include #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "environment.h" #include "limits.h" #include "log_message.h" #include "fancy.h" #include "emergency.h" void fatal(void); /*****************************************************************************/ /* fatal: should be called for fatal errors. */ /*****************************************************************************/ void fatal (void) { close_prompt (); #ifdef EXECUTE_EMERGENCY_LOGIN for (;;) { execl (EMERGENCY_LOGIN, EMERGENCY_LOGIN, NULL); log_message (1, "Because of a found NULL pointer, I tried to execute " "the emergency login (" EMERGENCY_LOGIN "), which failed."); sleep (5*60); } #endif } /*****************************************************************************/ /* (c) Copyright 1999-2000 Richard Bergmair, 2000-2001 Andreas Krennmair */ /*****************************************************************************/ francine-0.99.8orig/src/emergency.h0000644000175000017500000000025507267026530016140 0ustar alfiealfie/* $Id: emergency.h,v 1.2 2001/04/17 11:47:36 japh Exp $ */ #ifndef __HAVE_EMERGENCY_H__ #define __HAVE_EMERGENCY_H__ void check(void *checkfor); void fatal(void); #endif francine-0.99.8orig/src/Makefile.am0000644000175000017500000000064607270555416016055 0ustar alfiealfiebin_PROGRAMS = francine francine_SOURCES = after_login.c after_login.h authenticated.c authenticated.h config.h definitions.h emergency.c emergency.h environment.h fancy.c fancy.h limits.h log_message.c log_message.h login.c login.h login_permissions.c login_permissions.h macros.h md5crypt.c md5crypt.h pam_login.c pam_login.h signal_handle.c signal_handle.h speech.c speech.h system_logon.c system_logon.h conf.c conf.h francine-0.99.8orig/src/Makefile.in0000644000175000017500000002075507571474241016071 0ustar alfiealfie# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : CC = @CC@ MAKEINFO = @MAKEINFO@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ bin_PROGRAMS = francine francine_SOURCES = after_login.c after_login.h authenticated.c authenticated.h config.h definitions.h emergency.c emergency.h environment.h fancy.c fancy.h limits.h log_message.c log_message.h login.c login.h login_permissions.c login_permissions.h macros.h md5crypt.c md5crypt.h pam_login.c pam_login.h signal_handle.c signal_handle.h speech.c speech.h system_logon.c system_logon.h conf.c conf.h mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = PROGRAMS = $(bin_PROGRAMS) DEFS = @DEFS@ -I. -I$(srcdir) -I. CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ francine_OBJECTS = after_login.o authenticated.o emergency.o fancy.o \ log_message.o login.o login_permissions.o md5crypt.o pam_login.o \ signal_handle.o speech.o system_logon.o conf.o francine_LDADD = $(LDADD) francine_DEPENDENCIES = francine_LDFLAGS = CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ DIST_COMMON = ./stamp-h.in Makefile.am Makefile.in config.h.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best SOURCES = $(francine_SOURCES) OBJECTS = $(francine_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status config.h: stamp-h @if test ! -f $@; then \ rm -f stamp-h; \ $(MAKE) stamp-h; \ else :; fi stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES= CONFIG_HEADERS=src/config.h \ $(SHELL) ./config.status @echo timestamp > stamp-h 2> /dev/null $(srcdir)/config.h.in: $(srcdir)/stamp-h.in @if test ! -f $@; then \ rm -f $(srcdir)/stamp-h.in; \ $(MAKE) $(srcdir)/stamp-h.in; \ else :; fi $(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOHEADER) @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null mostlyclean-hdr: clean-hdr: distclean-hdr: -rm -f config.h maintainer-clean-hdr: mostlyclean-binPROGRAMS: clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) distclean-binPROGRAMS: maintainer-clean-binPROGRAMS: install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) list='$(bin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done .c.o: $(COMPILE) -c $< .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: francine: $(francine_OBJECTS) $(francine_DEPENDENCIES) @rm -f francine $(LINK) $(francine_LDFLAGS) $(francine_OBJECTS) $(francine_LDADD) $(LIBS) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags -o $$here/TAGS $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP)) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = src distdir: $(DISTFILES) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am all-recursive-am: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive install-exec-am: install-binPROGRAMS install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-binPROGRAMS uninstall: uninstall-am all-am: Makefile $(PROGRAMS) config.h all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS \ mostlyclean-compile mostlyclean-tags \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-hdr clean-binPROGRAMS clean-compile clean-tags \ clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-hdr distclean-binPROGRAMS distclean-compile \ distclean-tags distclean-generic clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-hdr maintainer-clean-binPROGRAMS \ maintainer-clean-compile maintainer-clean-tags \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \ check-am installcheck-am installcheck all-recursive-am install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs \ mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: francine-0.99.8orig/src/log_message.c0000644000175000017500000001357607270573306016456 0ustar alfiealfie/* $Id: log_message.c,v 1.4 2001/04/22 15:20:38 japh Exp $ * log_message.c -- fancylogin logging capabilities * * fancylogin uses ncurses to display a colorful login- * screen with input-masks. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Written by Richard Bergmair. * ANSI-conformance testing by Andreas Krennmair */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "environment.h" #include #include #include #include #include #ifdef SUPPORT_SYSLOG #include #endif #include "limits.h" #include "definitions.h" #include "log_message.h" /* * Please excuse my using a global-variable, * but I'm just too lazy to pass this parameter * through the program over and over again, * because almost every function calls these * logging-functions, and passing the rmthost * variable to all of these functions wouldn't * be very readable. */ static char * rmthost=""; void set_rmthost (char *input); int log_message (int msgid, char *msg); /*****************************************************************************/ /* set_rmthost: sets the global variable rmthost */ /*****************************************************************************/ void set_rmthost (char *input) { rmthost = input?strdup(input):NULL; } /*****************************************************************************/ /* log_message: log the message with message-id msgid and the message-string */ /* msg. */ /*****************************************************************************/ int log_message (int msgid, char *msg) { char message[__MAX_STR_LEN__]; char xmessage[__MAX_STR_LEN__]; char line[__MAX_STR_LEN__]; char msgtype[__MAX_STR_LEN__]; char logtype[__MAX_STR_LEN__]; char logarg[__MAX_STR_LEN__]; char chtime[__MAX_STR_LEN__]; int msgarg; int fmsgid; time_t xxtime; FILE *logging; FILE *logfile; /* * What category is msgid of? */ switch ((int)(msgid / 10000)) { case 0: sprintf(message, "FATAL ERROR: %s", msg); break; case 1: sprintf(message, "NON-FATAL ERROR: %s", msg); break; case 2: sprintf(message, "FAILED LOGINS: %s", msg); break; case 3: sprintf(message, "ACCESS GRANTED: %s", msg); break; case 4: sprintf(message, "ACCESS DENIED: %s", msg); break; default: sprintf(message, "OOPS #001"); } /* * open the file login.logging */ if ((logging = fopen (FILENAME_LOGIN_LOGGING,"r")) == NULL) { if ((int)(msgid / 10000) == 0) fprintf(stderr, "%s", message); return FALSE; } while (!(feof(logging))) { /* * read the line */ if (fgets(line, sizeof (line), logging) == NULL) break; /* * parse the line */ sscanf (line, "%s %d %s %s", msgtype, &msgarg, logtype, logarg); fmsgid = 0; /* * determine fmsgid, the message * as given in the file. */ if (strcmp(msgtype, "FATAL") == 0) fmsgid = 0; if (strcmp(msgtype, "NONFATAL") == 0) fmsgid = 10000; if (strcmp(msgtype, "FAILED") == 0) fmsgid = 20000; if (strcmp(msgtype, "GRANTED") == 0) fmsgid = 30000; if (strcmp(msgtype, "DENIED") == 0) fmsgid = 40000; fmsgid+=msgarg; if (fmsgid == msgid) { #ifdef SUPPORT_FILELOG if (strcmp (logtype, "FILE") == 0) { /* * add the timestamp and terminal to the logging-string */ time (&xxtime); strcpy (chtime, ctime(&xxtime)); chtime[strlen(chtime)-1] = '\0'; sprintf (xmessage, "login from %s on %s: %s", (rmthost[0]==0 ? ttyname(0) : rmthost), chtime, message); /* * write the string to the file */ if ((logfile = fopen (logarg, "at")) == NULL) break; fprintf (logfile, "%s\n", xmessage); fclose (logfile); } #endif #ifdef SUPPORT_SYSLOG if (strcmp (logtype, "SYSLOG") == 0) { /* * we don't have to add a timestamp here, * because syslog will do it for us, so we * just add the terminal, the login is from */ sprintf (xmessage, "from %s: %s", (rmthost[0]==0 ? ttyname(0) : rmthost), message); /* * syslog it */ openlog ("francine", 0, atoi(logarg)); if ((int)(msgid / 10000)==0) syslog (LOG_CRIT, "%s\n", xmessage); else syslog (LOG_INFO, "%s\n", xmessage); closelog (); } #endif break; } } return TRUE; } /*****************************************************************************/ /* (c) Copyright 1999-2000 Richard Bergmair, 2000-2001 Andreas Krennmair */ /*****************************************************************************/ francine-0.99.8orig/src/log_message.h0000644000175000017500000000031107267026530016440 0ustar alfiealfie/* $Id: log_message.h,v 1.2 2001/04/17 11:47:36 japh Exp $ */ #ifndef __HAVE_LOG_MESSAGE__ #define __HAVE_LOG_MESSAGE__ void set_rmthost (char *input); int log_message (int msgid, char *msg); #endif francine-0.99.8orig/src/config.h.in0000644000175000017500000000333607571474247016051 0ustar alfiealfie/* src/config.h.in. Generated automatically from configure.in by autoheader 2.13. */ /* Define to empty if the keyword does not work. */ #undef const /* Define to `int' if doesn't define. */ #undef gid_t /* Define if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to `int' if doesn't define. */ #undef pid_t /* Define as the return type of signal handlers (int or void). */ #undef RETSIGTYPE /* Define if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define if your declares struct tm. */ #undef TM_IN_SYS_TIME /* Define to `int' if doesn't define. */ #undef uid_t /* Define if you have the putenv function. */ #undef HAVE_PUTENV /* Define if you have the uname function. */ #undef HAVE_UNAME /* Define if you have the updwtmp function. */ #undef HAVE_UPDWTMP /* Define if you have the header file. */ #undef HAVE_FCNTL_H /* Define if you have the header file. */ #undef HAVE_LASTLOG_H /* Define if you have the header file. */ #undef HAVE_MALLOC_H /* Define if you have the header file. */ #undef HAVE_SECURITY_PAM_APPL_H /* Define if you have the header file. */ #undef HAVE_SHADOW_H /* Define if you have the header file. */ #undef HAVE_SYSLOG_H /* Define if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have the crypt library (-lcrypt). */ #undef HAVE_LIBCRYPT /* Define if you have the pam library (-lpam). */ #undef HAVE_LIBPAM /* Define if you have the slang library (-lslang). */ #undef HAVE_LIBSLANG /* Name of package */ #undef PACKAGE /* Version number of package */ #undef VERSION francine-0.99.8orig/src/system_logon.c0000644000175000017500000002075007271332577016707 0ustar alfiealfie/* $Id: system_logon.c,v 1.10 2001/04/24 17:18:55 japh Exp $ * system_logon.c -- fancylogin system-logon procedure. * * fancylogin uses ncurses to display a colorful login- * screen with input-masks. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Written by Richard Bergmair. * ANSI-conformance testing by Andreas Krennmair */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "environment.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "macros.h" #include "limits.h" #include "log_message.h" #include "emergency.h" #include "after_login.h" #include "pam_login.h" #include "conf.h" #define _WTMP_FILE "/var/log/wtmp" static char **getnewenv (struct passwd *user); static int write_lastlog_entry(uid_t user_uid, char *rmthost, struct lastlog *oldlog); int system_logon (struct passwd *user, char *rmthost, int preserve); char * emergency_env[] = { "PATH=/bin:/usr/bin:", "SHELL=/bin/sh" , NULL }; struct utmp utent; void checkutmp(int picky) { char *line; struct utmp *ut; pid_t pid = getpid(); setutent(); /* First, try to find a valid utmp entry for this process. */ while ((ut = getutent())) if (ut->ut_pid == pid && ut->ut_line[0] && ut->ut_id[0] && (ut->ut_type==LOGIN_PROCESS || ut->ut_type==USER_PROCESS)) break; /* If there is one, just use it, otherwise create a new one. */ if (ut) { utent = *ut; } else { line = ttyname(0); if (!line) { exit(1); } if (strncmp(line, "/dev/", 5) == 0) line += 5; memset((void *) &utent, 0, sizeof utent); utent.ut_type = LOGIN_PROCESS; utent.ut_pid = pid; strncpy(utent.ut_line, line, sizeof utent.ut_line); /* XXX - assumes /dev/tty?? */ strncpy(utent.ut_id, utent.ut_line + 3, sizeof utent.ut_id); strcpy(utent.ut_user, "LOGIN"); utent.ut_time = time(NULL); } } void setutmp(const char *name, const char *line, const char *host) { utent.ut_type = USER_PROCESS; strncpy(utent.ut_user, name, sizeof utent.ut_user); utent.ut_time = time(NULL); /* other fields already filled in by checkutmp above */ setutent(); pututline(&utent); endutent(); #if HAVE_UPDWTMP updwtmp(_WTMP_FILE, &utent); #endif } /*****************************************************************************/ /* getnewenv: returns the environment, the shell needs from us, to give */ /* username, our PID, home-directory, ... */ /*****************************************************************************/ static char ** getnewenv (struct passwd *user) { #define __NUM_VARIABLES__ 7 int i; char **ne; /* * allocate memory for the environment */ ne = (char **)malloc( sizeof(char *) * (__NUM_VARIABLES__)); if (ne==NULL) return ne; for (i=0;i<__NUM_VARIABLES__;i++) { ne[i] = (char *)malloc(sizeof(char) * (__MAX_STR_LEN__)); if (ne[i]==NULL) { return NULL; } } i=0; /* * put some values in there. * * if you add something here, don't forget to increment * __NUM_VARIABLES__! */ sprintf(ne[i++], "HOME=%s", user->pw_dir); sprintf(ne[i++], "SHELL=%s", user->pw_shell); sprintf(ne[i++], "USER=%s", user->pw_name); sprintf(ne[i++], "LOGNAME=%s", user->pw_name); sprintf(ne[i++], "TERM=%s", getenv("TERM")?getenv("TERM"):"linux"); if (get_set_path_env()) { if ((user->pw_uid) == 0) sprintf(ne[i++], "PATH=/sbin:/bin:/usr/sbin:/usr/bin"); else sprintf(ne[i++], "PATH=/usr/local/bin:/bin:/usr/bin:."); } ne[i] = NULL; return ne; } /*****************************************************************************/ /* write_lastlog_entry: writes an entry of the current login into the lastlog*/ /*****************************************************************************/ static int write_lastlog_entry(uid_t user_uid, char *rmthost, struct lastlog *oldlog) { struct lastlog lastlog; /* structure for parsing lastlog */ int lastlog_file; /* file-handler for /var/log/lastlog */ /* open lastlog for writing */ if ((lastlog_file = open (FILENAME_LASTLOG, O_RDWR)) == -1) { log_message (10001, "couldn't open FILENAME_LASTLOG for O_RDWR!"); return -1; } /* what is our line? */ sscanf (ttyname(0), "/dev/%s", lastlog.ll_line); /* what host do we log on from? */ strcpy (lastlog.ll_host, rmthost); /* what is the time? */ time (&lastlog.ll_time); /* what user logged on? */ lseek (lastlog_file, (unsigned long)user_uid, SEEK_SET); /* read old data */ read (lastlog_file, oldlog, sizeof *oldlog); /* "reseek" to where we just read from */ lseek (lastlog_file, (unsigned long)user_uid, SEEK_SET); /* write data */ write (lastlog_file, (char *)&lastlog, sizeof lastlog); /* close file */ close (lastlog_file); /* all is groovy */ return 0; } /*****************************************************************************/ /* system_logon: log user on to system */ /*****************************************************************************/ int system_logon (struct passwd *user, char *rmthost, int preserve) { char **new_environment; struct utmp utmpentry, failentry; struct group *grp; struct lastlog oldlog; char * line; int i=0; int rc; #if HAVE_LIBPAM pam_startpam(); pam_startpamsession(); #endif checkutmp(strcmp(user->pw_name,"root")); /* * Update utmp and wtmp entries */ line = malloc(strlen(ttyname(0))-5/* length of /dev/ */+1/* NUL-byte */); if (line!=NULL) { sscanf(ttyname(0),"/dev/%s",line); setutmp(user->pw_name,line,rmthost?rmthost:""); free(line); } /* * Get user's environment, and should that fail, default to * the emergency environment. */ if ((new_environment = getnewenv (user)) == NULL) new_environment = emergency_env; /* * cd to user's home */ chdir (user->pw_dir); /* * Change permissions to terminal * thanks, Thomas Wernitz. */ grp = getgrnam("tty"); chown (ttyname(0), user->pw_uid, grp->gr_gid); chmod (ttyname(0), 0620); write_lastlog_entry(user->pw_uid, rmthost?rmthost:"", &oldlog); /* * execute user's shell */ rc=fork(); if (rc==0) { char * login_shell; /* * Change to user's uid and gid */ setgid (user->pw_gid); initgroups (user->pw_name, user->pw_gid); setuid (user->pw_uid); after_login (user->pw_uid, rmthost?rmthost:"", &oldlog); /* * Execute the user's shell */ login_shell = malloc(strlen(user->pw_shell)+2); if (login_shell==NULL) { log_message(49998,"Error: virtual memory exhausted! " "Can't execute shell!\n"); _exit(1); } strcpy(login_shell,"-"); strcat(login_shell,user->pw_shell); if (!(preserve)) execle(user->pw_shell, login_shell , NULL, new_environment); else { while (new_environment[i]!=NULL) putenv(new_environment[i++]); execl (user->pw_shell, login_shell , NULL); } } else if (rc == -1) { char errormessage[__MAX_STR_LEN__]; sprintf(errormessage,"couldn't fork off process for user-environment!"); log_message (1, errormessage); return -1; } else { wait (&i); #if HAVE_LIBPAM pam_endpamsession(); pam_endpam(); #endif } return 0; } /*****************************************************************************/ /* (c) Copyright 1999-2000 Richard Bergmair, 2000-2001 Andreas Krennmair */ /*****************************************************************************/ francine-0.99.8orig/src/system_logon.h0000644000175000017500000000031507267026531016702 0ustar alfiealfie/* $Id: system_logon.h,v 1.2 2001/04/17 11:47:37 japh Exp $ */ #ifndef __HAVE_SYSTEM_LOGON_H__ #define __HAVE_SYSTEM_LOGON_H__ int system_logon (struct passwd *user, char *rmthost, int preserve); #endif francine-0.99.8orig/src/stamp-h.in0000644000175000017500000000001207571474247015713 0ustar alfiealfietimestamp francine-0.99.8orig/src/login_permissions.c0000644000175000017500000004666507270573306017741 0ustar alfiealfie/* $Id: login_permissions.c,v 1.5 2001/04/22 15:20:38 japh Exp $ * login_permissions.c -- fancylogin's routines to figure out what * user is allowed to login to whitch terminal, * from whitch network, what time, ... * * fancylogin uses ncurses to display a colorful login- * screen with input-masks. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Written by Richard Bergmair. * ANSI-conformance testing by Andreas Krennmair */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "environment.h" #include #include #include #include #include #include #include #include #include #include "macros.h" #include "definitions.h" #include "limits.h" #include "fancy.h" #include "log_message.h" #include "emergency.h" #include "login.h" #ifdef SUPPORT_USERTTY /* * We'll need this for parsing the * usertty-file. */ struct sections { char sectionname [__MAX_STR_LEN__]; struct sectionmember *members; struct sections *next; }; struct sectionmember { char membername[__MAX_STR_LEN__]; struct sectionmember *next; }; #endif #ifdef SUPPORT_USERTTY static struct sections *process_section(FILE *usertty); static int file_pos_str(FILE *input, char *pattern); static int time_ok(char *param); static void dispose_section(struct sections *sect); static char *get_time(char *complete); static char *get_orig(char *orig); static int orig_ok(char *givenorig, char *remotehost); int user_allowed(struct passwd *user, char *rmthost); #endif int root_allowed(void); /******************************************************************************/ /* root_allowed: checks if /etc/securetty lets root login on this terminal. */ /******************************************************************************/ int root_allowed (void) { FILE *securetty; char line[__MAX_STR_LEN__]; char linec[__MAX_STR_LEN__]; char tty[__MAX_STR_LEN__]; if (get_support_securetty()) { sscanf (ttyname(0), "/dev/%s", tty); if ((securetty = fopen(FILENAME_SECURETTY,"r")) == NULL) return TRUE; while (!(feof(securetty))) { /* * compare every line with * read a line */ if ((fgets (line, sizeof (line), securetty)) == NULL) break; /* * leave out whitespaces */ sscanf (line, "%s", linec); /* * if the line matches the terminal * we are on. */ if (strcmp(linec, tty)==0) { /* * close the securetty-file and * return TRUE */ fclose (securetty); return TRUE; } } /* * no line matched. */ fclose (securetty); return FALSE; } /* * if /etc/securetty is not supported, then root logins are allowed on * every console. */ else return TRUE; } #ifdef SUPPORT_USERTTY /*****************************************************************************/ /* process_section: read a classes section from the file *usertty, and create*/ /* a linked list (LIFO) containing all classes, and for each*/ /* class a list of members. */ /*****************************************************************************/ static struct sections * process_section (FILE *usertty) { char line[__MAX_STR_LEN__]; char str[__MAX_STR_LEN__]; char *ch; struct sectionmember *sectionmember_buf; struct sectionmember *sectionmember_first=NULL; struct sections *section_buf; struct sections *section_first=NULL; while (fgets(line, sizeof(line), usertty)!=NULL) /* for each line */ { if (feof(usertty)) /* break on EOF */ break; if ((line != NULL) && (line[0]!='\n') && (line[0]!='#')) { /* now we've got a new line to process */ /* does this line tell us to stop processing ? */ sscanf (line, "%s", str); if ((strcmp(str, "GROUPS") == 0) || (strcmp(str, "USERS") == 0) || (strcmp(str, "CLASSES") == 0)) break; /* start processing the line */ ch = line; /* add a new item to the list */ section_buf = (struct sections *) malloc (sizeof (struct sections)); if (section_buf==NULL) return NULL; section_buf->next = section_first; section_first = section_buf; /* read the name of the new section out of the file */ sscanf (ch, "%s", section_first->sectionname); ch += strlen (section_first->sectionname); sectionmember_first=NULL; while ((*(ch) != '\n') && (*(ch)!='\0')) { /* add a new member to the memberlist */ sectionmember_buf = (struct sectionmember *) malloc (sizeof (struct sectionmember)); if (sectionmember_buf==NULL) return NULL; sectionmember_buf->next = sectionmember_first; sectionmember_first = sectionmember_buf; /* read the membername and membertime*/ sscanf (ch, "%s", sectionmember_first->membername); ch += strlen (sectionmember_first->membername) + 1; } section_first->members = sectionmember_first; } } return section_first; } /*****************************************************************************/ /* file_pos_str: position file pointer to where string is first foun */ /*****************************************************************************/ static int file_pos_str(FILE *input, char *pattern) { char line[__MAX_STR_LEN__]; char str[__MAX_STR_LEN__]; rewind (input); while (!feof(input)) { if (fgets (line, sizeof (line), input)==NULL) break; sscanf (line, "%s", str); if (strcmp(str, pattern)==0) break; } return 0; } /*****************************************************************************/ /* time_ok: determine wheather the origin allows to login at this time, */ /* using the string in the syntax, as defined for HP-UX logins. */ /*****************************************************************************/ static int time_ok (char *param) { #ifdef SUPPORT_USERTTY_TIME /* * this has to be improved some time, * the algorithm assumes the daytime (such as 9-17) * to come after the weekdays */ if (param!=NULL) { time_t seconds; struct tm *date; int weekday_allowed[7]={FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}; int i; int min=0; int max=24; time(&seconds); date = localtime(&seconds); i=0; for (;;) { if ((param[i] >= '0') && (param[i] <= '9')) { sscanf(&(param[i]), "%d-%d", &min, &max); for (;param[i]!=':' && param[i]!='\0';i++); if (param[i]=='\0') break; i++; continue; } switch (param[i]) { case 'm' : weekday_allowed[1]=TRUE; break; case 't' : if (param[i+1] == 'u') weekday_allowed[2]=TRUE; else weekday_allowed[4]=TRUE; break; case 'w' : weekday_allowed[3]=TRUE; break; case 'f' : weekday_allowed[5]=TRUE; break; case 's' : if (param[i+1] == 'a') weekday_allowed[6]=TRUE; else weekday_allowed[0]=TRUE; } for (;param[i]!=':' && param[i]!='\0';i++); if (param[i]=='\0') break; i++; } if ((weekday_allowed[date->tm_wday]) && (date->tm_hour>=min) && (date->tm_hour<=max)) return TRUE; return FALSE; } #endif return TRUE; } /*****************************************************************************/ /* dispose_section: frees the memory for the section */ /*****************************************************************************/ static void dispose_section (struct sections *sect) { struct sections *sections_buf; struct sections *sections_next; struct sectionmember *sectionm_buf; struct sectionmember *sectionm_next; for (sections_buf=sect;sections_buf!=NULL;sections_buf=sections_next) { sections_next = sections_buf->next; for (sectionm_buf=sections_buf->members;sectionm_buf!=NULL; sectionm_buf=sectionm_next) { sectionm_next = sectionm_buf->next; free (sectionm_buf); } free (sections_buf); } } /*****************************************************************************/ /* get_time: parses the part []... out of complete. */ /*****************************************************************************/ static char * get_time (char *complete) { #ifdef SUPPORT_USERTTY_TIME static char output[__MAX_STR_LEN__]; int i; if (complete[0]=='[') { for (i=1;complete[i]!=']';i++) output[i-1]=complete[i]; output[i-1]='\0'; return (char *)&output; } #endif return (char *)NULL; } /*****************************************************************************/ /* get_orig: parses the part [...] out of complete. */ /*****************************************************************************/ static char * get_orig (char *complete) { static char output[__MAX_STR_LEN__]; int i=0; if (complete != NULL) { if (complete[0]=='[') { for (i=1;complete[i]!=']';i++); i++; } strcpy (output, &(complete[i])); return (char *)&output; } return NULL; } /*****************************************************************************/ /* orig_ok: check wheather the given origin is ok for given remote host. */ /*****************************************************************************/ static int orig_ok (char *tryorig, char *remotehost) { static char terminal[__MAX_STR_LEN__] = {0}; static struct hostent *remotelogin = NULL; if ((tryorig[0]=='@') && (remotehost != NULL) && (remotehost[0] != '\0')) { #ifdef SUPPORT_USERTTY_NETWORK /* * this macro is used to convert that weird * format, ip-address bytes are stored in. */ #define ipaddress(orig) \ ((orig < 0) ? 256+orig : orig) tryorig++; if (remotehost[0]=='\0') return FALSE; if (remotelogin == NULL) { /* * get the data of the host, that is trying to log in. * with the second call we ensure, that we get everything, * in case an IP-Address is passed by telnetd/rlogind */ remotelogin = gethostbyname (remotehost); } if (strchr(tryorig,'/')!=NULL) { int ipaddr[4]; int netmask[4]; int *min_ip; int max_ip[4]; int i,j; int k=0; int is_ok; char *last; /* convert the string to an integer-array */ last = tryorig; for (i=0;;i++) if ((tryorig[i]=='.') || (tryorig[i]=='/')) { tryorig[i]='\0'; ipaddr[k]=ipaddress(atoi(last)); last=tryorig+i+1; if (k==3) break; k++; } tryorig+=i+1; k=0; last=tryorig; for (i=0;;i++) if ((tryorig[i]=='.') || (tryorig[i]=='\0')) { tryorig[i]='\0'; netmask[k]=ipaddress(atoi(last)); last = tryorig+i+1; if (k==3) break; k++; } min_ip=ipaddr; for (i=0;i<4;i++) { max_ip[i]=min_ip[i]+255-netmask[i]; if (max_ip[i] > 255) max_ip[i]=255; } for (j=0;;) { is_ok=TRUE; for (i=0;i<4;i++) if (!( (min_ip[i] <= ipaddress(remotelogin->h_addr_list[j][i])) && (ipaddress(remotelogin->h_addr_list[j][i]) <= max_ip[i]) )) { is_ok = FALSE; break; } if (is_ok) return TRUE; j++; if (remotelogin->h_addr_list[j]==NULL) return FALSE; } } else { /* at this point we are sure, that we have no ip-address */ int i; int j; int k=-1; int is_ok; char *realname; for (realname=remotelogin->h_name; remotelogin->h_aliases[k]!=NULL; realname=remotelogin->h_aliases[k]) { is_ok = TRUE; for (i=strlen(tryorig),j=strlen(realname); i>=0 && j>=0; i--,j--) if (realname[j]!=tryorig[i]) { is_ok = FALSE; break; } if (is_ok) return TRUE; k++; } return FALSE; } #endif return FALSE; } if (terminal[0]==0) sscanf (ttyname(0), "/dev/%s", terminal); return (strcmp(terminal, tryorig) == 0); } /*****************************************************************************/ /* is_member: determines whether user is a member of groupname. */ /*****************************************************************************/ static int is_member (struct passwd *user, char *groupname) { struct group *group; int i; group=getgrnam(groupname); for (i=0;group->gr_mem[i]!=NULL;i++) if (strcmp(group->gr_mem[i], user->pw_name) == 0) return TRUE; return FALSE; } /*****************************************************************************/ /* user_allowed: checks wheather /etc/usertty allows to log on to system. */ /*****************************************************************************/ int user_allowed (struct passwd *user, char *rmthost) { FILE *usertty; struct sections *classes; struct sections *users; struct sections *groups; struct sections *cur1; struct sections *cur3; struct sectionmember *cur2; struct sectionmember *cur4; char terminal[10]; char username[20]; struct group *usergroup; /* * this macro is used to stop the * function and tell the caller, that * /etc/usertty allows the user to log on */ #define ACCESS_GRANTED() \ { \ \ dispose_section (users); \ dispose_section (groups); \ dispose_section (classes); \ \ return TRUE; \ } if ((usertty = fopen(FILENAME_USERTTY,"r"))==NULL) return TRUE; file_pos_str (usertty, "CLASSES"); classes = process_section (usertty); if (classes==NULL) return FALSE; file_pos_str (usertty, "USERS"); users = process_section (usertty); if (users==NULL) return FALSE; file_pos_str (usertty, "GROUPS"); groups = process_section (usertty); if (users==NULL) return FALSE; sscanf (ttyname(0), "/dev/%s", terminal); usergroup = getgrgid (user->pw_gid); strcpy (username, user->pw_name); /* * Is the user mentioned, or do we have to apply * default rules? */ for (cur1=users;cur1!=NULL;cur1=cur1->next) if (strcmp (user->pw_name, cur1->sectionname) == 0) break; if (cur1==NULL) { /* user is not mentioned explicitly, is his group mentioned? */ for (cur1=groups;cur1!=NULL;cur1=cur1->next) if (strcmp (cur1->sectionname, usergroup->gr_name) == 0) break; if (cur1==NULL) { /* the group is not mentioned, we'll apply default rules: */ /* are default rules mentioned? */ for (cur1=users;cur1!=NULL;cur1=cur1->next) if (strcmp (cur1->sectionname, "*") == 0) break; if (cur1==NULL) /* no default rule means standard behavior, */ ACCESS_GRANTED () /* which is letting the user pass. */ else { username[0] = '*'; username[1] = '\0'; } } } /* * now comes my favourite piece of code in this program! */ /* * look up user's permissions */ for (cur1=users;cur1!=NULL;cur1=cur1->next) if (strcmp (cur1->sectionname, username) == 0) { /* added braces to make gcc -Wall happy */ for (cur2=cur1->members;cur2!=NULL;cur2=cur2->next) if (orig_ok (get_orig (cur2->membername), rmthost) && time_ok (get_time (cur2->membername))) ACCESS_GRANTED () else for (cur3=classes;cur3!=NULL;cur3=cur3->next) if (strcmp (cur2->membername, cur3->sectionname) == 0) for (cur4=cur3->members;cur4!=NULL;cur4=cur4->next) if (orig_ok (get_orig (cur4->membername), rmthost) && time_ok (get_time (cur4->membername))) ACCESS_GRANTED () } /* * look up the group's permissions */ for (cur1=groups;cur1!=NULL;cur1=cur1->next) if (is_member(user, cur1->sectionname)) { /* added braces to make gcc -Wall happy */ for (cur2=cur1->members;cur2!=NULL;cur2=cur2->next) if (orig_ok (get_orig (cur2->membername) , rmthost) && time_ok (get_time (cur2->membername))) ACCESS_GRANTED () else for (cur3=classes;cur3!=NULL;cur3=cur3->next) if (strcmp (cur2->membername, cur3->sectionname) == 0) for (cur4=cur3->members;cur4!=NULL;cur4=cur4->next) if (orig_ok (get_orig (cur4->membername), rmthost) && time_ok (get_time (cur4->membername))) ACCESS_GRANTED () } dispose_section (users); dispose_section (groups); dispose_section (classes); return FALSE; } #endif /******************************************************************************/ /* (c) Copyright 1999-2000 Richard Bergmair, remember this program is GPLed! */ /******************************************************************************/ francine-0.99.8orig/src/login_permissions.h0000644000175000017500000000044407267026530017725 0ustar alfiealfie/* $Id: login_permissions.h,v 1.2 2001/04/17 11:47:36 japh Exp $ */ #ifndef __HAVE_LOGIN_PERMISSIONS_H__ #define __HAVE_LOGIN_PERMISSIONS_H__ #ifdef SUPPORT_USERTTY int user_allowed(struct passwd *user, char *rmthost); #endif #ifdef SUPPORT_SECURETTY int root_allowed(void); #endif #endif francine-0.99.8orig/src/after_login.c0000644000175000017500000001311307666564420016453 0ustar alfiealfie/* $Id: after_login.c,v 1.5 2001/04/22 15:20:38 japh Exp $ * after_login.c -- what to do after a login, before executing the shell * * fancylogin uses ncurses to display a colorful login- * screen with input-masks. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * Written by Richard Bergmair and Andreas Krennmair. */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include "after_login.h" #include "limits.h" #include "definitions.h" #include "environment.h" #include "log_message.h" #include "emergency.h" #include #include #include #include #include #include #include #include #include #include #include static void print_welcome(struct passwd *userinfo); static int print_lastlog(struct lastlog *oldlog); static void print_motd(void); static void check_mail(struct passwd *userinfo); void after_login(uid_t uid, char *rmthost, struct lastlog *oldlog); /*****************************************************************************/ /* print_welcome: prints the "Welcome, username" message after the login. */ /*****************************************************************************/ static void print_welcome (struct passwd *userinfo) { char *name; if ((userinfo->pw_gecos == NULL) || (userinfo->pw_gecos[0] == 0)) name=userinfo->pw_name; else name=strtok(userinfo->pw_gecos,","); printf ("Welcome, %s!\n\n", name); } /*****************************************************************************/ /* print_lastlog: prints location and time of the last login. */ /*****************************************************************************/ static int print_lastlog (struct lastlog *oldlog) { char *strtime; /* convert ll_time to a human-readable string */ strtime = ctime (&(oldlog->ll_time)); /* print some information */ printf (oldlog->ll_time?"Last login was from %s, at %s\n": "This is your first login\n", oldlog->ll_line, strtime); return 0; } /*****************************************************************************/ /* print_motd: prints the message of the day */ /*****************************************************************************/ static void print_motd (void) { FILE *motd; int c; if ((motd = fopen ("/etc/motd", "r")) != NULL) /* open the file */ { while ((c = fgetc(motd)) != EOF) /* print the file */ fputc (c, stdout); fclose (motd); /* close the file */ } } /*****************************************************************************/ /* check_mail: checks the current state of the user's mailbox */ /*****************************************************************************/ static void check_mail(struct passwd *userinfo) { struct stat statbuf; char *mailbox; if (get_check_email()) { if ((mailbox = getenv("MAILDIR"))!=NULL) { char * newmail; newmail = malloc(strlen(mailbox) + 5); if (newmail) { /* What's the mailbox filename? */ sprintf(newmail, "%s/new", mailbox); /* Now let's get some information on the file */ if ((stat(newmail, &statbuf) != -1) && (statbuf.st_size != 0)) /* * is st_mtime (time of last modification) greater than * st_atime (time of last access)? */ if (statbuf.st_mtime > statbuf.st_atime) { free(newmail); printf(MSG_NEWMAIL); return; } free(newmail); } } mailbox = malloc(strlen(MAILBOX_PATH)+strlen(userinfo->pw_name)+1); if (mailbox) { strcpy(mailbox,MAILBOX_PATH); strcat(mailbox,userinfo->pw_name); if ((stat(mailbox, &statbuf) == -1) || (statbuf.st_size == 0)) printf(MSG_NOMAIL); else if (statbuf.st_atime > statbuf.st_mtime) printf(MSG_SEENMAIL); else printf(MSG_NEWMAIL); } printf("\n\n"); } } /*****************************************************************************/ /* after_login: All the stuff we have to do after a successful login */ /*****************************************************************************/ void after_login (uid_t uid, char *rmthost, struct lastlog *oldlog) { struct passwd *userinfo; userinfo = getpwuid(uid); if (userinfo) print_welcome (userinfo); print_lastlog (oldlog); print_motd (); printf ("\n"); if (userinfo) check_mail(userinfo); fflush(stdout); } /*****************************************************************************/ /* (c) Copyright 1999-2000 Richard Bergmair, 2000-2001 Andreas Krennmair */ /*****************************************************************************/ francine-0.99.8orig/src/after_login.h0000644000175000017500000000050507270573306016453 0ustar alfiealfie/* $Id: after_login.h,v 1.4 2001/04/22 15:20:38 japh Exp $ */ #ifndef __HAVE_AFTER_LOGIN_H__ #define __HAVE_AFTER_LOGIN_H__ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include #ifdef HAVE_LASTLOG_H # include #endif void after_login(uid_t, char *, struct lastlog *); #endif francine-0.99.8orig/src/limits.h0000644000175000017500000000031507267026530015460 0ustar alfiealfie/* $Id: limits.h,v 1.2 2001/04/17 11:47:36 japh Exp $ */ #ifndef __HAVE_LIMITS_H__ #define __HAVE_LIMITS_H__ #define __LEN_USERNAME__ 20 #define __LEN_PASSWORD__ 20 #define __MAX_STR_LEN__ 128 #endif francine-0.99.8orig/NEWS0000644000175000017500000000013707272527476013733 0ustar alfiealfie N E W S ======= This is the first official release of francine, so there are no changes. francine-0.99.8orig/aclocal.m40000644000175000017500000001311107571474233015062 0ustar alfiealfiednl aclocal.m4 generated automatically by aclocal 1.4-p6 dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. # Do all the work for Automake. This macro actually does too much -- # some checks are only needed if your package does certain things. # But this isn't really a big deal. # serial 1 dnl Usage: dnl AM_INIT_AUTOMAKE(package,version, [no-define]) AC_DEFUN([AM_INIT_AUTOMAKE], [AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL]) PACKAGE=[$1] AC_SUBST(PACKAGE) VERSION=[$2] AC_SUBST(VERSION) dnl test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi ifelse([$3],, AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) AC_REQUIRE([AM_SANITY_CHECK]) AC_REQUIRE([AC_ARG_PROGRAM]) dnl FIXME This is truly gross. missing_dir=`cd $ac_aux_dir && pwd` AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}, $missing_dir) AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}, $missing_dir) AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) AC_REQUIRE([AC_PROG_MAKE_SET])]) # Copyright 2002 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.4"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.4-p6])]) # # Check to make sure that the build environment is sane. # AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "[$]*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "[$]*" != "X $srcdir/configure conftestfile" \ && test "[$]*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "[$]2" = conftestfile ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi rm -f conftest* AC_MSG_RESULT(yes)]) dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) dnl The program must properly implement --version. AC_DEFUN([AM_MISSING_PROG], [AC_MSG_CHECKING(for working $2) # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if ($2 --version) < /dev/null > /dev/null 2>&1; then $1=$2 AC_MSG_RESULT(found) else $1="$3/missing $2" AC_MSG_RESULT(missing) fi AC_SUBST($1)]) # Like AC_CONFIG_HEADER, but automatically create stamp file. AC_DEFUN([AM_CONFIG_HEADER], [AC_PREREQ([2.12]) AC_CONFIG_HEADER([$1]) dnl When config.status generates a header, we must update the stamp-h file. dnl This file resides in the same directory as the config header dnl that is generated. We must strip everything past the first ":", dnl and everything past the last "/". AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, <>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, <>; do case " <<$>>CONFIG_HEADERS " in *" <<$>>am_file "*<<)>> echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx ;; esac am_indx=`expr "<<$>>am_indx" + 1` done<<>>dnl>>) changequote([,]))]) francine-0.99.8orig/README0000644000175000017500000000267107272527722014113 0ustar alfiealfie------------ francine ------------ Version ------- This is version 0.99.8 of francine. Installing francine ------------------- Please see the file INSTALL for instructions. But as with many Linux applications, it is the usual "./configure ; make ; make install" way. Features -------- francine contains lots of features: * support for themes based on ANSI files. * customizing through an embedded scripting language (S-Lang; see ). * support for /etc/usertty file. * support for a powerful logging system. * support for PAM. * support for standard crypt() and MD5 password encryption, even without PAM support. Documentation ------------- You can always find the latest documentation of francine in the project's CVS repository, module francine-doc. You can check out this module by typing this on your shell: cvs -d:pserver:anonymous@cvs.francine.sourceforge.net:/cvsroot/francine login cvs -d:pserver:anonymous@cvs.francine.sourceforge.net:/cvsroot/francine co \ francine-doc Platforms --------- francine currently compiles on the following platforms: * GNU/Linux * Solaris 8 (currently untested) * Tru64 Unix (with lots of warnings, also untested) Future Goals ------------ These are the project's future goals: * support for more Unix platforms (AIX, *BSD, HP-UX, ...). * ... If you have any ideas, please send them to us. Authors ------- Andreas Krennmair Gerfried Fuchs francine-0.99.8orig/configure0000755000175000017500000020124207571474234015136 0ustar alfiealfie#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Defaults: ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: # Initialize some variables set by options. # The variables have the same names as the options, with # dashes changed to underlines. build=NONE cache_file=./config.cache exec_prefix=NONE host=NONE no_create= nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= target=NONE verbose= x_includes=NONE x_libraries=NONE bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' # Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. ac_max_here_lines=12 ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi case "$ac_option" in -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) ac_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case "$ac_option" in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir="$ac_optarg" ;; -build | --build | --buil | --bui | --bu) ac_prev=build ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build="$ac_optarg" ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file="$ac_optarg" ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir="$ac_optarg" ;; -disable-* | --disable-*) ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` eval "enable_${ac_feature}=no" ;; -enable-* | --enable-*) ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "enable_${ac_feature}='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix="$ac_optarg" ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he) # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat << EOF Usage: configure [options] [host] Options: [defaults in brackets after descriptions] Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] --bindir=DIR user executables in DIR [EPREFIX/bin] --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] --libexecdir=DIR program executables in DIR [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data in DIR [PREFIX/share] --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com] --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] --libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include] --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] --infodir=DIR info documentation in DIR [PREFIX/info] --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names EOF cat << EOF Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] --target=TARGET configure for TARGET [TARGET=HOST] Features and packages: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR EOF if test -n "$ac_help"; then echo "--enable and --with options recognized:$ac_help" fi exit 0 ;; -host | --host | --hos | --ho) ac_prev=host ;; -host=* | --host=* | --hos=* | --ho=*) host="$ac_optarg" ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir="$ac_optarg" ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir="$ac_optarg" ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir="$ac_optarg" ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir="$ac_optarg" ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir="$ac_optarg" ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir="$ac_optarg" ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir="$ac_optarg" ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix="$ac_optarg" ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix="$ac_optarg" ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix="$ac_optarg" ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name="$ac_optarg" ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir="$ac_optarg" ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir="$ac_optarg" ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site="$ac_optarg" ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir="$ac_optarg" ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir="$ac_optarg" ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target="$ac_optarg" ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers) echo "configure generated by autoconf version 2.13" exit 0 ;; -with-* | --with-*) ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "with_${ac_package}='$ac_optarg'" ;; -without-* | --without-*) ac_package=`echo $ac_option|sed -e 's/-*without-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` eval "with_${ac_package}=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes="$ac_optarg" ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries="$ac_optarg" ;; -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ;; *) if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then echo "configure: warning: $ac_option: invalid host type" 1>&2 fi if test "x$nonopt" != xNONE; then { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } fi nonopt="$ac_option" ;; esac done if test -n "$ac_prev"; then { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } fi trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 6 checking for... messages and results # 5 compiler messages saved in config.log if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>./config.log echo "\ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. " 1>&5 # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell metacharacters. ac_configure_args= for ac_arg do case "$ac_arg" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_arg" ;; esac done # NLS nuisances. # Only set these to C if already set. These must not be set unconditionally # because not all systems understand e.g. LANG=C (notably SCO). # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! # Non-C LC_CTYPE values break the ctype check. if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo > confdefs.h # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. ac_unique_file=src/after_login.c # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi fi srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then echo "loading site script $ac_site_file" . "$ac_site_file" fi done if test -r "$cache_file"; then echo "loading cache $cache_file" . $cache_file else echo "creating cache $cache_file" > $cache_file fi ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross ac_exeext= ac_objext=o if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break fi done if test -z "$ac_aux_dir"; then { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. am__api_version="1.4" # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:558: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 echo "configure:611: checking whether build environment is sane" >&5 # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "$*" != "X $srcdir/configure conftestfile" \ && test "$*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { echo "configure: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" 1>&2; exit 1; } fi test "$2" = conftestfile ) then # Ok. : else { echo "configure: error: newly created file is older than distributed files! Check your system clock" 1>&2; exit 1; } fi rm -f conftest* echo "$ac_t""yes" 1>&6 if test "$program_transform_name" = s,x,x,; then program_transform_name= else # Double any \ or $. echo might interpret backslashes. cat <<\EOF_SED > conftestsed s,\\,\\\\,g; s,\$,$$,g EOF_SED program_transform_name="`echo $program_transform_name|sed -f conftestsed`" rm -f conftestsed fi test "$program_prefix" != NONE && program_transform_name="s,^,${program_prefix},; $program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" # sed with no file args requires a program. test "$program_transform_name" = "" && program_transform_name="s,x,x," echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:668: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftestmake <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftestmake fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$ac_t""yes" 1>&6 SET_MAKE= else echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi PACKAGE=francine VERSION=0.99.8 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } fi cat >> confdefs.h <> confdefs.h <&6 echo "configure:714: checking for working aclocal-${am__api_version}" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (aclocal-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then ACLOCAL=aclocal-${am__api_version} echo "$ac_t""found" 1>&6 else ACLOCAL="$missing_dir/missing aclocal-${am__api_version}" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 echo "configure:727: checking for working autoconf" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoconf --version) < /dev/null > /dev/null 2>&1; then AUTOCONF=autoconf echo "$ac_t""found" 1>&6 else AUTOCONF="$missing_dir/missing autoconf" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working automake-${am__api_version}""... $ac_c" 1>&6 echo "configure:740: checking for working automake-${am__api_version}" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (automake-${am__api_version} --version) < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake-${am__api_version} echo "$ac_t""found" 1>&6 else AUTOMAKE="$missing_dir/missing automake-${am__api_version}" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 echo "configure:753: checking for working autoheader" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoheader --version) < /dev/null > /dev/null 2>&1; then AUTOHEADER=autoheader echo "$ac_t""found" 1>&6 else AUTOHEADER="$missing_dir/missing autoheader" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 echo "configure:766: checking for working makeinfo" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (makeinfo --version) < /dev/null > /dev/null 2>&1; then MAKEINFO=makeinfo echo "$ac_t""found" 1>&6 else MAKEINFO="$missing_dir/missing makeinfo" echo "$ac_t""missing" 1>&6 fi test "$prefix" = "NONE" && prefix="/usr" test "$prefix" = "/usr" && exec_prefix="" test "CFLAGS" = "" && CFLAGS="-O2 -Wall" # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:793: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="gcc" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:823: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_prog_rejected=no ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" break fi done IFS="$ac_save_ifs" if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" "$@" shift ac_cv_prog_CC="$@" fi fi fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then case "`uname -s`" in *win32* | *WIN32*) # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:874: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="cl" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi ;; esac fi test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:906: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF #line 917 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:922: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cc_cross=no else ac_cv_prog_cc_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_works=no fi rm -fr conftest* ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:948: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo "configure:953: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no fi fi echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes else GCC= fi ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo "configure:981: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ac_cv_prog_cc_g=yes else ac_cv_prog_cc_g=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 if test "$ac_test_CFLAGS" = set; then CFLAGS="$ac_save_CFLAGS" elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:1024: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking for SLang_init_all in -lslang""... $ac_c" 1>&6 echo "configure:1079: checking for SLang_init_all in -lslang" >&5 ac_lib_var=`echo slang'_'SLang_init_all | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lslang $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo slang | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for pam_end in -lpam""... $ac_c" 1>&6 echo "configure:1126: checking for pam_end in -lpam" >&5 ac_lib_var=`echo pam'_'pam_end | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lpam $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo pam | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6 echo "configure:1173: checking for crypt in -lcrypt" >&5 ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lcrypt $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo crypt | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 echo "configure:1221: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # This must be in double quotes, not single quotes, because CPP may get # substituted into the Makefile and "${CC-cc}" will confuse make. CPP="${CC-cc} -E" # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1242: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1259: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1276: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP=/lib/cpp fi rm -f conftest* fi rm -f conftest* fi rm -f conftest* ac_cv_prog_CPP="$CPP" fi CPP="$ac_cv_prog_CPP" else ac_cv_prog_CPP="$CPP" fi echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:1301: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1314: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF if { (eval echo configure:1381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_header_stdc=no fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_header_stdc" 1>&6 if test $ac_cv_header_stdc = yes; then cat >> confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 echo "configure:1405: checking for sys/wait.h that is POSIX.1 compatible" >&5 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #ifndef WEXITSTATUS #define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) #endif #ifndef WIFEXITED #define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main() { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } EOF if { (eval echo configure:1426: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_sys_wait_h=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_sys_wait_h=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_header_sys_wait_h" 1>&6 if test $ac_cv_header_sys_wait_h = yes; then cat >> confdefs.h <<\EOF #define HAVE_SYS_WAIT_H 1 EOF fi for ac_hdr in fcntl.h malloc.h syslog.h unistd.h lastlog.h security/pam_appl.h shadow.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:1450: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1460: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done echo $ac_n "checking for working const""... $ac_c" 1>&6 echo "configure:1488: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } ; return 0; } EOF if { (eval echo configure:1542: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_const=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_c_const" 1>&6 if test $ac_cv_c_const = no; then cat >> confdefs.h <<\EOF #define const EOF fi echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6 echo "configure:1563: checking for uid_t in sys/types.h" >&5 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "uid_t" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_uid_t=yes else rm -rf conftest* ac_cv_type_uid_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_uid_t" 1>&6 if test $ac_cv_type_uid_t = no; then cat >> confdefs.h <<\EOF #define uid_t int EOF cat >> confdefs.h <<\EOF #define gid_t int EOF fi echo $ac_n "checking for pid_t""... $ac_c" 1>&6 echo "configure:1597: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_pid_t=yes else rm -rf conftest* ac_cv_type_pid_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_pid_t" 1>&6 if test $ac_cv_type_pid_t = no; then cat >> confdefs.h <<\EOF #define pid_t int EOF fi echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 echo "configure:1630: checking whether struct tm is in sys/time.h or time.h" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { struct tm *tp; tp->tm_sec; ; return 0; } EOF if { (eval echo configure:1643: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_tm=sys/time.h fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_tm" 1>&6 if test $ac_cv_struct_tm = sys/time.h; then cat >> confdefs.h <<\EOF #define TM_IN_SYS_TIME 1 EOF fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 echo "configure:1665: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #ifdef signal #undef signal #endif #ifdef __cplusplus extern "C" void (*signal (int, void (*)(int)))(int); #else void (*signal ()) (); #endif int main() { int i; ; return 0; } EOF if { (eval echo configure:1687: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_type_signal=int fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_signal" 1>&6 cat >> confdefs.h <&6 echo "configure:1708: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:1736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Any assignment to VPATH causes Sun make to only execute # the first set of double-colon rules, so remove it if not needed. # If there is a colon in the path, we need to keep it. if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' fi trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 DEFS=-DHAVE_CONFIG_H # Without the "./", some shells look in PATH for config.status. : ${CONFIG_STATUS=./config.status} echo creating $CONFIG_STATUS rm -f $CONFIG_STATUS cat > $CONFIG_STATUS </dev/null | sed 1q`: # # $0 $ac_configure_args # # Compiler output produced by configure, useful for debugging # configure, is in ./config.log if it exists. ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" for ac_option do case "\$ac_option" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; *) echo "\$ac_cs_usage"; exit 1 ;; esac done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" trap 'rm -fr `echo "Makefile src/Makefile etc/Makefile example/Makefile example/default.theme/Makefile src/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF $ac_vpsub $extrasub s%@SHELL@%$SHELL%g s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g s%@FFLAGS@%$FFLAGS%g s%@DEFS@%$DEFS%g s%@LDFLAGS@%$LDFLAGS%g s%@LIBS@%$LIBS%g s%@exec_prefix@%$exec_prefix%g s%@prefix@%$prefix%g s%@program_transform_name@%$program_transform_name%g s%@bindir@%$bindir%g s%@sbindir@%$sbindir%g s%@libexecdir@%$libexecdir%g s%@datadir@%$datadir%g s%@sysconfdir@%$sysconfdir%g s%@sharedstatedir@%$sharedstatedir%g s%@localstatedir@%$localstatedir%g s%@libdir@%$libdir%g s%@includedir@%$includedir%g s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@PACKAGE@%$PACKAGE%g s%@VERSION@%$VERSION%g s%@ACLOCAL@%$ACLOCAL%g s%@AUTOCONF@%$AUTOCONF%g s%@AUTOMAKE@%$AUTOMAKE%g s%@AUTOHEADER@%$AUTOHEADER%g s%@MAKEINFO@%$MAKEINFO%g s%@SET_MAKE@%$SET_MAKE%g s%@CC@%$CC%g s%@CPP@%$CPP%g CEOF EOF cat >> $CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. ac_more_lines=: ac_sed_cmds="" while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file else sed "${ac_end}q" conftest.subs > conftest.s$ac_file fi if test ! -s conftest.s$ac_file; then ac_more_lines=false rm -f conftest.s$ac_file else if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f conftest.s$ac_file" else ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" fi ac_file=`expr $ac_file + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_cmds` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` else ac_dir_suffix= ac_dots= fi case "$ac_given_srcdir" in .) srcdir=. if test -z "$ac_dots"; then top_srcdir=. else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; *) # Relative path. srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" top_srcdir="$ac_dots$ac_given_srcdir" ;; esac case "$ac_given_INSTALL" in [/$]*) INSTALL="$ac_given_INSTALL" ;; *) INSTALL="$ac_dots$ac_given_INSTALL" ;; esac echo creating "$ac_file" rm -f "$ac_file" configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." case "$ac_file" in *Makefile*) ac_comsub="1i\\ # $configure_input" ;; *) ac_comsub= ;; esac ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` sed -e "$ac_comsub s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g s%@top_srcdir@%$top_srcdir%g s%@INSTALL@%$INSTALL%g " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file fi; done rm -f conftest.s* # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' ac_dC='\3' ac_dD='%g' # ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='\([ ]\)%\1#\2define\3' ac_uC=' ' ac_uD='\4%g' # ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_eB='$%\1#\2define\3' ac_eC=' ' ac_eD='%g' if test "${CONFIG_HEADERS+set}" != set; then EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF fi for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac echo creating $ac_file rm -f conftest.frag conftest.in conftest.out ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` cat $ac_file_inputs > conftest.in EOF # Transform confdefs.h into a sed script conftest.vals that substitutes # the proper values into config.h.in to produce config.h. And first: # Protect against being on the right side of a sed subst in config.status. # Protect against being in an unquoted here document in config.status. rm -f conftest.vals cat > conftest.hdr <<\EOF s/[\\&%]/\\&/g s%[\\$`]%\\&%g s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp s%ac_d%ac_u%gp s%ac_u%ac_e%gp EOF sed -n -f conftest.hdr confdefs.h > conftest.vals rm -f conftest.hdr # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >> conftest.vals <<\EOF s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% EOF # Break up conftest.vals because some shells have a limit on # the size of here documents, and old seds have small limits too. rm -f conftest.tail while : do ac_lines=`grep -c . conftest.vals` # grep -c gives empty output for an empty file on some AIX systems. if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi # Write a limited-size here document to conftest.frag. echo ' cat > conftest.frag <> $CONFIG_STATUS sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS echo 'CEOF sed -f conftest.frag conftest.in > conftest.out rm -f conftest.in mv conftest.out conftest.in ' >> $CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail rm -f conftest.vals mv conftest.tail conftest.vals done rm -f conftest.vals cat >> $CONFIG_STATUS <<\EOF rm -f conftest.frag conftest.h echo "/* $ac_file. Generated automatically by configure. */" > conftest.h cat conftest.in >> conftest.h rm -f conftest.in if cmp -s $ac_file conftest.h 2>/dev/null; then echo "$ac_file is unchanged" rm -f conftest.h else # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" fi rm -f $ac_file mv conftest.h $ac_file fi fi; done EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF test -z "$CONFIG_HEADERS" || echo timestamp > src/stamp-h exit 0 EOF chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 francine-0.99.8orig/configure.in0000644000175000017500000000164407571474005015540 0ustar alfiealfiednl Process this file with autoconf to produce a configure script. AC_INIT(src/after_login.c) AM_INIT_AUTOMAKE(francine,0.99.8) AM_CONFIG_HEADER(src/config.h) dnl some hacks... test "$prefix" = "NONE" && prefix="/usr" test "$prefix" = "/usr" && exec_prefix="" test "CFLAGS" = "" && CFLAGS="-O2 -Wall" dnl Checks for programs. AC_PROG_CC AC_PROG_INSTALL dnl Checks for libraries. AC_CHECK_LIB(slang,SLang_init_all) AC_CHECK_LIB(pam,pam_end) AC_CHECK_LIB(crypt,crypt) dnl Checks for header files. AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS(fcntl.h malloc.h syslog.h unistd.h lastlog.h security/pam_appl.h shadow.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_UID_T AC_TYPE_PID_T AC_STRUCT_TM dnl Checks for library functions. AC_TYPE_SIGNAL AC_CHECK_FUNCS(putenv uname updwtmp) AC_OUTPUT(Makefile src/Makefile etc/Makefile example/Makefile example/default.theme/Makefile) francine-0.99.8orig/install-sh0000755000175000017500000001273607213170740015227 0ustar alfiealfie#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 francine-0.99.8orig/missing0000755000175000017500000001421307213170751014614 0ustar alfiealfie#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997 Free Software Foundation, Inc. # Franc,ois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing - GNU libit 0.0" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 francine-0.99.8orig/example/0000755000175000017500000000000007666571052014662 5ustar alfiealfiefrancine-0.99.8orig/example/default.theme/0000755000175000017500000000000007666571052017407 5ustar alfiealfiefrancine-0.99.8orig/example/default.theme/Makefile.am0000644000175000017500000000005407320012111021407 0ustar alfiealfieEXTRA_DIST = swirl.ans noswirl.ans theme.fl francine-0.99.8orig/example/default.theme/Makefile.in0000644000175000017500000001021307571474251021447 0ustar alfiealfie# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : CC = @CC@ MAKEINFO = @MAKEINFO@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ EXTRA_DIST = swirl.ans noswirl.ans theme.fl mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../../src/config.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps example/default.theme/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = example/default.theme distdir: $(DISTFILES) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir info-am info dvi-am dvi check check-am \ installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: francine-0.99.8orig/example/default.theme/theme.fl0000644000175000017500000000011207320012021020773 0ustar alfiealfieusername 61 3 14 30 47 password 61 5 14 30 47 files swirl.ans noswirl.ans francine-0.99.8orig/example/default.theme/matrix-login.ans0000644000175000017500000000521307270552376022524 0ustar alfiealfieH 9 K L ^ V K K = 9 E H ; y k ^ 7 t 9 u a  U 3 v % { h J 7 v q ) | q ` O R ; 9 T :  5 Y ? z < > k u / $ M Q n j Z ; y z s <  9 E ) ] { = k 7 @ # 0 - r < b ' % r L 3 y  6 . U , " < e ) U 4 ( n c 5 b * n j V $  K < V m c B C $ N , N O c p ) x 3 h j e  h n I K V 8 ? L ? W 4 t w d V l P T ( y  ? C C n Z < } L Z / Z > $ R " @ P G G + y  - - G A 1 f 7 s 1 ` j O F + ; 1 K \ e  5 , 2 5 < W = N g k ( Y - F 4 ! s <  j l < W h P P ' f 5 Q / N " [ ' j w > j s  k M Z D s C 6 Z . 2 N 5 : c D o y l X e # ? Q  1 o [ L n # ? P T \ " l V U K n U 3 = ( { U +  x ] e E h = \ 4 0 Q \ w 6 q W G ^ | B q j I  c 2 . j e u ; / W u a w Y q V ) d 4 7 L z O <   e < ` % J F _ ; + z W u Y l o ^ S h . K - F   I i 1 E Y I 4 ] z / h 4 l : | , 6 : \ [   g & ` ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿M @ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ Y N ;   m L M ³ Login: ³7 . ³ Password: ³ 4 ` M   O h ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙs C ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ n H 8   : " 6 l < [ z y v 8 ( g Y d | ' 1 % >   F i Z R g P 9 : \ / ! a 4 f _ ` * 0 g   < y [ 4 B G F { ? - p ^ E % . / q } N   J L y G G G g s B @ ] K c E \ L E francine-0.99.8orig/example/default.theme/matrix-fail.ans0000644000175000017500000000520707270552376022332 0ustar alfiealfieH 9 K L ^ V K K = 9 E H ; y k ^ 7 t 9 u a  U 3 v % { h J 7 v q ) | q ` O R ; 9 T :  5 Y ? z < > k u / $ M Q n j Z ; y z s <  9 E ) ] { ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ b ' % r L 3 y  6 . U , ³ L O G I N F A I L E D ³ 5 b * n j V $  K < V m ³ Do you really think that you can ³ p ) x 3 h j e  h n I K ³ crack The Matrix? ³ d V l P T ( y  ? C C n ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ " @ P G G + y  - - G A 1 f 7 s 1 ` j O F + ; 1 K \ e  5 , 2 5 < W = N g k ( Y - F 4 ! s <  j l < W h P P ' f 5 Q / N " [ ' j w > j s  k M Z D s C 6 Z . 2 N 5 : c D o y l X e # ? Q  1 o [ L n # ? P T \ " l V U K n U 3 = ( { U +  x ] e E h = \ 4 0 Q \ w 6 q W G ^ | B q j I  c 2 . j e u ; / W u a w Y q V ) d 4 7 L z O <   e < ` % J F _ ; + z W u Y l o ^ S h . K - F   I i 1 E Y I 4 ] z / h 4 l : | , 6 : \ [   g & ` B # % M @ J u f c _ i 7 Y N ;   m L M m f & x & 7 . u " } l X ! Z 4 ` M   O h Q E X 2 L s C U / i e G $ * n H 8   : " 6 l < [ z y v 8 ( g Y d | ' 1 % >   F i Z R g P 9 : \ / ! a 4 f _ ` * 0 g   < y [ 4 B G F { ? - p ^ E % . / q } N   J L y G G G g s B @ ] K c E \ L E francine-0.99.8orig/example/default.theme/noswirl.ans0000644000175000017500000000621307320012021021556 0ustar alfiealfie __s2XSSSS_sJs_s,   °±Û²± __JSXXX2SoSoSXSo2XX2XSSS_±²Û±°  ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿   ±²ÛÛ²±_J2XXX2S22"" ' -"""Xo±²ÛÛ²± ³  Login:    FAILED  ³    ±²ÛÛ²±2S2S2" ±²ÛÛ²±S2XS_ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´   _ _±²ÛÛ²± ±²ÛÛ²±{X2S2Ss ³ Password:   GO AWAY!  ³   '_J2S2±²ÛÛ²± ±²ÛÛ²± -X2Sr", ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ   ,_X22r ±²ÛÛ²± __J""±²ÛÛ²± -X2S(  %tttt% @ %hhhhhhhhhhhhhhh%    X2Sr ±²ÛÛ²± _X" ±²ÛÛ²± S2S(   )2Sr ±²ÛÛ²± ±²ÛÛ²± S2Ss   )2S( ±²ÛÛ²²ÛÛ²± ' {X2' .__ |   )oS' )±²ÛÛ²± _ XSs_ [__). .._ _ ._ _ _ ._. |   )2S ±²ÛÛ²²ÛÛ²± - )Srr [__)(_|[ | )[ | )(/,[ *   )2Ss ±²ÛÛ²±X_±²ÛÛ²± _J2"   S2S, ±²ÛÛ²±''_r4s±²ÛÛ²±_s_ZS""   )2Ss, ±²ÛÛ²± "']X±²ÛÛ²±'   {S2Xr±²ÛÛ²± ±²ÛÛ²± ²±Unauthorized access is PROHIBITED±²   "X±²ÛÛ²± ±²ÛÛ²±    ±²ÛÛ²± ±²ÛÛ²±   d8P Y88 88    ±²ÛÛ²±XSs_  ±²ÛÛ²±  .oo88 .oo. 88oo. ooo .oooo.Y8o88o.   °±Û²± "XSs_   ±²Û±° dP' 88 dP'`Yb 88 `8b`88 ' Yb 88 88   -"XS_       8b 88 88888Y 88 88 88 .o""8Q 88 88   -"{XJ_       `Ybd88b`Yboo `YbdP'd88b`YooY8 88 88   -""'       by professionals -- for professionals francine-0.99.8orig/example/default.theme/swirl.ans0000644000175000017500000000546507320012021021231 0ustar alfiealfie __s2XSSSS_sJs_s,   __JSXXX2SoSoSXSo2XX2XSSS_s ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿   _J2XXX2S22"" ' -"""XoSXXSs_ ³  Login:    ³   _J22S2S2" -"X2S2XS_ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´   _ _X22S"' {X2S2Ss ³ Password:   ³   '_J2S2" -X2Sr", ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ   ,_X22r __J""""'_, -X2S( %tttt% @ %hhhhhhhhhhhhhhh%    X2Sr _X" S2S(   )2Sr Jr S2Ss   )2S( )o ' {X2'   )oS' )2[ _ XSs_   )2S {s, - )Srr   )2Ss _ "X_ _J2"   S2S, ''_r4s_a _s_ZS""   )2Ss, "']X""""!"'   {S2Xr, ²±Unauthorized access is PROHIBITED±²   "X2Ss    -X2Ss   d8P Y88 88    "XSs_       .oo88 .oo. 88oo. ooo .oooo.Y8o88o.   "XSs_       dP' 88 dP'`Yb 88 `8b`88 ' Yb 88 88   -"XS_       8b 88 88888Y 88 88 88 .o""8Q 88 88   -"{XJ_       `Ybd88b`Yboo `YbdP'd88b`YooY8 88 88   -""'       by professionals -- for professionals francine-0.99.8orig/example/Makefile.am0000644000175000017500000000003007213171023016665 0ustar alfiealfieSUBDIRS = default.theme francine-0.99.8orig/example/Makefile.in0000644000175000017500000001771707571474251016742 0ustar alfiealfie# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : CC = @CC@ MAKEINFO = @MAKEINFO@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SUBDIRS = default.theme mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../src/config.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps example/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" != "." || dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags -o $$here/TAGS $(ETAGS_ARGS) $$tags $$unique $(LISP)) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = example distdir: $(DISTFILES) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-tags distclean-generic clean-am distclean: distclean-recursive maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive .PHONY: install-data-recursive uninstall-data-recursive \ install-exec-recursive uninstall-exec-recursive installdirs-recursive \ uninstalldirs-recursive all-recursive check-recursive \ installcheck-recursive info-recursive dvi-recursive \ mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-am install-data install-am install \ uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: francine-0.99.8orig/mkinstalldirs0000755000175000017500000000132607213170751016024 0ustar alfiealfie#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.1.1.1 2000/12/05 13:47:21 japh Exp $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here francine-0.99.8orig/Makefile.am0000644000175000017500000000051407401725202015244 0ustar alfiealfieinstall-data-local: mkdir -p $(prefix)/etc mkdir -p $(prefix)/usr/share/francine/default.theme $(INSTALL_DATA) $(srcdir)/etc/francine.sl $(prefix)/etc/francine.sl $(INSTALL_DATA) $(srcdir)/example/default.theme/*.ans $(srcdir)/example/default.theme/theme.fl $(prefix)/usr/share/francine/default.theme SUBDIRS = src etc example francine-0.99.8orig/Makefile.in0000644000175000017500000002530307571474234015276 0ustar alfiealfie# Makefile.in generated automatically by automake 1.4-p6 from Makefile.am # Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : CC = @CC@ MAKEINFO = @MAKEINFO@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SUBDIRS = src etc example ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ./src/config.h CONFIG_CLEAN_FILES = DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \ Makefile.in NEWS aclocal.m4 configure configure.in install-sh missing \ mkinstalldirs src/config.h.in src/stamp-h.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = tar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status $(ACLOCAL_M4): configure.in cd $(srcdir) && $(ACLOCAL) config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) src/config.h: src/stamp-h @if test ! -f $@; then \ rm -f src/stamp-h; \ $(MAKE) src/stamp-h; \ else :; fi src/stamp-h: $(srcdir)/src/config.h.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES= CONFIG_HEADERS=src/config.h \ $(SHELL) ./config.status @echo timestamp > src/stamp-h 2> /dev/null $(srcdir)/src/config.h.in: $(srcdir)/src/stamp-h.in @if test ! -f $@; then \ rm -f $(srcdir)/src/stamp-h.in; \ $(MAKE) $(srcdir)/src/stamp-h.in; \ else :; fi $(srcdir)/src/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOHEADER) @echo timestamp > $(srcdir)/src/stamp-h.in 2> /dev/null mostlyclean-hdr: clean-hdr: distclean-hdr: -rm -f src/config.h maintainer-clean-hdr: # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" != "." || dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags -o $$here/TAGS $(ETAGS_ARGS) $$tags $$unique $(LISP)) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist -rm -rf $(distdir) GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz mkdir $(distdir)/=build mkdir $(distdir)/=inst dc_install_base=`cd $(distdir)/=inst && pwd`; \ cd $(distdir)/=build \ && ../configure --srcdir=.. --prefix=$$dc_install_base \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) dist -rm -rf $(distdir) @banner="$(distdir).tar.gz is ready for distribution"; \ dashes=`echo "$$banner" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ echo "$$dashes" dist: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) dist-all: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) distdir: $(DISTFILES) -rm -rf $(distdir) mkdir $(distdir) -chmod 777 $(distdir) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data-local install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile all-redirect: all-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-hdr clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-hdr distclean-tags distclean-generic clean-am distclean: distclean-recursive -rm -f config.status maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive -rm -f config.status .PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ install-data-recursive uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ install-exec install-data-local install-data-am install-data install-am \ install uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean install-data-local: mkdir -p $(prefix)/etc mkdir -p $(prefix)/usr/share/francine/default.theme $(INSTALL_DATA) $(srcdir)/etc/francine.sl $(prefix)/etc/francine.sl $(INSTALL_DATA) $(srcdir)/example/default.theme/*.ans $(srcdir)/example/default.theme/theme.fl $(prefix)/usr/share/francine/default.theme # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: francine-0.99.8orig/AUTHORS0000644000175000017500000000027407401260006014257 0ustar alfiealfieMain Developers: Andreas Krennmair Gerfried Fuchs Based on fancylogin by: Richard Bergmair francine-0.99.8orig/INSTALL0000644000175000017500000001722707213170732014255 0ustar alfiealfieBasic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. francine-0.99.8orig/ChangeLog0000644000175000017500000001567007271352510014776 0ustar alfiealfie2001-04-24 19:18 japh * ChangeLog, configure, configure.in, src/authenticated.c, src/config.h.in, src/environment.h, src/login.c, src/pam_login.c, src/system_logon.c: francine now also compiles on Tru64 Unix, but with lots of warnings. 2001-04-24 16:39 japh * src/config.h: Removed old config.h 2001-04-22 17:21 japh * src/: config.h.in, stamp-h.in: Added two files needed for the configure script. 2001-04-22 17:20 japh * configure, configure.in, example/default.theme/Makefile.am, example/default.theme/Makefile.in, src/after_login.c, src/after_login.h, src/authenticated.c, src/emergency.c, src/fancy.c, src/log_message.c, src/login.c, src/login_permissions.c, src/md5crypt.c, src/pam_login.c, src/pam_login.h, src/signal_handle.c, src/system_logon.c: Made francine more portable. It now compiles on Solaris 8. :) 2001-04-22 15:46 japh * ChangeLog, Makefile.in, aclocal.m4, configure, configure.in, etc/Makefile.in, example/Makefile.in, example/default.theme/Makefile.in, src/Makefile.am, src/Makefile.in, src/after_login.c, src/after_login.h, src/authenticated.c, src/authenticated.h, src/conf.c, src/environment.h, src/fancy.c, src/login.c, src/signal_handle.c, src/signal_handle.h, src/system_logon.c: Added several things for autoconf/automake (automatic checking for certain libraries and headers) 2001-04-22 14:57 japh * example/default.theme/: br-failed.ans, br.ans, matrix-fail.ans, matrix-login.ans, theme.fl, theme.fl: Replaced the old Bad Religion theme by the new The Matrix theme. 2001-04-17 13:47 japh * Makefile.in, README, src/after_login.c, src/after_login.h, src/authenticated.c, src/authenticated.h, src/conf.c, src/conf.h, src/config.h, src/definitions.h, src/emergency.c, src/emergency.h, src/environment.h, src/fancy.c, src/fancy.h, src/limits.h, src/log_message.c, src/log_message.h, src/login.c, src/login.h, src/login_permissions.c, src/login_permissions.h, src/macros.h, src/md5crypt.c, src/md5crypt.h, src/pam_login.c, src/pam_login.h, src/signal_handle.c, src/signal_handle.h, src/speech.c, src/speech.h, src/system_logon.c, src/system_logon.h: Removed several static buffers (possible security holes) 2001-04-16 22:36 japh * src/pam_login.c: Heisenbug alarm! The segfault is now fixed by opening /dev/null with flags wb when PAM is started and closing it again when PAM is closed. :) 2001-04-16 19:27 japh * src/pam_login.c: Fixed problems with merging in differences. 2001-04-16 19:23 japh * src/: authenticated.c, config.h, login.c, pam_login.c, pam_login.h, system_logon.c: lastlog works correctly again. PAM almost works (it correctly opens and closes sessions), but it segfaults inside of pam_end(). 2001-04-13 18:51 japh * src/config.h: Disabled PAM again, since it is broken. 2001-04-13 18:43 japh * src/: config.h, log_message.c, login.c, pam_login.c, system_logon.c: Fixed several fixed-size-buffer-related issues that were possible security holes. PAM support is currently totally broken, and will need a complete rewrite. 2001-02-23 22:04 japh * README: added some contents. 2001-02-23 20:59 japh * Makefile.am, src/Makefile.am, src/Makefile.in, src/pam_login.c: Did some modifications as done in the patch for the debian package. 2001-02-23 13:37 japh * Makefile.am, Makefile.in, src/config.h, src/fancy.c, src/pam_login.c: Fixed a bug in the PAM code: opened sessions never closed. 2000-12-29 12:50 alfie * etc/francine.sl: Fixed a typo. 2000-12-29 12:38 alfie * AUTHORS: Added content to AUTHORS file. 2000-12-20 16:05 japh * src/: login.c, pam_login.c, system_logon.c: The PAM implementation seems to be completed now. 2000-12-16 16:43 japh * src/: after_login.c, emergency.c, fancy.c, login.c, login_permissions.c, system_logon.c: Made francine more fault tolerant. 2000-12-11 18:43 japh * ChangeLog, etc/francine.sl, example/default.theme/theme.fl: Improved the example configuration and theme control file. 2000-12-11 17:23 japh * src/config.h: Removed Makefiles 2000-12-11 11:58 alfie * Makefile, config.cache, config.log, config.status, etc/Makefile, example/Makefile, example/default.theme/Makefile, src/Makefile: repository should be distclean.... 2000-12-11 11:55 alfie * src/conf.c: small consistency change in a intro_string. 2000-12-11 11:49 alfie * src/config.h: set the INTRO_STRING to something reasonable... 2000-12-11 11:41 alfie * etc/francine.sl: changed to right share directory 2000-12-06 15:55 japh * src/: config.h, login.c, login_permissions.c, pam_login.c, speech.c, system_logon.c: all configuration options in /etc/francine.sl now work. 2000-12-05 20:40 japh * src/: conf.c, fancy.c, login.c: All hooks should now work. 2000-12-05 14:46 japh * AUTHORS, ChangeLog, COPYING, INSTALL, Makefile, Makefile.am, Makefile.in, NEWS, README, aclocal.m4, config.cache, config.log, config.status, configure, configure.in, install-sh, missing, mkinstalldirs, etc/Makefile, etc/Makefile.am, etc/Makefile.in, etc/francine.sl, example/Makefile, example/Makefile.am, example/Makefile.in, example/default.theme/Makefile, example/default.theme/Makefile.am, example/default.theme/Makefile.in, example/default.theme/br-failed.ans, example/default.theme/br.ans, example/default.theme/theme.fl, src/Makefile, src/Makefile.am, src/Makefile.in, src/after_login.c, src/after_login.h, src/authenticated.c, src/authenticated.h, src/conf.c, src/conf.h, src/config.h, src/definitions.h, src/emergency.c, src/emergency.h, src/environment.h, src/fancy.c, src/fancy.h, src/limits.h, src/log_message.c, src/log_message.h, src/login.c, src/login.h, src/login_permissions.c, src/login_permissions.h, src/macros.h, src/md5crypt.c, src/md5crypt.h, src/pam_login.c, src/pam_login.h, src/signal_handle.c, src/signal_handle.h, src/speech.c, src/speech.h, src/system_logon.c, src/system_logon.h: Initial revision 2000-12-05 14:46 japh * AUTHORS, ChangeLog, COPYING, INSTALL, Makefile, Makefile.am, Makefile.in, NEWS, README, aclocal.m4, config.cache, config.log, config.status, configure, configure.in, install-sh, missing, mkinstalldirs, etc/Makefile, etc/Makefile.am, etc/Makefile.in, etc/francine.sl, example/Makefile, example/Makefile.am, example/Makefile.in, example/default.theme/Makefile, example/default.theme/Makefile.am, example/default.theme/Makefile.in, example/default.theme/br-failed.ans, example/default.theme/br.ans, example/default.theme/theme.fl, src/Makefile, src/Makefile.am, src/Makefile.in, src/after_login.c, src/after_login.h, src/authenticated.c, src/authenticated.h, src/conf.c, src/conf.h, src/config.h, src/definitions.h, src/emergency.c, src/emergency.h, src/environment.h, src/fancy.c, src/fancy.h, src/limits.h, src/log_message.c, src/log_message.h, src/login.c, src/login.h, src/login_permissions.c, src/login_permissions.h, src/macros.h, src/md5crypt.c, src/md5crypt.h, src/pam_login.c, src/pam_login.h, src/signal_handle.c, src/signal_handle.h, src/speech.c, src/speech.h, src/system_logon.c, src/system_logon.h: Initial import. francine-0.99.8orig/COPYING0000644000175000017500000004311007213170730014243 0ustar alfiealfie GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. francine-0.99.8orig/debian/0000755000175000017500000000000010332647336014442 5ustar alfiealfiefrancine-0.99.8orig/debian/README.Debian0000644000175000017500000000221407401174051016472 0ustar alfiealfiefrancine for Debian ---------------------- This is the first "final version" release of francine, though the naming. Don't care too much about the slightly strange naming, but I want to avoid using epoch in the version number. The documentation is still not the best - contributions are welcome. PAM NOTE: I have now added a pam file for francine to the package. There were people complaining not to be able to login because they changed their /etc/pam.d/other to not let anyone login, because of paranoia. They thought doing so is a wise thing to secure their host and that the services would provide their own sensible pam files. Personally I like to disagree. The other file is a fallback and could easily be used as default to have different services use the same authentication methods in a convenient way. I personally thought that people who change their other file know about it and wouldn't bug the services they are using. I was wrong. So, if you like to use one default for many services including francine edit your other file and feel free to delete the francine file. -- Gerfried Fuchs , Wed, 28 Nov 2001 15:43:50 +0100 francine-0.99.8orig/debian/changelog0000644000175000017500000000531210332642464016312 0ustar alfiealfiefrancine (0.99.8orig-6) unstable; urgency=low * Applied patch from Alastair McKinstry for slang2 (closes: #315230) * Fixed the package description (closes: #233877), and rewrote it a bit. * Bumped standards version to 3.6.2, no changes needed. -- Gerfried Fuchs Fri, 04 Nov 2005 12:25:39 +0100 francine (0.99.8orig-5) unstable; urgency=low * Changed c to int instead of char in after_login.c, thanks to Gerhard Tonn (closes: #176385) * Updated to policy 3.5.10: no changes needed. * debian/rules: - moved compat level to debian/compat - changed `pwd` to $(CURDIR) (no need to call an external program for that) -- Gerfried Fuchs Mon, 2 Jun 2003 08:18:31 +0200 francine (0.99.8orig-4) unstable; urgency=medium * Added AC_CHECK_LIB(crypt,crypt) to configure.in; removed header for crypt in authenticated.c (closes: #167050) -- Gerfried Fuchs Thu, 28 Nov 2002 21:11:51 +0100 francine (0.99.8orig-3) unstable; urgency=low * Fixed a spelling typo that I missed in the last update. -- Gerfried Fuchs Sun, 09 Dec 2001 22:22:10 +0100 francine (0.99.8orig-2) unstable; urgency=low * Added pam file for francine (closes: #104100) * Added information about pam to the README.Debian file. * Cleaned up the debian/rules file. * Removed reference to the examples directory in the manual page - it's not there anymore (thanks to Christoph Siess for noticing it) * Fixed AUTHORS file and copyright file (silly nameclash in my head). * Raised Standards-Version to current 3.5.6. * Enhanced the description, thanks to Helge Kreutzmann (closes: #119417) -- Gerfried Fuchs Mon, 03 Dec 2001 14:53:29 +0100 francine (0.99.8orig-1) unstable; urgency=low * New upstream release (official 0.99.8) * Adjusted Build-Depends. * Fixed some typos in the description (I hope I catched all) (Closes: #81594) * Added swirl-logo as default. -- Gerfried Fuchs Mon, 2 Jul 2001 08:27:57 +0200 francine (0.99.8cvs1-3) unstable; urgency=low * Minor changes to the rules file. * Changed copyright file (wrong names :-/ ) * Recommends for rungetty removed - usual getty offers the same functionality (thanks to Sean Connor for pointing that out) -- Gerfried Fuchs Thu, 14 Dec 2000 10:04:14 +0100 francine (0.99.8cvs1-2) unstable; urgency=low * Changed debian/control to right section *argl* * Changed upstream mail-adresses in copyright file. -- Gerfried Fuchs Tue, 12 Dec 2000 09:51:15 +0100 francine (0.99.8cvs1-1) unstable; urgency=low * Initial Release. -- Gerfried Fuchs Thu, 7 Dec 2000 10:18:51 +0100 francine-0.99.8orig/debian/control0000644000175000017500000000160510310234177016036 0ustar alfiealfieSource: francine Section: admin Priority: optional Maintainer: Gerfried Fuchs Build-Depends: debhelper, libpam0g-dev, libslang2-dev Standards-Version: 3.6.2 Package: francine Architecture: any Depends: ${shlibs:Depends} Description: feature rich ansi console login engine francine is an easy to configure themeable console login program. Its great configurability for per tty access-settings and the posibility to put the prompt for username and password anywhere within a nicely colored ANSI-screen makes it a greatly enhanced replacement for the old clumpy login. . You need a getty that is able to run different programs than just login. I suggest rungetty for that, but (alternative) getty does suffice. It can also be used from the telnetd with the -L option. . This project is a spin-off from the fancylogin project, which is still maintained by Richard Bergmair. francine-0.99.8orig/debian/francine.10000644000175000017500000000421507401257603016310 0ustar alfiealfie.\" This -*- nroff -*- file has been generated from .\" DocBook SGML with docbook-to-man on Debian GNU/Linux. ...\" ...\" transcript compatibility for postscript use. ...\" ...\" synopsis: .P! ...\" .de P! \\&. .fl \" force out current output buffer \\!%PB \\!/showpage{}def ...\" the following is from Ken Flowers -- it prevents dictionary overflows \\!/tempdict 200 dict def tempdict begin .fl \" prolog .sy cat \\$1\" bring in postscript file ...\" the following line matches the tempdict above \\!end % tempdict % \\!PE \\!. .sp \\$2u \" move below the image .. .de pF .ie \\*(f1 .ds f1 \\n(.f .el .ie \\*(f2 .ds f2 \\n(.f .el .ie \\*(f3 .ds f3 \\n(.f .el .ie \\*(f4 .ds f4 \\n(.f .el .tm ? font overflow .ft \\$1 .. .de fP .ie !\\*(f4 \{\ . ft \\*(f4 . ds f4\" ' br \} .el .ie !\\*(f3 \{\ . ft \\*(f3 . ds f3\" ' br \} .el .ie !\\*(f2 \{\ . ft \\*(f2 . ds f2\" ' br \} .el .ie !\\*(f1 \{\ . ft \\*(f1 . ds f1\" ' br \} .el .tm ? font underflow .. .ds f1\" .ds f2\" .ds f3\" .ds f4\" '\" t .ta 8n 16n 24n 32n 40n 48n 56n 64n 72n .TH "FRANCINE" "1" .SH "NAME" francine \(em highly configureable console login program .SH "SYNOPSIS" .PP \fBfrancine\fP .SH "DESCRIPTION" .PP This manual page documents briefly the \fBfrancine\fP command. .PP \fBfrancine\fP is a program with which you can make your console login more funny. You can have ANSI logos for both the login mask and the error screen. The locations of the username and password-promts can be wherever you like on the screen, and you can configure who is allowed to login when from where. .PP The main configuration file is \fB/etc/francine.sl\fP in which you can set most of the options. Additionally \fB/etc/securetty\fP and \fB/etc/usertty\fP are used for the login authentification check. .PP Please notice that you have to use a getty that runs francine for you can't directly start it. We sugguest to use \fBrungetty (8)\fP for that. .SH "OPTIONS" .PP This program takes no options at all. .SH "SEE ALSO" .PP rungetty (8) .SH "AUTHOR" .PP This manual page was written by Gerfried Fuchs . ...\" created by instant / docbook-to-man, Mon 11 Dec 2000, 14:10 francine-0.99.8orig/debian/copyright0000644000175000017500000000056707666571044016415 0ustar alfiealfieThis package was debianized by Gerfried Fuchs on Thu, 7 Dec 2000 10:18:51 +0100. It was downloaded from http://francine.sourceforge.net/ Upstream Authors: Andreas Krennmair Gerfried Fuchs Based on code by: Richard Bergmair Copyright: /usr/share/common-licenses/GPL-2 francine-0.99.8orig/debian/dirs0000644000175000017500000000003307262366205015323 0ustar alfiealfieetc bin usr/share/francine francine-0.99.8orig/debian/docs0000644000175000017500000000002407274055513015312 0ustar alfiealfieAUTHORS NEWS README francine-0.99.8orig/debian/rules0000755000175000017500000000242307666566244015541 0ustar alfiealfie#!/usr/bin/make -f # Sample debian/rules that uses debhelper. # GNU copyright 1997 to 1999 by Joey Hess. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 configure: configure-stamp configure-stamp: dh_testdir ./configure --prefix=/usr --mandir=\$${prefix}/share/man touch configure-stamp build: configure-stamp build-stamp build-stamp: dh_testdir $(MAKE) touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp configure-stamp -$(MAKE) distclean dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs $(MAKE) prefix=$(CURDIR)/debian/`dh_listpackages` \ DESTDIR=$(CURDIR)/debian/`dh_listpackages` install # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install # dh_testversion dh_testdir dh_testroot # dh_installdebconf dh_installdocs dh_installexamples dh_installmenu dh_installpam dh_installcron dh_installmanpages dh_installinfo dh_installchangelogs ChangeLog dh_link dh_strip dh_compress dh_fixperms dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install configure francine-0.99.8orig/debian/pam0000644000175000017500000000027707401137107015141 0ustar alfiealfie# # The PAM configuration file for francine # auth required pam_unix.so account required pam_unix.so password required pam_unix.so session required pam_unix.so francine-0.99.8orig/debian/compat0000644000175000017500000000000207666566224015654 0ustar alfiealfie4