rlogind.c 757 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include <u.h>
  2. #include <libc.h>
  3. void getstr(int, char*, int);
  4. void
  5. main(void)
  6. {
  7. char luser[128], ruser[128], term[128], err[128];
  8. getstr(0, err, sizeof(err));
  9. getstr(0, ruser, sizeof(ruser));
  10. getstr(0, luser, sizeof(luser));
  11. getstr(0, term, sizeof(term));
  12. write(0, "", 1);
  13. if(luser[0] == '\0')
  14. strncpy(luser, ruser, sizeof luser);
  15. luser[sizeof luser-1] = '\0';
  16. syslog(0, "telnet", "rlogind %s", luser);
  17. execl("/bin/ip/telnetd", "telnetd", "-n", "-u", luser, nil);
  18. fprint(2, "can't exec con service: %r\n");
  19. exits("can't exec");
  20. }
  21. void
  22. getstr(int fd, char *str, int len)
  23. {
  24. char c;
  25. int n;
  26. while(--len > 0){
  27. n = read(fd, &c, 1);
  28. if(n < 0)
  29. return;
  30. if(n == 0)
  31. continue;
  32. *str++ = c;
  33. if(c == 0)
  34. break;
  35. }
  36. *str = '\0';
  37. }