Lines Matching defs:kbdintctxt
112 KbdintAuthctxt *kbdintctxt;
121 kbdintctxt = xcalloc(1, sizeof(KbdintAuthctxt));
130 if ((kbdintctxt->devices = sshbuf_dup_string(b)) == NULL)
134 kbdintctxt->devices = xstrdup(devs);
136 debug("kbdint_alloc: devices '%s'", kbdintctxt->devices);
137 kbdintctxt->ctxt = NULL;
138 kbdintctxt->device = NULL;
139 kbdintctxt->nreq = 0;
141 return kbdintctxt;
144 kbdint_reset_device(KbdintAuthctxt *kbdintctxt)
146 if (kbdintctxt->ctxt) {
147 kbdintctxt->device->free_ctx(kbdintctxt->ctxt);
148 kbdintctxt->ctxt = NULL;
150 kbdintctxt->device = NULL;
153 kbdint_free(KbdintAuthctxt *kbdintctxt)
155 if (kbdintctxt->device)
156 kbdint_reset_device(kbdintctxt);
157 free(kbdintctxt->devices);
158 freezero(kbdintctxt, sizeof(*kbdintctxt));
162 kbdint_next_device(Authctxt *authctxt, KbdintAuthctxt *kbdintctxt)
168 if (kbdintctxt->device)
169 kbdint_reset_device(kbdintctxt);
171 len = kbdintctxt->devices ?
172 strcspn(kbdintctxt->devices, ",") : 0;
177 if (i >= sizeof(kbdintctxt->devices_done) * 8 ||
180 if ((kbdintctxt->devices_done & (1 << i)) != 0 ||
185 memcmp(kbdintctxt->devices, devices[i]->name,
187 kbdintctxt->device = devices[i];
188 kbdintctxt->devices_done |= 1 << i;
191 t = kbdintctxt->devices;
192 kbdintctxt->devices = t[len] ? xstrdup(t+len+1) : NULL;
194 debug2("kbdint_next_device: devices %s", kbdintctxt->devices ?
195 kbdintctxt->devices : "<empty>");
196 } while (kbdintctxt->devices && !kbdintctxt->device);
198 return kbdintctxt->device ? 1 : 0;
215 if (authctxt->kbdintctxt == NULL)
216 authctxt->kbdintctxt = kbdint_alloc(devs);
227 if (authctxt->kbdintctxt != NULL) {
228 kbdint_free(authctxt->kbdintctxt);
229 authctxt->kbdintctxt = NULL;
238 KbdintAuthctxt *kbdintctxt = authctxt->kbdintctxt;
241 kbdintctxt->devices ? kbdintctxt->devices : "<empty>");
243 if (kbdint_next_device(authctxt, kbdintctxt) == 0) {
248 kbdintctxt->device->name);
250 if ((kbdintctxt->ctxt = kbdintctxt->device->init_ctx(authctxt)) == NULL) {
269 KbdintAuthctxt *kbdintctxt;
274 kbdintctxt = authctxt->kbdintctxt;
275 if (kbdintctxt->device->query(kbdintctxt->ctxt,
276 &name, &instr, &kbdintctxt->nreq, &prompts, &echo_on))
283 (r = sshpkt_put_u32(ssh, kbdintctxt->nreq)) != 0)
285 for (i = 0; i < kbdintctxt->nreq; i++) {
294 for (i = 0; i < kbdintctxt->nreq; i++)
307 KbdintAuthctxt *kbdintctxt;
316 kbdintctxt = authctxt->kbdintctxt;
317 if (kbdintctxt == NULL || kbdintctxt->ctxt == NULL)
318 fatal_f("no kbdintctxt");
319 if (kbdintctxt->device == NULL)
325 if (nresp != kbdintctxt->nreq)
339 res = kbdintctxt->device->respond(kbdintctxt->ctxt, nresp, response);
361 devicename = kbdintctxt->device->name;