Esempio n. 1
0
/* <string|int> .checkpassword <0|1|2> */
static int
zcheckpassword(i_ctx_t *i_ctx_p)
{
    os_ptr op = osp;
    ref params[2];
    array_param_list list;
    gs_param_list *const plist = (gs_param_list *)&list;
    int result = 0;
    int code = name_ref(imemory, (const byte *)"Password", 8, &params[0], 0);
    password pass;

    if (code < 0)
        return code;
    params[1] = *op;
    array_param_list_read(&list, params, 2, NULL, false, iimemory);
    if (dict_read_password(&pass, systemdict, "StartJobPassword") >= 0 &&
        param_check_password(plist, &pass) == 0
        )
        result = 1;
    if (dict_read_password(&pass, systemdict, "SystemParamsPassword") >= 0 &&
        param_check_password(plist, &pass) == 0
        )
        result = 2;
    iparam_list_release(&list);
    make_int(op, result);
    return 0;
}
Esempio n. 2
0
/* <mark> <name> <value> ... <iodevice> .putdevparams */
static int
zputdevparams(i_ctx_t *i_ctx_p)
{
    os_ptr op = osp;
    gx_io_device *iodev;
    stack_param_list list;
    gs_param_list *const plist = (gs_param_list *) & list;
    int code;
    password system_params_password;

    check_read_type(*op, t_string);
    iodev = gs_findiodevice(imemory, op->value.bytes, r_size(op));
    if (iodev == 0)
        return_error(e_undefined);
    code = stack_param_list_read(&list, &o_stack, 1, NULL, false, iimemory);
    if (code < 0)
        return code;
    code = dict_read_password(&system_params_password, systemdict,
                              "SystemParamsPassword");
    if (code < 0)
        return code;
    code = param_check_password(plist, &system_params_password);
    if (code != 0) {
        iparam_list_release(&list);
        return_error(code < 0 ? code : e_invalidaccess);
    }
    code = gs_putdevparams(iodev, plist);
    iparam_list_release(&list);
    if (code < 0)
        return code;
    ref_stack_pop(&o_stack, list.count * 2 + 2);
    return 0;
}
Esempio n. 3
0
/* <dict> .setsystemparams - */
static int
zsetsystemparams(i_ctx_t *i_ctx_p)
{
    os_ptr op = osp;
    int code;
    dict_param_list list;
    gs_param_list *const plist = (gs_param_list *)&list;
    password pass;

    check_type(*op, t_dictionary);
    code = dict_param_list_read(&list, op, NULL, false, iimemory);
    if (code < 0)
        return code;
    code = dict_read_password(&pass, systemdict, "SystemParamsPassword");
    if (code < 0)
        return code;
    code = param_check_password(plist, &pass);
    if (code != 0) {
        if (code > 0)
            code = gs_note_error(gs_error_invalidaccess);
        goto out;
    }
    code = param_read_password(plist, "StartJobPassword", &pass);
    switch (code) {
        default:		/* invalid */
            goto out;
        case 1:		/* missing */
            break;
        case 0:
            code = dict_write_password(&pass, systemdict,
                                       "StartJobPassword",
                                       ! i_ctx_p->LockFilePermissions);
            if (code < 0)
                goto out;
    }
    code = param_read_password(plist, "SystemParamsPassword", &pass);
    switch (code) {
        default:		/* invalid */
            goto out;
        case 1:		/* missing */
            break;
        case 0:
            code = dict_write_password(&pass, systemdict,
                                       "SystemParamsPassword",
                                       ! i_ctx_p->LockFilePermissions);
            if (code < 0)
                goto out;
    }

    code = setparams(i_ctx_p, plist, &system_param_set);
  out:
    iparam_list_release(&list);
    if (code < 0)
        return code;
    pop(1);
    return 0;
}