Esempio n. 1
0
int
main(int argc, char **argv) {
    char *porigin, *zonefile;
    dns_fixedname_t forigin, fname;
    dns_name_t *origin, *name;
    dns_db_t *db = NULL;
    dns_dbiterator_t *dbiter;
    dns_dbnode_t *node;
    dns_rdatasetiter_t *rdsiter;
    dns_rdataset_t rdataset;
    dns_rdata_t rdata = DNS_RDATA_INIT;
    isc_mem_t *mctx = NULL;
    isc_entropy_t *ectx = NULL;
    isc_buffer_t b;
    isc_result_t result;
    PGresult *res;

    if (argc != 5) {
        printf("usage: %s origin file dbname dbtable\n", argv[0]);
        printf("Note that dbname must be an existing database.\n");
        exit(1);
    }

    porigin = argv[1];
    zonefile = argv[2];
    dbname = argv[3];
    dbtable = argv[4];

    dns_result_register();

    mctx = NULL;
    result = isc_mem_create(0, 0, &mctx);
    check_result(result, "isc_mem_create");

    result = isc_entropy_create(mctx, &ectx);
    result_check (result, "isc_entropy_create");

    result = isc_hash_create(mctx, ectx, DNS_NAME_MAXWIRE);
    check_result (result, "isc_hash_create");

    isc_buffer_init(&b, porigin, strlen(porigin));
    isc_buffer_add(&b, strlen(porigin));
    dns_fixedname_init(&forigin);
    origin = dns_fixedname_name(&forigin);
    result = dns_name_fromtext(origin, &b, dns_rootname, ISC_FALSE, NULL);
    check_result(result, "dns_name_fromtext");

    db = NULL;
    result = dns_db_create(mctx, "rbt", origin, dns_dbtype_zone,
                           dns_rdataclass_in, 0, NULL, &db);
    check_result(result, "dns_db_create");

    result = dns_db_load(db, zonefile);
    if (result == DNS_R_SEENINCLUDE)
        result = ISC_R_SUCCESS;
    check_result(result, "dns_db_load");

    printf("Connecting to '%s'\n", dbname);
    conn = PQsetdb(NULL, NULL, NULL, NULL, dbname);
    if (PQstatus(conn) == CONNECTION_BAD) {
        fprintf(stderr, "Connection to database '%s' failed: %s\n",
                dbname, PQerrorMessage(conn));
        closeandexit(1);
    }

    snprintf(str, sizeof(str),
             "DROP TABLE %s", dbtable);
    printf("%s\n", str);
    res = PQexec(conn, str);
    if (!res || PQresultStatus(res) != PGRES_COMMAND_OK)
        fprintf(stderr, "DROP TABLE command failed: %s\n",
                PQresultErrorMessage(res));
    PQclear(res);

    snprintf(str, sizeof(str), "BEGIN");
    printf("%s\n", str);
    res = PQexec(conn, str);
    if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) {
        fprintf(stderr, "BEGIN command failed: %s\n",
                PQresultErrorMessage(res));
        PQclear(res);
        closeandexit(1);
    }
    PQclear(res);

    snprintf(str, sizeof(str),
             "CREATE TABLE %s "
             "(NAME TEXT, TTL INTEGER, RDTYPE TEXT, RDATA TEXT)",
             dbtable);
    printf("%s\n", str);
    res = PQexec(conn, str);
    if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) {
        fprintf(stderr, "CREATE TABLE command failed: %s\n",
                PQresultErrorMessage(res));
        PQclear(res);
        closeandexit(1);
    }
    PQclear(res);

    dbiter = NULL;
    result = dns_db_createiterator(db, ISC_FALSE, &dbiter);
    check_result(result, "dns_db_createiterator()");

    result = dns_dbiterator_first(dbiter);
    check_result(result, "dns_dbiterator_first");

    dns_fixedname_init(&fname);
    name = dns_fixedname_name(&fname);
    dns_rdataset_init(&rdataset);
    dns_rdata_init(&rdata);

    while (result == ISC_R_SUCCESS) {
        node = NULL;
        result = dns_dbiterator_current(dbiter, &node, name);
        if (result == ISC_R_NOMORE)
            break;
        check_result(result, "dns_dbiterator_current");

        rdsiter = NULL;
        result = dns_db_allrdatasets(db, node, NULL, 0, &rdsiter);
        check_result(result, "dns_db_allrdatasets");

        result = dns_rdatasetiter_first(rdsiter);

        while (result == ISC_R_SUCCESS) {
            dns_rdatasetiter_current(rdsiter, &rdataset);
            result = dns_rdataset_first(&rdataset);
            check_result(result, "dns_rdataset_first");
            while (result == ISC_R_SUCCESS) {
                dns_rdataset_current(&rdataset, &rdata);
                addrdata(name, rdataset.ttl, &rdata);
                dns_rdata_reset(&rdata);
                result = dns_rdataset_next(&rdataset);
            }
            dns_rdataset_disassociate(&rdataset);
            result = dns_rdatasetiter_next(rdsiter);
        }
        dns_rdatasetiter_destroy(&rdsiter);
        dns_db_detachnode(db, &node);
        result = dns_dbiterator_next(dbiter);
    }

    snprintf(str, sizeof(str), "COMMIT TRANSACTION");
    printf("%s\n", str);
    res = PQexec(conn, str);
    if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) {
        fprintf(stderr, "COMMIT command failed: %s\n",
                PQresultErrorMessage(res));
        PQclear(res);
        closeandexit(1);
    }
    PQclear(res);
    dns_dbiterator_destroy(&dbiter);
    dns_db_detach(&db);
    isc_hash_destroy();
    isc_entropy_detach(&ectx);
    isc_mem_destroy(&mctx);
    closeandexit(0);
    exit(0);
}
Esempio n. 2
0
int main(int argc, char** argv) {
	
	int status, pid, pid2, pid3[CLIENT_NUM],i,temp;
	int filefds[CLIENT_NUM];
	FILE* fp;
	int ifp,ifp2;
	int pipefd[2];
	char filebuf[FILEBUFSIZE];
	int filebufsize=0;
	char buf[512];
	
	fp = fopen(ERRORTXT, "w");
	if (fp ==0) {
		printf("fp error\n");
		//return 0;
	}
	
	fclose(fp);
	
	fp = fopen(RESULTTXT, "w");
	if (fp ==0) {
		//perror("fp");
		printf("fp error\n");
		//return 0;
	}
	fclose(fp);
	
	pid = fork();
	
	
	if (pid == -1) {
		perror("Fork");
		writeToErrorTxt("error fork\n", 11);
		return 0;
	}
	
	if (pid >0) {
		printf("PARENT:");
		
		
		
		sleep(8);
		kill(pid,SIGHUP);
		wait(&status);
		printf("PARENTEND:");
		
		fp = fopen(RESULTTXT, "r");
		memset(filebuf, 0, FILEBUFSIZE);
		fseek(fp, 0L, SEEK_SET);
		filebufsize = fread(filebuf,1, FILEBUFSIZE, fp);
		fclose(fp);
		
		remove(OKTXT);
		remove(DAMETXT);
		
		
		if (result_check(filebuf,filebufsize)) {
			
			fp = fopen(OKTXT, "w");
			fclose(fp);
			fprintf(stderr,"ok");
			
		} else {
			
			fp = fopen(DAMETXT, "w");
			fclose(fp);
			fprintf(stderr, "dame");
		}
		return 0;
	}
	
	pid2 = fork();
	if (pid2 == -1) {
		perror("Fork");
		writeToErrorTxt("error fork\n", 11);
		return 0;
	}
	
	
	
	
	if (pid2 == 0) {
		ifp2 = open(TEMPTXT, O_WRONLY | O_APPEND | O_CREAT| O_TEXT, S_IWRITE);
		if (ifp2 == -1) {
			writeToErrorTxt("error open\n",12);
			perror("open");
		//	return 0;
		}
		
		for (i=0;i<CLIENT_NUM;i++) {
			temp = makeclient(ifp2,&pid3[i],&filefds[i]);
			if (temp != 1) {
				return 0;
			}
		}
	//	close(1);
	//	close(2);
		
		sleep(1);// server ができるまで待つ
		sleep(2); // client ができるまで待つ
		for (i=0;i<CLIENT_NUM;i++) {
			memset(buf,0,512);
			snprintf(buf,512,"never give up %d\n",i);
			write(filefds[i],buf,sizeof(buf) );
		}
		sleep(1);
		for (i=0;i<CLIENT_NUM;i++) {
			close(filefds[i]);
			kill(pid3[i],SIGHUP);
		}
		//sleep(1);
		//kill(pid2,SIGHUP);
		
		close(ifp2);
		wait(&status);
		printf("pidEND:");
			
		
		
		
		
		return 0;
	}
	printf("CHILD(SERV):");
	ifp = open(RESULTTXT, O_WRONLY | O_APPEND | O_CREAT| O_TEXT, S_IWRITE);
	if (ifp == -1) {
		writeToErrorTxt("error open\n",12);
		perror("open");
	
		//	return 0;
	}
	
	
	
	dup2(ifp,1);
	dup2(ifp,2);
	//close(1);
	//close(2);
	
// サーバを実行する(pid)
	if (execl("../../chatserver/server", "../../chatserver/server","20000","0",NULL) == -1) {
		writeToErrorTxt("error exec\n",11);
		perror("execl");
		
		close(ifp);
		return 0;
	}
	close(ifp);
	printf("CHILD(SERV)END:");
		
		
		
	return 0;
}