krb5_error_code KRB5_CALLCONV krb5_ktsrvtab_get_name(krb5_context context, krb5_keytab id, char *name, unsigned int len) /* * This routine returns the name of the name of the file associated with * this srvtab-based keytab. The name is prefixed with PREFIX:, so that * trt will happen if the name is passed back to resolve. */ { memset(name, 0, len); if (len < strlen(id->ops->prefix)+2) return(KRB5_KT_NAME_TOOLONG); strcpy(name, id->ops->prefix); name += strlen(id->ops->prefix); name[0] = ':'; name++; len -= strlen(id->ops->prefix)+1; if (len < strlen(KTFILENAME(id)+1)) return(KRB5_KT_NAME_TOOLONG); strcpy(name, KTFILENAME(id)); /* strcpy will NUL-terminate the destination */ return(0); }
krb5_error_code krb5_ktsrvint_open(krb5_context context, krb5_keytab id) { KTFILEP(id) = fopen(KTFILENAME(id), READ_MODE); if (!KTFILEP(id)) return errno; return 0; }
krb5_error_code KRB5_CALLCONV krb5_ktsrvtab_get_name(krb5_context context, krb5_keytab id, char *name, unsigned int len) /* * This routine returns the name of the name of the file associated with * this srvtab-based keytab. The name is prefixed with PREFIX:, so that * trt will happen if the name is passed back to resolve. */ { int result; memset(name, 0, len); result = snprintf(name, len, "%s:%s", id->ops->prefix, KTFILENAME(id)); if (SNPRINTF_OVERFLOW(result, len)) return(KRB5_KT_NAME_TOOLONG); return(0); }
krb5_error_code KRB5_CALLCONV krb5_ktsrvtab_close(krb5_context context, krb5_keytab id) /* * This routine is responsible for freeing all memory allocated * for this keytab. There are no system resources that need * to be freed nor are there any open files. * * This routine should undo anything done by krb5_ktsrvtab_resolve(). */ { free(KTFILENAME(id)); free(id->data); id->ops = 0; free(id); return (0); }