static int start (CcnetProcessor *processor, int argc, char **argv) { SeafileCheckTxV3Proc *proc = (SeafileCheckTxV3Proc *)processor; TransferTask *task = proc->task; char *type, *enc_token; GString *buf; if (argc != 1) { transition_state_to_error (task, TASK_ERR_CHECK_UPLOAD_START); ccnet_processor_done (processor, FALSE); return -1; } type = argv[0]; if (strcmp (type, "upload") == 0) proc->type = CHECK_TX_TYPE_UPLOAD; else proc->type = CHECK_TX_TYPE_DOWNLOAD; enc_token = encrypt_token (processor, task->token); if (!enc_token) { transition_state_to_error (task, TASK_ERR_CHECK_UPLOAD_START); ccnet_processor_done (processor, FALSE); return -1; } buf = g_string_new(NULL); g_string_append_printf (buf, "remote %s seafile-check-tx-slave-v3 %s %d %s %s %s", processor->peer_id, type, CURRENT_PROTO_VERSION, task->repo_id, task->to_branch, enc_token); ccnet_processor_send_request (processor, buf->str); g_free (enc_token); g_string_free (buf, TRUE); return 0; }
static int32_t test_wrap(struct client *c1, int32_t hc1, struct client *c2, int32_t hc2, int conf) { krb5_data msg, wrapped, out; int32_t val; msg.data = "foo"; msg.length = 3; krb5_data_zero(&wrapped); krb5_data_zero(&out); val = encrypt_token(c1, hc1, conf, &msg, &wrapped); if (val) { warnx("encrypt_token failed to host: %s", c1->moniker); return val; } val = decrypt_token(c2, hc2, conf, &wrapped, &out); if (val) { krb5_data_free(&wrapped); warnx("decrypt_token failed to host: %s", c2->moniker); return val; } if (msg.length != out.length) { warnx("decrypted'ed token have wrong length (%lu != %lu)", (unsigned long)msg.length, (unsigned long)out.length); val = GSMERR_ERROR; } else if (memcmp(msg.data, out.data, msg.length) != 0) { warnx("decryptd'ed token have wrong data"); val = GSMERR_ERROR; } krb5_data_free(&wrapped); krb5_data_free(&out); return val; }