Помогите с компиляцией.

Автор: gihr Дата: 17.09.2007 21:59 Вот какая проблема: провайдер дает доступ в интернет только при наличии программы авторизации. В WINDOWS XP эта программа работала нормально, без проблем и глюков. А вот сейчас, когда я установил ASP Linux 11.2, у меня возникла проблема. Провайдер не дает готовой программы авторизации, а предлагает вот что:

Информация для пользователей UNIX-подобных систем.
Скачивайте программу авторизации по адресу [stat.hnt].
# fetch [stat.hnt]
Распаковываем
# tar xzf login.hnt.tar.gz
Компилируем
# cd login.hnt
# ./_compile.sh
Запускаем
# ./login.hnt <пароль>
Для того чтобы программа ушла в background и не занимала терминальное окно, то запускаем её вот так:
# ./login.hnt <пароль> &
Чтобы программа стартовала при загрузке Операционной системы, в файл автозагрузки добавляем следующую строчку:
<путь к программе>/login.hnt <пароль> &

Вроде бы все понятно, на первый взгляд, что и как делать - и архив скачался, и распаковался нормально. А на второй - ничего не ясно. Потому что, когда пытаюсь запустить файл _compile.sh в терминале, то выдается сообщение, что "файл не найден". Не понятно - какой файл не найден. И как быть/поступать дальше? Может быть, надо доустановить какие-то пакеты для программирования? Я в этом - ни бум-бум...
Кто разбирается - помогите, пожалуйста.
Re: Помогите с компиляцией. 17.09.2007 23:01peter_ir 1-й раз слышу, чтобы для авторизации у провайдера требовалась какая-то программа. Файлы,
необходимые для PAP или CHAT авторизации, находятся в /etc/ppp. Если же ни то, ни ни
другое не используется, а для входа надо ввести login и password, то их надо задать в
файле, например, в /etc/ppp/chat-call, а pppd запускать, передавая ему имя этого файла
вместе с другими опциями в файле с имененм, например, /etc/ppp/peers/ppp-call. Я
использую chat, а не wvdial, т.е. такой программой является chat.
как запускать pppd, рассказано во многих книгах, например,
"Linux", серия "В подлиннике", BHV, Стахнов.
Можно не задавать пароль в этом файле, а передавать как параметр
из скрипта, запускающего pppd и каждый раз вводить его вручную.
Re: Помогите с компиляцией. 18.09.2007 03:15Bircoph > 1-й раз слышу, чтобы для авторизации у провайдера
> требовалась какая-то программа. Файлы, необходимые для PAP
> или CHAT авторизации, находятся в /etc/ppp.

В нашем мире хватает велосипедистов. Есть идиоты, которые НЕ
используют vpn и т.п. стандартные механизмы, а используют
собственные системы контроля доступа и учёта трафика, на
своих собственных ни с чем не совместимых протоколах. Один
из примеров: inetaccess.

Практика показывает, что обычно такие поделки настолько
кривые, что только недостаточно любознательный пользователь
не сможет найти, как их обойти.

Автору совет только один: смотрите на внутренности
_compile.sh и по ним выясняйте где ошибка.
Re: Помогите с компиляцией. 18.09.2007 07:58gihr Н-да-с-с...
Я себе представил сразу такую картину: вечер, загородное шоссе, на обочине стоит машина ГАЗ-21 со спущенным колесом, в ней женщина преклонных лет и вокруг ни души. Она пытается остановить одну проезжающую машину, другую, третью - без толку. Наконец останавливается уставший после напряженного рабочего дня работник автосервиса. Он смотрит на ситуацию и говорит, не выходя из машины: "Мы такими старыми отечественными не занимаемся, только иномарками." Уезжает, даже не выйдя из машины.
Через некоторое время останавливается другой. Он смотрит и говорит: "Да тут работы на пару минут, плевое дело! Мадам, берите баллонный ключ, домкрат и все будет тип-топ." Тоже уезжает...
Угадайте с трех раз: о чем после этого подумала старушка, которая толком и со швейной машинкой управляться не может?
Ладно, спецы, спасибо хоть за то, что сразу не послали куда подальше...
Re: Помогите с компиляцией. 18.09.2007 09:16peter_ir gihr писал(а):

> Ладно, спецы, спасибо хоть за то, что сразу не послали куда
> подальше...

Ты же не выедешь на дорогу, прежде чем научишься управлять и получишь права?
Также и для работы с операционной системой надо предварительно получить о
ней хотя бы базовые знания, раз ты берешься ее настраиваить.
У меня с настройкой Интернет-соединения была только одна проблема - я не
сразу понял, что провайдер использует PAP-авторизацию, потом заметил это
в собщениях.
Что касается компиляции - команду на запуск исполнимого
файла в текущем каталоге надо вводить именно так, как в
инструкции по установке:
/.<имя_файла>

