Example #1
0
int main(int argc, char **argv)
	{
	BIO *bio_err;
	X509_REQ *req=NULL;
	EVP_PKEY *pkey=NULL;

	CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);

	bio_err=BIO_new_fp(stderr, BIO_NOCLOSE);

	mkreq(&req,&pkey,512,0,365);

	RSA_print_fp(stdout,pkey->pkey.rsa,0);
	X509_REQ_print_fp(stdout,req);

	PEM_write_X509_REQ(stdout,req);

	X509_REQ_free(req);
	EVP_PKEY_free(pkey);

#ifndef OPENSSL_NO_ENGINE
	ENGINE_cleanup();
#endif
	CRYPTO_cleanup_all_ex_data();

	CRYPTO_mem_leaks(bio_err);
	BIO_free(bio_err);
	return(0);
	}
Example #2
0
int main(int argc, char **argv)
{
	if (argc > 2) {
		printf("usage: %s [passwd]\n", argv[0]);
		return -1;
	}

	BIO* bio_err;
	X509_REQ* req = NULL;
	EVP_PKEY* pkey = NULL;

	CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);

	bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);

	mkreq(&req, &pkey, 1024, 0, 365);
	if (argc == 1) {
		mkcert(req, "rootkey.pem", "rootcert.pem", NULL);
	} else if (argc == 2) {
		mkcert(req, "rootkey.pem", "rootcert.pem", argv[1]);
	}

	RSA_print_fp(stdout, pkey->pkey.rsa, 0);
	X509_REQ_print_fp(stdout, req);
	PEM_write_X509_REQ(stdout, req);

	X509_REQ_free(req);
	EVP_PKEY_free(pkey);

	CRYPTO_cleanup_all_ex_data();
	CRYPTO_mem_leaks(bio_err);
	BIO_free(bio_err);

	return 0;
}
Example #3
0
/* notify a slave that an area has changed. */
static void
send_notify(char *slave, RR *soa, Request *req)
{
	int i, len, n, reqno, status, fd;
	char *err;
	uchar ibuf[Maxudp+Udphdrsize], obuf[Maxudp+Udphdrsize];
	RR *rp;
	Udphdr *up = (Udphdr*)obuf;
	DNSmsg repmsg;

	/* create the request */
	reqno = rand();
	n = mkreq(soa->owner, Cin, obuf, Fauth | Onotify, reqno);

	/* get an address */
	if(strcmp(ipattr(slave), "ip") == 0) {
		if (parseip(up->raddr, slave) == -1)
			dnslog("bad address %s to notify", slave);
	} else {
		rp = dnresolve(slave, Cin, Ta, req, nil, 0, 1, 1, &status);
		if(rp == nil)
			rp = dnresolve(slave, Cin, Taaaa, req, nil, 0, 1, 1, &status);
		if(rp == nil)
			return;
		parseip(up->raddr, rp->ip->name);
		rrfreelist(rp);		/* was rrfree */
	}

	fd = udpport(nil);
	if(fd < 0)
		return;

	/* send 3 times or until we get anything back */
	n += Udphdrsize;
	for(i = 0; i < 3; i++, freeanswers(&repmsg)){
		dnslog("sending %d byte notify to %s/%I.%d about %s", n, slave,
			up->raddr, nhgets(up->rport), soa->owner->name);
		memset(&repmsg, 0, sizeof repmsg);
		if(write(fd, obuf, n) != n)
			break;
		alarm(2*1000);
		len = read(fd, ibuf, sizeof ibuf);
		alarm(0);
		if(len <= Udphdrsize)
			continue;
		err = convM2DNS(&ibuf[Udphdrsize], len, &repmsg, nil);
		if(err != nil) {
			free(err);
			continue;
		}
		if(repmsg.id == reqno && (repmsg.flags & Omask) == Onotify)
			break;
	}
	if (i < 3)
		freeanswers(&repmsg);
	close(fd);
}
Example #4
0
static struct hthead *parsereq(struct bufio *in)
{
    struct hthead *req;
    struct charbuf method, url, ver;
    int c;
    
