authtis.c 1006 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "ssh.h"
  2. static int
  3. authtisfn(Conn *c)
  4. {
  5. int fd, n;
  6. char *chal, resp[256];
  7. Msg *m;
  8. if(!c->interactive)
  9. return -1;
  10. debug(DBG_AUTH, "try TIS\n");
  11. sendmsg(allocmsg(c, SSH_CMSG_AUTH_TIS, 0));
  12. m = recvmsg(c, -1);
  13. switch(m->type){
  14. default:
  15. badmsg(m, SSH_SMSG_AUTH_TIS_CHALLENGE);
  16. case SSH_SMSG_FAILURE:
  17. free(m);
  18. return -1;
  19. case SSH_SMSG_AUTH_TIS_CHALLENGE:
  20. break;
  21. }
  22. chal = getstring(m);
  23. free(m);
  24. if((fd = open("/dev/cons", ORDWR)) < 0)
  25. error("can't open console");
  26. fprint(fd, "TIS Authentication\n%s", chal);
  27. n = read(fd, resp, sizeof resp-1);
  28. if(n < 0)
  29. resp[0] = '\0';
  30. else
  31. resp[n] = '\0';
  32. if(resp[0] == 0 || resp[0] == '\n')
  33. return -1;
  34. m = allocmsg(c, SSH_CMSG_AUTH_TIS_RESPONSE, 4+strlen(resp));
  35. putstring(m, resp);
  36. sendmsg(m);
  37. m = recvmsg(c, -1);
  38. switch(m->type){
  39. default:
  40. badmsg(m, 0);
  41. case SSH_SMSG_SUCCESS:
  42. free(m);
  43. return 0;
  44. case SSH_SMSG_FAILURE:
  45. free(m);
  46. return -1;
  47. }
  48. }
  49. Auth authtis =
  50. {
  51. SSH_AUTH_TIS,
  52. "tis",
  53. authtisfn,
  54. };