authsrvtis.c 876 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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->type != SSH_CMSG_AUTH_TIS_RESPONSE){
  24. /*
  25. * apparently you can just give up on
  26. * this protocol and start a new one.
  27. */
  28. unrecvmsg(conn, m);
  29. return nil;
  30. }
  31. c->resp = getstring(m);
  32. c->nresp = strlen(c->resp);
  33. ai = auth_response(c);
  34. auth_freechal(c);
  35. return ai;
  36. }
  37. Authsrv authsrvtis =
  38. {
  39. SSH_AUTH_TIS,
  40. "tis",
  41. SSH_CMSG_AUTH_TIS,
  42. authsrvtisfn,
  43. };