shithub: riscv

Download patch

ref: 95d6ca9f3c05283057f1542f3af37c8741cbc11b
parent: 4410517b44fd2610abe0dcd1349bb3e6b3c5ddb8
author: cinap_lenrek <[email protected]>
date: Mon Feb 22 15:55:51 EST 2016

factotum: fix memory leak for p9any key confirmation, fix key handling for role=client

when we look up role=speakfor key and askforkeys is set, the
findkey() can return RpcNeedkey, which causes us to skip the
query for a role=client key. Instead, we now check for the
return value != RpcOk (and != RpcConfirm which we want to
handle the same for both queries).

we have to free the attribute lists when returning RpcConfirm.

--- a/sys/src/cmd/auth/factotum/p9any.c
+++ b/sys/src/cmd/auth/factotum/p9any.c
@@ -318,7 +318,7 @@
 				ret = findkey(&k, &ki, "proto=%q dom=%q role=speakfor %s",
 						p->name, dom, p->keyprompt);
 			}
-			if(ret == RpcFailure){
+			if(ret != RpcOk && ret != RpcConfirm){
 				ki.attr = anew;
 				ki.user = fss->sysuser;
 				ret = findkey(&k, &ki,
@@ -327,6 +327,8 @@
 			}
 			if(ret == RpcConfirm){
 				free(a);
+				_freeattr(anew);
+				_freeattr(anewsf);
 				return ret;
 			}
 			if(ret == RpcOk)