Вопрос по gcc-4.1

2007-01-01 Thread Dmitriy Sirant

Добрый день

Понимаю что офтоп, но простите, это в первый раз в этом году :)
Тему про индуских программистов тоже читал и честно попытался в течении 
дня найти ответ в конференциях и google, но видимо не хватает общих 
знаний по данному вопросу.


Год назад была написана програмка для авторизации через радиус (xtradius 
- внешний модуль авторизации). С gcc-3.4 все компилируется и работает 
без проблем.
Пришел новый сервер, на него поставил etch и решил пересобрать с gcc-4.1 
- при сборке показало варнинг и перестала работать CHAP авторизация. 
Если не сложно - подскажите, что не устраивает новый gcc, так как на C 
писать приходилось только чуть-чуть, а этот кусок кода был найден где-то 
на просторах интернета...


Вот текст ошибки, код в приложении.

gcc-4.1 -c auth_radius.c -O3 -ffast-math -march=i686 -funroll-loops 
-Wall -W -DCRYPT -I/usr/include/mysql

auth_radius.c: In function 'main':
auth_radius.c:208: warning: pointer targets in passing argument 1 of 
'strlen' differ in signedness
auth_radius.c:208: warning: pointer targets in passing argument 1 of 
'strlen' differ in signedness
auth_radius.c:208: warning: pointer targets in passing argument 2 of 
'__builtin_strcmp' differ in signedness
auth_radius.c:208: warning: pointer targets in passing argument 2 of 
'__builtin_strcmp' differ in signedness
auth_radius.c:208: warning: pointer targets in passing argument 1 of 
'strlen' differ in signedness
auth_radius.c:208: warning: pointer targets in passing argument 2 of 
'__builtin_strcmp' differ in signedness
auth_radius.c:208: warning: pointer targets in passing argument 2 of 
'__builtin_strcmp' differ in signedness
auth_radius.c:208: warning: pointer targets in passing argument 2 of 
'strncmp' differ in signedness
gcc-4.1 -o auth_radius auth_radius.o -L/usr/lib -lmysqlclient -lcrypt 
-lsasl2 -lz
#include 
#include 
#include 
#include 
#include 
#include 
#include "conf.h"
#include "config.c"
#include "base_func.h"
#include "errno.h"
#include "timestr.c"
#include 
#include 

char *crypt(const char *key, const char *salt);
char *crypt_pw(char *ct_pw, char *salt);

MYSQL mysql;
char *SQL;
int rc;

char *crypt_pw(char *ct_pw, char *salt)
{
char *st;

st = (char *) malloc(35*sizeof(char));
strcpy(st, (char *) crypt(ct_pw, salt));
return st;
}

