SLAP_MODULE_ENTRY(dsascheme, modinit) ( int argc, char *argv[] ) { int i; int rc = 0; for (i = 0; i < argc; i++) { rc = dsaschema_read_config(argv[i], 0); if (rc != 0) { break; } } return rc; }
int init_module(int argc, char *argv[]) { int i; int rc; for (i = 0; i < argc; i++) { rc = dsaschema_read_config(argv[i], 0); if (rc != 0) { break; } } return rc; }
static int dsaschema_read_config(const char *fname, int depth) { FILE *fp; char *line, *savefname, *saveline; int savelineno = 0, lineno; int rc; if (depth == 0) { cargv = calloc(ARGS_STEP + 1, sizeof(*cargv)); if (cargv == NULL) { return 1; } cargv_size = ARGS_STEP + 1; } fp = fopen(fname, "r"); if (fp == NULL) { fprintf(stderr, "could not open config file \"%s\": %s (%d)\n", fname, strerror(errno), errno); return 1; } fp_getline_init(&lineno); while ((line = fp_getline(fp, &lineno)) != NULL) { /* skip comments and blank lines */ if (line[0] == '#' || line[0] == '\0') { continue; } saveline = strdup(line); if (saveline == NULL) { return 1; } if (fp_parse_line(lineno, line) != 0) { return 1; } if (cargc < 1) { continue; } if (strcasecmp(cargv[0], "attributetype") == 0 || strcasecmp(cargv[0], "attribute") == 0) { if (cargc < 2) { fprintf(stderr, "%s: line %d: illegal attribute type format\n", fname, lineno); return 1; } else if (*cargv[1] == '(' /*')'*/) { char *p; p = strchr(saveline, '(' /*')'*/); rc = dsaschema_parse_at(fname, lineno, p, cargv); if (rc != 0) return rc; } else { fprintf(stderr, "%s: line %d: old attribute type format not supported\n", fname, lineno); } } else if (strcasecmp(cargv[0], "ditcontentrule") == 0) { char *p; p = strchr(saveline, '(' /*')'*/); rc = dsaschema_parse_cr(fname, lineno, p, cargv); if (rc != 0) return rc; } else if (strcasecmp(cargv[0], "objectclass") == 0) { if (cargc < 2) { fprintf(stderr, "%s: line %d: illegal objectclass format\n", fname, lineno); return 1; } else if (*cargv[1] == '(' /*')'*/) { char *p; p = strchr(saveline, '(' /*')'*/); rc = dsaschema_parse_oc(fname, lineno, p, cargv); if (rc != 0) return rc; } else { fprintf(stderr, "%s: line %d: object class format not supported\n", fname, lineno); } } else if (strcasecmp(cargv[0], "include") == 0) { if (cargc < 2) { fprintf(stderr, "%s: line %d: missing file name in \"include <filename>\" line", fname, lineno); return 1; } savefname = strdup(cargv[1]); if (savefname == NULL) { return 1; } if (dsaschema_read_config(savefname, depth + 1) != 0) { return 1; } free(savefname); lineno = savelineno - 1; } else { fprintf(stderr, "%s: line %d: unknown directive \"%s\" (ignored)\n", fname, lineno, cargv[0]); } } fclose(fp); if (depth == 0) free(cargv); return 0; }