コード例 #1
0
ファイル: dsaschema.c プロジェクト: osstech-jp/ReOpenLDAP
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;
}
コード例 #2
0
ファイル: dsaschema.c プロジェクト: RingsC/Impala
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;
}
コード例 #3
0
ファイル: dsaschema.c プロジェクト: osstech-jp/ReOpenLDAP
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;
}