Ejemplo n.º 1
0
static void
sigabrt_handler_9(int sig)
{
    (void) sig;
    signal(SIGABRT, sigabrt_handler_10);
    assert(sodium_base642bin(NULL, 1, NULL, 1, NULL, NULL, NULL, -1) == -1);
    exit(1);
}
Ejemplo n.º 2
0
static flux_msg_t *encode_event (const char *topic, int flags,
                                 uint32_t rolemask, uint32_t userid,
                                 uint32_t seq, const char *src)
{
    flux_msg_t *msg;
    void *dst = NULL;
    int saved_errno;

    if (!(msg = flux_msg_create (FLUX_MSGTYPE_EVENT)))
        goto error;
    if (flux_msg_set_topic (msg, topic) < 0)
        goto error;
    if (flux_msg_set_userid (msg, userid) < 0)
        goto error;
    if (flux_msg_set_rolemask (msg, rolemask) < 0)
        goto error;
    if (flux_msg_set_seq (msg, seq) < 0)
        goto error;
    if ((flags & FLUX_MSGFLAG_PRIVATE)) {
        if (flux_msg_set_private (msg) < 0)
            goto error;
    }
    if (src) { // optional payload
        int srclen = strlen (src);
        size_t dstlen = BASE64_DECODE_SIZE (srclen);

        if (!(dst = malloc (dstlen)))
            goto error;
        if (sodium_base642bin ((unsigned char *)dst, dstlen, src, srclen,
                               NULL, &dstlen, NULL,
                               sodium_base64_VARIANT_ORIGINAL) < 0) {
            errno = EPROTO;
            goto error;
        }
        if (flux_msg_set_payload (msg, dst, dstlen) < 0) {
            if (errno == EINVAL)
                errno = EPROTO;
            goto error;
        }
    }
    free (dst);
    return msg;
error:
    saved_errno = errno;
    free (dst);
    flux_msg_destroy (msg);
    errno = saved_errno;
    return NULL;
}