Exemple #1
0
/*
 * Преобразование строки даты из Unix-формата в RFC 1036.
 *      Wdy, DD Mon YY HH:MM:SS *HHMM
 *      0         0         0         0
 *      Wdy Mon DD HH:MM:SS YYYY
 */
static char *ctim2rfc (register char *ct, int tz)
{
	if (ct[8] == ' ')
		ct[8] = '0';
	strcpy (buf, "Wdy, DD Mon YY HH:MM:SS *HHMM");
	strncpy (buf, ct, 3);                   /* Wdy */
	strncpy (buf+5, ct+8, 2);               /* DD */
	strncpy (buf+8, ct+4, 3);               /* Mon */
	strncpy (buf+15, ct+11, 8);             /* HH:MM:SS */
	if (ct[20] == '1' || ct[20] == '2')
		strncpy (buf+12, ct+22, 2);     /* YY */
	else {
		char *czone;

		/* Wdy Mon DD HH:MM:SS DST YYYY */
		strncpy (buf+12, ct+26, 2);     /* YY */
		czone = ct + 20;
		tz = getkeyword (&czone, zonetab, KEYSIZE (zonetab));
		if (tz == ERROR)
			tz = 0;
	}
	settz (buf, tz);
	return (buf);
}
Exemple #2
0
/*
 * Преобразование даты в стандарт RFC 1036.
 */
