예제 #1
0
END_TEST

START_TEST (test_make_ports)
    {
        UT_string str;
        utstring_init(&str);

        uint16_t ports[] = {htons(53), htons(80), htons(443)};
        size_t count = sizeof(ports) / sizeof(ports[0]);

        zclient_rules_make_ports(&str, PROTO_TCP, ACCESS_ALLOW, ports, count);
        fail_if(0 != strcmp(utstring_body(&str), "ports.allow.tcp.53.80.443"), "make ports str fail");
        utstring_clear(&str);

        zclient_rules_make_ports(&str, PROTO_UDP, ACCESS_ALLOW, ports, count);
        fail_if(0 != strcmp(utstring_body(&str), "ports.allow.udp.53.80.443"), "make ports str fail");
        utstring_clear(&str);

        zclient_rules_make_ports(&str, PROTO_TCP, ACCESS_DENY, ports, count);
        fail_if(0 != strcmp(utstring_body(&str), "ports.deny.tcp.53.80.443"), "make ports str fail");
        utstring_clear(&str);

        zclient_rules_make_ports(&str, PROTO_UDP, ACCESS_DENY, ports, count);
        fail_if(0 != strcmp(utstring_body(&str), "ports.deny.udp.53.80.443"), "make ports str fail");

        utstring_done(&str);
    }
예제 #2
0
END_TEST

START_TEST (test_make_fwd)
    {
        UT_string str;
        utstring_init(&str);

        zfwd_rule_t rule;
        rule.port = htons(80);
        rule.fwd_ip = 0x04030201;
        rule.fwd_port = htons(83);

        zclient_rules_make_fwd(&str, PROTO_TCP, &rule);
        fail_if(0 != strcmp(utstring_body(&str), "fwd.tcp.80.1.2.3.4:83"), "make fwd str fail");
        utstring_clear(&str);

        zclient_rules_make_fwd(&str, PROTO_UDP, &rule);
        fail_if(0 != strcmp(utstring_body(&str), "fwd.udp.80.1.2.3.4:83"), "make fwd str fail");
        utstring_clear(&str);

        rule.fwd_port = 0;

        zclient_rules_make_fwd(&str, PROTO_UDP, &rule);
        fail_if(0 != strcmp(utstring_body(&str), "fwd.udp.80.1.2.3.4"), "make fwd str fail");

        utstring_done(&str);
    }
예제 #3
0
int main() {
  int i;
  UT_string *t;
  UT_vector v; utvector_init(&v, utstring_mm);
  UT_string s; utstring_init(&s);

  for(i=0; i<16; i++) {
    utstring_printf(&s, ".");
    utvector_push(&v, &s);
  }
  dump(&v);

  t = (UT_string*)utvector_head(&v);
  printf("head: %s %s\n", t?"non-null":"null", t?utstring_body(t):"-");

  t = (UT_string*)utvector_tail(&v);
  printf("tail: %s %s\n", t?"non-null":"null", t?utstring_body(t):"-");

  for(i=0; i<16; i++) {
    printf("shift\n");
    utvector_shift(&v);
    t = (UT_string*)utvector_head(&v);
    printf("len: %d, head: %s %s\n", utvector_len(&v), t?"non-null":"null", t?utstring_body(t):"-");
  }

  printf("extend\n");
  t= (UT_string*)utvector_extend(&v);
  utstring_printf(t,"extended");
  t = (UT_string*)utvector_head(&v);
  printf("len: %d, head: %s %s\n", utvector_len(&v), t?"non-null":"null", t?utstring_body(t):"-");

  utvector_fini(&v);
  utstring_done(&s);
  return 0;
}
예제 #4
0
int main() {
  int i;
  UT_string *t;
  UT_vector v; utvector_init(&v, utvector_utstring);
  UT_string s; utstring_init(&s);

  for(i=0; i<16; i++) {
    utstring_printf(&s, ".");
    utvector_push(&v, &s);
  }
  dump(&v);

  t = (UT_string*)utvector_head(&v);
  printf("head: %s %s\n", t?"non-null":"null", t?utstring_body(t):"-");

  t = (UT_string*)utvector_tail(&v);
  printf("tail: %s %s\n", t?"non-null":"null", t?utstring_body(t):"-");

  printf("extend\n");
  t = (UT_string*)utvector_extend(&v);
  utstring_bincpy(t, "hello", 5);
  dump(&v);

  t = (UT_string*)utvector_head(&v);
  printf("head: %s %s\n", t?"non-null":"null", t?utstring_body(t):"-");

  t = (UT_string*)utvector_tail(&v);
  printf("tail: %s %s\n", t?"non-null":"null", t?utstring_body(t):"-");

  utvector_fini(&v);
  utstring_done(&s);
  return 0;
}
예제 #5
0
static char* fd_str(struct client_socket *socket) {
    struct fd_socket *self = (struct fd_socket*)socket->self;
    UT_string s;
    utstring_init(&s);
    utstring_printf(&s, "%s:%d", inet_ntoa(self->addr.sin_addr),
                    self->addr.sin_port);
    return utstring_body(&s);
}
예제 #6
0
파일: qk.c 프로젝트: JHUAPL/kvspool
struct qk *qk_new(void) {
  struct qk *qk = malloc(sizeof(*qk));
  if (qk == NULL) goto done;
  memset(qk,0,sizeof(*qk));
  utvector_init(&qk->keys, &utvector_utstring_mm);
  utstring_init(&qk->tmp);
 done:
  return qk;
}
예제 #7
0
END_TEST

