gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r21344 - gnunet/src/gns/nss


From: gnunet
Subject: [GNUnet-SVN] r21344 - gnunet/src/gns/nss
Date: Tue, 8 May 2012 17:11:29 +0200

Author: schanzen
Date: 2012-05-08 17:11:29 +0200 (Tue, 08 May 2012)
New Revision: 21344

Added:
   gnunet/src/gns/nss/query.c
Modified:
   gnunet/src/gns/nss/Makefile.am
   gnunet/src/gns/nss/nss_gns.c
   gnunet/src/gns/nss/query.h
Log:
-preliminary nss plugin AKA works for me


Modified: gnunet/src/gns/nss/Makefile.am
===================================================================
--- gnunet/src/gns/nss/Makefile.am      2012-05-08 13:37:38 UTC (rev 21343)
+++ gnunet/src/gns/nss/Makefile.am      2012-05-08 15:11:29 UTC (rev 21344)
@@ -31,11 +31,11 @@
        libnss_gns4.la \
        libnss_gns6.la
 
-sources = util.c util.h query.h
+sources = util.c util.h query.h query.c
 
 # GNU Libc
 libnss_gns_la_SOURCES= $(sources) nss_gns.c
-libnss_gns_la_CFLAGS=$(AM_CFLAGS) 
+libnss_gns_la_CFLAGS=$(AM_CFLAGS) -D_GNU_SOURCE
 libnss_gns_la_LDFLAGS=$(AM_LDFLAGS) -shrext .so.2 
-Wl,-version-script=$(srcdir)/map-file
 
 libnss_gns4_la_SOURCES=$(libnss_gns_la_SOURCES)

Modified: gnunet/src/gns/nss/nss_gns.c
===================================================================
--- gnunet/src/gns/nss/nss_gns.c        2012-05-08 13:37:38 UTC (rev 21343)
+++ gnunet/src/gns/nss/nss_gns.c        2012-05-08 15:11:29 UTC (rev 21344)
@@ -32,53 +32,29 @@
 
 #include "query.h"
 
-#ifdef NSS_IPV4_ONLY
-#define _nss_mdns_gethostbyname2_r _nss_gns4_minimal_gethostbyname2_r
-#define _nss_mdns_gethostbyname_r  _nss_gns4_minimal_gethostbyname_r
-#define _nss_mdns_gethostbyaddr_r  _nss_gns4_minimal_gethostbyaddr_r
-#endif
+#include <arpa/inet.h>
 
-#ifdef NSS_IPV6_ONLY
-#define _nss_mdns_gethostbyname2_r _nss_gns6_gethostbyname2_r
-#define _nss_mdns_gethostbyname_r  _nss_gns6_gethostbyname_r
-#define _nss_mdns_gethostbyaddr_r  _nss_gns6_gethostbyaddr_r
-#endif
-
-#ifndef NSS_IPV4_ONLY
-#ifndef NSS_IPV6_ONLY
-#define _nss_mdns_gethostbyname2_r _nss_gns_gethostbyname2_r
-#define _nss_mdns_gethostbyname_r  _nss_gns_gethostbyname_r
-#define _nss_mdns_gethostbyaddr_r  _nss_gns_gethostbyaddr_r
-#endif
-#endif
-
-/* Maximum number of entries to return */
-#define MAX_ENTRIES 16
-
 #define ALIGN(idx) do { \
   if (idx % sizeof(void*)) \
     idx += (sizeof(void*) - idx % sizeof(void*)); /* Align on 32 bit boundary 
*/ \
 } while(0)
 
-struct userdata {
-    int count;
-    int data_len; /* only valid when doing reverse lookup */
-    union  {
-        ipv4_address_t ipv4[MAX_ENTRIES];
-        ipv6_address_t ipv6[MAX_ENTRIES];
-        char *name[MAX_ENTRIES];
-    } data;
-};
-
 #ifndef NSS_IPV6_ONLY
 static void ipv4_callback(const ipv4_address_t *ipv4, void *userdata) {
     struct userdata *u = userdata;
-    assert(ipv4 && userdata);
+    
+    /*test!*/
+    ipv4_address_t *ipv4_test;
+    struct in_addr testaddr;
+    inet_pton(AF_INET, "5.5.5.5", &testaddr);
+    ipv4_test = (ipv4_address_t *)&testaddr;
+    /*test!*/
+    /*assert(ipv4 && userdata);*/
 
     if (u->count >= MAX_ENTRIES)
         return;
 
-    u->data.ipv4[u->count++] = *ipv4;
+    u->data.ipv4[u->count++] = *ipv4_test;
     u->data_len += sizeof(ipv4_address_t);
 }
 #endif
@@ -135,9 +111,9 @@
     enum nss_status status = NSS_STATUS_UNAVAIL;
     int i;
     size_t address_length, l, idx, astart;
-    void (*ipv4_func)(const ipv4_address_t *ipv4, void *userdata);
-    void (*ipv6_func)(const ipv6_address_t *ipv6, void *userdata);
     int name_allowed;
+    
+    printf("v6: %d\n", af == AF_INET6);
 
     if (af == AF_UNSPEC)
 #ifdef NSS_IPV6_ONLY
@@ -175,43 +151,25 @@
     u.count = 0;
     u.data_len = 0;
 