int
main (int argc, char *argv[])
{

MYSQL_RES *result;
MYSQL_ROW row;

char *st;
char *salt;
char *pw_string;

int l;

char *command;
int command_length, rc, ret;
char *username = "";
char *password = "";
char msg[256];
char *challenge = "";
char *secret = "";
char authtype[4];

ret = 0;

readConfigFile (CONFIG_FILE);

username = strdup(argv[1]);

if (argc == 2)
{
strcpy(authtype, "CHAP");
}
else if (argc == 3)
{
strcpy(authtype, "PAP");
}

if (strcmp(authtype, "PAP") == 0)
{
if (getenv("Password"))
{
password = getenv("Password");
}
else
{
password = strdup(argv[2]);
}
}
else if (strcmp(authtype, "CHAP") == 0)
{
challenge = (char *) malloc (sizeof(char)*256);
pack(getenv("CHAP-Challenge"),challenge);
secret = (char *) malloc (sizeof(char)*256);
pack(getenv("CHAP-Password"),secret);
}

mysql_init(&mysql);
if 
(!mysql_real_connect(&mysql,mysql_server,mysql_user,mysql_passwd,mysql_database,0,NULL,0))
{
fprintf(stderr, "Failed to connect to database: Error: %s\n",
mysql_error(&mysql));
exit(1);
}

command_length = sizeof(SQL_SET_NAMES);
command = (char *) malloc(command_length*sizeof(char) + 1);
command_length = snprintf(command,command_length,SQL_SET_NAMES);

rc = mysql_real_query(&mysql, command, command_length);
if (rc) { printf("Blah! %s\n", mysql_error(&mysql)); exit(1); }
free(command);

if ((strstr(username, ":")) || ((strlen(username) == 13) && (strstr(username, 
"-"
{
if ((strlen(username) == 13) && (strstr(username, "-")))
{
sprintf (username, "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c", 
username[0],username[1],username[2],username[3],username[4],username[5],username[7],username[8],username[9],username[10],username[11],username[12]);
}
if (strcmp(password,radius_share_secret) == 0)
{
command_length = sizeof(SQL_SELECT_RADIO) + strlen(username);
command = (char *) malloc(command_length*sizeof(char) + 1);
command_length = 
snprintf(command,command_length,SQL_SELECT_RADIO,username);

rc = mysql_real_query(&mysql, command, command_length);
if (rc) { printf("Blah! %s\n", mysql_error(&mysql)); exit(1); }
free(command);
result = mysql_store_result(&mysql);
row = mysql_fetch_row(result);
mysql_free_result(result);
mysql_close(&mysql);

if ( !row )
{
fprintf(stdout, "Reply-Message=\"We havent client with MAC 
'%s'\"\n", username);
exit(1);
}

if (strcmp(row[0],"0") == 0)
{
fprintf(stdout, "Reply-Message=\"All OK, password '%s', ip '%s', 
name '%s'\"\n", password, row[

Re: Вопрос по gcc-4.1

2007-01-01 Thread Dmitry Nezhevenko
On Mon, Jan 01, 2007 at 02:23:51PM +0200, Dmitriy Sirant wrote:
> Вот текст ошибки, код в приложении.
> 
> gcc-4.1 -c auth_radius.c -O3 -ffast-math -march=i686 -funroll-loops 
> -Wall -W -DCRYPT -I/usr/include/mysql
> auth_radius.c: In function 'main':
> auth_radius.c:208: warning: pointer targets in passing argument 1 of 
> 'strlen' differ in signedness

Это ругань на то что strncmp подсовывается unsigned char* в качестве
одного из аргумента. ПО идее от warning-а избавит замена

if(strncmp(secret+1,hash,16) == 0)
на
if(strncmp(secret+1,(char*)hash,16) == 0)

Но это вряд ли является причиной проблемы.

-- 
WBR, Dmitry


signature.asc
Description: Digital signature


Re: Вопрос по gcc-4.1

2007-01-01 Thread Dmitriy Sirant


Это ругань на то что strncmp подсовывается unsigned char* в качестве
одного из аргумента. ПО идее от warning-а избавит замена

if(strncmp(secret+1,hash,16) == 0)
на
if(strncmp(secret+1,(char*)hash,16) == 0)

Но это вряд ли является причиной проблемы.



Как Вы и предполагали - это решило проблему warning-a но не решило сути 
проблемы, всеравно авторизация CHAP не проходит при компиляции gcc-4.1. 
Как мне написал в личку Victor Wagner - это не единственная проблема с 
gcc-4.1: http://gcc.gnu.org/ml/gcc/2006-07/msg00037.html


Жаль... буду либо использовать gcc-3.4 либо ждать gcc-4.2


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: Вопрос по gcc-4.1

2007-01-02 Thread Sergey Chumakov
Hi Dmitriy,

* Dmitriy Sirant <[EMAIL PROTECTED]>
* 2007-01-02 06:17:
> Как Вы и предполагали - это решило 
> проблему warning-a но не решило сути 
> проблемы, всеравно авторизация CHAP не 
> проходит при компиляции gcc-4.1. Как мне 
> написал в личку Victor Wagner - это не 
> единственная проблема с gcc-4.1: 
> http://gcc.gnu.org/ml/gcc/2006-07/msg00037.html
> 
> Жаль... буду либо использовать gcc-3.4 либо 
> ждать gcc-4.2

Честно говоря оно может и должно работать, но я бы так никогда бы не
написал:

char authtype[4];
...
else if (strcmp(authtype,"CHAP") == 0)
{
...

Ниже не смотрел.

-- 
Best regards,
Sergey Chumakov 2:450/77[.43]


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: Вопрос по gcc-4.1

2007-01-02 Thread Sergey Chumakov
Hi debian-russian,

* Sergey Chumakov <[EMAIL PROTECTED]>
* 2007-01-02 11:11:
> > проблемы, всеравно авторизация CHAP не 
> > проходит при компиляции gcc-4.1. Как мне 
> > написал в личку Victor Wagner - это не 
> > единственная проблема с gcc-4.1: 
> > http://gcc.gnu.org/ml/gcc/2006-07/msg00037.html
> > 
> > Жаль... буду либо использовать gcc-3.4 либо 
> > ждать gcc-4.2
> 
> Честно говоря оно может и должно работать, но я бы так никогда бы не
> написал:
> 
> char authtype[4];
> ...
> else if (strcmp(authtype,"CHAP") == 0)
> {
> ...
> 
> Ниже не смотрел.

Вот выше еще есть

strcpy(authtype, "CHAP");

Что-то сомневаюсь я, что проблема в gcc

-- 
Best regards,
Sergey Chumakov 2:450/77[.43]


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: Вопрос по gcc-4.1

2007-01-02 Thread Victor Wagner
On 2007.01.02 at 11:16:11 +0200, Sergey Chumakov wrote:

> > Честно говоря оно может и должно работать, но я бы так никогда бы не
> > написал:
> > 
> > char authtype[4];
> > ...
> > else if (strcmp(authtype,"CHAP") == 0)
> > {
> > ...
> > 
> > Ниже не смотрел.
> 
> Вот выше еще есть
> 
> strcpy(authtype, "CHAP");
> 
> Что-то сомневаюсь я, что проблема в gcc

Проблема в том, что gcc 4.x намного строже относится к таким вещам.
Если на gcc 3 оно прокатывало, на gcc 4 будет либо ругаться при
компиляции, либо отваливаться во время выполнения.

Можно ещё попроболать запустить с libefence или valgrind.
Они в этом коде явно наловят кучу ошибок.



-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: Вопрос по gcc-4.1

2007-01-02 Thread Dmitriy Sirant

Victor Wagner пишет:

On 2007.01.02 at 11:16:11 +0200, Sergey Chumakov wrote:


Честно говоря оно может и должно работать, но я бы так никогда бы не
написал:

char authtype[4];
...
else if (strcmp(authtype,"CHAP") == 0)
{
...

Ниже не смотрел.

Вот выше еще есть

strcpy(authtype, "CHAP");

Что-то сомневаюсь я, что проблема в gcc




Нда, когда ткнули носом - понял...


Проблема в том, что gcc 4.x намного строже относится к таким вещам.
Если на gcc 3 оно прокатывало, на gcc 4 будет либо ругаться при
компиляции, либо отваливаться во время выполнения.

Можно ещё попроболать запустить с libefence или valgrind.
Они в этом коде явно наловят кучу ошибок.



Пошел проверять этими вещами...


--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: Вопрос по gcc-4.1

2007-01-02 Thread Andrey Melnikoff
Dmitriy Sirant <[EMAIL PROTECTED]> wrote:
> [-- text/plain, кодировка quoted-printable, кодировка: KOI8-R, 59 строк --]

> Добрый день

> Понимаю что офтоп, но простите, это в первый раз в этом году :)
> Тему про индуских программистов тоже читал и честно попытался в течении 
> дня найти ответ в конференциях и google, но видимо не хватает общих 
> знаний по данному вопросу.

[skipp]

> Вот текст ошибки, код в приложении.
За такой код бить граблями надо.

> gcc-4.1 -c auth_radius.c -O3 -ffast-math -march=i686 -funroll-loops 
> -Wall -W -DCRYPT -I/usr/include/mysql
-O3 убери. 


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: Вопрос по gcc-4.1

2007-01-02 Thread Sergey Chumakov
Hi Victor,

* Victor Wagner <[EMAIL PROTECTED]>
* 2007-01-02 12:06:
> On 2007.01.02 at 11:16:11 +0200, Sergey Chumakov wrote:
> 
> > > Честно говоря оно может и должно работать, но я бы так никогда бы
> > > не
> > > написал:
> > > 
> > > char authtype[4];
> > > ...
> > > else if (strcmp(authtype,"CHAP") == 0)
> > > {
> > > ...
> > > 
> > > Ниже не смотрел.
> > 
> > Вот выше еще есть
> > 
> > strcpy(authtype, "CHAP");
> > 
> > Что-то сомневаюсь я, что проблема в gcc
> 
> Проблема в том, что gcc 4.x намного строже относится к таким вещам.
> Если на gcc 3 оно прокатывало, на gcc 4 будет либо ругаться при
> компиляции, либо отваливаться во время выполнения.

Для меня главная проблема - заставить/научить писать нормальный код и
проверять написанное самостоятельно.
 
> Можно ещё попроболать запустить с libefence или valgrind.
> Они в этом коде явно наловят кучу ошибок.

Лучше переписать неспешно. Дешевле выйдет. Чем потом за "индусами"
подтирать.

Вообще с индусами мне просто не везет наверное, это я не в плане дискриминации
по национальному признаку.

-- 
Best regards,
Sergey Chumakov 2:450/77[.43]


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: Вопрос по gcc-4.1

2007-01-02 Thread Dmitriy Sirant

Andrey Melnikoff пишет:

Dmitriy Sirant <[EMAIL PROTECTED]> wrote:

[-- text/plain, кодировка quoted-printable, кодировка: KOI8-R, 59 строк --]



Добрый день



Понимаю что офтоп, но простите, это в первый раз в этом году :)
Тему про индуских программистов тоже читал и честно попытался в течении 
дня найти ответ в конференциях и google, но видимо не хватает общих 
знаний по данному вопросу.


[skipp]


Вот текст ошибки, код в приложении.

За такой код бить граблями надо.

gcc-4.1 -c auth_radius.c -O3 -ffast-math -march=i686 -funroll-loops 
-Wall -W -DCRYPT -I/usr/include/mysql
-O3 убери. 





Вы знаете, я спустя год глянул на этот код и сам ужаснулся. Дело в том 
что все писалось в несколько заходов и максимум что от него требовалось 
- чтобы заработало. Оно как-то работало (хотя лучшебы не работало). 
После того как сейчас я попробовал все это привести к удобочитаемому (и 
работающему) виду я понял, что легче будет написать это все с нуля (как 
уже советовали выше).



--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: Вопрос по gcc-4.1

2007-01-05 Thread Artem Chuprina
Dmitry Nezhevenko -> debian-russian@lists.debian.org  @ Mon, 1 Jan 2007 
18:28:55 +0200:

 >> Вот текст ошибки, код в приложении.
 >> 
 >> gcc-4.1 -c auth_radius.c -O3 -ffast-math -march=i686 -funroll-loops 
 >> -Wall -W -DCRYPT -I/usr/include/mysql
 >> auth_radius.c: In function 'main':
 >> auth_radius.c:208: warning: pointer targets in passing argument 1 of 
 >> 'strlen' differ in signedness

 DN> Это ругань на то что strncmp подсовывается unsigned char* в качестве
 DN> одного из аргумента. ПО идее от warning-а избавит замена

 DN>if(strncmp(secret+1,hash,16) == 0)
 DN> на
 DN>if(strncmp(secret+1,(char*)hash,16) == 0)

 DN> Но это вряд ли является причиной проблемы.

Натурально.  Причиной проблемы является то, что используется strncmp
вместо memcmp.

-- 
Artem Chuprina
RFC2822:  Jabber: [EMAIL PROTECTED]

/dev/null-транспортировка


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: Вопрос по gcc-4.1

2007-01-05 Thread Dmitry Nezhevenko
On Fri, Jan 05, 2007 at 07:19:46PM +0300, Artem Chuprina wrote:
>  DN>  if(strncmp(secret+1,hash,16) == 0)
>  DN> на
>  DN>  if(strncmp(secret+1,(char*)hash,16) == 0)
> 
>  DN> Но это вряд ли является причиной проблемы.
> 
> Натурально.  Причиной проблемы является то, что используется strncmp
> вместо memcmp.
> 

Хм. точно. в hash лежит 16-байтная md5, которая может содержать \0

-- 
WBR, Dmitry


signature.asc
Description: Digital signature


Re: Вопрос по gcc-4.1

2007-01-10 Thread Artem Chuprina
Dmitry Nezhevenko -> debian-russian@lists.debian.org  @ Sat, 6 Jan 2007 
02:27:46 +0200:

 >>  DN>if(strncmp(secret+1,hash,16) == 0)
 >>  DN> на
 >>  DN>if(strncmp(secret+1,(char*)hash,16) == 0)
 >> 
 >>  DN> Но это вряд ли является причиной проблемы.
 >> 
 >> Натурально.  Причиной проблемы является то, что используется strncmp
 >> вместо memcmp.
 >> 

 DN> Хм. точно. в hash лежит 16-байтная md5, которая может содержать \0

Что тоже хорошо.  А еще там где-то, кажется, в 16-байтовый буфер
писалась 16-символьная (17-байтовая, сиречь) строка...

-- 
Artem Chuprina
RFC2822:  Jabber: [EMAIL PROTECTED]

Юзер упорствует в хождении по граблям. Образовавшиеся шишки он считает
трудовыми мозолями. (С)энта


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]



Re: Вопрос по gcc-4.1

2007-01-12 Thread Andrey Melnikoff
Dmitriy Sirant <[EMAIL PROTECTED]> wrote:
> Andrey Melnikoff пишет:
> > Dmitriy Sirant <[EMAIL PROTECTED]> wrote:
> >> [-- text/plain, кодировка quoted-printable, кодировка: KOI8-R, 59 строк --]
> > 
> >> Добрый день
> > 
> >> Понимаю что офтоп, но простите, это в первый раз в этом году :)
> >> Тему про индуских программистов тоже читал и честно попытался в течении 
> >> дня найти ответ в конференциях и google, но видимо не хватает общих 
> >> знаний по данному вопросу.
> > 
> > [skipp]
> > 
> >> Вот текст ошибки, код в приложении.
> > За такой код бить граблями надо.
> > 
> >> gcc-4.1 -c auth_radius.c -O3 -ffast-math -march=i686 -funroll-loops 
> >> -Wall -W -DCRYPT -I/usr/include/mysql
> > -O3 убери. 

> Вы знаете, я спустя год глянул на этот код и сам ужаснулся. Дело в том 
> что все писалось в несколько заходов и максимум что от него требовалось 
> - чтобы заработало. Оно как-то работало (хотя лучшебы не работало). 
> После того как сейчас я попробовал все это привести к удобочитаемому (и 
> работающему) виду я понял, что легче будет написать это все с нуля (как 
> уже советовали выше).
прогони через indent - читаться танет лучше.


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]