    req = NULL;
    bufinit(method);
    bufinit(url);
    bufinit(ver);
    while(1) {
	c = biogetc(in);
	if(c == ' ') {
	    break;
	} else if((c == EOF) || (c < 32) || (c >= 128)) {
	    goto fail;
	} else {
	    bufadd(method, c);
	    if(method.d >= 128)
		goto fail;
	}
    }
    while(1) {
	c = biogetc(in);
	if(c == ' ') {
	    break;
	} else if((c == EOF) || (c < 32)) {
	    goto fail;
	} else {
	    bufadd(url, c);
	    if(url.d >= 65536)
		goto fail;
	}
    }
    while(1) {
	c = biogetc(in);
	if(c == 10) {
	    break;
	} else if(c == 13) {
	} else if((c == EOF) || (c < 32) || (c >= 128)) {
	    goto fail;
	} else {
	    bufadd(ver, c);
	    if(ver.d >= 128)
		goto fail;
	}
    }
    bufadd(method, 0);
    bufadd(url, 0);
    bufadd(ver, 0);
    req = mkreq(method.b, url.b, ver.b);
    if(parseheadersb(req, in))
	goto fail;
    trimx(req);
    goto out;
    
fail:
    if(req != NULL) {
	freehthead(req);
	req = NULL;
    }
out:
    buffree(method);
    buffree(url);
    buffree(ver);
    return(req);
}
Example #5
0
static void msend_req_del_stat_read(int s, mfile *m)
{
  int r;
  mfile *d;
  uint16_t len;

  for(d=mftop[MFSEND];d;d=d->next){
    if(d->link == m){
      if(d->mdata.head.nstate == MAKUO_SENDSTATE_WAIT){
        break;
      }
    }
  }
  if(!d){
    d = mkreq(&(m->mdata), &(m->addr), MAKUO_SENDSTATE_WAIT);
    d->mdata.head.flags = m->mdata.head.flags;
    d->mdata.head.reqid = getrid();
    d->initstate = 1;
    d->sendwait  = 0;
    d->sendto    = 1;
    d->dryrun    = m->dryrun;
    d->recurs    = m->recurs;
    d->link      = m;
    d->mdata.p   = d->mdata.data;
  }

  if(m->len >= sizeof(m->mod)){
    len = m->len - sizeof(m->mod);
    data_safeset16(&(d->mdata), m->len);
    data_safeset32(&(d->mdata), m->mod);
    data_safeset(&(d->mdata), m->tn, len);
    m->len = 0;
  }

  while(1){
    if((r = atomic_read(m->pipe, &(m->len), sizeof(m->len), 1))){
      if(r == -1){
        if(errno == EAGAIN){
          return;
        }else{
          lprintf(0, "[error] %s: length read error\n", __func__);
        }
      }
      break;
    }
    if(m->len <= sizeof(m->mod)){
      lprintf(0, "[error] %s: length error\n", __func__);
      break;
    }
    len = m->len - sizeof(m->mod);
    if(atomic_read(m->pipe, &(m->mod), sizeof(m->mod), 0)){
      lprintf(0, "[error] %s: filemode read error\n", __func__);
      break;
    }
    if(atomic_read(m->pipe, m->tn, len, 0)){
      lprintf(0, "[error] %s: filename read error\n", __func__);
      break;
    }
    m->tn[len] = 0;
    if(lstat(m->tn, &(m->fs)) == -1){
      if(errno == ENOENT){
        m->len = 0;
        continue;
      }
    }
    if(msend_req_del_stat_read_pathcmp(s, m)){
      m->len = 0;
      continue;
    }
    if(d->mdata.head.szdata + sizeof(m->len) + m->len > MAKUO_BUFFER_SIZE){
      d->mdata.head.nstate = MAKUO_SENDSTATE_OPEN;
    }else{
      strcpy(d->fn, m->tn);
      data_safeset16(&(d->mdata), m->len);
      data_safeset32(&(d->mdata), m->mod);
      data_safeset(&(d->mdata), m->tn, len);
      m->len = 0;
    }
    return;
  }
  d->mdata.head.nstate = MAKUO_SENDSTATE_OPEN;
  close(m->pipe);
  m->pipe      = -1;
  m->initstate =  1;
  m->sendwait  =  0;
}