crypt (enigma) z BSD

Miroslav BENES miroslav_benes na zdas.cz
Čtvrtek Únor 9 15:08:37 CET 2006


>A chcete je mit sifrovana jen po dobu prenosu, nebo skutecne mit ulozena 
>sifrovana na obou discich (v prvnim pripade bych uvazoval o sftp, pripadne 
>ftp over ssl).
>  
>
I uložená.
Jde totiž o to, že onen BSD server nemá přímý přístup do vnitřní sítě (a 
naopak), takže jediné "styčné místo" pro předávání dat mi vyšel FTP 
server v DMZ.
Přenášené soubory se budou sypat asynchronně, takže tak musí nějakou 
dobu ležet. A protože je to teoreticky "prolomitelné" místo, radši bych 
je tam měl nečitelná.


>>- přenést zdroják utility crypt z BSD na linux, ale nedá se to zkompilovat :
>>$ make
>>Makefile:11: *** missing separator.  Stop.
>>    
>>
>
>To bude nejaka uplna drobnost (nejaky chybejici/prebyvajici tabulator, 
>atd). 
>  
>

# $FreeBSD: src/usr.bin/enigma/Makefile,v 1.9 2004/02/05 22:44:24 ru Exp $

PROG= enigma

LINKS= ${BINDIR}/enigma ${BINDIR}/crypt
MLINKS= enigma.1 crypt.1

DPADD= ${LIBCRYPT}
LDADD= -lcrypt

.include <bsd.prog.mk>


Nikdy jsem se v Makefile moc nevrtal, ale nějak tu nevidím definici "cíle".
Odkazuje se na "bsd.prog.mk" - ten jsem mu tam taky nakopíroval, ale 
nepomohlo to.

>>$ gcc enigma.c
>>enigma.c: In function 'setup':
>>enigma.c:45: warning: passing argument 2 of 'memcpy' makes pointer from
>>integer without a cast
>>/tmp/ccqblTnC.o(.text+0x15): In function `setup':
>>enigma.c: undefined reference to `strlcpy'
>>    
>>
>
>strlcpy() je BSDckova vymyslenost, ktera se snazi byt jeste bezpecnejsi 
>nez strncpy() ... muzete ji klidne nahradit za strncpy() (rozdil je jen v 
>NULL-termination destination stringu).
>  
>
OK, nahrazeno.

>>/tmp/ccqblTnC.o(.text+0x27):enigma.c: undefined reference to `crypt'
>>collect2: ld returned 1 exit status
>>    
>>
>
>-lcrypt (s libcrypt se standardne nelinkuje).
>  
>

$ gcc enigma.c -lcrypt
enigma.c: In function ‘setup’:
enigma.c:45: warning: passing argument 2 of ‘memcpy’ makes pointer from 
integer without a cast

Nějak nechápu, co vlastně chce (holt nejsem v C natolik kovaný) :

..
31: char buf[13];
...
44: strncpy(salt, pw, sizeof(salt));
45: memcpy(buf, crypt(pw, salt), sizeof(buf));

Přitom podle man memcpy mají být parametry :

void *memcpy(void *dest, const void *src, size_t n);

a funkce crypt :

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

No nevím, ale připadá mi to, že jsou správného typu. Nebo se pletu ?

Obě deklarace mi navíc připadají stejné i na BSD :
void *
memcpy(void *dst, const void *src, size_t len);
char *
crypt(const char *key, const char *salt);


V čem by ještě mohl být problém ?

BTW ten zdroják má asi 2,5 kB a jinak vypadá na pohled celkem snesitelně.







Další informace o konferenci Linux