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; }
/* * -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; }