Beispiel #1
0
static int ui_write(UI *ui, UI_STRING *uis)
{
	struct ui_data *ui_data = UI_get0_user_data(ui);
	struct ui_form_opt *opt;

	switch (UI_get_string_type(uis)) {
	case UIT_ERROR:
		ui_data->form.error = (char *)UI_get0_output_string(uis);
		break;
	case UIT_INFO:
		ui_data->form.message = (char *)UI_get0_output_string(uis);
		break;
	case UIT_PROMPT:
		opt = malloc(sizeof(*opt));
		if (!opt)
			return 1;
		memset(opt, 0, sizeof(*opt));
		opt->uis = uis;
		opt->opt.label = opt->opt.name = (char *)UI_get0_output_string(uis);
		if (UI_get_input_flags(uis) & UI_INPUT_FLAG_ECHO)
			opt->opt.type = OC_FORM_OPT_TEXT;
		else
			opt->opt.type = OC_FORM_OPT_PASSWORD;
		*(ui_data->last_opt) = &opt->opt;
		ui_data->last_opt = &opt->opt.next;
		break;

	default:
		fprintf(stderr, "Unhandled SSL UI request type %d\n",
			UI_get_string_type(uis));
		return 0;
	}
	return 1;
}
Beispiel #2
0
static int read_string(UI *ui, UI_STRING *uis)
{
    int ok = 0;

    switch (UI_get_string_type(uis)) {
        case UIT_BOOLEAN:
            fputs(UI_get0_output_string(uis), tty_out);
            fputs(UI_get0_action_string(uis), tty_out);
            fflush(tty_out);
            return read_string_inner(ui, uis,
                                     UI_get_input_flags(uis) & UI_INPUT_FLAG_ECHO, 0);
        case UIT_PROMPT:
            fputs(UI_get0_output_string(uis), tty_out);
            fflush(tty_out);
            return read_string_inner(ui, uis,
                                     UI_get_input_flags(uis) & UI_INPUT_FLAG_ECHO, 1);
        case UIT_VERIFY:
            fprintf(tty_out, "Verifying - %s",
                    UI_get0_output_string(uis));
            fflush(tty_out);
            if ((ok = read_string_inner(ui, uis, UI_get_input_flags(uis) 
                & UI_INPUT_FLAG_ECHO, 1)) <= 0)
                return ok;
            if (strcmp(UI_get0_result_string(uis),
                       UI_get0_test_string(uis)) != 0) {
                fprintf(tty_out, "Verify failure\n");
                fflush(tty_out);
                return 0;
            }
            break;
        default:
            break;
    }
    return 1;
}
Beispiel #3
0
/*
 * The following function makes sure that info and error strings are printed
 * before any prompt.
 */
static int write_string(UI *ui, UI_STRING *uis)
{
    switch (UI_get_string_type(uis)) {
    case UIT_ERROR:
    case UIT_INFO:
        fputs(UI_get0_output_string(uis), tty_out);
        fflush(tty_out);
        break;
    default:
        break;
    }
    return 1;
}
Beispiel #4
0
/*
 * The following function makes sure that info and error strings are printed
 * before any prompt.
 */
static int write_string(UI *ui, UI_STRING *uis)
{
    switch (UI_get_string_type(uis)) {
    case UIT_ERROR:
    case UIT_INFO:
        fputs(UI_get0_output_string(uis), tty_out);
        fflush(tty_out);
        break;
    case UIT_NONE:
    case UIT_PROMPT:
    case UIT_VERIFY:
    case UIT_BOOLEAN:
        break;
    }
    return 1;
}
static int ui_android_write(UI *ui, UI_STRING *uis)
{
    char *str, *pos;

    switch (UI_get_string_type(uis)) {
	case UIT_ERROR:
	case UIT_INFO:
        str = UI_get0_output_string(uis);
        while ((pos = strchr(ui_buf, "\n")))
               *pos = " ";
        strlcat(ui_buf, str, sizeof(ui_buf));
	    android_log(PRG_DEBUG, "called ui_android_write() %s", str);
	    break;
	default:
	    break;
    }
    return 1;
}
static int ui_android_read(UI *ui, UI_STRING *uis)
{
    int ok = 0;
    int num = 0;
    const char *str;
    char **args;

    switch (UI_get_string_type(uis)) {
	case UIT_BOOLEAN:
	    android_log(PRG_DEBUG, "called ui_android_read() output boolean %s",
	                UI_get0_output_string(uis));
	    android_log(PRG_DEBUG, "called ui_android_read() action boolean %s",
	                UI_get0_action_string(uis));
	    //			UI_get_input_flags(uis) & UI_INPUT_FLAG_ECHO
	case UIT_PROMPT:
        str = UI_get0_output_string(uis);
	    android_log(PRG_DEBUG, "called ui_android_read() output prompt %s",
                    str);
	    break;
	case UIT_VERIFY:
        str = UI_get0_output_string(uis);
	    android_log(PRG_DEBUG, "called ui_android_read() verify output %s",
                    str);
	    break;
	default:
        return 1;
	    break;
    }

    strlcat(ui_buf, "=X=", sizeof(ui_buf));
    strlcat(ui_buf, str, sizeof(ui_buf));

process:
    if (send_req(ui_buf) < 0) {
        android_log(PRG_ERR, "send_req() failed");
        goto out;
    }

    if (recv_cmd(&num, &args) < 0) {
        android_log(PRG_ERR, "recv_cmd() failed");
        goto out;
    }
    if (num != 1) {
        android_log(PRG_ERR, "parameter number mismatch");
        goto out;
    }

    android_log(PRG_DEBUG, "ui_android_read() cmd: %s %d", args[0], num);

    send_ack(num);

    UI_set_result(ui, uis, args[0]);

    ok = 1;

out:
    if (num)
        free_cmd(num, args);
    ui_buf[0] = '\0';
    return ok;
}