Commit bd7db5bd authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Add "platform" to router descriptors.


svn:r522
parent 8551509d
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -3,6 +3,9 @@
/* $Id$ */

#include "or.h"
#ifdef HAVE_UNAME
#include <sys/utsname.h>
#endif

/********* START PROTOTYPES **********/

@@ -672,11 +675,28 @@ static void dumpstats(void) { /* dump stats to stdout */
  }
}

static void get_platform_str(char *platform, int len)
{
#ifdef HAVE_UNAME
  struct utsname u;
  if (!uname(&u)) {
    snprintf(platform, len-1, "Tor %s on %s %s %s %s %s",
             VERSION, u.sysname, u.nodename, u.release, u.version, u.machine);
    platform[len-1] = '\0';
    return;
  } else
#endif
    {
      snprintf(platform, len-1, "Tor %s", VERSION);
    }
}

int dump_router_to_string(char *s, int maxlen, routerinfo_t *router,
                          crypto_pk_env_t *ident_key) {
  char *onion_pkey;
  char *link_pkey;
  char *identity_pkey;
  char platform[256];
  char digest[20];
  char signature[128];
  char published[32];
@@ -685,6 +705,8 @@ int dump_router_to_string(char *s, int maxlen, routerinfo_t *router,
  int result=0;
  struct exit_policy_t *tmpe;
  
  get_platform_str(platform, 256);

  if(crypto_pk_write_public_key_to_string(router->onion_pkey,
                                          &onion_pkey,&onion_pkeylen)<0) {
    log_fn(LOG_WARNING,"write onion_pkey to string failed!");
@@ -706,6 +728,7 @@ int dump_router_to_string(char *s, int maxlen, routerinfo_t *router,
  
  result = snprintf(s, maxlen, 
                    "router %s %s %d %d %d %d\n"
                    "platform %s\n"
                    "published %s\n"
                    "onion-key\n%s"
                    "link-key\n%s"
@@ -716,6 +739,7 @@ int dump_router_to_string(char *s, int maxlen, routerinfo_t *router,
    router->ap_port,
    router->dir_port,
    router->bandwidth,
    platform,
    published,
    onion_pkey, link_pkey, identity_pkey);

+8 −0
Original line number Diff line number Diff line
@@ -275,6 +275,7 @@ typedef enum {
  K_ROUTER_SIGNATURE,
  K_PUBLISHED,
  K_RUNNING_ROUTERS,
  K_PLATFORM,
  _SIGNATURE, 
  _PUBLIC_KEY, 
  _ERR, 
@@ -296,6 +297,7 @@ static struct token_table_ent token_table[] = {
  { "router-signature", K_ROUTER_SIGNATURE },
  { "published", K_PUBLISHED },
  { "running-routers", K_RUNNING_ROUTERS },
  { "platform", K_PLATFORM },
  { NULL, -1 }
};

@@ -453,6 +455,7 @@ router_dump_token(directory_token_t *tok) {
    case K_ROUTER_SIGNATURE: printf("Router-signature"); break;
    case K_PUBLISHED: printf("Published"); break;
    case K_RUNNING_ROUTERS: printf("Running-routers"); break;
    case K_PLATFORM: printf("Platform"); break;
    default:
      printf("?????? %d\n", tok->tp); return;
    }
@@ -886,7 +889,12 @@ routerinfo_t *router_get_entry_from_string(char**s) {
  log_fn(LOG_DEBUG,"or_port %d, ap_port %d, dir_port %d, bandwidth %d.",
    router->or_port, router->ap_port, router->dir_port, router->bandwidth);

  /* XXX Later, require platform before published. */
  NEXT_TOKEN();
  if (tok->tp == K_PLATFORM) {
    NEXT_TOKEN();
  }
  
  if (tok->tp != K_PUBLISHED) {
    log_fn(LOG_WARNING, "Missing published time"); goto err;
  }