authsrvtis.c 928 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "ssh.h"
  2. static AuthInfo*
  3. authsrvtisfn(Conn *conn, Msg *m)
  4. {
  5. char *s;
  6. AuthInfo *ai;
  7. Chalstate *c;
  8. free(m);
  9. if((c = auth_challenge("proto=p9cr user=%q role=server", conn->user)) == nil){
  10. sshlog("auth_challenge failed for %s", conn->user);
  11. return nil;
  12. }
  13. s = smprint("Challenge: %s\nResponse: ", c->chal);
  14. if(s == nil){
  15. auth_freechal(c);
  16. return nil;
  17. }
  18. m = allocmsg(conn, SSH_SMSG_AUTH_TIS_CHALLENGE, 4+strlen(s));
  19. putstring(m, s);
  20. sendmsg(m);
  21. free(s);
  22. m = recvmsg(conn, 0);
  23. if(m == nil){
  24. auth_freechal(c);
  25. return nil;
  26. }
  27. if(m->type != SSH_CMSG_AUTH_TIS_RESPONSE){
  28. /*
  29. * apparently you can just give up on
  30. * this protocol and start a new one.
  31. */
  32. unrecvmsg(conn, m);
  33. return nil;
  34. }
  35. c->resp = getstring(m);
  36. c->nresp = strlen(c->resp);
  37. ai = auth_response(c);
  38. auth_freechal(c);
  39. return ai;
  40. }
  41. Authsrv authsrvtis =
  42. {
  43. SSH_AUTH_TIS,
  44. "tis",
  45. SSH_CMSG_AUTH_TIS,
  46. authsrvtisfn,
  47. };