START_TEST (test_make_identity)
    {
        UT_string str;
        utstring_init(&str);

        zclient_rules_make_identity(&str, 31337, "ABABA");
        fail_if(0 != strcmp(utstring_body(&str), "identity.31337.ABABA"), "make identity str fail");

        utstring_done(&str);
    }
예제 #8
0
int main() {
  int i; UT_string *p;
  UT_vector v; utvector_init(&v, utvector_utstring);
  UT_string s; utstring_init(&s);
  for(i=0; i<10; i++) {
    utstring_printf(&s, ".");
    utvector_push(&v, &s);
  }
  p=NULL;
  while ( (p=(UT_string*)utvector_next(&v,p))) printf("%s\n",utstring_body(p));

  utvector_fini(&v);
  utstring_done(&s);
  return 0;
}
예제 #9
0
END_TEST

START_TEST (test_make_bw)
    {
        UT_string str;
        utstring_init(&str);

        zclient_rules_make_bw(&str, 524288, DIR_DOWN);
        fail_if(0 != strcmp(utstring_body(&str), "bw.4096KBit.down"), "make bw down str fail");
        utstring_clear(&str);

        zclient_rules_make_bw(&str, 524288, DIR_UP);
        fail_if(0 != strcmp(utstring_body(&str), "bw.4096KBit.up"), "make bw up str fail");

        utstring_done(&str);
    }
예제 #10
0
END_TEST

START_TEST (test_make_p2p_policer)
    {
        UT_string str;
        utstring_init(&str);

        crules_make_p2p_policy(&str, 0);
        fail_if(0 != strcmp(utstring_body(&str), "p2p_policy.0"), "make p2p_policy str fail");
        utstring_clear(&str);

        crules_make_p2p_policy(&str, 1);
        fail_if(0 != strcmp(utstring_body(&str), "p2p_policy.1"), "make p2p_policy str fail");

        utstring_done(&str);
    }
예제 #11
0
파일: radius.c 프로젝트: intersvyaz/zerod
/**
 * Log session authorization.
 * @param[in] session Session.
 * @param[in] attrs Authorization reply attributes.
 */
static void zrad_auth_log(const zscope_t *scope, const zsession_t *session, const VALUE_PAIR *attrs)
{
    UT_string rules_str;
    utstring_init(&rules_str);
    utstring_reserve(&rules_str, 1024);

    for (; likely(NULL != attrs); attrs = attrs->next) {
        switch (attrs->attribute) {
            case PW_FILTER_ID:
                utstring_printf(&rules_str, " %s", attrs->strvalue);
                break;
            default:
                break;
        }
    }

    zsyslog(LOG_INFO, "%s: Authenticated session %s (rules:%s)",
            scope->cfg->name, session->ip_str, utstring_body(&rules_str));
    utstring_done(&rules_str);
}
예제 #12
0
파일: test7.c 프로젝트: hotfics/misc
int main() {
  int i; 
  UT_vector v; utvector_init(&v, utvector_utstring);
  UT_vector *k;

  UT_string s; utstring_init(&s);
  for(i=0; i<10; i++) {
    utstring_printf(&s, ".");
    utvector_push(&v, &s);
  }
  dump(&v);

  printf("clone\n");
  k = utvector_clone(&v);
  dump(k);

  utvector_fini(&v);
  utvector_free(k);
  utstring_done(&s);
  return 0;
}
예제 #13
0
파일: test9.c 프로젝트: kyo7701/uthash
int main() {
  int i; 
  UT_string *t; 
  UT_vector v; utvector_init(&v, utvector_utstring);
  UT_string s; utstring_init(&s);

  for(i=0; i<16; i++) {
    utstring_printf(&s, ".");
    utvector_push(&v, &s);
  }
  dump(&v);

  printf("extend\n");
  t = (UT_string*)utvector_extend(&v);
  utstring_bincpy(t, "hello", 5);
  dump(&v);

  utvector_fini(&v);
  utstring_done(&s);
  return 0;
}
예제 #14
0
/**
 * Authenticate and set client info.
 * @param[in] sess Client session.
 * @return Zero on success (or one of *_RC).
 */