Петр.
Re: Помогите с компиляцией. 18.09.2007 09:54BigAndy первое, что я заметил, это разница нотаций.
Вы задали _compile_sh
А в инструкции (и по смыслу)./_compile_sh
Да, и посмотрите, чтобы под рутом и файл был бы выполнимым. Иначе: sh ./_compile_sh
Re: Помогите с компиляцией. 18.09.2007 13:55gihr peter_ir писал(а):

>
> Ты же не выедешь на дорогу, прежде чем научишься управлять и
> получишь права?
> Также и для работы с операционной системой надо предварительно
> получить о
> ней хотя бы базовые знания, раз ты берешься ее настраиваить.
Да я вовсе не берусь ее настраивать, потому что не понимаю в этом ничего. Мне надо просто получить доступ в интернет, и всё. Потому и попросил реальной помощи, а не советов в использованиии программы для компиляции. Я даже не представляю, что и как там происходит, а вы мне про пути, нотации и ключи запуска толкуете. В старом добром ДОСе я хоть как-то, с грехом пополам, разбирался. И то, через пень-колоду, половины не понимая, что делаю. А тут, в этом Линуксе, такое ощущение, что всё вообще - через одно место сделано. Ничего не понятно, кроме как устройство файловой системы.
Я потому привел этот пример с машиной, что он мне ближе всего: я профессиональный моторист - жестянщик - электрик. А машину вожу с 1977 года, когда в армию забирали - тогда права и получил. И вовсе не надо уметь регулировать клапана и зажигание на слух или по приборам, чтобы рулить, переключать передачи и ориентироваться в городе.
Мне потому неприятно такое ваше отношение к новичку, который ни бум-бум в этих вопросах, что сам никогда не проезжал мимо бедствующих на дороге, а тем более - не вдавался в рассуждения и советы. Просто помогал и люди ехали дальше без проблем. Как сказал великий русский баснописец Иван Андреевия Крылов, "...беда, коль пироги начнет печи сапожник, а сапоги тачать - пирожник." Не стоит учить того, кто к этому не пригоден. Проще взять и сделать самому - быстрее будет и надежнее, чем потом разгребать его ошибки.
Был у меня один такой знакомый программист - болта с гайкой свинтить не умел толком. Я ему всю машину перетряхнул до предпоследненго винтика (последний был потерян до него), ни разу не попрекнул за неумение и не учил, как рихтовать его, завязанные в узел, крылья и двери, после аварии. А он мне на мой вопрос, какой программой записать аудио диск для плеера, ответил: "ну, есть разные программы.., поищи в интернете." Спасибо ему за это огромное и низкий поклон! Теперь у него нет машины - следить за ней стало некому.
Вы мне ничем, конечно, не обязаны, только я-то надеялся на простое доброе человеческое отношение. Поздно мне уже учиться, почти уже полтинник и вся голова белая.
Простите, если чем обидел...
Re: Помогите с компиляцией. 18.09.2007 14:14lg Ну вам вроде почти сразу сказали, что вы скорее всего ошиблись при наборе команды
Нужно
---
./_compile.sh
---
а не
---
_compile.sh
---
Вообще то лучше не описывать происходящее своими словами, как вы сделали в первом посте, а копировать все из терминала

PS: у меня есть подозрение, что дальше потребуется как минимум gcc (посмотрите, установлен ли он)
Re: Помогите с компиляцией. 18.09.2007 14:16nektofil Да ничем не обидел. Просто для тебя пример.
Если тебе по телефону сказать приблизительно
следующее: "я тут взял машину. Красную. И у
нее что-то дырынчит. Что делать?" Правильный
ответ -- ехать и смотреть. Улыбка

Но это все лирика. Напиши как хоть тебе этот
пресловутый __compile.sh **дословно** ругается?
Re: Помогите с компиляцией. 18.09.2007 14:30gihr lg писал(а):
> ./_compile.sh
> ---
> а не
> ---
> _compile.sh
> ---
> PS: у меня есть подозрение, что дальше потребуется как минимум
> gcc (посмотрите, установлен ли он)
Да я и так и сяк пробовал. Кто бы еще объяснил, что такое gcc, для чего он нужен, с чем его едят и где он должен быть установлен. А заодно - что значит "установлен". Просто лежит в папке с другими программами, или как-то ассоциирован с файлами конкретного типа, или как-то еще задействован?! ;-)

А ругается он так: file not found. И больше ничего! Как партизан на допросе. Какой файл - непонятно! Запускаю в терминале, из каталога, в котором он находится. Он у меня лежит в: [Andy@localhost]$ /tmp/hnt/login.hnt/_compile.sh

