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); }
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); }