diff --git a/.travis.yml b/.travis.yml index 64a3c403..e79ce8b8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -46,10 +46,12 @@ compiler: addons: chrome: stable +matrix: + include: + - name: "Check style" + script: ./ci/checksrc.sh env: - matrix: - - B=style - ADDRESS_SIZE=64 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=OFF B=configure - ADDRESS_SIZE=64 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=OFF ENABLE_ZLIB_COMPRESSION=OFF B=cmake - ADDRESS_SIZE=64 CRYPTO_BACKEND=OpenSSL BUILD_SHARED_LIBS=ON ENABLE_ZLIB_COMPRESSION=OFF B=cmake @@ -100,12 +102,6 @@ before_install: install: script: - - | - if [ "$B" = "style" ]; then - ./buildconf - ./configure - make checksrc - fi - | if [ "$B" = "configure" ]; then autoreconf -fi diff --git a/CMakeLists.txt b/CMakeLists.txt index ae559428..e6c95c88 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -98,6 +98,14 @@ if(BUILD_TESTING) add_subdirectory(tests) endif() +option(LINT "Check style while building" OFF) +if(LINT) + add_custom_target(lint ALL + ./ci/checksrc.sh + WORKING_DIRECTORY ${libssh2_SOURCE_DIR}) + add_dependencies(libssh2 lint) +endif() + add_subdirectory(docs) feature_summary(WHAT ALL) diff --git a/src/checksrc.pl b/ci/checksrc.pl similarity index 100% rename from src/checksrc.pl rename to ci/checksrc.pl diff --git a/ci/checksrc.sh b/ci/checksrc.sh new file mode 100755 index 00000000..3890815b --- /dev/null +++ b/ci/checksrc.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -e + +FILES="src/*.[ch] include/*.h example/*.c tests/*.[ch]" +WHITELIST="-Wsrc/libssh2_config.h" + +perl ./ci/checksrc.pl -i4 -m79 -ASIZEOFNOPAREN -ASNPRINTF -ACOPYRIGHT -AFOPENMODE $WHITELIST $FILES diff --git a/docs/INSTALL_CMAKE.md b/docs/INSTALL_CMAKE.md index 9ad9f8d2..c136fdce 100644 --- a/docs/INSTALL_CMAKE.md +++ b/docs/INSTALL_CMAKE.md @@ -42,6 +42,11 @@ pass the options to CMake on the command line: The following options are available: + * `LINT=ON` + + Enables running the source code linter when building. Can be `ON` or `OFF`. + + * `BUILD_SHARED_LIBS=OFF` Determines whether libssh2 is built as a static library or as a diff --git a/tests/openssh_fixture.c b/tests/openssh_fixture.c index 248a561d..f9d26e37 100644 --- a/tests/openssh_fixture.c +++ b/tests/openssh_fixture.c @@ -118,9 +118,9 @@ static int run_command_varg(char **output, const char *command, va_list args) if(output) { /* command output may contain a trailing newline, so we trim * whitespace here */ - size_t end = strlen(buf) - 1; - while(end > 0 && isspace(buf[end])) { - buf[end] = '\0'; + size_t end = strlen(buf); + while(end > 0 && isspace(buf[end - 1])) { + buf[end - 1] = '\0'; } *output = strdup(buf); @@ -140,7 +140,7 @@ static int run_command(char **output, const char *command, ...) return ret; } -static int build_openssh_server_docker_image() +static int build_openssh_server_docker_image(void) { return run_command(NULL, "docker build -t libssh2/openssh_server " "openssh_server"); @@ -157,7 +157,7 @@ static int stop_openssh_server(char *container_id) return run_command(NULL, "docker stop %s", container_id); } -static const char *docker_machine_name() +static const char *docker_machine_name(void) { return getenv("DOCKER_MACHINE_NAME"); } diff --git a/tests/test_agent_forward_succeeds.c b/tests/test_agent_forward_succeeds.c index a3117395..daf7bd5a 100644 --- a/tests/test_agent_forward_succeeds.c +++ b/tests/test_agent_forward_succeeds.c @@ -43,7 +43,7 @@ int test(LIBSSH2_SESSION *session) rc = libssh2_channel_request_auth_agent(channel); if(rc != 0) { fprintf(stderr, "Auth agent request for agent forwarding failed, " - "error code %d\n", rc); + "error code %d\n", rc); return 1; } diff --git a/tests/test_hostkey_hash.c b/tests/test_hostkey_hash.c index 620d6370..112b491f 100644 --- a/tests/test_hostkey_hash.c +++ b/tests/test_hostkey_hash.c @@ -84,8 +84,9 @@ int test(LIBSSH2_SESSION *session) calculate_digest(md5_hash, MD5_HASH_SIZE, buf, BUFSIZ); if(strcmp(buf, EXPECTED_ECDSA_MD5_HASH_DIGEST) != 0) { - fprintf(stderr, "ECDSA MD5 hash not as expected, digest " - "%s != %s\n", buf, EXPECTED_ECDSA_MD5_HASH_DIGEST); + fprintf(stderr, + "ECDSA MD5 hash not as expected - digest %s != %s\n", + buf, EXPECTED_ECDSA_MD5_HASH_DIGEST); return 1; } @@ -99,8 +100,9 @@ int test(LIBSSH2_SESSION *session) calculate_digest(sha1_hash, SHA1_HASH_SIZE, buf, BUFSIZ); if(strcmp(buf, EXPECTED_ECDSA_SHA1_HASH_DIGEST) != 0) { - fprintf(stderr, "ECDSA SHA1 hash not as expected, digest " - "%s != %s\n", buf, EXPECTED_ECDSA_SHA1_HASH_DIGEST); + fprintf(stderr, + "ECDSA SHA1 hash not as expected - digest %s != %s\n", + buf, EXPECTED_ECDSA_SHA1_HASH_DIGEST); return 1; } @@ -115,8 +117,9 @@ int test(LIBSSH2_SESSION *session) calculate_digest(sha256_hash, SHA256_HASH_SIZE, buf, BUFSIZ); if(strcmp(buf, EXPECTED_ECDSA_SHA256_HASH_DIGEST) != 0) { - fprintf(stderr, "ECDSA SHA256 hash not as expected, digest " - "%s != %s\n", buf, EXPECTED_ECDSA_SHA256_HASH_DIGEST); + fprintf(stderr, + "ECDSA SHA256 hash not as expected - digest %s != %s\n", + buf, EXPECTED_ECDSA_SHA256_HASH_DIGEST); return 1; } @@ -133,8 +136,9 @@ int test(LIBSSH2_SESSION *session) calculate_digest(md5_hash, MD5_HASH_SIZE, buf, BUFSIZ); if(strcmp(buf, EXPECTED_RSA_MD5_HASH_DIGEST) != 0) { - fprintf(stderr, "MD5 hash not as expected, digest " - "%s != %s\n", buf, EXPECTED_RSA_MD5_HASH_DIGEST); + fprintf(stderr, + "MD5 hash not as expected - digest %s != %s\n", + buf, EXPECTED_RSA_MD5_HASH_DIGEST); return 1; } @@ -148,8 +152,9 @@ int test(LIBSSH2_SESSION *session) calculate_digest(sha1_hash, SHA1_HASH_SIZE, buf, BUFSIZ); if(strcmp(buf, EXPECTED_RSA_SHA1_HASH_DIGEST) != 0) { - fprintf(stderr, "SHA1 hash not as expected, digest " - "%s != %s\n", buf, EXPECTED_RSA_SHA1_HASH_DIGEST); + fprintf(stderr, + "SHA1 hash not as expected - digest %s != %s\n", + buf, EXPECTED_RSA_SHA1_HASH_DIGEST); return 1; } @@ -164,8 +169,9 @@ int test(LIBSSH2_SESSION *session) calculate_digest(sha256_hash, SHA256_HASH_SIZE, buf, BUFSIZ); if(strcmp(buf, EXPECTED_RSA_SHA256_HASH_DIGEST) != 0) { - fprintf(stderr, "SHA256 hash not as expected, digest " - "%s != %s\n", buf, EXPECTED_RSA_SHA256_HASH_DIGEST); + fprintf(stderr, + "SHA256 hash not as expected - digest %s != %s\n", + buf, EXPECTED_RSA_SHA256_HASH_DIGEST); return 1; } } diff --git a/tests/test_keyboard_interactive_auth_succeeds_with_correct_response.c b/tests/test_keyboard_interactive_auth_succeeds_with_correct_response.c index e9902449..0ccf5dd9 100644 --- a/tests/test_keyboard_interactive_auth_succeeds_with_correct_response.c +++ b/tests/test_keyboard_interactive_auth_succeeds_with_correct_response.c @@ -4,8 +4,9 @@ #include -static const char *USERNAME = "libssh2"; /* set in Dockerfile */ -static const char *PASSWORD = "my test password"; /* set in Dockerfile */ +/* configured in Dockerfile */ +static const char *USERNAME = "libssh2"; +static const char *PASSWORD = "my test password"; static void kbd_callback(const char *name, int name_len, const char *instruct, int instruct_len, diff --git a/tests/test_password_auth_fails_with_wrong_username.c b/tests/test_password_auth_fails_with_wrong_username.c index f6e7a068..b78617a4 100644 --- a/tests/test_password_auth_fails_with_wrong_username.c +++ b/tests/test_password_auth_fails_with_wrong_username.c @@ -4,7 +4,8 @@ #include -static const char *PASSWORD = "my test password"; /* set in Dockerfile */ +/* configured in Dockerfile */ +static const char *PASSWORD = "my test password"; static const char *WRONG_USERNAME = "i dont exist"; int test(LIBSSH2_SESSION *session) diff --git a/tests/test_password_auth_succeeds_with_correct_credentials.c b/tests/test_password_auth_succeeds_with_correct_credentials.c index a26e5220..94b86b87 100644 --- a/tests/test_password_auth_succeeds_with_correct_credentials.c +++ b/tests/test_password_auth_succeeds_with_correct_credentials.c @@ -4,8 +4,9 @@ #include -static const char *USERNAME = "libssh2"; /* set in Dockerfile */ -static const char *PASSWORD = "my test password"; /* set in Dockerfile */ +/* configured in Dockerfile */ +static const char *USERNAME = "libssh2"; +static const char *PASSWORD = "my test password"; int test(LIBSSH2_SESSION *session) { diff --git a/tests/test_public_key_auth_succeeds_with_correct_dsa_key.c b/tests/test_public_key_auth_succeeds_with_correct_dsa_key.c index cbaefc13..187c1313 100644 --- a/tests/test_public_key_auth_succeeds_with_correct_dsa_key.c +++ b/tests/test_public_key_auth_succeeds_with_correct_dsa_key.c @@ -4,9 +4,10 @@ #include -static const char *USERNAME = "libssh2"; /* set in Dockerfile */ +/* configured in Dockerfile */ +static const char *USERNAME = "libssh2"; static const char *KEY_FILE_PRIVATE = "key_dsa"; -static const char *KEY_FILE_PUBLIC = "key_dsa.pub"; /* set in Dockerfile */ +static const char *KEY_FILE_PUBLIC = "key_dsa.pub"; int test(LIBSSH2_SESSION *session) { diff --git a/tests/test_public_key_auth_succeeds_with_correct_ed25519_key.c b/tests/test_public_key_auth_succeeds_with_correct_ed25519_key.c index 8acb073f..c52830d9 100644 --- a/tests/test_public_key_auth_succeeds_with_correct_ed25519_key.c +++ b/tests/test_public_key_auth_succeeds_with_correct_ed25519_key.c @@ -4,9 +4,10 @@ #include -static const char *USERNAME = "libssh2"; /* set in Dockerfile */ +/* configured in Dockerfile */ +static const char *USERNAME = "libssh2"; static const char *KEY_FILE_PRIVATE = "key_ed25519"; -static const char *KEY_FILE_PUBLIC = "key_ed25519.pub"; /* set in Dockerfile */ +static const char *KEY_FILE_PUBLIC = "key_ed25519.pub"; int test(LIBSSH2_SESSION *session) { diff --git a/tests/test_public_key_auth_succeeds_with_correct_ed25519_key_from_mem.c b/tests/test_public_key_auth_succeeds_with_correct_ed25519_key_from_mem.c index a0b25a04..4ecf168f 100644 --- a/tests/test_public_key_auth_succeeds_with_correct_ed25519_key_from_mem.c +++ b/tests/test_public_key_auth_succeeds_with_correct_ed25519_key_from_mem.c @@ -35,9 +35,11 @@ int test(LIBSSH2_SESSION *session) return 1; } - rc = libssh2_userauth_publickey_frommemory(session, USERNAME, - strlen(USERNAME), - NULL, 0, buffer, len, NULL); + rc = libssh2_userauth_publickey_frommemory(session, + USERNAME, strlen(USERNAME), + NULL, 0, + buffer, len, + NULL); free(buffer); diff --git a/tests/test_public_key_auth_succeeds_with_correct_encrypted_ed25519_key.c b/tests/test_public_key_auth_succeeds_with_correct_encrypted_ed25519_key.c index f3162236..553023a9 100644 --- a/tests/test_public_key_auth_succeeds_with_correct_encrypted_ed25519_key.c +++ b/tests/test_public_key_auth_succeeds_with_correct_encrypted_ed25519_key.c @@ -4,11 +4,11 @@ #include -static const char *USERNAME = "libssh2"; /* set in Dockerfile */ +/* configured in Dockerfile */ +static const char *USERNAME = "libssh2"; static const char *PASSWORD = "libssh2"; static const char *KEY_FILE_PRIVATE = "key_ed25519_encrypted"; static const char *KEY_FILE_PUBLIC = "key_ed25519_encrypted.pub"; - /* set in Dockerfile */ int test(LIBSSH2_SESSION *session) { diff --git a/tests/test_public_key_auth_succeeds_with_correct_encrypted_rsa_key.c b/tests/test_public_key_auth_succeeds_with_correct_encrypted_rsa_key.c index 80026ed2..ba98ac7c 100644 --- a/tests/test_public_key_auth_succeeds_with_correct_encrypted_rsa_key.c +++ b/tests/test_public_key_auth_succeeds_with_correct_encrypted_rsa_key.c @@ -4,11 +4,11 @@ #include -static const char *USERNAME = "libssh2"; /* set in Dockerfile */ +/* configured in Dockerfile */ +static const char *USERNAME = "libssh2"; static const char *PASSWORD = "libssh2"; static const char *KEY_FILE_PRIVATE = "key_rsa_encrypted"; static const char *KEY_FILE_PUBLIC = "key_rsa_encrypted.pub"; - /* set in Dockerfile */ int test(LIBSSH2_SESSION *session) { diff --git a/tests/test_public_key_auth_succeeds_with_correct_rsa_key.c b/tests/test_public_key_auth_succeeds_with_correct_rsa_key.c index 3806c26b..0cf2a633 100644 --- a/tests/test_public_key_auth_succeeds_with_correct_rsa_key.c +++ b/tests/test_public_key_auth_succeeds_with_correct_rsa_key.c @@ -4,9 +4,10 @@ #include -static const char *USERNAME = "libssh2"; /* set in Dockerfile */ +/* configured in Dockerfile */ +static const char *USERNAME = "libssh2"; static const char *KEY_FILE_PRIVATE = "key_rsa"; -static const char *KEY_FILE_PUBLIC = "key_rsa.pub"; /* set in Dockerfile */ +static const char *KEY_FILE_PUBLIC = "key_rsa.pub"; int test(LIBSSH2_SESSION *session) { diff --git a/tests/test_public_key_auth_succeeds_with_correct_rsa_openssh_key.c b/tests/test_public_key_auth_succeeds_with_correct_rsa_openssh_key.c index 5560ad00..a067d729 100644 --- a/tests/test_public_key_auth_succeeds_with_correct_rsa_openssh_key.c +++ b/tests/test_public_key_auth_succeeds_with_correct_rsa_openssh_key.c @@ -4,10 +4,10 @@ #include -static const char *USERNAME = "libssh2"; /* set in Dockerfile */ +/* configured in Dockerfile */ +static const char *USERNAME = "libssh2"; static const char *KEY_FILE_PRIVATE = "key_rsa_openssh"; static const char *KEY_FILE_PUBLIC = "key_rsa_openssh.pub"; - /* set in Dockerfile */ int test(LIBSSH2_SESSION *session) {