Example #1
0
static void read_dh_parameters(int fd, const char *fname)
{
	gnutls_datum dbits, prime, generator;
	int ret, bits;

	if ((ret = gnutls_dh_params_init(&dh_params)) < 0) {
		i_fatal("gnutls_dh_params_init() failed: %s",
			gnutls_strerror(ret));
	}

	/* read until bits field is 0 */
	for (;;) {
		read_next_field(fd, &dbits, fname, "DH bits");

		if (dbits.size != sizeof(int)) {
			(void)unlink(fname);
			i_fatal("Corrupted SSL parameter file %s: "
				"Field 'DH bits' has invalid size %u",
				fname, dbits.size);
		}

		bits = *((int *) dbits.data);
		if (bits == 0)
			break;

		read_next_field(fd, &prime, fname, "DH prime");
		read_next_field(fd, &generator, fname, "DH generator");

		ret = gnutls_dh_params_set(dh_params, prime, generator, bits);
		if (ret < 0) {
			i_fatal("gnutls_dh_params_set() failed: %s",
				gnutls_strerror(ret));
		}
	}
}
Example #2
0
int next_string_field( input_string_def *is, char *buf, int nbuf )
{
    int length;
    char *start;
    int sts;

    sts = read_next_field( is, &start, &length );
    if( sts != OK ) return sts;
    if( length >= nbuf ) length = nbuf-1;
    memcpy( buf, start, length );

    buf[length] = 0;
    return OK;
}
Example #3
0
int test_next_string_field( input_string_def *is, const char *test )
{
    int length;
    char *start;
    double loc;
    int sts;

    loc = get_string_loc(is);
    sts = read_next_field( is, &start, &length );
    if( sts != OK ) return 0;
    if( (int) strlen(test) == length && _strnicmp(test,start,length)==0 ) return 1;
    set_string_loc(is,loc);
    return 0;
}
Example #4
0
int replace_next_field( input_string_def *is, const char *replacement )
{
    char *s, *e, *c;
    char *start;
    int length;
    int sts;
    int len=strlen(replacement);
    s = is->ptr;
    sts=read_next_field( is, &start, &length );
    if( sts != OK ) return NO_MORE_DATA;
    e = is->ptr;
    if( e-s < len ) return TOO_MUCH_DATA;
    strncpy(s,replacement,len);
    for( c=s+len; c < e; c++ ) *c=' ';
    is->ptr = s;
    return OK;
}
Example #5
0
static int parse_number( input_string_def *is, const char *fmt, void *value )
{
    int length, nfld, sts;
    char *fld, save, garbage;
    sts = read_next_field( is, &fld, &length );
    if( sts != OK )  return sts;

    /* Put a NULL terminator at the end of the string */

    save = fld[length];
    fld[length] = 0;

    nfld = sscanf( fld, fmt, value, &garbage );

    fld[length] = save;

    /* Determine the return status */

    return nfld == 1 ? OK : INVALID_DATA;
}
Example #6
0
static void read_rsa_parameters(int fd, const char *fname)
{
	gnutls_datum m, e, d, p, q, u;
	int ret;

	read_next_field(fd, &m, fname, "RSA m");
	read_next_field(fd, &e, fname, "RSA e");
	read_next_field(fd, &d, fname, "RSA d");
	read_next_field(fd, &p, fname, "RSA p");
	read_next_field(fd, &q, fname, "RSA q");
	read_next_field(fd, &u, fname, "RSA u");

	if ((ret = gnutls_rsa_params_init(&rsa_params)) < 0) {
		i_fatal("gnutls_rsa_params_init() failed: %s",
			gnutls_strerror(ret));
	}

	/* only 512bit is allowed */
	ret = gnutls_rsa_params_set(rsa_params, m, e, d, p, q, u, 512);
	if (ret < 0) {
		i_fatal("gnutls_rsa_params_set() failed: %s",
			gnutls_strerror(ret));
	}
}
Example #7
0
int skip_string_field( input_string_def *is )
{
    char *start;
    int length;
    return read_next_field( is, &start, &length );
}