View | Details | Raw Unified | Return to bug 2652 | Differences between
and this patch

Collapse All | Expand All

(-)a/ssh-pkcs11.c (-6 / +3 lines)
Lines 366-384 pkcs11_open_session(struct pkcs11_provider *p, CK_ULONG slotidx, char *pin) Link Here
366
366
367
	f = p->function_list;
367
	f = p->function_list;
368
	login_required = p->slotinfo[slotidx].token.flags & CKF_LOGIN_REQUIRED;
368
	login_required = p->slotinfo[slotidx].token.flags & CKF_LOGIN_REQUIRED;
369
	if (pin && login_required && !strlen(pin)) {
369
370
		error("pin required");
371
		return (-1);
372
	}
373
	if ((rv = f->C_OpenSession(p->slotlist[slotidx], CKF_RW_SESSION|
370
	if ((rv = f->C_OpenSession(p->slotlist[slotidx], CKF_RW_SESSION|
374
	    CKF_SERIAL_SESSION, NULL, NULL, &session))
371
	    CKF_SERIAL_SESSION, NULL, NULL, &session))
375
	    != CKR_OK) {
372
	    != CKR_OK) {
376
		error("C_OpenSession failed: %lu", rv);
373
		error("C_OpenSession failed: %lu", rv);
377
		return (-1);
374
		return (-1);
378
	}
375
	}
379
	if (login_required && pin) {
376
	if (login_required) {
380
		rv = f->C_Login(session, CKU_USER,
377
		rv = f->C_Login(session, CKU_USER,
381
		    (u_char *)pin, strlen(pin));
378
		    (u_char *)pin, (pin != NULL) ? strlen(pin) : 0);
382
		if (rv != CKR_OK && rv != CKR_USER_ALREADY_LOGGED_IN) {
379
		if (rv != CKR_OK && rv != CKR_USER_ALREADY_LOGGED_IN) {
383
			error("C_Login failed: %lu", rv);
380
			error("C_Login failed: %lu", rv);
384
			if ((rv = f->C_CloseSession(session)) != CKR_OK)
381
			if ((rv = f->C_CloseSession(session)) != CKR_OK)

Return to bug 2652