Что значит "под рутом"? Как админ, что ли, с полными правами или из корневого каталога? Я этими терминами не оперирую, потому и не понимаю, что требуется.

Да и вообще, неужели, чтобы попробовать суп, надо в нем вариться?
Может кто нибудь, наконец, скачать этот архив по указанной мной ссылке и посмотреть, что там получается? Наконец, на мыло мне скинуть готовый файл - неужели так трудно? Я же говорю, что меня уже поздно переучивать.., себе дороже станет по времени.
Re: Помогите с компиляцией. 18.09.2007 14:51nektofil Дык с удовольствием, но сервер **stat.hnt** --
это сервер Вашей внутренней локальной сети.
И с "внешней" стороны он не доступен. Грустный
Так что прийдется играть в секс по телефону. Улыбка

Наличие установленного компилятора можно проверить
командой **rpm -q gcc**. Если скажет, что такого нет,
то прийдется доставлять с установочных дисков.

Но об это по-позже. Улыбка
Re: Помогите с компиляцией. 18.09.2007 15:14gihr А я об этом как-то не подумал...
А может есть возможность как-то передать файл-архив?
Я вот сделал "снимок" с окна терминала.

> [Andy@host Desktop]$ ls
> login.hnt.tar.gz
> [Andy@host Desktop]$ tar xzf login.hnt.tar.gz
> [Andy@host Desktop]$ ls
> login.hnt login.hnt.tar.gz
> [Andy@host Desktop]$ cd login.hnt
> [Andy@host login.hnt]$ ls
> _compile.sh login.hnt.c login.hnt.h md5.c md5.h
> [Andy@host login.hnt]$ ./_compile.sh
> ./_compile.sh: line 3: gcc: command not found

Только на этот раз я его на рабочий стол поместил.
Может это хоть что-то прояснит...
Re: Помогите с компиляцией. 18.09.2007 15:42gihr Я, конечно, дико извиняюсь, сам не ожидал от себя такого нахальства... Но это, поверьте, уже от отчаяния!
В каталоге распакованного архива находятся пять файлов:
_compile.sh
login.hnt.c
login.hnt.h
md5.c
md5.h


Вот содержание файла _compile.sh:

#!/bin/sh

gcc -o login.hnt login.hnt.c md5.c



Вот содержание файла login.hnt.c:

#include <sys/param.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <signal.h>

#include "login.hnt.h"
#include "md5.h"

static void md5(void *p_login_number, char *source, char *result);
static void init_shutdown(int sig);
static int running;