-#ifdef NSS_IPV6_ONLY
-    ipv4_func = NULL;
-#else
-    ipv4_func = af == AF_INET ? ipv4_callback : NULL;
-#endif
-
-#ifdef NSS_IPV4_ONLY
-    ipv6_func = NULL;
-#else
-    ipv6_func = af == AF_INET6 ? ipv6_callback : NULL;
-#endif
-
-#ifdef ENABLE_GNS
     name_allowed = verify_name_allowed(name);
     
-    if (gns_works && name_allowed) {
-        int r;
+    if (name_allowed) {
 
-        if ((r = gns_resolve_name(af, name, data)) < 0)
-            gns_works = 0;
-        else if (r == 0) {
-            if (af == AF_INET && ipv4_func)
-                ipv4_func((ipv4_address_t*) data, &u);
-            if (af == AF_INET6 && ipv6_func)
-                ipv6_func((ipv6_address_t*)data, &u);
+        if (gns_resolve_name(af, name, &u) == 0)
+        {
+            printf("GNS success\n");
         } else
             status = NSS_STATUS_NOTFOUND;
     }
 
-#endif /* ENABLE_GNS */
-
     if (u.count == 0) {
         *errnop = ETIMEDOUT;
         *h_errnop = HOST_NOT_FOUND;
+        printf("not found\n");
         goto finish;
     }
-    
+
+        
     /* Alias names */
     *((char**) buffer) = NULL;
     result->h_aliases = (char**) buffer;
@@ -285,17 +243,11 @@
 
     /* we dont do this */
     
-    struct userdata u;
     enum nss_status status = NSS_STATUS_UNAVAIL;
-    int r;
-    size_t address_length, idx, astart;
     
     *errnop = EINVAL;
     *h_errnop = NO_RECOVERY;
 
-    u.count = 0;
-    u.data_len = 0;
-
     /* Check for address types */
 
     *h_errnop = NO_RECOVERY;

Added: gnunet/src/gns/nss/query.c
===================================================================
--- gnunet/src/gns/nss/query.c                          (rev 0)
+++ gnunet/src/gns/nss/query.c  2012-05-08 15:11:29 UTC (rev 21344)
@@ -0,0 +1,49 @@
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "query.h"
+#include <arpa/inet.h>
+
+int gns_resolve_name(int af, const char *name, struct userdata *u)
+{
+  FILE *p;
+  char *cmd;
+  char line[128];
+
+  if (af == AF_INET6)
+    asprintf(&cmd, "%s -t AAAA -u %s\n", "gnunet-gns -r", name);
+  else
+    asprintf(&cmd, "%s %s\n", "gnunet-gns -r -u", name);
+
+  p = popen(cmd,"r");
+
+  if (p != NULL )
+  {
+    while (fgets( line, sizeof(line), p ) != NULL)
+    {
+
+      if (u->count >= MAX_ENTRIES)
+        break;
+
+      if (line[strlen(line)-1] == '\n')
+      {
+        line[strlen(line)-1] = '\0';
+        if (af == AF_INET)
+        {
+          inet_pton(af, line, &(u->data.ipv4[u->count++]));
+          u->data_len += sizeof(ipv4_address_t);
+        }
+        else if ((af == AF_INET6))
+        {
+          inet_pton(af, line, &(u->data.ipv6[u->count++]));
+          u->data_len += sizeof(ipv6_address_t);
+        }
+      }
+    }
+  }
+  fclose(p);
+  free(cmd);
+
+  return 0;
+
+}

Modified: gnunet/src/gns/nss/query.h
===================================================================
--- gnunet/src/gns/nss/query.h  2012-05-08 13:37:38 UTC (rev 21343)
+++ gnunet/src/gns/nss/query.h  2012-05-08 15:11:29 UTC (rev 21344)
@@ -24,6 +24,9 @@
 
 #include <inttypes.h>
 
+/* Maximum number of entries to return */
+#define MAX_ENTRIES 16
+
 typedef struct {
     uint32_t address;
 } ipv4_address_t;
@@ -32,25 +35,19 @@
     uint8_t address[16];
 } ipv6_address_t;
 
-int gns_open_socket(void);
 
-int gns_query_name(int fd,
+struct userdata {
+  int count;
+  int data_len; /* only valid when doing reverse lookup */
+  union  {
+      ipv4_address_t ipv4[MAX_ENTRIES];
+      ipv6_address_t ipv6[MAX_ENTRIES];
+      char *name[MAX_ENTRIES];
+  } data;
+};
+
+int gns_resolve_name(int af,
                const char *name,
-               void (*ipv4_func)(const ipv4_address_t *ipv4, void *userdata),
-               void (*ipv6_func)(const ipv6_address_t *ipv6, void *userdata),
-               void *userdata);
+               struct userdata *userdata);
 
-#ifndef NSS_IPV6_ONLY
-int gns_query_ipv4(int fd,
-               const ipv4_address_t *ipv4,
-               void (*name_func)(const char *name, void *userdata),
-               void *userdata);
 #endif
-#ifndef NSS_IPV4_ONLY
-int gns_query_ipv6(int fd,
-               const ipv6_address_t *ipv6,
-               void (*name_func)(const char *name, void *userdata),
-               void *userdata);
-#endif
-
-#endif




reply via email to

[Prev in Thread] Current Thread [Next in Thread]