config-parser.c

来自「linux 下通过802.1认证的安装包」· C语言 代码 · 共 283 行

C
283
字号
/**
 * A client-side 802.1x implementation 
 *
 * This code is released under both the GPL version 2 and BSD licenses.
 * Either license may be used.  The respective licenses are found below.
 *
 * Copyright (C) 2002 Bryan D. Payne & Nick L. Petroni Jr.
 * All Rights Reserved
 *
 * --- GPL Version 2 License ---
 * 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.
 *
 * --- BSD License ---
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *  - Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *  - Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *  - All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *       This product includes software developed by the University of
 *       Maryland at College Park and its contributors.
 *  - Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/*******************************************************************
 * The driver function for a test configuration parser 
 *
 * File: config-parser.c
 *
 * Authors: npetroni@cs.umd.edu
 *
 * $Id: config-parser.c,v 1.9.2.9 2007/03/14 19:18:08 chessing Exp $
 * $Date: 2007/03/14 19:18:08 $
 * $Log: config-parser.c,v $
 * Revision 1.9.2.9  2007/03/14 19:18:08  chessing
 * Some patches that didn't get in last time because of conflicts.  Adding/changing some of the configuration file settings.  Because of this logging will be broken until I get a second to fix it. ;)
 *
 * Revision 1.9.2.8  2007/03/12 00:30:36  chessing
 * Some code cleanups, and fixes to make the Mac version build again.  The Linux version is going to need a little more work to get in sync.
 *
 * Revision 1.9.2.7  2007/03/10 00:51:08  chessing
 * Rewrote libxsupconfwrite library to generate the XML configuration format that is now in use.
 *
 * Revision 1.9.2.6  2007/01/29 18:45:12  chessing
 * Fix up some dependancies for libxsupconfig.
 *
 * Revision 1.9.2.5  2007/01/20 22:55:44  chessing
 * MASSIVE change of the configuration file to fit the new UI that is currently in development.  Has the added benefit that it makes it easier to reuse credentials in different networks without rewriting the config.   Will do a commit soon with updated examples.
 *
 * Revision 1.9.2.4  2006/12/29 19:28:17  chessing
 * Changes to bring Mac/Linux versions in sync with Windows work.
 *
 * Revision 1.9.2.3  2006/12/28 21:37:30  chessing
 * Added project files to build more libraries and tools in Xsupplicant /lib and /tools directories.
 *
 * Revision 1.9.2.2  2006/12/27 22:14:34  chessing
 * Changes to the VS2005 project files to build ntpwdhash now, and to build libxsupconfig as a library.
 *
 * Revision 1.9.2.1  2006/10/12 03:45:04  chessing
 * Huge update to replace the existing configuration file parser with a new XML based parser.  This means that older configuration files will need to be converted to the new format in order to be useful.  There should be an automated conversion tool shortly, at which time we will convert the example files in etc.
 *
 * Revision 1.9  2006/05/14 22:09:28  chessing
 * A few small changes in the Xsupplicant code.  Beginning of a configuration/monitor program can be found in gui_tools. (Very simple for now, with several known bugs, but no showstopper bugs know.)
 *
 * Revision 1.8  2005/11/16 02:18:39  chessing
 * Updates to the config writing library.  The config-parser tool has been modified to be able to parse a config, and rewrite it.
 *
 * Revision 1.7  2005/10/17 03:56:55  chessing
 * Updates to the libxsupconfig library.  It no longer relies on other source from the main tree, so it can be used safely in other code with problems.
 *
 * Revision 1.6  2004/10/22 05:11:03  chessing
 * Major changes to Xsupplicant. Xsupplicant now only works on a single interface, with a much more simplistic set of goals.  As a result, many configuration options have been removed.  For now, the options that have been removed will generate a warning letting users know that they need to update their config.  Following the next release, we can remove them completely.
 *
 * Revision 1.5  2004/10/10 06:13:27  chessing
 * Small fixups to early patches to make things work with the new driver= section in the config file.
 *
 * Revision 1.4  2004/10/09 22:44:04  chessing
 *
 * The beginnings of card/driver specific options needed to handle the differences in cards for roaming, and WPA.
 *
 * Revision 1.3  2003/12/19 23:19:11  npetroni
 * updated config code and test example. Fixed a couple things
 *   1. added new variables to globals:
 *      startup_command
 *      first_auth_command
 *      reauth_command
 *      auth_period
 *      held_period
 *      max_starts
 *      allow_interfaces
 *      deny_ineterfaces
 *
 *   2. added new variables to network:
 *      dest_mac
 *
 *   3. added new variables to ttls:
 *      phase2_type
 *
 *   4. added new variables to peap:
 *      allow_types
 *
 *   5. layed the groundwork for "preferred types" to be sent in Nak
 *
 * Revision 1.2  2003/11/29 01:11:31  npetroni
 * Added first round of configuration code.
 * Structural Changes:
 *    added examle config file and finished config-parser to test configuration
 *    files and optionally dump the output
 *
 * Current Status:
 *   Have not added parameters for any other method than TLS so we can discuss
 *   the changes before doing so.
 *
 *   Did not update config_build() so chris can keep testing as before.
 *
 * Revision 1.1  2003/11/26 21:11:55  npetroni
 * Added a config parser directory in which to start writing a test parser.
 * no functionality yet.
 *
 *
 *******************************************************************/
