2012/08/12(日)samba 3.6.7 は FreeBSD 8.3R でソースコードからそのまま構築できない

2017/10/12 5:01 サーバ運営・管理
今日は、珍しく連投です。

samba は、構築に難儀するサーバアプリケーションのひとつで、個人的にはどうも好きにはなれません。Windows 絡みというものもあるが(爆)

samba 3.6.7 をソースコードから構築しようとすると、以下のような md5 部分のコンパイルエラーで途中で停止します:
../lib/crypto/md5.c:142: error: 'struct MD5Context' has no member named 'bits'
../lib/crypto/md5.c:144: error: 'struct MD5Context' has no member named 'buf'
../lib/crypto/md5.c:144: error: 'struct MD5Context' has no member named 'in'
../lib/crypto/md5.c:145: error: 'struct MD5Context' has no member named 'buf'
../lib/crypto/md5.c:146: error: 'struct MD5Context' has no member named 'buf'
The following command failed:
gcc -O -I. -I/usr/local/src/samba-3.6.7/source3
-I/usr/local/src/samba-3.6.7/source3/../lib/popt
-I/usr/local/src/samba-3.6.7/source3/../lib/iniparser/src
-Iinclude -I./include -I. -I. -I./../lib/replace
-I./../lib/tevent -I./librpc -I./.. -I./../lib/talloc -I../lib/tdb/include
-DHAVE_CONFIG_H -Iinclude -I./include -I. -I. -I./../lib/replace
-I./../lib/tevent -I./librpc -I./.. -I./../lib/popt -I/usr/local/include
-I/usr/local/src/samba-3.6.7/source3/lib -I.. -D_SAMBA_BUILD_=3
-D_SAMBA_BUILD_=3 -fPIC -DPIC -c ../lib/crypto/md5.c -o ../lib/crypto/md5.o
gmake: *** [../lib/crypto/md5.o] エラー 1


これは、FreeBSD8.3R の場合、samba で意図している <md5.h> の構造体の定義が異なっているためで、lib/crypto/md5.h を下記のように一部をコメントアウトする必要があります:
#define MD5_H
#ifndef HEADER_MD5_H
/* Try to avoid clashes with OpenSSL */
#define HEADER_MD5_H
#endif
/* #ifdef HAVE_MD5_H */
/*
* Try to avoid clashes with Solaris MD5 implementation.
* ...where almost all implementations follows:
* "Schneier's Cryptography Classics Library"
*/
/* #include <md5.h> */
/* #else */

struct MD5Context {
uint32_t buf[4];
uint32_t bits[2];
uint8_t in[64];
};
typedef struct MD5Context MD5_CTX;
void MD5Init(struct MD5Context *context);
void MD5Update(struct MD5Context *context, const uint8_t *buf,
size_t len);
void MD5Final(uint8_t digest[16], struct MD5Context *context);


/* #endif !HAVE_MD5_H */

#endif /* !MD5_H */


赤文字部分のようにコメントアウトします。
さらに、lib/crypto/md5.c を以下のように変更します:
#include "replace.h"
#include "md5.h"
変更 → #include "../lib/crypto/md5.h"


これらの変更後、コンパイルすると上手くいくようです。