int main(int argc, char **argv)
{
int i;
int udp_sock = -1;
struct sockaddr_in server;
struct hostent *serverent = NULL;
char packet_buffer[64];
u_long *pl_login_number;

if( argc != 2 ){
printf("Usage: %s <password> ", argv[0]);
exit(-1);
}

running=1;

siginterrupt(SIGTERM, 1);
siginterrupt(SIGHUP, 1);
siginterrupt(SIGINT, 1);
signal (SIGTERM, init_shutdown);
signal (SIGHUP, init_shutdown);
signal (SIGINT, init_shutdown);

bzero(packet_buffer, sizeof(packet_buffer));
bzero(&server, sizeof(struct sockaddr_in));

server.sin_family = AF_INET;
if ( !inet_aton(SERVER_LISTEN, &server.sin_addr) ) {
if ( (serverent = gethostbyname( SERVER_LISTEN )) == NULL){
printf("Can't assign server address ";-);
return;
}
else server.sin_addr = *(struct in_addr *)serverent->h_addr;
}
server.sin_port = htons( LOGIN_PORT );

packet_buffer[0] = 1; //protocol version
packet_buffer[1] = LOGIN; //login action
pl_login_number = (u_long *)&packet_buffer[2];
pl_login_number[0] = htonl( (u_long)time(NULL) );
md5((void *)pl_login_number, argv[1], &packet_buffer[6]);

if ( (udp_sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1){
perror ("Socket erorr";-);
return;
}
for (i = 0; i < 3; i++) {
if ( sendto(udp_sock, (void *)packet_buffer, 22, 0,
(struct sockaddr *)&server, sizeof(struct sockaddr_in)) != 22){
perror("Sendto error";-);
return;
}
}
close(udp_sock);
printf("login.hnt started ";-);
sleep(60);


while(running){
pl_login_number = (u_long *)&packet_buffer[2];
pl_login_number[0] = htonl( (u_long)time(NULL) );
md5((void *)pl_login_number, argv[1], &packet_buffer[6]);
if ( (udp_sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
perror ("Socket erorr";-);
if ( sendto(udp_sock, (void *)packet_buffer, 22, 0,
(struct sockaddr *)&server, sizeof(struct sockaddr_in)) != 22)
perror("Sendto error";-);
close(udp_sock);
if (running != 0) sleep(60);
}

packet_buffer[1] = LOGOUT; //login action
pl_login_number = (u_long *)&packet_buffer[2];
pl_login_number[0] = htonl( (u_long)time(NULL) );
md5((void *)pl_login_number, argv[1], &packet_buffer[6]);

if ( (udp_sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
perror ("Socket erorr";-);
for (i = 0; i < 3; i++) {
if ( sendto(udp_sock, (void *)packet_buffer, 22, 0,
(struct sockaddr *)&server, sizeof(struct sockaddr_in)) != 22)
perror("Sendto error";-);
}

close(udp_sock);

}


static void md5(void *p_login_number, char *source, char *result)
{
md5_state_t cur_md5;
md5_init(&cur_md5);
md5_append(&cur_md5, (const unsigned char*)p_login_number, 4);
md5_append(&cur_md5, (const unsigned char*)source, strlen(source));
md5_finish(&cur_md5, result);
}

static void init_shutdown(int sig)
{
running = 0;
}



Вот содержание файла login.hnt.h:
/*login actions*/
#define LOGIN 1
#define LOGOUT 2

#define SERVER_LISTEN "login.hnt"
#define LOGIN_PORT 1763




Вот содержание файла md5.c:
/*
Copyright (C) 1999, 2000, 2002 Aladdin Enterprises. All rights reserved.

This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.

Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.

L. Peter Deutsch
ghost@aladdin.com

*/
/* $Id: md5.c,v 1.1 2002/05/21 08:46:55 chrisjones Exp $ */
/*
Independent implementation of MD5 (RFC 1321).

This code implements the MD5 Algorithm defined in RFC 1321, whose
text is available at
[www.ietf.org]
The code is derived from the text of the RFC, including the test suite
(section A.5) but excluding the rest of Appendix A. It does not include
any code or documentation that is identified in the RFC as being
copyrighted.

The original and principal author of md5.c is L. Peter Deutsch
<ghost@aladdin.com>. Other authors are noted in the change history
that follows (in reverse chronological order):

2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order
either statically or dynamically; added missing #include <string.h>
in library.
2002-03-11 lpd Corrected argument list for main(), and added int return
type, in test program and T value program.
2002-02-21 lpd Added missing #include <stdio.h> in test program.
2000-07-03 lpd Patched to eliminate warnings about "constant is
unsigned in ANSI C, signed in traditional"; made test program
self-checking.
1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
1999-05-03 lpd Original version.
*/

#include "md5.h"

#undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */
#ifdef ARCH_IS_BIG_ENDIAN
# define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1)
#else
# define BYTE_ORDER 0
#endif

#define T_MASK ((md5_word_t)~0)
#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)
#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)
#define T3 0x242070db
#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111)
#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050)
#define T6 0x4787c62a
#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec)
#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe)
#define T9 0x698098d8
#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850)
#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e)
#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841)
#define T13 0x6b901122
#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c)
#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71)
#define T16 0x49b40821
#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d)
#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf)
#define T19 0x265e5a51
#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855)
#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2)
#define T22 0x02441453
#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e)
#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437)
#define T25 0x21e1cde6
#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829)
#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278)
#define T28 0x455a14ed
#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa)
#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07)
#define T31 0x676f02d9
#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375)
#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd)
#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e)
#define T35 0x6d9d6122
#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3)
#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb)
#define T38 0x4bdecfa9
#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f)
#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f)
#define T41 0x289b7ec6
#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805)
#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a)
#define T44 0x04881d05
#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6)
#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a)
#define T47 0x1fa27cf8
#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a)
#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb)
#define T50 0x432aff97
#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58)
#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6)
#define T53 0x655b59c3
#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d)
#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82)
#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e)
#define T57 0x6fa87e4f
#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f)
#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb)
#define T60 0x4e0811a1
#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d)
#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca)
#define T63 0x2ad7d2bb
#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)


static void
md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
{
md5_word_t
a = pms->abcd[0], b = pms->abcd[1],
c = pms->abcd[2], d = pms->abcd[3];
md5_word_t t;
#if BYTE_ORDER > 0
/* Define storage only for big-endian CPUs. */
md5_word_t X[16];
#else
/* Define storage for little-endian or both types of CPUs. */
md5_word_t xbuf[16];
const md5_word_t *X;
#endif

{
#if BYTE_ORDER == 0
/*
* Determine dynamically whether this is a big-endian or
* little-endian machine, since we can use a more efficient
* algorithm on the latter.
*/
static const int w = 1;

if (*((const md5_byte_t *)&w)) /* dynamic little-endian */
#endif
#if BYTE_ORDER <= 0 /* little-endian */
{
/*
* On little-endian machines, we can process properly aligned
* data without copying it.
*/
if (!((data - (const md5_byte_t *)0) & 3)) {
/* data are properly aligned */
X = (const md5_word_t *)data;
} else {
/* not aligned */
memcpy(xbuf, data, 64);
X = xbuf;
}
}
#endif
#if BYTE_ORDER == 0
else /* dynamic big-endian */
#endif
#if BYTE_ORDER >= 0 /* big-endian */
{
/*
* On big-endian machines, we must arrange the bytes in the
* right order.
*/
const md5_byte_t *xp = data;
int i;

# if BYTE_ORDER == 0
X = xbuf; /* (dynamic only) */
# else
# define xbuf X /* (static only) */
# endif
for (i = 0; i < 16; ++i, xp += 4)
xbuf = xp[0] + (xp[1] << Поражён + (xp[2] << 16) + (xp[3] << 24);
}
#endif
}

#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))

/* Round 1. */
/* Let [abcd k s i] denote the operation
a = b + ((a + F(b,c,d) + X[k] + T) <<< s). */
#define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
#define SET(a, b, c, d, k, s, Ti)\
t = a + F(b,c,d) + X[k] + Ti;\
a = ROTATE_LEFT(t, s) + b
/* Do the following 16 operations. */
SET(a, b, c, d, 0, 7, T1);
SET(d, a, b, c, 1, 12, T2);
SET(c, d, a, b, 2, 17, T3);
SET(b, c, d, a, 3, 22, T4);
SET(a, b, c, d, 4, 7, T5);
SET(d, a, b, c, 5, 12, T6);
SET(c, d, a, b, 6, 17, T7);
SET(b, c, d, a, 7, 22, T8);
SET(a, b, c, d, 8, 7, T9);
SET(d, a, b, c, 9, 12, T10);
SET(c, d, a, b, 10, 17, T11);
SET(b, c, d, a, 11, 22, T12);
SET(a, b, c, d, 12, 7, T13);
SET(d, a, b, c, 13, 12, T14);
SET(c, d, a, b, 14, 17, T15);
SET(b, c, d, a, 15, 22, T16);
#undef SET

/* Round 2. */
/* Let [abcd k s i] denote the operation
a = b + ((a + G(b,c,d) + X[k] + T) <<< s). */
#define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
#define SET(a, b, c, d, k, s, Ti)\
t = a + G(b,c,d) + X[k] + Ti;\
a = ROTATE_LEFT(t, s) + b
/* Do the following 16 operations. */
SET(a, b, c, d, 1, 5, T17);
SET(d, a, b, c, 6, 9, T18);
SET(c, d, a, b, 11, 14, T19);
SET(b, c, d, a, 0, 20, T20);
SET(a, b, c, d, 5, 5, T21);
SET(d, a, b, c, 10, 9, T22);
SET(c, d, a, b, 15, 14, T23);
SET(b, c, d, a, 4, 20, T24);
SET(a, b, c, d, 9, 5, T25);
SET(d, a, b, c, 14, 9, T26);
SET(c, d, a, b, 3, 14, T27);
SET(b, c, d, a, 8, 20, T28);
SET(a, b, c, d, 13, 5, T29);
SET(d, a, b, c, 2, 9, T30);
SET(c, d, a, b, 7, 14, T31);
SET(b, c, d, a, 12, 20, T32);
#undef SET

/* Round 3. */
/* Let [abcd k s t] denote the operation
a = b + ((a + H(b,c,d) + X[k] + T) <<< s). */
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define SET(a, b, c, d, k, s, Ti)\
t = a + H(b,c,d) + X[k] + Ti;\
a = ROTATE_LEFT(t, s) + b
/* Do the following 16 operations. */
SET(a, b, c, d, 5, 4, T33);
SET(d, a, b, c, 8, 11, T34);
SET(c, d, a, b, 11, 16, T35);
SET(b, c, d, a, 14, 23, T36);
SET(a, b, c, d, 1, 4, T37);
SET(d, a, b, c, 4, 11, T38);
SET(c, d, a, b, 7, 16, T39);
SET(b, c, d, a, 10, 23, T40);
SET(a, b, c, d, 13, 4, T41);
SET(d, a, b, c, 0, 11, T42);
SET(c, d, a, b, 3, 16, T43);
SET(b, c, d, a, 6, 23, T44);
SET(a, b, c, d, 9, 4, T45);
SET(d, a, b, c, 12, 11, T46);
SET(c, d, a, b, 15, 16, T47);
SET(b, c, d, a, 2, 23, T48);
#undef SET

/* Round 4. */
/* Let [abcd k s t] denote the operation
a = b + ((a + I(b,c,d) + X[k] + T) <<< s). */
#define I(x, y, z) ((y) ^ ((x) | ~(z)))
#define SET(a, b, c, d, k, s, Ti)\
t = a + I(b,c,d) + X[k] + Ti;\
a = ROTATE_LEFT(t, s) + b
/* Do the following 16 operations. */
SET(a, b, c, d, 0, 6, T49);
SET(d, a, b, c, 7, 10, T50);
SET(c, d, a, b, 14, 15, T51);
SET(b, c, d, a, 5, 21, T52);
SET(a, b, c, d, 12, 6, T53);
SET(d, a, b, c, 3, 10, T54);
SET(c, d, a, b, 10, 15, T55);
SET(b, c, d, a, 1, 21, T56);
SET(a, b, c, d, 8, 6, T57);
SET(d, a, b, c, 15, 10, T58);
SET(c, d, a, b, 6, 15, T59);
SET(b, c, d, a, 13, 21, T60);
SET(a, b, c, d, 4, 6, T61);
SET(d, a, b, c, 11, 10, T62);
SET(c, d, a, b, 2, 15, T63);
SET(b, c, d, a, 9, 21, T64);
#undef SET

/* Then perform the following additions. (That is increment each
of the four registers by the value it had before this block
was started.) */
pms->abcd[0] += a;
pms->abcd[1] += b;
pms->abcd[2] += c;
pms->abcd[3] += d;
}

void
md5_init(md5_state_t *pms)
{
pms->count[0] = pms->count[1] = 0;
pms->abcd[0] = 0x67452301;
pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476;
pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301;
pms->abcd[3] = 0x10325476;
}

void
md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes)
{
const md5_byte_t *p = data;
int left = nbytes;
int offset = (pms->count[0] >> 3) & 63;
md5_word_t nbits = (md5_word_t)(nbytes << 3);

if (nbytes <= 0)
return;

/* Update the message length. */
pms->count[1] += nbytes >> 29;
pms->count[0] += nbits;
if (pms->count[0] < nbits)
pms->count[1]++;

/* Process an initial partial block. */
if (offset) {
int copy = (offset + nbytes > 64 ? 64 - offset : nbytes);

memcpy(pms->buf + offset, p, copy);
if (offset + copy < 64)
return;
p += copy;
left -= copy;
md5_process(pms, pms->buf);
}

/* Process full blocks. */
for (; left >= 64; p += 64, left -= 64)
md5_process(pms, p);

/* Process a final partial block. */
if (left)
memcpy(pms->buf, p, left);
}

void
md5_finish(md5_state_t *pms, md5_byte_t digest[16])
{
static const md5_byte_t pad[64] = {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
md5_byte_t data[8];
int i;

/* Save the length before padding. */
for (i = 0; i < 8; ++i)
data = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3));
/* Pad to 56 bytes mod 64. */
md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
/* Append the length. */
md5_append(pms, data, 8);
for (i = 0; i < 16; ++i)
digest = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3));
}



Вот содержание файла md5.h:
/*
Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved.

This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.

Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.

L. Peter Deutsch
ghost@aladdin.com

*/
/* $Id: md5.h,v 1.1 2002/05/21 08:46:55 chrisjones Exp $ */
/*
Independent implementation of MD5 (RFC 1321).

This code implements the MD5 Algorithm defined in RFC 1321, whose
text is available at
[www.ietf.org]
The code is derived from the text of the RFC, including the test suite
(section A.5) but excluding the rest of Appendix A. It does not include
any code or documentation that is identified in the RFC as being
copyrighted.

The original and principal author of md5.h is L. Peter Deutsch
<ghost@aladdin.com>. Other authors are noted in the change history
that follows (in reverse chronological order):

2002-04-13 lpd Removed support for non-ANSI compilers; removed
references to Ghostscript; clarified derivation from RFC 1321;
now handles byte order either statically or dynamically.
1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
added conditionalization for C++ compilation from Martin
Purschke <purschke@bnl.gov>.
1999-05-03 lpd Original version.
*/

#ifndef md5_INCLUDED
# define md5_INCLUDED

/*
* This package supports both compile-time and run-time determination of CPU
* byte order. If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be
* compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is
* defined as non-zero, the code will be compiled to run only on big-endian
* CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to
* run on either big- or little-endian CPUs, but will run slightly less
* efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined.
*/

typedef unsigned char md5_byte_t; /* 8-bit byte */
typedef unsigned int md5_word_t; /* 32-bit word */

/* Define the state of the MD5 Algorithm. */
typedef struct md5_state_s {
md5_word_t count[2]; /* message length in bits, lsw first */
md5_word_t abcd[4]; /* digest buffer */
md5_byte_t buf[64]; /* accumulate block */
} md5_state_t;

#ifdef __cplusplus
extern "C"
{
#endif

/* Initialize the algorithm. */
void md5_init(md5_state_t *pms);

/* Append a string to the message. */
void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);

/* Finish the message and return the digest. */
void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);

#ifdef __cplusplus
} /* end extern "C" */
#endif

