예제 #1
0
파일: qldap.c 프로젝트: ajtulloch/qmail
int
qldap_ctrl_generic(void)
{
	/* set defaults, so that a reread works */
	ldap_timeout = QLDAP_TIMEOUT;	/* default timeout is 30 secs */
	rebind = 0;			/* default off */
	default_uid = 0;
	default_gid = 0;
	quotasize = 0;
	quotacount = 0;

	if (control_readfile(&ldap_server, "control/ldapserver", 0) != 1)
		return -1; /* ... the errno should be set by control_* */
	if (ldap_server.len)
		byte_repl(ldap_server.s, ldap_server.len - 1, '\0', ' ');
	else
		if (!stralloc_0(&ldap_server)) return -1;
	logit(64, "init_ldap: control/ldapserver: '%s'\n", ldap_server.s);

	if (control_rldef(&basedn, "control/ldapbasedn", 0, "") == -1)
		return -1;
	if (!stralloc_0(&basedn)) return -1;
	logit(64, "init_ldap: control/ldapbasedn: %s\n", basedn.s);

	if (control_rldef(&objectclass, "control/ldapobjectclass", 0, "") == -1)
		return -1;
	logit(64, "init_ldap: control/ldapobjectclass: %S\n", &objectclass);

	if (control_readint(&ldap_timeout, "control/ldaptimeout") == -1)
		return -1;
	logit(64, "init_ldap: control/ldaptimeout: %i\n", ldap_timeout);

	if (control_readint(&rebind, "control/ldaprebind") == -1) return -1;
	logit(64, "init_ldap: control/ldaprebind: %i\n", rebind);

	
	/* defaults */
	if (control_readint(&default_uid, "control/ldapuid") == -1)
		return -1;
	if (default_uid != 0)
		logit(64, "init_ldap: control/ldapuid: %i\n", default_uid);

	if (control_readint(&default_gid, "control/ldapgid") == -1)
		return -1;
	if (default_gid != 0)
		logit(64, "init_ldap: control/ldapgid: %i\n", default_gid);

	if (control_rldef(&default_messagestore,
		    "control/ldapmessagestore", 0, "") == -1)
		return -1;
	if (default_messagestore.len > 1) {
		if (default_messagestore.s[default_messagestore.len-1] != '/')
			if (!stralloc_append(&default_messagestore, "/"))
				return -1;
		logit(64, "init_ldap: control/ldapmessagestore: %S\n", 
		    &default_messagestore);
	} else
		if (!stralloc_copys(&default_messagestore, "")) return -1;

	if (control_rldef(&dotmode, "control/ldapdefaultdotmode",
		    0, "ldaponly") == -1) return -1;
	if (!stralloc_0(&dotmode)) return -1;
	logit(64, "init_ldap: control/ldapdefaultdotmode: %s\n", dotmode.s);

	if (control_readulong(&quotasize, "control/defaultquotasize") == -1) 
		return -1;
	if (control_readulong(&quotacount, "control/defaultquotacount") == -1) 
		return -1;
	logit(64, "init_ldap: control/defaultquotasize: %u\n", quotasize);
	logit(64, "init_ldap: control/defaultquotacount: %u\n", quotacount);
#ifdef DOMAIN_ALIAS
	if (control_readfile(&domain_map_file, "control/aliasdomains", 0) == -1)
		return -1;
#endif

	return 0;
}
예제 #2
0
파일: freeqd.c 프로젝트: GooseYArd/freeq
int
main (int argc, char *argv[])
{
        int err;
        int res;
        sigset_t set;

        BIO *acc;
        SSL_CTX *sslctx;
        struct freeq_ctx *freeqctx;
        struct freeqd_state fst;

        pthread_t t_monitor;
        pthread_t t_status_logger;
        pthread_t t_sqlserver;
        pthread_t t_cliserver;
        static stralloc clients = {0};

        err = freeq_new(&freeqctx, "appname", "identity", FREEQ_SERVER);
        if (err < 0)
                exit(EXIT_FAILURE);

        freeq_set_log_priority(freeqctx, 10);

        sigemptyset(&set);
        sigaddset(&set, SIGHUP);
        sigaddset(&set, SIGINT);
        sigaddset(&set, SIGUSR1);
        sigaddset(&set, SIGUSR2);
        sigaddset(&set, SIGALRM);
        pthread_sigmask(SIG_BLOCK, &set, NULL);

        dbg(freeqctx, "starting monitor thread\n");
        pthread_create(&t_monitor, 0, &monitor, pDb);

        init_freeqd_state(freeqctx, &fst);

        dbg(freeqctx, "reading clients file\n");
        if (control_readfile(&clients,(char *)"control/clients",1))
        {
                dbg(freeqctx, "clients present, setting up agg database\n");
                //pthread_create(&t_aggregator, 0, &aggregator, (void *)&ri);
                //res = sqlite4_open(0, ":memory:", &pDb, 0);
                res = sqlite4_open(0, "ondisk.db", &pDb, SQLITE4_OPEN_READWRITE | SQLITE4_OPEN_CREATE,NULL);
                if (res != SQLITE4_OK)
                {
                        err(freeqctx, "failed to open in-memory db\n");
                        exit(res);
                }
        } else {
                dbg(freeqctx, "failed to read clients file, database not initialized\n");
        }

        struct srv_ctx status_ctx;
        status_ctx.pDb = pDb;
        status_ctx.fst = &fst;
        status_ctx.freeqctx = freeqctx;
        struct srv_ctx *sctx = &status_ctx;

        pthread_create(&t_status_logger, 0, &status_logger, (void *)sctx);

        //if (control_readfile(&clients,"",1) != 1)
        //	pthread_create(&t_receiver, 0, &receiver, (void *)&ri);
        //	pthread_create(&t_recvinvite, 0, &recvinvite, (void *)recvinvite_nnuri);
        //}

        res = sqlite4_exec(pDb, "create table if not exists freeq_stats(int last);", NULL, NULL);
        if (res != SQLITE4_OK)
        {
                printf("creating freeq_stats failed: %d %s\n", res, sqlite4_errmsg(pDb));
        }

        pthread_create(&t_sqlserver, 0, &sqlserver, (void *)sctx);
        pthread_create(&t_cliserver, 0, &cliserver, (void *)sctx);

        while (1) {
                sleep(1);
        }

        SSL_CTX_free(sslctx);
        BIO_free(acc);
        freeq_unref(freeqctx);
        return 0;
}