Merge pull request #73 from painless-security/jennifer/expire_utc
authormrw42 <margaret@painless-security.com>
Fri, 4 May 2018 19:01:37 +0000 (15:01 -0400)
committerGitHub <noreply@github.com>
Fri, 4 May 2018 19:01:37 +0000 (15:01 -0400)
Report expiration times in UTC instead of local time

1  2 
common/tr_comm_encoders.c

  
  static json_t *expiry_to_json_string(TR_COMM_MEMB *memb)
  {
-   struct timespec ts_zero = {0, 0};
+   struct timespec ts = {0}; /* initialization to zero is important */
    char *s = NULL;
    json_t *jstr = NULL;
  
-   if (tr_cmp_timespec(tr_comm_memb_get_expiry(memb), &ts_zero) == 0) {
-     s = strdup("");
-   } else {
-     s = timespec_to_str(tr_comm_memb_get_expiry(memb));
-   }
+   if (tr_cmp_timespec(tr_comm_memb_get_expiry(memb), &ts) > 0) {
+     if (tr_comm_memb_get_expiry_realtime(memb, &ts) == NULL)
+       s = strdup("error");
+     else
+       s = timespec_to_str(&ts);
  
-   if (s) {
-     jstr = json_string(s);
-     free(s);
+     if (s) {
+       jstr = json_string(s);
+       free(s);
+     }
    }
  
    return jstr;
@@@ -143,10 -144,10 +144,10 @@@ static json_t *tr_comm_memb_sources_to_
      goto cleanup;
  
    /* Iterate over all the memberships for this realm/comm pair that come from different origins */
 -  memb = tr_comm_memb_iter_first(iter, first_memb);
 -  while (memb) {
 +  for (memb = tr_comm_memb_iter_first(iter, first_memb);
 +       memb != NULL;
 +       memb = tr_comm_memb_iter_next(iter)) {
      ARRAY_APPEND_OR_FAIL(jarray, tr_comm_memb_to_json(memb));
 -    memb = tr_comm_memb_iter_next(iter);
    }
  
    /* success */
@@@ -171,29 -172,23 +172,29 @@@ static json_t *tr_comm_realms_to_json(T
    TR_COMM_MEMB *memb = NULL;
  
    iter = tr_comm_iter_new(NULL);
 -  realm = tr_realm_iter_first(iter, ctable, comm_name);
 +  realm = NULL;
  
    /* Do not display the full realm json here, only the name and info relevant to the community listing */
 -  while(realm) {
 +  for (realm = tr_realm_iter_first(iter, ctable, comm_name);
 +       realm != NULL;
 +       realm = tr_realm_iter_next(iter)) {
      if (realm->role == role) {
        realm_json = json_object();
        OBJECT_SET_OR_FAIL(realm_json, "realm",
                           tr_name_to_json_string(tr_realm_get_id(realm)));
 -      memb = tr_comm_table_find_idp_memb(ctable,
 -                                         tr_realm_get_id(realm),
 -                                         comm_name);
 +      memb = tr_comm_table_find_memb(ctable,
 +                                     tr_realm_get_id(realm),
 +                                     comm_name);
 +      if (memb == NULL) {
 +        /* This should not happen - there must be a matching membership if we
 +         * believed the realm was in the community in the first place! */
 +        goto cleanup;
 +      }
        OBJECT_SET_OR_FAIL(realm_json, "sources",
                           tr_comm_memb_sources_to_json(memb));
        json_array_append_new(jarray, realm_json);
        realm_json = NULL; /* so we don't free this twice during cleanup */
      }
 -    realm = tr_realm_iter_next(iter);
    }
  
    /* Success - increment the reference count so return value survives */
@@@ -276,15 -271,15 +277,15 @@@ json_t *tr_comm_table_to_json(TR_COMM_T
      goto cleanup;
  
    /* Iterate over communities in the table */
 -  comm = tr_comm_table_iter_first(iter, ctable);
 -  while (comm) {
 +  for (comm = tr_comm_table_iter_first(iter, ctable);
 +       comm != NULL;
 +       comm = tr_comm_table_iter_next(iter)) {
      comm_json = tr_comm_to_json(ctable, comm);
  
      if (comm_json == NULL)
        goto cleanup;
  
      json_array_append_new(ctable_json, comm_json);
 -    comm = tr_comm_table_iter_next(iter);
    }
  
    /* succeeded - set the return value and increment the reference count */