static int session_authenticate(struct zsession *sess)
{
    int ret = OTHER_RC;
    VALUE_PAIR *request_attrs = NULL, *response_attrs = NULL, *attrs = NULL;
    char msg[8192]; // WARNING: libfreeradius-client has unsafe working with this buffer.
    rc_handle *rh = zinst()->radh;
    struct in_addr ip_addr;
    char ip_str[INET_ADDRSTRLEN];
    struct zcrules rules;

    crules_init(&rules);

    ip_addr.s_addr = htonl(sess->ip);
    if (unlikely(NULL == inet_ntop(AF_INET, &ip_addr, ip_str, sizeof(ip_str)))) {
        goto end;
    }

    if (unlikely(NULL == rc_avpair_add(rh, &request_attrs, PW_USER_NAME, ip_str, -1, 0))) {
        goto end;
    }
    if (unlikely(NULL == rc_avpair_add(rh, &request_attrs, PW_USER_PASSWORD, "", -1, 0))) {
        goto end;
    }
    if (unlikely(NULL == rc_avpair_add(rh, &request_attrs, PW_NAS_IDENTIFIER, zcfg()->radius_nas_identifier, -1, 0))) {
        goto end;
    }
    if (unlikely(NULL == rc_avpair_add(rh, &request_attrs, PW_CALLING_STATION_ID, ip_str, -1, 0))) {
        goto end;
    }

    ret = rc_auth(rh, 0, request_attrs, &response_attrs, msg);
    if (OK_RC != ret) {
        ZERO_LOG(LOG_ERR, "Session authentication failed for %s (code:%d)", ip_str, ret);
        goto end;
    }

    attrs = response_attrs;
    while (likely(NULL != attrs)) {
        switch (attrs->attribute) {
            case PW_FILTER_ID:
                crules_parse(&rules, attrs->strvalue);
                break;
            case PW_SESSION_TIMEOUT:
                atomic_store_explicit(&sess->max_duration, SEC2USEC(attrs->lvalue), memory_order_release);
                break;
            case PW_ACCT_INTERIM_INTERVAL:
                atomic_store_explicit(&sess->acct_interval, SEC2USEC(attrs->lvalue), memory_order_release);
                break;
        }
        attrs = attrs->next;
    }

    if (likely(rules.have.user_id && rules.have.login)) {
        struct zclient *client = sess->client;

        client_db_find_or_set_id(zinst()->client_db, rules.user_id, &client);
        if (client != sess->client) {
            // found
            pthread_rwlock_wrlock(&sess->lock_client);
            atomic_fetch_add_explicit(&client->refcnt, 1, memory_order_relaxed);
            client_release(sess->client);
            sess->client = client;
            client_session_add(sess->client, sess);
            pthread_rwlock_unlock(&sess->lock_client);
        } else {
            client_apply_rules(sess->client, &rules);
        }

        atomic_fetch_sub_explicit(&zinst()->unauth_sessions_cnt, 1, memory_order_release);

        // log successful authentication
        {
            UT_string rules_str;
            utstring_init(&rules_str);
            utstring_reserve(&rules_str, 1024);

            attrs = response_attrs;
            while (likely(NULL != attrs)) {
                switch (attrs->attribute) {
                    case PW_FILTER_ID:
                        utstring_printf(&rules_str, " %s", attrs->strvalue);
                        break;
                    default:
                        break;
                }
                attrs = attrs->next;
            }

            zero_syslog(LOG_INFO, "Authenticated session %s (rules:%s)", ip_str, utstring_body(&rules_str));
            utstring_done(&rules_str);
        }
    } else {
        ret = OTHER_RC;
        ZERO_LOG(LOG_ERR, "Session authentication failed for %s (code:%d)", ip_str, ret);
    }

    end:
    crules_free(&rules);
    if (request_attrs) rc_avpair_free(request_attrs);
    if (response_attrs) rc_avpair_free(response_attrs);

    return ret;
}
예제 #15
0
파일: qk.c 프로젝트: JHUAPL/kvspool
/*******************************************************************************
 * plumbing for utvector of string
 ******************************************************************************/
void _utstring_init(void *_buf, unsigned num) {
  UT_string *s = (UT_string*)_buf;
  while(num--) utstring_init(&s[num]);
}
예제 #16
0
파일: record.c 프로젝트: scean/misc
static void _nbt_record_init(void *_r, unsigned num) {
  struct nbt_record *r = (struct nbt_record *)_r;
  while(num--) { utstring_init(&r->fqname); r++; }
}