diff --git a/GNUmakefile b/GNUmakefile
index 3b2e3db..0d1b71b 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -313,8 +313,8 @@ VLMCS_OBJS = $(VLMCS_SRCS:.c=.o)
MULTI_SRCS = vlmcsd.c vlmcs.c vlmcsdmulti.c $(SRCS)
MULTI_OBJS = $(SRCS:.c=.o) vlmcsd-m.o vlmcs-m.o vlmcsdmulti-m.o
-DLL_SRCS = libkms.c $(SRCS)
-DLL_OBJS = $(DLL_SRCS:.c=.o)
+DLL_SRCS = libkms.c vlmcs.c $(SRCS)
+DLL_OBJS = $(DLL_SRCS:.c=-l.o)
PDFDOCS = vlmcs.1.pdf vlmcsd.7.pdf vlmcsd.8.pdf vlmcsdmulti.1.pdf vlmcsd.ini.5.pdf vlmcsd-floppy.7.pdf
HTMLDOCS = $(PDFDOCS:.pdf=.html)
@@ -456,6 +456,21 @@ endif
endif
endif
+%-l.o: %.c
+ ifeq ($(VERBOSE),1)
+ $(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -o $@ -c $<
+ ifeq ($(DEPENDENCIES),1)
+ $(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -MM -MF $*.d $<
+ endif
+ else
+ @echo "$(COMPILER) CC $@ <- $<"
+ @$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -o $@ -c $<
+ ifeq ($(DEPENDENCIES),1)
+ @echo "$(COMPILER) DEP $*.d <- $<"
+ @$(CC) -x$(COMPILER_LANGUAGE) $(PLATFORMFLAGS) $(BASECFLAGS) $(CFLAGS) $(PLATFORMFLAGS) $(SERVERLDFLAGS) -fvisibility=hidden -c -DIS_LIBRARY=1 $(LIBRARY_CFLAGS) -UNO_SOCKETS -UUSE_MSRPC -MM -MF $*.d $<
+ endif
+ endif
+
ifdef CAT
BUILDCOMMAND = cat $^ | $(CC) -x$(COMPILER_LANGUAGE) -o $@ -
diff --git a/floppy144.vfd b/floppy144.vfd
index 4c0f330..6d26dee 100644
Binary files a/floppy144.vfd and b/floppy144.vfd differ
diff --git a/kms.c b/kms.c
index 3287013..fa242b5 100644
--- a/kms.c
+++ b/kms.c
@@ -42,12 +42,13 @@ const KmsIdList ProductList[] = {
/* 013 */ { { 0x8665cb71, 0x468c, 0x4aa3, { 0xa3, 0x37, 0xcb, 0x9b, 0xc9, 0xd5, 0xea, 0xac } } /*"8665cb71-468c-4aa3-a337-cb9bc9d5eaac"*/, "Windows 2012", EPID_WINDOWS, 5, 5 },
/* 014 */ { { 0x8456EFD3, 0x0C04, 0x4089, { 0x87, 0x40, 0x5b, 0x72, 0x38, 0x53, 0x5a, 0x65 } } /*"8456EFD3-0C04-4089-8740-5B7238535A65"*/, "Windows 2012 R2", EPID_WINDOWS, 6, 5 },
/* 015 */ { { 0xe85af946, 0x2e25, 0x47b7, { 0x83, 0xe1, 0xbe, 0xbc, 0xeb, 0xea, 0xc6, 0x11 } } /*"e85af946-2e25-47b7-83e1-bebcebeac611"*/, "Office 2010", EPID_OFFICE2010, 4, 5 },
- /* 016 */ { { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } /*"e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0"*/, "Office 2013", EPID_OFFICE2013, 6, 5 },
+ /* 016 */ { { 0xe6a6f1bf, 0x9d40, 0x40c3, { 0xaa, 0x9f, 0xc7, 0x7b, 0xa2, 0x15, 0x78, 0xc0 } } /*"e6a6f1bf-9d40-40c3-aa9f-c77ba21578c0"*/, "Office 2013+", EPID_OFFICE2013, 6, 5 },
/* 017 */ { { 0x6d5f5270, 0x31ac, 0x433e, { 0xb9, 0x0a, 0x39, 0x89, 0x29, 0x23, 0xc6, 0x57 } } /*"6d5f5270-31ac-433e-b90a-39892923c657"*/, "Windows Server Preview", EPID_WINDOWS, 6, 5 },
/* 018 */ { { 0x85b5f61b, 0x320b, 0x4be3, { 0x81, 0x4a, 0xb7, 0x6b, 0x2b, 0xfa, 0xfc, 0x82 } } /*"85b5f61b-320b-4be3-814a-b76b2bfafc82"*/, "Office 2016", EPID_OFFICE2013, 6, 5 },
/* 019 */ { { 0x58e2134f, 0x8e11, 0x4d17, { 0x9c, 0xb2, 0x91, 0x06, 0x9c, 0x15, 0x11, 0x48 } } /*"58e2134f-8e11-4d17-9cb2-91069c151148"*/, "Windows 10 VL", EPID_WINDOWS, 6, 25 },
/* 020 */ { { 0xe1c51358, 0xfe3e, 0x4203, { 0xa4, 0xa2, 0x3b, 0x6b, 0x20, 0xc9, 0x73, 0x4e } } /*"e1c51358-fe3e-4203-a4a2-3b6b20c9734e"*/, "Windows 10 Retail", EPID_WINDOWS, 6, 25 },
- /* 021 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 }
+ /* 021 */ { { 0x6e9fc069, 0x257d, 0x4bc4, { 0xb4, 0xa7, 0x75, 0x05, 0x14, 0xd3, 0x27, 0x43 } } /*"6e9fc069-257d-4bc4-b4a7-750514d32743"*/, "Windows 2016", EPID_WINDOWS, 6, 5 },
+ /* 022 */ { { 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }, NULL, NULL, 0, 0 }
};
#endif
@@ -64,174 +65,201 @@ const KmsIdList AppList[] = {
#ifndef NO_EXTENDED_PRODUCT_LIST
const KmsIdList ExtendedProductList [] = {
-
- // Windows Server
-
- { { 0xad2542d4, 0x9154, 0x4c6d, { 0x8a, 0x44, 0x30, 0xf1, 0x1e, 0xe9, 0x69, 0x89, } } /*ad2542d4-9154-4c6d-8a44-30f11ee96989*/, "Windows Server 2008 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A },
- { { 0x2401e3d0, 0xc50a, 0x4b58, { 0x87, 0xb2, 0x7e, 0x79, 0x4b, 0x7d, 0x26, 0x07, } } /*2401e3d0-c50a-4b58-87b2-7e794b7d2607*/, "Windows Server 2008 Standard V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A },
- { { 0x68b6e220, 0xcf09, 0x466b, { 0x92, 0xd3, 0x45, 0xcd, 0x96, 0x4b, 0x95, 0x09, } } /*68b6e220-cf09-466b-92d3-45cd964b9509*/, "Windows Server 2008 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
- { { 0xfd09ef77, 0x5647, 0x4eff, { 0x80, 0x9c, 0xaf, 0x2b, 0x64, 0x65, 0x9a, 0x45, } } /*fd09ef77-5647-4eff-809c-af2b64659a45*/, "Windows Server 2008 Datacenter V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
- { { 0xc1af4d90, 0xd1bc, 0x44ca, { 0x85, 0xd4, 0x00, 0x3b, 0xa3, 0x3d, 0xb3, 0xb9, } } /*c1af4d90-d1bc-44ca-85d4-003ba33db3b9*/, "Windows Server 2008 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B },
- { { 0x8198490a, 0xadd0, 0x47b2, { 0xb3, 0xba, 0x31, 0x6b, 0x12, 0xd6, 0x47, 0xb4, } } /*8198490a-add0-47b2-b3ba-316b12d647b4*/, "Windows Server 2008 Enterprise V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B },
- { { 0xddfa9f7c, 0xf09e, 0x40b9, { 0x8c, 0x1a, 0xbe, 0x87, 0x7a, 0x9a, 0x7f, 0x4b, } } /*ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b*/, "Windows Server 2008 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A },
- { { 0x7afb1156, 0x2c1d, 0x40fc, { 0xb2, 0x60, 0xaa, 0xb7, 0x44, 0x2b, 0x62, 0xfe, } } /*7afb1156-2c1d-40fc-b260-aab7442b62fe*/, "Windows Server 2008 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
- { { 0x68531fb9, 0x5511, 0x4989, { 0x97, 0xbe, 0xd1, 0x1a, 0x0f, 0x55, 0x63, 0x3f, } } /*68531fb9-5511-4989-97be-d11a0f55633f*/, "Windows Server 2008 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A },
- { { 0x7482e61b, 0xc589, 0x4b7f, { 0x8e, 0xcc, 0x46, 0xd4, 0x55, 0xac, 0x3b, 0x87, } } /*7482e61b-c589-4b7f-8ecc-46d455ac3b87*/, "Windows Server 2008 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C },
- { { 0x620e2b3d, 0x09e7, 0x42fd, { 0x80, 0x2a, 0x17, 0xa1, 0x36, 0x52, 0xfe, 0x7a, } } /*620e2b3d-09e7-42fd-802a-17a13652fe7a*/, "Windows Server 2008 R2 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2B },
- { { 0xa78b8bd9, 0x8017, 0x4df5, { 0xb8, 0x6a, 0x09, 0xf7, 0x56, 0xaf, 0xfa, 0x7c, } } /*a78b8bd9-8017-4df5-b86a-09f756affa7c*/, "Windows Server 2008 R2 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A },
- { { 0xcda18cf3, 0xc196, 0x46ad, { 0xb2, 0x89, 0x60, 0xc0, 0x72, 0x86, 0x99, 0x94, } } /*cda18cf3-c196-46ad-b289-60c072869994*/, "Windows Server 2008 R2 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C },
- { { 0xd3643d60, 0x0c42, 0x412d, { 0xa7, 0xd6, 0x52, 0xe6, 0x63, 0x53, 0x27, 0xf6, } } /*d3643d60-0c42-412d-a7d6-52e6635327f6*/, "Windows Server 2012 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
- { { 0xf0f5ec41, 0x0d55, 0x4732, { 0xaf, 0x02, 0x44, 0x0a, 0x44, 0xa3, 0xcf, 0x0f, } } /*f0f5ec41-0d55-4732-af02-440a44a3cf0f*/, "Windows Server 2012 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
- { { 0x95fd1c83, 0x7df5, 0x494a, { 0xbe, 0x8b, 0x13, 0x00, 0xe1, 0xc9, 0xd1, 0xcd, } } /*95fd1c83-7df5-494a-be8b-1300e1c9d1cd*/, "Windows Server 2012 MultiPoint Premium", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
- { { 0x7d5486c7, 0xe120, 0x4771, { 0xb7, 0xf1, 0x7b, 0x56, 0xc6, 0xd3, 0x17, 0x0c, } } /*7d5486c7-e120-4771-b7f1-7b56c6d3170c*/, "Windows Server 2012 MultiPoint Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
- { { 0x00091344, 0x1ea4, 0x4f37, { 0xb7, 0x89, 0x01, 0x75, 0x0b, 0xa6, 0x98, 0x8c, } } /*00091344-1ea4-4f37-b789-01750ba6988c*/, "Windows Server 2012 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
- { { 0xb3ca044e, 0xa358, 0x4d68, { 0x98, 0x83, 0xaa, 0xa2, 0x94, 0x1a, 0xca, 0x99, } } /*b3ca044e-a358-4d68-9883-aaa2941aca99*/, "Windows Server 2012 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
- { { 0xb743a2be, 0x68d4, 0x4dd3, { 0xaf, 0x32, 0x92, 0x42, 0x5b, 0x7b, 0xb6, 0x23, } } /*b743a2be-68d4-4dd3-af32-92425b7bb623*/, "Windows Server 2012 R2 Cloud Storage", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
- { { 0x21db6ba4, 0x9a7b, 0x4a14, { 0x9e, 0x29, 0x64, 0xa6, 0x0c, 0x59, 0x30, 0x1d, } } /*21db6ba4-9a7b-4a14-9e29-64a60c59301d*/, "Windows Server 2012 R2 Essentials", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
- { { 0xba947c44, 0xd19d, 0x4786, { 0xb6, 0xae, 0x22, 0x77, 0x0b, 0xc9, 0x4c, 0x54, } } /*ba947c44-d19d-4786-b6ae-22770bc94c54*/, "Windows Server 2016 Datacenter Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_SRV_BETA },
-
-
- // Windows 10 Preview
-# ifdef INCLUDE_BETAS
- { { 0x6496e59d, 0x89dc, 0x49eb, { 0xa3, 0x53, 0x09, 0xce, 0xb9, 0x40, 0x48, 0x45, } } /*6496e59d-89dc-49eb-a353-09ceb9404845*/, "Windows 10 Core Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
- { { 0xa4383e6b, 0xdada, 0x423d, { 0xa4, 0x3d, 0xf2, 0x56, 0x78, 0x42, 0x96, 0x76, } } /*a4383e6b-dada-423d-a43d-f25678429676*/, "Windows 10 Professional Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
- { { 0xcf59a07b, 0x1a2a, 0x4be0, { 0xbf, 0xe0, 0x42, 0x3b, 0x58, 0x23, 0xe6, 0x63, } } /*cf59a07b-1a2a-4be0-bfe0-423b5823e663*/, "Windows 10 Professional WMC Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
- { { 0xcde952c7, 0x2f96, 0x4d9d, { 0x8f, 0x2b, 0x2d, 0x34, 0x9f, 0x64, 0xfc, 0x51, } } /*cde952c7-2f96-4d9d-8f2b-2d349f64fc51*/, "Windows 10 Enterprise Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
-# endif
-
-
- // Windows 10
-
- { { 0x73111121, 0x5638, 0x40f6, { 0xbc, 0x11, 0xf1, 0xd7, 0xb0, 0xd6, 0x43, 0x00, } } /*73111121-5638-40f6-bc11-f1d7b0d64300*/, "Windows 10 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
- { { 0xe272e3e2, 0x732f, 0x4c65, { 0xa8, 0xf0, 0x48, 0x47, 0x47, 0xd0, 0xd9, 0x47, } } /*e272e3e2-732f-4c65-a8f0-484747d0d947*/, "Windows 10 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL},
- { { 0x7b51a46c, 0x0c04, 0x4e8f, { 0x9a, 0xf4, 0x84, 0x96, 0xcc, 0xa9, 0x0d, 0x5e, } } /*7b51a46c-0c04-4e8f-9af4-8496cca90d5e*/, "Windows 10 Enterprise LTSB", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL},
- { { 0x87b838b7, 0x41b6, 0x4590, { 0x83, 0x18, 0x57, 0x97, 0x95, 0x1d, 0x85, 0x29, } } /*87b838b7-41b6-4590-8318-5797951d8529*/, "Windows 10 Enterprise LTSB N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL},
- { { 0xe0c42288, 0x980c, 0x4788, { 0xa0, 0x14, 0xc0, 0x80, 0xd2, 0xe1, 0x92, 0x6e, } } /*e0c42288-980c-4788-a014-c080d2e1926e*/, "Windows 10 Education", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL},
- { { 0x3c102355, 0xd027, 0x42c6, { 0xad, 0x23, 0x2e, 0x7e, 0xf8, 0xa0, 0x25, 0x85, } } /*3c102355-d027-42c6-ad23-2e7ef8a02585*/, "Windows 10 Education N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL},
- { { 0x2de67392, 0xb7a7, 0x462a, { 0xb1, 0xca, 0x10, 0x8d, 0xd1, 0x89, 0xf5, 0x88, } } /*2de67392-b7a7-462a-b1ca-108dd189f588*/, "Windows 10 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
- { { 0xa80b5abf, 0x75ad, 0x428b, { 0xb0, 0x5d, 0xa4, 0x7d, 0x2d, 0xff, 0xee, 0xbf, } } /*a80b5abf-76ad-428b-b05d-a47d2dffeebf*/, "Windows 10 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL},
- { { 0x58e97c99, 0xf377, 0x4ef1, { 0x81, 0xd5, 0x4a, 0xd5, 0x52, 0x2b, 0x5f, 0xd8, } } /*58e97c99-f377-4ef1-81d5-4ad5522b5fd8*/, "Windows 10 Home", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL},
- { { 0x7b9e1751, 0xa8da, 0x4f75, { 0x95, 0x60, 0x5f, 0xad, 0xfe, 0x3d, 0x8e, 0x38, } } /*7b9e1751-a8da-4f75-9560-5fadfe3d8e38*/, "Windows 10 Home N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL},
- { { 0xcd918a57, 0xa41b, 0x4c82, { 0x8d, 0xce, 0x1a, 0x53, 0x8e, 0x22, 0x1a, 0x83, } } /*cd918a57-a41b-4c82-8dce-1a538e221a83*/, "Windows 10 Home Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL},
- { { 0xa9107544, 0xf4a0, 0x4053, { 0xa9, 0x6a, 0x14, 0x79, 0xab, 0xde, 0xf9, 0x12, } } /*a9107544-f4a0-4053-a96a-1479abdef912*/, "Windows 10 Home Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL},
-
-
- // Windows 8.x
-
-# ifdef INCLUDE_BETAS
- { { 0x2B9C337F, 0x7A1D, 0x4271, { 0x90, 0xA3, 0xC6, 0x85, 0x5A, 0x2B, 0x8A, 0x1C, } } /*2B9C337F-7A1D-4271-90A3-C6855A2B8A1C*/, "Windows 8.x Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
- { { 0x631EAD72, 0xA8AB, 0x4DF8, { 0xBB, 0xDF, 0x37, 0x20, 0x29, 0x98, 0x9B, 0xDD, } } /*631EAD72-A8AB-4DF8-BBDF-372029989BDD*/, "Windows 8.x Preview ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
-# endif
- { { 0x81671aaf, 0x79d1, 0x4eb1, { 0xb0, 0x04, 0x8c, 0xbb, 0xe1, 0x73, 0xaf, 0xea, } } /*81671aaf-79d1-4eb1-b004-8cbbe173afea*/, "Windows 8.1 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
- { { 0x113e705c, 0xfa49, 0x48a4, { 0xbe, 0xea, 0x7d, 0xd8, 0x79, 0xb4, 0x6b, 0x14, } } /*113e705c-fa49-48a4-beea-7dd879b46b14*/, "Windows 8.1 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
- { { 0x096ce63d, 0x4fac, 0x48a9, { 0x82, 0xa9, 0x61, 0xae, 0x9e, 0x80, 0x0e, 0x5f, } } /*096ce63d-4fac-48a9-82a9-61ae9e800e5f*/, "Windows 8.1 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
- { { 0xc06b6981, 0xd7fd, 0x4a35, { 0xb7, 0xb4, 0x05, 0x47, 0x42, 0xb7, 0xaf, 0x67, } } /*c06b6981-d7fd-4a35-b7b4-054742b7af67*/, "Windows 8.1 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
- { { 0x7476d79f, 0x8e48, 0x49b4, { 0xab, 0x63, 0x4d, 0x0b, 0x81, 0x3a, 0x16, 0xe4, } } /*7476d79f-8e48-49b4-ab63-4d0b813a16e4*/, "Windows 8.1 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
- { { 0xfe1c3238, 0x432a, 0x43a1, { 0x8e, 0x25, 0x97, 0xe7, 0xd1, 0xef, 0x10, 0xf3, } } /*fe1c3238-432a-43a1-8e25-97e7d1ef10f3*/, "Windows 8.1 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
- { { 0x78558a64, 0xdc19, 0x43fe, { 0xa0, 0xd0, 0x80, 0x75, 0xb2, 0xa3, 0x70, 0xa3, } } /*78558a64-dc19-43fe-a0d0-8075b2a370a3*/, "Windows 8.1 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
- { { 0xffee456a, 0xcd87, 0x4390, { 0x8e, 0x07, 0x16, 0x14, 0x6c, 0x67, 0x2f, 0xd0, } } /*ffee456a-cd87-4390-8e07-16146c672fd0*/, "Windows 8.1 Core ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
- { { 0xc72c6a1d, 0xf252, 0x4e7e, { 0xbd, 0xd1, 0x3f, 0xca, 0x34, 0x2a, 0xcb, 0x35, } } /*c72c6a1d-f252-4e7e-bdd1-3fca342acb35*/, "Windows 8.1 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
- { { 0xdb78b74f, 0xef1c, 0x4892, { 0xab, 0xfe, 0x1e, 0x66, 0xb8, 0x23, 0x1d, 0xf6, } } /*db78b74f-ef1c-4892-abfe-1e66b8231df6*/, "Windows 8.1 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
- { { 0xe9942b32, 0x2e55, 0x4197, { 0xb0, 0xbd, 0x5f, 0xf5, 0x8c, 0xba, 0x88, 0x60, } } /*e9942b32-2e55-4197-b0bd-5ff58cba8860*/, "Windows 8.1 Core Connected", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
- { { 0xc6ddecd6, 0x2354, 0x4c19, { 0x90, 0x9b, 0x30, 0x6a, 0x30, 0x58, 0x48, 0x4e, } } /*c6ddecd6-2354-4c19-909b-306a3058484e*/, "Windows 8.1 Core Connected N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
- { { 0xb8f5e3a3, 0xed33, 0x4608, { 0x81, 0xe1, 0x37, 0xd6, 0xc9, 0xdc, 0xfd, 0x9c, } } /*b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c*/, "Windows 8.1 Core Connected Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
- { { 0xba998212, 0x460a, 0x44db, { 0xbf, 0xb5, 0x71, 0xbf, 0x09, 0xd1, 0xc6, 0x8b, } } /*ba998212-460a-44db-bfb5-71bf09d1c68b*/, "Windows 8.1 Core Connected Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
- { { 0xe58d87b5, 0x8126, 0x4580, { 0x80, 0xfb, 0x86, 0x1b, 0x22, 0xf7, 0x92, 0x96, } } /*e58d87b5-8126-4580-80fb-861b22f79296*/, "Windows 8.1 Professional Student", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
- { { 0xcab491c7, 0xa918, 0x4f60, { 0xb5, 0x02, 0xda, 0xb7, 0x5e, 0x33, 0x4f, 0x40, } } /*cab491c7-a918-4f60-b502-dab75e334f40*/, "Windows 8.1 Professional Student N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
- { { 0xa00018a3, 0xf20f, 0x4632, { 0xbf, 0x7c, 0x8d, 0xaa, 0x53, 0x51, 0xc9, 0x14, } } /*a00018a3-f20f-4632-bf7c-8daa5351c914*/, "Windows 8 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
- { { 0xa98bcd6d, 0x5343, 0x4603, { 0x8a, 0xfe, 0x59, 0x08, 0xe4, 0x61, 0x11, 0x12, } } /*a98bcd6d-5343-4603-8afe-5908e4611112*/, "Windows 8 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
- { { 0xebf245c1, 0x29a8, 0x4daf, { 0x9c, 0xb1, 0x38, 0xdf, 0xc6, 0x08, 0xa8, 0xc8, } } /*ebf245c1-29a8-4daf-9cb1-38dfc608a8c8*/, "Windows 8 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
- { { 0x458e1bec, 0x837a, 0x45f6, { 0xb9, 0xd5, 0x92, 0x5e, 0xd5, 0xd2, 0x99, 0xde, } } /*458e1bec-837a-45f6-b9d5-925ed5d299de*/, "Windows 8 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
- { { 0xe14997e7, 0x800a, 0x4cf7, { 0xad, 0x10, 0xde, 0x4b, 0x45, 0xb5, 0x78, 0xdb, } } /*e14997e7-800a-4cf7-ad10-de4b45b578db*/, "Windows 8 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
- { { 0xc04ed6bf, 0x55c8, 0x4b47, { 0x9f, 0x8e, 0x5a, 0x1f, 0x31, 0xce, 0xee, 0x60, } } /*c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60*/, "Windows 8 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
- { { 0x197390a0, 0x65f6, 0x4a95, { 0xbd, 0xc4, 0x55, 0xd5, 0x8a, 0x3b, 0x02, 0x53, } } /*197390a0-65f6-4a95-bdc4-55d58a3b0253*/, "Windows 8 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
- { { 0x9d5584a2, 0x2d85, 0x419a, { 0x98, 0x2c, 0xa0, 0x08, 0x88, 0xbb, 0x9d, 0xdf, } } /*9d5584a2-2d85-419a-982c-a00888bb9ddf*/, "Windows 8 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
- { { 0x8860fcd4, 0xa77b, 0x4a20, { 0x90, 0x45, 0xa1, 0x50, 0xff, 0x11, 0xd6, 0x09, } } /*8860fcd4-a77b-4a20-9045-a150ff11d609*/, "Windows 8 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
-
-
- // Windows 7
-
- { { 0xae2ee509, 0x1b34, 0x41c0, { 0xac, 0xb7, 0x6d, 0x46, 0x50, 0x16, 0x89, 0x15, } } /*ae2ee509-1b34-41c0-acb7-6d4650168915*/, "Windows 7 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
- { { 0x1cb6d605, 0x11b3, 0x4e14, { 0xbb, 0x30, 0xda, 0x91, 0xc8, 0xe3, 0x98, 0x3a, } } /*1cb6d605-11b3-4e14-bb30-da91c8e3983a*/, "Windows 7 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
- { { 0xb92e9980, 0xb9d5, 0x4821, { 0x9c, 0x94, 0x14, 0x0f, 0x63, 0x2f, 0x63, 0x12, } } /*b92e9980-b9d5-4821-9c94-140f632f6312*/, "Windows 7 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
- { { 0x54a09a0d, 0xd57b, 0x4c10, { 0x8b, 0x69, 0xa8, 0x42, 0xd6, 0x59, 0x0a, 0xd5, } } /*54a09a0d-d57b-4c10-8b69-a842d6590ad5*/, "Windows 7 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
-
-
- // Windows Vista
-
- { { 0xcfd8ff08, 0xc0d7, 0x452b, { 0x9f, 0x60, 0xef, 0x5c, 0x70, 0xc3, 0x20, 0x94, } } /*cfd8ff08-c0d7-452b-9f60-ef5c70c32094*/, "Windows Vista Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
- { { 0xd4f54950, 0x26f2, 0x4fb4, { 0xba, 0x21, 0xff, 0xab, 0x16, 0xaf, 0xca, 0xde, } } /*d4f54950-26f2-4fb4-ba21-ffab16afcade*/, "Windows Vista Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
- { { 0x4f3d1606, 0x3fea, 0x4c01, { 0xbe, 0x3c, 0x8d, 0x67, 0x1c, 0x40, 0x1e, 0x3b, } } /*4f3d1606-3fea-4c01-be3c-8d671c401e3b*/, "Windows Vista Business", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
- { { 0x2c682dc2, 0x8b68, 0x4f63, { 0xa1, 0x65, 0xae, 0x29, 0x1d, 0x4c, 0xf1, 0x38, } } /*2c682dc2-8b68-4f63-a165-ae291d4cf138*/, "Windows Vista Business N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
-
-
- // Windows Embedded
-
- { { 0xaa6dd3aa, 0xc2b4, 0x40e2, { 0xa5, 0x44, 0xa6, 0xbb, 0xb3, 0xf5, 0xc3, 0x95, } } /*aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395*/, "Windows ThinPC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
- { { 0xdb537896, 0x376f, 0x48ae, { 0xa4, 0x92, 0x53, 0xd0, 0x54, 0x77, 0x73, 0xd0, } } /*db537896-376f-48ae-a492-53d0547773d0*/, "Windows Embedded POSReady 7", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
- { { 0x0ab82d54, 0x47f4, 0x4acb, { 0x81, 0x8c, 0xcc, 0x5b, 0xf0, 0xec, 0xb6, 0x49, } } /*0ab82d54-47f4-4acb-818c-cc5bf0ecb649*/, "Windows Embedded Industry 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
- { { 0xcd4e2d9f, 0x5059, 0x4a50, { 0xa9, 0x2d, 0x05, 0xd5, 0xbb, 0x12, 0x67, 0xc7, } } /*cd4e2d9f-5059-4a50-a92d-05d5bb1267c7*/, "Windows Embedded Industry E 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
- { { 0xf7e88590, 0xdfc7, 0x4c78, { 0xbc, 0xcb, 0x6f, 0x38, 0x65, 0xb9, 0x9d, 0x1a, } } /*f7e88590-dfc7-4c78-bccb-6f3865b99d1a*/, "Windows Embedded Industry A 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
-
- // Office 2010
-
- { { 0x8ce7e872, 0x188c, 0x4b98, { 0x9d, 0x90, 0xf8, 0xf9, 0x0b, 0x7a, 0xad, 0x02, } } /*8ce7e872-188c-4b98-9d90-f8f90b7aad02*/, "Office Access 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0xcee5d470, 0x6e3b, 0x4fcc, { 0x8c, 0x2b, 0xd1, 0x74, 0x28, 0x56, 0x8a, 0x9f, } } /*cee5d470-6e3b-4fcc-8c2b-d17428568a9f*/, "Office Excel 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0x8947d0b8, 0xc33b, 0x43e1, { 0x8c, 0x56, 0x9b, 0x67, 0x4c, 0x05, 0x28, 0x32, } } /*8947d0b8-c33b-43e1-8c56-9b674c052832*/, "Office Groove 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0xca6b6639, 0x4ad6, 0x40ae, { 0xa5, 0x75, 0x14, 0xde, 0xe0, 0x7f, 0x64, 0x30, } } /*ca6b6639-4ad6-40ae-a575-14dee07f6430*/, "Office InfoPath 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0x09ed9640, 0xf020, 0x400a, { 0xac, 0xd8, 0xd7, 0xd8, 0x67, 0xdf, 0xd9, 0xc2, } } /*09ed9640-f020-400a-acd8-d7d867dfd9c2*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0xef3d4e49, 0xa53d, 0x4d81, { 0xa2, 0xb1, 0x2c, 0xa6, 0xc2, 0x55, 0x6b, 0x2c, } } /*ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c*/, "Office Mondo 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0xab586f5c, 0x5256, 0x4632, { 0x96, 0x2f, 0xfe, 0xfd, 0x8b, 0x49, 0xe6, 0xf4, } } /*ab586f5c-5256-4632-962f-fefd8b49e6f4*/, "Office OneNote 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0xecb7c192, 0x73ab, 0x4ded, { 0xac, 0xf4, 0x23, 0x99, 0xb0, 0x95, 0xd0, 0xcc, } } /*ecb7c192-73ab-4ded-acf4-2399b095d0cc*/, "Office OutLook 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0x45593b1d, 0xdfb1, 0x4e91, { 0xbb, 0xfb, 0x2d, 0x5d, 0x0c, 0xe2, 0x22, 0x7a, } } /*45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a*/, "Office PowerPoint 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0xdf133ff7, 0xbf14, 0x4f95, { 0xaf, 0xe3, 0x7b, 0x48, 0xe7, 0xe3, 0x31, 0xef, } } /*df133ff7-bf14-4f95-afe3-7b48e7e331ef*/, "Office Project Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0x5dc7bf61, 0x5ec9, 0x4996, { 0x9c, 0xcb, 0xdf, 0x80, 0x6a, 0x2d, 0x0e, 0xfe, } } /*5dc7bf61-5ec9-4996-9ccb-df806a2d0efe*/, "Office Project Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0xb50c4f75, 0x599b, 0x43e8, { 0x8d, 0xcd, 0x10, 0x81, 0xa7, 0x96, 0x72, 0x41, } } /*b50c4f75-599b-43e8-8dcd-1081a7967241*/, "Office Publisher 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0x92236105, 0xbb67, 0x494f, { 0x94, 0xc7, 0x7f, 0x7a, 0x60, 0x79, 0x29, 0xbd, } } /*92236105-bb67-494f-94c7-7f7a607929bd*/, "Office Visio Premium 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0xe558389c, 0x83c3, 0x4b29, { 0xad, 0xfe, 0x5e, 0x4d, 0x7f, 0x46, 0xc3, 0x58, } } /*e558389c-83c3-4b29-adfe-5e4d7f46c358*/, "Office Visio Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0x9ed833ff, 0x4f92, 0x4f36, { 0xb3, 0x70, 0x86, 0x83, 0xa4, 0xf1, 0x32, 0x75, } } /*9ed833ff-4f92-4f36-b370-8683a4f13275*/, "Office Visio Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0x2d0882e7, 0xa4e7, 0x423b, { 0x8c, 0xcc, 0x70, 0xd9, 0x1e, 0x01, 0x58, 0xb1, } } /*2d0882e7-a4e7-423b-8ccc-70d91e0158b1*/, "Office Word 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0x6f327760, 0x8c5c, 0x417c, { 0x9b, 0x61, 0x83, 0x6a, 0x98, 0x28, 0x7e, 0x0c, } } /*6f327760-8c5c-417c-9b61-836a98287e0c*/, "Office Professional Plus 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0x9da2a678, 0xfb6b, 0x4e67, { 0xab, 0x84, 0x60, 0xdd, 0x6a, 0x9c, 0x81, 0x9a, } } /*9da2a678-fb6b-4e67-ab84-60dd6a9c819a*/, "Office Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
- { { 0xea509e87, 0x07a1, 0x4a45, { 0x9e, 0xdc, 0xeb, 0xa5, 0xa3, 0x9f, 0x36, 0xaf, } } /*ea509e87-07a1-4a45-9edc-eba5a39f36af*/, "Office Small Business Basics 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
-
- // Office 2013
-
- { { 0x6ee7622c, 0x18d8, 0x4005, { 0x9f, 0xb7, 0x92, 0xdb, 0x64, 0x4a, 0x27, 0x9b, } } /*6ee7622c-18d8-4005-9fb7-92db644a279b*/, "Office Access 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0xf7461d52, 0x7c2b, 0x43b2, { 0x87, 0x44, 0xea, 0x95, 0x8e, 0x0b, 0xd0, 0x9a, } } /*f7461d52-7c2b-43b2-8744-ea958e0bd09a*/, "Office Excel 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0xa30b8040, 0xd68a, 0x423f, { 0xb0, 0xb5, 0x9c, 0xe2, 0x92, 0xea, 0x5a, 0x8f, } } /*a30b8040-d68a-423f-b0b5-9ce292ea5a8f*/, "Office InfoPath 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0x1b9f11e3, 0xc85c, 0x4e1b, { 0xbb, 0x29, 0x87, 0x9a, 0xd2, 0xc9, 0x09, 0xe3, } } /*1b9f11e3-c85c-4e1b-bb29-879ad2c909e3*/, "Office Lync 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0xdc981c6b, 0xfc8e, 0x420f, { 0xaa, 0x43, 0xf8, 0xf3, 0x3e, 0x5c, 0x09, 0x23, } } /*dc981c6b-fc8e-420f-aa43-f8f33e5c0923*/, "Office Mondo 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0xefe1f3e6, 0xaea2, 0x4144, { 0xa2, 0x08, 0x32, 0xaa, 0x87, 0x2b, 0x65, 0x45, } } /*efe1f3e6-aea2-4144-a208-32aa872b6545*/, "Office OneNote 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0x771c3afa, 0x50c5, 0x443f, { 0xb1, 0x51, 0xff, 0x25, 0x46, 0xd8, 0x63, 0xa0, } } /*771c3afa-50c5-443f-b151-ff2546d863a0*/, "Office OutLook 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0x8c762649, 0x97d1, 0x4953, { 0xad, 0x27, 0xb7, 0xe2, 0xc2, 0x5b, 0x97, 0x2e, } } /*8c762649-97d1-4953-ad27-b7e2c25b972e*/, "Office PowerPoint 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0x4a5d124a, 0xe620, 0x44ba, { 0xb6, 0xff, 0x65, 0x89, 0x61, 0xb3, 0x3b, 0x9a, } } /*4a5d124a-e620-44ba-b6ff-658961b33b9a*/, "Office Project Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0x427a28d1, 0xd17c, 0x4abf, { 0xb7, 0x17, 0x32, 0xc7, 0x80, 0xba, 0x6f, 0x07, } } /*427a28d1-d17c-4abf-b717-32c780ba6f07*/, "Office Project Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0x00c79ff1, 0x6850, 0x443d, { 0xbf, 0x61, 0x71, 0xcd, 0xe0, 0xde, 0x30, 0x5f, } } /*00c79ff1-6850-443d-bf61-71cde0de305f*/, "Office Publisher 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0xac4efaf0, 0xf81f, 0x4f61, { 0xbd, 0xf7, 0xea, 0x32, 0xb0, 0x2a, 0xb1, 0x17, } } /*ac4efaf0-f81f-4f61-bdf7-ea32b02ab117*/, "Office Visio Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0xe13ac10e, 0x75d0, 0x4aff, { 0xa0, 0xcd, 0x76, 0x49, 0x82, 0xcf, 0x54, 0x1c, } } /*e13ac10e-75d0-4aff-a0cd-764982cf541c*/, "Office Visio Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0xd9f5b1c6, 0x5386, 0x495a, { 0x88, 0xf9, 0x9a, 0xd6, 0xb4, 0x1a, 0xc9, 0xb3, } } /*d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3*/, "Office Word 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } } /*b322da9c-a2e2-4058-9e4e-f59a6970bd69*/, "Office Professional Plus 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
- { { 0xb13afb38, 0xcd79, 0x4ae5, { 0x9f, 0x7f, 0xee, 0xd0, 0x58, 0xd7, 0x50, 0xca, } } /*b13afb38-cd79-4ae5-9f7f-eed058d750ca*/, "Office Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
-
- // Office 2016
-
- { { 0xd450596f, 0x894d, 0x49e0, { 0x96, 0x6a, 0xfd, 0x39, 0xed, 0x4c, 0x4c, 0x64, } } /*d450596f-894d-49e0-966a-fd39ed4c4c64*/, "Office Professional Plus 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0x4f414197, 0x0fc2, 0x4c01, { 0xb6, 0x8a, 0x86, 0xcb, 0xb9, 0xac, 0x25, 0x4c, } } /*4f414197-0fc2-4c01-b68a-86cbb9ac254c*/, "Office Project Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0x6bf301c1, 0xb94a, 0x43e9, { 0xba, 0x31, 0xd4, 0x94, 0x59, 0x8c, 0x47, 0xfb, } } /*6bf301c1-b94a-43e9-ba31-d494598c47fb*/, "Office Visio Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0x041a06cb, 0xc5b8, 0x4772, { 0x80, 0x9f, 0x41, 0x6d, 0x03, 0xd1, 0x66, 0x54, } } /*041a06cb-c5b8-4772-809f-416d03d16654*/, "Office Publisher 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0x67c0fc0c, 0xdeba, 0x401b, { 0xbf, 0x8b, 0x9c, 0x8a, 0xd8, 0x39, 0x58, 0x04, } } /*67c0fc0c-deba-401b-bf8b-9c8ad8395804*/, "Office Access 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0x83e04ee1, 0xfa8d, 0x436d, { 0x89, 0x94, 0xd3, 0x1a, 0x86, 0x2c, 0xab, 0x77, } } /*83e04ee1-fa8d-436d-8994-d31a862cab77*/, "Office Skype for Business 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0x9caabccb, 0x61b1, 0x4b4b, { 0x8b, 0xec, 0xd1, 0x0a, 0x3c, 0x3a, 0xc2, 0xce, } } /*9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce*/, "Office Mondo 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0xaa2a7821, 0x1827, 0x4c2c, { 0x8f, 0x1d, 0x45, 0x13, 0xa3, 0x4d, 0xda, 0x97, } } /*aa2a7821-1827-4c2c-8f1d-4513a34dda97*/, "Office Visio Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0xbb11badf, 0xd8aa, 0x470e, { 0x93, 0x11, 0x20, 0xea, 0xf8, 0x0f, 0xe5, 0xcc, } } /*bb11badf-d8aa-470e-9311-20eaf80fe5cc*/, "Office Word 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0xc3e65d36, 0x141f, 0x4d2f, { 0xa3, 0x03, 0xa8, 0x42, 0xee, 0x75, 0x6a, 0x29, } } /*c3e65d36-141f-4d2f-a303-a842ee756a29*/, "Office Excel 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0xd70b1bba, 0xb893, 0x4544, { 0x96, 0xe2, 0xb7, 0xa3, 0x18, 0x09, 0x1c, 0x33, } } /*d70b1bba-b893-4544-96e2-b7a318091c33*/, "Office Powerpoint 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0xd8cace59, 0x33d2, 0x4ac7, { 0x9b, 0x1b, 0x9b, 0x72, 0x33, 0x9c, 0x51, 0xc8, } } /*d8cace59-33d2-4ac7-9b1b-9b72339c51c8*/, "Office OneNote 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0xda7ddabc, 0x3fbe, 0x4447, { 0x9e, 0x01, 0x6a, 0xb7, 0x44, 0x0b, 0x4c, 0xd4, } } /*da7ddabc-3fbe-4447-9e01-6ab7440b4cd4*/, "Office Project Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0xdedfa23d, 0x6ed1, 0x45a6, { 0x85, 0xdc, 0x63, 0xca, 0xe0, 0x54, 0x6d, 0xe6, } } /*dedfa23d-6ed1-45a6-85dc-63cae0546de6*/, "Office Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0xe914ea6e, 0xa5fa, 0x4439, { 0xa3, 0x94, 0xa9, 0xbb, 0x32, 0x93, 0xca, 0x09, } } /*e914ea6e-a5fa-4439-a394-a9bb3293ca09*/, "Office Mondo R 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
- { { 0xec9d9265, 0x9d1e, 0x4ed0, { 0x83, 0x8a, 0xcd, 0xc2, 0x0f, 0x25, 0x51, 0xa1, } } /*ec9d9265-9d1e-4ed0-838a-cdc20f2551a1*/, "Office Outlook 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ // Windows 10 (Retail)
+ { { 0x58e97c99, 0xf377, 0x4ef1, { 0x81, 0xd5, 0x4a, 0xd5, 0x52, 0x2b, 0x5f, 0xd8, } } /*58e97c99-f377-4ef1-81d5-4ad5522b5fd8*/, "Windows 10 Home", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL },
+ { { 0xa9107544, 0xf4a0, 0x4053, { 0xa9, 0x6a, 0x14, 0x79, 0xab, 0xde, 0xf9, 0x12, } } /*a9107544-f4a0-4053-a96a-1479abdef912*/, "Windows 10 Home Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL },
+ { { 0x7b9e1751, 0xa8da, 0x4f75, { 0x95, 0x60, 0x5f, 0xad, 0xfe, 0x3d, 0x8e, 0x38, } } /*7b9e1751-a8da-4f75-9560-5fadfe3d8e38*/, "Windows 10 Home N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL },
+ { { 0xcd918a57, 0xa41b, 0x4c82, { 0x8d, 0xce, 0x1a, 0x53, 0x8e, 0x22, 0x1a, 0x83, } } /*cd918a57-a41b-4c82-8dce-1a538e221a83*/, "Windows 10 Home Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_RETAIL },
+
+ // Windows 10 (Volume)
+ { { 0xe0c42288, 0x980c, 0x4788, { 0xa0, 0x14, 0xc0, 0x80, 0xd2, 0xe1, 0x92, 0x6e, } } /*e0c42288-980c-4788-a014-c080d2e1926e*/, "Windows 10 Education", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
+ { { 0x3c102355, 0xd027, 0x42c6, { 0xad, 0x23, 0x2e, 0x7e, 0xf8, 0xa0, 0x25, 0x85, } } /*3c102355-d027-42c6-ad23-2e7ef8a02585*/, "Windows 10 Education N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
+ { { 0x73111121, 0x5638, 0x40f6, { 0xbc, 0x11, 0xf1, 0xd7, 0xb0, 0xd6, 0x43, 0x00, } } /*73111121-5638-40f6-bc11-f1d7b0d64300*/, "Windows 10 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
+ { { 0x7b51a46c, 0x0c04, 0x4e8f, { 0x9a, 0xf4, 0x84, 0x96, 0xcc, 0xa9, 0x0d, 0x5e, } } /*7b51a46c-0c04-4e8f-9af4-8496cca90d5e*/, "Windows 10 Enterprise 2015 LTSB", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
+ { { 0x87b838b7, 0x41b6, 0x4590, { 0x83, 0x18, 0x57, 0x97, 0x95, 0x1d, 0x85, 0x29, } } /*87b838b7-41b6-4590-8318-5797951d8529*/, "Windows 10 Enterprise 2015 LTSB N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
+ { { 0x2d5a5a60, 0x3040, 0x48bf, { 0xbe, 0xb0, 0xfc, 0xd7, 0x70, 0xc2, 0x0c, 0xe0, } } /*2d5a5a60-3040-48bf-beb0-fcd770c20ce0*/, "Windows 10 Enterprise 2016 LTSB", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
+ { { 0x9f776d83, 0x7156, 0x45b2, { 0x8a, 0x5c, 0x35, 0x9b, 0x9c, 0x9f, 0x22, 0xa3, } } /*9f776d83-7156-45b2-8a5c-359b9c9f22a3*/, "Windows 10 Enterprise 2016 LTSB N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
+ { { 0xe272e3e2, 0x732f, 0x4c65, { 0xa8, 0xf0, 0x48, 0x47, 0x47, 0xd0, 0xd9, 0x47, } } /*e272e3e2-732f-4c65-a8f0-484747d0d947*/, "Windows 10 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
+ { { 0x2de67392, 0xb7a7, 0x462a, { 0xb1, 0xca, 0x10, 0x8d, 0xd1, 0x89, 0xf5, 0x88, } } /*2de67392-b7a7-462a-b1ca-108dd189f588*/, "Windows 10 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
+ { { 0x3f1afc82, 0xf8ac, 0x4f6c, { 0x80, 0x05, 0x1d, 0x23, 0x3e, 0x60, 0x6e, 0xee, } } /*3f1afc82-f8ac-4f6c-8005-1d233e606eee*/, "Windows 10 Professional Education", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
+ { { 0x5300b18c, 0x2e33, 0x4dc2, { 0x82, 0x91, 0x47, 0xff, 0xce, 0xc7, 0x46, 0xdd, } } /*5300b18c-2e33-4dc2-8291-47ffcec746dd*/, "Windows 10 Professional Education N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
+ { { 0xa80b5abf, 0x75ad, 0x428b, { 0xb0, 0x5d, 0xa4, 0x7d, 0x2d, 0xff, 0xee, 0xbf, } } /*a80b5abf-75ad-428b-b05d-a47d2dffeebf*/, "Windows 10 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN10_VL },
+
+ // Windows 7
+ { { 0x0ab82d54, 0x47f4, 0x4acb, { 0x81, 0x8c, 0xcc, 0x5b, 0xf0, 0xec, 0xb6, 0x49, } } /*0ab82d54-47f4-4acb-818c-cc5bf0ecb649*/, "Windows 7 Embedded Industry", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
+ { { 0xae2ee509, 0x1b34, 0x41c0, { 0xac, 0xb7, 0x6d, 0x46, 0x50, 0x16, 0x89, 0x15, } } /*ae2ee509-1b34-41c0-acb7-6d4650168915*/, "Windows 7 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
+ { { 0x46bbed08, 0x9c7b, 0x48fc, { 0xa6, 0x14, 0x95, 0x25, 0x05, 0x73, 0xf4, 0xea, } } /*46bbed08-9c7b-48fc-a614-95250573f4ea*/, "Windows 7 Enterprise E", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
+ { { 0x1cb6d605, 0x11b3, 0x4e14, { 0xbb, 0x30, 0xda, 0x91, 0xc8, 0xe3, 0x98, 0x3a, } } /*1cb6d605-11b3-4e14-bb30-da91c8e3983a*/, "Windows 7 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
+ { { 0xb92e9980, 0xb9d5, 0x4821, { 0x9c, 0x94, 0x14, 0x0f, 0x63, 0x2f, 0x63, 0x12, } } /*b92e9980-b9d5-4821-9c94-140f632f6312*/, "Windows 7 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
+ { { 0x5a041529, 0xfef8, 0x4d07, { 0xb0, 0x6f, 0xb5, 0x9b, 0x57, 0x3b, 0x32, 0xd2, } } /*5a041529-fef8-4d07-b06f-b59b573b32d2*/, "Windows 7 Professional E", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
+ { { 0x54a09a0d, 0xd57b, 0x4c10, { 0x8b, 0x69, 0xa8, 0x42, 0xd6, 0x59, 0x0a, 0xd5, } } /*54a09a0d-d57b-4c10-8b69-a842d6590ad5*/, "Windows 7 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
+ { { 0xdb537896, 0x376f, 0x48ae, { 0xa4, 0x92, 0x53, 0xd0, 0x54, 0x77, 0x73, 0xd0, } } /*db537896-376f-48ae-a492-53d0547773d0*/, "Windows Embedded POSReady 7", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
+ { { 0xaa6dd3aa, 0xc2b4, 0x40e2, { 0xa5, 0x44, 0xa6, 0xbb, 0xb3, 0xf5, 0xc3, 0x95, } } /*aa6dd3aa-c2b4-40e2-a544-a6bbb3f5c395*/, "Windows ThinPC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN7 },
+
+ // Windows 8 (Retail)
+ { { 0xc04ed6bf, 0x55c8, 0x4b47, { 0x9f, 0x8e, 0x5a, 0x1f, 0x31, 0xce, 0xee, 0x60, } } /*c04ed6bf-55c8-4b47-9f8e-5a1f31ceee60*/, "Windows 8 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
+ { { 0x9d5584a2, 0x2d85, 0x419a, { 0x98, 0x2c, 0xa0, 0x08, 0x88, 0xbb, 0x9d, 0xdf, } } /*9d5584a2-2d85-419a-982c-a00888bb9ddf*/, "Windows 8 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
+ { { 0x197390a0, 0x65f6, 0x4a95, { 0xbd, 0xc4, 0x55, 0xd5, 0x8a, 0x3b, 0x02, 0x53, } } /*197390a0-65f6-4a95-bdc4-55d58a3b0253*/, "Windows 8 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
+ { { 0x8860fcd4, 0xa77b, 0x4a20, { 0x90, 0x45, 0xa1, 0x50, 0xff, 0x11, 0xd6, 0x09, } } /*8860fcd4-a77b-4a20-9045-a150ff11d609*/, "Windows 8 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
+ { { 0xa00018a3, 0xf20f, 0x4632, { 0xbf, 0x7c, 0x8d, 0xaa, 0x53, 0x51, 0xc9, 0x14, } } /*a00018a3-f20f-4632-bf7c-8daa5351c914*/, "Windows 8 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_RETAIL },
+
+ // Windows 8 (Volume)
+ { { 0x10018baf, 0xce21, 0x4060, { 0x80, 0xbd, 0x47, 0xfe, 0x74, 0xed, 0x4d, 0xab, } } /*10018baf-ce21-4060-80bd-47fe74ed4dab*/, "Windows 8 Embedded Industry", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
+ { { 0x18db1848, 0x12e0, 0x4167, { 0xb9, 0xd7, 0xda, 0x7f, 0xcd, 0xa5, 0x07, 0xdb, } } /*18db1848-12e0-4167-b9d7-da7fcda507db*/, "Windows 8 Embedded Industry E", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
+ { { 0x458e1bec, 0x837a, 0x45f6, { 0xb9, 0xd5, 0x92, 0x5e, 0xd5, 0xd2, 0x99, 0xde, } } /*458e1bec-837a-45f6-b9d5-925ed5d299de*/, "Windows 8 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
+ { { 0xe14997e7, 0x800a, 0x4cf7, { 0xad, 0x10, 0xde, 0x4b, 0x45, 0xb5, 0x78, 0xdb, } } /*e14997e7-800a-4cf7-ad10-de4b45b578db*/, "Windows 8 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
+ { { 0xa98bcd6d, 0x5343, 0x4603, { 0x8a, 0xfe, 0x59, 0x08, 0xe4, 0x61, 0x11, 0x12, } } /*a98bcd6d-5343-4603-8afe-5908e4611112*/, "Windows 8 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
+ { { 0xebf245c1, 0x29a8, 0x4daf, { 0x9c, 0xb1, 0x38, 0xdf, 0xc6, 0x08, 0xa8, 0xc8, } } /*ebf245c1-29a8-4daf-9cb1-38dfc608a8c8*/, "Windows 8 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN8_VL },
+
+ // Windows 8.1 (Retail)
+ { { 0xfe1c3238, 0x432a, 0x43a1, { 0x8e, 0x25, 0x97, 0xe7, 0xd1, 0xef, 0x10, 0xf3, } } /*fe1c3238-432a-43a1-8e25-97e7d1ef10f3*/, "Windows 8.1 Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
+ { { 0xffee456a, 0xcd87, 0x4390, { 0x8e, 0x07, 0x16, 0x14, 0x6c, 0x67, 0x2f, 0xd0, } } /*ffee456a-cd87-4390-8e07-16146c672fd0*/, "Windows 8.1 Core ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
+ { { 0xdb78b74f, 0xef1c, 0x4892, { 0xab, 0xfe, 0x1e, 0x66, 0xb8, 0x23, 0x1d, 0xf6, } } /*db78b74f-ef1c-4892-abfe-1e66b8231df6*/, "Windows 8.1 Core Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
+ { { 0x78558a64, 0xdc19, 0x43fe, { 0xa0, 0xd0, 0x80, 0x75, 0xb2, 0xa3, 0x70, 0xa3, } } /*78558a64-dc19-43fe-a0d0-8075b2a370a3*/, "Windows 8.1 Core N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
+ { { 0xc72c6a1d, 0xf252, 0x4e7e, { 0xbd, 0xd1, 0x3f, 0xca, 0x34, 0x2a, 0xcb, 0x35, } } /*c72c6a1d-f252-4e7e-bdd1-3fca342acb35*/, "Windows 8.1 Core Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
+ { { 0xe58d87b5, 0x8126, 0x4580, { 0x80, 0xfb, 0x86, 0x1b, 0x22, 0xf7, 0x92, 0x96, } } /*e58d87b5-8126-4580-80fb-861b22f79296*/, "Windows 8.1 Professional Student", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
+ { { 0xcab491c7, 0xa918, 0x4f60, { 0xb5, 0x02, 0xda, 0xb7, 0x5e, 0x33, 0x4f, 0x40, } } /*cab491c7-a918-4f60-b502-dab75e334f40*/, "Windows 8.1 Professional Student N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
+ { { 0x096ce63d, 0x4fac, 0x48a9, { 0x82, 0xa9, 0x61, 0xae, 0x9e, 0x80, 0x0e, 0x5f, } } /*096ce63d-4fac-48a9-82a9-61ae9e800e5f*/, "Windows 8.1 Professional WMC", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_RETAIL },
+
+ // Windows 8.1 (Volume)
+ { { 0xe9942b32, 0x2e55, 0x4197, { 0xb0, 0xbd, 0x5f, 0xf5, 0x8c, 0xba, 0x88, 0x60, } } /*e9942b32-2e55-4197-b0bd-5ff58cba8860*/, "Windows 8.1 Core Connected", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
+ { { 0xba998212, 0x460a, 0x44db, { 0xbf, 0xb5, 0x71, 0xbf, 0x09, 0xd1, 0xc6, 0x8b, } } /*ba998212-460a-44db-bfb5-71bf09d1c68b*/, "Windows 8.1 Core Connected Country Specific", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
+ { { 0xc6ddecd6, 0x2354, 0x4c19, { 0x90, 0x9b, 0x30, 0x6a, 0x30, 0x58, 0x48, 0x4e, } } /*c6ddecd6-2354-4c19-909b-306a3058484e*/, "Windows 8.1 Core Connected N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
+ { { 0xb8f5e3a3, 0xed33, 0x4608, { 0x81, 0xe1, 0x37, 0xd6, 0xc9, 0xdc, 0xfd, 0x9c, } } /*b8f5e3a3-ed33-4608-81e1-37d6c9dcfd9c*/, "Windows 8.1 Core Connected Single Language", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
+ { { 0x81671aaf, 0x79d1, 0x4eb1, { 0xb0, 0x04, 0x8c, 0xbb, 0xe1, 0x73, 0xaf, 0xea, } } /*81671aaf-79d1-4eb1-b004-8cbbe173afea*/, "Windows 8.1 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
+ { { 0x113e705c, 0xfa49, 0x48a4, { 0xbe, 0xea, 0x7d, 0xd8, 0x79, 0xb4, 0x6b, 0x14, } } /*113e705c-fa49-48a4-beea-7dd879b46b14*/, "Windows 8.1 Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
+ { { 0xc06b6981, 0xd7fd, 0x4a35, { 0xb7, 0xb4, 0x05, 0x47, 0x42, 0xb7, 0xaf, 0x67, } } /*c06b6981-d7fd-4a35-b7b4-054742b7af67*/, "Windows 8.1 Professional", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
+ { { 0x7476d79f, 0x8e48, 0x49b4, { 0xab, 0x63, 0x4d, 0x0b, 0x81, 0x3a, 0x16, 0xe4, } } /*7476d79f-8e48-49b4-ab63-4d0b813a16e4*/, "Windows 8.1 Professional N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
+ { { 0xf7e88590, 0xdfc7, 0x4c78, { 0xbc, 0xcb, 0x6f, 0x38, 0x65, 0xb9, 0x9d, 0x1a, } } /*f7e88590-dfc7-4c78-bccb-6f3865b99d1a*/, "Windows Embedded Industry A 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
+ { { 0xcd4e2d9f, 0x5059, 0x4a50, { 0xa9, 0x2d, 0x05, 0xd5, 0xbb, 0x12, 0x67, 0xc7, } } /*cd4e2d9f-5059-4a50-a92d-05d5bb1267c7*/, "Windows Embedded Industry E 8.1", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN81_VL },
+
+ // Windows Preview
+ # ifdef INCLUDE_BETAS
+ { { 0xcde952c7, 0x2f96, 0x4d9d, { 0x8f, 0x2b, 0x2d, 0x34, 0x9f, 0x64, 0xfc, 0x51, } } /*cde952c7-2f96-4d9d-8f2b-2d349f64fc51*/, "Windows 10 Enterprise Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
+ { { 0xa4383e6b, 0xdada, 0x423d, { 0xa4, 0x3d, 0xf2, 0x56, 0x78, 0x42, 0x96, 0x76, } } /*a4383e6b-dada-423d-a43d-f25678429676*/, "Windows 10 Professional Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
+ { { 0xcf59a07b, 0x1a2a, 0x4be0, { 0xbf, 0xe0, 0x42, 0x3b, 0x58, 0x23, 0xe6, 0x63, } } /*cf59a07b-1a2a-4be0-bfe0-423b5823e663*/, "Windows 10 Professional WMC Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
+ { { 0x2b9c337f, 0x7a1d, 0x4271, { 0x90, 0xa3, 0xc6, 0x85, 0x5a, 0x2b, 0x8a, 0x1c, } } /*2b9c337f-7a1d-4271-90a3-c6855a2b8a1c*/, "Windows 8.x Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
+ { { 0x631ead72, 0xa8ab, 0x4df8, { 0xbb, 0xdf, 0x37, 0x20, 0x29, 0x98, 0x9b, 0xdd, } } /*631ead72-a8ab-4df8-bbdf-372029989bdd*/, "Windows 8.x Preview ARM", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_BETA },
+ # endif // INCLUDE_BETAS
+
+ // Windows Server 2008 A (Web and Standard)
+ { { 0xad2542d4, 0x9154, 0x4c6d, { 0x8a, 0x44, 0x30, 0xf1, 0x1e, 0xe9, 0x69, 0x89, } } /*ad2542d4-9154-4c6d-8a44-30f11ee96989*/, "Windows Server 2008 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A },
+ { { 0x2401e3d0, 0xc50a, 0x4b58, { 0x87, 0xb2, 0x7e, 0x79, 0x4b, 0x7d, 0x26, 0x07, } } /*2401e3d0-c50a-4b58-87b2-7e794b7d2607*/, "Windows Server 2008 Standard without Hyper-V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A },
+ { { 0xddfa9f7c, 0xf09e, 0x40b9, { 0x8c, 0x1a, 0xbe, 0x87, 0x7a, 0x9a, 0x7f, 0x4b, } } /*ddfa9f7c-f09e-40b9-8c1a-be877a9a7f4b*/, "Windows Server 2008 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008A },
+
+ // Windows Server 2008 B (Enterprise)
+ { { 0xc1af4d90, 0xd1bc, 0x44ca, { 0x85, 0xd4, 0x00, 0x3b, 0xa3, 0x3d, 0xb3, 0xb9, } } /*c1af4d90-d1bc-44ca-85d4-003ba33db3b9*/, "Windows Server 2008 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B },
+ { { 0x8198490a, 0xadd0, 0x47b2, { 0xb3, 0xba, 0x31, 0x6b, 0x12, 0xd6, 0x47, 0xb4, } } /*8198490a-add0-47b2-b3ba-316b12d647b4*/, "Windows Server 2008 Enterprise without Hyper-V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008B },
+
+ // Windows Server 2008 C (Datacenter)
+ { { 0x7afb1156, 0x2c1d, 0x40fc, { 0xb2, 0x60, 0xaa, 0xb7, 0x44, 0x2b, 0x62, 0xfe, } } /*7afb1156-2c1d-40fc-b260-aab7442b62fe*/, "Windows Server 2008 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
+ { { 0x68b6e220, 0xcf09, 0x466b, { 0x92, 0xd3, 0x45, 0xcd, 0x96, 0x4b, 0x95, 0x09, } } /*68b6e220-cf09-466b-92d3-45cd964b9509*/, "Windows Server 2008 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
+ { { 0xfd09ef77, 0x5647, 0x4eff, { 0x80, 0x9c, 0xaf, 0x2b, 0x64, 0x65, 0x9a, 0x45, } } /*fd09ef77-5647-4eff-809c-af2b64659a45*/, "Windows Server 2008 Datacenter without Hyper-V", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
+ { { 0x01ef176b, 0x3e0d, 0x422a, { 0xb4, 0xf8, 0x4e, 0xa8, 0x80, 0x03, 0x5e, 0x8f, } } /*01ef176b-3e0d-422a-b4f8-4ea880035e8f*/, "Windows Server 2008 for Itanium", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008C },
+
+ // Windows Server 2008 R2 A (Web and Standard)
+ { { 0xf772515c, 0x0e87, 0x48d5, { 0xa6, 0x76, 0xe6, 0x96, 0x2c, 0x3e, 0x11, 0x95, } } /*f772515c-0e87-48d5-a676-e6962c3e1195*/, "Windows MultiPoint Server 2010", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A },
+ { { 0x68531fb9, 0x5511, 0x4989, { 0x97, 0xbe, 0xd1, 0x1a, 0x0f, 0x55, 0x63, 0x3f, } } /*68531fb9-5511-4989-97be-d11a0f55633f*/, "Windows Server 2008 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A },
+ { { 0xa78b8bd9, 0x8017, 0x4df5, { 0xb8, 0x6a, 0x09, 0xf7, 0x56, 0xaf, 0xfa, 0x7c, } } /*a78b8bd9-8017-4df5-b86a-09f756affa7c*/, "Windows Server 2008 R2 Web", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2A },
+
+ // Windows Server 2008 R2 B (Enterprise)
+ { { 0x620e2b3d, 0x09e7, 0x42fd, { 0x80, 0x2a, 0x17, 0xa1, 0x36, 0x52, 0xfe, 0x7a, } } /*620e2b3d-09e7-42fd-802a-17a13652fe7a*/, "Windows Server 2008 R2 Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2B },
+
+ // Windows Server 2008 R2 C (Datacenter)
+ { { 0xcda18cf3, 0xc196, 0x46ad, { 0xb2, 0x89, 0x60, 0xc0, 0x72, 0x86, 0x99, 0x94, } } /*cda18cf3-c196-46ad-b289-60c072869994*/, "Windows Server 2008 R2 Compute Cluster", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C },
+ { { 0x7482e61b, 0xc589, 0x4b7f, { 0x8e, 0xcc, 0x46, 0xd4, 0x55, 0xac, 0x3b, 0x87, } } /*7482e61b-c589-4b7f-8ecc-46d455ac3b87*/, "Windows Server 2008 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C },
+ { { 0x8a26851c, 0x1c7e, 0x48d3, { 0xa6, 0x87, 0xfb, 0xca, 0x9b, 0x9a, 0xc1, 0x6b, } } /*8a26851c-1c7e-48d3-a687-fbca9b9ac16b*/, "Windows Server 2008 R2 for Itanium Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2008R2C },
+
+ // Windows Server 2012
+ { { 0xd3643d60, 0x0c42, 0x412d, { 0xa7, 0xd6, 0x52, 0xe6, 0x63, 0x53, 0x27, 0xf6, } } /*d3643d60-0c42-412d-a7d6-52e6635327f6*/, "Windows Server 2012 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
+ { { 0x95fd1c83, 0x7df5, 0x494a, { 0xbe, 0x8b, 0x13, 0x00, 0xe1, 0xc9, 0xd1, 0xcd, } } /*95fd1c83-7df5-494a-be8b-1300e1c9d1cd*/, "Windows Server 2012 MultiPoint Premium", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
+ { { 0x7d5486c7, 0xe120, 0x4771, { 0xb7, 0xf1, 0x7b, 0x56, 0xc6, 0xd3, 0x17, 0x0c, } } /*7d5486c7-e120-4771-b7f1-7b56c6d3170c*/, "Windows Server 2012 MultiPoint Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
+ { { 0xf0f5ec41, 0x0d55, 0x4732, { 0xaf, 0x02, 0x44, 0x0a, 0x44, 0xa3, 0xcf, 0x0f, } } /*f0f5ec41-0d55-4732-af02-440a44a3cf0f*/, "Windows Server 2012 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012 },
+
+ // Windows Server 2012 R2
+ { { 0xb743a2be, 0x68d4, 0x4dd3, { 0xaf, 0x32, 0x92, 0x42, 0x5b, 0x7b, 0xb6, 0x23, } } /*b743a2be-68d4-4dd3-af32-92425b7bb623*/, "Windows Server 2012 R2 Cloud Storage", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
+ { { 0x00091344, 0x1ea4, 0x4f37, { 0xb7, 0x89, 0x01, 0x75, 0x0b, 0xa6, 0x98, 0x8c, } } /*00091344-1ea4-4f37-b789-01750ba6988c*/, "Windows Server 2012 R2 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
+ { { 0x21db6ba4, 0x9a7b, 0x4a14, { 0x9e, 0x29, 0x64, 0xa6, 0x0c, 0x59, 0x30, 0x1d, } } /*21db6ba4-9a7b-4a14-9e29-64a60c59301d*/, "Windows Server 2012 R2 Essentials", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
+ { { 0xb3ca044e, 0xa358, 0x4d68, { 0x98, 0x83, 0xaa, 0xa2, 0x94, 0x1a, 0xca, 0x99, } } /*b3ca044e-a358-4d68-9883-aaa2941aca99*/, "Windows Server 2012 R2 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2012R2 },
+
+ // Windows Server 2016
+ { { 0x7b4433f4, 0xb1e7, 0x4788, { 0x89, 0x5a, 0xc4, 0x53, 0x78, 0xd3, 0x82, 0x53, } } /*7b4433f4-b1e7-4788-895a-c45378d38253*/, "Windows Server 2016 Azure Core", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 },
+ { { 0x3dbf341b, 0x5f6c, 0x4fa7, { 0xb9, 0x36, 0x69, 0x9d, 0xce, 0x9e, 0x26, 0x3f, } } /*3dbf341b-5f6c-4fa7-b936-699dce9e263f*/, "Windows Server 2016 Cloud Storage", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 },
+ { { 0x21c56779, 0xb449, 0x4d20, { 0xad, 0xfc, 0xee, 0xce, 0x0e, 0x1a, 0xd7, 0x4b, } } /*21c56779-b449-4d20-adfc-eece0e1ad74b*/, "Windows Server 2016 Datacenter", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 },
+ { { 0x2b5a1b0f, 0xa5ab, 0x4c54, { 0xac, 0x2f, 0xa6, 0xd9, 0x48, 0x24, 0xa2, 0x83, } } /*2b5a1b0f-a5ab-4c54-ac2f-a6d94824a283*/, "Windows Server 2016 Essentials", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 },
+ { { 0x8c1c5410, 0x9f39, 0x4805, { 0x8c, 0x9d, 0x63, 0xa0, 0x77, 0x06, 0x35, 0x8f, } } /*8c1c5410-9f39-4805-8c9d-63a07706358f*/, "Windows Server 2016 Standard", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN2016 },
+
+ // Windows Server Preview
+ # ifdef INCLUDE_BETAS
+ { { 0xba947c44, 0xd19d, 0x4786, { 0xb6, 0xae, 0x22, 0x77, 0x0b, 0xc9, 0x4c, 0x54, } } /*ba947c44-d19d-4786-b6ae-22770bc94c54*/, "Windows Server 2016 Datacenter Preview", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_WIN_SRV_BETA },
+ # endif // INCLUDE_BETAS
+
+ // Windows Vista
+ { { 0x4f3d1606, 0x3fea, 0x4c01, { 0xbe, 0x3c, 0x8d, 0x67, 0x1c, 0x40, 0x1e, 0x3b, } } /*4f3d1606-3fea-4c01-be3c-8d671c401e3b*/, "Windows Vista Business", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
+ { { 0x2c682dc2, 0x8b68, 0x4f63, { 0xa1, 0x65, 0xae, 0x29, 0x1d, 0x4c, 0xf1, 0x38, } } /*2c682dc2-8b68-4f63-a165-ae291d4cf138*/, "Windows Vista Business N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
+ { { 0xcfd8ff08, 0xc0d7, 0x452b, { 0x9f, 0x60, 0xef, 0x5c, 0x70, 0xc3, 0x20, 0x94, } } /*cfd8ff08-c0d7-452b-9f60-ef5c70c32094*/, "Windows Vista Enterprise", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
+ { { 0xd4f54950, 0x26f2, 0x4fb4, { 0xba, 0x21, 0xff, 0xab, 0x16, 0xaf, 0xca, 0xde, } } /*d4f54950-26f2-4fb4-ba21-ffab16afcade*/, "Windows Vista Enterprise N", EPID_WINDOWS, APP_ID_WINDOWS, KMS_ID_VISTA },
+
+ // Office 2010
+ { { 0x8ce7e872, 0x188c, 0x4b98, { 0x9d, 0x90, 0xf8, 0xf9, 0x0b, 0x7a, 0xad, 0x02, } } /*8ce7e872-188c-4b98-9d90-f8f90b7aad02*/, "Office Access 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0xcee5d470, 0x6e3b, 0x4fcc, { 0x8c, 0x2b, 0xd1, 0x74, 0x28, 0x56, 0x8a, 0x9f, } } /*cee5d470-6e3b-4fcc-8c2b-d17428568a9f*/, "Office Excel 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0x8947d0b8, 0xc33b, 0x43e1, { 0x8c, 0x56, 0x9b, 0x67, 0x4c, 0x05, 0x28, 0x32, } } /*8947d0b8-c33b-43e1-8c56-9b674c052832*/, "Office Groove 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0xca6b6639, 0x4ad6, 0x40ae, { 0xa5, 0x75, 0x14, 0xde, 0xe0, 0x7f, 0x64, 0x30, } } /*ca6b6639-4ad6-40ae-a575-14dee07f6430*/, "Office InfoPath 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0x09ed9640, 0xf020, 0x400a, { 0xac, 0xd8, 0xd7, 0xd8, 0x67, 0xdf, 0xd9, 0xc2, } } /*09ed9640-f020-400a-acd8-d7d867dfd9c2*/, "Office Mondo 1 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0xef3d4e49, 0xa53d, 0x4d81, { 0xa2, 0xb1, 0x2c, 0xa6, 0xc2, 0x55, 0x6b, 0x2c, } } /*ef3d4e49-a53d-4d81-a2b1-2ca6c2556b2c*/, "Office Mondo 2 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0xab586f5c, 0x5256, 0x4632, { 0x96, 0x2f, 0xfe, 0xfd, 0x8b, 0x49, 0xe6, 0xf4, } } /*ab586f5c-5256-4632-962f-fefd8b49e6f4*/, "Office OneNote 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0xecb7c192, 0x73ab, 0x4ded, { 0xac, 0xf4, 0x23, 0x99, 0xb0, 0x95, 0xd0, 0xcc, } } /*ecb7c192-73ab-4ded-acf4-2399b095d0cc*/, "Office OutLook 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0x45593b1d, 0xdfb1, 0x4e91, { 0xbb, 0xfb, 0x2d, 0x5d, 0x0c, 0xe2, 0x22, 0x7a, } } /*45593b1d-dfb1-4e91-bbfb-2d5d0ce2227a*/, "Office PowerPoint 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0x6f327760, 0x8c5c, 0x417c, { 0x9b, 0x61, 0x83, 0x6a, 0x98, 0x28, 0x7e, 0x0c, } } /*6f327760-8c5c-417c-9b61-836a98287e0c*/, "Office Professional Plus 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0xdf133ff7, 0xbf14, 0x4f95, { 0xaf, 0xe3, 0x7b, 0x48, 0xe7, 0xe3, 0x31, 0xef, } } /*df133ff7-bf14-4f95-afe3-7b48e7e331ef*/, "Office Project Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0x5dc7bf61, 0x5ec9, 0x4996, { 0x9c, 0xcb, 0xdf, 0x80, 0x6a, 0x2d, 0x0e, 0xfe, } } /*5dc7bf61-5ec9-4996-9ccb-df806a2d0efe*/, "Office Project Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0xb50c4f75, 0x599b, 0x43e8, { 0x8d, 0xcd, 0x10, 0x81, 0xa7, 0x96, 0x72, 0x41, } } /*b50c4f75-599b-43e8-8dcd-1081a7967241*/, "Office Publisher 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0xea509e87, 0x07a1, 0x4a45, { 0x9e, 0xdc, 0xeb, 0xa5, 0xa3, 0x9f, 0x36, 0xaf, } } /*ea509e87-07a1-4a45-9edc-eba5a39f36af*/, "Office Small Business Basics 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0x9da2a678, 0xfb6b, 0x4e67, { 0xab, 0x84, 0x60, 0xdd, 0x6a, 0x9c, 0x81, 0x9a, } } /*9da2a678-fb6b-4e67-ab84-60dd6a9c819a*/, "Office Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0x92236105, 0xbb67, 0x494f, { 0x94, 0xc7, 0x7f, 0x7a, 0x60, 0x79, 0x29, 0xbd, } } /*92236105-bb67-494f-94c7-7f7a607929bd*/, "Office Visio Premium 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0xe558389c, 0x83c3, 0x4b29, { 0xad, 0xfe, 0x5e, 0x4d, 0x7f, 0x46, 0xc3, 0x58, } } /*e558389c-83c3-4b29-adfe-5e4d7f46c358*/, "Office Visio Pro 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0x9ed833ff, 0x4f92, 0x4f36, { 0xb3, 0x70, 0x86, 0x83, 0xa4, 0xf1, 0x32, 0x75, } } /*9ed833ff-4f92-4f36-b370-8683a4f13275*/, "Office Visio Standard 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+ { { 0x2d0882e7, 0xa4e7, 0x423b, { 0x8c, 0xcc, 0x70, 0xd9, 0x1e, 0x01, 0x58, 0xb1, } } /*2d0882e7-a4e7-423b-8ccc-70d91e0158b1*/, "Office Word 2010", EPID_OFFICE2010, APP_ID_OFFICE2010, KMS_ID_OFFICE2010 },
+
+ // Office 2013
+ { { 0x6ee7622c, 0x18d8, 0x4005, { 0x9f, 0xb7, 0x92, 0xdb, 0x64, 0x4a, 0x27, 0x9b, } } /*6ee7622c-18d8-4005-9fb7-92db644a279b*/, "Office Access 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0xf7461d52, 0x7c2b, 0x43b2, { 0x87, 0x44, 0xea, 0x95, 0x8e, 0x0b, 0xd0, 0x9a, } } /*f7461d52-7c2b-43b2-8744-ea958e0bd09a*/, "Office Excel 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0xa30b8040, 0xd68a, 0x423f, { 0xb0, 0xb5, 0x9c, 0xe2, 0x92, 0xea, 0x5a, 0x8f, } } /*a30b8040-d68a-423f-b0b5-9ce292ea5a8f*/, "Office InfoPath 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0x1b9f11e3, 0xc85c, 0x4e1b, { 0xbb, 0x29, 0x87, 0x9a, 0xd2, 0xc9, 0x09, 0xe3, } } /*1b9f11e3-c85c-4e1b-bb29-879ad2c909e3*/, "Office Lync 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0xdc981c6b, 0xfc8e, 0x420f, { 0xaa, 0x43, 0xf8, 0xf3, 0x3e, 0x5c, 0x09, 0x23, } } /*dc981c6b-fc8e-420f-aa43-f8f33e5c0923*/, "Office Mondo 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0xefe1f3e6, 0xaea2, 0x4144, { 0xa2, 0x08, 0x32, 0xaa, 0x87, 0x2b, 0x65, 0x45, } } /*efe1f3e6-aea2-4144-a208-32aa872b6545*/, "Office OneNote 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0x771c3afa, 0x50c5, 0x443f, { 0xb1, 0x51, 0xff, 0x25, 0x46, 0xd8, 0x63, 0xa0, } } /*771c3afa-50c5-443f-b151-ff2546d863a0*/, "Office OutLook 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0x8c762649, 0x97d1, 0x4953, { 0xad, 0x27, 0xb7, 0xe2, 0xc2, 0x5b, 0x97, 0x2e, } } /*8c762649-97d1-4953-ad27-b7e2c25b972e*/, "Office PowerPoint 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0xb322da9c, 0xa2e2, 0x4058, { 0x9e, 0x4e, 0xf5, 0x9a, 0x69, 0x70, 0xbd, 0x69, } } /*b322da9c-a2e2-4058-9e4e-f59a6970bd69*/, "Office Professional Plus 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0x4a5d124a, 0xe620, 0x44ba, { 0xb6, 0xff, 0x65, 0x89, 0x61, 0xb3, 0x3b, 0x9a, } } /*4a5d124a-e620-44ba-b6ff-658961b33b9a*/, "Office Project Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0x427a28d1, 0xd17c, 0x4abf, { 0xb7, 0x17, 0x32, 0xc7, 0x80, 0xba, 0x6f, 0x07, } } /*427a28d1-d17c-4abf-b717-32c780ba6f07*/, "Office Project Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0x00c79ff1, 0x6850, 0x443d, { 0xbf, 0x61, 0x71, 0xcd, 0xe0, 0xde, 0x30, 0x5f, } } /*00c79ff1-6850-443d-bf61-71cde0de305f*/, "Office Publisher 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0xb13afb38, 0xcd79, 0x4ae5, { 0x9f, 0x7f, 0xee, 0xd0, 0x58, 0xd7, 0x50, 0xca, } } /*b13afb38-cd79-4ae5-9f7f-eed058d750ca*/, "Office Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0xe13ac10e, 0x75d0, 0x4aff, { 0xa0, 0xcd, 0x76, 0x49, 0x82, 0xcf, 0x54, 0x1c, } } /*e13ac10e-75d0-4aff-a0cd-764982cf541c*/, "Office Visio Pro 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0xac4efaf0, 0xf81f, 0x4f61, { 0xbd, 0xf7, 0xea, 0x32, 0xb0, 0x2a, 0xb1, 0x17, } } /*ac4efaf0-f81f-4f61-bdf7-ea32b02ab117*/, "Office Visio Standard 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+ { { 0xd9f5b1c6, 0x5386, 0x495a, { 0x88, 0xf9, 0x9a, 0xd6, 0xb4, 0x1a, 0xc9, 0xb3, } } /*d9f5b1c6-5386-495a-88f9-9ad6b41ac9b3*/, "Office Word 2013", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2013 },
+
+ // Office 2016
+ { { 0x67c0fc0c, 0xdeba, 0x401b, { 0xbf, 0x8b, 0x9c, 0x8a, 0xd8, 0x39, 0x58, 0x04, } } /*67c0fc0c-deba-401b-bf8b-9c8ad8395804*/, "Office Access 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0xc3e65d36, 0x141f, 0x4d2f, { 0xa3, 0x03, 0xa8, 0x42, 0xee, 0x75, 0x6a, 0x29, } } /*c3e65d36-141f-4d2f-a303-a842ee756a29*/, "Office Excel 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0x9caabccb, 0x61b1, 0x4b4b, { 0x8b, 0xec, 0xd1, 0x0a, 0x3c, 0x3a, 0xc2, 0xce, } } /*9caabccb-61b1-4b4b-8bec-d10a3c3ac2ce*/, "Office Mondo 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0xe914ea6e, 0xa5fa, 0x4439, { 0xa3, 0x94, 0xa9, 0xbb, 0x32, 0x93, 0xca, 0x09, } } /*e914ea6e-a5fa-4439-a394-a9bb3293ca09*/, "Office Mondo R 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0xd8cace59, 0x33d2, 0x4ac7, { 0x9b, 0x1b, 0x9b, 0x72, 0x33, 0x9c, 0x51, 0xc8, } } /*d8cace59-33d2-4ac7-9b1b-9b72339c51c8*/, "Office OneNote 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0xec9d9265, 0x9d1e, 0x4ed0, { 0x83, 0x8a, 0xcd, 0xc2, 0x0f, 0x25, 0x51, 0xa1, } } /*ec9d9265-9d1e-4ed0-838a-cdc20f2551a1*/, "Office Outlook 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0xd70b1bba, 0xb893, 0x4544, { 0x96, 0xe2, 0xb7, 0xa3, 0x18, 0x09, 0x1c, 0x33, } } /*d70b1bba-b893-4544-96e2-b7a318091c33*/, "Office Powerpoint 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0xd450596f, 0x894d, 0x49e0, { 0x96, 0x6a, 0xfd, 0x39, 0xed, 0x4c, 0x4c, 0x64, } } /*d450596f-894d-49e0-966a-fd39ed4c4c64*/, "Office Professional Plus 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0x4f414197, 0x0fc2, 0x4c01, { 0xb6, 0x8a, 0x86, 0xcb, 0xb9, 0xac, 0x25, 0x4c, } } /*4f414197-0fc2-4c01-b68a-86cbb9ac254c*/, "Office Project Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0x829b8110, 0x0e6f, 0x4349, { 0xbc, 0xa4, 0x42, 0x80, 0x35, 0x77, 0x78, 0x8d, } } /*829b8110-0e6f-4349-bca4-42803577788d*/, "Office Project Pro 2016 XC2R", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0xda7ddabc, 0x3fbe, 0x4447, { 0x9e, 0x01, 0x6a, 0xb7, 0x44, 0x0b, 0x4c, 0xd4, } } /*da7ddabc-3fbe-4447-9e01-6ab7440b4cd4*/, "Office Project Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0xcbbaca45, 0x556a, 0x4416, { 0xad, 0x03, 0xbd, 0xa5, 0x98, 0xea, 0xa7, 0xc8, } } /*cbbaca45-556a-4416-ad03-bda598eaa7c8*/, "Office Project Standard 2016 XC2R", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0x041a06cb, 0xc5b8, 0x4772, { 0x80, 0x9f, 0x41, 0x6d, 0x03, 0xd1, 0x66, 0x54, } } /*041a06cb-c5b8-4772-809f-416d03d16654*/, "Office Publisher 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0x83e04ee1, 0xfa8d, 0x436d, { 0x89, 0x94, 0xd3, 0x1a, 0x86, 0x2c, 0xab, 0x77, } } /*83e04ee1-fa8d-436d-8994-d31a862cab77*/, "Office Skype for Business 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0xdedfa23d, 0x6ed1, 0x45a6, { 0x85, 0xdc, 0x63, 0xca, 0xe0, 0x54, 0x6d, 0xe6, } } /*dedfa23d-6ed1-45a6-85dc-63cae0546de6*/, "Office Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0x6bf301c1, 0xb94a, 0x43e9, { 0xba, 0x31, 0xd4, 0x94, 0x59, 0x8c, 0x47, 0xfb, } } /*6bf301c1-b94a-43e9-ba31-d494598c47fb*/, "Office Visio Pro 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0xb234abe3, 0x0857, 0x4f9c, { 0xb0, 0x5a, 0x4d, 0xc3, 0x14, 0xf8, 0x55, 0x57, } } /*b234abe3-0857-4f9c-b05a-4dc314f85557*/, "Office Visio Pro 2016 XC2R", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0xaa2a7821, 0x1827, 0x4c2c, { 0x8f, 0x1d, 0x45, 0x13, 0xa3, 0x4d, 0xda, 0x97, } } /*aa2a7821-1827-4c2c-8f1d-4513a34dda97*/, "Office Visio Standard 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0x361fe620, 0x64f4, 0x41b5, { 0xba, 0x77, 0x84, 0xf8, 0xe0, 0x79, 0xb1, 0xf7, } } /*361fe620-64f4-41b5-ba77-84f8e079b1f7*/, "Office Visio Standard 2016 XC2R", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
+ { { 0xbb11badf, 0xd8aa, 0x470e, { 0x93, 0x11, 0x20, 0xea, 0xf8, 0x0f, 0xe5, 0xcc, } } /*bb11badf-d8aa-470e-9311-20eaf80fe5cc*/, "Office Word 2016", EPID_OFFICE2013, APP_ID_OFFICE2013, KMS_ID_OFFICE2016 },
// End marker (necessity should be removed when time permits)
@@ -260,7 +288,7 @@ static const struct KMSHostOS { uint16_t Type; uint16_t Build; } HostOS[] =
{ 55041, 7601 }, // Windows Server 2008 R2 SP1
{ 5426, 9200 }, // Windows Server 2012
{ 6401, 9600 }, // Windows Server 2012 R2
- //{ 3612, 10240}, // Windows Server 2016
+ { 3612, 14393 }, // Windows Server 2016
};
// GroupID and PIDRange
@@ -380,9 +408,9 @@ static int getRandomServerType()
else
{
// return 9200/9600 if NDR64 is in use, otherwise 6002/7601
- return (rand() % 2) + (UseRpcNDR64 ? 2 : 0);
- // if (UseRpcNDR64) return (rand() % 3) + 2;
- // return (rand() % 2);
+ // return (rand() % 2) + (UseRpcNDR64 ? 2 : 0);
+ if (UseRpcNDR64) return (rand() % 3) + 2;
+ return (rand() % 2);
}
# endif // USE_MSRPC
}
@@ -409,7 +437,7 @@ static void generateRandomPid(const int index, char *const szPid, int serverType
else if (index == 1)
clientApp = 2;
else
- clientApp = serverType == 3 /*change if HostOS changes*/ ? 1 : 0;
+ clientApp = serverType >= 3 /*change if HostOS changes*/ ? 1 : 0;
strcat(szPid, itoc(numberBuffer, pkeyconfig[clientApp].GroupID, 5));
strcat(szPid, "-");
@@ -427,7 +455,7 @@ static void generateRandomPid(const int index, char *const szPid, int serverType
strcat(szPid, itoc(numberBuffer, HostOS[serverType].Build, 0));
strcat(szPid, ".0000-");
-# define minTime ((time_t)1382029200) // Release Date Win 2012R2
+ time_t minTime = serverType==4 ? ((time_t)1470175200) /* Release Date Win 2016 */ : ((time_t)1382029200); // Release Date Win 2012R2
time_t maxTime, kmsTime;
time(&maxTime);
@@ -436,7 +464,6 @@ static void generateRandomPid(const int index, char *const szPid, int serverType
maxTime = (time_t)BUILD_TIME;
kmsTime = (rand32() % (maxTime - minTime)) + minTime;
-# undef minTime
struct tm *pidTime;
pidTime = gmtime(&kmsTime);
@@ -526,7 +553,7 @@ static void logRequest(const REQUEST *const baseRequest)
static void getEpidFromString(RESPONSE *const Response, const char *const pid)
{
size_t length = utf8_to_ucs2(Response->KmsPID, pid, PID_BUFFER_SIZE, PID_BUFFER_SIZE * 3);
- Response->PIDSize = LE32(((unsigned int )length + 1) << 1);
+ Response->PIDSize = LE32(((unsigned int)length + 1) << 1);
}
@@ -656,10 +683,12 @@ static BOOL __stdcall CreateResponseBaseCallback(const REQUEST *const baseReques
memcpy(&baseResponse->CMID, &baseRequest->CMID, sizeof(GUID));
memcpy(&baseResponse->ClientTime, &baseRequest->ClientTime, sizeof(FILETIME));
- baseResponse->Count = LE32(LE32(baseRequest->N_Policy) << 1);
+ baseResponse->Count = index == 1 || index == 2 ? LE32(10) : LE32(50);
baseResponse->VLActivationInterval = LE32(VLActivationInterval);
baseResponse->VLRenewalInterval = LE32(VLRenewalInterval);
+ if (LE32(baseRequest->N_Policy) > LE32(baseResponse->Count)) baseResponse->Count = LE32(LE32(baseRequest->N_Policy) << 1);
+
#ifndef NO_LOG
logResponse(baseResponse, hwId, EpidSource);
#endif // NO_LOG
diff --git a/kms.h b/kms.h
index c4542e9..8202daf 100644
--- a/kms.h
+++ b/kms.h
@@ -252,6 +252,7 @@ typedef struct
#define KMS_ID_OFFICE2016 18
#define KMS_ID_WIN10_VL 19
#define KMS_ID_WIN10_RETAIL 20
+#define KMS_ID_WIN2016 21
#define PWINGUID &AppList[APP_ID_WINDOWS].guid
#define POFFICE2010GUID &AppList[APP_ID_OFFICE2010].guid
diff --git a/libkms.c b/libkms.c
index 37ba157..bc1148c 100644
--- a/libkms.c
+++ b/libkms.c
@@ -13,7 +13,7 @@
#define EXTERNAL dllexport
-#define DLLVERSION 0x30001
+#define DLLVERSION 0x30002
#include "libkms.h"
#include "shared_globals.h"
@@ -28,23 +28,74 @@
#include
#endif // WIN32
-#ifdef IS_LIBRARY
-char ErrorMessage[MESSAGE_BUFFER_SIZE];
-#endif // IS_LIBRARY
-
static int_fast8_t IsServerStarted = FALSE;
+#ifdef _WIN32
+#ifndef USE_MSRPC
+
+static int_fast8_t SocketsInitialized = FALSE;
+WSADATA wsadata;
+
+static int initializeWinSockets()
+{
+ if (SocketsInitialized) return 0;
+ SocketsInitialized = TRUE;
+ return WSAStartup(0x0202, &wsadata);
+}
+
+#endif // USE_MSRPC
+#endif // _WIN32
-EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendActivationRequest
-(
- const char* const hostname,
- const int port,
- RESPONSE* baseResponse,
- const REQUEST* const baseRequest,
- RESPONSE_RESULT* result, BYTE *hwid
-)
+EXTERNC __declspec(EXTERNAL) char* __cdecl GetErrorMessage()
{
- return !0; // not yet implemented
+ return ErrorMessage;
+}
+
+EXTERNC __declspec(EXTERNAL) SOCKET __cdecl ConnectToServer(const char* host, const char* port, const int addressFamily)
+{
+ SOCKET sock;
+ *ErrorMessage = 0;
+
+# if defined(_WIN32) && !defined(USE_MSRPC)
+ initializeWinSockets();
+# endif // defined(_WIN32) && !defined(USE_MSRPC)
+
+ size_t adrlen = strlen(host) + 16;
+ char* RemoteAddr = (char*)alloca(adrlen);
+ snprintf(RemoteAddr, adrlen, "[%s]:%s", host, port);
+ sock = connectToAddress(RemoteAddr, addressFamily, FALSE);
+
+ if (sock == INVALID_RPCCTX)
+ {
+ printerrorf("Fatal: Could not connect to %s\n", RemoteAddr);
+ return sock;
+ }
+
+ return sock;
+}
+
+EXTERNC __declspec(EXTERNAL) RpcStatus __cdecl BindRpc(const SOCKET sock, const int_fast8_t useMultiplexedRpc)
+{
+ *ErrorMessage = 0;
+ UseMultiplexedRpc = useMultiplexedRpc;
+ return rpcBindClient(sock, FALSE);
+}
+
+EXTERNC __declspec(EXTERNAL) void __cdecl CloseConnection(const SOCKET sock)
+{
+ socketclose(sock);
+}
+
+
+EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendKMSRequest(const SOCKET sock, RESPONSE* baseResponse, REQUEST* baseRequest, RESPONSE_RESULT* result, BYTE *hwid)
+{
+ *ErrorMessage = 0;
+ return SendActivationRequest(sock, baseResponse, baseRequest, result, hwid);
+}
+
+EXTERNC __declspec(EXTERNAL) int_fast8_t __cdecl IsDisconnected(const SOCKET sock)
+{
+ return isDisconnected(sock);
}
@@ -56,16 +107,8 @@ EXTERNC __declspec(EXTERNAL) DWORD __cdecl StartKmsServer(const int port, Reques
if (IsServerStarted) return !0;
# ifdef _WIN32
-# ifndef USE_MSRPC
- // Windows Sockets must be initialized
- WSADATA wsadata;
- int error;
-
- if ((error = WSAStartup(0x0202, &wsadata)))
- {
- return error;
- }
-# endif // USE_MSRPC
+ int error = initializeWinSockets();
+ if (error) return error;
# endif // _WIN32
CreateResponseBase = requestCallback;
@@ -113,15 +156,8 @@ EXTERNC __declspec(EXTERNAL) DWORD __cdecl StartKmsServer(const int port, Reques
int error;
# ifdef _WIN32
-# ifndef USE_MSRPC
- // Windows Sockets must be initialized
- WSADATA wsadata;
-
- if ((error = WSAStartup(0x0202, &wsadata)))
- {
- return error;
- }
-# endif // USE_MSRPC
+ error = initializeWinSockets();
+ if (error) return error;
# endif // _WIN32
defaultport = vlmcsd_malloc(16);
diff --git a/libkms.h b/libkms.h
index 1281ce5..6babaa7 100644
--- a/libkms.h
+++ b/libkms.h
@@ -8,6 +8,7 @@
#include "types.h"
#include "kms.h"
#include "rpc.h"
+#include "vlmcs.h"
#ifndef EXTERNC
#ifdef __cplusplus
@@ -17,11 +18,16 @@
#endif
#endif
-EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendActivationRequest(const char* const hostname, const int port, RESPONSE* baseResponse, const REQUEST* const baseRequest, RESPONSE_RESULT* result, BYTE *hwid);
+EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendKMSRequest(const SOCKET sock, RESPONSE* baseResponse, REQUEST* baseRequest, RESPONSE_RESULT* result, BYTE *hwid);
EXTERNC __declspec(EXTERNAL) DWORD __cdecl StartKmsServer(const int port, RequestCallback_t requestCallback);
EXTERNC __declspec(EXTERNAL) DWORD __cdecl StopKmsServer();
EXTERNC __declspec(EXTERNAL) int __cdecl GetLibKmsVersion();
EXTERNC __declspec(EXTERNAL) const char* const __cdecl GetEmulatorVersion();
+EXTERNC __declspec(EXTERNAL) SOCKET __cdecl ConnectToServer(const char* host, const char* port, const int addressFamily);
+EXTERNC __declspec(EXTERNAL) char* __cdecl GetErrorMessage();
+EXTERNC __declspec(EXTERNAL) void __cdecl CloseConnection(const SOCKET sock);
+EXTERNC __declspec(EXTERNAL) RpcStatus __cdecl BindRpc(const SOCKET sock, const int_fast8_t useMultiplexedRpc);
+EXTERNC __declspec(EXTERNAL) int_fast8_t __cdecl IsDisconnected(const SOCKET sock);
//EXTERN_C __declspec(EXTERNAL) unsigned int __cdecl GetRandom32();
diff --git a/make_dragonfly b/make_dragonfly
index b1147b0..5cb28a5 100755
--- a/make_dragonfly
+++ b/make_dragonfly
@@ -1,5 +1,7 @@
#!/usr/local/bin/bash
+export VLMCSD_VERSION="svn`svnversion`"
+
export VERBOSE=3
export DNS_PARSER=OS
diff --git a/make_freebsd b/make_freebsd
index 318e3e0..5a00dc5 100755
--- a/make_freebsd
+++ b/make_freebsd
@@ -1,5 +1,6 @@
#!/usr/local/bin/bash
+export VLMCSD_VERSION="svn`svnversion`"
export VERBOSE=3
export DNS_PARSER=OS
diff --git a/make_hurd b/make_hurd
index acbd68c..8af05ef 100755
--- a/make_hurd
+++ b/make_hurd
@@ -1,5 +1,6 @@
#!/bin/bash
+export VLMCSD_VERSION="svn`svnversion`"
export VERBOSE=3
export DNS_PARSER=OS
diff --git a/make_kfreebsd b/make_kfreebsd
index 5ecdbf2..4254b03 100755
--- a/make_kfreebsd
+++ b/make_kfreebsd
@@ -1,5 +1,6 @@
#!/bin/bash
+export VLMCSD_VERSION="svn`svnversion`"
export VERBOSE=3
export DNS_PARSER=OS
diff --git a/make_linux b/make_linux
index bf6bea5..fa430c0 100755
--- a/make_linux
+++ b/make_linux
@@ -1,6 +1,6 @@
#!/bin/bash
-#export VLMCSD_VERSION="svn`svnversion | sed -e 's/:.*//; s/[^0-9]*$//; s/^$/0/'`"
+export VLMCSD_VERSION="svn`svnversion`"
export VERBOSE=3
export DNS_PARSER=internal
@@ -88,15 +88,15 @@ if [ $? != 0 ]; then
exit $?
fi
-export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden"
+export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden -DIS_LIBRARY"
export LDFLAGS="$LDFLAGS -static-libgcc"
-make $MAKEFLAGS CRYPTO=windows FEATURES=minimum $DLL_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $DLL_NAME
- exit $?
-fi
+#make $MAKEFLAGS CRYPTO=windows FEATURES=minimum $DLL_NAME CAT=2
+#
+#if [ $? != 0 ]; then
+# echo Error creating $DLL_NAME
+# exit $?
+#fi
@@ -148,15 +148,15 @@ if [ $? != 0 ]; then
exit $?
fi
-export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden"
+export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden -DIS_LIBRARY"
export LDFLAGS="$LDFLAGS -static-libgcc"
-make $MAKEFLAGS CRYPTO=windows FEATURES=minimum $DLL_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $DLL_NAME
- exit $?
-fi
+#make $MAKEFLAGS CRYPTO=windows FEATURES=minimum $DLL_NAME CAT=2
+#
+#if [ $? != 0 ]; then
+# echo Error creating $DLL_NAME
+# exit $?
+#fi
diff --git a/make_lxss b/make_lxss
deleted file mode 100755
index e4d0dfc..0000000
--- a/make_lxss
+++ /dev/null
@@ -1,3507 +0,0 @@
-#!/bin/bash
-
-#export VLMCSD_VERSION="svn`svnversion | sed -e 's/:.*//; s/[^0-9]*$//; s/^$/0/'`"
-
-export VERBOSE=3
-export DNS_PARSER=internal
-
-MAKEFLAGS="-j`nproc` -B"
-REUSEOBJFLAGS="-j"
-SMALLCC="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants"
-SMALLLD="-pipe -Wl,--hash-style=sysv -Wl,-z,norelro -Wl,--build-id=none"
-SMALL="$SMALLCC $SMALLLD"
-
-
-rm -f vlmcs vlmcsdmulti vlmcsd 2>/dev/null
-rm -fr binaries
-
-mkdir -p binaries/Linux/intel/glibc
-mkdir -p binaries/Linux/intel/uclibc
-mkdir -p binaries/Linux/intel/static
-mkdir -p binaries/Linux/intel/musl
-
-mkdir -p binaries/Linux/sparc32/glibc
-mkdir -p binaries/Linux/s390/glibc
-
-mkdir -p binaries/Android/arm/bionic
-mkdir -p binaries/Android/arm/static
-mkdir -p binaries/Android/intel/bionic
-mkdir -p binaries/Android/intel/static
-mkdir -p binaries/Android/mips/bionic
-mkdir -p binaries/Android/mips/static
-
-mkdir -p binaries/Linux/arm/little-endian/glibc
-mkdir -p binaries/Linux/arm/little-endian/musl
-mkdir -p binaries/Linux/arm/little-endian/uclibc
-mkdir -p binaries/Linux/arm/little-endian/static
-mkdir -p binaries/Linux/arm/big-endian/uclibc
-mkdir -p binaries/Linux/arm/big-endian/static
-
-mkdir -p binaries/Linux/mips/little-endian/glibc
-mkdir -p binaries/Linux/mips/little-endian/uclibc
-mkdir -p binaries/Linux/mips/little-endian/static
-mkdir -p binaries/Linux/mips/little-endian/musl
-mkdir -p binaries/Linux/mips/big-endian/uclibc
-mkdir -p binaries/Linux/mips/big-endian/static
-mkdir -p binaries/Linux/mips/big-endian/glibc
-mkdir -p binaries/Linux/mips/big-endian/musl
-
-mkdir -p binaries/Linux/ppc/little-endian/glibc
-mkdir -p binaries/Linux/ppc/big-endian/glibc
-mkdir -p binaries/Linux/ppc/big-endian/uclibc
-mkdir -p binaries/Linux/ppc/big-endian/static
-
-mkdir -p binaries/MacOSX/intel
-mkdir -p binaries/MacOSX/ppc
-mkdir -p binaries/iOS/arm
-
-mkdir -p binaries/FreeBSD/intel
-mkdir -p binaries/NetBSD/intel
-mkdir -p binaries/OpenBSD/intel
-mkdir -p binaries/DragonFly/intel
-mkdir -p binaries/Solaris/intel
-mkdir -p binaries/Windows/intel
-mkdir -p binaries/Minix/intel
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-export STAGING_DIR=.
-
-# Windows 32-bit using MingW32-w64 toolchain on Ubuntu Linux
-export CLIENT_NAME=binaries/Windows/intel/vlmcs-Windows-x86.exe
-export PROGRAM_NAME=binaries/Windows/intel/vlmcsd-Windows-x86.exe
-export MULTI_NAME=binaries/Windows/intel/vlmcsdmulti-Windows-x86.exe
-export DLL_NAME=binaries/Windows/intel/libkms32.dll
-export THREADS=1
-export CFLAGS="$SMALLCC"
-export CC=i686-w64-mingw32-gcc
-export PLATFORMFLAGS="-march=i686 -mtune=generic -fwhole-program -pipe"
-export LDFLAGS="-lws2_32 -Wl,--gc-sections,--force-exe-suffix,--large-address-aware,--nxcompat,--dynamicbase,--tsaware"
-export FEATURES=full
-
-make $MAKEFLAGS CAT=2 all $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden"
-export LDFLAGS="$LDFLAGS -static-libgcc"
-
-make $MAKEFLAGS FEATURES=minimum $DLL_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $DLL_NAME
- exit $?
-fi
-
-
-
-# Windows 32-bit using MingW32-w64 toolchain on Ubuntu Linux using MS RPC
-export CLIENT_NAME=binaries/Windows/intel/vlmcs-Windows-msrpc-x86.exe
-export PROGRAM_NAME=binaries/Windows/intel/vlmcsd-Windows-msrpc-x86.exe
-export MULTI_NAME=binaries/Windows/intel/vlmcsdmulti-Windows-msrpc-x86.exe
-export THREADS=1
-export CFLAGS="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fmerge-all-constants -Wno-unused-variable -Wno-missing-braces"
-export CC=i686-w64-mingw32-gcc
-export PLATFORMFLAGS="-march=i686 -mtune=generic -pipe"
-export LDFLAGS="-Wl,--gc-sections,--force-exe-suffix,--large-address-aware,--nxcompat,--dynamicbase,--tsaware -fwhole-program"
-export FEATURES=full
-
-make $MAKEFLAGS CAT=2 MSRPC=1 all
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-make $MAKEFLAGS MSRPC=1 $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-# Windows 64-bit using MingW32-w64 toolchain on Ubuntu Linux
-export CLIENT_NAME=binaries/Windows/intel/vlmcs-Windows-x64.exe
-export PROGRAM_NAME=binaries/Windows/intel/vlmcsd-Windows-x64.exe
-export MULTI_NAME=binaries/Windows/intel/vlmcsdmulti-Windows-x64.exe
-export DLL_NAME=binaries/Windows/intel/libkms64.dll
-export THREADS=1
-export CFLAGS="$SMALLCC"
-export CC=x86_64-w64-mingw32-gcc
-export PLATFORMFLAGS="-march=nocona -mtune=generic -fwhole-program -pipe"
-export LDFLAGS="-lws2_32 -Wl,--gc-sections,--force-exe-suffix,--nxcompat,--dynamicbase,--tsaware"
-
-make $MAKEFLAGS CAT=2 all $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export CFLAGS="$CFLAGS -flto=jobserver -fvisibility=hidden"
-export LDFLAGS="$LDFLAGS -static-libgcc"
-
-make $MAKEFLAGS FEATURES=minimum $DLL_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $DLL_NAME
- exit $?
-fi
-
-
-
-
-# Windows 64-bit using MingW32-w64 toolchain on Ubuntu Linux using MS RPC
-export CLIENT_NAME=binaries/Windows/intel/vlmcs-Windows-msrpc-x64.exe
-export PROGRAM_NAME=binaries/Windows/intel/vlmcsd-Windows-msrpc-x64.exe
-export MULTI_NAME=binaries/Windows/intel/vlmcsdmulti-Windows-msrpc-x64.exe
-export THREADS=1
-export CFLAGS="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fmerge-all-constants -Wno-unused-variable -Wno-missing-braces"
-export CC=x86_64-w64-mingw32-gcc
-export PLATFORMFLAGS="-march=nocona -mtune=generic -pipe"
-export LDFLAGS="-Wl,--gc-sections,--force-exe-suffix,--nxcompat,--dynamicbase,--tsaware -fwhole-program"
-
-make $MAKEFLAGS CAT=2 MSRPC=1 all
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-make $MAKEFLAGS MSRPC=1 $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux mips32el with uClibc 0.9.33.2 using gcc 4.9 from OpenWRT toolchain
-export CLIENT_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcs-mips32el-openwrt-uclib
-export PROGRAM_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsd-mips32el-openwrt-uclibc
-export CC=/opt/toolchains/mipsel-openwrt-linux-uclibc/toolchain-mipsel_mips32_gcc-4.9-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc
-export CFLAGS="$SMALLCC -DNO_LIMIT"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export CLIENT_NAME=binaries/Linux/mips/little-endian/static/vlmcs-mips32el-openwrt-uclib-static
-export PROGRAM_NAME=binaries/Linux/mips/little-endian/static/vlmcsd-mips32el-openwrt-uclibc-static
-export MULTI_NAME=binaries/Linux/mips/little-endian/static/vlmcsdmulti-mips32el-openwrt-uclibc-static
-export LDFLAGS="$LDFLAGS -static"
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export MULTI_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsdmulti-mips32el-openwrt-uclibc
-export LDFLAGS="$SMALLLD"
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux mips16el with uClibc 0.9.33.2 using gcc 4.9 from OpenWRT toolchain with statically linked libgcc for Asus routers, e.g. Asus RT-N66U
-export CLIENT_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcs-mips16el-asus-rt-n66u-uclibc
-export PROGRAM_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsd-mips16el-asus-rt-n66u-uclibc
-export CC=/opt/toolchains/mipsel-openwrt-linux-uclibc/toolchain-mipsel_mips32_gcc-4.9-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc
-export CFLAGS="$SMALLCC -static-libgcc -DNO_LIMIT"
-export PLATFORMFLAGS="-mips32 -mips16 -flto=jobserver -fwhole-program"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export CLIENT_NAME=binaries/Linux/mips/little-endian/static/vlmcs-mips16el-asus-rt-n66u-uclibc-static
-export PROGRAM_NAME=binaries/Linux/mips/little-endian/static/vlmcsd-mips16el-asus-rt-n66u-uclibc-static
-export MULTI_NAME=binaries/Linux/mips/little-endian/static/vlmcsdmulti-mips16el-asus-rt-n66u-uclibc-static
-export LDFLAGS="$LDFLAGS -static"
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export MULTI_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsdmulti-mips16el-asus-rt-n66u-uclibc
-export LDFLAGS="$SMALLLD"
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-
-
-# Linux mips16el with uClibc 0.9.33.2 using gcc 4.8 from OpenWRT toolchain
-export CLIENT_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcs-mips16el-openwrt-uclibc
-export PROGRAM_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsd-mips16el-openwrt-uclibc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16"
-export LDFLAGS="$SMALLLD"
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export CLIENT_NAME=binaries/Linux/mips/little-endian/static/vlmcs-mips16el-openwrt-uclib-static
-export PROGRAM_NAME=binaries/Linux/mips/little-endian/static/vlmcsd-mips16el-openwrt-uclibc-static
-export MULTI_NAME=binaries/Linux/mips/little-endian/static/vlmcsdmulti-mips16el-openwrt-uclibc-static
-export LDFLAGS="$LDFLAGS -static"
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export MULTI_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsdmulti-mips16el-openwrt-uclibc
-export LDFLAGS="$SMALLLD"
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux mips16el eglibc 2.19 using gcc 4.8 from OpenWRT toolchain
-export CLIENT_NAME=binaries/Linux/mips/little-endian/glibc/vlmcs-mips16el-openwrt-glibc
-export PROGRAM_NAME=binaries/Linux/mips/little-endian/glibc/vlmcsd-mips16el-openwrt-glibc
-export MULTI_NAME=binaries/Linux/mips/little-endian/glibc/vlmcsdmulti-mips16el-openwrt-glibc
-export CC=/opt/toolchains/mipsel_74kc+dsp2_gcc-4.9-linaro_eglibc-2.19-mips16/bin/mipsel-openwrt-linux-gnu-gcc-4.9.2
-#export CC=~/openwrt/staging_dir/toolchain-mipsel_mips32_gcc-4.8-linaro_eglibc-2.19/bin/mipsel-openwrt-linux-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=mips32 -mips16"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# PowerPC 64-bit big-endian glibc.
-export CLIENT_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcs-ppc64-glibc
-export PROGRAM_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcsd-ppc64-glibc
-export MULTI_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcsdmulti-ppc64-glibc
-export CC=/opt/toolchains/ppc64-glibc2.19-gcc-4.9.1/bin/powerpc64-linux-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# PowerPC 64-bit little-endian glibc.
-export CLIENT_NAME=binaries/Linux/ppc/little-endian/glibc/vlmcs-ppc64el-glibc
-export PROGRAM_NAME=binaries/Linux/ppc/little-endian/glibc/vlmcsd-ppc64el-glibc
-export MULTI_NAME=binaries/Linux/ppc/little-endian/glibc/vlmcsdmulti-ppc64el-glibc
-export CC=/opt/toolchains/ppc64el-glibc2.20-gcc-4.9.1/bin/powerpc64le-linux-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-
-make DNS_PARSER=OS $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# PowerPC glibc. Compiles with gcc 4.8 from OpenWRT toolchain but uses libs from an old DM500 toolchain to be compatible with glibc 2.3
-export CLIENT_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcs-ppc-glibc
-export PROGRAM_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcsd-ppc-glibc
-export MULTI_NAME=binaries/Linux/ppc/big-endian/glibc/vlmcsdmulti-ppc-glibc
-export CC=~/openwrt/staging_dir/toolchain-powerpc_405_gcc-4.8-linaro_eglibc-2.19/bin/powerpc-openwrt-linux-gnu-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program --sysroot=/opt/simplebuild/toolchains/powerpc -L/opt/simplebuild/toolchains/powerpc/lib -L/opt/simplebuild/toolchains/powerpc/usr/lib"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Mips 32 glibc compiled with gcc 4.9.2 from OpenWRT toolchain
-export CLIENT_NAME=binaries/Linux/mips/big-endian/glibc/vlmcs-mips32-openwrt-glibc
-export PROGRAM_NAME=binaries/Linux/mips/big-endian/glibc/vlmcsd-mips32-openwrt-glibc
-export MULTI_NAME=binaries/Linux/mips/big-endian/glibc/vlmcsdmulti-mips32-openwrt-glibc
-export CC=/opt/toolchains/mips_34kc_gcc-4.9-linaro_eglibc-2.19-mips16/bin/mips-openwrt-linux-gcc
-#export CC=~/openwrt/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_eglibc-2.19/bin/mips-openwrt-linux-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-
-# Mips 32 glibc compiled with gcc 4.9.2 from OpenWRT toolchain
-export CLIENT_NAME=binaries/Linux/mips/big-endian/glibc/vlmcs-mips16-openwrt-glibc
-export PROGRAM_NAME=binaries/Linux/mips/big-endian/glibc/vlmcsd-mips16-openwrt-glibc
-export MULTI_NAME=binaries/Linux/mips/big-endian/glibc/vlmcsdmulti-mips16-openwrt-glibc
-export CC=/opt/toolchains/mips_34kc_gcc-4.9-linaro_eglibc-2.19-mips16/bin/mips-openwrt-linux-gcc
-#export CC=~/openwrt/staging_dir/toolchain-mips_34kc_gcc-4.8-linaro_eglibc-2.19/bin/mips-openwrt-linux-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32 -mips16"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-
-# mips32el glibc 2.19 compiled with gcc 4.8 from OpenWRT toolchain
-export CLIENT_NAME=binaries/Linux/mips/little-endian/glibc/vlmcs-mips32el-openwrt-glibc
-export PROGRAM_NAME=binaries/Linux/mips/little-endian/glibc/vlmcsd-mips32el-openwrt-glibc
-export MULTI_NAME=binaries/Linux/mips/little-endian/glibc/vlmcsdmulti-mips32el-openwrt-glibc
-export CC=/opt/toolchains/mipsel_74kc+dsp2_gcc-4.9-linaro_eglibc-2.19-mips16/bin/mipsel-openwrt-linux-gnu-gcc-4.9.2
-#export CC=~/openwrt/staging_dir/toolchain-mipsel_mips32_gcc-4.8-linaro_eglibc-2.19/bin/mipsel-openwrt-linux-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-## mips1el uclibc with old tomato toolchain gcc 3.2.3 with Broadcom extensions uClibc 0.9.19
-#export CLIENT_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcs-mips1el-tomato-uclibc
-#export PROGRAM_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsd-mips1el-tomato-uclibc
-#export MULTI_NAME=binaries/Linux/mips/little-endian/uclibc/vlmcsdmulti-mips1el-tomato-uclibc
-#export CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
-#export CFLAGS="-DNO_BUILTIN -pipe -fno-common -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants"
-#export PLATFORMFLAGS=""
-#export LDFLAGS="-pipe -Wl,-z,norelro"
-#export THREADS=0
-##export TERMINAL_WIDTH=80
-#
-#make NO_DNS=1 CAT=2 $MAKEFLAGS $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#export CLIENT_NAME=binaries/Linux/mips/little-endian/static/vlmcs-mips1el-tomato-uclibc-static
-#export PROGRAM_NAME=binaries/Linux/mips/little-endian/static/vlmcsd-mips1el-tomato-uclibc-static
-#export MULTI_NAME=binaries/Linux/mips/little-endian/static/vlmcsdmulti-mips1el-tomato-uclibc-static
-#export LDFLAGS="$LDFLAGS -static"
-#
-#make NO_DNS=1 $REUSEOBJFLAGS $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME CAT=2
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-
-
-
-
-#Android gcc 4.8 with API Level 3 (Android 1.5 cupcake) armv7
-
-export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android15-armv7
-export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android15-armv7
-export CC=/opt/toolchains/armelv7-android-3/bin/arm-linux-androideabi-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-fuse-ld=bfd -flto=jobserver -fwhole-program -march=armv7 -mthumb"
-export THREADS=0
-export LDFLAGS="$SMALLLD"
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-#export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android15-armv7-static
-#export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android15-armv7-static
-#export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android15-armv7-static
-#export LDFLAGS="$LDFLAGS -static"
-#
-#make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-
-export LDFLAGS="$SMALLLD"
-export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android15-armv7
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#Android gcc 4.8 with API Level 3 (Android 1.5 cupcake) armv5
-
-export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android15-armv5
-export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android15-armv5
-export CC=/opt/toolchains/armelv7-android-3/bin/arm-linux-androideabi-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-fuse-ld=bfd -flto=jobserver -fwhole-program -march=armv5te -mthumb"
-export THREADS=0
-export LDFLAGS="$SMALLLD"
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-#export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android15-armv5-static
-#export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android15-armv5-static
-#export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android15-armv5-static
-#export LDFLAGS="$LDFLAGS -static"
-
-#make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-export LDFLAGS="$SMALLLD"
-export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android15-armv5
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-#Android gcc 4.8 with API Level 16 (Android 4.1 Jelly Bean) armv7
-
-export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android41-armv7
-export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android41-armv7
-export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android41-armv7
-export CC=/opt/toolchains/armelv7-android-16/bin/arm-linux-androideabi-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb -fPIE -pie"
-export THREADS=0
-export LDFLAGS="$SMALLLD -fuse-ld=bfd"
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-##Android gcc 4.8 with API Level 21 (Android 5.0 Lollipop) armv7
-#
-#export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android50-armv7
-#export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android50-armv7
-#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android50-armv7
-#export CC=/opt/toolchains/armelv7-android-21/bin/arm-linux-androideabi-gcc
-#export CFLAGS="$SMALLCC"
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb -fPIE -pie"
-#export THREADS=0
-#export LDFLAGS="$SMALLLD"
-#
-#make NOLPTHREAD=1 $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-#
-#
-#
-#
-#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) arm64el
-
-export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android50-arm64v8
-export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android50-arm64v8
-export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android50-arm64v8
-export CC=/opt/toolchains/arm64el-android-21/bin/aarch64-linux-android-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mtune=generic -mfix-cortex-a53-835769 -march=armv8-a -fPIE -pie"
-export THREADS=0
-export LDFLAGS="$SMALLLD -fuse-ld=bfd"
-
-make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) arm64el STATIC
-
-export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android50-arm64v8-static
-export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android50-arm64v8-static
-export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android50-arm64v8-static
-export CC=/opt/toolchains/arm64el-android-21/bin/aarch64-linux-android-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mtune=generic -mfix-cortex-a53-835769 -march=armv8-a"
-export THREADS=0
-export LDFLAGS="$SMALLLD -static -fuse-ld=bfd"
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#Android gcc 4.8 with API Level 9 (Android 2.3 Gingerbread) x86
-
-export CLIENT_NAME=binaries/Android/intel/bionic/vlmcs-android23-x86
-export PROGRAM_NAME=binaries/Android/intel/bionic/vlmcsd-android23-x86
-export CC=/opt/toolchains/x86-android-9/bin/i686-linux-android-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=atom -m32"
-export THREADS=1
-export LDFLAGS="$SMALLLD -fuse-ld=bfd"
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export CLIENT_NAME=binaries/Android/intel/static/vlmcs-android23-x86-static
-export PROGRAM_NAME=binaries/Android/intel/static/vlmcsd-android23-x86-static
-export MULTI_NAME=binaries/Android/intel/static/vlmcsdmulti-android23-x86-static
-export LDFLAGS="$LDFLAGS -static"
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export LDFLAGS="$SMALLLD -fuse-ld=bfd"
-export MULTI_NAME=binaries/Android/intel/bionic/vlmcsdmulti-android23-x86
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#Android gcc 4.8 with API Level 16 (Android 4.1 Jelly Bean) x86
-
-export CLIENT_NAME=binaries/Android/intel/bionic/vlmcs-android41-x86
-export PROGRAM_NAME=binaries/Android/intel/bionic/vlmcsd-android41-x86
-export MULTI_NAME=binaries/Android/intel/bionic/vlmcsdmulti-android41-x86
-export CC=/opt/toolchains/x86-android-16/bin/i686-linux-android-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=atom -m32 -fPIE -pie"
-export THREADS=1
-export LDFLAGS="$SMALLLD -fuse-ld=bfd"
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-##Android gcc 4.8 with API Level 21 (Android 5.0 Lollipop) x86
-#
-#export CLIENT_NAME=binaries/Android/intel/bionic/vlmcs-android50-x86
-#export PROGRAM_NAME=binaries/Android/intel/bionic/vlmcsd-android50-x86
-#export MULTI_NAME=binaries/Android/intel/bionic/vlmcsdmulti-android50-x86
-#export CC=/opt/toolchains/x86-android-21/bin/i686-linux-android-gcc
-#export CFLAGS="$SMALLCC"
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=atom -m32 -fPIE -pie"
-#export THREADS=1
-#export LDFLAGS="$SMALLLD"
-#
-#make NOLPTHREAD=1 $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-
-
-
-
-#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) x64
-
-export CLIENT_NAME=binaries/Android/intel/bionic/vlmcs-android50-x64
-export PROGRAM_NAME=binaries/Android/intel/bionic/vlmcsd-android50-x64
-export MULTI_NAME=binaries/Android/intel/bionic/vlmcsdmulti-android50-x64
-export CC=/opt/toolchains/x86_64-android-21/bin/x86_64-linux-android-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=atom -m64 -fPIE -pie"
-export THREADS=0
-export LDFLAGS="$SMALLLD -fuse-ld=bfd"
-
-make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) x64 STATIC
-
-export CLIENT_NAME=binaries/Android/intel/static/vlmcs-android50-x64-static
-export PROGRAM_NAME=binaries/Android/intel/static/vlmcsd-android50-x64-static
-export MULTI_NAME=binaries/Android/intel/static/vlmcsdmulti-android50-x64-static
-export CC=/opt/toolchains/x86_64-android-21/bin/x86_64-linux-android-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=nocona -m64"
-export THREADS=0
-export LDFLAGS="$SMALLLD -static -fuse-ld=bfd"
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-
-#Android gcc 4.8 with API Level 9 (Android 2.3 Gingerbread) mips32el
-
-export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android23-mips32el
-export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android23-mips32el
-export CC=/opt/toolchains/mipsel-android-9/bin/mipsel-linux-android-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program"
-export THREADS=1
-export LDFLAGS="$SMALLLD -fuse-ld=bfd"
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export CLIENT_NAME=binaries/Android/mips/static/vlmcs-android23-mips32el-static
-export PROGRAM_NAME=binaries/Android/mips/static/vlmcsd-android23-mips32el-static
-export MULTI_NAME=binaries/Android/mips/static/vlmcsdmulti-android23-mips32el-static
-export LDFLAGS="$LDFLAGS -static -fuse-ld=bfd"
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export LDFLAGS="$SMALLLD -fuse-ld=bfd"
-export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android23-mips32el
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-
-#Android gcc 4.8 with API Level 16 (Android 4.1 Jelly Bean) mips32el
-
-export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android41-mips32el
-export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android41-mips32el
-export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android41-mips32el
-export CC=/opt/toolchains/mipsel-android-16/bin/mipsel-linux-android-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie"
-export THREADS=1
-export LDFLAGS="$SMALLLD -fuse-ld=bfd"
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-
-##Android gcc 4.8 with API Level 21 (Android 5.0 Lollipop) mips32el
-#
-#export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android50-mips32el
-#export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android50-mips32el
-#export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android50-mips32el
-#export CC=/opt/toolchains/mipsel-android-21/bin/mipsel-linux-android-gcc
-#export CFLAGS="$SMALLCC"
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie"
-#export THREADS=1
-#export LDFLAGS="$SMALLLD"
-#
-#make NOLPTHREAD=1 $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-
-
-
-
-##Android gcc 4.8 with API Level 9 (Android 2.3 Gingerbread) mips16el
-#
-#export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android23-mips16el
-#export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android23-mips16el
-#export CC=/opt/toolchains/mipsel-android-9/bin/mipsel-linux-android-gcc
-#export CFLAGS="$SMALLCC"
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16"
-#export THREADS=1
-#export LDFLAGS="$SMALLLD"
-#
-#make NOLPTHREAD=1 $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#export CLIENT_NAME=binaries/Android/mips/static/vlmcs-android23-mips16el-static
-#export PROGRAM_NAME=binaries/Android/mips/static/vlmcsd-android23-mips16el-static
-#export MULTI_NAME=binaries/Android/mips/static/vlmcsdmulti-android23-mips16el-static
-#export LDFLAGS="$LDFLAGS -static"
-#
-#make NOLPTHREAD=1 $REUSEOBJFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-#export LDFLAGS="$SMALLLD"
-#export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android23-mips16el
-#
-#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-#
-#
-#
-#
-##Android gcc 4.8 with API Level 16 (Android 4.1 Jelly Bean) mips16el
-#
-#export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android41-mips16el
-#export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android41-mips16el
-#export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android41-mips16el
-#export CC=/opt/toolchains/mipsel-android-16/bin/mipsel-linux-android-gcc
-#export CFLAGS="$SMALLCC"
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie -mips16"
-#export THREADS=1
-#export LDFLAGS="$SMALLLD"
-#
-#make NOLPTHREAD=1 $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-#
-#
-#
-#
-#Android gcc 4.8 with API Level 21 (Android 5.0 Lollipop) mips16el
-#
-#export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android50-mips16el
-#export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android50-mips16el
-#export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android50-mips16el
-#export CC=/opt/toolchains/mipsel-android-21/bin/mipsel-linux-android-gcc
-#export CFLAGS="$SMALLCC"
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie -mips16"
-#export THREADS=1
-#export LDFLAGS="$SMALLLD"
-#
-#make NOLPTHREAD=1 $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make NOLPTHREAD=1 $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-
-
-#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) mips64el
-
-export CLIENT_NAME=binaries/Android/mips/bionic/vlmcs-android50-mips64el
-export PROGRAM_NAME=binaries/Android/mips/bionic/vlmcsd-android50-mips64el
-export MULTI_NAME=binaries/Android/mips/bionic/vlmcsdmulti-android50-mips64el
-export CC=/opt/toolchains/mips64el-android-21/bin/mips64el-linux-android-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -fPIE -pie"
-export THREADS=0
-export LDFLAGS="$SMALLLD -fuse-ld=bfd"
-
-make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make NOLPTHREAD=1 NOLRESOLV=1 NO_DNS=0 $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#Android gcc 4.9 with API Level 21 (Android 5.0 Lollipop) mips64el STATIC
-
-export CLIENT_NAME=binaries/Android/mips/static/vlmcs-android50-mips64el-static
-export PROGRAM_NAME=binaries/Android/mips/static/vlmcsd-android50-mips64el-static
-export MULTI_NAME=binaries/Android/mips/static/vlmcsdmulti-android50-mips64el-static
-export CC=/opt/toolchains/mips64el-android-21/bin/mips64el-linux-android-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program"
-export THREADS=0
-export LDFLAGS="$SMALLLD -static -fuse-ld=bfd"
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make NOLPTHREAD=1 NOLRESOLV=1 DNS_PARSER=OS $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-## Android 5.0+ with Ubuntu toolchain
-#export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android5
-#export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android5
-#export CC=arm-linux-androideabi-gcc
-#export CFLAGS="$SMALLCC"
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program"
-#export LDFLAGS="$SMALLLD -pie -fpie"
-#export THREADS=0
-#
-#make $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#
-# Android 5.0+ with Ubuntu toolchain STATIC
-#export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android5-static
-#export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android5-static
-#export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android5-static
-#export LDFLAGS="$LDFLAGS -static"
-#
-#make $REUSEOBJFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-#export LDFLAGS="$SMALLLD -pie -fpie"
-#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android5
-#
-#make $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-#
-#
-#
-## Android 5.0+ with Ubuntu toolchain for ARMv7 CPU with thumb2 instruction set
-#export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android5-armv7
-#export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android5-armv7
-#export CC=arm-linux-androideabi-gcc
-#export CFLAGS="$SMALLCC"
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mthumb -march=armv7 -mtune=cortex-a9"
-#export LDFLAGS="$SMALLLD -pie -fpie"
-#export THREADS=0
-#
-#make $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android5-armv7-static
-#export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android5-armv7-static
-#export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android5-armv7-static
-#export LDFLAGS="$LDFLAGS -static"
-#
-#make $REUSEOBJFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-#export LDFLAGS="$SMALLLD -pie -fpie"
-#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android5-armv7
-#
-#make $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-##unset TERMINAL_WIDTH
-#
-#
-#
-#
-#
-# Android with Ubuntu toolchain
-export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android
-export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android
-export CC=arm-linux-androideabi-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program"
-export LDFLAGS="$SMALLLD -fuse-ld=bfd"
-export THREADS=0
-#
-#make $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#
-# Android with Ubuntu toolchain STATIC
-export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android-static
-export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android-static
-export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android-static
-export LDFLAGS="$LDFLAGS -static"
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-#export LDFLAGS="$SMALLLD"
-#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android
-#
-#make $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-
-
-
-
-# Android with Ubuntu toolchain for ARMv7 CPU with thumb2 instruction set
-export CLIENT_NAME=binaries/Android/arm/bionic/vlmcs-android-armv7
-export PROGRAM_NAME=binaries/Android/arm/bionic/vlmcsd-android-armv7
-export CC=arm-linux-androideabi-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mthumb -march=armv7 -mtune=cortex-a9"
-export LDFLAGS="$SMALLLD -fuse-ld=bfd"
-export THREADS=0
-
-#make $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-
-export CLIENT_NAME=binaries/Android/arm/static/vlmcs-android-armv7-static
-export PROGRAM_NAME=binaries/Android/arm/static/vlmcsd-android-armv7-static
-export MULTI_NAME=binaries/Android/arm/static/vlmcsdmulti-android-armv7-static
-export LDFLAGS="$LDFLAGS -static"
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-#export LDFLAGS="$SMALLLD"
-#export MULTI_NAME=binaries/Android/arm/bionic/vlmcsdmulti-android-armv7
-#
-#make $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-
-
-
-
-# Linux x86 glibc
-export MULTI_NAME=binaries/Linux/intel/glibc/vlmcsdmulti-x86-glibc
-export CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x86-glibc
-export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x86-glibc
-export CC=~/openwrt/staging_dir/toolchain-i386_i486_gcc-4.8-linaro_eglibc-2.19/bin/i486-openwrt-linux-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i686 -mtune=generic"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-
-make $MAKEFLAGS binaries/Linux/intel/glibc/vlmcsdmulti-x86-glibc
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-
-
-
-# Linux x86 glibc minimum standalone version
-export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x86-glibc-minimum
-export CC=~/openwrt/staging_dir/toolchain-i386_i486_gcc-4.8-linaro_eglibc-2.19/bin/i486-openwrt-linux-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i686 -mtune=generic"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-export FEATURES=minimum
-
-make NO_DNS=1 $MAKEFLAGS $PROGRAM_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $PROGRAM_NAME
- exit $?
-fi
-
-# Linux x86 glibc minimum inetd version
-export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x86-glibc-minimum-inetd
-export CFLAGS="$CFLAGS -DNO_SOCKETS"
-
-make NO_DNS=1 $MAKEFLAGS $PROGRAM_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $PROGRAM_NAME
- exit $?
-fi
-
-# Linux x86 glibc threads
-export FEATURES=full
-export THREADS=1
-export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x86-glibc-threads
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -lpthread"
-export CFLAGS="$SMALLCC"
-
-make $MAKEFLAGS $PROGRAM_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $PROGRAM_NAME
- exit $?
-fi
-
-
-
-
-# Linux x86 musl
-export FEATURES=full
-export MULTI_NAME=binaries/Linux/intel/static/vlmcsdmulti-x86-musl-static
-export CLIENT_NAME=binaries/Linux/intel/static/vlmcs-x86-musl-static
-export PROGRAM_NAME=binaries/Linux/intel/static/vlmcsd-x86-musl-static
-export CC=/opt/toolchains/i386_i486_gcc-4.9-linaro_musl-1.1.6/bin/i486-openwrt-linux-musl-gcc-4.9.2
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i686 -mtune=generic"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static"
-export THREADS=0
-export NOPROCFS=0
-export AUXV=1
-
-make $MAKEFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export MULTI_NAME=binaries/Linux/intel/musl/vlmcsdmulti-x86-musl
-
-make $MAKEFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-export LDFLAGS="$LDFLAGS -static"
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export CLIENT_NAME=binaries/Linux/intel/musl/vlmcs-x86-musl
-export PROGRAM_NAME=binaries/Linux/intel/musl/vlmcsd-x86-musl
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-
-
-
-# Linux x86 musl static threads
-export FEATURES=full
-export PROGRAM_NAME=binaries/Linux/intel/static/vlmcsd-x86-musl-static-threads
-export CC=/opt/toolchains/i386_i486_gcc-4.9-linaro_musl-1.1.6/bin/i486-openwrt-linux-musl-gcc-4.9.2
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i686 -mtune=generic"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static"
-export THREADS=1
-export NOPROCFS=0
-export AUXV=1
-
-make $MAKEFLAGS $PROGRAM_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $PROGRAM_NAME
- exit $?
-fi
-
-
-
-
-
-# Linux x32 glibc
-#export FEATURES=full
-#export MULTI_NAME=binaries/Linux/intel/glibc/vlmcsdmulti-x32-glibc
-#export CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x32-glibc
-#export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x32-glibc
-#export CC=gcc
-#export CFLAGS="$SMALLCC"
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mx32 -march=nocona -mtune=generic"
-#export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-#export THREADS=0
-#export NOPROCFS=0
-#export AUXV=1
-#
-#make DNS_PARSER=OS $MAKEFLAGS binaries/Linux/intel/glibc/vlmcsdmulti-x32-glibc
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make DNS_PARSER=OS $REUSEOBJFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#
-#
-#
-## Linux x32 glibc threads
-#export FEATURES=full
-#export PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x32-glibc-threads
-#export CC=gcc
-#export CFLAGS="$SMALLCC"
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mx32 -march=nocona -mtune=generic"
-#export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -lpthread"
-#export THREADS=1
-#export NOPROCFS=0
-#export AUXV=1
-#
-#make DNS_PARSER=OS $MAKEFLAGS $PROGRAM_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $PROGRAM_NAME
-# exit $?
-#fi
-
-
-
-
-# Linux armv4 little-endian glibc
-export FEATURES=full
-export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv4el-glibc
-export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv4el-glibc
-export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv4el-glibc
-export CC=/opt/toolchains/armelv5t-glibc-2.20/bin/arm-linux-gcc
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4 -marm"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-export NOPROCFS=0
-export AUXV=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux armv4 little-endian glibc thumb instruction set
-
-export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv4el-glibc-thumb
-export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv4el-glibc-thumb
-export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv4el-glibc-thumb
-export CC=/opt/toolchains/armelv5t-glibc-2.20/bin/arm-linux-gcc
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4t -mthumb"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux armv5 little-endian glibc thumb instruction set
-export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv5el-glibc-thumb
-export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv5el-glibc-thumb
-export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv5el-glibc-thumb
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv5t -mthumb"
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-# Linux armv5 little-endian glibc
-export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv5el-glibc
-export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv5el-glibc
-export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv5el-glibc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv5 -marm"
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux armv7 little-endian glibc thumb2 instruction set
-export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv7el-glibc
-export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv7el-glibc
-export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv7el-glibc
-export CC=/opt/toolchains/armelv7-cortex-a8-glibc-2.18/usr/bin/arm-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux armv4 little-endian openwrt toolchain
-export PROGRAM_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsd-armv4el-openwrt-glibc
-export CLIENT_NAME=binaries/Linux/arm/little-endian/glibc/vlmcs-armv4el-openwrt-glibc
-export MULTI_NAME=binaries/Linux/arm/little-endian/glibc/vlmcsdmulti-armv4el-openwrt-glibc
-export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_eglibc-2.19_eabi/bin/arm-openwrt-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-
-# Linux armv7 little-endian openwrt toolchain thumb 2 instruction set
-INSTALLDIR=binaries/Linux/arm/little-endian/glibc/
-SUFFIX=-armv7el-openwrt-glibc
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_eglibc-2.19_eabi/bin/arm-openwrt-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-# Linux armv5 little endian thumb instruction set
-INSTALLDIR=binaries/Linux/arm/little-endian/static/
-SUFFIX=-armv5el-musl-thumb
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}-static
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}-static
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}-static
-export CC=/opt/toolchains/armelv5t-musl/usr/bin/arm-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static"
-export THREADS=0
-export NOPROCFS=0
-export AUXV=1
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-INSTALLDIR=binaries/Linux/arm/little-endian/musl/
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-INSTALLDIR=binaries/Linux/arm/little-endian/static/
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}-static
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static"
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux armv5 little-endian uclibc thumb instruction set
-INSTALLDIR=binaries/Linux/arm/little-endian/uclibc/
-SUFFIX=-armv5el-uclibc-thumb
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/armelv5t-uclibc-0.9.33/usr/bin/arm-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv5t -mthumb"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-export NOPROCFS=0
-export AUXV=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux armv7 little-endian uclibc thumb 2 instruction set
-INSTALLDIR=binaries/Linux/arm/little-endian/
-SUFFIX=-armv7el-uclibc
-export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/armelv7-cortex-a8-uclibc-0.9.33/usr/bin/arm-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static"
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux armv4 little-endian uclibc openwrt toolchain
-INSTALLDIR=binaries/Linux/arm/little-endian/uclibc/
-SUFFIX=-armv4el-openwrt-uclibc
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4 -marm"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-## Linux armv4 little-endian uclibc openwrt toolchain thumb instruction set
-#INSTALLDIR=binaries/Linux/arm/little-endian/uclibc/
-#SUFFIX=-armv4el-openwrt-uclibc-thumb
-#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-#export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-gcc
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv4t -mthumb"
-#export FEATURES=full
-#export CFLAGS="$SMALLCC"
-#export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-#export THREADS=0
-#
-#make $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-
-
-
-
-# Linux armv7 little-endian uclibc openwrt toolchain thumb 2 instruction set
-INSTALLDIR=binaries/Linux/arm/little-endian/uclibc/
-SUFFIX=-armv7el-openwrt-uclibc
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=~/openwrt/staging_dir/toolchain-arm_mpcore+vfp_gcc-4.8-linaro_uClibc-0.9.33.2_eabi/bin/arm-openwrt-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv7 -mthumb"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-##Linux armv4 little-endian uclibc
-#INSTALLDIR=binaries/Linux/arm/little-endian/
-#SUFFIX=-armv4el-uclibc
-#export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-#export CC=/root/cross-compiler-armv4l/bin/armv4l-gcc
-#export PLATFORMFLAGS="-pipe"
-#export FEATURES=full
-#export CFLAGS="$SMALLCC"
-#export LDFLAGS="-Wl,-z,norelro -fwhole-program"
-#export THREADS=0
-#export NOPROCFS=1
-#
-#make $MAKEFLAGS $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME CAT=2
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-#export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-#export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-#export LDFLAGS="-Wl,-z,norelro -fwhole-program -static"
-#
-#make $REUSEOBJFLAGS $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME CAT=2
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-
-
-
-
-
-## mips1 little-endian with openssl 0.9.8 support dreambox toolchain
-#INSTALLDIR=binaries/Linux/mips/little-endian/glibc/
-#SUFFIX=-mips1el-glibc-openssl0.9.8-soft-EXPERIMENTAL
-#export CRYPTO=openssl_with_aes_soft
-#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-#export CC=/opt/simplebuild/toolchains/mipsoe20/bin/mipsel-unknown-linux-gnu-gcc
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program"
-#export FEATURES=full
-#export CFLAGS="$SMALLCC"
-#export LDFLAGS="$SMALLLD"
-#export THREADS=0
-#export NOPROCFS=0
-#
-#make $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-#
-#
-#
-## mips1 little-endian dreambox toolchain
-#INSTALLDIR=binaries/Linux/mips/little-endian/glibc/
-#SUFFIX=-mips1el-glibc
-#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-#export CC=/opt/simplebuild/toolchains/mipsoe20/bin/mipsel-unknown-linux-gnu-gcc
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program"
-#export FEATURES=full
-#export CFLAGS="$SMALLCC"
-#export LDFLAGS="$SMALLLD"
-#export THREADS=0
-#export CRYPTO=internal
-#
-#make $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-#
-
-
-# Linux mips1 little-endian uclibc
-#INSTALLDIR=binaries/Linux/mips/little-endian/
-#SUFFIX=-mips1el-uclibc
-#export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-#export CC=/root/cross-compiler-mipsel/bin/mipsel-gcc
-#export PLATFORMFLAGS="-pipe"
-#export FEATURES=full
-#export CFLAGS="$SMALLCC"
-#export LDFLAGS="-Wl,-z,norelro -fwhole-program"
-#export THREADS=0
-#export CRYPTO=internal
-#export NOPROCFS=1
-#
-#make $MAKEFLAGS CAT=2 $CLIENT_NAME $MULTI_NAME $PROGRAM_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-#export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-#export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-#export LDFLAGS="-Wl,-z,norelro -fwhole-program -static"
-#
-#make $REUSEOBJFLAGS CAT=2 $CLIENT_NAME $MULTI_NAME $PROGRAM_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-
-
-
-
-# Linux mips16 little endian glibc
-INSTALLDIR=binaries/Linux/mips/little-endian/glibc/
-SUFFIX=-mips16el-glibc
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/mips32el-mips16-glibc-2.18/usr/bin/mipsel-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32 -mips16"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-export CRYPTO=internal
-export NOPROCFS=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux mips16 little-endian uclibc
-INSTALLDIR=binaries/Linux/mips/little-endian/uclibc/
-SUFFIX=-mips16el-uclibc
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/mips32el-mips16-uclibc-0.9.33/bin/mipsel-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32 -mips16"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-export CRYPTO=internal
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-## Linux PowerPC glibc with SSL support and Dreambox 500 toolchain
-#INSTALLDIR=binaries/Linux/ppc/big-endian/glibc/
-#SUFFIX=-ppc-glibc-openssl0.9.8-soft-EXPERIMENTAL
-#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-#export CC=/opt/simplebuild/toolchains/powerpc/bin/powerpc-linux-gcc
-#export PLATFORMFLAGS="-pipe"
-#export FEATURES=full
-#export CFLAGS="-fno-common -fno-exceptions -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants"
-#export LDFLAGS="-Wl,--no-gc-sections -Wl,-z,norelro"
-#export THREADS=0
-#export CRYPTO=internal
-#
-#make NO_DNS=1 $MAKEFLAGS CAT=2 $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-
-
-
-
-
-
-#Linux PowerPC uclibc OpenWRT toolchain
-INSTALLDIR=binaries/Linux/ppc/big-endian/
-SUFFIX=-ppc-uclibc
-export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-#export CC=~/openwrt/staging_dir/toolchain-powerpc_405_gcc-4.8-linaro_uClibc-0.9.33.2/bin/powerpc-openwrt-linux-gcc
-export CC=/opt/toolchains/ppc-uclibc0.9.33.2-gcc-4.9.1-binutils2.24/bin/powerpc-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -L/root/cross-compiler-powerpc/lib -L/root/cross-compiler-powerpc/usr/lib"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-export CRYPTO=internal
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-export LDFLAGS="$SMALLLD -static"
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-export LDFLAGS="$SMALLLD"
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-##Fritzbox 7170 (mips32r2 little-endian) device specific, May or may not run on other devices
-#INSTALLDIR=binaries/Linux/mips/little-endian/
-#SUFFIX=-mips32r2el-Fritzbox-71xx-72xx-uclibc
-#export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-#export CC=/opt/simplebuild/toolchains/fritz71xx/bin/mipsel-linux-uclibc-gcc
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=4kec -mtune=4kec"
-#export FEATURES=full
-#export CFLAGS="$SMALLCC"
-#export LDFLAGS="$SMALLLD"
-#export THREADS=0
-#export CRYPTO=internal
-#
-#make NOLRESOLV=1 $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-
-#export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-#export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-#export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-#export LDFLAGS="$SMALLLD -static"
-#
-#make NOLRESOLV=1 $REUSEOBJFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-#export LDFLAGS="$SMALLLD"
-#
-#make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-
-
-
-
-##Fritzbox 7370 (mips32r2 big-endian) device specific, May or may not run on other devices
-#INSTALLDIR=binaries/Linux/mips/big-endian/
-#SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc
-#export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-#export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp"
-#export FEATURES=full
-#export CFLAGS="$SMALLCC"
-#export LDFLAGS="$SMALLLD"
-#export THREADS=0
-#export CRYPTO=internal
-#
-#make NOLRESOLV=1 $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-#export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-#export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-#export LDFLAGS="$SMALLLD -static"
-#
-#make NOLRESOLV=1 $REUSEOBJFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-#export LDFLAGS="$SMALLLD"
-#
-#make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-
-
-
-
-##Fritzbox 7370 (mips32r2 big-endian) device specific with _PEDANTIC, May or may not run on other devices
-#INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/
-#SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc-pedantic
-#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-#export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp"
-#export FEATURES=full
-#export CFLAGS="$SMALLCC -D_PEDANTIC"
-#export LDFLAGS="$SMALLLD"
-#export THREADS=0
-#export CRYPTO=internal
-#
-#make NOLRESOLV=1 $MAKEFLAGS $PROGRAM_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $PROGRAM_NAME
-# exit $?
-#fi
-#
-
-
-
-##Fritzbox 7370 (mips32r2 big-endian) device specific inetd start only, May or may not run on other devices
-#INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/
-#SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc-inetd
-#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-#export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp"
-#export FEATURES=inetd
-#export CFLAGS="$SMALLCC"
-#export LDFLAGS="$SMALLLD"
-#export THREADS=0
-#export CRYPTO=internal
-#
-#make NOLRESOLV=1 $MAKEFLAGS $PROGRAM_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $PROGRAM_NAME
-# exit $?
-#fi
-#
-#
-#
-#
-##Fritzbox 7370 (mips32r2 big-endian) device specific with pthreads, May or may not run on other devices
-#INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/
-#SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc-threads
-#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-#export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp"
-#export FEATURES=full
-#export CFLAGS="$SMALLCC"
-#export LDFLAGS="$SMALLLD -lpthread"
-#export THREADS=1
-#
-#make NOLRESOLV=1 $MAKEFLAGS $PROGRAM_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $PROGRAM_NAME
-# exit $?
-#fi
-#
-#
-#
-#
-##Fritzbox 7370 (mips32r2 big-endian) device specific with OpenSSL support, May or may not run on other devices
-#INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/
-#SUFFIX=-mips16-Fritzbox-33xx-73xx-74xx-63xx-64xx-uclibc-openssl0.9.8-soft-EXPERIMENTAL
-#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-#export CC=/opt/simplebuild/toolchains/fritz73xxOS62/bin/mips-linux-cc
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mtune=24kc -mips16 -mdsp"
-#export FEATURES=full
-#export CFLAGS="$SMALLCC"
-#export LDFLAGS="$SMALLLD"
-#export THREADS=0
-#export CRYPTO=openssl_with_aes_soft
-#export OPENSSL_HMAC=0
-#
-#make NOLRESOLV=1 $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make NOLRESOLV=1 $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-#
-#unset OPENSSL_HMAC
-#
-#
-#
-#make $MAKEFLAGS CLIENT_NAME=binaries/Linux/mips/big-endian/uclibc/vlmcs-mips32-uclibc CFLAGS="$SMALL -pipe -flto=jobserver -fwhole-program" PROGRAM_NAME=binaries/Linux/mips/big-endian/uclibc/vlmcsd-mips32-uclibc CC=/opt/toolchains/mips32eb-uclibc-0.9.33/usr/bin/mips-linux-cc && \
-#Linux mips32 big-endian uclibc
-INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/
-SUFFIX=-mips32-uclibc
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/mips32eb-uclibc-0.9.33/usr/bin/mips-linux-cc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-export CRYPTO=internal
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux mips16 big-endian uclibc
-INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/
-SUFFIX=-mips16-uclibc
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/mips32eb-uclibc-0.9.33/usr/bin/mips-linux-cc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-export CRYPTO=internal
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#Atheros ar7xxx/ar9xxx chips with OpenWRT toolchain (mips16 big-endian) device specific, May or may not run on other devices
-INSTALLDIR=binaries/Linux/mips/big-endian/
-SUFFIX=-mips16-openwrt-atheros-ar7xxx-ar9xxx-uclibc
-export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/mips-openwrt-linux-uclibc/bin/mips-openwrt-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mips16"
-export FEATURES=full
-export CFLAGS="$SMALLCC -DNO_LIMIT"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-export CRYPTO=internal
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-
-#Atheros ar7xxx/ar9xxx chips with OpenWRT toolchain (mips16 big-endian) device specific, May or may not run on other devices
-INSTALLDIR=binaries/Linux/mips/big-endian/
-SUFFIX=-mips16-openwrt-atheros-ar7xxx-ar9xxx-musl
-export PROGRAM_NAME=${INSTALLDIR}musl/vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}musl/vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/mips_34kc_gcc-4.9-linaro_musl-1.1.6-mips16/bin/mips-openwrt-linux-musl-gcc-4.9.2
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc -mips16"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-export CRYPTO=internal
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-export LDFLAGS="$LDFLAGS -static"
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX}
-export LDFLAGS="$SMALLLD"
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#Atheros ar7xxx/ar9xxx chips with OpenWRT toolchain (mips32r2 big-endian) device specific, May or may not run on other devices
-INSTALLDIR=binaries/Linux/mips/big-endian/
-SUFFIX=-mips32r2-openwrt-atheros-ar7xxx-ar9xxx-uclibc
-export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/mips-openwrt-linux-uclibc/bin/mips-openwrt-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=24kc"
-export FEATURES=full
-export CFLAGS="$SMALLCC -DNO_LIMIT"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-export CRYPTO=internal
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-export LDFLAGS="$SMALLLD -static"
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-export LDFLAGS="$SMALLLD"
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux mips16 big-endian uclibc threads
-INSTALLDIR=binaries/Linux/mips/big-endian/uclibc/
-SUFFIX=-mips16-uclibc-threads
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/mips32eb-uclibc-0.9.33/usr/bin/mips-linux-cc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -lpthread"
-export THREADS=1
-export CRYPTO=internal
-
-make $MAKEFLAGS $PROGRAM_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-
-
-
-# Linux mips32 big-endian glibc
-INSTALLDIR=binaries/Linux/mips/big-endian/glibc/
-SUFFIX=-mips32-glibc
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/mips32eb-glibc-2.19/usr/bin/mips-linux-cc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-export CRYPTO=internal
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux mips16 big-endian glibc
-INSTALLDIR=binaries/Linux/mips/big-endian/glibc/
-SUFFIX=-mips16-glibc
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/mips32eb-glibc-2.19/usr/bin/mips-linux-cc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-export CRYPTO=internal
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#Linux mips32 big-endian musl
-INSTALLDIR=binaries/Linux/mips/big-endian/
-SUFFIX=-mips32-musl
-export PROGRAM_NAME=${INSTALLDIR}musl/vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}musl/vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/mips32eb-musl/usr/bin/mips-linux-cc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-export CRYPTO=internal
-export NOPROCFS=0
-export AUXV=1
-
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-export LDFLAGS="$SMALLLD -static"
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX}
-export LDFLAGS="$SMALLLD"
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#Linux mips16 little-endian musl soft-float
-INSTALLDIR=binaries/Linux/mips/little-endian/
-SUFFIX=-mips16el-musl
-export PROGRAM_NAME=${INSTALLDIR}musl/vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}musl/vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/mips32el-mips16-musl/usr/bin/mipsel-linux-cc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-export CRYPTO=internal
-export NOPROCFS=0
-export AUXV=1
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-export LDFLAGS="$SMALLLD -static"
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX}
-export LDFLAGS="$SMALLLD"
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#Linux mips16 little-endian musl fpu
-INSTALLDIR=binaries/Linux/mips/little-endian/
-SUFFIX=-mips16el-musl-fpu
-export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-export CC=/opt/toolchains/mips32el-mips16-musl-fpu/usr/bin/mipsel-linux-cc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips16"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -static"
-export THREADS=0
-export CRYPTO=internal
-export NOPROCFS=0
-export AUXV=1
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-# Linux x86 uclibc
-INSTALLDIR=binaries/Linux/intel/uclibc/
-SUFFIX=-x86-uclibc
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/i486-uclibc-0.9.33/bin/i486-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m32 -march=i486 -mtune=generic"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-export CRYPTO=internal
-export NOPROCFS=0
-export AUXV=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-#make $MAKEFLAGS CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x64-glibc LDFLAGS="-Wl,--hash-style=gnu" CFLAGS="$SMALL -pipe -flto=jobserver -fwhole-program" PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x64-glibc CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc PLATFORMFLAGS="-m64 -mtune=generic"&& \
-# Linux x64 glibc
-INSTALLDIR=binaries/Linux/intel/glibc/
-SUFFIX=-x64-glibc
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-export CRYPTO=internal
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#Linux Sparc32v7 glibc
-INSTALLDIR=binaries/Linux/sparc32/glibc/
-SUFFIX=-sparc32v7-glibc
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/sparc32-glibc-gcc-4.7.4/bin/sparc-buildroot-linux-gnu-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mcpu=v7"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -lpthread"
-export THREADS=0
-export CRYPTO=internal
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#make $MAKEFLAGS binaries/Linux/intel/glibc/vlmcsd-x64-glibc-threads CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x64-glibc-threads THREADS=1 LDFLAGS="-Wl,--hash-style=gnu -lpthread" CFLAGS="-pipe -flto=jobserver -fwhole-program" PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x64-glibc-threads CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc PLATFORMFLAGS="-m64 -mtune=generic"&& \
-# Linux x64 glibc with threads
-INSTALLDIR=binaries/Linux/intel/glibc/
-SUFFIX=-x64-glibc-threads
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -lpthread"
-export THREADS=1
-export CRYPTO=internal
-
-make $MAKEFLAGS $PROGRAM_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-
-
-
-#make $MAKEFLAGS LDFLAGS="-Wl,--hash-style=gnu" CLIENT_NAME=binaries/Linux/intel/glibc/vlmcs-x64-glibc-openssl1.0.0-hard-EXPERIMENTAL CRYPTO=openssl_with_aes CFLAGS="$SMALL -pipe -flto=jobserver -fwhole-program" PROGRAM_NAME=binaries/Linux/intel/glibc/vlmcsd-x64-glibc-openssl1.0.0-hard-EXPERIMENTAL CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc PLATFORMFLAGS="-m64 -mtune=generic" && \
-# Linux x64 glibc with OpenSSL 1.0.x support
-INSTALLDIR=binaries/Linux/intel/glibc/
-SUFFIX=-x64-glibc-openssl1.0.0-hard-EXPERIMENTAL
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/x86_64-glibc-2.19/usr/bin/x86_64-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-export CRYPTO=openssl_with_aes
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-# Linux x64 musl
-INSTALLDIR=binaries/Linux/intel/
-SUFFIX=-x64-musl
-export PROGRAM_NAME=${INSTALLDIR}musl/vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}musl/vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/x86_64_gcc-4.9-linaro_musl-1.1.6/bin/x86_64-openwrt-linux-musl-gcc-4.9.2
-#export CC=/opt/toolchains/x86_64-musl/usr/bin/x86_64-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-export CRYPTO=internal
-export NOPROCFS=0
-export AUXV=1
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu -static"
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export MULTI_NAME=${INSTALLDIR}musl/vlmcsdmulti${SUFFIX}
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-#make $MAKEFLAGS CC=/opt/toolchains/x86_64-uclibc-0.9.33/bin/x86_64-linux-gcc LDFLAGS="-Wl,--hash-style=gnu" CLIENT_NAME=binaries/Linux/intel/uclibc/vlmcs-x64-uclibc PROGRAM_NAME=binaries/Linux/intel/uclibc/vlmcsd-x64-uclibc CFLAGS="$SMALL -flto=jobserver -fwhole-program -pipe -fno-stack-protector" && \
-# Linux x64 uclibc
-INSTALLDIR=binaries/Linux/intel/uclibc/
-SUFFIX=-x64-uclibc
-export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/x86_64-uclibc-0.9.33/bin/x86_64-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -m64 -mtune=generic"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-export THREADS=0
-export CRYPTO=internal
-export NOPROCFS=0
-export AUXV=0
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-## mips32 little-endian DD-WRT toolchain with gcc 4.1.0
-#export CC=/opt/simplebuild/toolchains/ddwrt410/bin/mipsel-linux-gcc
-#INSTALLDIR=binaries/Linux/mips/little-endian/
-#SUFFIX=-mips32el-ddwrt-gcc$($CC -dumpversion)-uclibc
-#export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-#export PLATFORMFLAGS="-pipe -mips32"
-#export FEATURES=full
-#export CFLAGS="$SMALLCC"
-#export LDFLAGS="-fwhole-program"
-#export THREADS=0
-#export CRYPTO=internal
-#
-#make $MAKEFLAGS CAT=2 $PROGRAM_NAME $MULTI_NAME $CLIENT_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $PROGRAM_NAME, $MULTI_NAME and/or $CLIENT_NAME
-# exit $?
-#fi
-#
-#export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-#export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-#export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-#export LDFLAGS="-fwhole-program -static"
-#
-#make $REUSEOBJFLAGS CAT=2 $PROGRAM_NAME $MULTI_NAME $CLIENT_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $PROGRAM_NAME, $MULTI_NAME and/or $CLIENT_NAME
-# exit $?
-#fi
-
-
-
-
-
-#Linux mips32 little-endian uclibc
-INSTALLDIR=binaries/Linux/mips/little-endian/
-SUFFIX=-mips32el-uclibc
-export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX}
-export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX}
-export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-export CC=/opt/toolchains/mips32el-uclibc-0.9.33/bin/mipsel-linux-gcc
-export PLATFORMFLAGS="-flto=jobserver -fwhole-program -mips32"
-export FEATURES=full
-export CFLAGS="$SMALLCC"
-export LDFLAGS="$SMALLLD"
-export THREADS=0
-export CRYPTO=internal
-
-make $MAKEFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-export LDFLAGS="$SMALLLD -static"
-
-make $REUSEOBJFLAGS
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-export LDFLAGS="$SMALLLD"
-
-make $REUSEOBJFLAGS $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $MULTI_NAME
- exit $?
-fi
-
-
-
-
-##Linux armv6 hard-float little-endian. Used on Raspberry Pi with Raspbian.
-##The hard-float ABI cannot be combined with thumb.
-##You may wish to use armv5el-thumb instead because the binary is smaller
-#INSTALLDIR=binaries/Linux/arm/little-endian/glibc/
-#SUFFIX=-armv6hf-Raspberry-glibc
-#export PROGRAM_NAME=${INSTALLDIR}vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}vlmcsdmulti${SUFFIX}
-#export CC=/opt/toolchains/armhfv6-glibc-2.19/bin/arm-linux-gcc
-#export PLATFORMFLAGS="-flto=jobserver -fwhole-program -march=armv6zk -mfpu=vfp -mfloat-abi=hard -mtune=arm1176jzf-s"
-#export FEATURES=full
-#export CFLAGS="$SMALLCC"
-#export LDFLAGS="$SMALLLD -Wl,--hash-style=gnu"
-#export THREADS=0
-#export CRYPTO=internal
-#
-#make $MAKEFLAGS
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-#
-#rm -f *_all.c vlmcsd.o vlmcs.o vlmcsdmulti.o 2> /dev/null
-#
-#make $REUSEOBJFLAGS $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $MULTI_NAME
-# exit $?
-#fi
-
-
-
-
-## Linux arm big-endian uclibc
-#INSTALLDIR=binaries/Linux/arm/big-endian/
-#SUFFIX=-armeb-nslu2-uclibc
-#export PROGRAM_NAME=${INSTALLDIR}uclibc/vlmcsd${SUFFIX}
-#export CLIENT_NAME=${INSTALLDIR}uclibc/vlmcs${SUFFIX}
-#export MULTI_NAME=${INSTALLDIR}uclibc/vlmcsdmulti${SUFFIX}
-#export CC=/opt/simplebuild/toolchains/nslu2open/bin/armeb-linux-uclibc-gcc
-#export PLATFORMFLAGS="-pipe"
-#export FEATURES=full
-#export CFLAGS="$SMALLCC"
-#export LDFLAGS="-Wl,-z,norelo"
-#export THREADS=0
-#
-#make $MAKEFLAGS CAT=2 $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME
-#
-#if [ $? != 0 ]; then
-# echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME
-# exit $?
-#fi
-
-export PROGRAM_NAME=${INSTALLDIR}static/vlmcsd${SUFFIX}-static
-export CLIENT_NAME=${INSTALLDIR}static/vlmcs${SUFFIX}-static
-export MULTI_NAME=${INSTALLDIR}static/vlmcsdmulti${SUFFIX}-static
-export LDFLAGS="-Wl,-z,norelo -static"
-
-make $REUSEOBJFLAGS CAT=2 $CLIENT_NAME $PROGRAM_NAME $MULTI_NAME
-
-if [ $? != 0 ]; then
- echo Error creating $CLIENT_NAME, $MULTI_NAME and/or $PROGRAM_NAME
- exit $?
-fi
-
-
-# Strip off unnecessary stuff from binaries
-
-find binaries -xdev -name 'vlmcs*' -exec /opt/toolchains/mips32el-mips16-glibc-2.18/usr/bin/mipsel-linux-strip -s --strip-unneeded --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag {} \; 2>/dev/null
-find binaries -xdev -name 'vlmcs*' -exec strip -s --strip-unneeded --remove-section=.note.gnu.gold-version --remove-section=.comment --remove-section=.note --remove-section=.note.gnu.build-id --remove-section=.note.ABI-tag {} \; 2>/dev/null
-find binaries -xdev -name 'vlmcs*' -exec sstrip -z {} \; 2>/dev/null
-
-make alldocs
-
-rm *.o
-
-#cp -p binaries/Linux/intel/glibc/vlmcs-x32-glibc /usr/local/bin/vlmcs
-
-cp -pf binaries/Linux/intel/glibc/vlmcsdmulti-x64-glibc /usr/local/sbin/vlmcsdmulti
-
-ln -s vlmcsdmulti /usr/local/sbin/vlmcsd 2>/dev/null
-ln -s ../sbin/vlmcsdmulti /usr/local/bin/vlmcs 2>/dev/null
-mkdir -p /usr/local/man/man1 2>/dev/null
-mkdir -p /usr/local/man/man5 2>/dev/null
-mkdir -p /usr/local/man/man8 2>/dev/null
-mkdir -p /usr/local/man/man7 2>/dev/null
-cp -a vlmcs.1 vlmcsdmulti.1 /usr/local/man/man1/
-cp -a vlmcsd.7 /usr/local/man/man7/
-cp -a vlmcsd.8 /usr/local/man/man8/
-cp -a vlmcsd.ini.5 /usr/local/man/man5/
-pbzip2 -f -9 /usr/local/man/man5/vlmcsd.ini.5 /usr/local/man/man1/vlmcs.1 /usr/local/man/man1/vlmcsdmulti.1 /usr/local/man/man7/vlmcsd.7 /usr/local/man/man8/vlmcsd.8
-#pbzip2 -f /usr/local/man/man7/vlmcsd.7
-#pbzip2 -f /usr/local/man/man8/vlmcsd.8
-
-mandb >/dev/null 2>&1
-
diff --git a/make_multilib_linux b/make_multilib_linux
index eeba9ed..64dcde5 100755
--- a/make_multilib_linux
+++ b/make_multilib_linux
@@ -1,5 +1,6 @@
#!/bin/bash
+export VLMCSD_VERSION="svn`svnversion`"
SMALLCC="-pipe -fno-common -fno-exceptions -fno-stack-protector -fno-unwind-tables -fno-asynchronous-unwind-tables -fmerge-all-constants"
SMALLLD="-pipe -Wl,--hash-style=sysv -Wl,-z,norelro -Wl,--build-id=none"
SMALL="$SMALLCC $SMALLLD"
diff --git a/make_netbsd b/make_netbsd
index 1d78bfb..b200941 100755
--- a/make_netbsd
+++ b/make_netbsd
@@ -1,5 +1,6 @@
#!/usr/pkg/bin/bash
+export VLMCSD_VERSION="svn`svnversion`"
export VERBOSE=3
export DNS_PARSER=OS
diff --git a/make_openbsd b/make_openbsd
index b883dfa..6134ec8 100755
--- a/make_openbsd
+++ b/make_openbsd
@@ -1,5 +1,6 @@
#!/usr/local/bin/bash
+export VLMCSD_VERSION="svn`svnversion`"
export VERBOSE=3
export DNS_PARSER=OS
diff --git a/make_osx b/make_osx
index f0459ac..c8c0d8b 100755
--- a/make_osx
+++ b/make_osx
@@ -1,5 +1,6 @@
#!/bin/bash
+export VLMCSD_VERSION="svn`svnversion`"
export VERBOSE=3
export DNS_PARSER=OS
diff --git a/make_solaris b/make_solaris
index c66fb47..4116e0e 100755
--- a/make_solaris
+++ b/make_solaris
@@ -1,5 +1,6 @@
#!/bin/sh
+export VLMCSD_VERSION="svn`svnversion`"
export VERBOSE=3
export CAT=2
diff --git a/make_windows b/make_windows
index 630423f..13ee8e9 100755
--- a/make_windows
+++ b/make_windows
@@ -1,5 +1,6 @@
#!/bin/bash
+export VLMCSD_VERSION="svn`svnversion`"
rm -f cygkms*.dll libkms*.dll vlmcs-* vlmcsd-win* vlmcsd-cyg* vlmcsdmulti-* *_all.* vlmcsd.exe vlmcs.exe vlmcsdmulti.exe 2> /dev/null
export CAT=2
@@ -33,9 +34,9 @@ make $MAKEFLAGS THREADS=1 MSRPC=1 DNS_PARSER=internal CLIENT_NAME=vlmcs-cygwin-m
make $MAKEFLAGS THREADS=1 MSRPC=1 DNS_PARSER=internal CLIENT_NAME=vlmcs-cygwin-msrpc-x64-openssl-EXPERIMENTAL CRYPTO=openssl_with_aes PROGRAM_NAME=vlmcsd-cygwin-x64-openssl-EXPERIMENTAL CC=x86_64-pc-cygwin-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF64" LDFLAGS="$LFCYG64"
export CAT=2
-
-#make $MAKEFLAGS libkms32.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms32.dll CC=i686-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF32" LDFLAGS="-static-libgcc $LFWIN32"
-#make $MAKEFLAGS libkms64.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms64.dll CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF64" LDFLAGS="-static-libgcc $LFWIN64"
+#unset CAT
+make $MAKEFLAGS libkms32.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms32.dll CC=i686-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF32" LDFLAGS="-static-libgcc $LFWIN32"
+make $MAKEFLAGS libkms64.dll CRYPTO=windows FEATURES=minimum THREADS=1 DLL_NAME=libkms64.dll CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CF -flto=jobserver -fvisibility=hidden" PLATFORMFLAGS="$PF64" LDFLAGS="-static-libgcc $LFWIN64"
#make $MAKEFLAGS all vlmcsdmulti-Windows-x86 THREADS=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-x86 PROGRAM_NAME=vlmcsd-Windows-x86 MULTI_NAME=vlmcsdmulti-Windows-x86 CC=i686-w64-MingW32-gcc.exe CFLAGS="$CF" PLATFORMFLAGS="$PF32" LDFLAGS="$LFWIN32"
#make $MAKEFLAGS all vlmcsdmulti-Windows-x64 THREADS=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-x64 PROGRAM_NAME=vlmcsd-Windows-x64 MULTI_NAME=vlmcsdmulti-Windows-x64 CC=x86_64-w64-MingW32-gcc.exe CFLAGS="$CF" PLATFORMFLAGS="$PF64" LDFLAGS="$LFWIN64"
#make -Bj MSRPC=1 CRYPTO=windows CLIENT_NAME=vlmcs-Windows-msrpc-x86 PROGRAM_NAME=vlmcsd-Windows-msrpc-x86 MULTI_NAME=vlmcsdmulti-Windows-msrpc-x86 CC=i686-w64-MingW32-gcc.exe CFLAGS="$CFMSRPC" PLATFORMFLAGS="$PF32" LDFLAGS="-Wl,--nxcompat,--dynamicbase,--tsaware,--large-address-aware"
diff --git a/msrpc-client.c b/msrpc-client.c
index aee5695..bbabcc0 100644
--- a/msrpc-client.c
+++ b/msrpc-client.c
@@ -72,13 +72,13 @@ RpcCtx connectToAddress(char *const addr, const int AddressFamily_unused, int_fa
if ((status = createStringBinding(addr, &stringBinding)) != RPC_S_OK)
{
- errorout("%s\n", win_strerror(status));
+ printerrorf("%s\n", win_strerror(status));
return !0;
}
if (PreviousRpcCallFailed)
{
- errorout("%s\n", win_strerror(PreviousRpcCallFailed));
+ printerrorf("%s\n", win_strerror(PreviousRpcCallFailed));
return !0;
}
diff --git a/msrpc-client.h b/msrpc-client.h
index bfb6dba..17d2a0c 100644
--- a/msrpc-client.h
+++ b/msrpc-client.h
@@ -7,6 +7,7 @@
#include "types.h"
#include
+#include "output.h"
typedef int_fast8_t RpcCtx;
typedef RPC_STATUS RpcStatus;
diff --git a/msrpc-server.c b/msrpc-server.c
index 04d2621..eb9b151 100644
--- a/msrpc-server.c
+++ b/msrpc-server.c
@@ -221,7 +221,7 @@ int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsigned char
{
RPC_CSTR clientIpAddress;
RPC_STATUS result;
- int status = RPC_S_OK;
+ int status = 0;
result = getClientIp(IDL_handle, &clientIpAddress);
@@ -238,7 +238,7 @@ int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsigned char
logger ("Cannot verify that client has a private IP address\n");
# endif
- return RPC_S_ACCESS_DENIED;
+ return 0x80070000 | RPC_S_ACCESS_DENIED;
}
if (!result && (PublicIPProtectionLevel & 2) && !IsPrivateIPAddress((char*)clientIpAddress))
@@ -248,7 +248,7 @@ int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsigned char
# endif
RpcStringFreeA(&clientIpAddress);
- return RPC_S_ACCESS_DENIED;
+ return 0x80070000 | RPC_S_ACCESS_DENIED;
}
# endif // NO_PRIVATE_IP_DETECT
@@ -256,25 +256,38 @@ int ProcessActivationRequest(handle_t IDL_handle, int requestSize, unsigned char
if (requestSize < (int)sizeof(REQUEST_V4))
{
if (!result) RpcStringFreeA(&clientIpAddress);
- return RPC_S_CANNOT_SUPPORT;
+ return 0x8007000D;
}
*response = (uint8_t *)midl_user_allocate(MAX_RESPONSE_SIZE);
+ int kmsStatus = 0x8007000D;
+ int version = LE32(((REQUEST*)(request))->Version);
- switch(LE16(((REQUEST*)(request))->MajorVer))
+ switch(version)
{
- case 4:
- *responseSize = CreateResponseV4((REQUEST_V4 *)request, *response, (char*)clientIpAddress);
+ case 0x40000:
+ kmsStatus = CreateResponseV4((REQUEST_V4 *)request, *response, (char*)clientIpAddress);
break;
- case 5:
- case 6:
- *responseSize = CreateResponseV6((REQUEST_V6 *) request, *response, (char*)clientIpAddress);
+ case 0x50000:
+ case 0x60000:
+ kmsStatus = CreateResponseV6((REQUEST_V6 *) request, *response, (char*)clientIpAddress);
break;
default:
- status = RPC_S_INVALID_ARG;
+# ifndef NO_LOG
+ logger("Fatal: KMSv%u.%u unsupported\n", version >> 16, version & 0xffff);
+# endif // NO_LOG
break;
}
+ if (kmsStatus < 0)
+ {
+ status = kmsStatus;
+ }
+ else
+ {
+ *responseSize = kmsStatus;
+ }
+
if (!result) RpcStringFreeA(&clientIpAddress);
return status;
}
diff --git a/network.c b/network.c
index 8a96844..c90efa2 100644
--- a/network.c
+++ b/network.c
@@ -280,7 +280,7 @@ SOCKET connectToAddress(const char *const addr, const int AddressFamily, int_fas
break;
}
- errorout("%s\n", socket_errno == VLMCSD_EINPROGRESS ? "Timed out" : vlmcsd_strerror(socket_errno));
+ printerrorf("%s: %s\n", szAddr, socket_errno == VLMCSD_EINPROGRESS ? "Timed out" : vlmcsd_strerror(socket_errno));
socketclose(s);
s = INVALID_SOCKET;
diff --git a/network.h b/network.h
index 48343d5..f46cd0f 100644
--- a/network.h
+++ b/network.h
@@ -11,7 +11,7 @@
#endif
#include "types.h"
-
+#include "output.h"
int_fast8_t sendrecv(SOCKET sock, BYTE *data, int len, int_fast8_t do_send);
diff --git a/output.c b/output.c
index 9df8abf..f0d7c05 100644
--- a/output.c
+++ b/output.c
@@ -94,7 +94,7 @@ int logger(const char *const fmt, ...)
// Output to stderr if it is available or to log otherwise (e.g. if running as daemon/service)
-void printerrorf(const char *const fmt, ...)
+int printerrorf(const char *const fmt, ...)
{
int error = errno;
va_list arglist;
@@ -103,7 +103,8 @@ void printerrorf(const char *const fmt, ...)
# ifdef IS_LIBRARY
- snprintf(ErrorMessage, MESSAGE_BUFFER_SIZE, fmt, arglist);
+ size_t len = strlen(ErrorMessage);
+ vsnprintf(ErrorMessage + len, MESSAGE_BUFFER_SIZE - len - 1, fmt, arglist);
# else // !IS_LIBRARY
@@ -125,6 +126,7 @@ void printerrorf(const char *const fmt, ...)
va_end(arglist);
errno = error;
+ return 0;
}
@@ -191,7 +193,7 @@ void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p)
productName = "Unknown";
#endif
- p("Activation ID (Product) : %s (%s)\n", guidBuffer, productName);
+ p("SKU ID (aka Activation ID) : %s (%s)\n", guidBuffer, productName);
uuid2StringLE(&Request->KMSID, guidBuffer);
@@ -201,7 +203,7 @@ void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p)
productName = "Unknown";
#endif
- p("Key Management Service ID : %s (%s)\n", guidBuffer, productName);
+ p("KMS ID (aka KMS counted ID) : %s (%s)\n", guidBuffer, productName);
uuid2StringLE(&Request->CMID, guidBuffer);
p("Client machine ID : %s\n", guidBuffer);
diff --git a/output.h b/output.h
index e08e9e2..12e2560 100644
--- a/output.h
+++ b/output.h
@@ -11,7 +11,7 @@
typedef int (*PRINTFUNC)(const char *const fmt, ...);
-void printerrorf(const char *const fmt, ...);
+int printerrorf(const char *const fmt, ...);
int errorout(const char* fmt, ...);
void logRequestVerbose(const REQUEST *const Request, const PRINTFUNC p);
void logResponseVerbose(const char *const ePID, const BYTE *const hwid, const RESPONSE *const response, const PRINTFUNC p);
diff --git a/rpc.c b/rpc.c
index 0ac8ef0..7696e97 100644
--- a/rpc.c
+++ b/rpc.c
@@ -176,25 +176,33 @@ static unsigned int checkRpcRequestSize(const RPC_REQUEST64 *const Request, cons
if (requestSize < sizeof(REQUEST_V4) + (Ctx != *Ndr64Ctx ? sizeof(RPC_REQUEST) : sizeof(RPC_REQUEST64))) return 0;
// Get KMS major version
- uint_fast16_t _v;
+ uint16_t majorIndex, minor;
+ DWORD version;
if (Ctx != *Ndr64Ctx)
- _v = LE16(((WORD*)Request->Ndr.Data)[1]) - 4;
+ {
+ version = LE32(*(DWORD*)Request->Ndr.Data);
+ }
else
- _v = LE16(((WORD*)Request->Ndr64.Data)[1]) - 4;
+ {
+ version = LE32(*(DWORD*)Request->Ndr64.Data);
+ }
+
+ majorIndex = (uint16_t)(version >> 16) - 4;
+ minor = (uint16_t)(version & 0xffff);
// Only KMS v4, v5 and v6 are supported
- if (_v >= vlmcsd_countof(_Versions))
+ if (majorIndex >= vlmcsd_countof(_Versions) || minor)
{
# ifndef NO_LOG
- logger("Fatal: KMSv%i unsupported\n", _v + 4);
+ logger("Fatal: KMSv%hu.%hu unsupported\n", (unsigned short)majorIndex + 4, (unsigned short)minor);
# endif // NO_LOG
return 0;
}
// Could check for equality but allow bigger requests to support buggy RPC clients (e.g. wine)
// Buffer overrun is check by caller.
- return (requestSize >= _Versions[_v].RequestSize);
+ return (requestSize >= _Versions[majorIndex].RequestSize);
}
@@ -205,10 +213,9 @@ static unsigned int checkRpcRequestSize(const RPC_REQUEST64 *const Request, cons
*
* The RPC packet size (excluding header) is actually in Response->AllocHint
*/
-static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64 *const Response, const DWORD RpcAssocGroup_unused, const SOCKET sock_unused, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE packetType, const char* const ipstr)
+static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64 *const Response, const DWORD RpcAssocGroup_unused, const SOCKET sock_unused, WORD* NdrCtx, WORD* Ndr64Ctx, BYTE isValid, const char* const ipstr)
{
- uint_fast16_t _v;
- int ResponseSize;
+ int ResponseSize; // <0 = Errorcode (HRESULT)
WORD Ctx = LE16(Request->ContextId);
BYTE* requestData;
BYTE* responseData;
@@ -226,28 +233,45 @@ static int rpcRequest(const RPC_REQUEST64 *const Request, RPC_RESPONSE64 *const
responseData = (BYTE*)&Response->Ndr64.Data;
}
- _v = LE16(((WORD*)requestData)[1]) - 4;
+ ResponseSize = 0x8007000D; // Invalid Data
- if (!(ResponseSize = _Versions[_v].CreateResponse(requestData, responseData, ipstr)))
+ if (isValid)
{
- return 0;
+ uint16_t majorIndex = LE16(((WORD*)requestData)[1]) - 4;
+ if (!(ResponseSize = _Versions[majorIndex].CreateResponse(requestData, responseData, ipstr))) ResponseSize = 0x8007000D;
}
if (Ctx != *Ndr64Ctx)
{
- Response->Ndr.DataSizeMax = LE32(0x00020000);
- Response->Ndr.DataLength = Response->Ndr.DataSizeIs = LE32(ResponseSize);
- len = ResponseSize + sizeof(Response->Ndr);
+ if (ResponseSize < 0)
+ {
+ Response->Ndr.DataSizeMax = Response->Ndr.DataLength = 0;
+ len = sizeof(Response->Ndr) - sizeof(Response->Ndr.DataSizeIs);
+ }
+ else
+ {
+ Response->Ndr.DataSizeMax = LE32(0x00020000);
+ Response->Ndr.DataLength = Response->Ndr.DataSizeIs = LE32(ResponseSize);
+ len = ResponseSize + sizeof(Response->Ndr);
+ }
}
else
{
- Response->Ndr64.DataSizeMax = LE64(0x00020000ULL);
- Response->Ndr64.DataLength = Response->Ndr64.DataSizeIs = LE64((uint64_t)ResponseSize);
- len = ResponseSize + sizeof(Response->Ndr64);
+ if (ResponseSize < 0)
+ {
+ Response->Ndr64.DataSizeMax = Response->Ndr64.DataLength = 0;
+ len = sizeof(Response->Ndr64) - sizeof(Response->Ndr64.DataSizeIs);
+ }
+ else
+ {
+ Response->Ndr64.DataSizeMax = LE64(0x00020000ULL);
+ Response->Ndr64.DataLength = Response->Ndr64.DataSizeIs = LE64((uint64_t)ResponseSize);
+ len = ResponseSize + sizeof(Response->Ndr64);
+ }
}
pRpcReturnCode = ((BYTE*)&Response->Ndr) + len;
- UA32(pRpcReturnCode) = 0; //LE32 not needed for 0
+ UA32(pRpcReturnCode) = ResponseSize < 0 ? LE32(ResponseSize) : 0;
len += sizeof(DWORD);
// Pad zeros to 32-bit align (seems not neccassary but Windows RPC does it this way)
@@ -518,10 +542,11 @@ void rpcServer(const SOCKET sock, const DWORD RpcAssocGroup, const char* const i
if (!_recv(sock, requestBuffer, request_len)) return;
// Request is invalid
- if (!_Actions[_a].CheckRequestSize(requestBuffer, request_len, &NdrCtx, &Ndr64Ctx)) return;
+ BYTE isValid = _Actions[_a].CheckRequestSize(requestBuffer, request_len, &NdrCtx, &Ndr64Ctx);
+ if (rpcRequestHeader.PacketType != RPC_PT_REQUEST && !isValid) return;
// Unable to create a valid response from request
- if (!(response_len = _Actions[_a].GetResponse(requestBuffer, rpcResponse, RpcAssocGroup, sock, &NdrCtx, &Ndr64Ctx, rpcRequestHeader.PacketType, ipstr))) return;
+ if (!(response_len = _Actions[_a].GetResponse(requestBuffer, rpcResponse, RpcAssocGroup, sock, &NdrCtx, &Ndr64Ctx, rpcRequestHeader.PacketType != RPC_PT_REQUEST ? rpcRequestHeader.PacketType : isValid, ipstr))) return;
response_len += sizeof(RPC_HEADER);
@@ -560,26 +585,26 @@ static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPack
(uint32_t)desiredPacketType,
Header->PacketType
);
- status = !0;
+ status = RPC_S_PROTOCOL_ERROR;
}
if (Header->DataRepresentation != BE32(0x10000000))
{
p("Fatal: RPC response does not conform to Microsoft's limited support of DCE RPC\n");
- status = !0;
+ status = RPC_S_PROTOCOL_ERROR;
}
if (Header->AuthLength != 0)
{
p("Fatal: RPC response requests authentication\n");
- status = !0;
+ status = RPC_S_UNKNOWN_AUTHN_TYPE;
}
// vlmcsd does not support fragmented packets (not yet neccassary)
if ( (Header->PacketFlags & (RPC_PF_FIRST | RPC_PF_LAST)) != (RPC_PF_FIRST | RPC_PF_LAST) )
{
p("Fatal: RPC packet flags RPC_PF_FIRST and RPC_PF_LAST are not both set.\n");
- status = !0;
+ status = RPC_S_CANNOT_SUPPORT;
}
if (Header->PacketFlags & RPC_PF_CANCEL_PENDING) p("Warning: %s should not be set\n", "RPC_PF_CANCEL_PENDING");
@@ -591,7 +616,7 @@ static int checkRpcHeader(const RPC_HEADER *const Header, const BYTE desiredPack
if (Header->VersionMajor != 5 || Header->VersionMinor != 0)
{
p("Fatal: Expected RPC version 5.0 and got %u.%u\n", Header->VersionMajor, Header->VersionMinor);
- status = !0;
+ status = RPC_S_INVALID_VERS_OPTION;
}
return status;
@@ -639,7 +664,7 @@ static int checkRpcResponseHeader(const RPC_HEADER *const ResponseHeader, const
(uint32_t)LE32(ResponseHeader->CallId)
);
- status = !0;
+ status = RPC_S_PROTOCOL_ERROR;
}
return status;
@@ -715,19 +740,19 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
if (!_send(sock, _Request, size))
{
- errorout("\nFatal: Could not send RPC request\n");
- status = !0;
+ printerrorf("\nFatal: Could not send RPC request\n");
+ status = RPC_S_COMM_FAILURE;
break;
}
if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER)))
{
- errorout("\nFatal: No RPC response received from server\n");
- status = !0;
+ printerrorf("\nFatal: No RPC response received from server\n");
+ status = RPC_S_COMM_FAILURE;
break;
}
- if ((status = checkRpcResponseHeader(&ResponseHeader, RequestHeader, RPC_PT_RESPONSE, &errorout))) break;
+ if ((status = checkRpcResponseHeader(&ResponseHeader, RequestHeader, RPC_PT_RESPONSE, &printerrorf))) break;
size = useNdr64 ? sizeof(RPC_RESPONSE64) : sizeof(RPC_RESPONSE);
@@ -736,21 +761,21 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
if (!_recv(sock, &_Response, size))
{
- errorout("\nFatal: RPC response is incomplete\n");
- status = !0;
+ printerrorf("\nFatal: RPC response is incomplete\n");
+ status = RPC_S_COMM_FAILURE;
break;
}
if (_Response.CancelCount != 0)
{
- errorout("\nFatal: RPC response cancel count is not 0\n");
- status = !0;
+ printerrorf("\nFatal: RPC response cancel count is not 0\n");
+ status = RPC_S_CALL_CANCELLED;
}
if (_Response.ContextId != (useNdr64 ? LE16(1) : 0))
{
- errorout("\nFatal: RPC response context id %u is not bound\n", (unsigned int)LE16(_Response.ContextId));
- status = !0;
+ printerrorf("\nFatal: RPC response context id %u is not bound\n", (unsigned int)LE16(_Response.ContextId));
+ status = RPC_X_SS_CONTEXT_DAMAGED;
}
int_fast8_t sizesMatch;
@@ -760,7 +785,7 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
*responseSize = (size_t)LE64(_Response.Ndr64.DataLength);
responseSize2 = (size_t)LE64(_Response.Ndr64.DataSizeIs);
- if (!*responseSize || !_Response.Ndr64.DataSizeMax)
+ if (/*!*responseSize ||*/ !_Response.Ndr64.DataSizeMax)
{
status = (int)LE32(_Response.Ndr64.status);
break;
@@ -773,7 +798,7 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
*responseSize = (size_t)LE32(_Response.Ndr.DataLength);
responseSize2 = (size_t)LE32(_Response.Ndr.DataSizeIs);
- if (!*responseSize || !_Response.Ndr.DataSizeMax)
+ if (/*!*responseSize ||*/ !_Response.Ndr.DataSizeMax)
{
status = (int)LE32(_Response.Ndr.status);
break;
@@ -784,12 +809,12 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
if (!sizesMatch)
{
- errorout("\nFatal: NDR data length (%u) does not match NDR data size (%u)\n",
+ printerrorf("\nFatal: NDR data length (%u) does not match NDR data size (%u)\n",
(uint32_t)*responseSize,
(uint32_t)LE32(_Response.Ndr.DataSizeIs)
);
- status = !0;
+ status = RPC_S_PROTOCOL_ERROR;
}
*KmsResponse = (BYTE*)vlmcsd_malloc(*responseSize + MAX_EXCESS_BYTES);
@@ -800,12 +825,12 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
// Read up to 16 bytes more than bytes expected to detect faulty KMS emulators
if ((bytesread = recv(sock, (char*)*KmsResponse, *responseSize + MAX_EXCESS_BYTES, 0)) < (int)*responseSize)
{
- errorout("\nFatal: No or incomplete KMS response received. Required %u bytes but only got %i\n",
+ printerrorf("\nFatal: No or incomplete KMS response received. Required %u bytes but only got %i\n",
(uint32_t)*responseSize,
(int32_t)(bytesread < 0 ? 0 : bytesread)
);
- status = !0;
+ status = RPC_S_PROTOCOL_ERROR;
break;
}
@@ -816,7 +841,7 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
if (len + pad != LE32(_Response.AllocHint))
{
- errorout("\nWarning: RPC stub size is %u, should be %u (probably incorrect padding)\n", (uint32_t)LE32(_Response.AllocHint), (uint32_t)(len + pad));
+ printerrorf("\nWarning: RPC stub size is %u, should be %u (probably incorrect padding)\n", (uint32_t)LE32(_Response.AllocHint), (uint32_t)(len + pad));
}
else
{
@@ -825,7 +850,7 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
{
if (*(*KmsResponse + *responseSize + sizeof(*pReturnCode) + i))
{
- errorout("\nWarning: RPC stub data not padded to zeros according to Microsoft standard\n");
+ printerrorf("\nWarning: RPC stub data not padded to zeros according to Microsoft standard\n");
break;
}
}
@@ -834,8 +859,6 @@ RpcStatus rpcSendRequest(const RpcCtx sock, const BYTE *const KmsRequest, const
pReturnCode = (DWORD*)(*KmsResponse + *responseSize + pad);
status = LE32(UA32(pReturnCode));
- if (status) errorout("\nWarning: RPC stub data reported Error %u\n", (uint32_t)status);
-
break;
}
@@ -914,14 +937,14 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
if (!_send(sock, _Request, rpcBindSize))
{
- errorout("\nFatal: Sending RPC bind request failed\n");
- return !0;
+ printerrorf("\nFatal: Sending RPC bind request failed\n");
+ return RPC_S_COMM_FAILURE;
}
if (!_recv(sock, &ResponseHeader, sizeof(RPC_HEADER)))
{
- errorout("\nFatal: Did not receive a response from server\n");
- return !0;
+ printerrorf("\nFatal: Did not receive a response from server\n");
+ return RPC_S_COMM_FAILURE;
}
if ((status = checkRpcResponseHeader
@@ -929,7 +952,7 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
&ResponseHeader,
RequestHeader,
packetType == RPC_PT_BIND_REQ ? RPC_PT_BIND_ACK : RPC_PT_ALTERCONTEXT_ACK,
- &errorout
+ &printerrorf
)))
{
return status;
@@ -940,9 +963,9 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
if (!_recv(sock, bindResponse, LE16(ResponseHeader.FragLength) - sizeof(RPC_HEADER)))
{
- errorout("\nFatal: Incomplete RPC bind acknowledgement received\n");
+ printerrorf("\nFatal: Incomplete RPC bind acknowledgement received\n");
free(bindResponseBytePtr);
- return !0;
+ return RPC_S_COMM_FAILURE;
}
else
{
@@ -958,12 +981,12 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
if (bindResponse->NumResults != bindRequest->NumCtxItems)
{
- errorout("\nFatal: Expected %u CTX items but got %u\n",
+ printerrorf("\nFatal: Expected %u CTX items but got %u\n",
(uint32_t)LE32(bindRequest->NumCtxItems),
(uint32_t)LE32(bindResponse->NumResults)
);
- status = !0;
+ status = RPC_S_PROTOCOL_ERROR;
}
for (i = 0; i < ctxItems; i++)
@@ -975,7 +998,7 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
{
if (!IsNullGuid((BYTE*)&bindResponse->Results[i].TransferSyntax))
{
- errorout(
+ printerrorf(
"\nWarning: Rejected transfer syntax %s did not return NULL Guid\n",
transferSyntaxName
);
@@ -983,7 +1006,7 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
if (bindResponse->Results[i].SyntaxVersion)
{
- errorout(
+ printerrorf(
"\nWarning: Rejected transfer syntax %s did not return syntax version 0 but %u\n",
transferSyntaxName,
LE32(bindResponse->Results[i].SyntaxVersion)
@@ -992,14 +1015,14 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
if (bindResponse->Results[i].AckReason == RPC_ABSTRACTSYNTAX_UNSUPPORTED)
{
- errorout(
+ printerrorf(
"\nWarning: Transfer syntax %s does not support KMS activation\n",
transferSyntaxName
);
}
else if (bindResponse->Results[i].AckReason != RPC_SYNTAX_UNSUPPORTED)
{
- errorout(
+ printerrorf(
"\nWarning: Rejected transfer syntax %s did not return ack reason RPC_SYNTAX_UNSUPPORTED\n",
transferSyntaxName
);
@@ -1012,12 +1035,12 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
{
if (bindResponse->Results[i].AckResult != RPC_BIND_ACK)
{
- errorout("\nWarning: BTFN did not respond with RPC_BIND_ACK or RPC_BIND_NACK\n");
+ printerrorf("\nWarning: BTFN did not respond with RPC_BIND_ACK or RPC_BIND_NACK\n");
}
if (bindResponse->Results[i].AckReason != LE16(3))
{
- errorout("\nWarning: BTFN did not return expected feature mask 0x3 but 0x%X\n", (unsigned int)LE16(bindResponse->Results[i].AckReason));
+ printerrorf("\nWarning: BTFN did not return expected feature mask 0x3 but 0x%X\n", (unsigned int)LE16(bindResponse->Results[i].AckReason));
}
if (verbose) printf("... BTFN ");
@@ -1029,38 +1052,38 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
// NDR32 or NDR64 Ctx
if (bindResponse->Results[i].AckResult != RPC_BIND_ACCEPT)
{
- errorout(
+ printerrorf(
"\nFatal: transfer syntax %s returned an invalid status, neither RPC_BIND_ACCEPT nor RPC_BIND_NACK\n",
transferSyntaxName
);
- status = !0;
+ status = RPC_S_PROTOCOL_ERROR;
}
if (!IsEqualGUID(&bindResponse->Results[i].TransferSyntax, &bindRequest->CtxItems[i].TransferSyntax))
{
- errorout(
+ printerrorf(
"\nFatal: Transfer syntax of RPC bind request and response does not match\n"
);
- status = !0;
+ status = RPC_S_UNSUPPORTED_TRANS_SYN;
}
if (bindResponse->Results[i].SyntaxVersion != bindRequest->CtxItems[i].SyntaxVersion)
{
- errorout("\nFatal: Expected transfer syntax version %u for %s but got %u\n",
+ printerrorf("\nFatal: Expected transfer syntax version %u for %s but got %u\n",
(uint32_t)LE32(bindRequest->CtxItems[0].SyntaxVersion),
transferSyntaxName,
(uint32_t)LE32(bindResponse->Results[0].SyntaxVersion)
);
- status = !0;
+ status = RPC_S_UNSUPPORTED_TRANS_SYN;
}
// The ack reason field is actually undefined here but Microsoft sets this to 0
if (bindResponse->Results[i].AckReason != 0)
{
- errorout(
+ printerrorf(
"\nWarning: Ack reason should be 0 but is %u\n",
LE16(bindResponse->Results[i].AckReason)
);
@@ -1087,8 +1110,8 @@ RpcStatus rpcBindOrAlterClientContext(const RpcCtx sock, BYTE packetType, const
if (!RpcFlags.HasNDR64 && !RpcFlags.HasNDR32)
{
- errorout("\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n");
- status = !0;
+ printerrorf("\nFatal: Could neither negotiate NDR32 nor NDR64 with the RPC server\n");
+ status = RPC_S_NO_PROTSEQS;
}
return status;
diff --git a/rpc.h b/rpc.h
index 86792cb..18ac456 100644
--- a/rpc.h
+++ b/rpc.h
@@ -8,6 +8,139 @@
#include "types.h"
+#if !defined(_WIN32) && !defined(__CYGWIN__)
+#define RPC_S_OK 0
+#define RPC_S_INVALID_ARG 87
+#define RPC_S_OUT_OF_MEMORY 14
+#define RPC_S_OUT_OF_THREADS 164
+#define RPC_S_INVALID_LEVEL RPC_S_INVALID_ARG
+#define RPC_S_BUFFER_TOO_SMALL 122
+#define RPC_S_INVALID_SECURITY_DESC 1338
+#define RPC_S_ACCESS_DENIED 5
+#define RPC_S_SERVER_OUT_OF_MEMORY 1130
+#define RPC_S_ASYNC_CALL_PENDING 997
+#define RPC_S_UNKNOWN_PRINCIPAL 1332
+#define RPC_S_TIMEOUT 1460
+#define RPC_S_INVALID_STRING_BINDING 1700
+#define RPC_S_WRONG_KIND_OF_BINDING 1701
+#define RPC_S_INVALID_BINDING 1702
+#define RPC_S_PROTSEQ_NOT_SUPPORTED 1703
+#define RPC_S_INVALID_RPC_PROTSEQ 1704
+#define RPC_S_INVALID_STRING_UUID 1705
+#define RPC_S_INVALID_ENDPOINT_FORMAT 1706
+#define RPC_S_INVALID_NET_ADDR 1707
+#define RPC_S_NO_ENDPOINT_FOUND 1708
+#define RPC_S_INVALID_TIMEOUT 1709
+#define RPC_S_OBJECT_NOT_FOUND 1710
+#define RPC_S_ALREADY_REGISTERED 1711
+#define RPC_S_TYPE_ALREADY_REGISTERED 1712
+#define RPC_S_ALREADY_LISTENING 1713
+#define RPC_S_NO_PROTSEQS_REGISTERED 1714
+#define RPC_S_NOT_LISTENING 1715
+#define RPC_S_UNKNOWN_MGR_TYPE 1716
+#define RPC_S_UNKNOWN_IF 1717
+#define RPC_S_NO_BINDINGS 1718
+#define RPC_S_NO_PROTSEQS 1719
+#define RPC_S_CANT_CREATE_ENDPOINT 1720
+#define RPC_S_OUT_OF_RESOURCES 1721
+#define RPC_S_SERVER_UNAVAILABLE 1722
+#define RPC_S_SERVER_TOO_BUSY 1723
+#define RPC_S_INVALID_NETWORK_OPTIONS 1724
+#define RPC_S_NO_CALL_ACTIVE 1725
+#define RPC_S_CALL_FAILED 1726
+#define RPC_S_CALL_FAILED_DNE 1727
+#define RPC_S_PROTOCOL_ERROR 1728
+#define RPC_S_PROXY_ACCESS_DENIED 1729
+#define RPC_S_UNSUPPORTED_TRANS_SYN 1730
+#define RPC_S_UNSUPPORTED_TYPE 1732
+#define RPC_S_INVALID_TAG 1733
+#define RPC_S_INVALID_BOUND 1734
+#define RPC_S_NO_ENTRY_NAME 1735
+#define RPC_S_INVALID_NAME_SYNTAX 1736
+#define RPC_S_UNSUPPORTED_NAME_SYNTAX 1737
+#define RPC_S_UUID_NO_ADDRESS 1739
+#define RPC_S_DUPLICATE_ENDPOINT 1740
+#define RPC_S_UNKNOWN_AUTHN_TYPE 1741
+#define RPC_S_MAX_CALLS_TOO_SMALL 1742
+#define RPC_S_STRING_TOO_LONG 1743
+#define RPC_S_PROTSEQ_NOT_FOUND 1744
+#define RPC_S_PROCNUM_OUT_OF_RANGE 1745
+#define RPC_S_BINDING_HAS_NO_AUTH 1746
+#define RPC_S_UNKNOWN_AUTHN_SERVICE 1747
+#define RPC_S_UNKNOWN_AUTHN_LEVEL 1748
+#define RPC_S_INVALID_AUTH_IDENTITY 1749
+#define RPC_S_UNKNOWN_AUTHZ_SERVICE 1750
+#define EPT_S_INVALID_ENTRY 1751
+#define EPT_S_CANT_PERFORM_OP 1752
+#define EPT_S_NOT_REGISTERED 1753
+#define RPC_S_NOTHING_TO_EXPORT 1754
+#define RPC_S_INCOMPLETE_NAME 1755
+#define RPC_S_INVALID_VERS_OPTION 1756
+#define RPC_S_NO_MORE_MEMBERS 1757
+#define RPC_S_NOT_ALL_OBJS_UNEXPORTED 1758
+#define RPC_S_INTERFACE_NOT_FOUND 1759
+#define RPC_S_ENTRY_ALREADY_EXISTS 1760
+#define RPC_S_ENTRY_NOT_FOUND 1761
+#define RPC_S_NAME_SERVICE_UNAVAILABLE 1762
+#define RPC_S_INVALID_NAF_ID 1763
+#define RPC_S_CANNOT_SUPPORT 1764
+#define RPC_S_NO_CONTEXT_AVAILABLE 1765
+#define RPC_S_INTERNAL_ERROR 1766
+#define RPC_S_ZERO_DIVIDE 1767
+#define RPC_S_ADDRESS_ERROR 1768
+#define RPC_S_FP_DIV_ZERO 1769
+#define RPC_S_FP_UNDERFLOW 1770
+#define RPC_S_FP_OVERFLOW 1771
+#define RPC_X_NO_MORE_ENTRIES 1772
+#define RPC_X_SS_CHAR_TRANS_OPEN_FAIL 1773
+#define RPC_X_SS_CHAR_TRANS_SHORT_FILE 1774
+#define RPC_X_SS_IN_NULL_CONTEXT 1775
+#define RPC_X_SS_CONTEXT_DAMAGED 1777
+#define RPC_X_SS_HANDLES_MISMATCH 1778
+#define RPC_X_SS_CANNOT_GET_CALL_HANDLE 1779
+#define RPC_X_NULL_REF_POINTER 1780
+#define RPC_X_ENUM_VALUE_OUT_OF_RANGE 1781
+#define RPC_X_BYTE_COUNT_TOO_SMALL 1782
+#define RPC_X_BAD_STUB_DATA 1783
+#define RPC_S_CALL_IN_PROGRESS 1791
+#define RPC_S_NO_MORE_BINDINGS 1806
+#define RPC_S_NO_INTERFACES 1817
+#define RPC_S_CALL_CANCELLED 1818
+#define RPC_S_BINDING_INCOMPLETE 1819
+#define RPC_S_COMM_FAILURE 1820
+#define RPC_S_UNSUPPORTED_AUTHN_LEVEL 1821
+#define RPC_S_NO_PRINC_NAME 1822
+#define RPC_S_NOT_RPC_ERROR 1823
+#define RPC_S_UUID_LOCAL_ONLY 1824
+#define RPC_S_SEC_PKG_ERROR 1825
+#define RPC_S_NOT_CANCELLED 1826
+#define RPC_X_INVALID_ES_ACTION 1827
+#define RPC_X_WRONG_ES_VERSION 1828
+#define RPC_X_WRONG_STUB_VERSION 1829
+#define RPC_X_INVALID_PIPE_OBJECT 1830
+#define RPC_X_WRONG_PIPE_ORDER 1831
+#define RPC_X_WRONG_PIPE_VERSION 1832
+#define RPC_S_COOKIE_AUTH_FAILED 1833
+#define RPC_S_GROUP_MEMBER_NOT_FOUND 1898
+#define EPT_S_CANT_CREATE 1899
+#define RPC_S_INVALID_OBJECT 1900
+#define RPC_S_SEND_INCOMPLETE 1913
+#define RPC_S_INVALID_ASYNC_HANDLE 1914
+#define RPC_S_INVALID_ASYNC_CALL 1915
+#define RPC_X_PIPE_CLOSED 1916
+#define RPC_X_PIPE_DISCIPLINE_ERROR 1917
+#define RPC_X_PIPE_EMPTY 1918
+#define RPC_S_ENTRY_TYPE_MISMATCH 1922
+#define RPC_S_NOT_ALL_OBJS_EXPORTED 1923
+#define RPC_S_INTERFACE_NOT_EXPORTED 1924
+#define RPC_S_PROFILE_NOT_ADDED 1925
+#define RPC_S_PRF_ELT_NOT_ADDED 1926
+#define RPC_S_PRF_ELT_NOT_REMOVED 1927
+#define RPC_S_GRP_ELT_NOT_ADDED 1928
+#define RPC_S_GRP_ELT_NOT_REMOVED 1929
+#endif // !defined(_WIN32) && !_defined(__CYGWIN__)
+
+
typedef struct {
BYTE VersionMajor;
BYTE VersionMinor;
diff --git a/shared_globals.c b/shared_globals.c
index adba698..0487791 100644
--- a/shared_globals.c
+++ b/shared_globals.c
@@ -14,6 +14,10 @@ int_fast8_t DisconnectImmediately = FALSE;
const char *const cIPv4 = "IPv4";
const char *const cIPv6 = "IPv6";
+#ifdef IS_LIBRARY
+char ErrorMessage[MESSAGE_BUFFER_SIZE];
+#endif // IS_LIBRARY
+
#ifndef USE_MSRPC
int_fast8_t UseMultiplexedRpc = TRUE;
int_fast8_t UseRpcNDR64 = TRUE;
diff --git a/shared_globals.h b/shared_globals.h
index 2a1dd73..808b2e1 100644
--- a/shared_globals.h
+++ b/shared_globals.h
@@ -74,9 +74,9 @@ extern const char *const Version;
#define UINT_MAX 4294967295
#endif
+#define MESSAGE_BUFFER_SIZE 4096
#ifdef IS_LIBRARY
-#define MESSAGE_BUFFER_SIZE 256
-EXTERNC __declspec(EXTERNAL) extern char ErrorMessage[MESSAGE_BUFFER_SIZE];
+extern char ErrorMessage[MESSAGE_BUFFER_SIZE];
#endif // IS_LIBRARY
extern int global_argc, multi_argc;
diff --git a/types.h b/types.h
index b3db448..ce948bc 100644
--- a/types.h
+++ b/types.h
@@ -301,6 +301,4 @@ typedef struct {
} CLDATA, *const PCLDATA;
-
-
#endif // __types_h
diff --git a/vlmcs.1 b/vlmcs.1
index b42e44a..7ef8f93 100644
--- a/vlmcs.1
+++ b/vlmcs.1
@@ -75,11 +75,11 @@ to specify applications that are not listed with \fB-x\fR. The
.B -l
option is used as a shortcut for the most common applications.
+.IP "\fB-K\fR \fIprotocol-version\fR"
+Force a specific version of the KMS protocol. Valid versions are 4.0, 5.0 and 6.0. The default is to select a suitable version according to the \fIapplication\fR selected. You may use \fB-K\fR to send an incorrect protocol version to the KMS server and see how it behaves. Genuine KMS servers return HRESULT 0x8007000D if the KMS protocol is not 4.0, 5.0 or 6.0. Emulators should do the same. When sending a request with an incorrect protocol number, vlmcs ignores the minor protocol number (e.g. sends a v4 request for version 4.1). If the major version number is less then 4, it sends a v4 request. If the major version is greater then 6, is sends a v6 request. In any case the \fIprotocol-version\fR as specified by \fB-K\fR is put in the version fields of the request.
+
.IP "\fB-4\fR, \fB-5\fR and \fB-6"
-Force version 4, 5 or 6 of the KMS protocol. The default is to select a suitable
-version according to the
-.IR "application"
-selected. Plese note that some products (e.g. Office 2013) may use different protocols with different versions of Windows.
+Force version 4, 5 or 6 of the KMS protocol. These options are actually shortcuts of \fB-K 4.0\fR, \fB-K 5.0\fR and \fB-K 6.0\fR.
.IP "\fB-m"
Let the client pretend to be a virtual machine. Early versions of Microsoft's
diff --git a/vlmcs.1.dos.txt b/vlmcs.1.dos.txt
index 49d84eb..dcd26b6 100644
--- a/vlmcs.1.dos.txt
+++ b/vlmcs.1.dos.txt
@@ -80,31 +80,44 @@ OPTIONS
as a shortcut for the most common applications.
+ -K protocol-version
+ Force a specific version of the KMS protocol. Valid versions are
+ 4.0, 5.0 and 6.0. The default is to select a suitable version
+ according to the application selected. You may use -K to send an
+ incorrect protocol version to the KMS server and see how it
+ behaves. Genuine KMS servers return HRESULT 0x8007000D if the
+ KMS protocol is not 4.0, 5.0 or 6.0. Emulators should do the
+ same. When sending a request with an incorrect protocol number,
+ vlmcs ignores the minor protocol number (e.g. sends a v4 request
+ for version 4.1). If the major version number is less then 4, it
+ sends a v4 request. If the major version is greater then 6, is
+ sends a v6 request. In any case the protocol-version as speci‐
+ fied by -K is put in the version fields of the request.
+
+
-4, -5 and -6
- Force version 4, 5 or 6 of the KMS protocol. The default is to
- select a suitable version according to the application selected.
- Plese note that some products (e.g. Office 2013) may use differ‐
- ent protocols with different versions of Windows.
+ Force version 4, 5 or 6 of the KMS protocol. These options are
+ actually shortcuts of -K 4.0, -K 5.0 and -K 6.0.
- -m Let the client pretend to be a virtual machine. Early versions
- of Microsoft's KMS server did not increase the client count if
- the request came from a virtual machine. Newer versions ignore
+ -m Let the client pretend to be a virtual machine. Early versions
+ of Microsoft's KMS server did not increase the client count if
+ the request came from a virtual machine. Newer versions ignore
this flag.
-d Use NetBIOS names instead of DNS names. By default vlmcsd gener‐
- ates some random DNS names for each request. If you prefer Net‐
- BIOS names, you may use -d. A real Microsoft activation client
- uses DNS names or NetBIOS depending on the client name configu‐
+ ates some random DNS names for each request. If you prefer Net‐
+ BIOS names, you may use -d. A real Microsoft activation client
+ uses DNS names or NetBIOS depending on the client name configu‐
ration. KMS servers treat the workstation name as a comment that
- affects logging only. Clients will be identified by a GUID that
- can be specified using -c. -d has no effect if you also specify
+ affects logging only. Clients will be identified by a GUID that
+ can be specified using -c. -d has no effect if you also specify
-w.
-a application-guid
- Send requests with a specific application-guid. There are cur‐
+ Send requests with a specific application-guid. There are cur‐
rently only three known valid application-guids:
@@ -113,91 +126,91 @@ OPTIONS
0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013)
- A Microsoft KMS server uses these GUIDs to have seperate coun‐
- ters for the already activated clients. A client that does not
- contact the KMS server within 30 days will be deleted from the
+ A Microsoft KMS server uses these GUIDs to have seperate coun‐
+ ters for the already activated clients. A client that does not
+ contact the KMS server within 30 days will be deleted from the
database. Emulated KMS servers are always fully charged.
-k kms-guid
- Send requests with a specific kms-guid. A Microsoft KMS server
- uses these GUIDs as a product id to decide whether to grant
- activation or not. A list of current kms-guids can be found in
- kms.c (table KmsIdList). Emulated KMS servers grant activation
+ Send requests with a specific kms-guid. A Microsoft KMS server
+ uses these GUIDs as a product id to decide whether to grant
+ activation or not. A list of current kms-guids can be found in
+ kms.c (table KmsIdList). Emulated KMS servers grant activation
unconditionally and do not check the kms-guid.
-s activation-guid
- The activation-guid defines the actual product, e.g. "Windows
- 8.1 Professional WMC KMSCLIENT edition". A activation-guid maps
- 1:1 to a product key. However, neither a Microsoft KMS server
+ The activation-guid defines the actual product, e.g. "Windows
+ 8.1 Professional WMC KMSCLIENT edition". A activation-guid maps
+ 1:1 to a product key. However, neither a Microsoft KMS server
nor emulated servers check this id. The activation-guid is use‐
- ful in logging to get a specific product description like "Win‐
- dows 8.1 Professional WMC". A list of current activation-guids
+ ful in logging to get a specific product description like "Win‐
+ dows 8.1 Professional WMC". A list of current activation-guids
can be found in kms.c (table ExtendedProductList).
-n requests
- Send requests requests to the server. The default is to send at
+ Send requests requests to the server. The default is to send at
least one request and enough subsequent requests that the server
- is fully charged afterwards for the application-guid you
+ is fully charged afterwards for the application-guid you
selected (explicitly with -a or implicitly by using -l).
- -T Causes to use a new TCP connection for each request if multiple
- requests are sent with vlmcsd. This is useful when you want to
- test an emulated KMS server whether it suffers from memory
- leaks. To test for memory leaks use -n with a large number of
- requests (> 100000) and then test twice (with and without -T).
- This option may become neccessary for future versions of Micro‐
- soft's KMS server because multiple requests with different
- clients-guids for the same kms-id-guid are impossible in a real
+ -T Causes to use a new TCP connection for each request if multiple
+ requests are sent with vlmcsd. This is useful when you want to
+ test an emulated KMS server whether it suffers from memory
+ leaks. To test for memory leaks use -n with a large number of
+ requests (> 100000) and then test twice (with and without -T).
+ This option may become neccessary for future versions of Micro‐
+ soft's KMS server because multiple requests with different
+ clients-guids for the same kms-id-guid are impossible in a real
KMS szenario over the same TCP connection.
-c client-machine-guid
- Normally vlmcs generates a random client-machine-guid for each
- request. By using this option you can specify a fixed client-
- machine-guid This causes a Microsoft KMS not to increment its
- client count because it receives multiple requests for the same
- client. Thus do not use -c if you want to charge a real KMS
+ Normally vlmcs generates a random client-machine-guid for each
+ request. By using this option you can specify a fixed client-
+ machine-guid This causes a Microsoft KMS not to increment its
+ client count because it receives multiple requests for the same
+ client. Thus do not use -c if you want to charge a real KMS
server.
-o previous-client-machine-guid
If the client-machine-guid changes for some reason, the real KMS
- client stores a previous-client-machine-guid which is sent to
- the KMS server. This happens rarely and usually
- 00000000-0000-0000-0000-000000000000 is used. You can use -o to
+ client stores a previous-client-machine-guid which is sent to
+ the KMS server. This happens rarely and usually
+ 00000000-0000-0000-0000-000000000000 is used. You can use -o to
specify a different previous-client-machine-guid.
-G filename
- Grabs ePIDs and HWIDs from a KMS server and writes the informa‐
- tion to filename in format suitable to be used as a configura‐
+ Grabs ePIDs and HWIDs from a KMS server and writes the informa‐
+ tion to filename in format suitable to be used as a configura‐
tion file (aka ini file) for vlmcsd(8). This is especially use‐
- ful if you have access to a genuine KMS server and want to use
+ ful if you have access to a genuine KMS server and want to use
the same data with vlmcsd(8).
- If filename does not exist, it will be created. If you specify
- an existing filename, it will be updated to use the information
- received from the remote KMS server and a backup filename~ will
+ If filename does not exist, it will be created. If you specify
+ an existing filename, it will be updated to use the information
+ received from the remote KMS server and a backup filename~ will
be created.
-G cannot be used with -l, -4, -5, -6, -a, -s, -k, -r and -n
-w workstation-name
- Send requests with a specific workstation-name. This disables
- the random generator for the workstation name. Since it is a
+ Send requests with a specific workstation-name. This disables
+ the random generator for the workstation name. Since it is a
comment only, this option does not have much effect.
-r required-client-count
- Also known as the "N count policy". Tells the KMS server that
- successful activation requires required-client-count clients.
- The default is the required-client-count that the product would
- need if the request was a real activation. A Microsoft KMS
+ Also known as the "N count policy". Tells the KMS server that
+ successful activation requires required-client-count clients.
+ The default is the required-client-count that the product would
+ need if the request was a real activation. A Microsoft KMS
server counts clients up to the double amount what was specified
with -r. This option can be used to "overcharge" a Microsoft KMS
server.
@@ -205,57 +218,57 @@ OPTIONS
-t status
Reports a specific license status to the KMS server. status is a
- number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB
- grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification,
+ number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB
+ grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification,
6=extended grace. Refer to TechNet ⟨http://
technet.microsoft.com/en-us/library/ff686879.aspx#_Toc257201371⟩
- for more information. A Microsoft KMS server collects this
+ for more information. A Microsoft KMS server collects this
information for statistics only.
-g binding-expiration
- This tells the KMS server how long a client will stay in its
- current license status. This can be the remaining OOB time (the
- grace peroid that is granted between installation of a product
- and when activation is actuall required) or the remaining time
- when KMS activation must be renewed. binding-expiration is
+ This tells the KMS server how long a client will stay in its
+ current license status. This can be the remaining OOB time (the
+ grace peroid that is granted between installation of a product
+ and when activation is actuall required) or the remaining time
+ when KMS activation must be renewed. binding-expiration is
specified in minutes. A Microsoft KMS server apparantly does not
use this information.
-i protocol-version
- Force the use of Internet protocol protocol-version. Allowed
- values are 4 (IPv4) and 6 (IPv6). This option is useful only if
- you specfiy a hostname and not an ip-address on the command
+ Force the use of Internet protocol protocol-version. Allowed
+ values are 4 (IPv4) and 6 (IPv6). This option is useful only if
+ you specfiy a hostname and not an ip-address on the command
line.
- -p Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request.
+ -p Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request.
This can be used to test if the KMS server uses the same setting
- of this flag in the RPC bind respone. Some KMS emulators don't
+ of this flag in the RPC bind respone. Some KMS emulators don't
set this correctly.
-N0 and -N1
Disables (-N0) or enables (-N1) the NDR64 transfer syntax in the
- RPC protocol. Disable NDR64 only in case of problems. If NDR64
+ RPC protocol. Disable NDR64 only in case of problems. If NDR64
is not used, vlmcs cannot detect many RPC protocol errors in KMS
emulators. If you want to test whether a KMS emulator fully sup‐
- ports NDR64, you must use the -n option to send at least two
- requests. This is because Microsoft's client always sends the
- first request using NDR32 syntax and subsequent requests using
+ ports NDR64, you must use the -n option to send at least two
+ requests. This is because Microsoft's client always sends the
+ first request using NDR32 syntax and subsequent requests using
NDR64 syntax.
-B0 and -B1
- Disables (-B0) or enables (-B1) bind time feature negotiation
- (BTFN) in the RPC protocol. Disable BTFN only in case of prob‐
+ Disables (-B0) or enables (-B1) bind time feature negotiation
+ (BTFN) in the RPC protocol. Disable BTFN only in case of prob‐
lems. If BTFN is not used, vlmcs cannot detect many RPC protocol
errors in KMS emulators.
- Options that do not require an argument can be specified together with
- a single dash, e.g. vlmcs -6mvT. If you specify an option more than
+ Options that do not require an argument can be specified together with
+ a single dash, e.g. vlmcs -6mvT. If you specify an option more than
once, the last occurence will be in effect.
@@ -265,34 +278,34 @@ FILES
EXAMPLES
vlmcs kms.example.com
- Request activation for Windows Vista using v4 protocol from
- kms.example.com. Repeat activation requests until server is
+ Request activation for Windows Vista using v4 protocol from
+ kms.example.com. Repeat activation requests until server is
charged for all Windows products.
vlmcs -
- Request activation for Windows Vista using v4 protocol from a
+ Request activation for Windows Vista using v4 protocol from a
KMS server that is published via DNS for the current domain.
vlmcs .example.com
- Request activation for Windows Vista using v4 protocol from a
+ Request activation for Windows Vista using v4 protocol from a
KMS server that is published via DNS for domain example.com.
vlmcs -6 -l Office2013 -v -n 1
- Request exactly one activation for Office2013 using v6 protocol
+ Request exactly one activation for Office2013 using v6 protocol
from localhost. Display verbose results.
vlmcs kms.bigcompany.com -G /etc/vlmcsd.ini
- Get ePIDs and HWIDs from kms.bigcompany.com and create/update
+ Get ePIDs and HWIDs from kms.bigcompany.com and create/update
/etc/vlmcsd.ini accordingly.
BUGS
- Some platforms (e.g. Solaris) may have a man(7) system that does not
- handle URLs. URLs may be omitted in the documentation on those plat‐
+ Some platforms (e.g. Solaris) may have a man(7) system that does not
+ handle URLs. URLs may be omitted in the documentation on those plat‐
forms. Cygwin, Linux, FreeBSD and Mac OS X are known to work correctly.
@@ -301,7 +314,7 @@ AUTHOR
CREDITS
- Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐
+ Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐
ferati87, qad, Ratiborus, vityan666, ...
diff --git a/vlmcs.1.html b/vlmcs.1.html
index 2d3ec65..0196526 100644
--- a/vlmcs.1.html
+++ b/vlmcs.1.html
@@ -1,5 +1,5 @@
-
+
@@ -183,14 +183,30 @@ applications is not complete. You may supply GUIDs with
that are not listed with -x. The -l option is
used as a shortcut for the most common applications.
+-K
+protocol-version
+
+Force a specific version of the
+KMS protocol. Valid versions are 4.0, 5.0 and 6.0. The
+default is to select a suitable version according to the
+application selected. You may use -K to send
+an incorrect protocol version to the KMS server and see how
+it behaves. Genuine KMS servers return HRESULT 0x8007000D if
+the KMS protocol is not 4.0, 5.0 or 6.0. Emulators should do
+the same. When sending a request with an incorrect protocol
+number, vlmcs ignores the minor protocol number (e.g. sends
+a v4 request for version 4.1). If the major version number
+is less then 4, it sends a v4 request. If the major version
+is greater then 6, is sends a v6 request. In any case the
+protocol-version as specified by -K is put in
+the version fields of the request.
+
-4, -5 and
-6
Force version 4, 5 or 6 of the
-KMS protocol. The default is to select a suitable version
-according to the application selected. Plese note
-that some products (e.g. Office 2013) may use different
-protocols with different versions of Windows.
+KMS protocol. These options are actually shortcuts of -K
+4.0, -K 5.0 and -K 6.0.
diff --git a/vlmcs.1.pdf b/vlmcs.1.pdf
index 97e3ba0..dc0b8e6 100644
Binary files a/vlmcs.1.pdf and b/vlmcs.1.pdf differ
diff --git a/vlmcs.1.unix.txt b/vlmcs.1.unix.txt
index d6a6438..c4db060 100644
--- a/vlmcs.1.unix.txt
+++ b/vlmcs.1.unix.txt
@@ -80,31 +80,44 @@ OPTIONS
as a shortcut for the most common applications.
+ -K protocol-version
+ Force a specific version of the KMS protocol. Valid versions are
+ 4.0, 5.0 and 6.0. The default is to select a suitable version
+ according to the application selected. You may use -K to send an
+ incorrect protocol version to the KMS server and see how it
+ behaves. Genuine KMS servers return HRESULT 0x8007000D if the
+ KMS protocol is not 4.0, 5.0 or 6.0. Emulators should do the
+ same. When sending a request with an incorrect protocol number,
+ vlmcs ignores the minor protocol number (e.g. sends a v4 request
+ for version 4.1). If the major version number is less then 4, it
+ sends a v4 request. If the major version is greater then 6, is
+ sends a v6 request. In any case the protocol-version as speci‐
+ fied by -K is put in the version fields of the request.
+
+
-4, -5 and -6
- Force version 4, 5 or 6 of the KMS protocol. The default is to
- select a suitable version according to the application selected.
- Plese note that some products (e.g. Office 2013) may use differ‐
- ent protocols with different versions of Windows.
+ Force version 4, 5 or 6 of the KMS protocol. These options are
+ actually shortcuts of -K 4.0, -K 5.0 and -K 6.0.
- -m Let the client pretend to be a virtual machine. Early versions
- of Microsoft's KMS server did not increase the client count if
- the request came from a virtual machine. Newer versions ignore
+ -m Let the client pretend to be a virtual machine. Early versions
+ of Microsoft's KMS server did not increase the client count if
+ the request came from a virtual machine. Newer versions ignore
this flag.
-d Use NetBIOS names instead of DNS names. By default vlmcsd gener‐
- ates some random DNS names for each request. If you prefer Net‐
- BIOS names, you may use -d. A real Microsoft activation client
- uses DNS names or NetBIOS depending on the client name configu‐
+ ates some random DNS names for each request. If you prefer Net‐
+ BIOS names, you may use -d. A real Microsoft activation client
+ uses DNS names or NetBIOS depending on the client name configu‐
ration. KMS servers treat the workstation name as a comment that
- affects logging only. Clients will be identified by a GUID that
- can be specified using -c. -d has no effect if you also specify
+ affects logging only. Clients will be identified by a GUID that
+ can be specified using -c. -d has no effect if you also specify
-w.
-a application-guid
- Send requests with a specific application-guid. There are cur‐
+ Send requests with a specific application-guid. There are cur‐
rently only three known valid application-guids:
@@ -113,91 +126,91 @@ OPTIONS
0ff1ce15-a989-479d-af46-f275c6370663 (Office 2013)
- A Microsoft KMS server uses these GUIDs to have seperate coun‐
- ters for the already activated clients. A client that does not
- contact the KMS server within 30 days will be deleted from the
+ A Microsoft KMS server uses these GUIDs to have seperate coun‐
+ ters for the already activated clients. A client that does not
+ contact the KMS server within 30 days will be deleted from the
database. Emulated KMS servers are always fully charged.
-k kms-guid
- Send requests with a specific kms-guid. A Microsoft KMS server
- uses these GUIDs as a product id to decide whether to grant
- activation or not. A list of current kms-guids can be found in
- kms.c (table KmsIdList). Emulated KMS servers grant activation
+ Send requests with a specific kms-guid. A Microsoft KMS server
+ uses these GUIDs as a product id to decide whether to grant
+ activation or not. A list of current kms-guids can be found in
+ kms.c (table KmsIdList). Emulated KMS servers grant activation
unconditionally and do not check the kms-guid.
-s activation-guid
- The activation-guid defines the actual product, e.g. "Windows
- 8.1 Professional WMC KMSCLIENT edition". A activation-guid maps
- 1:1 to a product key. However, neither a Microsoft KMS server
+ The activation-guid defines the actual product, e.g. "Windows
+ 8.1 Professional WMC KMSCLIENT edition". A activation-guid maps
+ 1:1 to a product key. However, neither a Microsoft KMS server
nor emulated servers check this id. The activation-guid is use‐
- ful in logging to get a specific product description like "Win‐
- dows 8.1 Professional WMC". A list of current activation-guids
+ ful in logging to get a specific product description like "Win‐
+ dows 8.1 Professional WMC". A list of current activation-guids
can be found in kms.c (table ExtendedProductList).
-n requests
- Send requests requests to the server. The default is to send at
+ Send requests requests to the server. The default is to send at
least one request and enough subsequent requests that the server
- is fully charged afterwards for the application-guid you
+ is fully charged afterwards for the application-guid you
selected (explicitly with -a or implicitly by using -l).
- -T Causes to use a new TCP connection for each request if multiple
- requests are sent with vlmcsd. This is useful when you want to
- test an emulated KMS server whether it suffers from memory
- leaks. To test for memory leaks use -n with a large number of
- requests (> 100000) and then test twice (with and without -T).
- This option may become neccessary for future versions of Micro‐
- soft's KMS server because multiple requests with different
- clients-guids for the same kms-id-guid are impossible in a real
+ -T Causes to use a new TCP connection for each request if multiple
+ requests are sent with vlmcsd. This is useful when you want to
+ test an emulated KMS server whether it suffers from memory
+ leaks. To test for memory leaks use -n with a large number of
+ requests (> 100000) and then test twice (with and without -T).
+ This option may become neccessary for future versions of Micro‐
+ soft's KMS server because multiple requests with different
+ clients-guids for the same kms-id-guid are impossible in a real
KMS szenario over the same TCP connection.
-c client-machine-guid
- Normally vlmcs generates a random client-machine-guid for each
- request. By using this option you can specify a fixed client-
- machine-guid This causes a Microsoft KMS not to increment its
- client count because it receives multiple requests for the same
- client. Thus do not use -c if you want to charge a real KMS
+ Normally vlmcs generates a random client-machine-guid for each
+ request. By using this option you can specify a fixed client-
+ machine-guid This causes a Microsoft KMS not to increment its
+ client count because it receives multiple requests for the same
+ client. Thus do not use -c if you want to charge a real KMS
server.
-o previous-client-machine-guid
If the client-machine-guid changes for some reason, the real KMS
- client stores a previous-client-machine-guid which is sent to
- the KMS server. This happens rarely and usually
- 00000000-0000-0000-0000-000000000000 is used. You can use -o to
+ client stores a previous-client-machine-guid which is sent to
+ the KMS server. This happens rarely and usually
+ 00000000-0000-0000-0000-000000000000 is used. You can use -o to
specify a different previous-client-machine-guid.
-G filename
- Grabs ePIDs and HWIDs from a KMS server and writes the informa‐
- tion to filename in format suitable to be used as a configura‐
+ Grabs ePIDs and HWIDs from a KMS server and writes the informa‐
+ tion to filename in format suitable to be used as a configura‐
tion file (aka ini file) for vlmcsd(8). This is especially use‐
- ful if you have access to a genuine KMS server and want to use
+ ful if you have access to a genuine KMS server and want to use
the same data with vlmcsd(8).
- If filename does not exist, it will be created. If you specify
- an existing filename, it will be updated to use the information
- received from the remote KMS server and a backup filename~ will
+ If filename does not exist, it will be created. If you specify
+ an existing filename, it will be updated to use the information
+ received from the remote KMS server and a backup filename~ will
be created.
-G cannot be used with -l, -4, -5, -6, -a, -s, -k, -r and -n
-w workstation-name
- Send requests with a specific workstation-name. This disables
- the random generator for the workstation name. Since it is a
+ Send requests with a specific workstation-name. This disables
+ the random generator for the workstation name. Since it is a
comment only, this option does not have much effect.
-r required-client-count
- Also known as the "N count policy". Tells the KMS server that
- successful activation requires required-client-count clients.
- The default is the required-client-count that the product would
- need if the request was a real activation. A Microsoft KMS
+ Also known as the "N count policy". Tells the KMS server that
+ successful activation requires required-client-count clients.
+ The default is the required-client-count that the product would
+ need if the request was a real activation. A Microsoft KMS
server counts clients up to the double amount what was specified
with -r. This option can be used to "overcharge" a Microsoft KMS
server.
@@ -205,57 +218,57 @@ OPTIONS
-t status
Reports a specific license status to the KMS server. status is a
- number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB
- grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification,
+ number that can be from 0 to 6. 0=unlicensed, 1=licensed, 2=OOB
+ grace, 3=OOT grace, 4=Non-genuinue grace, 5=notification,
6=extended grace. Refer to TechNet ⟨http://
technet.microsoft.com/en-us/library/ff686879.aspx#_Toc257201371⟩
- for more information. A Microsoft KMS server collects this
+ for more information. A Microsoft KMS server collects this
information for statistics only.
-g binding-expiration
- This tells the KMS server how long a client will stay in its
- current license status. This can be the remaining OOB time (the
- grace peroid that is granted between installation of a product
- and when activation is actuall required) or the remaining time
- when KMS activation must be renewed. binding-expiration is
+ This tells the KMS server how long a client will stay in its
+ current license status. This can be the remaining OOB time (the
+ grace peroid that is granted between installation of a product
+ and when activation is actuall required) or the remaining time
+ when KMS activation must be renewed. binding-expiration is
specified in minutes. A Microsoft KMS server apparantly does not
use this information.
-i protocol-version
- Force the use of Internet protocol protocol-version. Allowed
- values are 4 (IPv4) and 6 (IPv6). This option is useful only if
- you specfiy a hostname and not an ip-address on the command
+ Force the use of Internet protocol protocol-version. Allowed
+ values are 4 (IPv4) and 6 (IPv6). This option is useful only if
+ you specfiy a hostname and not an ip-address on the command
line.
- -p Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request.
+ -p Do not set the RPC_PF_MULTIPLEX flag in the RPC bind request.
This can be used to test if the KMS server uses the same setting
- of this flag in the RPC bind respone. Some KMS emulators don't
+ of this flag in the RPC bind respone. Some KMS emulators don't
set this correctly.
-N0 and -N1
Disables (-N0) or enables (-N1) the NDR64 transfer syntax in the
- RPC protocol. Disable NDR64 only in case of problems. If NDR64
+ RPC protocol. Disable NDR64 only in case of problems. If NDR64
is not used, vlmcs cannot detect many RPC protocol errors in KMS
emulators. If you want to test whether a KMS emulator fully sup‐
- ports NDR64, you must use the -n option to send at least two
- requests. This is because Microsoft's client always sends the
- first request using NDR32 syntax and subsequent requests using
+ ports NDR64, you must use the -n option to send at least two
+ requests. This is because Microsoft's client always sends the
+ first request using NDR32 syntax and subsequent requests using
NDR64 syntax.
-B0 and -B1
- Disables (-B0) or enables (-B1) bind time feature negotiation
- (BTFN) in the RPC protocol. Disable BTFN only in case of prob‐
+ Disables (-B0) or enables (-B1) bind time feature negotiation
+ (BTFN) in the RPC protocol. Disable BTFN only in case of prob‐
lems. If BTFN is not used, vlmcs cannot detect many RPC protocol
errors in KMS emulators.
- Options that do not require an argument can be specified together with
- a single dash, e.g. vlmcs -6mvT. If you specify an option more than
+ Options that do not require an argument can be specified together with
+ a single dash, e.g. vlmcs -6mvT. If you specify an option more than
once, the last occurence will be in effect.
@@ -265,34 +278,34 @@ FILES
EXAMPLES
vlmcs kms.example.com
- Request activation for Windows Vista using v4 protocol from
- kms.example.com. Repeat activation requests until server is
+ Request activation for Windows Vista using v4 protocol from
+ kms.example.com. Repeat activation requests until server is
charged for all Windows products.
vlmcs -
- Request activation for Windows Vista using v4 protocol from a
+ Request activation for Windows Vista using v4 protocol from a
KMS server that is published via DNS for the current domain.
vlmcs .example.com
- Request activation for Windows Vista using v4 protocol from a
+ Request activation for Windows Vista using v4 protocol from a
KMS server that is published via DNS for domain example.com.
vlmcs -6 -l Office2013 -v -n 1
- Request exactly one activation for Office2013 using v6 protocol
+ Request exactly one activation for Office2013 using v6 protocol
from localhost. Display verbose results.
vlmcs kms.bigcompany.com -G /etc/vlmcsd.ini
- Get ePIDs and HWIDs from kms.bigcompany.com and create/update
+ Get ePIDs and HWIDs from kms.bigcompany.com and create/update
/etc/vlmcsd.ini accordingly.
BUGS
- Some platforms (e.g. Solaris) may have a man(7) system that does not
- handle URLs. URLs may be omitted in the documentation on those plat‐
+ Some platforms (e.g. Solaris) may have a man(7) system that does not
+ handle URLs. URLs may be omitted in the documentation on those plat‐
forms. Cygwin, Linux, FreeBSD and Mac OS X are known to work correctly.
@@ -301,7 +314,7 @@ AUTHOR
CREDITS
- Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐
+ Thanks to CODYQX4, crony12, deagles, DougQaid, eIcn, mikmik38, nos‐
ferati87, qad, Ratiborus, vityan666, ...
diff --git a/vlmcs.c b/vlmcs.c
index ddb77bd..74d8ef1 100644
--- a/vlmcs.c
+++ b/vlmcs.c
@@ -39,7 +39,9 @@
#define VLMCS_OPTION_GRAB_INI 1
#define VLMCS_OPTION_NO_GRAB_INI 2
-#define kmsVersionMinor 0 // Currently constant. May change in future KMS versions
+//#define kmsVersionMinor 0 // Currently constant. May change in future KMS versions
+
+#ifndef IS_LIBRARY
// Function Prototypes
static void CreateRequestBase(REQUEST *Request);
@@ -53,7 +55,7 @@ static int_fast8_t verbose = FALSE;
static int_fast8_t VMInfo = FALSE;
static int_fast8_t dnsnames = TRUE;
static int FixedRequests = 0;
-static BYTE LicenseStatus = 0x02;
+static DWORD LicenseStatus = 0x02;
static const char *CMID = NULL;
static const char *CMID_prev = NULL;
static const char *WorkstationName = NULL;
@@ -63,6 +65,7 @@ static int_fast8_t ReconnectForEachRequest = FALSE;
static int AddressFamily = AF_UNSPEC;
static int_fast8_t incompatibleOptions = 0;
static const char* fn_ini_client = NULL;
+static int_fast16_t kmsVersionMinor = 0;
#ifndef NO_DNS
static int_fast8_t NoSrvRecordPriority = FALSE;
@@ -185,6 +188,7 @@ __noreturn static void clientUsage(const char* const programName)
" -k Use custom KMS GUID\n"
" -c Use custom Client GUID. Default: Use random\n"
" -o Use custom Prevoius Client GUID. Default: ZeroGUID\n"
+ " -K Use a specific (possibly invalid) protocol version\n"
" -w Use custom workstation name. Default: Use random\n"
" -r Fake required clients\n"
" -n Fixed # of requests (Default: Enough to charge)\n"
@@ -358,6 +362,35 @@ __noreturn static void examples(const char* const programName)
exit(0);
}
+static void parseProtocolVersion(void)
+{
+ char *endptr_major, *endptr_minor, *period = strchr(optarg, (int)'.');
+
+ if (!period)
+ {
+ errorout("Fatal: Protocol version must be in the format #.#\n");
+ exit(!0);
+ }
+
+ long major = strtol(optarg, &endptr_major, 10);
+ long minor = strtol(period + 1, &endptr_minor, 10);
+
+ if ((*endptr_major && *endptr_major != '.') || *endptr_minor || *optarg == '.' || !period[1])
+ {
+ errorout("Fatal: Protocol version must be in the format #.#\n");
+ exit(!0);
+ }
+
+ if (major < 0 || major > 0xffff || minor < 0 || minor > 0xffff)
+ {
+ errorout("Fatal: Major and minor protocol version number must be between 0 and 65535\n");
+ exit(!0);
+ }
+
+ ActiveLicensePack.kmsVersionMajor = (int)major;
+ kmsVersionMinor = (int_fast16_t)minor;
+}
+
#else // NO_HELP
@@ -426,7 +459,7 @@ static BOOL findLicensePackByName(const char* const name, LicensePack* const lp)
#endif // Both Lists are available
}
-static const char* const client_optstring = "+N:B:i:l:a:s:k:c:w:r:n:t:g:G:o:pPTv456mexdV";
+static const char* const client_optstring = "+N:B:i:l:a:s:k:c:w:r:n:t:g:G:o:K:pPTv456mexdV";
//First pass. We handle only "-l". Since -a -k -s -4 -5 and -6 are exceptions to -l, we process -l first
@@ -536,7 +569,7 @@ static void parseCommandLinePass2(const char *const programName, const int argc,
case 'r': // Fake minimum required client count
incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI;
- ActiveLicensePack.N_Policy = getOptionArgumentInt(o, 1, INT_MAX);
+ ActiveLicensePack.N_Policy = getOptionArgumentInt(o, 0, INT_MAX);
break;
case 'c': // use a specific client GUID
@@ -583,6 +616,12 @@ static void parseCommandLinePass2(const char *const programName, const int argc,
incompatibleOptions |= VLMCS_OPTION_NO_GRAB_INI;
ActiveLicensePack.kmsVersionMajor = o - 0x30;
+ kmsVersionMinor = 0;
+ break;
+
+ case 'K': // Use specific protocol (may be invalid)
+
+ parseProtocolVersion();
break;
case 'd': // Don't use DNS names
@@ -610,14 +649,15 @@ static void parseCommandLinePass2(const char *const programName, const int argc,
if (strlen(WorkstationName) > 63)
{
- errorout("\007WARNING! Truncating Workstation name to 63 characters (%s).\n", WorkstationName);
+ errorout("\007WARNING! Truncating workstation name to 63 characters (%s).\n", WorkstationName);
}
break;
case 't':
- LicenseStatus = getOptionArgumentInt(o, 0, 6) & 0xff;
+ LicenseStatus = getOptionArgumentInt(o, 0, 0x7fffffff);
+ if ((unsigned int)LicenseStatus > 6) errorout("Warning: Correct license status is 0 <= license status <= 6.\n");
break;
# ifndef USE_MSRPC
@@ -697,7 +737,7 @@ static void displayResponse(const RESPONSE_RESULT result, const REQUEST* request
if (!result.TimeStampOK) errorout("\n\007ERROR: Time stamps of request and response do not match.\n");
if (!result.VersionOK) errorout("\n\007ERROR: Protocol versions of request and response do not match.\n");
if (!result.HmacSha256OK) errorout("\n\007ERROR: Keyed-Hash Message Authentication Code (HMAC) is incorrect.\n");
- if (!result.IVnotSuspicious) errorout("\nWARNING: Response uses an IV following KMSv5 rules in KMSv6 protocol.\n");
+ if (!result.IVnotSuspicious) errorout("\nWARNING: The KMS server is an emulator because the response uses an IV following KMSv5 rules in KMSv6 protocol.\n");
if (result.effectiveResponseSize != result.correctResponseSize)
{
@@ -852,8 +892,9 @@ static void connectRpc(RpcCtx *s)
# endif // DNS
}
+#endif // IS_LIBRARY
-static int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQUEST *baseRequest, RESPONSE_RESULT *result, BYTE *const hwid)
+int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQUEST *baseRequest, RESPONSE_RESULT *result, BYTE *const hwid)
{
size_t requestSize, responseSize;
BYTE *request, *response;
@@ -861,7 +902,7 @@ static int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQU
result->mask = 0;
- if (LE16(baseRequest->MajorVer) == 4)
+ if (LE16(baseRequest->MajorVer) < 5)
request = CreateRequestV4(&requestSize, baseRequest);
else
request = CreateRequestV6(&requestSize, baseRequest);
@@ -889,6 +930,7 @@ static int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQU
return status;
}
+#ifndef IS_LIBRARY
static int sendRequest(RpcCtx *const s, REQUEST *const request, RESPONSE *const response, hwid_t hwid, RESPONSE_RESULT *const result)
{
@@ -1212,7 +1254,7 @@ int client_main(const int argc, CARGV argv)
int requests;
RpcCtx s = INVALID_RPCCTX;
- for (requests = 0, RequestsToGo = ActiveLicensePack.N_Policy - 1; RequestsToGo; requests++)
+ for (requests = 0, RequestsToGo = ActiveLicensePack.N_Policy == 1 ? 1 : ActiveLicensePack.N_Policy - 1; RequestsToGo; requests++)
{
RESPONSE response;
REQUEST request;
@@ -1346,4 +1388,4 @@ static void CreateRequestBase(REQUEST *Request)
# endif // NO_VERBOSE_LOG
}
-
+#endif // IS_LIBRARY
diff --git a/vlmcs.h b/vlmcs.h
index 47386d0..cca368b 100644
--- a/vlmcs.h
+++ b/vlmcs.h
@@ -10,6 +10,12 @@
#include
#endif // defined(USE_MSRPC) && defined(_WIN32)
#include "types.h"
+#ifndef USE_MSRPC
+#include "rpc.h"
+#else // USE_MSRPC
+#include "msrpc-client.h"
+#endif // USE_MSRPC
+#include "kms.h"
#if MULTI_CALL_BINARY < 1
#define client_main main
@@ -17,5 +23,7 @@
int client_main(int argc, CARGV argv);
#endif
+int SendActivationRequest(const RpcCtx sock, RESPONSE *baseResponse, REQUEST *baseRequest, RESPONSE_RESULT *result, BYTE *const hwid);
+
#endif /* VLMCS_H_ */
diff --git a/vlmcsd-floppy.7.html b/vlmcsd-floppy.7.html
index a9b2c2f..def268c 100644
--- a/vlmcsd-floppy.7.html
+++ b/vlmcsd-floppy.7.html
@@ -1,5 +1,5 @@
-
+
diff --git a/vlmcsd-floppy.7.pdf b/vlmcsd-floppy.7.pdf
index e58b548..c7f8218 100644
Binary files a/vlmcsd-floppy.7.pdf and b/vlmcsd-floppy.7.pdf differ
diff --git a/vlmcsd.7.html b/vlmcsd.7.html
index 5b02d30..39c86a0 100644
--- a/vlmcsd.7.html
+++ b/vlmcsd.7.html
@@ -1,5 +1,5 @@
-
+
diff --git a/vlmcsd.7.pdf b/vlmcsd.7.pdf
index 35c98a8..82a8082 100644
Binary files a/vlmcsd.7.pdf and b/vlmcsd.7.pdf differ
diff --git a/vlmcsd.8 b/vlmcsd.8
index 9a0d07f..b09b6c6 100644
--- a/vlmcsd.8
+++ b/vlmcsd.8
@@ -50,6 +50,8 @@ Using \fB-o1\fR does not protect you if you enable NAT port forwarding on your r
\fB-o2\fR does not affect the interfaces, vlmcsd is listening on. When a clients connects, vlmcsd immediately drops the connection if the client has a public IP address. Unlike \fB-o1\fR clients will be able to establish a TCP connection but it will be closed without a single byte sent over the connection. This protects against clients with public IP addresses even if NAT port forwarding is used. While \fB-o2\fR offers a higher level of protection than \fB-o1\fR, the client sees that the KMS TCP port (1688 by default) is actually accepting connections.
+If vlmcsd is compiled to use MS RPC, \fB-o2\fR can only offer very poor protection. Control is passed from MS RPC to vlmcsd after the KMS protocol has already been negotiated. Thus a client can always verify that the KMS protocol is available even though it receives an RPC_S_ACCESS_DENIED error message. vlmcsd will issue a warning if \fB-o2\fR is used with MS RPC. \fBFor adaequate protection do not use a MS RPC build of vlmcsd with -o2\fR.
+
\fB-o3\fR combines \fB-o1\fR and \fB-o2\fR. vlmcsd listens on private interfaces only and if a public client manages to connect anyway due to NAT port forwarding, it will be immediately dropped.
If you use any form of TCP level port forwarding (e.g. \fBnc\fR(1), \fBnetcat\fR(1), \fBssh\fR(1) port forwarding or similar) to redirect KMS requests to vlmcsd, there will be no protection even if you use \fB-o2\fR or \fB-o3\fR. This is due to the simple fact that vlmcsd sees the IP address of the redirector and not the IP address of the client.
@@ -245,7 +247,7 @@ Signaling is not available in the native Windows version and in the Cygwin versi
\fBvlmcsd\fR compiles and runs on Linux, Windows (no Cygwin required but explicitly supported), Mac OS X, FreeBSD, NetBSD, OpenBSD, Dragonfly BSD, Minix, Solaris, OpenIndiana, Android and iOS. Other POSIX or unixoid OSses may work with unmodified sources or may require minor porting efforts.
.SH SUPPORTED PRODUCTS
-\fBvlmcsd\fR can answer activation requests for the following products: Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Office 2010, Project 2010, Visio 2010, Office 2013, Project 2013, Visio 2013, Office 2016, Project 2016, Visio 2016.
+\fBvlmcsd\fR can answer activation requests for the following products: Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 (up to 1607), Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Office 2010, Project 2010, Visio 2010, Office 2013, Project 2013, Visio 2013, Office 2016, Project 2016, Visio 2016. Newer version may work as long as the KMS protocol does not change. A complete list of fully supported products can be obtained using the \fB-x\fR option of \fBvlmcs\fR(1).
.PP
Office, Project and Visio must be volume license versions.
@@ -268,7 +270,10 @@ Installs \fBvlmcsd\fR as a Windows service with low privileges and logs everythi
.SH BUGS
An ePID specified in an ini file must not contain spaces.
-The maximum number of \fB-L\fR options in the command line or listen statements in the inifile is the platform default for \fIFD_SETSIZE\fR. This is 64 on Windows and 1024 on most Unixes.
+.SH INTENTIONAL BUGS
+vlmcsd activates non-VL (retail) and beta/preview versions of Windows.
+.br
+vlmcsd always reports enough active clients to satisfy the N count policy of the request.
.SH AUTHOR
Written by crony12, Hotbird64 and vityan666.
diff --git a/vlmcsd.8.dos.txt b/vlmcsd.8.dos.txt
index 750eaa5..4dbe889 100644
--- a/vlmcsd.8.dos.txt
+++ b/vlmcsd.8.dos.txt
@@ -117,6 +117,14 @@ OPTIONS
the client sees that the KMS TCP port (1688 by default) is actu‐
ally accepting connections.
+ If vlmcsd is compiled to use MS RPC, -o2 can only offer very
+ poor protection. Control is passed from MS RPC to vlmcsd after
+ the KMS protocol has already been negotiated. Thus a client can
+ always verify that the KMS protocol is available even though it
+ receives an RPC_S_ACCESS_DENIED error message. vlmcsd will issue
+ a warning if -o2 is used with MS RPC. For adaequate protection
+ do not use a MS RPC build of vlmcsd with -o2.
+
-o3 combines -o1 and -o2. vlmcsd listens on private interfaces
only and if a public client manages to connect anyway due to NAT
port forwarding, it will be immediately dropped.
@@ -533,10 +541,13 @@ SUPPORTED OPERATING SYSTEMS
SUPPORTED PRODUCTS
vlmcsd can answer activation requests for the following products: Win‐
- dows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10, Windows
- Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows
- Server 2012 R2, Office 2010, Project 2010, Visio 2010, Office 2013,
- Project 2013, Visio 2013, Office 2016, Project 2016, Visio 2016.
+ dows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 (up to 1607),
+ Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Win‐
+ dows Server 2012 R2, Windows Server 2016, Office 2010, Project 2010,
+ Visio 2010, Office 2013, Project 2013, Visio 2013, Office 2016, Project
+ 2016, Visio 2016. Newer version may work as long as the KMS protocol
+ does not change. A complete list of fully supported products can be
+ obtained using the -x option of vlmcs(1).
Office, Project and Visio must be volume license versions.
@@ -547,24 +558,24 @@ FILES
EXAMPLES
vlmcsd -De
- Starts vlmcsd in foreground. Useful if you use it for the first
- time and want to see what's happening when a client requests
+ Starts vlmcsd in foreground. Useful if you use it for the first
+ time and want to see what's happening when a client requests
activation.
vlmcsd -l /var/log/vlmcsd.log
- Starts vlmcsd as a daemon and logs everything to /var/log/vlm‐
+ Starts vlmcsd as a daemon and logs everything to /var/log/vlm‐
csd.log.
vlmcsd -L 192.168.1.17
Starts vlmcsd as a daemon and listens on IP address 192.168.1.17
- only. This is useful for routers that have a public and a pri‐
+ only. This is useful for routers that have a public and a pri‐
vate IP address to prevent your KMS server from becoming public.
vlmcsd -s -U /n -l C:\logs\vlmcsd.log
- Installs vlmcsd as a Windows service with low privileges and
+ Installs vlmcsd as a Windows service with low privileges and
logs everything to C:\logs\vlmcsd.log when the service is
started with "net start vlmcsd".
@@ -572,9 +583,11 @@ EXAMPLES
BUGS
An ePID specified in an ini file must not contain spaces.
- The maximum number of -L options in the command line or listen state‐
- ments in the inifile is the platform default for FD_SETSIZE. This is 64
- on Windows and 1024 on most Unixes.
+
+INTENTIONAL BUGS
+ vlmcsd activates non-VL (retail) and beta/preview versions of Windows.
+ vlmcsd always reports enough active clients to satisfy the N count pol‐
+ icy of the request.
AUTHOR
diff --git a/vlmcsd.8.html b/vlmcsd.8.html
index 1af97ce..c755eeb 100644
--- a/vlmcsd.8.html
+++ b/vlmcsd.8.html
@@ -1,5 +1,5 @@
-
+
@@ -30,6 +30,7 @@
FILES
EXAMPLES
BUGS
+INTENTIONAL BUGS
AUTHOR
CREDITS
SEE ALSO
@@ -204,6 +205,16 @@ addresses even if NAT port forwarding is used. While
-o1, the client sees that the KMS TCP port (1688 by
default) is actually accepting connections.
+If vlmcsd is
+compiled to use MS RPC, -o2 can only offer very poor
+protection. Control is passed from MS RPC to vlmcsd after
+the KMS protocol has already been negotiated. Thus a client
+can always verify that the KMS protocol is available even
+though it receives an RPC_S_ACCESS_DENIED error message.
+vlmcsd will issue a warning if -o2 is used with MS
+RPC. For adaequate protection do not use a MS RPC build
+of vlmcsd with -o2.
+
-o3
combines -o1 and -o2. vlmcsd listens on
private interfaces only and if a public client manages to
@@ -840,11 +851,15 @@ sources or may require minor porting efforts.
vlmcsd
can answer activation requests for the following products:
-Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows
-10, Windows Server 2008, Windows Server 2008 R2, Windows
-Server 2012, Windows Server 2012 R2, Office 2010, Project
-2010, Visio 2010, Office 2013, Project 2013, Visio 2013,
-Office 2016, Project 2016, Visio 2016.
+Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10
+(up to 1607), Windows Server 2008, Windows Server 2008 R2,
+Windows Server 2012, Windows Server 2012 R2, Windows Server
+2016, Office 2010, Project 2010, Visio 2010, Office 2013,
+Project 2013, Visio 2013, Office 2016, Project 2016, Visio
+2016. Newer version may work as long as the KMS protocol
+does not change. A complete list of fully supported products
+can be obtained using the -x option of
+vlmcs(1).
Office, Project
and Visio must be volume license versions.
@@ -900,11 +915,16 @@ C:\logs\vlmcsd.log when the service is started with
An ePID
specified in an ini file must not contain spaces.
-The maximum
-number of -L options in the command line or listen
-statements in the inifile is the platform default for
-FD_SETSIZE. This is 64 on Windows and 1024 on most
-Unixes.
+INTENTIONAL BUGS
+
+
+
+
+vlmcsd
+activates non-VL (retail) and beta/preview versions of
+Windows.
+vlmcsd always reports enough active clients to satisfy the N
+count policy of the request.
AUTHOR
diff --git a/vlmcsd.8.pdf b/vlmcsd.8.pdf
index 331f511..0f9a0e9 100644
Binary files a/vlmcsd.8.pdf and b/vlmcsd.8.pdf differ
diff --git a/vlmcsd.8.unix.txt b/vlmcsd.8.unix.txt
index 832237e..d0557f1 100644
--- a/vlmcsd.8.unix.txt
+++ b/vlmcsd.8.unix.txt
@@ -117,6 +117,14 @@ OPTIONS
the client sees that the KMS TCP port (1688 by default) is actu‐
ally accepting connections.
+ If vlmcsd is compiled to use MS RPC, -o2 can only offer very
+ poor protection. Control is passed from MS RPC to vlmcsd after
+ the KMS protocol has already been negotiated. Thus a client can
+ always verify that the KMS protocol is available even though it
+ receives an RPC_S_ACCESS_DENIED error message. vlmcsd will issue
+ a warning if -o2 is used with MS RPC. For adaequate protection
+ do not use a MS RPC build of vlmcsd with -o2.
+
-o3 combines -o1 and -o2. vlmcsd listens on private interfaces
only and if a public client manages to connect anyway due to NAT
port forwarding, it will be immediately dropped.
@@ -533,10 +541,13 @@ SUPPORTED OPERATING SYSTEMS
SUPPORTED PRODUCTS
vlmcsd can answer activation requests for the following products: Win‐
- dows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10, Windows
- Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows
- Server 2012 R2, Office 2010, Project 2010, Visio 2010, Office 2013,
- Project 2013, Visio 2013, Office 2016, Project 2016, Visio 2016.
+ dows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 (up to 1607),
+ Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Win‐
+ dows Server 2012 R2, Windows Server 2016, Office 2010, Project 2010,
+ Visio 2010, Office 2013, Project 2013, Visio 2013, Office 2016, Project
+ 2016, Visio 2016. Newer version may work as long as the KMS protocol
+ does not change. A complete list of fully supported products can be
+ obtained using the -x option of vlmcs(1).
Office, Project and Visio must be volume license versions.
@@ -547,24 +558,24 @@ FILES
EXAMPLES
vlmcsd -De
- Starts vlmcsd in foreground. Useful if you use it for the first
- time and want to see what's happening when a client requests
+ Starts vlmcsd in foreground. Useful if you use it for the first
+ time and want to see what's happening when a client requests
activation.
vlmcsd -l /var/log/vlmcsd.log
- Starts vlmcsd as a daemon and logs everything to /var/log/vlm‐
+ Starts vlmcsd as a daemon and logs everything to /var/log/vlm‐
csd.log.
vlmcsd -L 192.168.1.17
Starts vlmcsd as a daemon and listens on IP address 192.168.1.17
- only. This is useful for routers that have a public and a pri‐
+ only. This is useful for routers that have a public and a pri‐
vate IP address to prevent your KMS server from becoming public.
vlmcsd -s -U /n -l C:\logs\vlmcsd.log
- Installs vlmcsd as a Windows service with low privileges and
+ Installs vlmcsd as a Windows service with low privileges and
logs everything to C:\logs\vlmcsd.log when the service is
started with "net start vlmcsd".
@@ -572,9 +583,11 @@ EXAMPLES
BUGS
An ePID specified in an ini file must not contain spaces.
- The maximum number of -L options in the command line or listen state‐
- ments in the inifile is the platform default for FD_SETSIZE. This is 64
- on Windows and 1024 on most Unixes.
+
+INTENTIONAL BUGS
+ vlmcsd activates non-VL (retail) and beta/preview versions of Windows.
+ vlmcsd always reports enough active clients to satisfy the N count pol‐
+ icy of the request.
AUTHOR
diff --git a/vlmcsd.c b/vlmcsd.c
index 4b54310..fd243b6 100644
--- a/vlmcsd.c
+++ b/vlmcsd.c
@@ -279,7 +279,11 @@ static __noreturn void usage()
#if HAVE_GETIFADDR
" -o 0|1|2|3\t\tset protection level against clients with public IP addresses (default 0)\n"
#else // !HAVE_GETIFADDR
+ #ifndef USE_MSRPC
" -o 0|2\t\tset protection level against clients with public IP addresses (default 0)\n"
+ #else // USE_MSRPC
+ " -o 0|2\t\tset protection level against clients with public IP addresses (default 0). Limited use with MS RPC\n"
+ #endif // USE_MSRPC
#endif // !HAVE_GETIFADDR
#endif // !defined(NO_PRIVATE_IP_DETECT)
#ifndef NO_SOCKETS
@@ -1678,7 +1682,14 @@ int newmain()
}
#endif // NO_INI_FILE
- #if !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ && !defined(USE_MSRPC)
+ #if defined(USE_MSRPC) && !defined(NO_PRIVATE_IP_DETECT)
+ if (PublicIPProtectionLevel)
+ {
+ printerrorf("Warning: Public IP address protection using MS RPC is poor. See vlmcsd.8\n");
+ }
+ #endif // defined(USE_MSRPC) && !defined(NO_PRIVATE_IP_DETECT)
+
+#if !defined(NO_LIMIT) && !defined(NO_SOCKETS) && !__minix__ && !defined(USE_MSRPC)
allocateSemaphore();
#endif // !defined(NO_LIMIT) && !defined(NO_SOCKETS) && __minix__
diff --git a/vlmcsd.ini.5.html b/vlmcsd.ini.5.html
index 30dd070..906319e 100644
--- a/vlmcsd.ini.5.html
+++ b/vlmcsd.ini.5.html
@@ -1,5 +1,5 @@
-
+
diff --git a/vlmcsd.ini.5.pdf b/vlmcsd.ini.5.pdf
index eb3a2d3..f0917fc 100644
Binary files a/vlmcsd.ini.5.pdf and b/vlmcsd.ini.5.pdf differ
diff --git a/vlmcsdmulti.1.html b/vlmcsdmulti.1.html
index d6d352f..c4337ec 100644
--- a/vlmcsdmulti.1.html
+++ b/vlmcsdmulti.1.html
@@ -1,5 +1,5 @@
-
+
diff --git a/vlmcsdmulti.1.pdf b/vlmcsdmulti.1.pdf
index d2dd677..656f4eb 100644
Binary files a/vlmcsdmulti.1.pdf and b/vlmcsdmulti.1.pdf differ