mirror of
https://github.com/OpenVPN/openvpn.git
synced 2026-06-11 09:50:26 -04:00
Change all CRLF linefeeds to LF linefeeds
Signed-off-by: Samuli Seppänen <samuli@openvpn.net> Acked-by: David Sommerseth <davids@redhat.com> Signed-off-by: David Sommerseth <davids@redhat.com>
This commit is contained in:
parent
808ba6b931
commit
6b2883a637
24 changed files with 1013 additions and 1013 deletions
|
|
@ -1,8 +1,8 @@
|
|||
@echo off
|
||||
cd %HOME%
|
||||
rem build a request for a cert that will be valid for ten years
|
||||
openssl req -days 3650 -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%
|
||||
rem sign the cert request with our ca, creating a cert/key pair
|
||||
openssl ca -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -config %KEY_CONFIG%
|
||||
rem delete any .old files created in this process, to avoid future file creation errors
|
||||
del /q %KEY_DIR%\*.old
|
||||
@echo off
|
||||
cd %HOME%
|
||||
rem build a request for a cert that will be valid for ten years
|
||||
openssl req -days 3650 -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%
|
||||
rem sign the cert request with our ca, creating a cert/key pair
|
||||
openssl ca -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -config %KEY_CONFIG%
|
||||
rem delete any .old files created in this process, to avoid future file creation errors
|
||||
del /q %KEY_DIR%\*.old
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
@echo off
|
||||
cd %HOME%
|
||||
rem build a request for a cert that will be valid for ten years
|
||||
openssl req -days 3650 -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%
|
||||
rem sign the cert request with our ca, creating a cert/key pair
|
||||
openssl ca -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -config %KEY_CONFIG%
|
||||
rem delete any .old files created in this process, to avoid future file creation errors
|
||||
del /q %KEY_DIR%\*.old
|
||||
@echo off
|
||||
cd %HOME%
|
||||
rem build a request for a cert that will be valid for ten years
|
||||
openssl req -days 3650 -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%
|
||||
rem sign the cert request with our ca, creating a cert/key pair
|
||||
openssl ca -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -config %KEY_CONFIG%
|
||||
rem delete any .old files created in this process, to avoid future file creation errors
|
||||
del /q %KEY_DIR%\*.old
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
@echo off
|
||||
cd %HOME%
|
||||
rem build a request for a cert that will be valid for ten years
|
||||
openssl req -days 3650 -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%
|
||||
rem sign the cert request with our ca, creating a cert/key pair
|
||||
openssl ca -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -extensions server -config %KEY_CONFIG%
|
||||
rem delete any .old files created in this process, to avoid future file creation errors
|
||||
del /q %KEY_DIR%\*.old
|
||||
@echo off
|
||||
cd %HOME%
|
||||
rem build a request for a cert that will be valid for ten years
|
||||
openssl req -days 3650 -new -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.csr -config %KEY_CONFIG%
|
||||
rem sign the cert request with our ca, creating a cert/key pair
|
||||
openssl ca -days 3650 -out %KEY_DIR%\%1.crt -in %KEY_DIR%\%1.csr -extensions server -config %KEY_CONFIG%
|
||||
rem delete any .old files created in this process, to avoid future file creation errors
|
||||
del /q %KEY_DIR%\*.old
|
||||
|
|
|
|||
286
httpdigest.c
286
httpdigest.c
|
|
@ -1,143 +1,143 @@
|
|||
/*
|
||||
* OpenVPN -- An application to securely tunnel IP networks
|
||||
* over a single TCP/UDP port, with support for SSL/TLS-based
|
||||
* session authentication and key exchange,
|
||||
* packet encryption, packet authentication, and
|
||||
* packet compression.
|
||||
*
|
||||
* Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program (see the file COPYING included with this
|
||||
* distribution); if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "syshead.h"
|
||||
|
||||
#if PROXY_DIGEST_AUTH
|
||||
|
||||
#include "crypto.h"
|
||||
#include "httpdigest.h"
|
||||
|
||||
static void
|
||||
CvtHex(
|
||||
IN HASH Bin,
|
||||
OUT HASHHEX Hex
|
||||
)
|
||||
{
|
||||
unsigned short i;
|
||||
unsigned char j;
|
||||
|
||||
for (i = 0; i < HASHLEN; i++) {
|
||||
j = (Bin[i] >> 4) & 0xf;
|
||||
if (j <= 9)
|
||||
Hex[i*2] = (j + '0');
|
||||
else
|
||||
Hex[i*2] = (j + 'a' - 10);
|
||||
j = Bin[i] & 0xf;
|
||||
if (j <= 9)
|
||||
Hex[i*2+1] = (j + '0');
|
||||
else
|
||||
Hex[i*2+1] = (j + 'a' - 10);
|
||||
};
|
||||
Hex[HASHHEXLEN] = '\0';
|
||||
};
|
||||
|
||||
/* calculate H(A1) as per spec */
|
||||
void
|
||||
DigestCalcHA1(
|
||||
IN char * pszAlg,
|
||||
IN char * pszUserName,
|
||||
IN char * pszRealm,
|
||||
IN char * pszPassword,
|
||||
IN char * pszNonce,
|
||||
IN char * pszCNonce,
|
||||
OUT HASHHEX SessionKey
|
||||
)
|
||||
{
|
||||
MD5_CTX Md5Ctx;
|
||||
HASH HA1;
|
||||
|
||||
MD5_Init(&Md5Ctx);
|
||||
MD5_Update(&Md5Ctx, pszUserName, strlen(pszUserName));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszRealm, strlen(pszRealm));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszPassword, strlen(pszPassword));
|
||||
MD5_Final(HA1, &Md5Ctx);
|
||||
if (pszAlg && strcasecmp(pszAlg, "md5-sess") == 0)
|
||||
{
|
||||
MD5_Init(&Md5Ctx);
|
||||
MD5_Update(&Md5Ctx, HA1, HASHLEN);
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszNonce, strlen(pszNonce));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszCNonce, strlen(pszCNonce));
|
||||
MD5_Final(HA1, &Md5Ctx);
|
||||
};
|
||||
CvtHex(HA1, SessionKey);
|
||||
}
|
||||
|
||||
/* calculate request-digest/response-digest as per HTTP Digest spec */
|
||||
void
|
||||
DigestCalcResponse(
|
||||
IN HASHHEX HA1, /* H(A1) */
|
||||
IN char * pszNonce, /* nonce from server */
|
||||
IN char * pszNonceCount, /* 8 hex digits */
|
||||
IN char * pszCNonce, /* client nonce */
|
||||
IN char * pszQop, /* qop-value: "", "auth", "auth-int" */
|
||||
IN char * pszMethod, /* method from the request */
|
||||
IN char * pszDigestUri, /* requested URL */
|
||||
IN HASHHEX HEntity, /* H(entity body) if qop="auth-int" */
|
||||
OUT HASHHEX Response /* request-digest or response-digest */
|
||||
)
|
||||
{
|
||||
MD5_CTX Md5Ctx;
|
||||
HASH HA2;
|
||||
HASH RespHash;
|
||||
HASHHEX HA2Hex;
|
||||
|
||||
// calculate H(A2)
|
||||
MD5_Init(&Md5Ctx);
|
||||
MD5_Update(&Md5Ctx, pszMethod, strlen(pszMethod));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszDigestUri, strlen(pszDigestUri));
|
||||
if (strcasecmp(pszQop, "auth-int") == 0)
|
||||
{
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, HEntity, HASHHEXLEN);
|
||||
};
|
||||
MD5_Final(HA2, &Md5Ctx);
|
||||
CvtHex(HA2, HA2Hex);
|
||||
|
||||
// calculate response
|
||||
MD5_Init(&Md5Ctx);
|
||||
MD5_Update(&Md5Ctx, HA1, HASHHEXLEN);
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszNonce, strlen(pszNonce));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
if (*pszQop)
|
||||
{
|
||||
MD5_Update(&Md5Ctx, pszNonceCount, strlen(pszNonceCount));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszCNonce, strlen(pszCNonce));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszQop, strlen(pszQop));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
};
|
||||
MD5_Update(&Md5Ctx, HA2Hex, HASHHEXLEN);
|
||||
MD5_Final(RespHash, &Md5Ctx);
|
||||
CvtHex(RespHash, Response);
|
||||
}
|
||||
|
||||
#endif
|
||||
/*
|
||||
* OpenVPN -- An application to securely tunnel IP networks
|
||||
* over a single TCP/UDP port, with support for SSL/TLS-based
|
||||
* session authentication and key exchange,
|
||||
* packet encryption, packet authentication, and
|
||||
* packet compression.
|
||||
*
|
||||
* Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program (see the file COPYING included with this
|
||||
* distribution); if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include "syshead.h"
|
||||
|
||||
#if PROXY_DIGEST_AUTH
|
||||
|
||||
#include "crypto.h"
|
||||
#include "httpdigest.h"
|
||||
|
||||
static void
|
||||
CvtHex(
|
||||
IN HASH Bin,
|
||||
OUT HASHHEX Hex
|
||||
)
|
||||
{
|
||||
unsigned short i;
|
||||
unsigned char j;
|
||||
|
||||
for (i = 0; i < HASHLEN; i++) {
|
||||
j = (Bin[i] >> 4) & 0xf;
|
||||
if (j <= 9)
|
||||
Hex[i*2] = (j + '0');
|
||||
else
|
||||
Hex[i*2] = (j + 'a' - 10);
|
||||
j = Bin[i] & 0xf;
|
||||
if (j <= 9)
|
||||
Hex[i*2+1] = (j + '0');
|
||||
else
|
||||
Hex[i*2+1] = (j + 'a' - 10);
|
||||
};
|
||||
Hex[HASHHEXLEN] = '\0';
|
||||
};
|
||||
|
||||
/* calculate H(A1) as per spec */
|
||||
void
|
||||
DigestCalcHA1(
|
||||
IN char * pszAlg,
|
||||
IN char * pszUserName,
|
||||
IN char * pszRealm,
|
||||
IN char * pszPassword,
|
||||
IN char * pszNonce,
|
||||
IN char * pszCNonce,
|
||||
OUT HASHHEX SessionKey
|
||||
)
|
||||
{
|
||||
MD5_CTX Md5Ctx;
|
||||
HASH HA1;
|
||||
|
||||
MD5_Init(&Md5Ctx);
|
||||
MD5_Update(&Md5Ctx, pszUserName, strlen(pszUserName));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszRealm, strlen(pszRealm));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszPassword, strlen(pszPassword));
|
||||
MD5_Final(HA1, &Md5Ctx);
|
||||
if (pszAlg && strcasecmp(pszAlg, "md5-sess") == 0)
|
||||
{
|
||||
MD5_Init(&Md5Ctx);
|
||||
MD5_Update(&Md5Ctx, HA1, HASHLEN);
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszNonce, strlen(pszNonce));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszCNonce, strlen(pszCNonce));
|
||||
MD5_Final(HA1, &Md5Ctx);
|
||||
};
|
||||
CvtHex(HA1, SessionKey);
|
||||
}
|
||||
|
||||
/* calculate request-digest/response-digest as per HTTP Digest spec */
|
||||
void
|
||||
DigestCalcResponse(
|
||||
IN HASHHEX HA1, /* H(A1) */
|
||||
IN char * pszNonce, /* nonce from server */
|
||||
IN char * pszNonceCount, /* 8 hex digits */
|
||||
IN char * pszCNonce, /* client nonce */
|
||||
IN char * pszQop, /* qop-value: "", "auth", "auth-int" */
|
||||
IN char * pszMethod, /* method from the request */
|
||||
IN char * pszDigestUri, /* requested URL */
|
||||
IN HASHHEX HEntity, /* H(entity body) if qop="auth-int" */
|
||||
OUT HASHHEX Response /* request-digest or response-digest */
|
||||
)
|
||||
{
|
||||
MD5_CTX Md5Ctx;
|
||||
HASH HA2;
|
||||
HASH RespHash;
|
||||
HASHHEX HA2Hex;
|
||||
|
||||
// calculate H(A2)
|
||||
MD5_Init(&Md5Ctx);
|
||||
MD5_Update(&Md5Ctx, pszMethod, strlen(pszMethod));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszDigestUri, strlen(pszDigestUri));
|
||||
if (strcasecmp(pszQop, "auth-int") == 0)
|
||||
{
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, HEntity, HASHHEXLEN);
|
||||
};
|
||||
MD5_Final(HA2, &Md5Ctx);
|
||||
CvtHex(HA2, HA2Hex);
|
||||
|
||||
// calculate response
|
||||
MD5_Init(&Md5Ctx);
|
||||
MD5_Update(&Md5Ctx, HA1, HASHHEXLEN);
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszNonce, strlen(pszNonce));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
if (*pszQop)
|
||||
{
|
||||
MD5_Update(&Md5Ctx, pszNonceCount, strlen(pszNonceCount));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszCNonce, strlen(pszCNonce));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
MD5_Update(&Md5Ctx, pszQop, strlen(pszQop));
|
||||
MD5_Update(&Md5Ctx, ":", 1);
|
||||
};
|
||||
MD5_Update(&Md5Ctx, HA2Hex, HASHHEXLEN);
|
||||
MD5_Final(RespHash, &Md5Ctx);
|
||||
CvtHex(RespHash, Response);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
120
httpdigest.h
120
httpdigest.h
|
|
@ -1,60 +1,60 @@
|
|||
/*
|
||||
* OpenVPN -- An application to securely tunnel IP networks
|
||||
* over a single TCP/UDP port, with support for SSL/TLS-based
|
||||
* session authentication and key exchange,
|
||||
* packet encryption, packet authentication, and
|
||||
* packet compression.
|
||||
*
|
||||
* Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program (see the file COPYING included with this
|
||||
* distribution); if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#if PROXY_DIGEST_AUTH
|
||||
|
||||
#define HASHLEN 16
|
||||
typedef unsigned char HASH[HASHLEN];
|
||||
#define HASHHEXLEN 32
|
||||
typedef unsigned char HASHHEX[HASHHEXLEN+1];
|
||||
#undef IN
|
||||
#undef OUT
|
||||
#define IN const
|
||||
#define OUT
|
||||
|
||||
/* calculate H(A1) as per HTTP Digest spec */
|
||||
void DigestCalcHA1(
|
||||
IN char * pszAlg,
|
||||
IN char * pszUserName,
|
||||
IN char * pszRealm,
|
||||
IN char * pszPassword,
|
||||
IN char * pszNonce,
|
||||
IN char * pszCNonce,
|
||||
OUT HASHHEX SessionKey
|
||||
);
|
||||
|
||||
/* calculate request-digest/response-digest as per HTTP Digest spec */
|
||||
void DigestCalcResponse(
|
||||
IN HASHHEX HA1, /* H(A1) */
|
||||
IN char * pszNonce, /* nonce from server */
|
||||
IN char * pszNonceCount, /* 8 hex digits */
|
||||
IN char * pszCNonce, /* client nonce */
|
||||
IN char * pszQop, /* qop-value: "", "auth", "auth-int" */
|
||||
IN char * pszMethod, /* method from the request */
|
||||
IN char * pszDigestUri, /* requested URL */
|
||||
IN HASHHEX HEntity, /* H(entity body) if qop="auth-int" */
|
||||
OUT HASHHEX Response /* request-digest or response-digest */
|
||||
);
|
||||
|
||||
#endif
|
||||
/*
|
||||
* OpenVPN -- An application to securely tunnel IP networks
|
||||
* over a single TCP/UDP port, with support for SSL/TLS-based
|
||||
* session authentication and key exchange,
|
||||
* packet encryption, packet authentication, and
|
||||
* packet compression.
|
||||
*
|
||||
* Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program (see the file COPYING included with this
|
||||
* distribution); if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#if PROXY_DIGEST_AUTH
|
||||
|
||||
#define HASHLEN 16
|
||||
typedef unsigned char HASH[HASHLEN];
|
||||
#define HASHHEXLEN 32
|
||||
typedef unsigned char HASHHEX[HASHHEXLEN+1];
|
||||
#undef IN
|
||||
#undef OUT
|
||||
#define IN const
|
||||
#define OUT
|
||||
|
||||
/* calculate H(A1) as per HTTP Digest spec */
|
||||
void DigestCalcHA1(
|
||||
IN char * pszAlg,
|
||||
IN char * pszUserName,
|
||||
IN char * pszRealm,
|
||||
IN char * pszPassword,
|
||||
IN char * pszNonce,
|
||||
IN char * pszCNonce,
|
||||
OUT HASHHEX SessionKey
|
||||
);
|
||||
|
||||
/* calculate request-digest/response-digest as per HTTP Digest spec */
|
||||
void DigestCalcResponse(
|
||||
IN HASHHEX HA1, /* H(A1) */
|
||||
IN char * pszNonce, /* nonce from server */
|
||||
IN char * pszNonceCount, /* 8 hex digits */
|
||||
IN char * pszCNonce, /* client nonce */
|
||||
IN char * pszQop, /* qop-value: "", "auth", "auth-int" */
|
||||
IN char * pszMethod, /* method from the request */
|
||||
IN char * pszDigestUri, /* requested URL */
|
||||
IN HASHHEX HEntity, /* H(entity body) if qop="auth-int" */
|
||||
OUT HASHHEX Response /* request-digest or response-digest */
|
||||
);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -10,44 +10,44 @@ diff -wur openssl-0.9.7m.orig/ms/mw.bat openssl-0.9.7m/ms/mw.bat
|
|||
--- openssl-0.9.7m.orig/ms/mw.bat Sat Feb 22 11:02:46 2003
|
||||
+++ openssl-0.9.7m/ms/mw.bat Mon Jan 21 23:12:34 2008
|
||||
@@ -1,17 +1,23 @@
|
||||
@rem OpenSSL with Mingw32
|
||||
@rem --------------------
|
||||
|
||||
@rem OpenSSL with Mingw32
|
||||
@rem --------------------
|
||||
|
||||
+@rem Include MinGW, MSYS, and ActiveState Perl in path
|
||||
+set PATH=c:\perl\bin;c:\MinGW\bin;c:\msys\1.0\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
|
||||
+
|
||||
@rem Makefile
|
||||
perl util\mkfiles.pl >MINFO
|
||||
-perl util\mk1mf.pl Mingw32 >ms\mingw32.mak
|
||||
@rem Makefile
|
||||
perl util\mkfiles.pl >MINFO
|
||||
-perl util\mk1mf.pl Mingw32 >ms\mingw32.mak
|
||||
+perl util\mk1mf.pl no-idea no-mdc2 no-rc5 Mingw32 >ms\mingw32.mak
|
||||
+
|
||||
@rem DLL definition files
|
||||
-perl util\mkdef.pl 32 libeay >ms\libeay32.def
|
||||
@rem DLL definition files
|
||||
-perl util\mkdef.pl 32 libeay >ms\libeay32.def
|
||||
+perl util\mkdef.pl no-idea no-mdc2 no-rc5 32 libeay >ms\libeay32.def
|
||||
if errorlevel 1 goto end
|
||||
-perl util\mkdef.pl 32 ssleay >ms\ssleay32.def
|
||||
if errorlevel 1 goto end
|
||||
-perl util\mkdef.pl 32 ssleay >ms\ssleay32.def
|
||||
+perl util\mkdef.pl no-idea no-mdc2 no-rc5 32 ssleay >ms\ssleay32.def
|
||||
if errorlevel 1 goto end
|
||||
|
||||
@rem Build the libraries
|
||||
-make -f ms/mingw32.mak
|
||||
if errorlevel 1 goto end
|
||||
|
||||
@rem Build the libraries
|
||||
-make -f ms/mingw32.mak
|
||||
+
|
||||
+@rem JY added --win32 flag
|
||||
+make --win32 -f ms/mingw32.mak
|
||||
if errorlevel 1 goto end
|
||||
|
||||
@rem Generate the DLLs and input libraries
|
||||
if errorlevel 1 goto end
|
||||
|
||||
@rem Generate the DLLs and input libraries
|
||||
@@ -20,7 +26,9 @@
|
||||
dllwrap --dllname libssl32.dll --output-lib out/libssl32.a --def ms/ssleay32.def out/libssl.a out/libeay32.a
|
||||
if errorlevel 1 goto end
|
||||
|
||||
dllwrap --dllname libssl32.dll --output-lib out/libssl32.a --def ms/ssleay32.def out/libssl.a out/libeay32.a
|
||||
if errorlevel 1 goto end
|
||||
|
||||
+@rem JY added openssl.exe linked to DLL
|
||||
+gcc -o openssl tmp\verify.o tmp\asn1pars.o tmp\req.o tmp\dgst.o tmp\dh.o tmp\dhparam.o tmp\enc.o tmp\passwd.o tmp\gendh.o tmp\errstr.o tmp\ca.o tmp\pkcs7.o tmp\crl2p7.o tmp\crl.o tmp\rsa.o tmp\rsautl.o tmp\dsa.o tmp\dsaparam.o tmp\x509.o tmp\genrsa.o tmp\gendsa.o tmp\s_server.o tmp\s_client.o tmp\speed.o tmp\s_time.o tmp\apps.o tmp\s_cb.o tmp\s_socket.o tmp\app_rand.o tmp\version.o tmp\sess_id.o tmp\ciphers.o tmp\nseq.o tmp\pkcs12.o tmp\pkcs8.o tmp\spkac.o tmp\smime.o tmp\rand.o tmp\engine.o tmp\ocsp.o tmp\prime.o tmp\openssl.o -leay32 -lssl32 -L. -lwsock32 -lgdi32
|
||||
+
|
||||
echo Done compiling OpenSSL
|
||||
|
||||
:end
|
||||
-
|
||||
echo Done compiling OpenSSL
|
||||
|
||||
:end
|
||||
-
|
||||
diff -wur openssl-0.9.7m.orig/util/pl/Mingw32.pl openssl-0.9.7m/util/pl/Mingw32.pl
|
||||
--- openssl-0.9.7m.orig/util/pl/Mingw32.pl Sun May 16 23:28:32 2004
|
||||
+++ openssl-0.9.7m/util/pl/Mingw32.pl Mon Jan 21 17:52:36 2008
|
||||
|
|
|
|||
|
|
@ -27,30 +27,30 @@ diff -urw tmp/openssl-0.9.8h/ms/mw.bat openssl-0.9.8h/ms/mw.bat
|
|||
--- tmp/openssl-0.9.8h/ms/mw.bat Sat Feb 22 11:00:10 2003
|
||||
+++ openssl-0.9.8h/ms/mw.bat Wed Jun 4 02:56:54 2008
|
||||
@@ -1,17 +1,23 @@
|
||||
@rem OpenSSL with Mingw32
|
||||
@rem --------------------
|
||||
|
||||
@rem OpenSSL with Mingw32
|
||||
@rem --------------------
|
||||
|
||||
+@rem Include MinGW, MSYS, and ActiveState Perl in path
|
||||
+set PATH=c:\bin;C:\Perl\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\MinGW\bin;c:\msys\1.0\bin
|
||||
+
|
||||
@rem Makefile
|
||||
perl util\mkfiles.pl >MINFO
|
||||
-perl util\mk1mf.pl Mingw32 >ms\mingw32.mak
|
||||
@rem Makefile
|
||||
perl util\mkfiles.pl >MINFO
|
||||
-perl util\mk1mf.pl Mingw32 >ms\mingw32.mak
|
||||
+perl util\mk1mf.pl no-idea no-mdc2 no-rc5 Mingw32 >ms\mingw32.mak
|
||||
+
|
||||
@rem DLL definition files
|
||||
-perl util\mkdef.pl 32 libeay >ms\libeay32.def
|
||||
@rem DLL definition files
|
||||
-perl util\mkdef.pl 32 libeay >ms\libeay32.def
|
||||
+perl util\mkdef.pl no-idea no-mdc2 no-rc5 32 libeay >ms\libeay32.def
|
||||
if errorlevel 1 goto end
|
||||
-perl util\mkdef.pl 32 ssleay >ms\ssleay32.def
|
||||
if errorlevel 1 goto end
|
||||
-perl util\mkdef.pl 32 ssleay >ms\ssleay32.def
|
||||
+perl util\mkdef.pl no-idea no-mdc2 no-rc5 32 ssleay >ms\ssleay32.def
|
||||
if errorlevel 1 goto end
|
||||
|
||||
@rem Build the libraries
|
||||
-make -f ms/mingw32.mak
|
||||
if errorlevel 1 goto end
|
||||
|
||||
@rem Build the libraries
|
||||
-make -f ms/mingw32.mak
|
||||
+
|
||||
+@rem JY added --win32
|
||||
+make --win32 -f ms/mingw32.mak
|
||||
if errorlevel 1 goto end
|
||||
|
||||
@rem Generate the DLLs and input libraries
|
||||
if errorlevel 1 goto end
|
||||
|
||||
@rem Generate the DLLs and input libraries
|
||||
|
|
|
|||
|
|
@ -1,20 +1,20 @@
|
|||
/*
|
||||
* Minimum TAP-Win32 version number expected by userspace
|
||||
*
|
||||
* The TAP-Win32 version number is defined in tap-win32/SOURCES
|
||||
*/
|
||||
#define TAP_ID "@PRODUCT_TAP_ID@"
|
||||
#define TAP_WIN32_MIN_MAJOR @PRODUCT_TAP_WIN32_MIN_MAJOR@
|
||||
#define TAP_WIN32_MIN_MINOR @PRODUCT_TAP_WIN32_MIN_MINOR@
|
||||
|
||||
/* Name of package */
|
||||
#define PACKAGE "@PRODUCT_UNIX_NAME@"
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#define PACKAGE_NAME "@PRODUCT_NAME@"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "@PRODUCT_UNIX_NAME@"
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "@PRODUCT_VERSION@"
|
||||
/*
|
||||
* Minimum TAP-Win32 version number expected by userspace
|
||||
*
|
||||
* The TAP-Win32 version number is defined in tap-win32/SOURCES
|
||||
*/
|
||||
#define TAP_ID "@PRODUCT_TAP_ID@"
|
||||
#define TAP_WIN32_MIN_MAJOR @PRODUCT_TAP_WIN32_MIN_MAJOR@
|
||||
#define TAP_WIN32_MIN_MINOR @PRODUCT_TAP_WIN32_MIN_MINOR@
|
||||
|
||||
/* Name of package */
|
||||
#define PACKAGE "@PRODUCT_UNIX_NAME@"
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#define PACKAGE_NAME "@PRODUCT_NAME@"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "@PRODUCT_UNIX_NAME@"
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "@PRODUCT_VERSION@"
|
||||
|
|
|
|||
186
msvc/config.py
186
msvc/config.py
|
|
@ -1,93 +1,93 @@
|
|||
# build autodefs.h and
|
||||
|
||||
import re
|
||||
|
||||
autogen = "Automatically generated by config.py"
|
||||
|
||||
def parse_version_m4(kv, version_m4):
|
||||
r = re.compile(r'^define\((\w+),\[(.*)\]\)$')
|
||||
f = open(version_m4)
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
m = re.match(r, line)
|
||||
if m:
|
||||
g = m.groups()
|
||||
kv[g[0]] = g[1]
|
||||
f.close()
|
||||
|
||||
def parse_settings_in(kv, settings_in):
|
||||
r = re.compile(r'^!define\s+(\w+)(?:\s+"?(.*?)"?)$')
|
||||
f = open(settings_in)
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
m = re.match(r, line)
|
||||
if m:
|
||||
g = m.groups()
|
||||
kv[g[0]] = g[1] or ''
|
||||
f.close()
|
||||
|
||||
def build_autodefs(kv, autodefs_in, autodefs_out):
|
||||
def repfn(m):
|
||||
var, = m.groups()
|
||||
return kv.get(var, '')
|
||||
|
||||
r = re.compile(r'@(\w+)@')
|
||||
fin = open(autodefs_in)
|
||||
fout = open(autodefs_out, 'w')
|
||||
fout.write("/* %s */\n\n" % autogen)
|
||||
for line in fin:
|
||||
newline = re.sub(r, repfn, line)
|
||||
fout.write(newline)
|
||||
fin.close()
|
||||
fout.close()
|
||||
|
||||
def print_key_values(kv):
|
||||
for k, v in sorted(kv.items()):
|
||||
print "%s%s%s" % (k, ' '*(32-len(k)), repr(v))
|
||||
|
||||
def get_sources(makefile_am):
|
||||
c = set()
|
||||
h = set()
|
||||
f = open(makefile_am)
|
||||
state = False
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
if line == 'openvpn_SOURCES = \\':
|
||||
state = True
|
||||
elif not line:
|
||||
state = False
|
||||
elif state:
|
||||
for sf in line.split():
|
||||
if sf.endswith('.c'):
|
||||
c.add(sf[:-2])
|
||||
elif sf.endswith('.h'):
|
||||
h.add(sf[:-2])
|
||||
elif sf == '\\':
|
||||
pass
|
||||
else:
|
||||
print >>sys.stderr, "Unrecognized filename:", sf
|
||||
f.close()
|
||||
return [ sorted(list(s)) for s in (c, h) ]
|
||||
|
||||
def output_mak_list(out, title, srclist, ext):
|
||||
out.write("%s =" % (title,))
|
||||
for x in srclist:
|
||||
out.write(" \\\n\t%s.%s" % (x, ext))
|
||||
out.write('\n\n')
|
||||
|
||||
def output_mak(makefile_am, outfile):
|
||||
c, h = get_sources(makefile_am)
|
||||
out = open(outfile, 'w')
|
||||
out.write("# %s\n\n" % autogen)
|
||||
output_mak_list(out, 'HEADERS', h, 'h')
|
||||
output_mak_list(out, 'OBJS', c, 'obj')
|
||||
out.close()
|
||||
|
||||
def main():
|
||||
kv = {}
|
||||
parse_version_m4(kv, 'version.m4')
|
||||
parse_settings_in(kv, 'install-win32/settings.in')
|
||||
build_autodefs(kv, 'msvc/autodefs.h.in', 'autodefs.h')
|
||||
output_mak('Makefile.am', 'head_obj.mak')
|
||||
|
||||
main()
|
||||
# build autodefs.h and
|
||||
|
||||
import re
|
||||
|
||||
autogen = "Automatically generated by config.py"
|
||||
|
||||
def parse_version_m4(kv, version_m4):
|
||||
r = re.compile(r'^define\((\w+),\[(.*)\]\)$')
|
||||
f = open(version_m4)
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
m = re.match(r, line)
|
||||
if m:
|
||||
g = m.groups()
|
||||
kv[g[0]] = g[1]
|
||||
f.close()
|
||||
|
||||
def parse_settings_in(kv, settings_in):
|
||||
r = re.compile(r'^!define\s+(\w+)(?:\s+"?(.*?)"?)$')
|
||||
f = open(settings_in)
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
m = re.match(r, line)
|
||||
if m:
|
||||
g = m.groups()
|
||||
kv[g[0]] = g[1] or ''
|
||||
f.close()
|
||||
|
||||
def build_autodefs(kv, autodefs_in, autodefs_out):
|
||||
def repfn(m):
|
||||
var, = m.groups()
|
||||
return kv.get(var, '')
|
||||
|
||||
r = re.compile(r'@(\w+)@')
|
||||
fin = open(autodefs_in)
|
||||
fout = open(autodefs_out, 'w')
|
||||
fout.write("/* %s */\n\n" % autogen)
|
||||
for line in fin:
|
||||
newline = re.sub(r, repfn, line)
|
||||
fout.write(newline)
|
||||
fin.close()
|
||||
fout.close()
|
||||
|
||||
def print_key_values(kv):
|
||||
for k, v in sorted(kv.items()):
|
||||
print "%s%s%s" % (k, ' '*(32-len(k)), repr(v))
|
||||
|
||||
def get_sources(makefile_am):
|
||||
c = set()
|
||||
h = set()
|
||||
f = open(makefile_am)
|
||||
state = False
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
if line == 'openvpn_SOURCES = \\':
|
||||
state = True
|
||||
elif not line:
|
||||
state = False
|
||||
elif state:
|
||||
for sf in line.split():
|
||||
if sf.endswith('.c'):
|
||||
c.add(sf[:-2])
|
||||
elif sf.endswith('.h'):
|
||||
h.add(sf[:-2])
|
||||
elif sf == '\\':
|
||||
pass
|
||||
else:
|
||||
print >>sys.stderr, "Unrecognized filename:", sf
|
||||
f.close()
|
||||
return [ sorted(list(s)) for s in (c, h) ]
|
||||
|
||||
def output_mak_list(out, title, srclist, ext):
|
||||
out.write("%s =" % (title,))
|
||||
for x in srclist:
|
||||
out.write(" \\\n\t%s.%s" % (x, ext))
|
||||
out.write('\n\n')
|
||||
|
||||
def output_mak(makefile_am, outfile):
|
||||
c, h = get_sources(makefile_am)
|
||||
out = open(outfile, 'w')
|
||||
out.write("# %s\n\n" % autogen)
|
||||
output_mak_list(out, 'HEADERS', h, 'h')
|
||||
output_mak_list(out, 'OBJS', c, 'obj')
|
||||
out.close()
|
||||
|
||||
def main():
|
||||
kv = {}
|
||||
parse_version_m4(kv, 'version.m4')
|
||||
parse_settings_in(kv, 'install-win32/settings.in')
|
||||
build_autodefs(kv, 'msvc/autodefs.h.in', 'autodefs.h')
|
||||
output_mak('Makefile.am', 'head_obj.mak')
|
||||
|
||||
main()
|
||||
|
|
|
|||
104
msvc/msvc.mak
104
msvc/msvc.mak
|
|
@ -1,52 +1,52 @@
|
|||
# This makefile builds the user-mode component
|
||||
# of OpenVPN for Windows in the Visual Studio 2008 environment.
|
||||
|
||||
# To build:
|
||||
# python msvc\config.py
|
||||
# nmake /f msvc\msvc.mak
|
||||
|
||||
# Each of the OPENSSL and LZO dirs should have 'lib' and 'include'
|
||||
# directories under them.
|
||||
|
||||
OPENSSL = \src\openssl
|
||||
OPENSSL_DYNAMIC = libeay32.lib ssleay32.lib
|
||||
|
||||
LZO = \src\lzo
|
||||
LZO_DYNAMIC = lzo2.lib
|
||||
|
||||
INCLUDE_DIRS = -I$(OPENSSL)/include -I$(LZO)/include
|
||||
|
||||
LIBS = $(OPENSSL_DYNAMIC) $(LZO_DYNAMIC) ws2_32.lib crypt32.lib iphlpapi.lib winmm.lib user32.lib gdi32.lib advapi32.lib wininet.lib
|
||||
|
||||
LIB_DIRS = -LIBPATH:$(OPENSSL)\lib -LIBPATH:$(LZO)\lib
|
||||
|
||||
EXE = openvpn.exe
|
||||
|
||||
CPP=cl.exe
|
||||
CPP_ARG_COMMON=/nologo /W3 /O2 -DWIN32 -DWIN32_LEAN_AND_MEAN -D_CONSOLE -D_MBCS -D_CRT_SECURE_NO_DEPRECATE $(INCLUDE_DIRS) /FD /c
|
||||
# release:
|
||||
CPP_PROJ=$(CPP_ARG_COMMON) /MD -DNDEBUG
|
||||
# debug:
|
||||
#CPP_PROJ=$(CPP_ARG_COMMON) /MDd /Zi /Od -D_DEBUG
|
||||
|
||||
LINK32=link.exe
|
||||
# release:
|
||||
LINK32_FLAGS=/nologo /subsystem:console /incremental:no /out:"$(EXE)"
|
||||
# debug:
|
||||
#LINK32_FLAGS=/nologo /subsystem:console /incremental:no /debug /out:"$(EXE)"
|
||||
|
||||
# HEADERS and OBJS definitions, automatically generated
|
||||
!INCLUDE head_obj.mak
|
||||
|
||||
openvpn : $(OBJS)
|
||||
$(LINK32) @<<
|
||||
$(LINK32_FLAGS) $(LIB_DIRS) $(LIBS) $(OBJS)
|
||||
<<
|
||||
|
||||
clean :
|
||||
del /Q $(OBJS) $(EXE) *.idb *.pdb
|
||||
|
||||
.c.obj::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
# This makefile builds the user-mode component
|
||||
# of OpenVPN for Windows in the Visual Studio 2008 environment.
|
||||
|
||||
# To build:
|
||||
# python msvc\config.py
|
||||
# nmake /f msvc\msvc.mak
|
||||
|
||||
# Each of the OPENSSL and LZO dirs should have 'lib' and 'include'
|
||||
# directories under them.
|
||||
|
||||
OPENSSL = \src\openssl
|
||||
OPENSSL_DYNAMIC = libeay32.lib ssleay32.lib
|
||||
|
||||
LZO = \src\lzo
|
||||
LZO_DYNAMIC = lzo2.lib
|
||||
|
||||
INCLUDE_DIRS = -I$(OPENSSL)/include -I$(LZO)/include
|
||||
|
||||
LIBS = $(OPENSSL_DYNAMIC) $(LZO_DYNAMIC) ws2_32.lib crypt32.lib iphlpapi.lib winmm.lib user32.lib gdi32.lib advapi32.lib wininet.lib
|
||||
|
||||
LIB_DIRS = -LIBPATH:$(OPENSSL)\lib -LIBPATH:$(LZO)\lib
|
||||
|
||||
EXE = openvpn.exe
|
||||
|
||||
CPP=cl.exe
|
||||
CPP_ARG_COMMON=/nologo /W3 /O2 -DWIN32 -DWIN32_LEAN_AND_MEAN -D_CONSOLE -D_MBCS -D_CRT_SECURE_NO_DEPRECATE $(INCLUDE_DIRS) /FD /c
|
||||
# release:
|
||||
CPP_PROJ=$(CPP_ARG_COMMON) /MD -DNDEBUG
|
||||
# debug:
|
||||
#CPP_PROJ=$(CPP_ARG_COMMON) /MDd /Zi /Od -D_DEBUG
|
||||
|
||||
LINK32=link.exe
|
||||
# release:
|
||||
LINK32_FLAGS=/nologo /subsystem:console /incremental:no /out:"$(EXE)"
|
||||
# debug:
|
||||
#LINK32_FLAGS=/nologo /subsystem:console /incremental:no /debug /out:"$(EXE)"
|
||||
|
||||
# HEADERS and OBJS definitions, automatically generated
|
||||
!INCLUDE head_obj.mak
|
||||
|
||||
openvpn : $(OBJS)
|
||||
$(LINK32) @<<
|
||||
$(LINK32_FLAGS) $(LIB_DIRS) $(LIBS) $(OBJS)
|
||||
<<
|
||||
|
||||
clean :
|
||||
del /Q $(OBJS) $(EXE) *.idb *.pdb
|
||||
|
||||
.c.obj::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
|
|
|||
|
|
@ -1,31 +1,31 @@
|
|||
#ifndef AUTODEFS_H
|
||||
#define AUTODEFS_H
|
||||
|
||||
/*
|
||||
* Minimum TAP-Win32 version number expected by userspace
|
||||
*
|
||||
* The TAP-Win32 version number is defined in tap-win32/SOURCES
|
||||
*/
|
||||
#define TAP_ID "@PRODUCT_TAP_ID@"
|
||||
#define TAP_WIN32_MIN_MAJOR @PRODUCT_TAP_WIN32_MIN_MAJOR@
|
||||
#define TAP_WIN32_MIN_MINOR @PRODUCT_TAP_WIN32_MIN_MINOR@
|
||||
|
||||
/* Friendly name for TAP driver */
|
||||
#define PRODUCT_TAP_DEVICE_DESCRIPTION "@PRODUCT_TAP_DEVICE_DESCRIPTION@"
|
||||
|
||||
/* Version number of DDK/WDK used to build TAP driver */
|
||||
#define DDKVER_MAJOR @DDKVER_MAJOR@
|
||||
|
||||
/* Name of package */
|
||||
#define PACKAGE "@PRODUCT_UNIX_NAME@"
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#define PACKAGE_NAME "@PRODUCT_NAME@"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "@PRODUCT_UNIX_NAME@"
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "@PRODUCT_VERSION@"
|
||||
|
||||
#endif
|
||||
#ifndef AUTODEFS_H
|
||||
#define AUTODEFS_H
|
||||
|
||||
/*
|
||||
* Minimum TAP-Win32 version number expected by userspace
|
||||
*
|
||||
* The TAP-Win32 version number is defined in tap-win32/SOURCES
|
||||
*/
|
||||
#define TAP_ID "@PRODUCT_TAP_ID@"
|
||||
#define TAP_WIN32_MIN_MAJOR @PRODUCT_TAP_WIN32_MIN_MAJOR@
|
||||
#define TAP_WIN32_MIN_MINOR @PRODUCT_TAP_WIN32_MIN_MINOR@
|
||||
|
||||
/* Friendly name for TAP driver */
|
||||
#define PRODUCT_TAP_DEVICE_DESCRIPTION "@PRODUCT_TAP_DEVICE_DESCRIPTION@"
|
||||
|
||||
/* Version number of DDK/WDK used to build TAP driver */
|
||||
#define DDKVER_MAJOR @DDKVER_MAJOR@
|
||||
|
||||
/* Name of package */
|
||||
#define PACKAGE "@PRODUCT_UNIX_NAME@"
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#define PACKAGE_NAME "@PRODUCT_NAME@"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "@PRODUCT_UNIX_NAME@"
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "@PRODUCT_VERSION@"
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ def clean():
|
|||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) == 2 and sys.argv[1] == 'clean':
|
||||
clean()
|
||||
else:
|
||||
main()
|
||||
if len(sys.argv) == 2 and sys.argv[1] == 'clean':
|
||||
clean()
|
||||
else:
|
||||
main()
|
||||
|
|
|
|||
108
win/build_ddk.py
108
win/build_ddk.py
|
|
@ -1,55 +1,55 @@
|
|||
import os
|
||||
from wb import system, home_fn, choose_arch
|
||||
|
||||
def build_ddk(config, dir, x64):
|
||||
ddk_path = config['DDK_PATH']
|
||||
ddk_major = int(config['DDKVER_MAJOR'])
|
||||
debug = 'PRODUCT_TAP_DEBUG' in config
|
||||
return build_tap(ddk_path, ddk_major, debug, dir, x64)
|
||||
|
||||
def build_tap(ddk_path, ddk_major, debug, dir, x64):
|
||||
import os
|
||||
from wb import system, home_fn, choose_arch
|
||||
|
||||
def build_ddk(config, dir, x64):
|
||||
ddk_path = config['DDK_PATH']
|
||||
ddk_major = int(config['DDKVER_MAJOR'])
|
||||
debug = 'PRODUCT_TAP_DEBUG' in config
|
||||
return build_tap(ddk_path, ddk_major, debug, dir, x64)
|
||||
|
||||
def build_tap(ddk_path, ddk_major, debug, dir, x64):
|
||||
"""Build drivers using WinDDK tools"""
|
||||
setenv_bat = os.path.realpath(os.path.join(ddk_path, 'bin/setenv.bat'))
|
||||
target = 'chk' if debug else 'fre'
|
||||
if x64:
|
||||
target += ' x64'
|
||||
else:
|
||||
target += ' x86'
|
||||
if ddk_major >= 7600:
|
||||
if x64:
|
||||
target += ' wlh' # vista
|
||||
else:
|
||||
target += ' wnet' # server 2003
|
||||
else:
|
||||
if x64:
|
||||
target += ' wnet' # server 2003
|
||||
else:
|
||||
target += ' w2k' # 2000
|
||||
|
||||
system('cmd /c "%s %s %s && cd %s && build -cef"' % (
|
||||
setenv_bat,
|
||||
os.path.realpath(ddk_path),
|
||||
target,
|
||||
dir
|
||||
))
|
||||
|
||||
def main(config, proj, arch):
|
||||
if proj == 'tap':
|
||||
dir = home_fn('tap-win32')
|
||||
elif proj == 'tapinstall':
|
||||
dir = home_fn('tapinstall')
|
||||
else:
|
||||
raise ValueError("unknown project: %s" % (proj,))
|
||||
|
||||
for x64 in choose_arch(arch):
|
||||
build_ddk(config, dir, x64)
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
from wb import config
|
||||
if len(sys.argv) >= 3:
|
||||
main(config, sys.argv[1], sys.argv[2])
|
||||
else:
|
||||
print "usage: build <tap|tapinstall> <x64|x86|all>"
|
||||
sys.exit(2)
|
||||
setenv_bat = os.path.realpath(os.path.join(ddk_path, 'bin/setenv.bat'))
|
||||
target = 'chk' if debug else 'fre'
|
||||
if x64:
|
||||
target += ' x64'
|
||||
else:
|
||||
target += ' x86'
|
||||
if ddk_major >= 7600:
|
||||
if x64:
|
||||
target += ' wlh' # vista
|
||||
else:
|
||||
target += ' wnet' # server 2003
|
||||
else:
|
||||
if x64:
|
||||
target += ' wnet' # server 2003
|
||||
else:
|
||||
target += ' w2k' # 2000
|
||||
|
||||
system('cmd /c "%s %s %s && cd %s && build -cef"' % (
|
||||
setenv_bat,
|
||||
os.path.realpath(ddk_path),
|
||||
target,
|
||||
dir
|
||||
))
|
||||
|
||||
def main(config, proj, arch):
|
||||
if proj == 'tap':
|
||||
dir = home_fn('tap-win32')
|
||||
elif proj == 'tapinstall':
|
||||
dir = home_fn('tapinstall')
|
||||
else:
|
||||
raise ValueError("unknown project: %s" % (proj,))
|
||||
|
||||
for x64 in choose_arch(arch):
|
||||
build_ddk(config, dir, x64)
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
from wb import config
|
||||
if len(sys.argv) >= 3:
|
||||
main(config, sys.argv[1], sys.argv[2])
|
||||
else:
|
||||
print "usage: build <tap|tapinstall> <x64|x86|all>"
|
||||
sys.exit(2)
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
from config import main as config_main
|
||||
from build import main as build_openvpn
|
||||
from build_ddk import main as build_ddk
|
||||
from sign import main as sign
|
||||
from make_dist import main as make_dist
|
||||
|
||||
def main(config):
|
||||
config_main(config)
|
||||
build_openvpn()
|
||||
make_dist(config, tap=False)
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
from wb import config
|
||||
main(config)
|
||||
from config import main as config_main
|
||||
from build import main as build_openvpn
|
||||
from build_ddk import main as build_ddk
|
||||
from sign import main as sign
|
||||
from make_dist import main as make_dist
|
||||
|
||||
def main(config):
|
||||
config_main(config)
|
||||
build_openvpn()
|
||||
make_dist(config, tap=False)
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
from wb import config
|
||||
main(config)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
from config import main as config_main
|
||||
from config_tap import main as config_tap
|
||||
from config_ti import main as config_ti
|
||||
|
||||
def main(config):
|
||||
config_main(config)
|
||||
config_tap(config)
|
||||
config_ti(config)
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
from wb import config
|
||||
main(config)
|
||||
from config import main as config_main
|
||||
from config_tap import main as config_tap
|
||||
from config_ti import main as config_ti
|
||||
|
||||
def main(config):
|
||||
config_main(config)
|
||||
config_tap(config)
|
||||
config_ti(config)
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
from wb import config
|
||||
main(config)
|
||||
|
|
|
|||
|
|
@ -1,35 +1,35 @@
|
|||
import os
|
||||
from wb import preprocess, home_fn, autogen, dict_def
|
||||
|
||||
def main(config):
|
||||
preprocess(config,
|
||||
in_fn=home_fn('tap-win32/SOURCES.in'),
|
||||
out_fn=home_fn('tap-win32/SOURCES'),
|
||||
quote_begin='@@',
|
||||
quote_end='@@',
|
||||
head_comment='# %s\n\n' % autogen)
|
||||
|
||||
preprocess(config,
|
||||
in_fn=home_fn('tap-win32/i386/OemWin2k.inf.in'),
|
||||
out_fn=home_fn('tap-win32/i386/OemWin2k.inf'),
|
||||
quote_begin='@@',
|
||||
quote_end='@@',
|
||||
if_prefix='!',
|
||||
head_comment='; %s\n\n' % autogen)
|
||||
|
||||
try:
|
||||
os.mkdir(home_fn('tap-win32/amd64'))
|
||||
except:
|
||||
pass
|
||||
preprocess(dict_def(config, [('AMD64', '1')]),
|
||||
in_fn=home_fn('tap-win32/i386/OemWin2k.inf.in'),
|
||||
out_fn=home_fn('tap-win32/amd64/OemWin2k.inf'),
|
||||
quote_begin='@@',
|
||||
quote_end='@@',
|
||||
if_prefix='!',
|
||||
head_comment='; %s\n\n' % autogen)
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
from wb import config
|
||||
main(config)
|
||||
import os
|
||||
from wb import preprocess, home_fn, autogen, dict_def
|
||||
|
||||
def main(config):
|
||||
preprocess(config,
|
||||
in_fn=home_fn('tap-win32/SOURCES.in'),
|
||||
out_fn=home_fn('tap-win32/SOURCES'),
|
||||
quote_begin='@@',
|
||||
quote_end='@@',
|
||||
head_comment='# %s\n\n' % autogen)
|
||||
|
||||
preprocess(config,
|
||||
in_fn=home_fn('tap-win32/i386/OemWin2k.inf.in'),
|
||||
out_fn=home_fn('tap-win32/i386/OemWin2k.inf'),
|
||||
quote_begin='@@',
|
||||
quote_end='@@',
|
||||
if_prefix='!',
|
||||
head_comment='; %s\n\n' % autogen)
|
||||
|
||||
try:
|
||||
os.mkdir(home_fn('tap-win32/amd64'))
|
||||
except:
|
||||
pass
|
||||
preprocess(dict_def(config, [('AMD64', '1')]),
|
||||
in_fn=home_fn('tap-win32/i386/OemWin2k.inf.in'),
|
||||
out_fn=home_fn('tap-win32/amd64/OemWin2k.inf'),
|
||||
quote_begin='@@',
|
||||
quote_end='@@',
|
||||
if_prefix='!',
|
||||
head_comment='; %s\n\n' % autogen)
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
from wb import config
|
||||
main(config)
|
||||
|
|
|
|||
|
|
@ -1,18 +1,18 @@
|
|||
import os, shutil
|
||||
from wb import preprocess, home_fn, autogen
|
||||
|
||||
def main(config):
|
||||
src = os.path.join(home_fn(config['TISRC']), config['DDKVER_MAJOR'])
|
||||
dest = home_fn('tapinstall')
|
||||
shutil.rmtree(dest, ignore_errors=True)
|
||||
shutil.copytree(src, dest)
|
||||
preprocess(config,
|
||||
in_fn=os.path.join(dest, 'sources.in'),
|
||||
out_fn=os.path.join(dest, 'sources'),
|
||||
if_prefix='!',
|
||||
head_comment='# %s\n\n' % autogen)
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
from wb import config
|
||||
main(config)
|
||||
import os, shutil
|
||||
from wb import preprocess, home_fn, autogen
|
||||
|
||||
def main(config):
|
||||
src = os.path.join(home_fn(config['TISRC']), config['DDKVER_MAJOR'])
|
||||
dest = home_fn('tapinstall')
|
||||
shutil.rmtree(dest, ignore_errors=True)
|
||||
shutil.copytree(src, dest)
|
||||
preprocess(config,
|
||||
in_fn=os.path.join(dest, 'sources.in'),
|
||||
out_fn=os.path.join(dest, 'sources'),
|
||||
if_prefix='!',
|
||||
head_comment='# %s\n\n' % autogen)
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
from wb import config
|
||||
main(config)
|
||||
|
|
|
|||
20
win/js.py
20
win/js.py
|
|
@ -1,10 +1,10 @@
|
|||
import json
|
||||
|
||||
# usage:
|
||||
# print JSON().encode(kv)
|
||||
|
||||
class JSON(json.JSONEncoder):
|
||||
def __init__(self, **kwargs):
|
||||
args = dict(sort_keys=True, indent=2)
|
||||
args.update(kwargs)
|
||||
json.JSONEncoder.__init__(self, **args)
|
||||
import json
|
||||
|
||||
# usage:
|
||||
# print JSON().encode(kv)
|
||||
|
||||
class JSON(json.JSONEncoder):
|
||||
def __init__(self, **kwargs):
|
||||
args = dict(sort_keys=True, indent=2)
|
||||
args.update(kwargs)
|
||||
json.JSONEncoder.__init__(self, **args)
|
||||
|
|
|
|||
|
|
@ -3,14 +3,14 @@ from wb import home_fn, rm_rf, mkdir, cp_a, cp, rename, run_in_vs_shell
|
|||
|
||||
def main(config, tap=True):
|
||||
dist = config['DIST']
|
||||
assert dist
|
||||
dist = home_fn(dist)
|
||||
bin = os.path.join(dist, 'bin')
|
||||
i386 = os.path.join(dist, 'i386')
|
||||
amd64 = os.path.join(dist, 'amd64')
|
||||
assert dist
|
||||
dist = home_fn(dist)
|
||||
bin = os.path.join(dist, 'bin')
|
||||
i386 = os.path.join(dist, 'i386')
|
||||
amd64 = os.path.join(dist, 'amd64')
|
||||
samples = os.path.join(dist, 'samples')
|
||||
|
||||
# build dist and subdirectories
|
||||
|
||||
# build dist and subdirectories
|
||||
rm_rf(dist)
|
||||
mkdir(dist)
|
||||
mkdir(bin)
|
||||
|
|
@ -19,19 +19,19 @@ def main(config, tap=True):
|
|||
mkdir(samples)
|
||||
|
||||
# copy openvpn.exe, openvpnserv.exe and their manifests
|
||||
cp(home_fn('openvpn.exe'), bin)
|
||||
cp(home_fn('openvpn.exe.manifest'), bin)
|
||||
cp(home_fn('openvpn.exe'), bin)
|
||||
cp(home_fn('openvpn.exe.manifest'), bin)
|
||||
cp(home_fn('service-win32/openvpnserv.exe'), bin)
|
||||
cp(home_fn('service-win32/openvpnserv.exe.manifest'), bin)
|
||||
|
||||
# copy openvpn-gui
|
||||
cp(home_fn(config['OPENVPN_GUI_DIR']+"/"+config['OPENVPN_GUI']), bin)
|
||||
|
||||
# copy DLL dependencies
|
||||
cp(home_fn(config['LZO_DIR']+'/bin/lzo2.dll'), bin)
|
||||
|
||||
# copy DLL dependencies
|
||||
cp(home_fn(config['LZO_DIR']+'/bin/lzo2.dll'), bin)
|
||||
cp(home_fn(config['LZO_DIR']+'/bin/lzo2.dll.manifest'), bin)
|
||||
cp(home_fn(config['OPENSSL_DIR']+'/bin/libeay32.dll'), bin)
|
||||
cp(home_fn(config['OPENSSL_DIR']+'/bin/ssleay32.dll'), bin)
|
||||
cp(home_fn(config['OPENSSL_DIR']+'/bin/libeay32.dll'), bin)
|
||||
cp(home_fn(config['OPENSSL_DIR']+'/bin/ssleay32.dll'), bin)
|
||||
cp(home_fn(config['PKCS11_HELPER_DIR']+'/lib/libpkcs11-helper-1.dll'), bin)
|
||||
cp(home_fn(config['PKCS11_HELPER_DIR']+'/lib/libpkcs11-helper-1.dll.manifest'), bin)
|
||||
|
||||
|
|
@ -103,5 +103,5 @@ def main(config, tap=True):
|
|||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
from wb import config
|
||||
main(config)
|
||||
from wb import config
|
||||
main(config)
|
||||
|
|
|
|||
|
|
@ -7,51 +7,51 @@
|
|||
#
|
||||
# - Everything between @<< and << is inserted into a s.c. "in-line file". This
|
||||
# file drives the linker (link.exe).
|
||||
# - HEADERS_OBJS is expanded to all all header and source files listed in
|
||||
# - HEADERS_OBJS is expanded to all all header and source files listed in
|
||||
# ..\Makefile.am
|
||||
# - OPENSSL_DIR and LZO_DIR are dynamically created from settings.in
|
||||
|
||||
OPENSSL = @OPENSSL_DIR@
|
||||
OPENSSL_DYNAMIC = libeay32.lib ssleay32.lib
|
||||
|
||||
LZO = @LZO_DIR@
|
||||
LZO_DYNAMIC = lzo2.lib
|
||||
|
||||
INCLUDE_DIRS = -I$(OPENSSL)/include -I$(LZO)/include
|
||||
|
||||
LIBS = $(OPENSSL_DYNAMIC) $(LZO_DYNAMIC) ws2_32.lib crypt32.lib iphlpapi.lib winmm.lib user32.lib gdi32.lib advapi32.lib wininet.lib
|
||||
|
||||
LIB_DIRS = -LIBPATH:$(OPENSSL)\lib -LIBPATH:$(LZO)\lib
|
||||
|
||||
EXE = openvpn.exe
|
||||
|
||||
CPP=cl.exe
|
||||
CPP_ARG_COMMON=/nologo /W3 -DWIN32 -DWIN32_LEAN_AND_MEAN -D_CONSOLE -D_MBCS -D_CRT_SECURE_NO_DEPRECATE $(INCLUDE_DIRS) /FD /c
|
||||
|
||||
LINK32=link.exe
|
||||
|
||||
!ifdef PRODUCT_OPENVPN_DEBUG
|
||||
# debug:
|
||||
CPP_PROJ=$(CPP_ARG_COMMON) /MD /Z7
|
||||
|
||||
OPENSSL = @OPENSSL_DIR@
|
||||
OPENSSL_DYNAMIC = libeay32.lib ssleay32.lib
|
||||
|
||||
LZO = @LZO_DIR@
|
||||
LZO_DYNAMIC = lzo2.lib
|
||||
|
||||
INCLUDE_DIRS = -I$(OPENSSL)/include -I$(LZO)/include
|
||||
|
||||
LIBS = $(OPENSSL_DYNAMIC) $(LZO_DYNAMIC) ws2_32.lib crypt32.lib iphlpapi.lib winmm.lib user32.lib gdi32.lib advapi32.lib wininet.lib
|
||||
|
||||
LIB_DIRS = -LIBPATH:$(OPENSSL)\lib -LIBPATH:$(LZO)\lib
|
||||
|
||||
EXE = openvpn.exe
|
||||
|
||||
CPP=cl.exe
|
||||
CPP_ARG_COMMON=/nologo /W3 -DWIN32 -DWIN32_LEAN_AND_MEAN -D_CONSOLE -D_MBCS -D_CRT_SECURE_NO_DEPRECATE $(INCLUDE_DIRS) /FD /c
|
||||
|
||||
LINK32=link.exe
|
||||
|
||||
!ifdef PRODUCT_OPENVPN_DEBUG
|
||||
# debug:
|
||||
CPP_PROJ=$(CPP_ARG_COMMON) /MD /Z7
|
||||
LINK32_FLAGS=/nologo /subsystem:console /incremental:no /opt:ref /opt:icf /debug
|
||||
!else
|
||||
# release:
|
||||
CPP_PROJ=$(CPP_ARG_COMMON) /O2 /MD -DNDEBUG
|
||||
!else
|
||||
# release:
|
||||
CPP_PROJ=$(CPP_ARG_COMMON) /O2 /MD -DNDEBUG
|
||||
LINK32_FLAGS=/nologo /subsystem:console /incremental:no
|
||||
!endif
|
||||
|
||||
!endif
|
||||
|
||||
# HEADERS and OBJS definitions, automatically generated from ../Makefile.am
|
||||
@HEADERS_OBJS@
|
||||
|
||||
openvpn : $(OBJS)
|
||||
$(LINK32) @<<
|
||||
@HEADERS_OBJS@
|
||||
|
||||
openvpn : $(OBJS)
|
||||
$(LINK32) @<<
|
||||
$(LINK32_FLAGS) "/out:$(EXE)" $(LIB_DIRS) $(LIBS) $(OBJS)
|
||||
<<
|
||||
|
||||
clean :
|
||||
del /Q $(OBJS) $(EXE) *.idb *.pdb
|
||||
|
||||
.c.obj::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
<<
|
||||
|
||||
clean :
|
||||
del /Q $(OBJS) $(EXE) *.idb *.pdb
|
||||
|
||||
.c.obj::
|
||||
$(CPP) @<<
|
||||
$(CPP_PROJ) $<
|
||||
<<
|
||||
|
|
|
|||
14
win/show.py
14
win/show.py
|
|
@ -1,9 +1,9 @@
|
|||
from wb import get_config
|
||||
from js import JSON
|
||||
|
||||
def main():
|
||||
from js import JSON
|
||||
|
||||
def main():
|
||||
print JSON().encode(get_config())
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
|
|||
38
win/sign.py
38
win/sign.py
|
|
@ -1,19 +1,19 @@
|
|||
import sys
|
||||
from wb import config, choose_arch, home_fn
|
||||
|
||||
if 'SIGNTOOL' in config:
|
||||
sys.path.append(home_fn(config['SIGNTOOL']))
|
||||
|
||||
def main(conf, arch):
|
||||
from signtool import SignTool
|
||||
st = SignTool(conf)
|
||||
for x64 in choose_arch(arch):
|
||||
st.sign_verify(x64=x64)
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) >= 2:
|
||||
main(config, sys.argv[1])
|
||||
else:
|
||||
print "usage: sign <x64|x86|all>"
|
||||
sys.exit(2)
|
||||
import sys
|
||||
from wb import config, choose_arch, home_fn
|
||||
|
||||
if 'SIGNTOOL' in config:
|
||||
sys.path.append(home_fn(config['SIGNTOOL']))
|
||||
|
||||
def main(conf, arch):
|
||||
from signtool import SignTool
|
||||
st = SignTool(conf)
|
||||
for x64 in choose_arch(arch):
|
||||
st.sign_verify(x64=x64)
|
||||
|
||||
# if we are run directly, and not loaded as a module
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) >= 2:
|
||||
main(config, sys.argv[1])
|
||||
else:
|
||||
print "usage: sign <x64|x86|all>"
|
||||
sys.exit(2)
|
||||
|
|
|
|||
244
win/tap_span.py
244
win/tap_span.py
|
|
@ -1,28 +1,28 @@
|
|||
import sys, os, shutil
|
||||
from wb import config, home_fn, mod_fn, preprocess, autogen, dict_def, build_autodefs, rm_rf, mkdir_silent, cp
|
||||
if 'SIGNTOOL' in config:
|
||||
sys.path.append(home_fn(config['SIGNTOOL']))
|
||||
from signtool import SignTool
|
||||
from build_ddk import build_tap
|
||||
|
||||
ti_dir = "c:/src/tapinstall"
|
||||
hi = ("c:/winddk/7600.16385.1", 7600, 7600, ("i386", "amd64"))
|
||||
low = ("c:/winddk/6001.18002", 6001, 5600, ("win2k",))
|
||||
dest_top = home_fn('tap_build')
|
||||
dist = home_fn(config['TAP_DIST'])
|
||||
|
||||
def copy_tap(src, dest, x64):
|
||||
dir = os.path.join(src, { False : 'i386', True: 'amd64' }[x64])
|
||||
mkdir_silent(dest)
|
||||
for dirpath, dirnames, filenames in os.walk(dir):
|
||||
for f in filenames:
|
||||
root, ext = os.path.splitext(f)
|
||||
if ext in ('.inf', '.cat', '.sys'):
|
||||
cp(os.path.join(dir, f), dest)
|
||||
break
|
||||
|
||||
def copy_tapinstall(src, dest, x64):
|
||||
base = { False : 'i386', True: 'amd64' }[x64]
|
||||
import sys, os, shutil
|
||||
from wb import config, home_fn, mod_fn, preprocess, autogen, dict_def, build_autodefs, rm_rf, mkdir_silent, cp
|
||||
if 'SIGNTOOL' in config:
|
||||
sys.path.append(home_fn(config['SIGNTOOL']))
|
||||
from signtool import SignTool
|
||||
from build_ddk import build_tap
|
||||
|
||||
ti_dir = "c:/src/tapinstall"
|
||||
hi = ("c:/winddk/7600.16385.1", 7600, 7600, ("i386", "amd64"))
|
||||
low = ("c:/winddk/6001.18002", 6001, 5600, ("win2k",))
|
||||
dest_top = home_fn('tap_build')
|
||||
dist = home_fn(config['TAP_DIST'])
|
||||
|
||||
def copy_tap(src, dest, x64):
|
||||
dir = os.path.join(src, { False : 'i386', True: 'amd64' }[x64])
|
||||
mkdir_silent(dest)
|
||||
for dirpath, dirnames, filenames in os.walk(dir):
|
||||
for f in filenames:
|
||||
root, ext = os.path.splitext(f)
|
||||
if ext in ('.inf', '.cat', '.sys'):
|
||||
cp(os.path.join(dir, f), dest)
|
||||
break
|
||||
|
||||
def copy_tapinstall(src, dest, x64):
|
||||
base = { False : 'i386', True: 'amd64' }[x64]
|
||||
mkdir_silent(dest)
|
||||
for dirpath, dirnames, filenames in os.walk(home_fn(src)):
|
||||
for f in filenames:
|
||||
|
|
@ -30,100 +30,100 @@ def copy_tapinstall(src, dest, x64):
|
|||
dir_name = os.path.basename(dirpath)
|
||||
s = os.path.join(dirpath, f)
|
||||
if dir_name == base:
|
||||
cp(s, dest)
|
||||
|
||||
def main():
|
||||
rm_rf(dest_top)
|
||||
os.mkdir(dest_top)
|
||||
|
||||
rm_rf(dist)
|
||||
os.mkdir(dist)
|
||||
|
||||
for ver in hi, low:
|
||||
top = os.path.join(dest_top, str(ver[1]))
|
||||
os.mkdir(top)
|
||||
tap_dest = os.path.join(top, "tap-win32")
|
||||
ti_dest = os.path.join(top, "tapinstall")
|
||||
ti_src = os.path.join(ti_dir, str(ver[2]))
|
||||
shutil.copytree(home_fn("tap-win32"), tap_dest)
|
||||
shutil.copytree(ti_src, ti_dest)
|
||||
|
||||
i386 = os.path.join(tap_dest, "i386")
|
||||
amd64 = os.path.join(tap_dest, "amd64")
|
||||
|
||||
build_amd64 = (len(ver[3]) >= 2)
|
||||
|
||||
build_autodefs(config, mod_fn('autodefs.h.in'), os.path.join(top, 'autodefs.h'))
|
||||
|
||||
st = SignTool(config, tap_dest)
|
||||
|
||||
preprocess(config,
|
||||
in_fn=os.path.join(tap_dest, 'SOURCES.in'),
|
||||
out_fn=os.path.join(tap_dest, 'SOURCES'),
|
||||
quote_begin='@@',
|
||||
quote_end='@@',
|
||||
head_comment='# %s\n\n' % autogen)
|
||||
|
||||
preprocess(config,
|
||||
in_fn=os.path.join(i386, 'OemWin2k.inf.in'),
|
||||
out_fn=os.path.join(i386, 'OemWin2k.inf'),
|
||||
quote_begin='@@',
|
||||
quote_end='@@',
|
||||
if_prefix='!',
|
||||
head_comment='; %s\n\n' % autogen)
|
||||
|
||||
preprocess(config,
|
||||
in_fn=os.path.join(ti_dest, 'sources.in'),
|
||||
out_fn=os.path.join(ti_dest, 'sources'),
|
||||
if_prefix='!',
|
||||
head_comment='# %s\n\n' % autogen)
|
||||
|
||||
build_tap(ddk_path=ver[0],
|
||||
ddk_major=ver[1],
|
||||
debug=False,
|
||||
dir=tap_dest,
|
||||
x64=False)
|
||||
|
||||
st.sign_verify(x64=False)
|
||||
|
||||
build_tap(ddk_path=ver[0],
|
||||
ddk_major=ver[1],
|
||||
debug=False,
|
||||
dir=ti_dest,
|
||||
x64=False)
|
||||
|
||||
tap_dist = os.path.join(dist, ver[3][0])
|
||||
|
||||
copy_tap(tap_dest, tap_dist, x64=False)
|
||||
copy_tapinstall(ti_dest, tap_dist, x64=False)
|
||||
|
||||
if build_amd64:
|
||||
os.mkdir(amd64)
|
||||
preprocess(dict_def(config, [('AMD64', '1')]),
|
||||
in_fn=os.path.join(i386, 'OemWin2k.inf.in'),
|
||||
out_fn=os.path.join(amd64, 'OemWin2k.inf'),
|
||||
quote_begin='@@',
|
||||
quote_end='@@',
|
||||
if_prefix='!',
|
||||
head_comment='; %s\n\n' % autogen)
|
||||
|
||||
build_tap(ddk_path=ver[0],
|
||||
ddk_major=ver[1],
|
||||
debug=False,
|
||||
dir=tap_dest,
|
||||
x64=True)
|
||||
|
||||
build_tap(ddk_path=ver[0],
|
||||
ddk_major=ver[1],
|
||||
debug=False,
|
||||
dir=ti_dest,
|
||||
x64=True)
|
||||
|
||||
st.sign_verify(x64=True)
|
||||
|
||||
tap_dist_x64 = os.path.join(dist, ver[3][1])
|
||||
|
||||
copy_tap(tap_dest, tap_dist_x64, x64=True)
|
||||
copy_tapinstall(ti_dest, tap_dist_x64, x64=True)
|
||||
|
||||
main()
|
||||
cp(s, dest)
|
||||
|
||||
def main():
|
||||
rm_rf(dest_top)
|
||||
os.mkdir(dest_top)
|
||||
|
||||
rm_rf(dist)
|
||||
os.mkdir(dist)
|
||||
|
||||
for ver in hi, low:
|
||||
top = os.path.join(dest_top, str(ver[1]))
|
||||
os.mkdir(top)
|
||||
tap_dest = os.path.join(top, "tap-win32")
|
||||
ti_dest = os.path.join(top, "tapinstall")
|
||||
ti_src = os.path.join(ti_dir, str(ver[2]))
|
||||
shutil.copytree(home_fn("tap-win32"), tap_dest)
|
||||
shutil.copytree(ti_src, ti_dest)
|
||||
|
||||
i386 = os.path.join(tap_dest, "i386")
|
||||
amd64 = os.path.join(tap_dest, "amd64")
|
||||
|
||||
build_amd64 = (len(ver[3]) >= 2)
|
||||
|
||||
build_autodefs(config, mod_fn('autodefs.h.in'), os.path.join(top, 'autodefs.h'))
|
||||
|
||||
st = SignTool(config, tap_dest)
|
||||
|
||||
preprocess(config,
|
||||
in_fn=os.path.join(tap_dest, 'SOURCES.in'),
|
||||
out_fn=os.path.join(tap_dest, 'SOURCES'),
|
||||
quote_begin='@@',
|
||||
quote_end='@@',
|
||||
head_comment='# %s\n\n' % autogen)
|
||||
|
||||
preprocess(config,
|
||||
in_fn=os.path.join(i386, 'OemWin2k.inf.in'),
|
||||
out_fn=os.path.join(i386, 'OemWin2k.inf'),
|
||||
quote_begin='@@',
|
||||
quote_end='@@',
|
||||
if_prefix='!',
|
||||
head_comment='; %s\n\n' % autogen)
|
||||
|
||||
preprocess(config,
|
||||
in_fn=os.path.join(ti_dest, 'sources.in'),
|
||||
out_fn=os.path.join(ti_dest, 'sources'),
|
||||
if_prefix='!',
|
||||
head_comment='# %s\n\n' % autogen)
|
||||
|
||||
build_tap(ddk_path=ver[0],
|
||||
ddk_major=ver[1],
|
||||
debug=False,
|
||||
dir=tap_dest,
|
||||
x64=False)
|
||||
|
||||
st.sign_verify(x64=False)
|
||||
|
||||
build_tap(ddk_path=ver[0],
|
||||
ddk_major=ver[1],
|
||||
debug=False,
|
||||
dir=ti_dest,
|
||||
x64=False)
|
||||
|
||||
tap_dist = os.path.join(dist, ver[3][0])
|
||||
|
||||
copy_tap(tap_dest, tap_dist, x64=False)
|
||||
copy_tapinstall(ti_dest, tap_dist, x64=False)
|
||||
|
||||
if build_amd64:
|
||||
os.mkdir(amd64)
|
||||
preprocess(dict_def(config, [('AMD64', '1')]),
|
||||
in_fn=os.path.join(i386, 'OemWin2k.inf.in'),
|
||||
out_fn=os.path.join(amd64, 'OemWin2k.inf'),
|
||||
quote_begin='@@',
|
||||
quote_end='@@',
|
||||
if_prefix='!',
|
||||
head_comment='; %s\n\n' % autogen)
|
||||
|
||||
build_tap(ddk_path=ver[0],
|
||||
ddk_major=ver[1],
|
||||
debug=False,
|
||||
dir=tap_dest,
|
||||
x64=True)
|
||||
|
||||
build_tap(ddk_path=ver[0],
|
||||
ddk_major=ver[1],
|
||||
debug=False,
|
||||
dir=ti_dest,
|
||||
x64=True)
|
||||
|
||||
st.sign_verify(x64=True)
|
||||
|
||||
tap_dist_x64 = os.path.join(dist, ver[3][1])
|
||||
|
||||
copy_tap(tap_dest, tap_dist_x64, x64=True)
|
||||
copy_tapinstall(ti_dest, tap_dist_x64, x64=True)
|
||||
|
||||
main()
|
||||
|
|
|
|||
388
win/wb.py
388
win/wb.py
|
|
@ -1,46 +1,46 @@
|
|||
# Python module containing general build functions
|
||||
# for OpenVPN on Windows
|
||||
|
||||
import os, re, shutil, stat
|
||||
|
||||
autogen = "Automatically generated by OpenVPN Windows build system"
|
||||
|
||||
def get_config():
|
||||
kv = {}
|
||||
parse_version_m4(kv, home_fn('version.m4'))
|
||||
parse_settings_in(kv, mod_fn('settings.in'))
|
||||
|
||||
# config fixups
|
||||
kv['DDKVER'] = os.path.basename(kv['DDK_PATH'])
|
||||
kv['DDKVER_MAJOR'] = re.match(r'^(\d+)\.', kv['DDKVER']).groups()[0]
|
||||
|
||||
if 'VERSION_SUFFIX' in kv:
|
||||
kv['PRODUCT_VERSION'] += kv['VERSION_SUFFIX']
|
||||
|
||||
return kv
|
||||
|
||||
# Python module containing general build functions
|
||||
# for OpenVPN on Windows
|
||||
|
||||
import os, re, shutil, stat
|
||||
|
||||
autogen = "Automatically generated by OpenVPN Windows build system"
|
||||
|
||||
def get_config():
|
||||
kv = {}
|
||||
parse_version_m4(kv, home_fn('version.m4'))
|
||||
parse_settings_in(kv, mod_fn('settings.in'))
|
||||
|
||||
# config fixups
|
||||
kv['DDKVER'] = os.path.basename(kv['DDK_PATH'])
|
||||
kv['DDKVER_MAJOR'] = re.match(r'^(\d+)\.', kv['DDKVER']).groups()[0]
|
||||
|
||||
if 'VERSION_SUFFIX' in kv:
|
||||
kv['PRODUCT_VERSION'] += kv['VERSION_SUFFIX']
|
||||
|
||||
return kv
|
||||
|
||||
def get_build_params():
|
||||
kv = {}
|
||||
parse_build_params(kv,mod_fn('settings.in'))
|
||||
|
||||
return kv
|
||||
|
||||
def mod_fn(fn, src=__file__, real=True):
|
||||
p = os.path.join(os.path.dirname(src), os.path.normpath(fn))
|
||||
if real:
|
||||
p = os.path.realpath(p)
|
||||
return p
|
||||
|
||||
def home_fn(fn, real=True):
|
||||
return mod_fn(os.path.join('..', fn), real=real)
|
||||
|
||||
def cd_home():
|
||||
os.chdir(os.path.join(os.path.dirname(__file__), '..'))
|
||||
|
||||
def mod_fn(fn, src=__file__, real=True):
|
||||
p = os.path.join(os.path.dirname(src), os.path.normpath(fn))
|
||||
if real:
|
||||
p = os.path.realpath(p)
|
||||
return p
|
||||
|
||||
def home_fn(fn, real=True):
|
||||
return mod_fn(os.path.join('..', fn), real=real)
|
||||
|
||||
def cd_home():
|
||||
os.chdir(os.path.join(os.path.dirname(__file__), '..'))
|
||||
|
||||
def cd_service_win32():
|
||||
os.chdir(os.path.join(os.path.dirname(__file__), '../service-win32'))
|
||||
|
||||
def system(cmd):
|
||||
def system(cmd):
|
||||
print "RUN:", cmd
|
||||
os.system(cmd)
|
||||
|
||||
|
|
@ -52,16 +52,16 @@ def run_in_vs_shell(cmd):
|
|||
def parse_version_m4(kv, version_m4):
|
||||
'''Parse define lines in version.m4'''
|
||||
r = re.compile(r'^define\((\w+),\[(.*)\]\)$')
|
||||
f = open(version_m4)
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
m = re.match(r, line)
|
||||
f = open(version_m4)
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
m = re.match(r, line)
|
||||
|
||||
if m:
|
||||
g = m.groups()
|
||||
if m:
|
||||
g = m.groups()
|
||||
|
||||
# If we encounter PRODUCT_TAP_WIN32_MIN_MAJOR or
|
||||
# PRODUCT_TAP_WIN32_MIN_MAJOR then we need to generate extra
|
||||
# If we encounter PRODUCT_TAP_WIN32_MIN_MAJOR or
|
||||
# PRODUCT_TAP_WIN32_MIN_MAJOR then we need to generate extra
|
||||
# variables, PRODUCT_TAP_MAJOR_VER and PRODUCT_TAP_MINOR_VER with
|
||||
# the same contents. This is necessary because tap-win32/tapdrv.c
|
||||
# build depends on those.
|
||||
|
|
@ -71,20 +71,20 @@ def parse_version_m4(kv, version_m4):
|
|||
kv['PRODUCT_TAP_MINOR_VER'] = g[1]
|
||||
|
||||
# Add the variable to build configuration
|
||||
kv[g[0]] = g[1]
|
||||
f.close()
|
||||
|
||||
def parse_settings_in(kv, settings_in):
|
||||
r = re.compile(r'^!define\s+(\w+)(?:\s+"?(.*?)"?)?$')
|
||||
f = open(settings_in)
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
m = re.match(r, line)
|
||||
if m:
|
||||
g = m.groups()
|
||||
kv[g[0]] = g[1] or ''
|
||||
f.close()
|
||||
|
||||
kv[g[0]] = g[1]
|
||||
f.close()
|
||||
|
||||
def parse_settings_in(kv, settings_in):
|
||||
r = re.compile(r'^!define\s+(\w+)(?:\s+"?(.*?)"?)?$')
|
||||
f = open(settings_in)
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
m = re.match(r, line)
|
||||
if m:
|
||||
g = m.groups()
|
||||
kv[g[0]] = g[1] or ''
|
||||
f.close()
|
||||
|
||||
def parse_build_params(kv, settings_in):
|
||||
r = re.compile(r'^!define\s+(ENABLE_\w+)\s+(\w+)')
|
||||
|
||||
|
|
@ -107,7 +107,7 @@ def dict_def(dict, newdefs):
|
|||
return ret
|
||||
|
||||
def build_autodefs(kv, autodefs_in, autodefs_out):
|
||||
preprocess(kv,
|
||||
preprocess(kv,
|
||||
in_fn=autodefs_in,
|
||||
out_fn=autodefs_out,
|
||||
quote_begin='@',
|
||||
|
|
@ -177,146 +177,146 @@ def preprocess(kv, in_fn, out_fn, quote_begin=None, quote_end=None, if_prefix=No
|
|||
return kv.get(var, '')
|
||||
|
||||
re_macro = re_ifdef = None
|
||||
|
||||
if quote_begin and quote_end:
|
||||
re_macro = re.compile(r'%s(\w+)%s' % (re.escape(quote_begin), re.escape(quote_end)))
|
||||
|
||||
if if_prefix:
|
||||
re_ifdef = re.compile(r'^\s*%sifdef\s+(\w+)\b' % (re.escape(if_prefix),))
|
||||
re_else = re.compile(r'^\s*%selse\b' % (re.escape(if_prefix),))
|
||||
re_endif = re.compile(r'^\s*%sendif\b' % (re.escape(if_prefix),))
|
||||
|
||||
if_stack = []
|
||||
fin = open(in_fn)
|
||||
fout = open(out_fn, 'w')
|
||||
if head_comment:
|
||||
fout.write(head_comment)
|
||||
for line in fin:
|
||||
if re_ifdef:
|
||||
m = re.match(re_ifdef, line)
|
||||
if m:
|
||||
var, = m.groups()
|
||||
if_stack.append(int(var in kv))
|
||||
continue
|
||||
elif re.match(re_else, line):
|
||||
if_stack[-1] ^= 1
|
||||
continue
|
||||
elif re.match(re_endif, line):
|
||||
if_stack.pop()
|
||||
continue
|
||||
if not if_stack or min(if_stack):
|
||||
if re_macro:
|
||||
line = re.sub(re_macro, repfn, line)
|
||||
fout.write(line)
|
||||
assert not if_stack
|
||||
fin.close()
|
||||
fout.close()
|
||||
|
||||
def print_key_values(kv):
|
||||
for k, v in sorted(kv.items()):
|
||||
print "%s%s%s" % (k, ' '*(32-len(k)), repr(v))
|
||||
|
||||
def get_sources(makefile_am):
|
||||
|
||||
if quote_begin and quote_end:
|
||||
re_macro = re.compile(r'%s(\w+)%s' % (re.escape(quote_begin), re.escape(quote_end)))
|
||||
|
||||
if if_prefix:
|
||||
re_ifdef = re.compile(r'^\s*%sifdef\s+(\w+)\b' % (re.escape(if_prefix),))
|
||||
re_else = re.compile(r'^\s*%selse\b' % (re.escape(if_prefix),))
|
||||
re_endif = re.compile(r'^\s*%sendif\b' % (re.escape(if_prefix),))
|
||||
|
||||
if_stack = []
|
||||
fin = open(in_fn)
|
||||
fout = open(out_fn, 'w')
|
||||
if head_comment:
|
||||
fout.write(head_comment)
|
||||
for line in fin:
|
||||
if re_ifdef:
|
||||
m = re.match(re_ifdef, line)
|
||||
if m:
|
||||
var, = m.groups()
|
||||
if_stack.append(int(var in kv))
|
||||
continue
|
||||
elif re.match(re_else, line):
|
||||
if_stack[-1] ^= 1
|
||||
continue
|
||||
elif re.match(re_endif, line):
|
||||
if_stack.pop()
|
||||
continue
|
||||
if not if_stack or min(if_stack):
|
||||
if re_macro:
|
||||
line = re.sub(re_macro, repfn, line)
|
||||
fout.write(line)
|
||||
assert not if_stack
|
||||
fin.close()
|
||||
fout.close()
|
||||
|
||||
def print_key_values(kv):
|
||||
for k, v in sorted(kv.items()):
|
||||
print "%s%s%s" % (k, ' '*(32-len(k)), repr(v))
|
||||
|
||||
def get_sources(makefile_am):
|
||||
"""Parse ../Makefile.am to obtain a list of .h and .c files"""
|
||||
c = set()
|
||||
h = set()
|
||||
f = open(makefile_am)
|
||||
state = False
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
if line == 'openvpn_SOURCES = \\':
|
||||
state = True
|
||||
elif not line:
|
||||
state = False
|
||||
elif state:
|
||||
for sf in line.split():
|
||||
if sf.endswith('.c'):
|
||||
c.add(sf[:-2])
|
||||
elif sf.endswith('.h'):
|
||||
h.add(sf[:-2])
|
||||
elif sf == '\\':
|
||||
pass
|
||||
else:
|
||||
print >>sys.stderr, "Unrecognized filename:", sf
|
||||
f.close()
|
||||
return [ sorted(list(s)) for s in (c, h) ]
|
||||
|
||||
def output_mak_list(title, srclist, ext):
|
||||
ret = "%s =" % (title,)
|
||||
for x in srclist:
|
||||
ret += " \\\n\t%s.%s" % (x, ext)
|
||||
ret += '\n\n'
|
||||
return ret
|
||||
|
||||
def make_headers_objs(makefile_am):
|
||||
c = set()
|
||||
h = set()
|
||||
f = open(makefile_am)
|
||||
state = False
|
||||
for line in f:
|
||||
line = line.rstrip()
|
||||
if line == 'openvpn_SOURCES = \\':
|
||||
state = True
|
||||
elif not line:
|
||||
state = False
|
||||
elif state:
|
||||
for sf in line.split():
|
||||
if sf.endswith('.c'):
|
||||
c.add(sf[:-2])
|
||||
elif sf.endswith('.h'):
|
||||
h.add(sf[:-2])
|
||||
elif sf == '\\':
|
||||
pass
|
||||
else:
|
||||
print >>sys.stderr, "Unrecognized filename:", sf
|
||||
f.close()
|
||||
return [ sorted(list(s)) for s in (c, h) ]
|
||||
|
||||
def output_mak_list(title, srclist, ext):
|
||||
ret = "%s =" % (title,)
|
||||
for x in srclist:
|
||||
ret += " \\\n\t%s.%s" % (x, ext)
|
||||
ret += '\n\n'
|
||||
return ret
|
||||
|
||||
def make_headers_objs(makefile_am):
|
||||
"""Generate HEADER and OBJS entries dynamically from ../Makefile.am"""
|
||||
c, h = get_sources(makefile_am)
|
||||
ret = output_mak_list('HEADERS', h, 'h')
|
||||
ret += output_mak_list('OBJS', c, 'obj')
|
||||
return ret
|
||||
|
||||
def choose_arch(arch_name):
|
||||
if arch_name == 'x64':
|
||||
return (True,)
|
||||
elif arch_name == 'x86':
|
||||
return (False,)
|
||||
elif arch_name == 'all':
|
||||
return (True, False)
|
||||
else:
|
||||
raise ValueError("architecture ('%s') must be x86, x64, or all" % (arch_name,))
|
||||
|
||||
def rm_rf(dir):
|
||||
print "REMOVE", dir
|
||||
shutil.rmtree(dir, ignore_errors=True)
|
||||
|
||||
def mkdir(dir):
|
||||
print "MKDIR", dir
|
||||
os.mkdir(dir)
|
||||
|
||||
def cp_a(src, dest, dest_is_dir=True):
|
||||
if dest_is_dir:
|
||||
dest = os.path.join(dest, os.path.basename(src))
|
||||
print "COPY_DIR %s %s" % (src, dest)
|
||||
shutil.copytree(src, dest)
|
||||
|
||||
def cp(src, dest, dest_is_dir=True):
|
||||
if dest_is_dir:
|
||||
dest = os.path.join(dest, os.path.basename(src))
|
||||
print "COPY %s %s" % (src, dest)
|
||||
shutil.copyfile(src, dest)
|
||||
|
||||
c, h = get_sources(makefile_am)
|
||||
ret = output_mak_list('HEADERS', h, 'h')
|
||||
ret += output_mak_list('OBJS', c, 'obj')
|
||||
return ret
|
||||
|
||||
def choose_arch(arch_name):
|
||||
if arch_name == 'x64':
|
||||
return (True,)
|
||||
elif arch_name == 'x86':
|
||||
return (False,)
|
||||
elif arch_name == 'all':
|
||||
return (True, False)
|
||||
else:
|
||||
raise ValueError("architecture ('%s') must be x86, x64, or all" % (arch_name,))
|
||||
|
||||
def rm_rf(dir):
|
||||
print "REMOVE", dir
|
||||
shutil.rmtree(dir, ignore_errors=True)
|
||||
|
||||
def mkdir(dir):
|
||||
print "MKDIR", dir
|
||||
os.mkdir(dir)
|
||||
|
||||
def cp_a(src, dest, dest_is_dir=True):
|
||||
if dest_is_dir:
|
||||
dest = os.path.join(dest, os.path.basename(src))
|
||||
print "COPY_DIR %s %s" % (src, dest)
|
||||
shutil.copytree(src, dest)
|
||||
|
||||
def cp(src, dest, dest_is_dir=True):
|
||||
if dest_is_dir:
|
||||
dest = os.path.join(dest, os.path.basename(src))
|
||||
print "COPY %s %s" % (src, dest)
|
||||
shutil.copyfile(src, dest)
|
||||
|
||||
def rename(src, dest):
|
||||
print "RENAME %s %s" % (src, dest)
|
||||
shutil.move(src, dest)
|
||||
|
||||
def rm_rf(path):
|
||||
try:
|
||||
shutil.rmtree(path, onerror=onerror)
|
||||
except:
|
||||
pass
|
||||
|
||||
def onerror(func, path, exc_info):
|
||||
"""
|
||||
Error handler for ``shutil.rmtree``.
|
||||
|
||||
If the error is due to an access error (read only file)
|
||||
it attempts to add write permission and then retries.
|
||||
|
||||
If the error is for another reason it re-raises the error.
|
||||
|
||||
Usage : ``shutil.rmtree(path, onerror=onerror)``
|
||||
"""
|
||||
if not os.access(path, os.W_OK):
|
||||
# Is the error an access error ?
|
||||
os.chmod(path, stat.S_IWUSR)
|
||||
func(path)
|
||||
else:
|
||||
raise
|
||||
|
||||
def mkdir_silent(dir):
|
||||
try:
|
||||
os.mkdir(dir)
|
||||
except:
|
||||
pass
|
||||
|
||||
config = get_config()
|
||||
def rm_rf(path):
|
||||
try:
|
||||
shutil.rmtree(path, onerror=onerror)
|
||||
except:
|
||||
pass
|
||||
|
||||
def onerror(func, path, exc_info):
|
||||
"""
|
||||
Error handler for ``shutil.rmtree``.
|
||||
|
||||
If the error is due to an access error (read only file)
|
||||
it attempts to add write permission and then retries.
|
||||
|
||||
If the error is for another reason it re-raises the error.
|
||||
|
||||
Usage : ``shutil.rmtree(path, onerror=onerror)``
|
||||
"""
|
||||
if not os.access(path, os.W_OK):
|
||||
# Is the error an access error ?
|
||||
os.chmod(path, stat.S_IWUSR)
|
||||
func(path)
|
||||
else:
|
||||
raise
|
||||
|
||||
def mkdir_silent(dir):
|
||||
try:
|
||||
os.mkdir(dir)
|
||||
except:
|
||||
pass
|
||||
|
||||
config = get_config()
|
||||
|
|
|
|||
Loading…
Reference in a new issue