static void format_keytype(krb5_key_data *k, krb5_salt *def_salt, char *buf, size_t buf_len) { krb5_error_code ret; char *s; int aret; buf[0] = '\0'; ret = krb5_enctype_to_string (context, k->key_data_type[0], &s); if (ret) { aret = asprintf (&s, "unknown(%d)", k->key_data_type[0]); if (aret == -1) return; /* Nothing to do here, we have no way to pass the err */ } strlcpy(buf, s, buf_len); free(s); strlcat(buf, "(", buf_len); ret = krb5_salttype_to_string (context, k->key_data_type[0], k->key_data_type[1], &s); if (ret) { aret = asprintf (&s, "unknown(%d)", k->key_data_type[1]); if (aret == -1) return; /* Again, nothing else to do... */ } strlcat(buf, s, buf_len); free(s); aret = 0; if (cmp_salt(def_salt, k) == 0) s = strdup(""); else if(k->key_data_length[1] == 0) s = strdup("()"); else aret = asprintf (&s, "(%.*s)", k->key_data_length[1], (char *)k->key_data_contents[1]); if (aret == -1 || s == NULL) return; /* Again, nothing else we can do... */ strlcat(buf, s, buf_len); free(s); aret = asprintf (&s, "[%d]", k->key_data_kvno); if (aret == -1) return; strlcat(buf, ")", buf_len); strlcat(buf, s, buf_len); free(s); }
PyObject *pykadmin_key_salttype_name(krb5_key_data *key_data) { PyObject *salttype = NULL; // make sure this is enough. char buffer[1024]; if (krb5_salttype_to_string(key_data->key_data_type[1], buffer, sizeof(buffer))) snprintf(buffer, sizeof(buffer), "<Salt type 0x%x>", key_data->key_data_type[0]); salttype = PyUnicode_FromString(buffer); return salttype; }
static krb5_error_code ks_tuple2str(krb5_context context, int n_ks_tuple, krb5_key_salt_tuple *ks_tuple, char ***ks_tuple_strs) { size_t i; char **ksnames; krb5_error_code rc = KRB5_PROG_ETYPE_NOSUPP; *ks_tuple_strs = NULL; if (n_ks_tuple < 1) return 0; if ((ksnames = calloc(n_ks_tuple + 1, sizeof (*ksnames))) == NULL) return (errno); for (i = 0; i < n_ks_tuple; i++) { char *ename, *sname; if (krb5_enctype_to_string(context, ks_tuple[i].ks_enctype, &ename)) goto out; if (krb5_salttype_to_string(context, ks_tuple[i].ks_enctype, ks_tuple[i].ks_salttype, &sname)) { free(ename); goto out; } if (asprintf(&ksnames[i], "%s:%s", ename, sname) == -1) { rc = errno; free(ename); free(sname); goto out; } free(ename); free(sname); } ksnames[i] = NULL; *ks_tuple_strs = ksnames; return 0; out: for (i = 0; i < n_ks_tuple; i++) free(ksnames[i]); free(ksnames); return (rc); }
/* 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; }
static void format_keytype(krb5_key_data *k, krb5_salt *def_salt, char *buf, size_t buf_len) { krb5_error_code ret; char *s; ret = krb5_enctype_to_string (context, k->key_data_type[0], &s); if (ret) asprintf (&s, "unknown(%d)", k->key_data_type[0]); strlcpy(buf, s, buf_len); free(s); strlcat(buf, "(", buf_len); ret = krb5_salttype_to_string (context, k->key_data_type[0], k->key_data_type[1], &s); if (ret) asprintf (&s, "unknown(%d)", k->key_data_type[1]); strlcat(buf, s, buf_len); free(s); if (cmp_salt(def_salt, k) == 0) s = strdup(""); else if(k->key_data_length[1] == 0) s = strdup("()"); else asprintf (&s, "(%.*s)", k->key_data_length[1], (char *)k->key_data_contents[1]); strlcat(buf, s, buf_len); free(s); asprintf (&s, "[%d]", k->key_data_kvno); strlcat(buf, ")", buf_len); strlcat(buf, s, buf_len); free(s); }