Ejemplo n.º 1
0
int list_main(int argc, char **argv)
{
    char *prog;
    HELPLIST_CHOICE o;
    int one = 0, done = 0;

    prog = opt_init(argc, argv, list_options);
    while ((o = opt_next()) != OPT_EOF) {
        switch (o) {
        case OPT_EOF:  /* Never hit, but suppresses warning */
        case OPT_ERR:
opthelp:
            BIO_printf(bio_err, "%s: Use -help for summary.\n", prog);
            return 1;
        case OPT_HELP:
            opt_help(list_options);
            break;
        case OPT_ONE:
            one = 1;
            break;
        case OPT_COMMANDS:
            list_type(FT_general, one);
            break;
        case OPT_DIGEST_COMMANDS:
            list_type(FT_md, one);
            break;
        case OPT_DIGEST_ALGORITHMS:
            EVP_MD_do_all_sorted(list_md_fn, bio_out);
            break;
        case OPT_MAC_ALGORITHMS:
            EVP_MAC_do_all_sorted(list_mac_fn, bio_out);
            break;
        case OPT_CIPHER_COMMANDS:
            list_type(FT_cipher, one);
            break;
        case OPT_CIPHER_ALGORITHMS:
            EVP_CIPHER_do_all_sorted(list_cipher_fn, bio_out);
            break;
        case OPT_PK_ALGORITHMS:
            list_pkey();
            break;
        case OPT_PK_METHOD:
            list_pkey_meth();
            break;
        case OPT_DISABLED:
            list_disabled();
            break;
        case OPT_MISSING_HELP:
            list_missing_help();
            break;
        case OPT_OBJECTS:
            list_objects();
            break;
        case OPT_OPTIONS:
            list_options_for_command(opt_arg());
            break;
        }
        done = 1;
    }
    if (opt_num_rest() != 0) {
        BIO_printf(bio_err, "Extra arguments given.\n");
        goto opthelp;
    }

    if (!done)
        goto opthelp;

    return 0;
}
Ejemplo n.º 2
0
int
main(int argc, char **argv)
{
	isns_client_t	*clnt;
	isns_security_t	*security = NULL;
	int		c, status;

	while ((c = getopt_long(argc, argv, "46Cc:d:hK:k:l", options, NULL)) != -1) {
		switch (c) {
		case '4':
			opt_af = AF_INET;
			break;

		case '6':
			opt_af = AF_INET6;
			break;

		case 'C':
			opt_control = 1;
			break;

		case 'c':
			opt_configfile = optarg;
			break;

		case 'd':
			isns_enable_debugging(optarg);
			break;

		case 'h':
			usage(0, NULL);
			break;

		case 'K':
			opt_keyfile = optarg;
			break;

		case 'k':
			opt_key = optarg;
			break;

		case 'l':
			opt_local = 1;
			break;

		case 'r':
			opt_replace = 1;
			break;

		case 'V':
			printf("Open-iSNS version %s\n"
			       "Copyright (C) 2007, Olaf Kirch <*****@*****.**>\n",
			       OPENISNS_VERSION_STRING);
			return 0;

		case DO_REGISTER:
		case DO_QUERY:
		case DO_QUERY_EID:
		case DO_LIST:
		case DO_DEREGISTER:
		case DO_DD_REGISTER:
		case DO_DD_DEREGISTER:
		case DO_ENROLL:
		case DO_EDIT_POLICY:
		case DO_DELETE_POLICY:
			if (opt_action)
				usage(1, "You cannot specify more than one mode\n");
			opt_action = c;
			break;

		default:
			usage(1, "Unknown option");
		}
	}
	
	isns_read_config(opt_configfile);

	if (!isns_config.ic_source_name)
		usage(1, "Please specify an iSNS source name");
	if (!isns_config.ic_server_name)
		usage(1, "Please specify an iSNS server name");
	if (!opt_action)
		usage(1, "Please specify an operating mode");

	if (opt_control) {
		if (!isns_config.ic_security)
			isns_fatal("Cannot use control mode, security disabled\n");
		security = isns_control_security_context(0);
		if (!security)
			isns_fatal("Unable to create control security context\n");

		/* Create a networked client, using isns.control as
		 * the source name */
		clnt = isns_create_client(security, isns_config.ic_control_name);
	} else if (opt_local) {
		/* Create a local client, using isns.control as
		 * the source name */
		clnt = isns_create_local_client(security,
				isns_config.ic_control_name);
	} else {
		/* Create a networked client, using the configured
		 * source name */
		clnt = isns_create_default_client(security);
	}

	if (clnt == NULL)
		return 1;

	/* We're an interactive app, and don't want to retry
	 * forever if the server refuses us. */
	isns_socket_set_disconnect_fatal(clnt->ic_socket);

	/* Get the IP address we use to talk to the iSNS server */
	if (opt_myaddr.ss_family == AF_UNSPEC && !opt_local) {
		if (!isns_socket_get_local_addr(clnt->ic_socket, &opt_myaddr))
			isns_fatal("Unable to obtain my IP address\n");
		isns_addr_set_port((struct sockaddr *) &opt_myaddr, 860);
	}

	argv += optind; argc -= optind;
	switch (opt_action) {
	case DO_REGISTER:
		status = register_objects(clnt, argc, argv);
		break;

	case DO_QUERY:
		status = query_objects(clnt, argc, argv);
		break;

	case DO_QUERY_EID:
		status = query_entity_id(clnt, argc, argv);
		break;

	case DO_LIST:
		status = list_objects(clnt, argc, argv);
		break;

	case DO_DEREGISTER:
		status = deregister_objects(clnt, argc, argv);
		break;

	case DO_DD_REGISTER:
		status = register_domain(clnt, argc, argv);
		break;

	case DO_DD_DEREGISTER:
		status = deregister_domain(clnt, argc, argv);
		break;


	case DO_ENROLL:
		status = enroll_client(clnt, argc, argv);
		break;

	case DO_EDIT_POLICY:
		status = edit_policy(clnt, argc, argv);
		break;

	// case DO_DELETE_POLICY:

	default:
		isns_fatal("Not yet implemented\n");
		status = 1; /* compiler food */
	}

	return status != ISNS_SUCCESS;
}
Ejemplo n.º 3
0
/*******************************************************************************
Parse the command line arguments left to right, processing them in order. See
the usage message.
*******************************************************************************/
int main(int argc, char *argv[]) {
	extern char	*optarg;
	extern int	optind, optopt, opterr;
	int			optchar, optidx;
	regex_t		extregexp;

	setlocale(LC_ALL, getenv("LANG"));
	setlocale(LC_NUMERIC, "en_US.UTF-8");

	if (argc <= 1) {
		display_usage_message(argv[0]);
		exit(1);
	}

	if ((objectinfotable=(Objectinfo*)calloc(INITMAXNUMOBJS, sizeof(Objectinfo))) == NULL) {
		perror("Could not calloc initial object info table");
		exit(1);
	}

	/* replace any --longarg(s) with the equivalent -l (short argument(s)) */
	for (optidx=1; optidx<argc; optidx++) {
		if (!strncmp(argv[optidx], "--", 2)) {
			command_line_long_to_short(argv[optidx]);
		}
	}

	set_envvars();
	set_starttime();
	set_extended_regular_expression(DEFAULTERE, &extregexp);	/* set default */

	/* Both while loops and the if (below) are required because command line options
	and arguments can be interspersed and are processed in (left-to-right) order */
	while (optind < argc) {
		while ((optchar = getopt(argc, argv, GETOPTSTR)) != -1) {
			switch(optchar) {
				case 'd': directoryflag		= !directoryflag;					break;
				case 'f': regularfileflag	= !regularfileflag;					break;
				case 'o': otherobjectflag	= !otherobjectflag;					break;
				case 'r': recursiveflag		= !recursiveflag;					break;
				case 'i': ignorecaseflag	= !ignorecaseflag;					break;
				case 'a': set_target_time_by_relative_age(optarg, optchar);		break;
				case 'm': set_target_time_by_relative_age(optarg, optchar);		break;
				case 'p': set_extended_regular_expression(optarg, &extregexp);	break;
				case 'A': set_target_time_by_object_time(optarg, optchar);		break;
				case 'D': maxrecursiondepth = MAX(0,atoi(optarg));				break;
				case 'M': set_target_time_by_object_time(optarg, optchar);		break;
				case 'h': display_usage_message(argv[0]); exit(0);				break;
				case 'n': displaynsecflag = 1;									break;
				case 's': displaysecondsflag = 1;								break;
				case 'u': secondsunitchar = SECONDSUNITCHAR;
					bytesunitchar = BYTESUNITCHAR;								break;
				case 'v': verbosity++;											break;
				case 'R': sortmultiplier = -1;									break;
				case 't': process_path(optarg, &extregexp, 0);
					numtargets++;												break;
				break;
			}
		}

		if (optind < argc) {	/* See above comment. Yes, this is required! */
			process_path(argv[optind], &extregexp, 0);
			numtargets++;
			optind++;
		}
	}

	if (verbosity > 1) {
		list_starttime();
	}
	list_objects();
	fflush(stdout);
	if (verbosity > 3) {
		list_envvartable();
	}
	return returncode;
}