#endif /* md5_INCLUDED */

Еще раз извиняюсь... ;-)
Re: Помогите с компиляцией. 18.09.2007 16:08nektofil Отослал почтой.
Re: Помогите с компиляцией. 18.09.2007 16:57gihr nektofil писал(а):

> Отослал почтой.

Спасибо, получил. Поместил на рабочий стол.
Попытался запустить на исполнение. Фиг вам! Тогда - в терминале. Тоже самое. Хоть с паролем, хоть без пароля - всякий раз выдает вот такое:

bash: ./login.hnt: Отказано в доступе

Что не так делаю? Может быть нужны права администратора? Тогда как мне заходить в систему? Пробовал при загрузке под паролем админа - не пускает, потому как имя не назначено при инсталляции, только пароль. А как еще можно войти с правами админа?

Я уже заколебался перезагружать машину: то в ХР - для выхода в И-нет, то в АСП - для проб и ошибок. Голова заболела. Схожу ка я на улицу, проветрюсь часок...

Отправил архив по мылу...
Re: Помогите с компиляцией. 18.09.2007 17:08lg >./login.hnt: Отказано в доступе
---
chmod a+x login.hnt
---
Re: Помогите с компиляцией. 18.09.2007 17:42nektofil Рутовых прав этой штуке не надо. Можно запускать
и от себя. Пароль обязателен. И действительно для
того, чтобы оно запустилось нужно поставить флаг
исполняемости на эту программу вышеприведенной
командой **chmod a+x login.hnt**

