diff options
author | Ezra Peisach <epeisach@mit.edu> | 1997-09-24 16:01:03 +0000 |
---|---|---|
committer | Ezra Peisach <epeisach@mit.edu> | 1997-09-24 16:01:03 +0000 |
commit | ce33c8103370305cc7c67b49928338f9b5106fd6 (patch) | |
tree | 990a5d6563d2f43bb6abbb6c9369cf32b966407e /src/kdc/rtest.c | |
parent | 43813efebe00670337ae0bb38753407f0a8ae801 (diff) | |
download | krb5-ce33c8103370305cc7c67b49928338f9b5106fd6.tar.gz krb5-ce33c8103370305cc7c67b49928338f9b5106fd6.tar.xz krb5-ce33c8103370305cc7c67b49928338f9b5106fd6.zip |
* kdc_util.c (add_to_transited): Fix up memory leaks, clean out
new memory allocated, allocate buffers to max size
needed. [based on krb5-kdc/461 by Ken Hornstein].
* rtest.c: Rewrite code to use context and current krb5_principal
structure.
* configure.in: Add KRB5_RUN_FLAGS
* Makefile.in (rtest): Compile rtest and run during make check.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@10201 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/kdc/rtest.c')
-rw-r--r-- | src/kdc/rtest.c | 91 |
1 files changed, 61 insertions, 30 deletions
diff --git a/src/kdc/rtest.c b/src/kdc/rtest.c index 68835bd6bc..b422fa2734 100644 --- a/src/kdc/rtest.c +++ b/src/kdc/rtest.c @@ -26,6 +26,34 @@ #include "k5-int.h" #include <stdio.h> #include "kdc_util.h" +#include "extern.h" + +krb5_principal +make_princ(ctx, str, prog) + krb5_context ctx; + const char *str; + const char *prog; +{ + krb5_principal ret; + char *dat; + + if(!(ret = (krb5_principal) malloc(sizeof(krb5_principal_data)))) { + com_err(prog, ENOMEM, "while allocating principal data"); + exit(3); + } + memset(ret, 0, sizeof(krb5_principal_data)); + + /* We do not include the null... */ + if(!(dat = (char *) malloc(strlen(str)))) { + com_err(prog, ENOMEM, "while allocating principal realm data"); + exit(3); + } + memcpy(dat, str, strlen(str)); + krb5_princ_set_realm_data(ctx, ret, dat); + krb5_princ_set_realm_length(ctx, ret, strlen(str)); + + return ret; +} void main(argc,argv) @@ -34,47 +62,50 @@ main(argc,argv) { krb5_data otrans; krb5_data ntrans; - - krb5_data *tgnames[10]; - krb5_principal tgs = tgnames; - krb5_data tgsrlm; - - krb5_data *cnames[10]; - krb5_principal cl = cnames; - krb5_data crlm; - - krb5_data *snames[10]; - krb5_principal sv = snames; - krb5_data srlm; + krb5_principal tgs, cl, sv; + krb5_error_code kret; + kdc_realm_t kdc_realm; if (argc < 4) { fprintf(stderr, "not enough args\n"); exit(1); } + + + /* Get a context */ + kret = krb5_init_context(&kdc_realm.realm_context); + if (kret) { + com_err(argv[0], kret, "while getting krb5 context"); + exit(2); + } + /* Needed so kdc_context will work */ + kdc_active_realm = &kdc_realm; + ntrans.length = 0; - otrans.length = strlen(argv[1]) + 1; + ntrans.data = 0; + + otrans.length = strlen(argv[1]); otrans.data = (char *) malloc(otrans.length); - strcpy(otrans.data,argv[1]); - - tgsrlm.length = strlen(argv[2]) + 1; - tgsrlm.data = (char *) malloc(tgsrlm.length); - strcpy(tgsrlm.data,argv[2]); - tgs[0] = &tgsrlm; - - crlm.length = strlen(argv[3]) + 1; - crlm.data = (char *) malloc(crlm.length); - strcpy(crlm.data,argv[3]); - cl[0] = &crlm; - - srlm.length = strlen(argv[4]) + 1; - srlm.data = (char *) malloc(srlm.length); - strcpy(srlm.data,argv[4]); - sv[0] = &srlm; + memcpy(otrans.data,argv[1], otrans.length); + + tgs = make_princ(kdc_context, argv[2], argv[0]); + cl = make_princ(kdc_context, argv[3], argv[0]); + sv = make_princ(kdc_context, argv[4], argv[0]); add_to_transited(&otrans,&ntrans,tgs,cl,sv); printf("%s\n",ntrans.data); + /* Free up all memory so we can profile for leaks */ + free(otrans.data); + free(ntrans.data); + + krb5_free_principal(kdc_realm.realm_context, tgs); + krb5_free_principal(kdc_realm.realm_context, cl); + krb5_free_principal(kdc_realm.realm_context, sv); + krb5_free_context(kdc_realm.realm_context); + + exit(0); } -krb5_encrypt_block master_encblock; +void krb5_klog_syslog() {} |