#include <stdlib.h>

#ifndef WINDOWS
#include <unistd.h>
#endif

#include <stdio.h>
#include <signal.h>
#include <errno.h>
#include <string.h>

#ifdef WINDOWS
#include "../../src/stdintwin.h"
#endif

#include "../../src/xsup_err.h"
#include "../../lib/libxsupconfig/xsupconfig_structs.h"
#include "../../src/xsup_common.h"
#include "../../lib/libxsupconfig/xsupconfig.h"
#include "../../src/context.h"
#include "../../lib/libxsupconfwrite/xsupconfwrite.h"
#include "../../src/xsup_debug.h"
#include "../../src/getopts.h"

#define CONFIG_PARSE_VERBOSE    0x00000001
#define CONFIG_PARSE_HAVE_FILE  0x00000002
#define CONFIG_PARSE_WRITE_FILE 0x00000004

void usage(char *prog)
{
  printf("Usage: %s [-v] [-h] [-f file] [-o file]"
	       "\n\t-f  file to parse (required)"
	       "\n\t-h  print this message"
	       "\n\t-v  verbose"
	       "\n\t-o  rewrite the config to file"
	       "\n", prog);
}

/***************************************
 *
 * The main body of the program.  We should keep this simple!  Process any
 * command line options that were passed in, set any needed variables.
 *
 ***************************************/
int main(int argc, char *argv[])
{
  struct options opts[] =
  {
	  { 1, "file",  "Load a specific config file", "f", 1 },
	  { 2, "output", "Rewrite the configuration file", "o", 1 },
	  { 3, "verbose", "Verbose output", "v", 0 },
	  { 4, "help", "Display help", "h", 0 },

	  { 0, NULL, NULL, NULL, 0 }
  };

  int op;
  char *args = NULL;
  char *config_fname = NULL, *config_ofname = NULL;
  int flags = 0x00000000;
  int retval = 0;

  // We should have at least one argument passed in!
  if (argc<2)
    {
      usage(argv[0]);
      exit(0);
    }

  // Process any arguments we were passed in.

  while ((op = getopts(argc, argv, opts, &args)) != 0) 
    {
      switch (op)
	{
	case 1:
	  config_fname = args;
	  flags |= CONFIG_PARSE_HAVE_FILE;
	  break;
	case 3:
	  flags |= CONFIG_PARSE_VERBOSE;
	  break;
	case 4:
	  usage(argv[0]);
	  exit(0);
	  break;
	case 2:
	  config_ofname = args;
	  flags |= CONFIG_PARSE_WRITE_FILE;
	  break;
	default:
	  usage(argv[0]);
	  exit(0);
	  break;
	}
    }
  if (config_fname == NULL) {
    printf("No filename given!\n");
    usage(argv[0]);
    exit(0);
  }
  
  if (config_setup(config_fname) == XENONE) {
    if (flags & CONFIG_PARSE_VERBOSE)
      {
	printf("Dumpping config.\n");
	dump_config_data();
      }
    printf("Parsed successfully.\n");

    if (flags & CONFIG_PARSE_WRITE_FILE)
      {
		retval = xsupconfwrite_write_config(config_ofname);
		if (retval != XSUPCONFWRITE_ERRNONE)
		{
			debug_printf(DEBUG_NORMAL, "Error writing config file.\n");
		} else {
			debug_printf(DEBUG_NORMAL, "File written.\n");
		} 
      }
    printf("Exiting.\n");
    config_destroy();
  }
  else {
    printf("Failed to Parse \"%s\". Exiting.\n", 
		 config_fname);
  }
  
  
  return XENONE;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?