/****************************************************************************** * FIDOCONFIG --- library for fidonet configs ****************************************************************************** * fidoconfig to binkd config converter: * generate passwords file or * simple binkd config file (may include it into real config) * * Copyright (C) 2002 * Stas Degteff * Fido: 2:5080/102 * Internet: g@grumbler.org * Copyrigth (c) Husky Developers Team * http://husky.sourceforge.net * * This file is part of FIDOCONFIG. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; see file COPYING. If not, write to the Free * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * See also http://www.gnu.org *****************************************************************************/ #include #include #include #include #include #ifdef HAS_IO_H # include #endif #ifdef HAS_UNISTD_H # include #endif #include "fidoconf.h" #include "common.h" #ifndef VERSION_H #define VERSION_H #include "version.h" #include "cvsdate.h" #endif /* ANSI C knows nothing about this constant */ #ifndef F_OK #define F_OK 0 #endif char *program_name=NULL; #define BINKDLOG "binkd.log" int force_flag = 0; /* Force rewriting flag */ void printversion(FILE *fd){ char *versionStr = NULL; versionStr = GenVersionStr( "fconf2binkd", FC_VER_MAJOR, FC_VER_MINOR, FC_VER_PATCH, FC_VER_BRANCH, cvs_date); printf("%s\n\n", versionStr); } void usage(int retcode){ printf("Usage: fconf2binkd [-c fidoconfig] [options] [output_file_name]\n"); printf("Options: -h\t- print usage information\n"); printf("\t -c\t- specify alternate fidoconfig\n"); printf("\t -f\t- force owerwrite file\n"); printf("\t -p\t- generate passwords file\n"); exit(retcode); } FILE *createOutputFile(const char *ofname){ FILE *ofd; if( ofname ){ if( !(access(ofname,F_OK) || force_flag) ){ fprintf( stderr, "File '%s' exist!", ofname ); return NULL; } if( !(ofd=fopen(ofname, "w+t")) ){ fprintf( stderr, "Can't open file '%s': %s!", ofname, strerror(errno) ); return NULL; } }else ofd=stdout; return ofd; } /* doublicate backslash in output */ int printPath(char *path, FILE *ofd){ int rc=1; for( ; rc && *path; path++ ){ if( *path=='\\' ) rc = (EOF != fprintf( ofd, "\\\\")); else rc = fputc(*path, ofd); } return !rc; } /* Write passwords file: * ;comment *
*
*/ int writePasswords( s_fidoconfig *config, char * ofname ){ FILE *ofd=NULL; unsigned ll = config->linkCount; ofd = createOutputFile(ofname); if( !ofd ) /* can't create */ return 2; fprintf( ofd, "; binkd / t-mail passwords file\n; generated by "); printversion( ofd ); fprintf( ofd, "\n\n" ); for( ; ll-- ; ){ fprintf( ofd, "%s %s\n", aka2str(config->links[ll].hisAka), config->links[ll].sessionPwd ? config->links[ll].sessionPwd : (config->links[ll].defaultPwd ? config->links[ll].defaultPwd : "" ) ); } return 0; } /* Write max. possible binkd config * */ int writeBinkdConfig( s_fidoconfig *config, const char *ofname ){ FILE *ofd=NULL; int rc=0; unsigned ll; ofd = createOutputFile(ofname); if( !ofd ) /* can't create */ return 2; fprintf( ofd, "# binkd config file\n# generated by "); printversion(ofd); /* Address, paths & etc. */ fprintf( ofd, "\n# The name of your system, it's location, and your name\n"); if( config->name ) fprintf( ofd, "sysname \"%s\"\n", config->name ); if( config->location ) fprintf( ofd, "location \"%s\"\n", config->location ); if( config->sysop ) fprintf( ofd, "sysop \"%s\"\n\n", config->sysop ); fprintf( ofd, "# Your addresses, 4D or 5D:\naddress" ); for( ll=config->addrCount ; ll-- ; ){ fprintf( ofd, " %s", aka2str(config->addr[ll]) ); } fprintf( ofd, "\n\n# Your FTN domains:\ndomain fidonet " ); printPath( config->outbound, ofd ); fprintf( ofd, " %u\n\n", config->addr->zone); fprintf( ofd, "# Path and name for the logfile\nlog " ); printPath( config->logFileDir, ofd ); fprintf( ofd, BINKDLOG "\n" ); if( config->protInbound ){ fprintf( ofd, "\n# Inbound directory for secure links\ninbound " ); printPath( config->protInbound, ofd ); } if( config->inbound ){ fprintf( ofd, "\n\n# Inbound directory for non-secure links\ninbound-nonsecure " ); printPath( config->inbound, ofd ); } if( config->minDiskFreeSpace ) fprintf( ofd, "\n\n# Free space limit for receive next file\nminfree %u\n", config->minDiskFreeSpace ); else fputc( '\n', ofd ); /* Links: Set out-box flavor to "crash" */ fprintf( ofd, "\n# Define a link:\n" "# node [[z:]n/]n[.p][@domain] [-nr] [{hosts|-} [{pwd|-} [flavour [{obox|-} [{ibox|-}]]]]]\n" ); for( ll=config->linkCount ; ll-- ; ){ fprintf( ofd, "Node %s * %s %c %s\n", aka2str(config->links[ll].hisAka), config->links[ll].sessionPwd ? config->links[ll].sessionPwd : (config->links[ll].defaultPwd ? config->links[ll].defaultPwd : "" ), config->links[ll].fileBox ? 'c' : ' ', config->links[ll].fileBox ? config->links[ll].fileBox : "" ); } return rc; } int main (int argc, char *argv[]) { s_fidoconfig *config=NULL; char *ofname=NULL; /* output file name */ char *fcfname=NULL; /* fidoconfig file name */ char *p=NULL; int i=1, rc=0; unsigned passwords_list_only=0; /* Constucte program name from calling string */ p=strrchr(argv[0],PATH_DELIM); if( p ) program_name = p+1; else program_name = "fconf2binkd"; printversion(stdout); for( ; i