novi upstream verzije 2.8.3
[ossec-hids.git] / src / os_auth / main-client.c
index 4312521..6397ea3 100755 (executable)
@@ -59,16 +59,20 @@ void report_help()
 
 int main(int argc, char **argv)
 {
-    int c, test_config = 0;
+    int c;
+    // TODO: implement or delete
+    int test_config __attribute__((unused)) = 0;
     #ifndef WIN32
     int gid = 0;
     #endif
 
     int sock = 0, port = 1515, ret = 0;
-    char *dir  = DEFAULTDIR;
+    // TODO: implement or delete
+    char *dir __attribute__((unused)) = DEFAULTDIR;
     char *user = USER;
     char *group = GROUPGLOBAL;
-    char *cfg = DEFAULTCPATH;
+    // TODO: implement or delete
+    char *cfg __attribute__((unused)) = DEFAULTCPATH;
     char *manager = NULL;
     char *agentname = NULL;
     char lhostname[512 + 1];
@@ -157,7 +161,7 @@ int main(int argc, char **argv)
 
 
 
-    /* Privilege separation */ 
+    /* Privilege separation */
     if(Privsep_SetGroup(gid) < 0)
         ErrorExit(SETGID_ERROR,ARGV0,group);
 
@@ -191,7 +195,7 @@ int main(int argc, char **argv)
 
 
 
-    /* Starting SSL */ 
+    /* Starting SSL */
     ctx = os_ssl_keys(1, NULL);
     if(!ctx)
     {
@@ -206,6 +210,41 @@ int main(int argc, char **argv)
     }
 
 
+    /* Check to see if manager is an IP */
+    int is_ip = 1;
+    struct sockaddr_in iptest;
+    memset(&iptest, 0, sizeof(iptest));
+
+    if(inet_pton(AF_INET, manager, &iptest.sin_addr) != 1)
+      is_ip = 0;       /* This is not an IPv4 address */
+
+    /* Not IPv4, IPv6 maybe? */
+    if(is_ip == 0)
+    {
+        struct sockaddr_in6 iptest6;
+        memset(&iptest6, 0, sizeof(iptest6));
+        if(inet_pton(AF_INET6, manager, &iptest6.sin6_addr) != 1)
+            is_ip = 0;
+        else
+            is_ip = 1; /* This is an IPv6 address */
+    }
+
+
+    /* If it isn't an ip, try to resolve the IP */
+    if(is_ip == 0)
+    {
+        char *ipaddress;
+        ipaddress = OS_GetHost(manager, 3);
+        if(ipaddress != NULL)
+          strncpy(manager, ipaddress, 16);
+        else
+        {
+          printf("Could not resolve hostname: %s\n", manager);
+          return(1);
+        }
+    }
+
+
     /* Connecting via TCP */
     sock = OS_ConnectTCP(port, manager, 0);
     if(sock <= 0)