Если ты делаешь таки линку на рабочий стол,
то в поле "команда" добавишь через пробел свой
интернет-пароль и проставь флажок "выполнять в
терминале". При закрытии этого терминального
окна произойдет отключение тебя от интернета.
Правда из-за того, что писали ЭТО впопыхах,
то произойдет отключение в течении минуты. Улыбка
Re: Помогите с компиляцией. 18.09.2007 21:09gihr Пробовал и так, и эдак - всё впустую.

[Andy@host login.hnt]$ chmod a+x login.hnt ********
chmod: невозможно получить доступ к `********': Нет такого файла или каталога

Вместо звездочек, естественно, были символы пароля.
Потом, разозлившись на себя за бестолковость и систему за необычность, зашел-таки под логином root и ввел пароль, который при инсталляции вводил.
Правда, мне это не помогло и скомпилированная программа в таком виде [chmod a+x login.hnt ********] не запускалась, хоть ты тресни...
Тогда я ее попробовал запустить в том виде, в каком предлагал провайдер, то есть просто [./login.hnt ********] - пошла, родимая.., сообщение было такое: login.hnt started. Ну, и вот - пишу это сообщение под АСП_Линукс 11.2.

Огромная благодарность всем, кто принял участие и оказал посильную помощь!

Правда, надо еще проверить с ключом теневого исполнения, а то сейчас окно терминала просто свернуто. Ну, и еще проверить надо, как под простым пользователем она пойдет. Или - не пойдет. Кстати, а как ее в автозагрузку пихнуть. В какой файл и что именно надо прописать?

Добавление: под обычным пользователем тоже работает, только с ключом [&] в "тень" не уходит, а при закрытии терминала соединение отрубается сразу. Что бы сделать-то?
Re: Помогите с компиляцией. 18.09.2007 21:49peter_ir Надо было ввести команду именно так, как советовал nektofil:
chmod a+x login.hnt
а пароль указывать в ярлыке, в поле "Команда".
Скомпилированную программу можно поместить в /ust/local/bin, это может сдеалть только
root, тогда для её вызова достаточно будет набрать просто её имя, с паролем как
параметром. Если она не будет работать от пользователя, надо сделать её владельцем root'а
и сделать её suid'ной, например, командой
chmod 4755 <имя_программы>.
У меня pppd suid'ный, хотя говорят, что это нехорошо.
Если эта программ должна работать до окончания сеанса, так просто не надо закрывать
терминал.
В автозагрузку: как root поместить её вызов в /etc/rc.d/rc.local или в
/etc/rc.d/rc.local.local.
И всё-такиЭ почитать О Linux книгу потолще, тогда и вопросов будет меньше.
Re: Помогите с компиляцией. 18.09.2007 22:41gihr peter_ir писал(а):

> Надо было ввести команду именно так, как советовал nektofil:
> chmod a+x login.hnt
> а пароль указывать в ярлыке, в поле "Команда".
> Скомпилированную программу можно поместить в /ust/local/bin,
> это может сдеалть только
> root, тогда для её вызова достаточно будет набрать просто её
> имя, с паролем как
> параметром. Если она не будет работать от пользователя, надо
> сделать её владельцем root'а
> и сделать её suid'ной, например, командой
> chmod 4755 <имя_программы>.
> У меня pppd suid'ный, хотя говорят, что это нехорошо.
> Если эта программ должна работать до окончания сеанса, так
> просто не надо закрывать
> терминал.
> В автозагрузку: как root поместить её вызов в
> /etc/rc.d/rc.local или в
> /etc/rc.d/rc.local.local.
> И всё-такиЭ почитать О Linux книгу потолще, тогда и вопросов
> будет меньше.
>
> Пётр.

Ну, это для меня, пока что - темный лес!
Редактировать исполняемый файл "rc.local", запихивая в него функцию вызова другого исполняемого файла.., к тому же, как выяснилось, не имея в системе компилятора?! Я его при инсталляции не включил в писок программ. А кстати, как его, да и другие программы, установить с диска, не переустанавливая систему заново? А то система все норовит с сервера дополнения скачивать. Это очень долго...
Довольно пока с меня того, что справляюсь кое как с окном терминала - по аналогии с командной строкой DOS-а. А хорошо было бы иметь возможность создания пакетного файла, как в DOS-e...
Книги пока нету, вообще никакой. Только некоторые советы по первым шагам, и то - из МИНИКС-2. Я-то думал, что задача будет одноразовая - установил систему и пользуйся на здоровье. Ан - нет, не тут-то было... Ни тебе реестра, ни файлов инициализации. Даже не понятно, по каким признакам распознать исполняемый файл, если в терминале работаю.
Вот, когда в свой мобильник Сименс установил эльфы - там было понятно: если в папке 0:/Zbin/daemon/*.elf лежит файл, то он и будет в автозагрузке и резидентно ляжет в память. А тут, без поллитра - не разберешь.., ну да ладно, это пока, на первых порах.
Еще раз огромная благодарность всем, кто хоть как-то прояснил для меня ситуацию!
Re: Помогите с компиляцией. 19.09.2007 01:01kosmonavt >Довольно пока с меня того, что справляюсь кое как с окном терминала

Кое-что можно на хоткеи посадить
[ln.com.ua]

>А хорошо было бы иметь возможность создания пакетного файла, как в DOS-e...

делайте текстовый файл, прописывайте в нем последовательность команд и присваивайте ему бит выполнения командой

---
chmod +x имя_файла
---

[www.linux.org.ru]
[www.linux.org.ru]

>ни файлов инициализации.

Ну этого добра хватает, тот же rc.local. Только в ASPLinux лучше его не трогать, а создать /etc/rc.d/rc.local.local и присвоить ему бит выполнения. Для локальной сессии правьте .bash_profile и .bashrc в своем домашнем каталоге.

>Даже не понятно, по каким признакам распознать исполняемый файл, если в терминале работаю.

---
ls -F
---
Справа от имени исполняемого файла появится звездочка. Кстати, обратите внимание на цвет файла, ls окрашивает типы файлов.

Вообще-то, в ASPLinux ls это алиас на /bin/ls с флагом --color=auto

>А кстати, как его, да и другие программы, установить с диска, не переустанавливая систему заново? А то система все норовит с сервера дополнения скачивать. Это очень долго...

Нужно создать локальный репозиторий

инструкция для yum
[lafox.net];

"Копируем добытые непосильным трудом дополнительные (и не только) пакеты *.rpm" -- берете из дистрибутивного диска.

После этого во всех файлах из /etc/yum.repos.d/, кроме конфига локального репозитория, меняем enabled=1, на enabled=0, т.е. отключаем сетевые репозитории.

Установка компиляторов для C и C++:
---
yum install gcc gcc-c++
---
Re: Помогите с компиляцией. 19.09.2007 09:01peter_ir mc тоже окрашивает исполнимые файлы и права для выделенного внизу указывает.
Только mc надо настроить, чтобы выглядел удобно. Я, кроме того, включаю
пользователя в группу tty, иначе mc из-под root'а и user'а работает
неодинаково.
rc.local - это текстовый файл, а не скомпилированная
программа, его можно редактировать в текстовом
редакторе.


Петр.
RSS-материал