コード例 #1
0
ファイル: configuration.c プロジェクト: kissthink/slapt-get
slapt_rc_config *slapt_read_rc_config(const char *file_name)
{
  FILE *rc = NULL;
  char *getline_buffer = NULL;
  size_t gb_length = 0;
  ssize_t g_size;
  slapt_rc_config *global_config = NULL;

  rc = slapt_open_file(file_name,"r");
  if ( rc == NULL )
    return NULL;

  global_config = slapt_init_config();

  while ( (g_size = getline(&getline_buffer,&gb_length,rc) ) != EOF ) {
    char *token_ptr = NULL;
    getline_buffer[g_size - 1] = '\0';

    /* check to see if it has our key and value separated by our token */
    /* and extract them */
    if ( (strchr(getline_buffer,'#') != NULL) && (strstr(getline_buffer, SLAPT_DISABLED_SOURCE_TOKEN) == NULL) )
      continue;


    if ( (token_ptr = strstr(getline_buffer,SLAPT_SOURCE_TOKEN)) != NULL ) {
      /* SOURCE URL */

      if ( strlen(token_ptr) > strlen(SLAPT_SOURCE_TOKEN) ) {
        slapt_source_t *s = slapt_init_source(token_ptr + strlen(SLAPT_SOURCE_TOKEN));
        if (s != NULL) {
          slapt_add_source(global_config->sources,s);
          if (s->priority != SLAPT_PRIORITY_DEFAULT) {
            global_config->use_priority = SLAPT_TRUE;
          }
        }
      }

    } else if ( (token_ptr = strstr(getline_buffer,SLAPT_DISABLED_SOURCE_TOKEN)) != NULL ) {
      /* DISABLED SOURCE */

      if (strlen(token_ptr) > strlen(SLAPT_DISABLED_SOURCE_TOKEN) ) {
        slapt_source_t *s = slapt_init_source(token_ptr + strlen(SLAPT_DISABLED_SOURCE_TOKEN));
        if (s != NULL) {
          s->disabled = SLAPT_TRUE;
          slapt_add_source(global_config->sources,s);
        }
      }

    } else if ( (token_ptr = strstr(getline_buffer,SLAPT_WORKINGDIR_TOKEN)) != NULL ) {
      /* WORKING DIR */

      if ( strlen(token_ptr) > strlen(SLAPT_WORKINGDIR_TOKEN) ) {
        strncpy(
          global_config->working_dir,
          token_ptr + strlen(SLAPT_WORKINGDIR_TOKEN),
          (strlen(token_ptr) - strlen(SLAPT_WORKINGDIR_TOKEN))
        );
        global_config->working_dir[
          (strlen(token_ptr) - strlen(SLAPT_WORKINGDIR_TOKEN))
        ] = '\0';
      }

    } else if ( (token_ptr = strstr(getline_buffer,SLAPT_EXCLUDE_TOKEN)) != NULL ) {
       /* exclude list */
      slapt_free_list(global_config->exclude_list);
      global_config->exclude_list = parse_exclude(token_ptr);
    }

  }

  fclose(rc);

  if ( getline_buffer )
    free(getline_buffer);

  if ( strcmp(global_config->working_dir,"") == 0 ) {
    fprintf(stderr,gettext("WORKINGDIR directive not set within %s.\n"),
            file_name);
    return NULL;
  }
  if ( global_config->sources->count == 0 ) {
    fprintf(stderr,gettext("SOURCE directive not set within %s.\n"),file_name);
    return NULL;
  }

  return global_config;
}
コード例 #2
0
ファイル: pwdgen.c プロジェクト: MaxWallstedt/pwdgen
/*
 * -l <length> / --length <length> / --length=<length>
 * -a string/@func / --accept string/@func / --accept=string/@func
 * -e string/@func / --exclude string/@func / --exclude=string/@func
 * -h / --help
 * -v / --version
 *
 * Examples:
 *   ./pwdgen -l 8 --accept @isgraph --exclude=xyz
 */
int main(int argc, char *argv[])
{
	int i;
	const char *param;

	for (i = 1; i < argc; ++i) {
		if (arg_is_length_no_param(argv[i])) {
			++i;

			if (i == argc) {
				error_length_no_param(argv[i - 1]);
			}

			param = argv[i];
			parse_length(param);
		} else if (arg_is_length_param(argv[i])) {
			if (argv[i][strlen(arg_length_param)] == '\0') {
				error_length_no_param(argv[i]);
			}

			param = &argv[i][strlen(arg_length_param)];
			parse_length(param);
		} else if (arg_is_accept_no_param(argv[i])) {
			++i;

			if (i == argc) {
				error_accept_no_param(argv[i - 1]);
			}

			param = argv[i];
			parse_accept(param);
		} else if (arg_is_accept_param(argv[i])) {
			if (argv[i][strlen(arg_accept_param)] == '\0') {
				error_accept_no_param(argv[i]);
			}

			param = &argv[i][strlen(arg_accept_param)];
			parse_accept(param);
		} else if (arg_is_exclude_no_param(argv[i])) {
			++i;

			if (i == argc) {
				error_exclude_no_param(argv[i - 1]);
			}

			param = argv[i];
			parse_exclude(param);
		} else if (arg_is_exclude_param(argv[i])) {
			if (argv[i][strlen(arg_exclude_param)] == '\0') {
				error_exclude_no_param(argv[i]);
			}

			param = &argv[i][strlen(arg_exclude_param)];
			parse_exclude(param);
		} else {
			error_invalid_arg(argv[i]);
		}
	}

	if (n_accept_funcs == 0 && n_exclude_funcs == 0
	    && n_accept_chars == 0 && n_exclude_chars == 0) {
		parse_accept("@isgraph");
	}

	rndfd = open("/dev/urandom", O_RDONLY);

	if (rndfd == -1) {
		perror("/dev/urandom");
		exit(EXIT_FAILURE);
	}

	pwdgen_main();
	close(rndfd);

	return 0;
}