From 1a64007d7607dadd265666d612333e5bfd07ff0f Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Mon, 24 Sep 2018 21:24:37 +0200 Subject: [PATCH 01/23] network: Started port plugin --- src/plugins/network/README.md | 22 +++++++++++++++++----- src/plugins/network/network.c | 19 +++++++++++++++++++ src/plugins/network/network.h | 1 + 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/plugins/network/README.md b/src/plugins/network/README.md index 8162775ae25..66c5f8e29d1 100644 --- a/src/plugins/network/README.md +++ b/src/plugins/network/README.md @@ -5,7 +5,7 @@ - infos/needs = - infos/placements = presetstorage - infos/status = maintained unittest nodep libc nodoc -- infos/metadata = check/ipaddr +- infos/metadata = check/ipaddr check/port check/port/listen - infos/description = Checks keys if they contain a valid ip address ## Introduction @@ -14,6 +14,10 @@ This plugin is a check plugin that checks if a key contains a valid ip address. It uses the `POSIX.1-2001` interface `getaddrinfo()` in order to check if an ip address is valid. +Furthermore `getaddrinfo()` is used in `check/port` to resolve a port by its service name +which is defined under `/etc/services`. The portname is translated to the respective portnumber. +The plugin can be used to check for valid port numbers and if the set port is free to use. + ## Purpose While, in theory, a regular expression can express if a string is a @@ -36,7 +40,15 @@ it to implement this plugin. Every key tagged with the metakey `check/ipaddr` will be checked using `getaddrinfo()`. If additionally the values `ipv4` or `ipv6` -are supplied, the address family will be specified. If supplied only -numerical hosts are allowed. If left empty, the plugin will resolve -domain names and look if it is reachable (i.e. "localhost" should most -likely work on any system) +are supplied, the address family will be specified. + +If `check/port` is specified on a given key, the plugin will validate if the port is a +correct number between 1 and 65535. + +If `check/port/listen` is specified, the plugin will check if the application can be started +and listen on the given port. + +## Future Work + +`check/port/connect` to check if the port can be pinged/reached (usually for clients). +If not reachable, users receive a warning. A correct timeout setting will be problematic though. \ No newline at end of file diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index 474f592384d..293313ed447 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -50,6 +50,21 @@ int elektraNetworkAddrInfo (Key * toCheck) return 0; } +int elektraPortInfo(Key * toCheck) { + const Key * meta = keyGetMeta (toCheck, "check/port"); + if (!meta) return 0; /* No check to do */ + char *endptr = NULL; + long portNumber = strtol(keyString(meta), endptr, 10); + + //strtol returns 0 if the port was actually invalid + //since 0 is a valid port we need to check explicitly if + if (portNumber >= 0 && portNumber <= 65535 && *endptr == 0) { + return 0; + } + + return 0; +} + int elektraNetworkGet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * parentKey ELEKTRA_UNUSED) { /* configuration only */ @@ -92,6 +107,10 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * elektraFree (errmsg); return -1; } + int p = elektraPortInfo(cur); + if (p != 0) { + ELEKTRA_SET_ERROR(51, parentKey, "Port failed"); + } } return 1; /* success */ diff --git a/src/plugins/network/network.h b/src/plugins/network/network.h index 3877fb28ad4..afc5dd95f02 100644 --- a/src/plugins/network/network.h +++ b/src/plugins/network/network.h @@ -21,6 +21,7 @@ #include int elektraNetworkAddrInfo (Key * toCheck); +int elektraPortInfo(Key * toCheck); int elektraNetworkGet (Plugin * handle, KeySet * ks, Key * parentKey); int elektraNetworkSet (Plugin * handle, KeySet * ks, Key * parentKey); From f78a7d731c86643505f37f93cc5e6867fd194986 Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Tue, 25 Sep 2018 21:25:46 +0200 Subject: [PATCH 02/23] network: Implemented core port functionality --- doc/METADATA.ini | 7 +++++ src/error/specification | 12 +++++++++ src/plugins/network/network.c | 32 +++++++++++++++++----- src/plugins/network/network.h | 2 +- src/plugins/network/testmod_network.c | 38 +++++++++++++++++++++++++++ 5 files changed, 83 insertions(+), 8 deletions(-) diff --git a/doc/METADATA.ini b/doc/METADATA.ini index 7e03fe6baac..4f166953419 100644 --- a/doc/METADATA.ini +++ b/doc/METADATA.ini @@ -553,6 +553,13 @@ usedby/plugin= network ipaddr description= check if value resolves correctly to an ipaddr empty value uses either ipv4 or ipv6 +[check/port] +type= string +status = implemented +usedby/plugin= network +description= check if the given port is either a service under /etc/services or + is between 0 - 65535 (both inclusive) + [check/format] type= string status= idea diff --git a/src/error/specification b/src/error/specification index 418af9cc73f..61760505de5 100644 --- a/src/error/specification +++ b/src/error/specification @@ -1258,3 +1258,15 @@ severity:warning ingroup:plugin module:gpgme macro:GPGME_INVALID_RECIPIENT + +number:201 +description:The given port was not withing a valid range +severity:error +ingroup:plugin +module:network + +number:202 +description:Could not find service name for port declaration +severity:error +ingroup:plugin +module:network diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index 293313ed447..76f532a20f1 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -50,17 +50,33 @@ int elektraNetworkAddrInfo (Key * toCheck) return 0; } -int elektraPortInfo(Key * toCheck) { +int elektraPortInfo(Key * toCheck, Key * parentKey) { const Key * meta = keyGetMeta (toCheck, "check/port"); if (!meta) return 0; /* No check to do */ char *endptr = NULL; - long portNumber = strtol(keyString(meta), endptr, 10); + long portNumber = strtol(keyString(toCheck), &endptr, 10); + + if (*endptr == '\0') { + if (portNumber < 0 || portNumber > 65535 || *endptr != 0) { + ELEKTRA_SET_ERRORF(201, parentKey, "Port %d on key %s was not within 0 - 65535", + portNumber, keyName(toCheck)); + return -1; + } + } else { + ELEKTRA_LOG("Is String"); + struct servent* service; + service = getservbyname(keyString(toCheck), NULL); //NULL means we accept both tcp and udp + if (service == NULL) { + ELEKTRA_SET_ERRORF(202, parentKey, "Could not find service with name %s on key %s", + keyString(toCheck), keyName(toCheck)); + return -1; + } + ELEKTRA_LOG("Was a valid Service"); + } //strtol returns 0 if the port was actually invalid //since 0 is a valid port we need to check explicitly if - if (portNumber >= 0 && portNumber <= 65535 && *endptr == 0) { - return 0; - } + return 0; } @@ -76,6 +92,8 @@ int elektraNetworkGet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * keyNew ("system/elektra/modules/network/exports/set", KEY_FUNC, elektraNetworkSet, KEY_END), keyNew ("system/elektra/modules/network/exports/elektraNetworkAddrInfo", KEY_FUNC, elektraNetworkAddrInfo, KEY_END), + keyNew ("system/elektra/modules/network/exports/elektraPortInfo", KEY_FUNC, elektraNetworkAddrInfo, + KEY_END), #include "readme_network.c" keyNew ("system/elektra/modules/network/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END), KS_END)); ksDel (n); @@ -87,7 +105,6 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * { /* check all keys */ Key * cur; - ksRewind (returned); while ((cur = ksNext (returned)) != 0) { @@ -107,9 +124,10 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * elektraFree (errmsg); return -1; } - int p = elektraPortInfo(cur); + int p = elektraPortInfo(cur, parentKey); if (p != 0) { ELEKTRA_SET_ERROR(51, parentKey, "Port failed"); + return -1; } } diff --git a/src/plugins/network/network.h b/src/plugins/network/network.h index afc5dd95f02..5baf1a7bac2 100644 --- a/src/plugins/network/network.h +++ b/src/plugins/network/network.h @@ -21,7 +21,7 @@ #include int elektraNetworkAddrInfo (Key * toCheck); -int elektraPortInfo(Key * toCheck); +int elektraPortInfo(Key * toCheck, Key * parentKey); int elektraNetworkGet (Plugin * handle, KeySet * ks, Key * parentKey); int elektraNetworkSet (Plugin * handle, KeySet * ks, Key * parentKey); diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index b9ea33d3490..7c2feacedcf 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -17,6 +17,9 @@ #include #define PLUGIN_NAME "network" + +static void testPorts() ; + #include "../ipaddr/test_ipaddr.h" int main (int argc, char ** argv) @@ -27,8 +30,43 @@ int main (int argc, char ** argv) init (argc, argv); testIPAll (); + testPorts (); print_result ("testmod_network"); return nbError; } + +static void testPort (char const * const port, const int ret, char const * const version) +{ + Key * parentKey = keyNew ("user/tests/port", KEY_VALUE, "", KEY_END); + KeySet * conf = ksNew (0, KS_END); + KeySet * ks = ksNew (10, keyNew ("user/test/port/totest", KEY_VALUE, port, KEY_META, "check/port", version, KEY_END), KS_END); + PLUGIN_OPEN (PLUGIN_NAME); + const int pluginStatus = plugin->kdbSet (plugin, ks, parentKey); + char message[200]; + (void) snprintf (message, 200, "validation of %s “%s” returned %d instead of %d", version[0] == '\0' ? "Port" : version, port, + pluginStatus, ret); + succeed_if (pluginStatus == ret, message); + ksDel (ks); + keyDel (parentKey); + PLUGIN_CLOSE (); +} + +static inline void testPortAny (char const * const port, int ret) +{ + testPort (port, ret, ""); +} + +static void testPorts() { + testPortAny("0", 1); + testPortAny("1234", 1); + testPortAny("65535", 1); + testPortAny("ssh", 1); + testPortAny("https", 1); + + testPortAny("65536", -1); + testPortAny("-1", -1); + testPortAny("22d", -1); + testPortAny("myInvalidServiceName", -1); +} From 49bfd25e60386388c19534e14a3e6eda71e0b815 Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Wed, 26 Sep 2018 13:11:48 +0200 Subject: [PATCH 03/23] network: Implemented port functionality --- doc/METADATA.ini | 8 +++++ doc/news/_preparation_next_release.md | 3 ++ src/error/specification | 12 ++++++++ src/plugins/network/network.c | 44 +++++++++++++++++++++++---- src/plugins/network/testmod_network.c | 16 ++++++++-- 5 files changed, 74 insertions(+), 9 deletions(-) diff --git a/doc/METADATA.ini b/doc/METADATA.ini index 4f166953419..652a60878b1 100644 --- a/doc/METADATA.ini +++ b/doc/METADATA.ini @@ -560,6 +560,14 @@ usedby/plugin= network description= check if the given port is either a service under /etc/services or is between 0 - 65535 (both inclusive) +[check/port/listen] +type= string +status = implemented +usedby/plugin= network +description= check if the given port is either a service under /etc/services or + is between 0 - 65535 (both inclusive) and is unused so that potential + applications can start with that port + [check/format] type= string status= idea diff --git a/doc/news/_preparation_next_release.md b/doc/news/_preparation_next_release.md index 330f4761f62..79f7b556c56 100644 --- a/doc/news/_preparation_next_release.md +++ b/doc/news/_preparation_next_release.md @@ -120,6 +120,9 @@ This new plugin parses a subset of YAML using a parser generated by [Bison](http The `network` plugin now also allows for non-numerical hosts (i.e. "localhost") to be set and tries to resolve it via DNS. *(Michael Zronek)* +The `network` plugin also supports port declarations to check if a portnumber is valid +or if the port is available to use. *(Michael Zronek)* + ### <> - <> diff --git a/src/error/specification b/src/error/specification index 61760505de5..21c250e94ac 100644 --- a/src/error/specification +++ b/src/error/specification @@ -1270,3 +1270,15 @@ description:Could not find service name for port declaration severity:error ingroup:plugin module:network + +number:203 +description:Could not use port as it is already in use +severity:error +ingroup:plugin +module:network + +number:204 +description:Connection Error occured +severity:error +ingroup:plugin +module:network \ No newline at end of file diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index 76f532a20f1..c9c9b89289c 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -52,9 +52,11 @@ int elektraNetworkAddrInfo (Key * toCheck) int elektraPortInfo(Key * toCheck, Key * parentKey) { const Key * meta = keyGetMeta (toCheck, "check/port"); - if (!meta) return 0; /* No check to do */ + const Key * listenMeta = keyGetMeta (toCheck, "check/port/listen"); + if (!meta && !listenMeta) return 0; /* No check to do */ char *endptr = NULL; long portNumber = strtol(keyString(toCheck), &endptr, 10); + int portNumberNetworkByteOrder; if (*endptr == '\0') { if (portNumber < 0 || portNumber > 65535 || *endptr != 0) { @@ -62,8 +64,8 @@ int elektraPortInfo(Key * toCheck, Key * parentKey) { portNumber, keyName(toCheck)); return -1; } + portNumberNetworkByteOrder = htons(portNumber); } else { - ELEKTRA_LOG("Is String"); struct servent* service; service = getservbyname(keyString(toCheck), NULL); //NULL means we accept both tcp and udp if (service == NULL) { @@ -71,12 +73,43 @@ int elektraPortInfo(Key * toCheck, Key * parentKey) { keyString(toCheck), keyName(toCheck)); return -1; } - ELEKTRA_LOG("Was a valid Service"); + portNumberNetworkByteOrder = service->s_port; } - //strtol returns 0 if the port was actually invalid - //since 0 is a valid port we need to check explicitly if + //Check if we can connect to it + if (!listenMeta) return 0; /* No check to do */ + + char *hostname = "localhost"; + + int sockfd; + struct sockaddr_in serv_addr; + struct hostent *server; + sockfd = socket(AF_INET, SOCK_STREAM, 0); + if (sockfd < 0) { + ELEKTRA_SET_ERROR(204, parentKey, "Could not open a socket"); + } + server = gethostbyname(hostname); + if (server == NULL) { + ELEKTRA_SET_ERRORF(204, parentKey, "Could not connect to %s: No such host", + hostname); + return -1; + } + + bzero((char *) &serv_addr, sizeof(serv_addr)); + serv_addr.sin_family = AF_INET; + bcopy((char *)server->h_addr, + (char *)&serv_addr.sin_addr.s_addr, + server->h_length); + + serv_addr.sin_port = (in_port_t) portNumberNetworkByteOrder; + if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) == 0) { + close(sockfd); + ELEKTRA_SET_ERRORF(203, parentKey, "Port %s is already in use which was specified on key %s", + keyString(toCheck), keyName(toCheck)); + return -1; + } + close(sockfd); return 0; } @@ -126,7 +159,6 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * } int p = elektraPortInfo(cur, parentKey); if (p != 0) { - ELEKTRA_SET_ERROR(51, parentKey, "Port failed"); return -1; } } diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index 7c2feacedcf..f3f51ca9166 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -37,11 +37,11 @@ int main (int argc, char ** argv) return nbError; } -static void testPort (char const * const port, const int ret, char const * const version) +static void testPort (char const * const port, const int ret, char const * const version, char const * const metaName) { Key * parentKey = keyNew ("user/tests/port", KEY_VALUE, "", KEY_END); KeySet * conf = ksNew (0, KS_END); - KeySet * ks = ksNew (10, keyNew ("user/test/port/totest", KEY_VALUE, port, KEY_META, "check/port", version, KEY_END), KS_END); + KeySet * ks = ksNew (10, keyNew ("user/test/port/totest", KEY_VALUE, port, KEY_META, metaName, version, KEY_END), KS_END); PLUGIN_OPEN (PLUGIN_NAME); const int pluginStatus = plugin->kdbSet (plugin, ks, parentKey); char message[200]; @@ -55,7 +55,12 @@ static void testPort (char const * const port, const int ret, char const * const static inline void testPortAny (char const * const port, int ret) { - testPort (port, ret, ""); + testPort (port, ret, "", "check/port"); +} + +static inline void testListenPortAny (char const * const port, int ret) +{ + testPort (port, ret, "", "check/port/listen"); } static void testPorts() { @@ -69,4 +74,9 @@ static void testPorts() { testPortAny("-1", -1); testPortAny("22d", -1); testPortAny("myInvalidServiceName", -1); + + //These tests aren't portable I guess + testListenPortAny("http", -1); + testListenPortAny("8080", 1); + } From 1ddefa8895603f5d0df146ee539fc2b6b02f7ea1 Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Wed, 26 Sep 2018 15:45:52 +0200 Subject: [PATCH 04/23] network: Minor Cleanup --- src/plugins/network/network.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index c9c9b89289c..6d919e22c64 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -59,7 +59,7 @@ int elektraPortInfo(Key * toCheck, Key * parentKey) { int portNumberNetworkByteOrder; if (*endptr == '\0') { - if (portNumber < 0 || portNumber > 65535 || *endptr != 0) { + if (portNumber < 0 || portNumber > 65535) { ELEKTRA_SET_ERRORF(201, parentKey, "Port %d on key %s was not within 0 - 65535", portNumber, keyName(toCheck)); return -1; From 2f0a8d70a1b4fb7e50f6cee405dee7002f5d9e97 Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Wed, 26 Sep 2018 15:47:37 +0200 Subject: [PATCH 05/23] network: Minor Cleanup --- src/plugins/network/network.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index 6d919e22c64..c8130ff19b7 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -60,7 +60,7 @@ int elektraPortInfo(Key * toCheck, Key * parentKey) { if (*endptr == '\0') { if (portNumber < 0 || portNumber > 65535) { - ELEKTRA_SET_ERRORF(201, parentKey, "Port %d on key %s was not within 0 - 65535", + ELEKTRA_SET_ERRORF(201, parentKey, "Port %ld on key %s was not within 0 - 65535", portNumber, keyName(toCheck)); return -1; } From fbfd1ec358cc374a40a24d05aeae1ffcc390d163 Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Thu, 4 Oct 2018 21:29:38 +0200 Subject: [PATCH 06/23] Formatting --- src/plugins/network/network.c | 119 +++++++++++++------------- src/plugins/network/testmod_network.c | 50 +++++------ 2 files changed, 84 insertions(+), 85 deletions(-) diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index c8130ff19b7..bd6711bdbc2 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -9,39 +9,36 @@ #include "network.h" #ifndef HAVE_KDBCONFIG + #include "kdbconfig.h" + #endif /* Obtain address(es) matching host/port */ -int elektraNetworkAddrInfo (Key * toCheck) -{ - struct addrinfo * result; +int elektraNetworkAddrInfo (Key *toCheck) { + struct addrinfo *result; int s; - const Key * meta = keyGetMeta (toCheck, "check/ipaddr"); + const Key *meta = keyGetMeta (toCheck, "check/ipaddr"); if (!meta) return 0; /* No check to do */ struct addrinfo hints; memset (&hints, 0, sizeof (struct addrinfo)); hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ - if (!strcmp (keyString (meta), "ipv4")) - { + if (!strcmp (keyString (meta), "ipv4")) { hints.ai_family = AF_INET; hints.ai_flags = AI_NUMERICHOST; /* Only accept numeric hosts */ - } - else if (!strcmp (keyString (meta), "ipv6")) - { + } else if (!strcmp (keyString (meta), "ipv6")) { hints.ai_family = AF_INET6; hints.ai_flags = AI_NUMERICHOST; /* Only accept numeric hosts */ } hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ - hints.ai_protocol = 0; /* Any protocol */ + hints.ai_protocol = 0; /* Any protocol */ s = getaddrinfo (keyString (toCheck), NULL, &hints, &result); - if (s != 0) - { + if (s != 0) { return s; } @@ -50,27 +47,27 @@ int elektraNetworkAddrInfo (Key * toCheck) return 0; } -int elektraPortInfo(Key * toCheck, Key * parentKey) { - const Key * meta = keyGetMeta (toCheck, "check/port"); - const Key * listenMeta = keyGetMeta (toCheck, "check/port/listen"); +int elektraPortInfo (Key *toCheck, Key *parentKey) { + const Key *meta = keyGetMeta (toCheck, "check/port"); + const Key *listenMeta = keyGetMeta (toCheck, "check/port/listen"); if (!meta && !listenMeta) return 0; /* No check to do */ char *endptr = NULL; - long portNumber = strtol(keyString(toCheck), &endptr, 10); + long portNumber = strtol (keyString (toCheck), &endptr, 10); int portNumberNetworkByteOrder; if (*endptr == '\0') { if (portNumber < 0 || portNumber > 65535) { ELEKTRA_SET_ERRORF(201, parentKey, "Port %ld on key %s was not within 0 - 65535", - portNumber, keyName(toCheck)); + portNumber, keyName (toCheck)); return -1; } - portNumberNetworkByteOrder = htons(portNumber); + portNumberNetworkByteOrder = htons (portNumber); } else { - struct servent* service; - service = getservbyname(keyString(toCheck), NULL); //NULL means we accept both tcp and udp + struct servent *service; + service = getservbyname (keyString (toCheck), NULL); //NULL means we accept both tcp and udp if (service == NULL) { ELEKTRA_SET_ERRORF(202, parentKey, "Could not find service with name %s on key %s", - keyString(toCheck), keyName(toCheck)); + keyString (toCheck), keyName (toCheck)); return -1; } portNumberNetworkByteOrder = service->s_port; @@ -84,69 +81,72 @@ int elektraPortInfo(Key * toCheck, Key * parentKey) { int sockfd; struct sockaddr_in serv_addr; struct hostent *server; - sockfd = socket(AF_INET, SOCK_STREAM, 0); + sockfd = socket (AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { ELEKTRA_SET_ERROR(204, parentKey, "Could not open a socket"); } - server = gethostbyname(hostname); + server = gethostbyname (hostname); if (server == NULL) { ELEKTRA_SET_ERRORF(204, parentKey, "Could not connect to %s: No such host", hostname); return -1; } - bzero((char *) &serv_addr, sizeof(serv_addr)); + bzero ((char *) &serv_addr, sizeof (serv_addr)); serv_addr.sin_family = AF_INET; - bcopy((char *)server->h_addr, - (char *)&serv_addr.sin_addr.s_addr, - server->h_length); + bcopy ((char *) server->h_addr, + (char *) &serv_addr.sin_addr.s_addr, + server->h_length); serv_addr.sin_port = (in_port_t) portNumberNetworkByteOrder; - if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) == 0) { - close(sockfd); + if (connect (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == 0) { + close (sockfd); ELEKTRA_SET_ERRORF(203, parentKey, "Port %s is already in use which was specified on key %s", - keyString(toCheck), keyName(toCheck)); + keyString (toCheck), keyName (toCheck)); return -1; } - close(sockfd); + close (sockfd); return 0; } -int elektraNetworkGet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * parentKey ELEKTRA_UNUSED) -{ +int elektraNetworkGet (Plugin *handle ELEKTRA_UNUSED, KeySet *returned, Key *parentKey ELEKTRA_UNUSED) { /* configuration only */ - KeySet * n; + KeySet *n; ksAppend (returned, - n = ksNew (30, keyNew ("system/elektra/modules/network", KEY_VALUE, "network plugin waits for your orders", KEY_END), - keyNew ("system/elektra/modules/network/exports", KEY_END), - keyNew ("system/elektra/modules/network/exports/get", KEY_FUNC, elektraNetworkGet, KEY_END), - keyNew ("system/elektra/modules/network/exports/set", KEY_FUNC, elektraNetworkSet, KEY_END), - keyNew ("system/elektra/modules/network/exports/elektraNetworkAddrInfo", KEY_FUNC, elektraNetworkAddrInfo, - KEY_END), - keyNew ("system/elektra/modules/network/exports/elektraPortInfo", KEY_FUNC, elektraNetworkAddrInfo, - KEY_END), + n = ksNew (30, + keyNew ("system/elektra/modules/network", KEY_VALUE, "network plugin waits for your orders", + KEY_END), + keyNew ("system/elektra/modules/network/exports", KEY_END), + keyNew ("system/elektra/modules/network/exports/get", KEY_FUNC, elektraNetworkGet, KEY_END), + keyNew ("system/elektra/modules/network/exports/set", KEY_FUNC, elektraNetworkSet, KEY_END), + keyNew ("system/elektra/modules/network/exports/elektraNetworkAddrInfo", KEY_FUNC, + elektraNetworkAddrInfo, + KEY_END), + keyNew ("system/elektra/modules/network/exports/elektraPortInfo", KEY_FUNC, + elektraNetworkAddrInfo, + KEY_END), + #include "readme_network.c" - keyNew ("system/elektra/modules/network/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END), KS_END)); + + keyNew ("system/elektra/modules/network/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END), + KS_END)); ksDel (n); return 1; /* success */ } -int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * parentKey) -{ +int elektraNetworkSet (Plugin *handle ELEKTRA_UNUSED, KeySet *returned, Key *parentKey) { /* check all keys */ - Key * cur; + Key *cur; ksRewind (returned); - while ((cur = ksNext (returned)) != 0) - { + while ((cur = ksNext (returned)) != 0) { int s = elektraNetworkAddrInfo (cur); - if (s != 0) - { - const char * gaimsg = gai_strerror (s); - char * errmsg = elektraMalloc (strlen (gaimsg) + keyGetNameSize (cur) + keyGetValueSize (cur) + - sizeof ("name: value: message: ")); + if (s != 0) { + const char *gaimsg = gai_strerror (s); + char *errmsg = elektraMalloc (strlen (gaimsg) + keyGetNameSize (cur) + keyGetValueSize (cur) + + sizeof ("name: value: message: ")); strcpy (errmsg, "name: "); strcat (errmsg, keyName (cur)); strcat (errmsg, " value: "); @@ -157,7 +157,7 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * elektraFree (errmsg); return -1; } - int p = elektraPortInfo(cur, parentKey); + int p = elektraPortInfo (cur, parentKey); if (p != 0) { return -1; } @@ -166,12 +166,11 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * return 1; /* success */ } -Plugin * ELEKTRA_PLUGIN_EXPORT (network) -{ +Plugin *ELEKTRA_PLUGIN_EXPORT (network) { // clang-format off - return elektraPluginExport("network", - ELEKTRA_PLUGIN_GET, &elektraNetworkGet, - ELEKTRA_PLUGIN_SET, &elektraNetworkSet, - ELEKTRA_PLUGIN_END); + return elektraPluginExport ("network", + ELEKTRA_PLUGIN_GET, &elektraNetworkGet, + ELEKTRA_PLUGIN_SET, &elektraNetworkSet, + ELEKTRA_PLUGIN_END); } diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index f3f51ca9166..88fb6224c39 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -7,7 +7,9 @@ */ #ifdef HAVE_KDBCONFIG_H + #include "kdbconfig.h" + #endif #include @@ -18,12 +20,11 @@ #define PLUGIN_NAME "network" -static void testPorts() ; +static void testPorts (); #include "../ipaddr/test_ipaddr.h" -int main (int argc, char ** argv) -{ +int main (int argc, char **argv) { printf ("NETWORK TESTS\n"); printf ("===============\n\n"); @@ -37,15 +38,16 @@ int main (int argc, char ** argv) return nbError; } -static void testPort (char const * const port, const int ret, char const * const version, char const * const metaName) -{ - Key * parentKey = keyNew ("user/tests/port", KEY_VALUE, "", KEY_END); - KeySet * conf = ksNew (0, KS_END); - KeySet * ks = ksNew (10, keyNew ("user/test/port/totest", KEY_VALUE, port, KEY_META, metaName, version, KEY_END), KS_END); +static void testPort (char const *const port, const int ret, char const *const version, char const *const metaName) { + Key *parentKey = keyNew ("user/tests/port", KEY_VALUE, "", KEY_END); + KeySet *conf = ksNew (0, KS_END); + KeySet *ks = ksNew (10, keyNew ("user/test/port/totest", KEY_VALUE, port, KEY_META, metaName, version, KEY_END), + KS_END); PLUGIN_OPEN (PLUGIN_NAME); const int pluginStatus = plugin->kdbSet (plugin, ks, parentKey); char message[200]; - (void) snprintf (message, 200, "validation of %s “%s” returned %d instead of %d", version[0] == '\0' ? "Port" : version, port, + (void) snprintf (message, 200, "validation of %s “%s” returned %d instead of %d", + version[0] == '\0' ? "Port" : version, port, pluginStatus, ret); succeed_if (pluginStatus == ret, message); ksDel (ks); @@ -53,30 +55,28 @@ static void testPort (char const * const port, const int ret, char const * const PLUGIN_CLOSE (); } -static inline void testPortAny (char const * const port, int ret) -{ +static inline void testPortAny (char const *const port, int ret) { testPort (port, ret, "", "check/port"); } -static inline void testListenPortAny (char const * const port, int ret) -{ +static inline void testListenPortAny (char const *const port, int ret) { testPort (port, ret, "", "check/port/listen"); } -static void testPorts() { - testPortAny("0", 1); - testPortAny("1234", 1); - testPortAny("65535", 1); - testPortAny("ssh", 1); - testPortAny("https", 1); +static void testPorts () { + testPortAny ("0", 1); + testPortAny ("1234", 1); + testPortAny ("65535", 1); + testPortAny ("ssh", 1); + testPortAny ("https", 1); - testPortAny("65536", -1); - testPortAny("-1", -1); - testPortAny("22d", -1); - testPortAny("myInvalidServiceName", -1); + testPortAny ("65536", -1); + testPortAny ("-1", -1); + testPortAny ("22d", -1); + testPortAny ("myInvalidServiceName", -1); //These tests aren't portable I guess - testListenPortAny("http", -1); - testListenPortAny("8080", 1); + testListenPortAny ("http", -1); + testListenPortAny ("8080", 1); } From 2a8eab8304f79e6e35ba42faec3aaef640c974b3 Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Thu, 4 Oct 2018 21:42:02 +0200 Subject: [PATCH 07/23] Formatting --- src/plugins/network/network.c | 15 ++++++++++----- src/plugins/network/testmod_network.c | 17 +++++++++++------ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index bd6711bdbc2..9a60d2de35c 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -15,7 +15,8 @@ #endif /* Obtain address(es) matching host/port */ -int elektraNetworkAddrInfo (Key *toCheck) { +int elektraNetworkAddrInfo (Key *toCheck) +{ struct addrinfo *result; int s; @@ -47,7 +48,8 @@ int elektraNetworkAddrInfo (Key *toCheck) { return 0; } -int elektraPortInfo (Key *toCheck, Key *parentKey) { +int elektraPortInfo (Key *toCheck, Key *parentKey) +{ const Key *meta = keyGetMeta (toCheck, "check/port"); const Key *listenMeta = keyGetMeta (toCheck, "check/port/listen"); if (!meta && !listenMeta) return 0; /* No check to do */ @@ -111,7 +113,8 @@ int elektraPortInfo (Key *toCheck, Key *parentKey) { return 0; } -int elektraNetworkGet (Plugin *handle ELEKTRA_UNUSED, KeySet *returned, Key *parentKey ELEKTRA_UNUSED) { +int elektraNetworkGet (Plugin *handle ELEKTRA_UNUSED, KeySet *returned, Key *parentKey ELEKTRA_UNUSED) +{ /* configuration only */ KeySet *n; ksAppend (returned, @@ -137,7 +140,8 @@ int elektraNetworkGet (Plugin *handle ELEKTRA_UNUSED, KeySet *returned, Key *par return 1; /* success */ } -int elektraNetworkSet (Plugin *handle ELEKTRA_UNUSED, KeySet *returned, Key *parentKey) { +int elektraNetworkSet (Plugin *handle ELEKTRA_UNUSED, KeySet *returned, Key *parentKey) +{ /* check all keys */ Key *cur; ksRewind (returned); @@ -166,7 +170,8 @@ int elektraNetworkSet (Plugin *handle ELEKTRA_UNUSED, KeySet *returned, Key *par return 1; /* success */ } -Plugin *ELEKTRA_PLUGIN_EXPORT (network) { +Plugin *ELEKTRA_PLUGIN_EXPORT (network) +{ // clang-format off return elektraPluginExport ("network", ELEKTRA_PLUGIN_GET, &elektraNetworkGet, diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index 88fb6224c39..ed385e52a21 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -24,7 +24,8 @@ static void testPorts (); #include "../ipaddr/test_ipaddr.h" -int main (int argc, char **argv) { +int main (int argc, char **argv) +{ printf ("NETWORK TESTS\n"); printf ("===============\n\n"); @@ -38,7 +39,8 @@ int main (int argc, char **argv) { return nbError; } -static void testPort (char const *const port, const int ret, char const *const version, char const *const metaName) { +static void testPort (char const *const port, const int ret, char const *const version, char const *const metaName) +{ Key *parentKey = keyNew ("user/tests/port", KEY_VALUE, "", KEY_END); KeySet *conf = ksNew (0, KS_END); KeySet *ks = ksNew (10, keyNew ("user/test/port/totest", KEY_VALUE, port, KEY_META, metaName, version, KEY_END), @@ -55,15 +57,18 @@ static void testPort (char const *const port, const int ret, char const *const v PLUGIN_CLOSE (); } -static inline void testPortAny (char const *const port, int ret) { +static inline void testPortAny (char const *const port, int ret) +{ testPort (port, ret, "", "check/port"); } -static inline void testListenPortAny (char const *const port, int ret) { +static inline void testListenPortAny (char const *const port, int ret) +{ testPort (port, ret, "", "check/port/listen"); } -static void testPorts () { +static void testPorts () +{ testPortAny ("0", 1); testPortAny ("1234", 1); testPortAny ("65535", 1); @@ -75,7 +80,7 @@ static void testPorts () { testPortAny ("22d", -1); testPortAny ("myInvalidServiceName", -1); - //These tests aren't portable I guess + // These tests aren't portable I guess testListenPortAny ("http", -1); testListenPortAny ("8080", 1); From 42892a93d8ec4294cb3c60626d793eaae5120f40 Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Thu, 4 Oct 2018 21:43:50 +0200 Subject: [PATCH 08/23] Formatting --- src/plugins/network/network.c | 36 +++++++++++++-------------- src/plugins/network/testmod_network.c | 16 ++++++------ 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index 9a60d2de35c..66a631d20dd 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -15,12 +15,12 @@ #endif /* Obtain address(es) matching host/port */ -int elektraNetworkAddrInfo (Key *toCheck) +int elektraNetworkAddrInfo (Key * toCheck) { - struct addrinfo *result; + struct addrinfo * result; int s; - const Key *meta = keyGetMeta (toCheck, "check/ipaddr"); + const Key * meta = keyGetMeta (toCheck, "check/ipaddr"); if (!meta) return 0; /* No check to do */ @@ -48,12 +48,12 @@ int elektraNetworkAddrInfo (Key *toCheck) return 0; } -int elektraPortInfo (Key *toCheck, Key *parentKey) +int elektraPortInfo (Key * toCheck, Key * parentKey) { - const Key *meta = keyGetMeta (toCheck, "check/port"); - const Key *listenMeta = keyGetMeta (toCheck, "check/port/listen"); + const Key * meta = keyGetMeta (toCheck, "check/port"); + const Key * listenMeta = keyGetMeta (toCheck, "check/port/listen"); if (!meta && !listenMeta) return 0; /* No check to do */ - char *endptr = NULL; + char * endptr = NULL; long portNumber = strtol (keyString (toCheck), &endptr, 10); int portNumberNetworkByteOrder; @@ -65,7 +65,7 @@ int elektraPortInfo (Key *toCheck, Key *parentKey) } portNumberNetworkByteOrder = htons (portNumber); } else { - struct servent *service; + struct servent * service; service = getservbyname (keyString (toCheck), NULL); //NULL means we accept both tcp and udp if (service == NULL) { ELEKTRA_SET_ERRORF(202, parentKey, "Could not find service with name %s on key %s", @@ -78,11 +78,11 @@ int elektraPortInfo (Key *toCheck, Key *parentKey) //Check if we can connect to it if (!listenMeta) return 0; /* No check to do */ - char *hostname = "localhost"; + char * hostname = "localhost"; int sockfd; struct sockaddr_in serv_addr; - struct hostent *server; + struct hostent * server; sockfd = socket (AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { ELEKTRA_SET_ERROR(204, parentKey, "Could not open a socket"); @@ -113,10 +113,10 @@ int elektraPortInfo (Key *toCheck, Key *parentKey) return 0; } -int elektraNetworkGet (Plugin *handle ELEKTRA_UNUSED, KeySet *returned, Key *parentKey ELEKTRA_UNUSED) +int elektraNetworkGet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * parentKey ELEKTRA_UNUSED) { /* configuration only */ - KeySet *n; + KeySet * n; ksAppend (returned, n = ksNew (30, keyNew ("system/elektra/modules/network", KEY_VALUE, "network plugin waits for your orders", @@ -140,17 +140,17 @@ int elektraNetworkGet (Plugin *handle ELEKTRA_UNUSED, KeySet *returned, Key *par return 1; /* success */ } -int elektraNetworkSet (Plugin *handle ELEKTRA_UNUSED, KeySet *returned, Key *parentKey) +int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * parentKey) { /* check all keys */ - Key *cur; + Key * cur; ksRewind (returned); while ((cur = ksNext (returned)) != 0) { int s = elektraNetworkAddrInfo (cur); if (s != 0) { - const char *gaimsg = gai_strerror (s); - char *errmsg = elektraMalloc (strlen (gaimsg) + keyGetNameSize (cur) + keyGetValueSize (cur) + - sizeof ("name: value: message: ")); + const char * gaimsg = gai_strerror (s); + char * errmsg = elektraMalloc (strlen (gaimsg) + keyGetNameSize (cur) + keyGetValueSize (cur) + + sizeof ("name: value: message: ")); strcpy (errmsg, "name: "); strcat (errmsg, keyName (cur)); strcat (errmsg, " value: "); @@ -170,7 +170,7 @@ int elektraNetworkSet (Plugin *handle ELEKTRA_UNUSED, KeySet *returned, Key *par return 1; /* success */ } -Plugin *ELEKTRA_PLUGIN_EXPORT (network) +Plugin * ELEKTRA_PLUGIN_EXPORT (network) { // clang-format off return elektraPluginExport ("network", diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index ed385e52a21..8ec51a81682 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -24,7 +24,7 @@ static void testPorts (); #include "../ipaddr/test_ipaddr.h" -int main (int argc, char **argv) +int main (int argc, char ** argv) { printf ("NETWORK TESTS\n"); printf ("===============\n\n"); @@ -39,12 +39,12 @@ int main (int argc, char **argv) return nbError; } -static void testPort (char const *const port, const int ret, char const *const version, char const *const metaName) +static void testPort (char const * const port, const int ret, char const * const version, char const * const metaName) { - Key *parentKey = keyNew ("user/tests/port", KEY_VALUE, "", KEY_END); - KeySet *conf = ksNew (0, KS_END); - KeySet *ks = ksNew (10, keyNew ("user/test/port/totest", KEY_VALUE, port, KEY_META, metaName, version, KEY_END), - KS_END); + Key * parentKey = keyNew ("user/tests/port", KEY_VALUE, "", KEY_END); + KeySet * conf = ksNew (0, KS_END); + KeySet * ks = ksNew (10, keyNew ("user/test/port/totest", KEY_VALUE, port, KEY_META, metaName, version, KEY_END), + KS_END); PLUGIN_OPEN (PLUGIN_NAME); const int pluginStatus = plugin->kdbSet (plugin, ks, parentKey); char message[200]; @@ -57,12 +57,12 @@ static void testPort (char const *const port, const int ret, char const *const v PLUGIN_CLOSE (); } -static inline void testPortAny (char const *const port, int ret) +static inline void testPortAny (char const * const port, int ret) { testPort (port, ret, "", "check/port"); } -static inline void testListenPortAny (char const *const port, int ret) +static inline void testListenPortAny (char const * const port, int ret) { testPort (port, ret, "", "check/port/listen"); } From 7f69d5a05b36ff63cf22b3e7a92521c10c0593d2 Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Thu, 4 Oct 2018 21:44:28 +0200 Subject: [PATCH 09/23] Formatting --- src/plugins/network/network.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index 66a631d20dd..434158f8580 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -75,7 +75,7 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) portNumberNetworkByteOrder = service->s_port; } - //Check if we can connect to it + // Check if we can connect to it if (!listenMeta) return 0; /* No check to do */ char * hostname = "localhost"; From c1478ae257c77c52786fd66faa2cd7d4cfdeb5ed Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Thu, 4 Oct 2018 21:29:38 +0200 Subject: [PATCH 10/23] Formatting --- src/plugins/network/network.c | 100 +++++++++++++------------- src/plugins/network/testmod_network.c | 41 ++++++----- 2 files changed, 75 insertions(+), 66 deletions(-) diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index c8130ff19b7..434158f8580 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -9,7 +9,9 @@ #include "network.h" #ifndef HAVE_KDBCONFIG + #include "kdbconfig.h" + #endif /* Obtain address(es) matching host/port */ @@ -25,23 +27,19 @@ int elektraNetworkAddrInfo (Key * toCheck) struct addrinfo hints; memset (&hints, 0, sizeof (struct addrinfo)); hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ - if (!strcmp (keyString (meta), "ipv4")) - { + if (!strcmp (keyString (meta), "ipv4")) { hints.ai_family = AF_INET; hints.ai_flags = AI_NUMERICHOST; /* Only accept numeric hosts */ - } - else if (!strcmp (keyString (meta), "ipv6")) - { + } else if (!strcmp (keyString (meta), "ipv6")) { hints.ai_family = AF_INET6; hints.ai_flags = AI_NUMERICHOST; /* Only accept numeric hosts */ } hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ - hints.ai_protocol = 0; /* Any protocol */ + hints.ai_protocol = 0; /* Any protocol */ s = getaddrinfo (keyString (toCheck), NULL, &hints, &result); - if (s != 0) - { + if (s != 0) { return s; } @@ -50,66 +48,67 @@ int elektraNetworkAddrInfo (Key * toCheck) return 0; } -int elektraPortInfo(Key * toCheck, Key * parentKey) { +int elektraPortInfo (Key * toCheck, Key * parentKey) +{ const Key * meta = keyGetMeta (toCheck, "check/port"); const Key * listenMeta = keyGetMeta (toCheck, "check/port/listen"); if (!meta && !listenMeta) return 0; /* No check to do */ - char *endptr = NULL; - long portNumber = strtol(keyString(toCheck), &endptr, 10); + char * endptr = NULL; + long portNumber = strtol (keyString (toCheck), &endptr, 10); int portNumberNetworkByteOrder; if (*endptr == '\0') { if (portNumber < 0 || portNumber > 65535) { ELEKTRA_SET_ERRORF(201, parentKey, "Port %ld on key %s was not within 0 - 65535", - portNumber, keyName(toCheck)); + portNumber, keyName (toCheck)); return -1; } - portNumberNetworkByteOrder = htons(portNumber); + portNumberNetworkByteOrder = htons (portNumber); } else { - struct servent* service; - service = getservbyname(keyString(toCheck), NULL); //NULL means we accept both tcp and udp + struct servent * service; + service = getservbyname (keyString (toCheck), NULL); //NULL means we accept both tcp and udp if (service == NULL) { ELEKTRA_SET_ERRORF(202, parentKey, "Could not find service with name %s on key %s", - keyString(toCheck), keyName(toCheck)); + keyString (toCheck), keyName (toCheck)); return -1; } portNumberNetworkByteOrder = service->s_port; } - //Check if we can connect to it + // Check if we can connect to it if (!listenMeta) return 0; /* No check to do */ - char *hostname = "localhost"; + char * hostname = "localhost"; int sockfd; struct sockaddr_in serv_addr; - struct hostent *server; - sockfd = socket(AF_INET, SOCK_STREAM, 0); + struct hostent * server; + sockfd = socket (AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { ELEKTRA_SET_ERROR(204, parentKey, "Could not open a socket"); } - server = gethostbyname(hostname); + server = gethostbyname (hostname); if (server == NULL) { ELEKTRA_SET_ERRORF(204, parentKey, "Could not connect to %s: No such host", hostname); return -1; } - bzero((char *) &serv_addr, sizeof(serv_addr)); + bzero ((char *) &serv_addr, sizeof (serv_addr)); serv_addr.sin_family = AF_INET; - bcopy((char *)server->h_addr, - (char *)&serv_addr.sin_addr.s_addr, - server->h_length); + bcopy ((char *) server->h_addr, + (char *) &serv_addr.sin_addr.s_addr, + server->h_length); serv_addr.sin_port = (in_port_t) portNumberNetworkByteOrder; - if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) == 0) { - close(sockfd); + if (connect (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == 0) { + close (sockfd); ELEKTRA_SET_ERRORF(203, parentKey, "Port %s is already in use which was specified on key %s", - keyString(toCheck), keyName(toCheck)); + keyString (toCheck), keyName (toCheck)); return -1; } - close(sockfd); + close (sockfd); return 0; } @@ -119,16 +118,23 @@ int elektraNetworkGet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * /* configuration only */ KeySet * n; ksAppend (returned, - n = ksNew (30, keyNew ("system/elektra/modules/network", KEY_VALUE, "network plugin waits for your orders", KEY_END), - keyNew ("system/elektra/modules/network/exports", KEY_END), - keyNew ("system/elektra/modules/network/exports/get", KEY_FUNC, elektraNetworkGet, KEY_END), - keyNew ("system/elektra/modules/network/exports/set", KEY_FUNC, elektraNetworkSet, KEY_END), - keyNew ("system/elektra/modules/network/exports/elektraNetworkAddrInfo", KEY_FUNC, elektraNetworkAddrInfo, - KEY_END), - keyNew ("system/elektra/modules/network/exports/elektraPortInfo", KEY_FUNC, elektraNetworkAddrInfo, - KEY_END), + n = ksNew (30, + keyNew ("system/elektra/modules/network", KEY_VALUE, "network plugin waits for your orders", + KEY_END), + keyNew ("system/elektra/modules/network/exports", KEY_END), + keyNew ("system/elektra/modules/network/exports/get", KEY_FUNC, elektraNetworkGet, KEY_END), + keyNew ("system/elektra/modules/network/exports/set", KEY_FUNC, elektraNetworkSet, KEY_END), + keyNew ("system/elektra/modules/network/exports/elektraNetworkAddrInfo", KEY_FUNC, + elektraNetworkAddrInfo, + KEY_END), + keyNew ("system/elektra/modules/network/exports/elektraPortInfo", KEY_FUNC, + elektraNetworkAddrInfo, + KEY_END), + #include "readme_network.c" - keyNew ("system/elektra/modules/network/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END), KS_END)); + + keyNew ("system/elektra/modules/network/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END), + KS_END)); ksDel (n); return 1; /* success */ @@ -139,14 +145,12 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * /* check all keys */ Key * cur; ksRewind (returned); - while ((cur = ksNext (returned)) != 0) - { + while ((cur = ksNext (returned)) != 0) { int s = elektraNetworkAddrInfo (cur); - if (s != 0) - { + if (s != 0) { const char * gaimsg = gai_strerror (s); char * errmsg = elektraMalloc (strlen (gaimsg) + keyGetNameSize (cur) + keyGetValueSize (cur) + - sizeof ("name: value: message: ")); + sizeof ("name: value: message: ")); strcpy (errmsg, "name: "); strcat (errmsg, keyName (cur)); strcat (errmsg, " value: "); @@ -157,7 +161,7 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * elektraFree (errmsg); return -1; } - int p = elektraPortInfo(cur, parentKey); + int p = elektraPortInfo (cur, parentKey); if (p != 0) { return -1; } @@ -169,9 +173,9 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * Plugin * ELEKTRA_PLUGIN_EXPORT (network) { // clang-format off - return elektraPluginExport("network", - ELEKTRA_PLUGIN_GET, &elektraNetworkGet, - ELEKTRA_PLUGIN_SET, &elektraNetworkSet, - ELEKTRA_PLUGIN_END); + return elektraPluginExport ("network", + ELEKTRA_PLUGIN_GET, &elektraNetworkGet, + ELEKTRA_PLUGIN_SET, &elektraNetworkSet, + ELEKTRA_PLUGIN_END); } diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index f3f51ca9166..8ec51a81682 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -7,7 +7,9 @@ */ #ifdef HAVE_KDBCONFIG_H + #include "kdbconfig.h" + #endif #include @@ -18,7 +20,7 @@ #define PLUGIN_NAME "network" -static void testPorts() ; +static void testPorts (); #include "../ipaddr/test_ipaddr.h" @@ -41,11 +43,13 @@ static void testPort (char const * const port, const int ret, char const * const { Key * parentKey = keyNew ("user/tests/port", KEY_VALUE, "", KEY_END); KeySet * conf = ksNew (0, KS_END); - KeySet * ks = ksNew (10, keyNew ("user/test/port/totest", KEY_VALUE, port, KEY_META, metaName, version, KEY_END), KS_END); + KeySet * ks = ksNew (10, keyNew ("user/test/port/totest", KEY_VALUE, port, KEY_META, metaName, version, KEY_END), + KS_END); PLUGIN_OPEN (PLUGIN_NAME); const int pluginStatus = plugin->kdbSet (plugin, ks, parentKey); char message[200]; - (void) snprintf (message, 200, "validation of %s “%s” returned %d instead of %d", version[0] == '\0' ? "Port" : version, port, + (void) snprintf (message, 200, "validation of %s “%s” returned %d instead of %d", + version[0] == '\0' ? "Port" : version, port, pluginStatus, ret); succeed_if (pluginStatus == ret, message); ksDel (ks); @@ -63,20 +67,21 @@ static inline void testListenPortAny (char const * const port, int ret) testPort (port, ret, "", "check/port/listen"); } -static void testPorts() { - testPortAny("0", 1); - testPortAny("1234", 1); - testPortAny("65535", 1); - testPortAny("ssh", 1); - testPortAny("https", 1); - - testPortAny("65536", -1); - testPortAny("-1", -1); - testPortAny("22d", -1); - testPortAny("myInvalidServiceName", -1); - - //These tests aren't portable I guess - testListenPortAny("http", -1); - testListenPortAny("8080", 1); +static void testPorts () +{ + testPortAny ("0", 1); + testPortAny ("1234", 1); + testPortAny ("65535", 1); + testPortAny ("ssh", 1); + testPortAny ("https", 1); + + testPortAny ("65536", -1); + testPortAny ("-1", -1); + testPortAny ("22d", -1); + testPortAny ("myInvalidServiceName", -1); + + // These tests aren't portable I guess + testListenPortAny ("http", -1); + testListenPortAny ("8080", 1); } From be49d6e60c9c6ba47621eb9f58ae539b79420ef2 Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Thu, 4 Oct 2018 22:16:09 +0200 Subject: [PATCH 11/23] Implicit function declaration removed --- src/plugins/network/testmod_network.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index 8ec51a81682..35f73e96ee1 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -20,7 +20,7 @@ #define PLUGIN_NAME "network" -static void testPorts (); +static void testPorts (void); #include "../ipaddr/test_ipaddr.h" @@ -67,7 +67,7 @@ static inline void testListenPortAny (char const * const port, int ret) testPort (port, ret, "", "check/port/listen"); } -static void testPorts () +static void testPorts (void) { testPortAny ("0", 1); testPortAny ("1234", 1); From d141ec606ff30ffaf8df6a99c191afa1a150f0fb Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Thu, 4 Oct 2018 22:24:11 +0200 Subject: [PATCH 12/23] Formatting --- src/plugins/network/network.h | 4 +++- src/plugins/network/testmod_network.c | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/network/network.h b/src/plugins/network/network.h index 5baf1a7bac2..2edd2d1f16e 100644 --- a/src/plugins/network/network.h +++ b/src/plugins/network/network.h @@ -21,9 +21,11 @@ #include int elektraNetworkAddrInfo (Key * toCheck); -int elektraPortInfo(Key * toCheck, Key * parentKey); + +int elektraPortInfo (Key * toCheck, Key * parentKey); int elektraNetworkGet (Plugin * handle, KeySet * ks, Key * parentKey); + int elektraNetworkSet (Plugin * handle, KeySet * ks, Key * parentKey); Plugin * ELEKTRA_PLUGIN_EXPORT (network); diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index 35f73e96ee1..99c93a8e6ef 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -83,5 +83,4 @@ static void testPorts (void) // These tests aren't portable I guess testListenPortAny ("http", -1); testListenPortAny ("8080", 1); - } From 95d50bb7166f7a41f9d4bf014f71059d8a68c79f Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Thu, 4 Oct 2018 22:34:08 +0200 Subject: [PATCH 13/23] FUCKING formatting --- src/plugins/network/network.c | 89 ++++++++++++++++----------- src/plugins/network/testmod_network.c | 8 +-- 2 files changed, 55 insertions(+), 42 deletions(-) diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index 434158f8580..ce1ac6a916b 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -27,10 +27,13 @@ int elektraNetworkAddrInfo (Key * toCheck) struct addrinfo hints; memset (&hints, 0, sizeof (struct addrinfo)); hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ - if (!strcmp (keyString (meta), "ipv4")) { + if (!strcmp (keyString (meta), "ipv4")) + { hints.ai_family = AF_INET; hints.ai_flags = AI_NUMERICHOST; /* Only accept numeric hosts */ - } else if (!strcmp (keyString (meta), "ipv6")) { + } + else if (!strcmp (keyString (meta), "ipv6")) + { hints.ai_family = AF_INET6; hints.ai_flags = AI_NUMERICHOST; /* Only accept numeric hosts */ } @@ -39,7 +42,8 @@ int elektraNetworkAddrInfo (Key * toCheck) s = getaddrinfo (keyString (toCheck), NULL, &hints, &result); - if (s != 0) { + if (s != 0) + { return s; } @@ -57,19 +61,24 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) long portNumber = strtol (keyString (toCheck), &endptr, 10); int portNumberNetworkByteOrder; - if (*endptr == '\0') { - if (portNumber < 0 || portNumber > 65535) { + if (*endptr == '\0') + { + if (portNumber < 0 || portNumber > 65535) + { ELEKTRA_SET_ERRORF(201, parentKey, "Port %ld on key %s was not within 0 - 65535", - portNumber, keyName (toCheck)); + portNumber, keyName (toCheck)); return -1; } portNumberNetworkByteOrder = htons (portNumber); - } else { + } + else + { struct servent * service; service = getservbyname (keyString (toCheck), NULL); //NULL means we accept both tcp and udp - if (service == NULL) { + if (service == NULL) + { ELEKTRA_SET_ERRORF(202, parentKey, "Could not find service with name %s on key %s", - keyString (toCheck), keyName (toCheck)); + keyString (toCheck), keyName (toCheck)); return -1; } portNumberNetworkByteOrder = service->s_port; @@ -84,28 +93,31 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) struct sockaddr_in serv_addr; struct hostent * server; sockfd = socket (AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) { + if (sockfd < 0) + { ELEKTRA_SET_ERROR(204, parentKey, "Could not open a socket"); } server = gethostbyname (hostname); - if (server == NULL) { + if (server == NULL) + { ELEKTRA_SET_ERRORF(204, parentKey, "Could not connect to %s: No such host", - hostname); + hostname); return -1; } bzero ((char *) &serv_addr, sizeof (serv_addr)); serv_addr.sin_family = AF_INET; bcopy ((char *) server->h_addr, - (char *) &serv_addr.sin_addr.s_addr, - server->h_length); + (char *) &serv_addr.sin_addr.s_addr, + server->h_length); serv_addr.sin_port = (in_port_t) portNumberNetworkByteOrder; - if (connect (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == 0) { + if (connect (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == 0) + { close (sockfd); ELEKTRA_SET_ERRORF(203, parentKey, "Port %s is already in use which was specified on key %s", - keyString (toCheck), keyName (toCheck)); + keyString (toCheck), keyName (toCheck)); return -1; } close (sockfd); @@ -118,23 +130,23 @@ int elektraNetworkGet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * /* configuration only */ KeySet * n; ksAppend (returned, - n = ksNew (30, - keyNew ("system/elektra/modules/network", KEY_VALUE, "network plugin waits for your orders", - KEY_END), - keyNew ("system/elektra/modules/network/exports", KEY_END), - keyNew ("system/elektra/modules/network/exports/get", KEY_FUNC, elektraNetworkGet, KEY_END), - keyNew ("system/elektra/modules/network/exports/set", KEY_FUNC, elektraNetworkSet, KEY_END), - keyNew ("system/elektra/modules/network/exports/elektraNetworkAddrInfo", KEY_FUNC, - elektraNetworkAddrInfo, - KEY_END), - keyNew ("system/elektra/modules/network/exports/elektraPortInfo", KEY_FUNC, - elektraNetworkAddrInfo, - KEY_END), + n = ksNew (30, + keyNew ("system/elektra/modules/network", KEY_VALUE, "network plugin waits for your orders", + KEY_END), + keyNew ("system/elektra/modules/network/exports", KEY_END), + keyNew ("system/elektra/modules/network/exports/get", KEY_FUNC, elektraNetworkGet, KEY_END), + keyNew ("system/elektra/modules/network/exports/set", KEY_FUNC, elektraNetworkSet, KEY_END), + keyNew ("system/elektra/modules/network/exports/elektraNetworkAddrInfo", KEY_FUNC, + elektraNetworkAddrInfo, + KEY_END), + keyNew ("system/elektra/modules/network/exports/elektraPortInfo", KEY_FUNC, + elektraNetworkAddrInfo, + KEY_END), #include "readme_network.c" - keyNew ("system/elektra/modules/network/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END), - KS_END)); + keyNew ("system/elektra/modules/network/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END), + KS_END)); ksDel (n); return 1; /* success */ @@ -145,12 +157,14 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * /* check all keys */ Key * cur; ksRewind (returned); - while ((cur = ksNext (returned)) != 0) { + while ((cur = ksNext (returned)) != 0) + { int s = elektraNetworkAddrInfo (cur); - if (s != 0) { + if (s != 0) + { const char * gaimsg = gai_strerror (s); char * errmsg = elektraMalloc (strlen (gaimsg) + keyGetNameSize (cur) + keyGetValueSize (cur) + - sizeof ("name: value: message: ")); + sizeof ("name: value: message: ")); strcpy (errmsg, "name: "); strcat (errmsg, keyName (cur)); strcat (errmsg, " value: "); @@ -162,7 +176,8 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * return -1; } int p = elektraPortInfo (cur, parentKey); - if (p != 0) { + if (p != 0) + { return -1; } } @@ -174,8 +189,8 @@ Plugin * ELEKTRA_PLUGIN_EXPORT (network) { // clang-format off return elektraPluginExport ("network", - ELEKTRA_PLUGIN_GET, &elektraNetworkGet, - ELEKTRA_PLUGIN_SET, &elektraNetworkSet, - ELEKTRA_PLUGIN_END); + ELEKTRA_PLUGIN_GET, &elektraNetworkGet, + ELEKTRA_PLUGIN_SET, &elektraNetworkSet, + ELEKTRA_PLUGIN_END); } diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index 99c93a8e6ef..a2520f94878 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -43,14 +43,12 @@ static void testPort (char const * const port, const int ret, char const * const { Key * parentKey = keyNew ("user/tests/port", KEY_VALUE, "", KEY_END); KeySet * conf = ksNew (0, KS_END); - KeySet * ks = ksNew (10, keyNew ("user/test/port/totest", KEY_VALUE, port, KEY_META, metaName, version, KEY_END), - KS_END); + KeySet * ks = ksNew (10, keyNew ("user/test/port/totest", KEY_VALUE, port, KEY_META, metaName, version, KEY_END), KS_END); PLUGIN_OPEN (PLUGIN_NAME); const int pluginStatus = plugin->kdbSet (plugin, ks, parentKey); char message[200]; - (void) snprintf (message, 200, "validation of %s “%s” returned %d instead of %d", - version[0] == '\0' ? "Port" : version, port, - pluginStatus, ret); + (void) snprintf (message, 200, "validation of %s “%s” returned %d instead of %d", version[0] == '\0' ? "Port" : version, port, + pluginStatus, ret); succeed_if (pluginStatus == ret, message); ksDel (ks); keyDel (parentKey); From e5ebf73b7b5804f90077e77f8cb5ad20cfb955ed Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Thu, 4 Oct 2018 22:44:27 +0200 Subject: [PATCH 14/23] Formatting --- src/plugins/network/network.c | 64 +++++++++++++++-------------------- 1 file changed, 28 insertions(+), 36 deletions(-) diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index ce1ac6a916b..a79fbc0400f 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -22,27 +22,27 @@ int elektraNetworkAddrInfo (Key * toCheck) const Key * meta = keyGetMeta (toCheck, "check/ipaddr"); - if (!meta) return 0; /* No check to do */ + if ( !meta ) return 0; /* No check to do */ struct addrinfo hints; memset (&hints, 0, sizeof (struct addrinfo)); hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ - if (!strcmp (keyString (meta), "ipv4")) + if ( !strcmp (keyString (meta), "ipv4")) { hints.ai_family = AF_INET; hints.ai_flags = AI_NUMERICHOST; /* Only accept numeric hosts */ } - else if (!strcmp (keyString (meta), "ipv6")) + else if ( !strcmp (keyString (meta), "ipv6")) { hints.ai_family = AF_INET6; hints.ai_flags = AI_NUMERICHOST; /* Only accept numeric hosts */ } hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ - hints.ai_protocol = 0; /* Any protocol */ + hints.ai_protocol = 0; /* Any protocol */ s = getaddrinfo (keyString (toCheck), NULL, &hints, &result); - if (s != 0) + if ( s != 0 ) { return s; } @@ -56,17 +56,16 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) { const Key * meta = keyGetMeta (toCheck, "check/port"); const Key * listenMeta = keyGetMeta (toCheck, "check/port/listen"); - if (!meta && !listenMeta) return 0; /* No check to do */ + if ( !meta && !listenMeta ) return 0; /* No check to do */ char * endptr = NULL; long portNumber = strtol (keyString (toCheck), &endptr, 10); int portNumberNetworkByteOrder; - if (*endptr == '\0') + if ( *endptr == '\0' ) { - if (portNumber < 0 || portNumber > 65535) + if ( portNumber < 0 || portNumber > 65535 ) { - ELEKTRA_SET_ERRORF(201, parentKey, "Port %ld on key %s was not within 0 - 65535", - portNumber, keyName (toCheck)); + ELEKTRA_SET_ERRORF(201, parentKey, "Port %ld on key %s was not within 0 - 65535", portNumber, keyName (toCheck)); return -1; } portNumberNetworkByteOrder = htons (portNumber); @@ -74,18 +73,18 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) else { struct servent * service; - service = getservbyname (keyString (toCheck), NULL); //NULL means we accept both tcp and udp - if (service == NULL) + service = getservbyname (keyString (toCheck), NULL); // NULL means we accept both tcp and udp + if ( service == NULL) { - ELEKTRA_SET_ERRORF(202, parentKey, "Could not find service with name %s on key %s", - keyString (toCheck), keyName (toCheck)); + ELEKTRA_SET_ERRORF(202, parentKey, "Could not find service with name %s on key %s", keyString (toCheck), + keyName (toCheck)); return -1; } portNumberNetworkByteOrder = service->s_port; } // Check if we can connect to it - if (!listenMeta) return 0; /* No check to do */ + if ( !listenMeta ) return 0; /* No check to do */ char * hostname = "localhost"; @@ -93,31 +92,28 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) struct sockaddr_in serv_addr; struct hostent * server; sockfd = socket (AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) + if ( sockfd < 0 ) { - ELEKTRA_SET_ERROR(204, parentKey, "Could not open a socket"); + ELEKTRA_SET_ERROR (204, parentKey, "Could not open a socket"); } server = gethostbyname (hostname); - if (server == NULL) + if ( server == NULL) { - ELEKTRA_SET_ERRORF(204, parentKey, "Could not connect to %s: No such host", - hostname); + ELEKTRA_SET_ERRORF (204, parentKey, "Could not connect to %s: No such host", hostname); return -1; } bzero ((char *) &serv_addr, sizeof (serv_addr)); serv_addr.sin_family = AF_INET; - bcopy ((char *) server->h_addr, - (char *) &serv_addr.sin_addr.s_addr, - server->h_length); + bcopy ((char *) server->h_addr, (char *) &serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = (in_port_t) portNumberNetworkByteOrder; - if (connect (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == 0) + if ( connect (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == 0 ) { close (sockfd); - ELEKTRA_SET_ERRORF(203, parentKey, "Port %s is already in use which was specified on key %s", - keyString (toCheck), keyName (toCheck)); + ELEKTRA_SET_ERRORF (203, parentKey, "Port %s is already in use which was specified on key %s", keyString (toCheck), + keyName (toCheck)); return -1; } close (sockfd); @@ -131,22 +127,18 @@ int elektraNetworkGet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * KeySet * n; ksAppend (returned, n = ksNew (30, - keyNew ("system/elektra/modules/network", KEY_VALUE, "network plugin waits for your orders", - KEY_END), + keyNew ("system/elektra/modules/network", KEY_VALUE, "network plugin waits for your orders", KEY_END), keyNew ("system/elektra/modules/network/exports", KEY_END), keyNew ("system/elektra/modules/network/exports/get", KEY_FUNC, elektraNetworkGet, KEY_END), keyNew ("system/elektra/modules/network/exports/set", KEY_FUNC, elektraNetworkSet, KEY_END), - keyNew ("system/elektra/modules/network/exports/elektraNetworkAddrInfo", KEY_FUNC, - elektraNetworkAddrInfo, + keyNew ("system/elektra/modules/network/exports/elektraNetworkAddrInfo", KEY_FUNC, elektraNetworkAddrInfo, KEY_END), - keyNew ("system/elektra/modules/network/exports/elektraPortInfo", KEY_FUNC, - elektraNetworkAddrInfo, + keyNew ("system/elektra/modules/network/exports/elektraPortInfo", KEY_FUNC, elektraNetworkAddrInfo, KEY_END), #include "readme_network.c" - keyNew ("system/elektra/modules/network/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END), - KS_END)); + keyNew ("system/elektra/modules/network/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END), KS_END)); ksDel (n); return 1; /* success */ @@ -160,7 +152,7 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * while ((cur = ksNext (returned)) != 0) { int s = elektraNetworkAddrInfo (cur); - if (s != 0) + if ( s != 0 ) { const char * gaimsg = gai_strerror (s); char * errmsg = elektraMalloc (strlen (gaimsg) + keyGetNameSize (cur) + keyGetValueSize (cur) + @@ -176,7 +168,7 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * return -1; } int p = elektraPortInfo (cur, parentKey); - if (p != 0) + if ( p != 0 ) { return -1; } From 3d25ff8302ff384975fa9d4735633b67f45995ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rene=CC=81=20Schwaiger?= Date: Fri, 5 Oct 2018 08:23:22 +0200 Subject: [PATCH 15/23] Network: Reformat source code --- src/plugins/network/network.c | 42 +++++++++++++++++------------------ 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index a79fbc0400f..91ab9a0c651 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -22,27 +22,27 @@ int elektraNetworkAddrInfo (Key * toCheck) const Key * meta = keyGetMeta (toCheck, "check/ipaddr"); - if ( !meta ) return 0; /* No check to do */ + if (!meta) return 0; /* No check to do */ struct addrinfo hints; memset (&hints, 0, sizeof (struct addrinfo)); hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ - if ( !strcmp (keyString (meta), "ipv4")) + if (!strcmp (keyString (meta), "ipv4")) { hints.ai_family = AF_INET; hints.ai_flags = AI_NUMERICHOST; /* Only accept numeric hosts */ } - else if ( !strcmp (keyString (meta), "ipv6")) + else if (!strcmp (keyString (meta), "ipv6")) { hints.ai_family = AF_INET6; hints.ai_flags = AI_NUMERICHOST; /* Only accept numeric hosts */ } hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */ - hints.ai_protocol = 0; /* Any protocol */ + hints.ai_protocol = 0; /* Any protocol */ s = getaddrinfo (keyString (toCheck), NULL, &hints, &result); - if ( s != 0 ) + if (s != 0) { return s; } @@ -56,16 +56,16 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) { const Key * meta = keyGetMeta (toCheck, "check/port"); const Key * listenMeta = keyGetMeta (toCheck, "check/port/listen"); - if ( !meta && !listenMeta ) return 0; /* No check to do */ + if (!meta && !listenMeta) return 0; /* No check to do */ char * endptr = NULL; long portNumber = strtol (keyString (toCheck), &endptr, 10); int portNumberNetworkByteOrder; - if ( *endptr == '\0' ) + if (*endptr == '\0') { - if ( portNumber < 0 || portNumber > 65535 ) + if (portNumber < 0 || portNumber > 65535) { - ELEKTRA_SET_ERRORF(201, parentKey, "Port %ld on key %s was not within 0 - 65535", portNumber, keyName (toCheck)); + ELEKTRA_SET_ERRORF (201, parentKey, "Port %ld on key %s was not within 0 - 65535", portNumber, keyName (toCheck)); return -1; } portNumberNetworkByteOrder = htons (portNumber); @@ -74,17 +74,17 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) { struct servent * service; service = getservbyname (keyString (toCheck), NULL); // NULL means we accept both tcp and udp - if ( service == NULL) + if (service == NULL) { - ELEKTRA_SET_ERRORF(202, parentKey, "Could not find service with name %s on key %s", keyString (toCheck), - keyName (toCheck)); + ELEKTRA_SET_ERRORF (202, parentKey, "Could not find service with name %s on key %s", keyString (toCheck), + keyName (toCheck)); return -1; } portNumberNetworkByteOrder = service->s_port; } // Check if we can connect to it - if ( !listenMeta ) return 0; /* No check to do */ + if (!listenMeta) return 0; /* No check to do */ char * hostname = "localhost"; @@ -92,13 +92,13 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) struct sockaddr_in serv_addr; struct hostent * server; sockfd = socket (AF_INET, SOCK_STREAM, 0); - if ( sockfd < 0 ) + if (sockfd < 0) { ELEKTRA_SET_ERROR (204, parentKey, "Could not open a socket"); } server = gethostbyname (hostname); - if ( server == NULL) + if (server == NULL) { ELEKTRA_SET_ERRORF (204, parentKey, "Could not connect to %s: No such host", hostname); return -1; @@ -109,7 +109,7 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) bcopy ((char *) server->h_addr, (char *) &serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = (in_port_t) portNumberNetworkByteOrder; - if ( connect (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == 0 ) + if (connect (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == 0) { close (sockfd); ELEKTRA_SET_ERRORF (203, parentKey, "Port %s is already in use which was specified on key %s", keyString (toCheck), @@ -126,15 +126,13 @@ int elektraNetworkGet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * /* configuration only */ KeySet * n; ksAppend (returned, - n = ksNew (30, - keyNew ("system/elektra/modules/network", KEY_VALUE, "network plugin waits for your orders", KEY_END), + n = ksNew (30, keyNew ("system/elektra/modules/network", KEY_VALUE, "network plugin waits for your orders", KEY_END), keyNew ("system/elektra/modules/network/exports", KEY_END), keyNew ("system/elektra/modules/network/exports/get", KEY_FUNC, elektraNetworkGet, KEY_END), keyNew ("system/elektra/modules/network/exports/set", KEY_FUNC, elektraNetworkSet, KEY_END), keyNew ("system/elektra/modules/network/exports/elektraNetworkAddrInfo", KEY_FUNC, elektraNetworkAddrInfo, KEY_END), - keyNew ("system/elektra/modules/network/exports/elektraPortInfo", KEY_FUNC, elektraNetworkAddrInfo, - KEY_END), + keyNew ("system/elektra/modules/network/exports/elektraPortInfo", KEY_FUNC, elektraNetworkAddrInfo, KEY_END), #include "readme_network.c" @@ -152,7 +150,7 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * while ((cur = ksNext (returned)) != 0) { int s = elektraNetworkAddrInfo (cur); - if ( s != 0 ) + if (s != 0) { const char * gaimsg = gai_strerror (s); char * errmsg = elektraMalloc (strlen (gaimsg) + keyGetNameSize (cur) + keyGetValueSize (cur) + @@ -168,7 +166,7 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * return -1; } int p = elektraPortInfo (cur, parentKey); - if ( p != 0 ) + if (p != 0) { return -1; } From 5220150053d115a7c1a39f5ba8d0b4899c9ec8ad Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Fri, 5 Oct 2018 10:51:19 +0200 Subject: [PATCH 16/23] testFix --- src/plugins/network/testmod_network.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index a2520f94878..6047eafc2a4 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -79,6 +79,6 @@ static void testPorts (void) testPortAny ("myInvalidServiceName", -1); // These tests aren't portable I guess - testListenPortAny ("http", -1); + // testListenPortAny ("http", -1); testListenPortAny ("8080", 1); } From e6d5926807c5815fa3035c482e4ed5f182784a84 Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Thu, 4 Oct 2018 21:29:38 +0200 Subject: [PATCH 17/23] plugin: Formatting fixes for port --- src/plugins/network/network.c | 91 +++++++++++++++------------ src/plugins/network/network.h | 4 +- src/plugins/network/testmod_network.c | 38 +++++------ 3 files changed, 73 insertions(+), 60 deletions(-) diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index c8130ff19b7..91ab9a0c651 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -9,7 +9,9 @@ #include "network.h" #ifndef HAVE_KDBCONFIG + #include "kdbconfig.h" + #endif /* Obtain address(es) matching host/port */ @@ -50,66 +52,71 @@ int elektraNetworkAddrInfo (Key * toCheck) return 0; } -int elektraPortInfo(Key * toCheck, Key * parentKey) { +int elektraPortInfo (Key * toCheck, Key * parentKey) +{ const Key * meta = keyGetMeta (toCheck, "check/port"); const Key * listenMeta = keyGetMeta (toCheck, "check/port/listen"); if (!meta && !listenMeta) return 0; /* No check to do */ - char *endptr = NULL; - long portNumber = strtol(keyString(toCheck), &endptr, 10); + char * endptr = NULL; + long portNumber = strtol (keyString (toCheck), &endptr, 10); int portNumberNetworkByteOrder; - if (*endptr == '\0') { - if (portNumber < 0 || portNumber > 65535) { - ELEKTRA_SET_ERRORF(201, parentKey, "Port %ld on key %s was not within 0 - 65535", - portNumber, keyName(toCheck)); + if (*endptr == '\0') + { + if (portNumber < 0 || portNumber > 65535) + { + ELEKTRA_SET_ERRORF (201, parentKey, "Port %ld on key %s was not within 0 - 65535", portNumber, keyName (toCheck)); return -1; } - portNumberNetworkByteOrder = htons(portNumber); - } else { - struct servent* service; - service = getservbyname(keyString(toCheck), NULL); //NULL means we accept both tcp and udp - if (service == NULL) { - ELEKTRA_SET_ERRORF(202, parentKey, "Could not find service with name %s on key %s", - keyString(toCheck), keyName(toCheck)); + portNumberNetworkByteOrder = htons (portNumber); + } + else + { + struct servent * service; + service = getservbyname (keyString (toCheck), NULL); // NULL means we accept both tcp and udp + if (service == NULL) + { + ELEKTRA_SET_ERRORF (202, parentKey, "Could not find service with name %s on key %s", keyString (toCheck), + keyName (toCheck)); return -1; } portNumberNetworkByteOrder = service->s_port; } - //Check if we can connect to it + // Check if we can connect to it if (!listenMeta) return 0; /* No check to do */ - char *hostname = "localhost"; + char * hostname = "localhost"; int sockfd; struct sockaddr_in serv_addr; - struct hostent *server; - sockfd = socket(AF_INET, SOCK_STREAM, 0); - if (sockfd < 0) { - ELEKTRA_SET_ERROR(204, parentKey, "Could not open a socket"); + struct hostent * server; + sockfd = socket (AF_INET, SOCK_STREAM, 0); + if (sockfd < 0) + { + ELEKTRA_SET_ERROR (204, parentKey, "Could not open a socket"); } - server = gethostbyname(hostname); - if (server == NULL) { - ELEKTRA_SET_ERRORF(204, parentKey, "Could not connect to %s: No such host", - hostname); + server = gethostbyname (hostname); + if (server == NULL) + { + ELEKTRA_SET_ERRORF (204, parentKey, "Could not connect to %s: No such host", hostname); return -1; } - bzero((char *) &serv_addr, sizeof(serv_addr)); + bzero ((char *) &serv_addr, sizeof (serv_addr)); serv_addr.sin_family = AF_INET; - bcopy((char *)server->h_addr, - (char *)&serv_addr.sin_addr.s_addr, - server->h_length); + bcopy ((char *) server->h_addr, (char *) &serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = (in_port_t) portNumberNetworkByteOrder; - if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) == 0) { - close(sockfd); - ELEKTRA_SET_ERRORF(203, parentKey, "Port %s is already in use which was specified on key %s", - keyString(toCheck), keyName(toCheck)); + if (connect (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == 0) + { + close (sockfd); + ELEKTRA_SET_ERRORF (203, parentKey, "Port %s is already in use which was specified on key %s", keyString (toCheck), + keyName (toCheck)); return -1; } - close(sockfd); + close (sockfd); return 0; } @@ -125,9 +132,10 @@ int elektraNetworkGet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * keyNew ("system/elektra/modules/network/exports/set", KEY_FUNC, elektraNetworkSet, KEY_END), keyNew ("system/elektra/modules/network/exports/elektraNetworkAddrInfo", KEY_FUNC, elektraNetworkAddrInfo, KEY_END), - keyNew ("system/elektra/modules/network/exports/elektraPortInfo", KEY_FUNC, elektraNetworkAddrInfo, - KEY_END), + keyNew ("system/elektra/modules/network/exports/elektraPortInfo", KEY_FUNC, elektraNetworkAddrInfo, KEY_END), + #include "readme_network.c" + keyNew ("system/elektra/modules/network/infos/version", KEY_VALUE, PLUGINVERSION, KEY_END), KS_END)); ksDel (n); @@ -157,8 +165,9 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * elektraFree (errmsg); return -1; } - int p = elektraPortInfo(cur, parentKey); - if (p != 0) { + int p = elektraPortInfo (cur, parentKey); + if (p != 0) + { return -1; } } @@ -169,9 +178,9 @@ int elektraNetworkSet (Plugin * handle ELEKTRA_UNUSED, KeySet * returned, Key * Plugin * ELEKTRA_PLUGIN_EXPORT (network) { // clang-format off - return elektraPluginExport("network", - ELEKTRA_PLUGIN_GET, &elektraNetworkGet, - ELEKTRA_PLUGIN_SET, &elektraNetworkSet, - ELEKTRA_PLUGIN_END); + return elektraPluginExport ("network", + ELEKTRA_PLUGIN_GET, &elektraNetworkGet, + ELEKTRA_PLUGIN_SET, &elektraNetworkSet, + ELEKTRA_PLUGIN_END); } diff --git a/src/plugins/network/network.h b/src/plugins/network/network.h index 5baf1a7bac2..2edd2d1f16e 100644 --- a/src/plugins/network/network.h +++ b/src/plugins/network/network.h @@ -21,9 +21,11 @@ #include int elektraNetworkAddrInfo (Key * toCheck); -int elektraPortInfo(Key * toCheck, Key * parentKey); + +int elektraPortInfo (Key * toCheck, Key * parentKey); int elektraNetworkGet (Plugin * handle, KeySet * ks, Key * parentKey); + int elektraNetworkSet (Plugin * handle, KeySet * ks, Key * parentKey); Plugin * ELEKTRA_PLUGIN_EXPORT (network); diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index f3f51ca9166..6047eafc2a4 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -7,7 +7,9 @@ */ #ifdef HAVE_KDBCONFIG_H + #include "kdbconfig.h" + #endif #include @@ -18,7 +20,7 @@ #define PLUGIN_NAME "network" -static void testPorts() ; +static void testPorts (void); #include "../ipaddr/test_ipaddr.h" @@ -46,7 +48,7 @@ static void testPort (char const * const port, const int ret, char const * const const int pluginStatus = plugin->kdbSet (plugin, ks, parentKey); char message[200]; (void) snprintf (message, 200, "validation of %s “%s” returned %d instead of %d", version[0] == '\0' ? "Port" : version, port, - pluginStatus, ret); + pluginStatus, ret); succeed_if (pluginStatus == ret, message); ksDel (ks); keyDel (parentKey); @@ -63,20 +65,20 @@ static inline void testListenPortAny (char const * const port, int ret) testPort (port, ret, "", "check/port/listen"); } -static void testPorts() { - testPortAny("0", 1); - testPortAny("1234", 1); - testPortAny("65535", 1); - testPortAny("ssh", 1); - testPortAny("https", 1); - - testPortAny("65536", -1); - testPortAny("-1", -1); - testPortAny("22d", -1); - testPortAny("myInvalidServiceName", -1); - - //These tests aren't portable I guess - testListenPortAny("http", -1); - testListenPortAny("8080", 1); - +static void testPorts (void) +{ + testPortAny ("0", 1); + testPortAny ("1234", 1); + testPortAny ("65535", 1); + testPortAny ("ssh", 1); + testPortAny ("https", 1); + + testPortAny ("65536", -1); + testPortAny ("-1", -1); + testPortAny ("22d", -1); + testPortAny ("myInvalidServiceName", -1); + + // These tests aren't portable I guess + // testListenPortAny ("http", -1); + testListenPortAny ("8080", 1); } From 6a90152b1f670a8e97b44568db4d268bbce1907f Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Sat, 13 Oct 2018 16:20:09 +0200 Subject: [PATCH 18/23] network: reduced error messages in specification, changed connect call to bind call --- src/error/specification | 20 +------------------- src/plugins/network/network.c | 29 +++++++++++++++++++++-------- 2 files changed, 22 insertions(+), 27 deletions(-) diff --git a/src/error/specification b/src/error/specification index 21c250e94ac..08418aa6230 100644 --- a/src/error/specification +++ b/src/error/specification @@ -1260,25 +1260,7 @@ module:gpgme macro:GPGME_INVALID_RECIPIENT number:201 -description:The given port was not withing a valid range -severity:error -ingroup:plugin -module:network - -number:202 -description:Could not find service name for port declaration -severity:error -ingroup:plugin -module:network - -number:203 -description:Could not use port as it is already in use -severity:error -ingroup:plugin -module:network - -number:204 -description:Connection Error occured +description:Connection Error occurred severity:error ingroup:plugin module:network \ No newline at end of file diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index 91ab9a0c651..b512124a6bc 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -65,7 +65,7 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) { if (portNumber < 0 || portNumber > 65535) { - ELEKTRA_SET_ERRORF (201, parentKey, "Port %ld on key %s was not within 0 - 65535", portNumber, keyName (toCheck)); + ELEKTRA_SET_ERRORF (171, parentKey, "Port %ld on key %s was not within 0 - 65535", portNumber, keyName (toCheck)); return -1; } portNumberNetworkByteOrder = htons (portNumber); @@ -76,7 +76,7 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) service = getservbyname (keyString (toCheck), NULL); // NULL means we accept both tcp and udp if (service == NULL) { - ELEKTRA_SET_ERRORF (202, parentKey, "Could not find service with name %s on key %s", keyString (toCheck), + ELEKTRA_SET_ERRORF (204, parentKey, "Could not find service with name %s on key %s", keyString (toCheck), keyName (toCheck)); return -1; } @@ -94,25 +94,38 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) sockfd = socket (AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { - ELEKTRA_SET_ERROR (204, parentKey, "Could not open a socket"); + ELEKTRA_SET_ERRORF (201, parentKey, "Could not open a socket: %s", strerror (errno)); } server = gethostbyname (hostname); - if (server == NULL) + if ( server == NULL ) { - ELEKTRA_SET_ERRORF (204, parentKey, "Could not connect to %s: No such host", hostname); - return -1; + if ( errno == HOST_NOT_FOUND ) + { + ELEKTRA_SET_ERRORF (201, parentKey, "Could not connect to %s: No such host", hostname); + return -1; + } + else + { + ELEKTRA_SET_ERRORF (201, parentKey, "There was an error when trying to connect to host %s . errno: %s", + hostname, strerror(errno)); + return -1; + } + //TODO: Maybe consider errno == TRY_AGAIN seperately and try to reconnect } + + + bzero ((char *) &serv_addr, sizeof (serv_addr)); serv_addr.sin_family = AF_INET; bcopy ((char *) server->h_addr, (char *) &serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = (in_port_t) portNumberNetworkByteOrder; - if (connect (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == 0) + if (bind (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == 0) { close (sockfd); - ELEKTRA_SET_ERRORF (203, parentKey, "Port %s is already in use which was specified on key %s", keyString (toCheck), + ELEKTRA_SET_ERRORF (201, parentKey, "Port %s is already in use which was specified on key %s", keyString (toCheck), keyName (toCheck)); return -1; } From 02451d9d038244c3d0a8cd9338ac6fa939d37a12 Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Sat, 13 Oct 2018 16:33:41 +0200 Subject: [PATCH 19/23] network: correct bind error return handling --- src/plugins/network/network.c | 28 ++++++++++++++++----------- src/plugins/network/testmod_network.c | 3 +-- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index b512124a6bc..69245b4f53d 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -76,7 +76,7 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) service = getservbyname (keyString (toCheck), NULL); // NULL means we accept both tcp and udp if (service == NULL) { - ELEKTRA_SET_ERRORF (204, parentKey, "Could not find service with name %s on key %s", keyString (toCheck), + ELEKTRA_SET_ERRORF (201, parentKey, "Could not find service with name %s on key %s", keyString (toCheck), keyName (toCheck)); return -1; } @@ -98,35 +98,41 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) } server = gethostbyname (hostname); - if ( server == NULL ) + if (server == NULL) { - if ( errno == HOST_NOT_FOUND ) + if (errno == HOST_NOT_FOUND) { ELEKTRA_SET_ERRORF (201, parentKey, "Could not connect to %s: No such host", hostname); return -1; } else { - ELEKTRA_SET_ERRORF (201, parentKey, "There was an error when trying to connect to host %s . errno: %s", - hostname, strerror(errno)); + ELEKTRA_SET_ERRORF (201, parentKey, "There was an error when trying to connect to host %s . errno: %s", hostname, + strerror (errno)); return -1; } - //TODO: Maybe consider errno == TRY_AGAIN seperately and try to reconnect + // TODO: Maybe consider errno == TRY_AGAIN seperately and try to reconnect } - - bzero ((char *) &serv_addr, sizeof (serv_addr)); serv_addr.sin_family = AF_INET; bcopy ((char *) server->h_addr, (char *) &serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = (in_port_t) portNumberNetworkByteOrder; - if (bind (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) == 0) + if (bind (sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) < 0) { close (sockfd); - ELEKTRA_SET_ERRORF (201, parentKey, "Port %s is already in use which was specified on key %s", keyString (toCheck), - keyName (toCheck)); + if (errno == EADDRINUSE) + { + ELEKTRA_SET_ERRORF (201, parentKey, "Port %s is already in use which was specified on key %s", keyString (toCheck), + keyName (toCheck)); + } + else + { + ELEKTRA_SET_ERRORF (201, parentKey, "Could not bind to port %s which was specified on key %s. Reason: %s", + keyString (toCheck), keyName (toCheck), strerror (errno)); + } return -1; } close (sockfd); diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index 6047eafc2a4..5bb66d97ba2 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -79,6 +79,5 @@ static void testPorts (void) testPortAny ("myInvalidServiceName", -1); // These tests aren't portable I guess - // testListenPortAny ("http", -1); - testListenPortAny ("8080", 1); + testListenPortAny ("62493", 1); } From 27b216eae60bbedae00c886bd7c8457b6f64817a Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Sat, 13 Oct 2018 16:44:59 +0200 Subject: [PATCH 20/23] network: removed confusing comment --- src/plugins/network/network.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index 69245b4f53d..32fd414b8a6 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -83,7 +83,6 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) portNumberNetworkByteOrder = service->s_port; } - // Check if we can connect to it if (!listenMeta) return 0; /* No check to do */ char * hostname = "localhost"; From ad43a1869474fa3cd7e41e0e920d350d5337f26e Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Fri, 11 Jan 2019 18:41:37 +0100 Subject: [PATCH 21/23] network-plugin: After merge fix for elektra set error --- src/error/specification | 1 - src/plugins/network/network.c | 12 ++++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/error/specification b/src/error/specification index de7838c9285..0adab3b87b0 100644 --- a/src/error/specification +++ b/src/error/specification @@ -1265,7 +1265,6 @@ severity:warning ingroup:plugin module:reference macro:REFERENCE_REDUNDANT -<<<<<<< HEAD number:202 description:The constructed reference graph contains cycles. diff --git a/src/plugins/network/network.c b/src/plugins/network/network.c index 32fd414b8a6..947b1e796bb 100644 --- a/src/plugins/network/network.c +++ b/src/plugins/network/network.c @@ -76,7 +76,7 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) service = getservbyname (keyString (toCheck), NULL); // NULL means we accept both tcp and udp if (service == NULL) { - ELEKTRA_SET_ERRORF (201, parentKey, "Could not find service with name %s on key %s", keyString (toCheck), + ELEKTRA_SET_ERRORF (205, parentKey, "Could not find service with name %s on key %s", keyString (toCheck), keyName (toCheck)); return -1; } @@ -93,7 +93,7 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) sockfd = socket (AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { - ELEKTRA_SET_ERRORF (201, parentKey, "Could not open a socket: %s", strerror (errno)); + ELEKTRA_SET_ERRORF (205, parentKey, "Could not open a socket: %s", strerror (errno)); } server = gethostbyname (hostname); @@ -101,12 +101,12 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) { if (errno == HOST_NOT_FOUND) { - ELEKTRA_SET_ERRORF (201, parentKey, "Could not connect to %s: No such host", hostname); + ELEKTRA_SET_ERRORF (205, parentKey, "Could not connect to %s: No such host", hostname); return -1; } else { - ELEKTRA_SET_ERRORF (201, parentKey, "There was an error when trying to connect to host %s . errno: %s", hostname, + ELEKTRA_SET_ERRORF (205, parentKey, "There was an error when trying to connect to host %s . errno: %s", hostname, strerror (errno)); return -1; } @@ -124,12 +124,12 @@ int elektraPortInfo (Key * toCheck, Key * parentKey) close (sockfd); if (errno == EADDRINUSE) { - ELEKTRA_SET_ERRORF (201, parentKey, "Port %s is already in use which was specified on key %s", keyString (toCheck), + ELEKTRA_SET_ERRORF (205, parentKey, "Port %s is already in use which was specified on key %s", keyString (toCheck), keyName (toCheck)); } else { - ELEKTRA_SET_ERRORF (201, parentKey, "Could not bind to port %s which was specified on key %s. Reason: %s", + ELEKTRA_SET_ERRORF (205, parentKey, "Could not bind to port %s which was specified on key %s. Reason: %s", keyString (toCheck), keyName (toCheck), strerror (errno)); } return -1; From 7cd5e4a97f3b0f21241cafc28fa5401bbda2ed2e Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Fri, 11 Jan 2019 19:34:37 +0100 Subject: [PATCH 22/23] network: Removed fragile test and added comment for it --- src/plugins/network/testmod_network.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index 5bb66d97ba2..89c6fb45487 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -78,6 +78,8 @@ static void testPorts (void) testPortAny ("22d", -1); testPortAny ("myInvalidServiceName", -1); - // These tests aren't portable I guess - testListenPortAny ("62493", 1); + // Tests for ListenPort are not portable, even system ports in a range from 1-1000 can some short time be reachable + // https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers + // Use such tests only locally if you are certain that some ports are actually in use +// testListenPortAny ("22", 1); } From aab722674bb518ccd507b3b786fabac0b5fd2d91 Mon Sep 17 00:00:00 2001 From: Michael Zronek Date: Fri, 11 Jan 2019 19:40:01 +0100 Subject: [PATCH 23/23] network: Clang formatting errors --- src/plugins/network/testmod_network.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/network/testmod_network.c b/src/plugins/network/testmod_network.c index 89c6fb45487..4b25da2c9de 100644 --- a/src/plugins/network/testmod_network.c +++ b/src/plugins/network/testmod_network.c @@ -81,5 +81,5 @@ static void testPorts (void) // Tests for ListenPort are not portable, even system ports in a range from 1-1000 can some short time be reachable // https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers // Use such tests only locally if you are certain that some ports are actually in use -// testListenPortAny ("22", 1); + // testListenPortAny ("22", 1); }