Ejemplo n.º 1
0
/*
 * Write a field of bytes from krb5_data as a hexadecimal string.  Write empty
 * strings as "-1" unless requested.
 */
static int
write_data(struct rec_args *args, krb5_data *data)
{
    int ret;
    char *p;
    size_t i;
    struct k5buf buf;
    struct rechandle *h = args->rh;
    struct tdopts *opts = args->opts;

    if (data->length == 0 && !opts->emptyhex_empty) {
        if (writefield(h, "-1") < 0)
            return -1;
        return 0;
    }
    k5_buf_init_dynamic(&buf);
    p = data->data;
    for (i = 0; i < data->length; i++)
        k5_buf_add_fmt(&buf, "%02x", (unsigned char)p[i]);

    if (buf.data == NULL) {
        errno = ENOMEM;
        return -1;
    }
    ret = writefield(h, "%s", (char *)buf.data);
    k5_buf_free(&buf);
    return ret;
}
Ejemplo n.º 2
0
Archivo: tabdump.c Proyecto: PADL/krb5
/* Write a single record of a keydata/keyinfo key set. */
static krb5_error_code
keyinfo_rec(struct rec_args *args, const char *name, int i, krb5_key_data *kd,
            int dumpkeys)
{
    int ret;
    krb5_data data;
    struct rechandle *h = args->rh;

    if (startrec(h) < 0)
        return errno;
    if (writefield(h, "%s", name) < 0)
        return errno;
    if (writefield(h, "%d", i) < 0)
        return errno;
    if (writefield(h, "%d", kd->key_data_kvno) < 0)
        return errno;
    if (write_enctype(args, kd->key_data_type[0]) < 0)
        return errno;
    if (dumpkeys) {
        data.length = kd->key_data_length[0];
        data.data = (void *)kd->key_data_contents[0];
        if (write_data(args, &data) < 0)
            return errno;
    }
    ret = write_salttype(args, kd->key_data_type[1]);
    if (ret)
        return ret;
    data.length = kd->key_data_length[1];
    data.data = (void *)kd->key_data_contents[1];
    if (write_data(args, &data) < 0)
        return errno;
    if (endrec(h) < 0)
        return errno;
    return 0;
}
Ejemplo n.º 3
0
Archivo: tabdump.c Proyecto: PADL/krb5
/* Write a record corresponding to a single principal flag setting. */
static krb5_error_code
princflag_rec(struct rechandle *h, const char *name, const char *flagname,
              int set)
{
    if (startrec(h) < 0)
        return errno;
    if (writefield(h, "%s", name) < 0)
        return errno;
    if (writefield(h, "%s", flagname) < 0)
        return errno;
    if (writefield(h, "%d", set) < 0)
        return errno;
    if (endrec(h) < 0)
        return errno;
    return 0;
}
Ejemplo n.º 4
0
void model_writefieldas(model* m, char fname[], char varname[], char varnameas[], int k, float* v)
{
    int ni, nj, nk;
    int mvid = model_getvarid(m, varnameas, 1);

    model_getvardims(m, mvid, &ni, &nj, &nk);
    assert(k < nk);
    writefield(fname, varname, k, ni, nj, nk, v);
}
Ejemplo n.º 5
0
Archivo: tabdump.c Proyecto: PADL/krb5
/* Write a principal's lockout data. */
static krb5_error_code
princ_lockout(struct rec_args *args, const char *name, krb5_db_entry *dbe)
{
    struct rechandle *h = args->rh;

    if (startrec(h) < 0)
        return errno;
    if (writefield(h, "%s", name) < 0)
        return errno;
    if (write_date(args, dbe->last_success) < 0)
        return errno;
    if (write_date(args, dbe->last_failed) < 0)
        return errno;
    if (writefield(h, "%d", dbe->fail_auth_count) < 0)
        return errno;
    if (endrec(h) < 0)
        return errno;
    return 0;
}
Ejemplo n.º 6
0
Archivo: tabdump.c Proyecto: PADL/krb5
/* Write a date field, optionally as a decimal POSIX timestamp. */
static int
write_date(struct rec_args *args, krb5_timestamp when)
{
    struct tdopts *opts = args->opts;
    struct rechandle *h = args->rh;

    if (opts->numeric)
        return writefield(h, "%d", when);

    return write_date_iso(args, when);
}
Ejemplo n.º 7
0
Archivo: tabdump.c Proyecto: PADL/krb5
/* Write a principal's ticket policy. */
static krb5_error_code
princ_tktpolicy(struct rec_args *args, const char *name, krb5_db_entry *dbe)
{
    struct rechandle *h = args->rh;

    if (startrec(h) < 0)
        return errno;
    if (writefield(h, "%s", name) < 0)
        return errno;
    if (write_date(args, dbe->expiration) < 0)
        return errno;
    if (write_date(args, dbe->pw_expiration) < 0)
        return errno;
    if (writefield(h, "%d", dbe->max_life) < 0)
        return errno;
    if (writefield(h, "%d", dbe->max_renewable_life) < 0)
        return errno;
    if (endrec(h) < 0)
        return errno;
    return 0;
}
Ejemplo n.º 8
0
Archivo: tabdump.c Proyecto: PADL/krb5
/* Write a salttype field, optionally as decimal. */
static krb5_error_code
write_salttype(struct rec_args *args, krb5_int16 salttype)
{
    char buf[256];
    krb5_error_code ret;
    struct rechandle *h = args->rh;
    struct tdopts *opts = args->opts;

    if (!opts->numeric) {
        ret = krb5_salttype_to_string(salttype, buf, sizeof(buf));
        if (ret == 0) {
            if (writefield(h, "%s", buf) < 0)
                return errno;
            return ret;
        }
    }
    /* decimal if requested, or if conversion failed */
    if (writefield(h, "%d", salttype) < 0)
        return errno;
    return 0;
}
Ejemplo n.º 9
0
Archivo: tabdump.c Proyecto: PADL/krb5
/* Write a principal's string attributes. */
static krb5_error_code
princ_stringattrs(struct rec_args *args, const char *name, krb5_db_entry *dbe)
{
    int i, nattrs;
    krb5_error_code ret;
    krb5_string_attr *attrs;
    struct rechandle *h = args->rh;

    ret = krb5_dbe_get_strings(util_context, dbe, &attrs, &nattrs);
    if (ret)
        return ret;
    for (i = 0; i < nattrs; i++) {
        if (startrec(h) < 0) {
            ret = errno;
            goto cleanup;
        }
        if (writefield(h, "%s", name) < 0) {
            ret = errno;
            goto cleanup;
        }
        if (writefield(h, "%s", attrs[i].key) < 0) {
            ret = errno;
            goto cleanup;
        }
        if (writefield(h, "%s", attrs[i].value) < 0) {
            ret = errno;
            goto cleanup;
        }
        if (endrec(h) < 0) {
            ret = errno;
            goto cleanup;
        }
    }
cleanup:
    krb5_dbe_free_strings(util_context, attrs, nattrs);
    return ret;
}
Ejemplo n.º 10
0
Archivo: tabdump.c Proyecto: PADL/krb5
/*
 * Write a field of bytes from krb5_data as a hexadecimal string.  Write empty
 * strings as "-1" unless requested.
 */