char *rfcdate (char *ctim)
{
#define skip(p) while (*(p)==' ' || *(p)=='\t') ++(p)
	int wday, day, mon, year, h, m, s, tz;

	skip (ctim);
	if (ctim[3]==' ' && ctim[7]==' ' && ctim[10]==' ' &&
	    ctim[13]==':' && ctim[16]==':' && ctim[19]==' ' &&
	    (ctim[20]=='1' || ctim[20]=='2' || ctim[24]=='1' || ctim[24]=='2'))
		return (ctim2rfc (ctim, 0));

	/* [Wdy,] DD Mon YY HH:MM[:SS] TIMEZONE */

	if ((*ctim>='A' && *ctim<='Z') || (*ctim>='a' && *ctim<='z')) {
		wday = getkeyword (&ctim, daytab, KEYSIZE (daytab));
		if (wday == ERROR)
			return (0);
		if (*ctim == ',')
			++ctim;
		skip (ctim);
	} else
		wday = -1;

	day = getint (&ctim);
	if (day < 0)
		return (0);

	skip (ctim);
	mon = getkeyword (&ctim, monthtab, KEYSIZE (monthtab));
	if (mon == ERROR)
		return (0);

	skip (ctim);
	year = getint (&ctim);
	if (year < 0)
		return (0);
	if (year < 70)
		year += 2000;
	else if (year < 100)
		year += 1900;
	if (year <= 1981)               /* ancient date */
		return (0);

	skip (ctim);
	if (*ctim>='0' && *ctim<='9') {
		h = getint (&ctim);
		if (h<0 || *ctim!=':')
			return (0);
		++ctim;

		skip (ctim);
		m = getint (&ctim);
		if (m < 0)
			return (0);

		if (*ctim == ':') {
			++ctim;
			skip (ctim);
			s = getint (&ctim);
			if (s < 0)
				return (0);
		} else
			s = 0;

		skip (ctim);
	} else {
		h = 12;
		m = s = 0;
	}
	if (*ctim=='+' || *ctim=='-') {
		int sign = (*ctim == '+');
		++ctim;
		skip (ctim);
		tz = getint (&ctim);
		if (tz < 0)
			return (0);
		tz = tz / 100 * 60 + tz % 100;
		if (sign)
			tz = -tz;
	} else if (*ctim) {
		tz = getkeyword (&ctim, zonetab, KEYSIZE (zonetab));
		if (tz == ERROR)
			return (0);
	} else
		tz = 0;

	if (wday < 0)
		wday = weekday (day, mon, year);

	sprintf (buf, "%s, %02d %s %02d %02d:%02d:%02d *HHMM",
		dayname [wday], day, monthname [mon-1],
		year % 100, h, m, s);
	settz (buf, tz);
	return (buf);
}
Exemple #3
0
Boolean d_sad_fill_default_policy(SshSADHandle sad_handle)
{

  if ((sad_handle->default_ike_sa = ssh_ikev2_sa_allocate(sad_handle))
      != NULL)
    {
      int i;
      SshIkev2PayloadSA sa = sad_handle->default_ike_sa;

      for (i = 0; i < d_sad_ciphers_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_ENCR,
			 d_sad_ciphers[i].transform,
			 KEYSIZE(d_sad_ciphers[i].keylen));
      for (i = 0; i < d_sad_prfs_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_PRF,
			 d_sad_prfs[i].transform,
			 KEYSIZE(d_sad_prfs[i].keylen));
      for (i = 0; i < d_sad_integs_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_INTEG,
			 d_sad_integs[i].transform,
			 KEYSIZE(d_sad_integs[i].keylen));
      for (i = 0; i < d_sad_dhs_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_D_H,
			 d_sad_dhs[i].transform, KEYSIZE(d_sad_dhs[i].keylen));

      sa->protocol_id[0] = SSH_IKEV2_PROTOCOL_ID_IKE;
    }

  if ((sad_handle->default_ike_nosa = ssh_ikev2_sa_allocate(sad_handle))
      != NULL)
    {
      int i;
      SshIkev2PayloadSA sa = sad_handle->default_ike_nosa;

      ssh_ikev2_sa_add(sa,
		       0,
		       SSH_IKEV2_TRANSFORM_TYPE_ENCR,
		       SSH_IKEV2_TRANSFORM_ENCR_IDEA, 0);
      for (i = 0; i < d_sad_prfs_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_PRF,
			 d_sad_prfs[i].transform,
			 KEYSIZE(d_sad_prfs[i].keylen));
      for (i = 0; i < d_sad_integs_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_INTEG,
			 d_sad_integs[i].transform,
			 KEYSIZE(d_sad_integs[i].keylen));
      for (i = 0; i < d_sad_dhs_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_D_H,
			 d_sad_dhs[i].transform, KEYSIZE(d_sad_dhs[i].keylen));

      sa->protocol_id[0] = SSH_IKEV2_PROTOCOL_ID_IKE;
    }

  if ((sad_handle->default_ipsec_sa = ssh_ikev2_sa_allocate(sad_handle))
      != NULL)
    {
      int i;
      SshIkev2PayloadSA sa = sad_handle->default_ipsec_sa;

      for (i = 0; i < d_sad_ciphers_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_ENCR,
			 d_sad_ciphers[i].transform,
			 KEYSIZE(d_sad_ciphers[i].keylen));
      for (i = 0; i < d_sad_integs_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_INTEG,
			 d_sad_integs[i].transform,
			 KEYSIZE(d_sad_integs[i].keylen));
      /* Remove if no ipsec pfs ... */
#if 0
      for (i = 0; i < d_sad_dhs_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_D_H,
			 d_sad_dhs[i].transform, KEYSIZE(d_sad_dhs[i].keylen));
#endif
      for (i = 0; i < d_sad_esns_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_ESN,
			 d_sad_esns[i].transform,
			 KEYSIZE(d_sad_esns[i].keylen));

      sa->protocol_id[0] = SSH_IKEV2_PROTOCOL_ID_ESP;
    }

  if ((sad_handle->default_ipsec_nosa = ssh_ikev2_sa_allocate(sad_handle))
      != NULL)
    {
      int i;
      SshIkev2PayloadSA sa = sad_handle->default_ipsec_nosa;

      ssh_ikev2_sa_add(sa,
		       0,
		       SSH_IKEV2_TRANSFORM_TYPE_ENCR,
		       SSH_IKEV2_TRANSFORM_ENCR_IDEA, 0);

      for (i = 0; i < d_sad_integs_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_INTEG,
			 d_sad_integs[i].transform,
			 KEYSIZE(d_sad_integs[i].keylen));
      /* Remove if no ipsec pfs ... */
#if 0
      for (i = 0; i < d_sad_dhs_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_D_H,
			 d_sad_dhs[i].transform, KEYSIZE(d_sad_dhs[i].keylen));
#endif
      for (i = 0; i < d_sad_esns_num; i++)
	ssh_ikev2_sa_add(sa,
			 0,
			 SSH_IKEV2_TRANSFORM_TYPE_ESN,
			 d_sad_esns[i].transform,
			 KEYSIZE(d_sad_esns[i].keylen));

      sa->protocol_id[0] = SSH_IKEV2_PROTOCOL_ID_ESP;
    }
  return TRUE;
}