open-license-manager
2014-08-04 cd53d13fd12f8dd86514b2894e62ee6612566975
linux tests ok
6个文件已修改
149 ■■■■■ 已修改文件
.cproject 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.project 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/library/api/datatypes.h 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/library/pc-identifiers.c 101 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test/functional/CMakeLists.txt 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test/functional/volid_test.cpp 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.cproject
@@ -18,7 +18,11 @@
                    <folderInfo id="cdt.managedbuild.toolchain.gnu.base.1941555127.38772218" name="/" resourcePath="">
                        <toolChain errorParsers="" id="cdt.managedbuild.toolchain.gnu.base.1610910832" name="cdt.managedbuild.toolchain.gnu.base" nonInternalBuilderId="cdt.managedbuild.target.gnu.builder.base" superClass="cdt.managedbuild.toolchain.gnu.base">
                            <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF;org.eclipse.cdt.core.GNU_ELF" id="cdt.managedbuild.target.gnu.platform.base.333980180" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
                            <builder buildPath="${workspace_loc:/license-manager-cpp/build/linux}" enableAutoBuild="true" enabledIncrementalBuild="true" id="cdt.managedbuild.target.gnu.builder.base.834186429" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base"/>
                            <builder buildPath="${workspace_loc:/license-manager-cpp/build/linux}" enableAutoBuild="true" enabledIncrementalBuild="true" id="cdt.managedbuild.target.gnu.builder.base.834186429" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="cdt.managedbuild.target.gnu.builder.base">
                                <outputEntries>
                                    <entry excluding="src/**" flags="VALUE_WORKSPACE_PATH" kind="outputPath" name=""/>
                                </outputEntries>
                            </builder>
                            <tool id="cdt.managedbuild.tool.gnu.archiver.base.1063978701" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
                            <tool errorParsers="org.eclipse.cdt.core.GCCErrorParser" id="cdt.managedbuild.tool.gnu.cpp.compiler.base.1465609732" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base">
                                <option id="gnu.cpp.compiler.option.preprocessor.def.1664583179" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols">
@@ -69,6 +73,7 @@
    <storageModule moduleId="refreshScope" versionNumber="2">
        <configuration configurationName="Default">
            <resource resourceType="FOLDER" workspacePath="/license-manager-cpp/build/linux"/>
            <resource resourceType="FOLDER" workspacePath="/license-manager-cpp/build"/>
        </configuration>
    </storageModule>
    <storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings">
.project
@@ -6,13 +6,13 @@
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
            <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
            <triggers>full,incremental,</triggers>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
            <triggers>full,incremental,</triggers>
            <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
