Exemplo n.º 1
0
void test_perm_manager()
{
    CcnetPeer *peer;
    peer = ccnet_peer_manager_get_peer (session->peer_mgr, rendezvous);
    if (!peer) {
        fprintf (stderr, "Can't get peer. You should call setup first.\n");
        exit (1);
    }

    char *argv[10];
    argv[0] = "put-pubinfo";
    argv[1] = NULL;

    g_assert (ccnet_perm_manager_check_permission (
                  session->perm_mgr, peer, "put-pubinfo", 0, 1, argv)
              == PERM_CHECK_OK);

    g_assert (ccnet_perm_manager_check_permission (
                  session->perm_mgr, peer, "ccnet-rpcserver", 0, 1, argv)
              == PERM_CHECK_ERROR);

    g_assert (ccnet_perm_manager_check_role_permission (
                  session->perm_mgr, "MyClient", "seafserv")
              == PERM_CHECK_OK);

    g_object_unref (peer);
}
Exemplo n.º 2
0
static void
handle_request (CcnetPeer *peer, int req_id, char *data, int len)
{
    char *msg;
    gchar **commands;
    gchar **pcmd;
    int  i, perm;

    /* TODO: remove string copy */
    if (len < 1)
        return;
    msg = g_malloc (len+1);
    memcpy (msg, data, len);
    msg[len] = '\0';

    commands = g_strsplit_set (msg, " \t", 10);
    for (i=0, pcmd = commands; *pcmd; pcmd++)
        i++;
    if (i <= 0) return;
    g_free (msg);

    /* permission checking */
    if (!peer->is_local) {
        perm = ccnet_perm_manager_check_permission(peer->manager->session->perm_mgr,
                                                   peer, commands[0],
                                                   req_id,
                                                   i, commands);
        if (perm == PERM_CHECK_ERROR) {
            ccnet_peer_send_response (peer, req_id, SC_PERM_ERR, SS_PERM_ERR,
                                      NULL, 0);
            goto ret;
        } else if (perm == PERM_CHECK_DELAY) {
            ccnet_peer_send_response (peer, req_id, SC_PERM_ERR, SS_PERM_ERR,
                                      NULL, 0);
            goto ret;
        } else if (perm == PERM_CHECK_NOSERVICE) {
            ccnet_peer_send_response (peer, req_id, SC_UNKNOWN_SERVICE_IN_PERM,
                                      SS_UNKNOWN_SERVICE_IN_PERM, NULL, 0);
            goto ret;
        }
    }

    /* check duplication request */
    CcnetProcessor *processor;
    processor = ccnet_peer_get_processor (peer, SLAVE_ID(req_id));
    if (processor != NULL) {
        ccnet_warning ("Received duplication request, id is %d\n", req_id);
        goto ret;
    }

    create_processor (peer, req_id, i, commands);

ret:
    g_strfreev (commands);
}