static int
write_data(struct rec_args *args, krb5_data *data)
{
    int ret;
    char *hex;
    struct rechandle *h = args->rh;
    struct tdopts *opts = args->opts;

    if (data->length == 0 && !opts->emptyhex_empty) {
        if (writefield(h, "-1") < 0)
            return -1;
        return 0;
    }

    ret = k5_hex_encode(data->data, data->length, FALSE, &hex);
    if (ret) {
        errno = ret;
        return -1;
    }

    ret = writefield(h, "%s", hex);
    free(hex);
    return ret;
}
Ejemplo n.º 11
0
/*
 * Write a header line if h->rectype is null.  (If rectype is set, it will be
 * prefixed to output lines, most likely in a mixed record type output file, so
 * it doesn't make sense to output a header line in that case.)
 */
int
writeheader(struct rechandle *h, char * const *a)
{
    int ret = 0;
    char * const *p;

    if (h->rectype != NULL)
        return 0;
    for (p = a; *p != NULL; p++) {
        ret = writefield(h, "%s", *p);
        if (ret < 0)
            return ret;
    }
    ret = endrec(h);
    return ret;
}
Ejemplo n.º 12
0
Archivo: tabdump.c Proyecto: PADL/krb5
/* Write a date field as an ISO 8601 UTC date/time representation. */
static int
write_date_iso(struct rec_args *args, krb5_timestamp when)
{
    char buf[64];
    time_t t;
    struct tm *tm = NULL;
    struct rechandle *h = args->rh;

    t = ts2tt(when);
    tm = gmtime(&t);
    if (tm == NULL) {
        errno = EINVAL;
        return -1;
    }
    if (strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%SZ", tm) == 0) {
        errno = EINVAL;
        return -1;
    }
    if (writefield(h, "%s", buf) < 0)
        return -1;
    return 0;
}
Ejemplo n.º 13
0
void model_writefield(model* m, char fname[], int time, char varname[], int k, float* v)
{
    writefield(fname, varname, k, v);
}
Ejemplo n.º 14
0
Archivo: tabdump.c Proyecto: PADL/krb5
/* Write a principal's metadata. */
static krb5_error_code
princ_meta(struct rec_args *args, const char *name, krb5_db_entry *dbe)
{
    int got_adb = 0;
    char *modby;
    krb5_kvno mkvno;
    const char *policy;
    krb5_principal mod_princ = NULL;
    krb5_timestamp mod_time, last_pwd;
    krb5_error_code ret;
    osa_princ_ent_rec adb;
    struct rechandle *h = args->rh;

    memset(&adb, 0, sizeof(adb));
    if (startrec(h) < 0)
        return errno;
    if (writefield(h, "%s", name) < 0)
        return errno;

    ret = krb5_dbe_lookup_last_pwd_change(util_context, dbe, &last_pwd);
    if (ret)
        return ret;
    ret = krb5_dbe_get_mkvno(util_context, dbe, &mkvno);
    if (ret)
        return ret;

    ret = krb5_dbe_lookup_mod_princ_data(util_context, dbe, &mod_time,
                                         &mod_princ);
    if (ret)
        return ret;
    ret = krb5_unparse_name(util_context, mod_princ, &modby);
    krb5_free_principal(util_context, mod_princ);
    if (ret)
        return ret;
    ret = writefield(h, "%s", modby);
    krb5_free_unparsed_name(util_context, modby);
    if (ret < 0)
        return errno;

    if (write_date(args, mod_time) < 0)
        return errno;
    if (write_date(args, last_pwd) < 0)
        return errno;

    got_adb = get_adb(dbe, &adb);
    if (got_adb && adb.policy != NULL)
        policy = adb.policy;
    else
        policy = "";
    ret = writefield(h, "%s", policy);
    if (ret < 0) {
        ret = errno;
        goto cleanup;
    }
    if (writefield(h, "%d", mkvno) < 0) {
        ret = errno;
        goto cleanup;
    }
    if (writefield(h, "%d", adb.admin_history_kvno) < 0) {
        ret = errno;
        goto cleanup;
    }
    if (endrec(h) < 0)
        ret = errno;
    else
        ret = 0;

cleanup:
    kdb_free_entry(NULL, NULL, &adb);
    return ret;
}
Ejemplo n.º 15
0
int
main(int argc, char **argv)
{
    int ch, csv = 0, i, nf;
    char **a, *rectype = NULL;
    struct rechandle *h;

    argv0 = argv[0];
    while ((ch = getopt(argc, argv, "T:c")) != -1) {
        switch (ch) {
        case 'T':
            rectype = optarg;
            break;
        case 'c':
            csv = 1;
            break;
        default:
            usage();
            break;
        }
    }
    argc -= optind;
    argv += optind;

    if (csv)
        h = rechandle_csv(stdout, rectype);
    else
        h = rechandle_tabsep(stdout, rectype);
    if (h == NULL)
        exit(1);

    if (*argv == NULL)
        usage();
    nf = atoi(*argv);
    argc--;
    argv++;
    a = calloc(nf + 1, sizeof(*a));
    if (a == NULL)
        exit(1);

    for (i = 0; argv[i] != NULL && i < nf; i++)
        a[i] = argv[i];
    if (i != nf)
        usage();
    argv += nf;
    a[nf] = NULL;

    if (rectype == NULL && writeheader(h, a) < 0)
        exit(1);
    free(a);

    while (*argv != NULL) {
        if (startrec(h) < 0)
            exit(1);
        for (i = 0; argv[i] != NULL && i < nf; i++) {
            if (writefield(h, "%s", argv[i]) < 0)
                exit(1);
        }
        if (i != nf)
            usage();
        argv += nf;
        if (endrec(h) < 0)
            exit(1);
    }
    exit(0);
}