LINUX.ORG.RU

клиент rlogin - сервер возвращает 1


0

0

Привет, пробую написать rlogin клиент

После 

  memset(buffer,0,1024);

  strcpy(buffer,"\0user\0user\0vt100/9600\0");
  if (write(sd,buffer,22)<=0){
		  perror ("error while writing to server");
		  return -1;
  }

После этого сервер возвращает код 1 (вместо 0) и 
rlogind: Permission denied

Обычный rlogin работает нормально
anonymous

А чего бы вы хотели? Посмотрите отладчиком, что копируется в буфер...

hint: strcpy закончит копирование когда?..

vnp
()
Ответ на: комментарий от anonymous

А у тебя первый символ строки, которую надо скопировать, ноль что ли?? Дык она и скопирует пустую строку. Попробуй заюзать memcpy вместо strcpy.

RomanU
()
Ответ на: комментарий от RomanU

Согласен с последним замечанием.
Но до этого я вообше 4 строки отдельно отправлял с аналогичным результатом

char zero_byte=0;
char *client_user="user";
char *server_user="user";
char *terminfo="vt100/9600";

write(sd,&zero_byte,1);
write(sd,client_user,5);
write(sd,server_user,5);
write(sd,terminfo,11);

anonymous
()
Ответ на: комментарий от anonymous

Я не понимаю. То вы копируете строку, начиная с 0, то вообще про 0 забываете. _Каждая_ из посылок должна начинаться с 0. Иначе говоря, или

write(sd,&zero_byte,1);
write(sd,client_user,5);
write(sd,&zero_byte,1);
write(sd,server_user,5);
write(sd,&zero_byte,1);
write(sd,terminfo,11);

или

char message[] = "\0user\0user\0vt100/9600";
write(sd, message, sizeof(message));

vnp
()
Ответ на: комментарий от vnp

char *server_user="user";

подразумевает что строка заканчивается \0

соответсвенно

write(sd,server_user,5); отправляет "user"+\0

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.