src/library/api/datatypes.h
@@ -61,8 +61,7 @@
typedef struct {
    const char *licenseFileLocation;
    const char *environmentVariableName;
    bool openFileNearModule;
    const char *environmentVariableName;bool openFileNearModule;
} LicenseLocation;
typedef struct {
@@ -77,9 +76,7 @@
     * can be '\0' if the software don't expire
     * */
    char expiry_date[11];
    unsigned int days_left;
    bool has_expiry;
    bool linked_to_pc;
    unsigned int days_left;bool has_expiry;bool linked_to_pc;
    LICENSE_TYPE license_type; // Local or Remote
    /* A string of character inserted into the license understood
     * by the calling application.
@@ -93,7 +90,13 @@
 * in most cases.
 */
typedef enum {
    DEFAULT, ETHERNET, IP_ADDRESS, DISK_NUM, PLATFORM_SPECIFIC, STRATEGY_UNKNOWN
    DEFAULT,
    ETHERNET,
    IP_ADDRESS,
    DISK_NUM,
    DISK_LABEL,
    PLATFORM_SPECIFIC,
    STRATEGY_UNKNOWN
} IDENTIFICATION_STRATEGY;
#ifdef __cplusplus
src/library/pc-identifiers.c
@@ -13,103 +13,55 @@
#include "base/base64.h"
#include <valgrind/memcheck.h>
FUNCTION_RETURN generate_ethernet_pc_id(PcIdentifier * identifiers,
        unsigned int * num_identifiers, bool use_mac);
static void encodeStrategy(PcIdentifier * identifier,
        IDENTIFICATION_STRATEGY strategy);
static FUNCTION_RETURN generate_platform_specific_pc_id(
        PcIdentifier * identifiers, unsigned int * num_identifiers);
static FUNCTION_RETURN generate_default_pc_id(PcIdentifier * identifiers,
        unsigned int * num_identifiers) {
    size_t adapter_num, disk_num, plat_spec_id;
    FUNCTION_RETURN result_adapterInfos, result_diskinfos, result_plat_spec;
    unsigned int required_id_size, current_identifier, i, j, k;
    size_t adapter_num, disk_num;
    FUNCTION_RETURN result_adapterInfos, result_diskinfos;
    unsigned int required_id_size, i, j, k;
    DiskInfo * diskInfos;
    AdapterInfo *adapterInfos;
    required_id_size = 0;
    //just calculate the number of required identifiers
    result_plat_spec = generate_platform_specific_pc_id(NULL, &plat_spec_id);
    if (result_plat_spec == OK) {
        required_id_size += 1;
    }
    result_adapterInfos = getAdapterInfos(NULL, &adapter_num);
    if (result_adapterInfos != OK) {
        //call generate_disk_pc_id;
        return result_adapterInfos;
    }
    result_diskinfos = getDiskInfos(NULL, &disk_num);
    if (result_diskinfos == OK && result_adapterInfos == OK) {
        required_id_size += disk_num * adapter_num;
    } else if (result_adapterInfos == OK) {
        required_id_size += adapter_num;
    } else if (result_diskinfos == OK) {
        required_id_size += disk_num;
    if (result_diskinfos == OK) {
        required_id_size = disk_num * adapter_num;
    } else {
        required_id_size = disk_num;
    }
    int defined_identifiers = *num_identifiers;
    if (identifiers == NULL) {
        *num_identifiers = required_id_size;
    if (identifiers == NULL) {
        return OK;
    } else if (required_id_size > defined_identifiers) {
        return BUFFER_TOO_SMALL;
    }
    //calculate the identifiers
    current_identifier = 0;
    if (result_plat_spec == OK) {
        generate_platform_specific_pc_id(identifiers, 1);
        current_identifier += 1;
    }
    if (result_diskinfos == OK && result_adapterInfos == OK) {
        diskInfos = (DiskInfo*) malloc(disk_num * sizeof(DiskInfo));
        result_diskinfos = getDiskInfos(diskInfos, &disk_num);
        adapterInfos = (AdapterInfo*) malloc(adapter_num * sizeof(AdapterInfo));
        result_adapterInfos = getAdapterInfos(adapterInfos, &adapter_num);
        for (i = 0; i < disk_num; i++) {
            for (j = 0; j < adapter_num; j++) {
                if (current_identifier > defined_identifiers) {
                    break;
                }
                for (k = 0; k < 6; k++) {
                    identifiers[current_identifier][k] = diskInfos[i].disk_sn[k
                            + 2] ^ adapterInfos[j].mac_address[k + 2];
                }
                encodeStrategy(&identifiers[current_identifier], DEFAULT);
                current_identifier++;
            for (k = 0; k < 6; k++)
                identifiers[i * adapter_num + j][k] =
                        diskInfos[i].disk_sn[k + 2]
                                ^ adapterInfos[j].mac_address[k + 2];
            }
        }
        free(diskInfos);
        free(adapterInfos);
    } else if (result_adapterInfos == OK) {
        i=defined_identifiers-current_identifier;
        return generate_ethernet_pc_id(&identifiers[current_identifier],
                &i, true);
    } else if (result_diskinfos == OK) {
        i=defined_identifiers-current_identifier;
        return generate_disk_pc_id(&identifiers[current_identifier],
                &i, false);
    }
    return OK;
}
static void encodeStrategy(PcIdentifier * identifier,
        IDENTIFICATION_STRATEGY strategy) {
    unsigned char strategy_num = strategy << 5;
    identifier[0][0] = (identifier[0][0] & 15)
                    ++     | strategy_num;
}
static FUNCTION_RETURN generate_platform_specific_pc_id(
           * identifiers, unsigned int * num_identifiers) {
}
static FUNCTION_RETURN generate_ethernet_pc_id(PcIdentifier * identifiers,
        unsigned int * num_identifiers, bool use_mac) {
    size_t adapters;
    FUNCTION_RETURN result_adapterInfos;
    unsigned int j, k;
    unsigned int i, j, k;
    AdapterInfo *adapterInfos;
    result_adapterInfos = getAdapterInfos(NULL, &adapters);
@@ -149,7 +101,7 @@
        unsigned int * num_identifiers, bool use_label) {
    size_t disk_num, available_disk_info = 0;
    FUNCTION_RETURN result_diskinfos;
    unsigned int i, j;
    unsigned int i, k, j;
    char firstChar;
    DiskInfo * diskInfos;
@@ -184,14 +136,12 @@
        if (use_label) {
            if (diskInfos[i].label[0] != 0) {
                memset(identifiers[j], 0, sizeof(PcIdentifier)); //!!!!!!!
                strncpy(identifiers[j], diskInfos[i].label,
                        sizeof(PcIdentifier));
                strncpy(identifiers[j],diskInfos[i].label,sizeof(PcIdentifier));
                j++;
            }
        } else {
            if (diskInfos[i].disk_sn[0] != 0) {
                memcpy(identifiers[j], &diskInfos[i].disk_sn[2],
                        sizeof(PcIdentifier));
                memcpy(identifiers[j],&diskInfos[i].disk_sn[2],sizeof(PcIdentifier));
                j++;
            }
        }
@@ -234,14 +184,19 @@
    case DISK_NUM:
        result = generate_disk_pc_id(identifiers, array_size, false);
        break;
    case PLATFORM_SPECIFIC:
        result = generate_platform_specific_pc_id(identifiers, array_size);
    case DISK_LABEL:
        result = generate_disk_pc_id(identifiers, array_size, true);
        break;
    default:
        return ERROR;
    }
    if (result == OK && identifiers != NULL) {
        strategy_num = strategy << 5;
        for (i = 0; i < *array_size; i++) {
            //encode strategy in the first three bits of the pc_identifier
            identifiers[i][0] = (identifiers[i][0] & 15) | strategy_num;
        }
        //fill array if larger
        for (i = *array_size; i < original_array_size; i++) {
            identifiers[i][0] = STRATEGY_UNKNOWN << 5;
test/functional/CMakeLists.txt
@@ -45,16 +45,3 @@
ADD_TEST(date_test ${EXECUTABLE_OUTPUT_PATH}/date_test)
ADD_TEST(volid_test ${EXECUTABLE_OUTPUT_PATH}/volid_test)
add_executable(
 stackoverflow
 stackoverflow.cpp
)
target_link_libraries(
    stackoverflow
    license_generator_lib
)
SET_TARGET_PROPERTIES(stackoverflow PROPERTIES LINK_SEARCH_START_STATIC ON)
test/functional/volid_test.cpp
@@ -59,8 +59,7 @@
 { IDENTIFICATION_STRATEGY::DEFAULT,
 IDENTIFICATION_STRATEGY::DISK_LABEL,
 IDENTIFICATION_STRATEGY::DISK_NUM,
 IDENTIFICATION_STRATEGY::ETHERNET
 };
                    IDENTIFICATION_STRATEGY::ETHERNET };
 const int num_strategies = sizeof(strategies) / sizeof(strategies[0]);
 std::ifstream test_idfile_exist(idfileLocation);
 if (!test_idfile_exist.good()) {
@@ -89,7 +88,8 @@
 for (int j = 0; j < 100; j++) {
 for (unsigned int i = 0; i < reference_signatures.size(); i++) {
 PcSignature pcsig;
 strncpy(pcsig, reference_signatures[i].c_str(), sizeof(PcSignature));
            strncpy(pcsig, reference_signatures[i].c_str(),
                    sizeof(PcSignature));
 EVENT_TYPE val_result = validate_pc_signature(pcsig);
 string message = string("pc signature verification strategy:")
 + to_string(i) + " generated: [" + generated_identifier
@@ -99,5 +99,4 @@
 }
 }
 }