3057 lines
103 KiB
Plaintext
3057 lines
103 KiB
Plaintext
Index: src/plugins/kdb/ldap/ldap_util/kdb5_ldap_util.c
|
|
===================================================================
|
|
--- src/plugins/kdb/ldap/ldap_util/kdb5_ldap_util.c.orig
|
|
+++ src/plugins/kdb/ldap/ldap_util/kdb5_ldap_util.c
|
|
@@ -303,6 +303,11 @@ int main(argc, argv)
|
|
krb5_boolean realm_name_required = TRUE;
|
|
krb5_boolean print_help_message = FALSE;
|
|
|
|
+ /*
|
|
+ * Ensure that "progname" is set before calling com_err.
|
|
+ */
|
|
+ progname = (strrchr(argv[0], '/') ? strrchr(argv[0], '/')+1 : argv[0]);
|
|
+
|
|
retval = krb5_init_context(&util_context);
|
|
set_com_err_hook(extended_com_err_fn);
|
|
if (retval) {
|
|
@@ -311,8 +316,6 @@ int main(argc, argv)
|
|
goto cleanup;
|
|
}
|
|
|
|
- progname = (strrchr(argv[0], '/') ? strrchr(argv[0], '/')+1 : argv[0]);
|
|
-
|
|
cmd_argv = (char **) malloc(sizeof(char *)*argc);
|
|
if (cmd_argv == NULL) {
|
|
com_err(progname, ENOMEM, "while creating sub-command arguments");
|
|
@@ -344,7 +347,7 @@ int main(argc, argv)
|
|
}
|
|
} else if (strcmp(*argv, "-k") == 0 && ARG_VAL) {
|
|
if (krb5_string_to_enctype(koptarg, &global_params.enctype))
|
|
- com_err(argv[0], 0, "%s is an invalid enctype", koptarg);
|
|
+ com_err(progname, 0, "%s is an invalid enctype", koptarg);
|
|
else
|
|
global_params.mask |= KADM5_CONFIG_ENCTYPE;
|
|
} else if (strcmp(*argv, "-M") == 0 && ARG_VAL) {
|
|
@@ -466,7 +469,7 @@ int main(argc, argv)
|
|
retval = kadm5_get_config_params(util_context, 1,
|
|
&global_params, &global_params);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while retreiving configuration parameters");
|
|
+ com_err(progname, retval, "while retreiving configuration parameters");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -474,7 +477,7 @@ int main(argc, argv)
|
|
}
|
|
|
|
if ((retval = krb5_ldap_lib_init()) != 0) {
|
|
- com_err(argv[0], retval, "while initializing error handling");
|
|
+ com_err(progname, retval, "while initializing error handling");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -482,7 +485,7 @@ int main(argc, argv)
|
|
/* Initialize the ldap context */
|
|
ldap_context = calloc(sizeof(krb5_ldap_context), 1);
|
|
if (ldap_context == NULL) {
|
|
- com_err(argv[0], ENOMEM, "while initializing ldap handle");
|
|
+ com_err(progname, ENOMEM, "while initializing ldap handle");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -495,7 +498,7 @@ int main(argc, argv)
|
|
if (passwd == NULL) {
|
|
passwd = (char *)malloc(MAX_PASSWD_LEN);
|
|
if (passwd == NULL) {
|
|
- com_err(argv[0], ENOMEM, "while retrieving ldap configuration");
|
|
+ com_err(progname, ENOMEM, "while retrieving ldap configuration");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -503,7 +506,7 @@ int main(argc, argv)
|
|
if (prompt == NULL) {
|
|
free(passwd);
|
|
passwd = NULL;
|
|
- com_err(argv[0], ENOMEM, "while retrieving ldap configuration");
|
|
+ com_err(progname, ENOMEM, "while retrieving ldap configuration");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -514,7 +517,7 @@ int main(argc, argv)
|
|
db_retval = krb5_read_password(util_context, prompt, NULL, passwd, &passwd_len);
|
|
|
|
if ((db_retval) || (passwd_len == 0)) {
|
|
- com_err(argv[0], ENOMEM, "while retrieving ldap configuration");
|
|
+ com_err(progname, ENOMEM, "while retrieving ldap configuration");
|
|
free(passwd);
|
|
passwd = NULL;
|
|
exit_status++;
|
|
@@ -530,14 +533,14 @@ int main(argc, argv)
|
|
|
|
ldap_context->server_info_list = (krb5_ldap_server_info **) calloc (2, sizeof (krb5_ldap_server_info *)) ;
|
|
if (ldap_context->server_info_list == NULL) {
|
|
- com_err(argv[0], ENOMEM, "while initializing server list");
|
|
+ com_err(progname, ENOMEM, "while initializing server list");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
|
|
ldap_context->server_info_list[0] = (krb5_ldap_server_info *) calloc (1, sizeof (krb5_ldap_server_info));
|
|
if (ldap_context->server_info_list[0] == NULL) {
|
|
- com_err(argv[0], ENOMEM, "while initializing server list");
|
|
+ com_err(progname, ENOMEM, "while initializing server list");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -546,7 +549,7 @@ int main(argc, argv)
|
|
|
|
ldap_context->server_info_list[0]->server_name = strdup(ldap_server);
|
|
if (ldap_context->server_info_list[0]->server_name == NULL) {
|
|
- com_err(argv[0], ENOMEM, "while initializing server list");
|
|
+ com_err(progname, ENOMEM, "while initializing server list");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -554,7 +557,7 @@ int main(argc, argv)
|
|
if (bind_dn) {
|
|
ldap_context->bind_dn = strdup(bind_dn);
|
|
if (ldap_context->bind_dn == NULL) {
|
|
- com_err(argv[0], ENOMEM, "while retrieving ldap configuration");
|
|
+ com_err(progname, ENOMEM, "while retrieving ldap configuration");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -566,7 +569,7 @@ int main(argc, argv)
|
|
if (realm_name_required) {
|
|
if ((global_params.enctype != ENCTYPE_UNKNOWN) &&
|
|
(!krb5_c_valid_enctype(global_params.enctype))) {
|
|
- com_err(argv[0], KRB5_PROG_KEYTYPE_NOSUPP,
|
|
+ com_err(progname, KRB5_PROG_KEYTYPE_NOSUPP,
|
|
"while setting up enctype %d", global_params.enctype);
|
|
}
|
|
}
|
|
@@ -583,7 +586,7 @@ int main(argc, argv)
|
|
|
|
db_retval = krb5_ldap_read_server_params(util_context, conf_section, KRB5_KDB_SRV_TYPE_OTHER);
|
|
if (db_retval) {
|
|
- com_err(argv[0], db_retval, "while reading ldap configuration");
|
|
+ com_err(progname, db_retval, "while reading ldap configuration");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
Index: src/plugins/kdb/ldap/ldap_util/kdb5_ldap_policy.c
|
|
===================================================================
|
|
--- src/plugins/kdb/ldap/ldap_util/kdb5_ldap_policy.c.orig
|
|
+++ src/plugins/kdb/ldap/ldap_util/kdb5_ldap_policy.c
|
|
@@ -67,7 +67,7 @@ static krb5_error_code init_ldap_realm (
|
|
retval = krb5_ldap_read_krbcontainer_params (util_context,
|
|
&(ldap_context->krbcontainer));
|
|
if (retval != 0) {
|
|
- com_err(argv[0], retval, "while reading kerberos container information");
|
|
+ com_err(progname, retval, "while reading kerberos container information");
|
|
goto cleanup;
|
|
}
|
|
}
|
|
@@ -95,7 +95,7 @@ kdb5_ldap_create_policy(argc, argv)
|
|
int argc;
|
|
char *argv[];
|
|
{
|
|
- char *me = argv[0];
|
|
+ char *me = progname;
|
|
krb5_error_code retval = 0;
|
|
krb5_ldap_policy_params *policyparams = NULL;
|
|
krb5_boolean print_usage = FALSE;
|
|
@@ -322,7 +322,7 @@ kdb5_ldap_destroy_policy(argc, argv)
|
|
int argc;
|
|
char *argv[];
|
|
{
|
|
- char *me = argv[0];
|
|
+ char *me = progname;
|
|
krb5_error_code retval = 0;
|
|
krb5_ldap_policy_params *policyparams = NULL;
|
|
krb5_boolean print_usage = FALSE;
|
|
@@ -426,7 +426,7 @@ kdb5_ldap_modify_policy(argc, argv)
|
|
int argc;
|
|
char *argv[];
|
|
{
|
|
- char *me = argv[0];
|
|
+ char *me = progname;
|
|
krb5_error_code retval = 0;
|
|
krb5_ldap_policy_params *policyparams = NULL;
|
|
krb5_boolean print_usage = FALSE;
|
|
@@ -683,7 +683,7 @@ kdb5_ldap_view_policy(argc, argv)
|
|
int argc;
|
|
char *argv[];
|
|
{
|
|
- char *me = argv[0];
|
|
+ char *me = progname;
|
|
krb5_ldap_policy_params *policyparams = NULL;
|
|
krb5_error_code retval = 0;
|
|
krb5_boolean print_usage = FALSE;
|
|
@@ -804,7 +804,7 @@ void kdb5_ldap_list_policies(argc, argv)
|
|
int argc;
|
|
char *argv[];
|
|
{
|
|
- char *me = argv[0];
|
|
+ char *me = progname;
|
|
krb5_error_code retval = 0;
|
|
krb5_boolean print_usage = FALSE;
|
|
char *basedn = NULL;
|
|
Index: src/plugins/kdb/ldap/ldap_util/kdb5_ldap_realm.c
|
|
===================================================================
|
|
--- src/plugins/kdb/ldap/ldap_util/kdb5_ldap_realm.c.orig
|
|
+++ src/plugins/kdb/ldap/ldap_util/kdb5_ldap_realm.c
|
|
@@ -152,7 +152,7 @@ static int get_ticket_policy(rparams,i,a
|
|
krb5_boolean no_msg = FALSE;
|
|
|
|
krb5_boolean print_usage = FALSE;
|
|
- char *me = argv[0];
|
|
+ char *me = progname;
|
|
|
|
time(&now);
|
|
if (!strcmp(argv[*i], "-maxtktlife")) {
|
|
@@ -364,7 +364,7 @@ void kdb5_ldap_create(argc, argv)
|
|
rparams->subtree = list;
|
|
} else if(strncmp(argv[i], "", strlen(argv[i]))==0) {
|
|
/* dont allow subtree value to be set at the root(NULL, "") of the tree */
|
|
- com_err(argv[0], EINVAL,
|
|
+ com_err(progname, EINVAL,
|
|
"for subtree while creating realm '%s'",
|
|
global_params.realm);
|
|
goto err_nomsg;
|
|
@@ -376,7 +376,7 @@ void kdb5_ldap_create(argc, argv)
|
|
goto err_usage;
|
|
if(strncmp(argv[i], "", strlen(argv[i]))==0) {
|
|
/* dont allow containerref value to be set at the root(NULL, "") of the tree */
|
|
- com_err(argv[0], EINVAL,
|
|
+ com_err(progname, EINVAL,
|
|
"for container reference while creating realm '%s'",
|
|
global_params.realm);
|
|
goto err_nomsg;
|
|
@@ -401,7 +401,7 @@ void kdb5_ldap_create(argc, argv)
|
|
rparams->search_scope = atoi(argv[i]);
|
|
if ((rparams->search_scope != 1) &&
|
|
(rparams->search_scope != 2)) {
|
|
- com_err(argv[0], EINVAL,
|
|
+ com_err(progname, EINVAL,
|
|
"invalid search scope while creating realm '%s'",
|
|
global_params.realm);
|
|
goto err_nomsg;
|
|
@@ -498,7 +498,7 @@ void kdb5_ldap_create(argc, argv)
|
|
retval = krb5_read_password(util_context, KRB5_KDC_MKEY_1, KRB5_KDC_MKEY_2,
|
|
pw_str, &pw_size);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while reading master key from keyboard");
|
|
+ com_err(progname, retval, "while reading master key from keyboard");
|
|
goto err_nomsg;
|
|
}
|
|
mkey_password = pw_str;
|
|
@@ -516,7 +516,7 @@ void kdb5_ldap_create(argc, argv)
|
|
rparams->realm_name = strdup(global_params.realm);
|
|
if (rparams->realm_name == NULL) {
|
|
retval = ENOMEM;
|
|
- com_err(argv[0], ENOMEM, "while creating realm '%s'",
|
|
+ com_err(progname, ENOMEM, "while creating realm '%s'",
|
|
global_params.realm);
|
|
goto err_nomsg;
|
|
}
|
|
@@ -588,11 +588,11 @@ void kdb5_ldap_create(argc, argv)
|
|
retval = krb5_ldap_read_krbcontainer_params(util_context,
|
|
&(ldap_context->krbcontainer));
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while reading kerberos container information");
|
|
+ com_err(progname, retval, "while reading kerberos container information");
|
|
goto cleanup;
|
|
}
|
|
} else if (retval) {
|
|
- com_err(argv[0], retval, "while reading kerberos container information");
|
|
+ com_err(progname, retval, "while reading kerberos container information");
|
|
goto cleanup;
|
|
}
|
|
|
|
@@ -608,7 +608,7 @@ void kdb5_ldap_create(argc, argv)
|
|
global_params.realm,
|
|
&(ldap_context->lrparams),
|
|
&mask))) {
|
|
- com_err(argv[0], retval, "while reading information of realm '%s'",
|
|
+ com_err(progname, retval, "while reading information of realm '%s'",
|
|
global_params.realm);
|
|
goto err_nomsg;
|
|
}
|
|
@@ -623,7 +623,7 @@ void kdb5_ldap_create(argc, argv)
|
|
global_params.mkey_name,
|
|
global_params.realm,
|
|
0, &master_princ))) {
|
|
- com_err(argv[0], retval, "while setting up master key name");
|
|
+ com_err(progname, retval, "while setting up master key name");
|
|
goto err_nomsg;
|
|
}
|
|
|
|
@@ -635,7 +635,7 @@ void kdb5_ldap_create(argc, argv)
|
|
pwd.length = strlen(mkey_password);
|
|
retval = krb5_principal2salt(util_context, master_princ, &master_salt);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while calculating master key salt");
|
|
+ com_err(progname, retval, "while calculating master key salt");
|
|
goto err_nomsg;
|
|
}
|
|
|
|
@@ -646,7 +646,7 @@ void kdb5_ldap_create(argc, argv)
|
|
free(master_salt.data);
|
|
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while transforming master key from password");
|
|
+ com_err(progname, retval, "while transforming master key from password");
|
|
goto err_nomsg;
|
|
}
|
|
|
|
@@ -689,28 +689,28 @@ void kdb5_ldap_create(argc, argv)
|
|
/* Create 'K/M' ... */
|
|
rblock.flags |= KRB5_KDB_DISALLOW_ALL_TIX;
|
|
if ((retval = kdb_ldap_create_principal(util_context, master_princ, MASTER_KEY, &rblock))) {
|
|
- com_err(argv[0], retval, "while adding entries to the database");
|
|
+ com_err(progname, retval, "while adding entries to the database");
|
|
goto err_nomsg;
|
|
}
|
|
|
|
/* Create 'krbtgt' ... */
|
|
rblock.flags = 0; /* reset the flags */
|
|
if ((retval = kdb_ldap_create_principal(util_context, &tgt_princ, TGT_KEY, &rblock))) {
|
|
- com_err(argv[0], retval, "while adding entries to the database");
|
|
+ com_err(progname, retval, "while adding entries to the database");
|
|
goto err_nomsg;
|
|
}
|
|
|
|
/* Create 'kadmin/admin' ... */
|
|
snprintf(princ_name, sizeof(princ_name), "%s@%s", KADM5_ADMIN_SERVICE, global_params.realm);
|
|
if ((retval = krb5_parse_name(util_context, princ_name, &p))) {
|
|
- com_err(argv[0], retval, "while adding entries to the database");
|
|
+ com_err(progname, retval, "while adding entries to the database");
|
|
goto err_nomsg;
|
|
}
|
|
rblock.max_life = ADMIN_LIFETIME;
|
|
rblock.flags = KRB5_KDB_DISALLOW_TGT_BASED;
|
|
if ((retval = kdb_ldap_create_principal(util_context, p, TGT_KEY, &rblock))) {
|
|
krb5_free_principal(util_context, p);
|
|
- com_err(argv[0], retval, "while adding entries to the database");
|
|
+ com_err(progname, retval, "while adding entries to the database");
|
|
goto err_nomsg;
|
|
}
|
|
krb5_free_principal(util_context, p);
|
|
@@ -718,7 +718,7 @@ void kdb5_ldap_create(argc, argv)
|
|
/* Create 'kadmin/changepw' ... */
|
|
snprintf(princ_name, sizeof(princ_name), "%s@%s", KADM5_CHANGEPW_SERVICE, global_params.realm);
|
|
if ((retval = krb5_parse_name(util_context, princ_name, &p))) {
|
|
- com_err(argv[0], retval, "while adding entries to the database");
|
|
+ com_err(progname, retval, "while adding entries to the database");
|
|
goto err_nomsg;
|
|
}
|
|
rblock.max_life = CHANGEPW_LIFETIME;
|
|
@@ -726,7 +726,7 @@ void kdb5_ldap_create(argc, argv)
|
|
KRB5_KDB_PWCHANGE_SERVICE;
|
|
if ((retval = kdb_ldap_create_principal(util_context, p, TGT_KEY, &rblock))) {
|
|
krb5_free_principal(util_context, p);
|
|
- com_err(argv[0], retval, "while adding entries to the database");
|
|
+ com_err(progname, retval, "while adding entries to the database");
|
|
goto err_nomsg;
|
|
}
|
|
krb5_free_principal(util_context, p);
|
|
@@ -734,26 +734,26 @@ void kdb5_ldap_create(argc, argv)
|
|
/* Create 'kadmin/history' ... */
|
|
snprintf(princ_name, sizeof(princ_name), "%s@%s", KADM5_HIST_PRINCIPAL, global_params.realm);
|
|
if ((retval = krb5_parse_name(util_context, princ_name, &p))) {
|
|
- com_err(argv[0], retval, "while adding entries to the database");
|
|
+ com_err(progname, retval, "while adding entries to the database");
|
|
goto err_nomsg;
|
|
}
|
|
rblock.max_life = global_params.max_life;
|
|
rblock.flags = 0;
|
|
if ((retval = kdb_ldap_create_principal(util_context, p, TGT_KEY, &rblock))) {
|
|
krb5_free_principal(util_context, p);
|
|
- com_err(argv[0], retval, "while adding entries to the database");
|
|
+ com_err(progname, retval, "while adding entries to the database");
|
|
goto err_nomsg;
|
|
}
|
|
krb5_free_principal(util_context, p);
|
|
|
|
/* Create 'kadmin/<hostname>' ... */
|
|
if ((retval=krb5_sname_to_principal(util_context, NULL, "kadmin", KRB5_NT_SRV_HST, &p))) {
|
|
- com_err(argv[0], retval, "krb5_sname_to_principal, while adding entries to the database");
|
|
+ com_err(progname, retval, "krb5_sname_to_principal, while adding entries to the database");
|
|
goto err_nomsg;
|
|
}
|
|
|
|
if ((retval=krb5_copy_principal(util_context, p, &temp_p))) {
|
|
- com_err(argv[0], retval, "krb5_copy_principal, while adding entries to the database");
|
|
+ com_err(progname, retval, "krb5_copy_principal, while adding entries to the database");
|
|
goto err_nomsg;
|
|
}
|
|
|
|
@@ -762,7 +762,7 @@ void kdb5_ldap_create(argc, argv)
|
|
temp_p->realm.length = strlen(util_context->default_realm);
|
|
temp_p->realm.data = strdup(util_context->default_realm);
|
|
if (temp_p->realm.data == NULL) {
|
|
- com_err(argv[0], ENOMEM, "while adding entries to the database");
|
|
+ com_err(progname, ENOMEM, "while adding entries to the database");
|
|
goto err_nomsg;
|
|
}
|
|
|
|
@@ -770,7 +770,7 @@ void kdb5_ldap_create(argc, argv)
|
|
rblock.flags = KRB5_KDB_DISALLOW_TGT_BASED;
|
|
if ((retval = kdb_ldap_create_principal(util_context, temp_p, TGT_KEY, &rblock))) {
|
|
krb5_free_principal(util_context, p);
|
|
- com_err(argv[0], retval, "while adding entries to the database");
|
|
+ com_err(progname, retval, "while adding entries to the database");
|
|
goto err_nomsg;
|
|
}
|
|
krb5_free_principal(util_context, temp_p);
|
|
@@ -798,7 +798,7 @@ void kdb5_ldap_create(argc, argv)
|
|
LDAP_KDC_SERVICE, rparams->kdcservers[i],
|
|
rparams->realm_name, rparams->subtree, rightsmask)) != 0) {
|
|
printf("failed\n");
|
|
- com_err(argv[0], retval, "while assigning rights to '%s'",
|
|
+ com_err(progname, retval, "while assigning rights to '%s'",
|
|
rparams->realm_name);
|
|
goto err_nomsg;
|
|
}
|
|
@@ -814,7 +814,7 @@ void kdb5_ldap_create(argc, argv)
|
|
LDAP_ADMIN_SERVICE, rparams->adminservers[i],
|
|
rparams->realm_name, rparams->subtree, rightsmask)) != 0) {
|
|
printf("failed\n");
|
|
- com_err(argv[0], retval, "while assigning rights to '%s'",
|
|
+ com_err(progname, retval, "while assigning rights to '%s'",
|
|
rparams->realm_name);
|
|
goto err_nomsg;
|
|
}
|
|
@@ -830,7 +830,7 @@ void kdb5_ldap_create(argc, argv)
|
|
LDAP_PASSWD_SERVICE, rparams->passwdservers[i],
|
|
rparams->realm_name, rparams->subtree, rightsmask)) != 0) {
|
|
printf("failed\n");
|
|
- com_err(argv[0], retval, "while assigning rights to '%s'",
|
|
+ com_err(progname, retval, "while assigning rights to '%s'",
|
|
rparams->realm_name);
|
|
goto err_nomsg;
|
|
}
|
|
@@ -850,7 +850,7 @@ void kdb5_ldap_create(argc, argv)
|
|
master_princ,
|
|
&master_keyblock, NULL);
|
|
if (retval) {
|
|
- com_err(argv[0], errno, "while storing key");
|
|
+ com_err(progname, errno, "while storing key");
|
|
printf("Warning: couldn't stash master key.\n");
|
|
}
|
|
}
|
|
@@ -879,7 +879,7 @@ cleanup:
|
|
|
|
if (retval) {
|
|
if (!no_msg) {
|
|
- com_err(argv[0], retval, "while creating realm '%s'",
|
|
+ com_err(progname, retval, "while creating realm '%s'",
|
|
global_params.realm);
|
|
}
|
|
exit_status++;
|
|
@@ -932,7 +932,7 @@ void kdb5_ldap_modify(argc, argv)
|
|
|
|
if ((retval = krb5_ldap_read_krbcontainer_params(util_context,
|
|
&(ldap_context->krbcontainer)))) {
|
|
- com_err(argv[0], retval, "while reading Kerberos container information");
|
|
+ com_err(progname, retval, "while reading Kerberos container information");
|
|
goto err_nomsg;
|
|
}
|
|
|
|
@@ -986,7 +986,7 @@ void kdb5_ldap_modify(argc, argv)
|
|
rparams->subtree = slist;
|
|
} else if(strncmp(argv[i], "", strlen(argv[i]))==0) {
|
|
/* dont allow subtree value to be set at the root(NULL, "") of the tree */
|
|
- com_err(argv[0], EINVAL,
|
|
+ com_err(progname, EINVAL,
|
|
"for subtree while modifying realm '%s'",
|
|
global_params.realm);
|
|
goto err_nomsg;
|
|
@@ -998,7 +998,7 @@ void kdb5_ldap_modify(argc, argv)
|
|
goto err_usage;
|
|
if(strncmp(argv[i], "", strlen(argv[i]))==0) {
|
|
/* dont allow containerref value to be set at the root(NULL, "") of the tree */
|
|
- com_err(argv[0], EINVAL,
|
|
+ com_err(progname, EINVAL,
|
|
"for container reference while modifying realm '%s'",
|
|
global_params.realm);
|
|
goto err_nomsg;
|
|
@@ -1024,7 +1024,7 @@ void kdb5_ldap_modify(argc, argv)
|
|
if ((rparams->search_scope != 1) &&
|
|
(rparams->search_scope != 2)) {
|
|
retval = EINVAL;
|
|
- com_err(argv[0], retval,
|
|
+ com_err(progname, retval,
|
|
"specified for search scope while modifying information of realm '%s'",
|
|
global_params.realm);
|
|
goto err_nomsg;
|
|
@@ -1529,7 +1529,7 @@ void kdb5_ldap_modify(argc, argv)
|
|
LDAP_KDC_SERVICE, oldkdcdns[i],
|
|
rparams->realm_name, oldsubtrees, rightsmask)) != 0) {
|
|
printf("failed\n");
|
|
- com_err(argv[0], retval, "while assigning rights '%s'",
|
|
+ com_err(progname, retval, "while assigning rights '%s'",
|
|
rparams->realm_name);
|
|
goto err_nomsg;
|
|
}
|
|
@@ -1546,7 +1546,7 @@ void kdb5_ldap_modify(argc, argv)
|
|
LDAP_KDC_SERVICE, newkdcdns[i], rparams->realm_name,
|
|
rparams->subtree, rightsmask)) != 0) {
|
|
printf("failed\n");
|
|
- com_err(argv[0], retval, "while assigning rights to '%s'",
|
|
+ com_err(progname, retval, "while assigning rights to '%s'",
|
|
rparams->realm_name);
|
|
goto err_nomsg;
|
|
}
|
|
@@ -1608,7 +1608,7 @@ void kdb5_ldap_modify(argc, argv)
|
|
LDAP_ADMIN_SERVICE, oldadmindns[i],
|
|
rparams->realm_name, oldsubtrees, rightsmask)) != 0) {
|
|
printf("failed\n");
|
|
- com_err(argv[0], retval, "while assigning rights '%s'",
|
|
+ com_err(progname, retval, "while assigning rights '%s'",
|
|
rparams->realm_name);
|
|
goto err_nomsg;
|
|
}
|
|
@@ -1626,7 +1626,7 @@ void kdb5_ldap_modify(argc, argv)
|
|
LDAP_ADMIN_SERVICE, newadmindns[i],
|
|
rparams->realm_name, rparams->subtree, rightsmask)) != 0) {
|
|
printf("failed\n");
|
|
- com_err(argv[0], retval, "while assigning rights to '%s'",
|
|
+ com_err(progname, retval, "while assigning rights to '%s'",
|
|
rparams->realm_name);
|
|
goto err_nomsg;
|
|
}
|
|
@@ -1688,7 +1688,7 @@ void kdb5_ldap_modify(argc, argv)
|
|
LDAP_PASSWD_SERVICE, oldpwddns[i],
|
|
rparams->realm_name, oldsubtrees, rightsmask))) {
|
|
printf("failed\n");
|
|
- com_err(argv[0], retval, "while assigning rights '%s'",
|
|
+ com_err(progname, retval, "while assigning rights '%s'",
|
|
rparams->realm_name);
|
|
goto err_nomsg;
|
|
}
|
|
@@ -1705,7 +1705,7 @@ void kdb5_ldap_modify(argc, argv)
|
|
LDAP_PASSWD_SERVICE, newpwddns[i],
|
|
rparams->realm_name, rparams->subtree, rightsmask))) {
|
|
printf("failed\n");
|
|
- com_err(argv[0], retval, "while assigning rights to '%s'",
|
|
+ com_err(progname, retval, "while assigning rights to '%s'",
|
|
rparams->realm_name);
|
|
goto err_nomsg;
|
|
}
|
|
@@ -1777,7 +1777,7 @@ cleanup:
|
|
|
|
if (retval) {
|
|
if (!no_msg)
|
|
- com_err(argv[0], retval, "while modifying information of realm '%s'",
|
|
+ com_err(progname, retval, "while modifying information of realm '%s'",
|
|
global_params.realm);
|
|
exit_status++;
|
|
}
|
|
@@ -1804,7 +1804,7 @@ void kdb5_ldap_view(argc, argv)
|
|
ldap_context = (krb5_ldap_context *) dal_handle->db_context;
|
|
if (!(ldap_context)) {
|
|
retval = EINVAL;
|
|
- com_err(argv[0], retval, "while initializing database");
|
|
+ com_err(progname, retval, "while initializing database");
|
|
exit_status++;
|
|
return;
|
|
}
|
|
@@ -1812,14 +1812,14 @@ void kdb5_ldap_view(argc, argv)
|
|
/* Read the kerberos container information */
|
|
if ((retval = krb5_ldap_read_krbcontainer_params(util_context,
|
|
&(ldap_context->krbcontainer))) != 0) {
|
|
- com_err(argv[0], retval, "while reading kerberos container information");
|
|
+ com_err(progname, retval, "while reading kerberos container information");
|
|
exit_status++;
|
|
return;
|
|
}
|
|
|
|
if ((retval = krb5_ldap_read_realm_params(util_context,
|
|
global_params.realm, &rparams, &mask)) || (!rparams)) {
|
|
- com_err(argv[0], retval, "while reading information of realm '%s'",
|
|
+ com_err(progname, retval, "while reading information of realm '%s'",
|
|
global_params.realm);
|
|
exit_status++;
|
|
return;
|
|
@@ -2009,7 +2009,7 @@ void kdb5_ldap_list(argc, argv)
|
|
/* Read the kerberos container information */
|
|
if ((retval = krb5_ldap_read_krbcontainer_params(util_context,
|
|
&(ldap_context->krbcontainer))) != 0) {
|
|
- com_err(argv[0], retval, "while reading kerberos container information");
|
|
+ com_err(progname, retval, "while reading kerberos container information");
|
|
exit_status++;
|
|
return;
|
|
}
|
|
@@ -2018,7 +2018,7 @@ void kdb5_ldap_list(argc, argv)
|
|
if (retval != 0) {
|
|
krb5_ldap_free_krbcontainer_params(ldap_context->krbcontainer);
|
|
ldap_context->krbcontainer = NULL;
|
|
- com_err (argv[0], retval, "while listing realms");
|
|
+ com_err (progname, retval, "while listing realms");
|
|
exit_status++;
|
|
return;
|
|
}
|
|
@@ -2434,7 +2434,7 @@ kdb5_ldap_destroy(argc, argv)
|
|
dal_handle = (kdb5_dal_handle *)util_context->db_context;
|
|
ldap_context = (krb5_ldap_context *) dal_handle->db_context;
|
|
if (!(ldap_context)) {
|
|
- com_err(argv[0], EINVAL, "while initializing database");
|
|
+ com_err(progname, EINVAL, "while initializing database");
|
|
exit_status++;
|
|
return;
|
|
}
|
|
@@ -2442,7 +2442,7 @@ kdb5_ldap_destroy(argc, argv)
|
|
/* Read the kerberos container from the LDAP Server */
|
|
if ((retval = krb5_ldap_read_krbcontainer_params(util_context,
|
|
&(ldap_context->krbcontainer))) != 0) {
|
|
- com_err(argv[0], retval, "while reading kerberos container information");
|
|
+ com_err(progname, retval, "while reading kerberos container information");
|
|
exit_status++;
|
|
return;
|
|
}
|
|
@@ -2450,7 +2450,7 @@ kdb5_ldap_destroy(argc, argv)
|
|
/* Read the Realm information from the LDAP Server */
|
|
if ((retval = krb5_ldap_read_realm_params(util_context, global_params.realm,
|
|
&(ldap_context->lrparams), &mask)) != 0) {
|
|
- com_err(argv[0], retval, "while reading realm information");
|
|
+ com_err(progname, retval, "while reading realm information");
|
|
exit_status++;
|
|
return;
|
|
}
|
|
@@ -2472,7 +2472,7 @@ kdb5_ldap_destroy(argc, argv)
|
|
LDAP_KDC_SERVICE, rparams->kdcservers[i],
|
|
rparams->realm_name, rparams->subtree, rightsmask)) != 0) {
|
|
printf("failed\n");
|
|
- com_err(argv[0], retval, "while assigning rights to '%s'",
|
|
+ com_err(progname, retval, "while assigning rights to '%s'",
|
|
rparams->realm_name);
|
|
return;
|
|
}
|
|
@@ -2487,7 +2487,7 @@ kdb5_ldap_destroy(argc, argv)
|
|
LDAP_ADMIN_SERVICE, rparams->adminservers[i],
|
|
rparams->realm_name, rparams->subtree, rightsmask)) != 0) {
|
|
printf("failed\n");
|
|
- com_err(argv[0], retval, "while assigning rights to '%s'",
|
|
+ com_err(progname, retval, "while assigning rights to '%s'",
|
|
rparams->realm_name);
|
|
return;
|
|
}
|
|
@@ -2502,7 +2502,7 @@ kdb5_ldap_destroy(argc, argv)
|
|
LDAP_PASSWD_SERVICE, rparams->passwdservers[i],
|
|
rparams->realm_name, rparams->subtree, rightsmask)) != 0) {
|
|
printf("failed\n");
|
|
- com_err(argv[0], retval, "while assigning rights to '%s'",
|
|
+ com_err(progname, retval, "while assigning rights to '%s'",
|
|
rparams->realm_name);
|
|
return;
|
|
}
|
|
@@ -2514,7 +2514,7 @@ kdb5_ldap_destroy(argc, argv)
|
|
/* Delete the realm container and all the associated principals */
|
|
retval = krb5_ldap_delete_realm(util_context, global_params.realm);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "deleting database of '%s'", global_params.realm);
|
|
+ com_err(progname, retval, "deleting database of '%s'", global_params.realm);
|
|
exit_status++;
|
|
return;
|
|
}
|
|
Index: src/plugins/kdb/ldap/ldap_util/kdb5_ldap_util.h
|
|
===================================================================
|
|
--- src/plugins/kdb/ldap/ldap_util/kdb5_ldap_util.h.orig
|
|
+++ src/plugins/kdb/ldap/ldap_util/kdb5_ldap_util.h
|
|
@@ -58,6 +58,8 @@
|
|
#define DESTROY_POLICY 14
|
|
#define LIST_POLICY 15
|
|
|
|
+extern char *progname;
|
|
+
|
|
extern int exit_status;
|
|
extern krb5_context util_context;
|
|
|
|
Index: src/plugins/kdb/ldap/ldap_util/kdb5_ldap_services.c
|
|
===================================================================
|
|
--- src/plugins/kdb/ldap/ldap_util/kdb5_ldap_services.c.orig
|
|
+++ src/plugins/kdb/ldap/ldap_util/kdb5_ldap_services.c
|
|
@@ -198,7 +198,7 @@ void kdb5_ldap_create_service(argc, argv
|
|
int argc;
|
|
char *argv[];
|
|
{
|
|
- char *me = argv[0];
|
|
+ char *me = progname;
|
|
krb5_error_code retval = 0;
|
|
krb5_ldap_service_params *srvparams = NULL;
|
|
krb5_boolean print_usage = FALSE;
|
|
@@ -496,7 +496,7 @@ void kdb5_ldap_modify_service(argc, argv
|
|
int argc;
|
|
char *argv[];
|
|
{
|
|
- char *me = argv[0];
|
|
+ char *me = progname;
|
|
krb5_error_code retval = 0;
|
|
krb5_ldap_service_params *srvparams = NULL;
|
|
krb5_boolean print_usage = FALSE;
|
|
@@ -569,7 +569,7 @@ void kdb5_ldap_modify_service(argc, argv
|
|
|
|
retval = krb5_ldap_read_service(util_context, servicedn, &srvparams, &in_mask);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while reading information of service '%s'",
|
|
+ com_err(me, retval, "while reading information of service '%s'",
|
|
servicedn);
|
|
goto err_nomsg;
|
|
}
|
|
@@ -1061,7 +1061,7 @@ rem_service_entry_from_file(argc, argv,
|
|
char *service_object;
|
|
{
|
|
int st = EINVAL;
|
|
- char *me = argv[0];
|
|
+ char *me = progname;
|
|
char *tmp_file = NULL;
|
|
int tmpfd = -1;
|
|
FILE *pfile = NULL;
|
|
@@ -1175,7 +1175,7 @@ kdb5_ldap_destroy_service(argc, argv)
|
|
if (argv[i+1]) {
|
|
stashfilename=strdup(argv[i+1]);
|
|
if (stashfilename == NULL) {
|
|
- com_err(argv[0], ENOMEM, "while destroying service");
|
|
+ com_err(progname, ENOMEM, "while destroying service");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -1188,7 +1188,7 @@ kdb5_ldap_destroy_service(argc, argv)
|
|
if ((argv[i]) && (servicedn == NULL)) {
|
|
servicedn=strdup(argv[i]);
|
|
if (servicedn == NULL) {
|
|
- com_err(argv[0], ENOMEM, "while destroying service");
|
|
+ com_err(progname, ENOMEM, "while destroying service");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -1219,7 +1219,7 @@ kdb5_ldap_destroy_service(argc, argv)
|
|
|
|
if ((retval = krb5_ldap_read_service(util_context, servicedn,
|
|
&lserparams, &mask))) {
|
|
- com_err(argv[0], retval, "while destroying service '%s'",servicedn);
|
|
+ com_err(progname, retval, "while destroying service '%s'",servicedn);
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -1227,7 +1227,7 @@ kdb5_ldap_destroy_service(argc, argv)
|
|
retval = krb5_ldap_delete_service(util_context, lserparams, servicedn);
|
|
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while destroying service '%s'", servicedn);
|
|
+ com_err(progname, retval, "while destroying service '%s'", servicedn);
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -1235,7 +1235,7 @@ kdb5_ldap_destroy_service(argc, argv)
|
|
if (stashfilename == NULL) {
|
|
stashfilename = strdup(DEF_SERVICE_PASSWD_FILE);
|
|
if (stashfilename == NULL) {
|
|
- com_err(argv[0], ENOMEM, "while destroying service");
|
|
+ com_err(progname, ENOMEM, "while destroying service");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -1295,13 +1295,13 @@ void kdb5_ldap_view_service(argc, argv)
|
|
|
|
servicedn=strdup(argv[1]);
|
|
if (servicedn == NULL) {
|
|
- com_err(argv[0], ENOMEM, "while viewing service");
|
|
+ com_err(progname, ENOMEM, "while viewing service");
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
|
|
if ((retval = krb5_ldap_read_service(util_context, servicedn, &lserparams, &mask))) {
|
|
- com_err(argv[0], retval, "while viewing service '%s'",servicedn);
|
|
+ com_err(progname, retval, "while viewing service '%s'",servicedn);
|
|
exit_status++;
|
|
goto cleanup;
|
|
}
|
|
@@ -1338,7 +1338,7 @@ void kdb5_ldap_list_services(argc, argv)
|
|
int argc;
|
|
char *argv[];
|
|
{
|
|
- char *me = argv[0];
|
|
+ char *me = progname;
|
|
krb5_error_code retval = 0;
|
|
char *basedn = NULL;
|
|
char **list = NULL;
|
|
@@ -1519,7 +1519,7 @@ kdb5_ldap_set_service_password(argc, arg
|
|
krb5_ldap_context *lparams = NULL;
|
|
char *file_name = NULL;
|
|
char *tmp_file = NULL;
|
|
- char *me = argv[0];
|
|
+ char *me = progname;
|
|
int filelen = 0;
|
|
int random_passwd = 0;
|
|
int set_dir_pwd = 1;
|
|
@@ -1902,7 +1902,7 @@ kdb5_ldap_stash_service_password(argc, a
|
|
{
|
|
int ret = 0;
|
|
unsigned int passwd_len = 0;
|
|
- char *me = argv[0];
|
|
+ char *me = progname;
|
|
char *service_object = NULL;
|
|
char *file_name = NULL, *tmp_file = NULL;
|
|
char passwd[MAX_SERVICE_PASSWD_LEN];
|
|
Index: src/plugins/kdb/ldap/ldap_util/kdb5_ldap_util.M
|
|
===================================================================
|
|
--- src/plugins/kdb/ldap/ldap_util/kdb5_ldap_util.M.orig
|
|
+++ src/plugins/kdb/ldap/ldap_util/kdb5_ldap_util.M
|
|
@@ -73,7 +73,7 @@ set. This means all the ticket options w
|
|
The various flags are:
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_postdated\fP
|
|
-.B -allow_postdated
|
|
+.B \-allow_postdated
|
|
prohibits principals from obtaining postdated tickets. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_POSTDATED
|
|
flag.)
|
|
@@ -81,7 +81,7 @@ flag.)
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_forwardable\fP
|
|
-.B -allow_forwardable
|
|
+.B \-allow_forwardable
|
|
prohibits principals from obtaining forwardable tickets. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_FORWARDABLE
|
|
flag.)
|
|
@@ -89,7 +89,7 @@ flag.)
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_renewable\fP
|
|
-.B -allow_renewable
|
|
+.B \-allow_renewable
|
|
prohibits principals from obtaining renewable tickets. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_RENEWABLE
|
|
flag.)
|
|
@@ -97,7 +97,7 @@ flag.)
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_proxiable\fP
|
|
-.B -allow_proxiable
|
|
+.B \-allow_proxiable
|
|
prohibits principals from obtaining proxiable tickets. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_PROXIABLE
|
|
flag.)
|
|
@@ -105,7 +105,7 @@ flag.)
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_dup_skey\fP
|
|
-.B -allow_dup_skey
|
|
+.B \-allow_dup_skey
|
|
Disables user-to-user authentication for principals by prohibiting
|
|
principals from obtaining a session key for another user. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_DUP_SKEY
|
|
@@ -119,7 +119,7 @@ requires principals to preauthenticate b
|
|
kinit. (Sets the
|
|
.SM KRB5_KDB_REQUIRES_PRE_AUTH
|
|
flag.)
|
|
-.B -requires_preauth
|
|
+.B \-requires_preauth
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBrequires_hwauth\fP
|
|
@@ -128,11 +128,11 @@ requires principals to preauthenticate u
|
|
before being allowed to kinit. (Sets the
|
|
.SM KRB5_KDB_REQUIRES_HW_AUTH
|
|
flag.)
|
|
-.B -requires_hwauth
|
|
+.B \-requires_hwauth
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_svr\fP
|
|
-.B -allow_svr
|
|
+.B \-allow_svr
|
|
prohibits the issuance of service tickets for principals. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_SVR
|
|
flag.)
|
|
@@ -208,9 +208,9 @@ Specifies the list of Administration ser
|
|
of the Administration service objects separated by colon(:).
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org -H ldaps://ldap-server1.mit.edu
|
|
-create -subtrees o=org -sscope SUB
|
|
--r ATHENA.MIT.EDU\fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org \-H ldaps://ldap-server1.mit.edu
|
|
+create \-subtrees o=org \-sscope SUB
|
|
+\-r ATHENA.MIT.EDU\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
Initializing database for realm 'ATHENA.MIT.EDU'
|
|
@@ -255,7 +255,7 @@ and no restriction will be set.
|
|
The various flags are:
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_postdated\fP
|
|
-.B -allow_postdated
|
|
+.B \-allow_postdated
|
|
prohibits principals from obtaining postdated tickets. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_POSTDATED
|
|
flag.)
|
|
@@ -263,7 +263,7 @@ flag.)
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_forwardable\fP
|
|
-.B -allow_forwardable
|
|
+.B \-allow_forwardable
|
|
prohibits principals from obtaining forwardable tickets. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_FORWARDABLE
|
|
flag.)
|
|
@@ -271,7 +271,7 @@ flag.)
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_renewable\fP
|
|
-.B -allow_renewable
|
|
+.B \-allow_renewable
|
|
prohibits principals from obtaining renewable tickets. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_RENEWABLE
|
|
flag.)
|
|
@@ -279,7 +279,7 @@ flag.)
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_proxiable\fP
|
|
-.B -allow_proxiable
|
|
+.B \-allow_proxiable
|
|
prohibits principals from obtaining proxiable tickets. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_PROXIABLE
|
|
flag.)
|
|
@@ -287,7 +287,7 @@ flag.)
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_dup_skey\fP
|
|
-.B -allow_dup_skey
|
|
+.B \-allow_dup_skey
|
|
Disables user-to-user authentication for principals by prohibiting
|
|
principals from obtaining a session key for another user. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_DUP_SKEY
|
|
@@ -301,7 +301,7 @@ requires principals to preauthenticate b
|
|
kinit. (Sets the
|
|
.SM KRB5_KDB_REQUIRES_PRE_AUTH
|
|
flag.)
|
|
-.B -requires_preauth
|
|
+.B \-requires_preauth
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBrequires_hwauth\fP
|
|
@@ -310,11 +310,11 @@ requires principals to preauthenticate u
|
|
before being allowed to kinit. (Sets the
|
|
.SM KRB5_KDB_REQUIRES_HW_AUTH
|
|
flag.)
|
|
-.B -requires_hwauth
|
|
+.B \-requires_hwauth
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_svr\fP
|
|
-.B -allow_svr
|
|
+.B \-allow_svr
|
|
prohibits the issuance of service tickets for principals. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_SVR
|
|
flag.)
|
|
@@ -406,8 +406,8 @@ Specifies the list of Administration ser
|
|
contains the DNs of the Administration service objects separated by a colon (:).
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org -H ldaps://ldap-server1.mit.edu modify
|
|
-+requires_preauth -r ATHENA.MIT.EDU \fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org \-H ldaps://ldap-server1.mit.edu modify
|
|
++requires_preauth \-r ATHENA.MIT.EDU \fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
.fi
|
|
@@ -423,8 +423,8 @@ Specifies the Kerberos realm of the data
|
|
is used.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org -H ldaps://ldap-server1.mit.edu view
|
|
--r ATHENA.MIT.EDU\fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org \-H ldaps://ldap-server1.mit.edu view
|
|
+\-r ATHENA.MIT.EDU\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
Realm Name: ATHENA.MIT.EDU
|
|
@@ -450,8 +450,8 @@ Specifies the Kerberos realm of the data
|
|
is used.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org -H ldaps://ldap-server1.mit.edu destroy
|
|
--r ATHENA.MIT.EDU\fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org \-H ldaps://ldap-server1.mit.edu destroy
|
|
+\-r ATHENA.MIT.EDU\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
Deleting KDC database of 'ATHENA.MIT.EDU', are you sure?
|
|
@@ -467,7 +467,7 @@ Lists the name of realms.
|
|
.nf
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org -H ldaps://ldap-server1.mit.edu list\fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org \-H ldaps://ldap-server1.mit.edu list\fP
|
|
Password for "cn=admin,o=org":
|
|
ATHENA.MIT.EDU
|
|
OPENLDAP.MIT.EDU
|
|
@@ -487,7 +487,7 @@ Specifies the complete path of the servi
|
|
Specifies Distinguished name (DN) of the service object whose password is to be stored in file.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util stashsrvpw -f /home/andrew/conf_keyfile cn=service-kdc,o=org\fP
|
|
+\fBkdb5_ldap_util stashsrvpw \-f /home/andrew/conf_keyfile cn=service-kdc,o=org\fP
|
|
.nf
|
|
Password for "cn=service-kdc,o=org":
|
|
Re-enter password for "cn=service-kdc,o=org":
|
|
@@ -517,7 +517,7 @@ set. This means all the ticket options w
|
|
The various flags are:
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_postdated\fP
|
|
-.B -allow_postdated
|
|
+.B \-allow_postdated
|
|
prohibits principals from obtaining postdated tickets. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_POSTDATED
|
|
flag.)
|
|
@@ -525,7 +525,7 @@ flag.)
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_forwardable\fP
|
|
-.B -allow_forwardable
|
|
+.B \-allow_forwardable
|
|
prohibits principals from obtaining forwardable tickets. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_FORWARDABLE
|
|
flag.)
|
|
@@ -533,7 +533,7 @@ flag.)
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_renewable\fP
|
|
-.B -allow_renewable
|
|
+.B \-allow_renewable
|
|
prohibits principals from obtaining renewable tickets. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_RENEWABLE
|
|
flag.)
|
|
@@ -541,7 +541,7 @@ flag.)
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_proxiable\fP
|
|
-.B -allow_proxiable
|
|
+.B \-allow_proxiable
|
|
prohibits principals from obtaining proxiable tickets. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_PROXIABLE
|
|
flag.)
|
|
@@ -549,7 +549,7 @@ flag.)
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_dup_skey\fP
|
|
-.B -allow_dup_skey
|
|
+.B \-allow_dup_skey
|
|
Disables user-to-user authentication for principals by prohibiting
|
|
principals from obtaining a session key for another user. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_DUP_SKEY
|
|
@@ -563,7 +563,7 @@ requires principals to preauthenticate b
|
|
kinit. (Sets the
|
|
.SM KRB5_KDB_REQUIRES_PRE_AUTH
|
|
flag.)
|
|
-.B -requires_preauth
|
|
+.B \-requires_preauth
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBrequires_hwauth\fP
|
|
@@ -572,11 +572,11 @@ requires principals to preauthenticate u
|
|
before being allowed to kinit. (Sets the
|
|
.SM KRB5_KDB_REQUIRES_HW_AUTH
|
|
flag.)
|
|
-.B -requires_hwauth
|
|
+.B \-requires_hwauth
|
|
clears this flag.
|
|
.TP
|
|
{\fB\-\fP|\fB+\fP}\fBallow_svr\fP
|
|
-.B -allow_svr
|
|
+.B \-allow_svr
|
|
prohibits the issuance of service tickets for principals. (Sets the
|
|
.SM KRB5_KDB_DISALLOW_SVR
|
|
flag.)
|
|
@@ -639,7 +639,7 @@ flag on principals in the database.
|
|
Specifies the name of the ticket policy.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org -H ldaps://ldap-server1.mit.edu create_policy -r ATHENA.MIT.EDU -maxtktlife "1 day" -maxrenewlife "1 week" -allow_postdated +needchange -allow_forwardable tktpolicy\fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org \-H ldaps://ldap-server1.mit.edu create_policy \-r ATHENA.MIT.EDU \-maxtktlife "1 day" \-maxrenewlife "1 week" \-allow_postdated +needchange \-allow_forwardable tktpolicy\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
.fi
|
|
@@ -657,7 +657,7 @@ returned by
|
|
is used.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org -H ldaps://ldap-server1.mit.edu modify_policy -r ATHENA.MIT.EDU -maxtktlife "60 minutes" -maxrenewlife "10 hours" +allow_postdated -requires_preauth tktpolicy\fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org \-H ldaps://ldap-server1.mit.edu modify_policy \-r ATHENA.MIT.EDU \-maxtktlife "60 minutes" \-maxrenewlife "10 hours" +allow_postdated \-requires_preauth tktpolicy\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
.fi
|
|
@@ -671,7 +671,7 @@ Displays the attributes of a ticket poli
|
|
Specifies the name of the ticket policy.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org -H ldaps://ldap-server1.mit.edu view_policy -r ATHENA.MIT.EDU tktpolicy\fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org \-H ldaps://ldap-server1.mit.edu view_policy \-r ATHENA.MIT.EDU tktpolicy\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
Ticket policy: tktpolicy
|
|
@@ -700,7 +700,7 @@ to confirm the deletion.
|
|
Specifies the name of the ticket policy.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org -H ldaps://ldap-server1.mit.edu destroy_policy -r ATHENA.MIT.EDU tktpolicy\fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org \-H ldaps://ldap-server1.mit.edu destroy_policy \-r ATHENA.MIT.EDU tktpolicy\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
This will delete the policy object 'tktpolicy', are you sure?
|
|
@@ -720,7 +720,7 @@ returned by
|
|
is used.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org -H ldaps://ldap-server1.mit.edu list_policy -r ATHENA.MIT.EDU\fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org \-H ldaps://ldap-server1.mit.edu list_policy \-r ATHENA.MIT.EDU\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
tktpolicy
|
|
@@ -735,22 +735,22 @@ userpolicy
|
|
\fBsetsrvpw\fP [\fB\-randpw\fP|\fB\-fileonly\fP] [\fB\-f\fP\ \fIfilename\fP] \fIservice_dn\fP
|
|
Allows an administrator to set password for service objects such as KDC and Administration server in
|
|
eDirectory and store them in a file. The
|
|
-.I -fileonly
|
|
+.I \-fileonly
|
|
option stores the password in a file and not in the eDirectory object. Options:
|
|
.RS
|
|
.TP
|
|
\fB\-randpw \fP
|
|
Generates and sets a random password. This options can be specified to store the password both in eDirectory and a file. The
|
|
-.I -fileonly
|
|
+.I \-fileonly
|
|
option can not be used if
|
|
-.I -randpw
|
|
+.I \-randpw
|
|
option is already specified.
|
|
.TP
|
|
\fB\-fileonly\fP
|
|
Stores the password only in a file and not in eDirectory. The
|
|
-.I -randpw
|
|
+.I \-randpw
|
|
option can not be used when
|
|
-.I -fileonly
|
|
+.I \-fileonly
|
|
options is specified.
|
|
.TP
|
|
\fB\-f\fP\ \fIfilename\fP
|
|
@@ -760,7 +760,7 @@ Specifies complete path of the service p
|
|
Specifies Distinguished name (DN) of the service object whose password is to be set.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util setsrvpw -D cn=admin,o=org setsrvpw -fileonly -f /home/andrew/conf_keyfile
|
|
+\fBkdb5_ldap_util setsrvpw \-D cn=admin,o=org setsrvpw \-fileonly \-f /home/andrew/conf_keyfile
|
|
cn=service-kdc,o=org\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
@@ -792,16 +792,16 @@ separated by a colon (:).
|
|
.TP
|
|
\fB\-randpw \fP
|
|
Generates and sets a random password. This option is used to set the random password for the service object in directory and also to store it in the file. The
|
|
-.I -fileonly
|
|
+.I \-fileonly
|
|
option can not be used if
|
|
-.I -randpw
|
|
+.I \-randpw
|
|
option is specified.
|
|
.TP
|
|
\fB\-fileonly\fP
|
|
Stores the password only in a file and not in eDirectory. The
|
|
-.I -randpw
|
|
+.I \-randpw
|
|
option can not be used when
|
|
-.I -fileonly
|
|
+.I \-fileonly
|
|
option is specified.
|
|
.TP
|
|
\fB\-f\fP\ \fIfilename\fP
|
|
@@ -811,7 +811,7 @@ Specifies the complete path of the file
|
|
Specifies Distinguished name (DN) of the Kerberos service to be created.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org create_service -kdc -randpw -f /home/andrew/conf_keyfile cn=service-kdc,o=org\fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org create_service \-kdc \-randpw \-f /home/andrew/conf_keyfile cn=service-kdc,o=org\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
File does not exist. Creating the file /home/andrew/conf_keyfile...
|
|
@@ -855,7 +855,7 @@ realms separated by a colon (:).
|
|
Specifies Distinguished name (DN) of the Kerberos service to be modified.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org modify_service -realm ATHENA.MIT.EDU
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org modify_service \-realm ATHENA.MIT.EDU
|
|
cn=service-kdc,o=org\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
@@ -871,7 +871,7 @@ Displays the attributes of a service. O
|
|
Specifies Distinguished name (DN) of the Kerberos service to be viewed.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org view_service cn=service-kdc,o=org\fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org view_service cn=service-kdc,o=org\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
Service dn: cn=service-kdc,o=org
|
|
@@ -897,7 +897,7 @@ needs to be removed.
|
|
Specifies Distinguished name (DN) of the Kerberos service to be destroyed.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org destroy_service cn=service-kdc,o=org\fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org destroy_service cn=service-kdc,o=org\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
This will delete the service object 'cn=service-kdc,o=org', are you sure?
|
|
@@ -922,7 +922,7 @@ for the base DN is
|
|
.B Root.
|
|
.TP
|
|
EXAMPLE:
|
|
-\fBkdb5_ldap_util -D cn=admin,o=org list_service\fP
|
|
+\fBkdb5_ldap_util \-D cn=admin,o=org list_service\fP
|
|
.nf
|
|
Password for "cn=admin,o=org":
|
|
cn=service-kdc,o=org
|
|
Index: src/plugins/kdb/db2/libdb2/test/run.test
|
|
===================================================================
|
|
--- src/plugins/kdb/db2/libdb2/test/run.test.orig
|
|
+++ src/plugins/kdb/db2/libdb2/test/run.test
|
|
@@ -34,7 +34,7 @@ main()
|
|
bindir=/bin/.
|
|
|
|
if [ $# -eq 0 ]; then
|
|
- for t in 1 2 3 4 5 6 7 8 9 10 11 12 13 20; do
|
|
+ for t in 1 2 3 4 5 6 7 8 9 10 11 12 13 20 40 41; do
|
|
test$t
|
|
done
|
|
else
|
|
@@ -45,7 +45,7 @@ main()
|
|
[0-9]*)
|
|
test$1;;
|
|
btree)
|
|
- for t in 1 2 3 7 8 9 10 12 13; do
|
|
+ for t in 1 2 3 7 8 9 10 12 13 40 41; do
|
|
test$t
|
|
done;;
|
|
hash)
|
|
@@ -743,4 +743,162 @@ bsize=$bsize ffactor=$ffactor nelem=2500
|
|
done
|
|
}
|
|
|
|
+# Test for a weird page split condition where an insertion into index
|
|
+# 0 of a page that would cause the new item to be the only item on the
|
|
+# left page results in index 0 of the right page being erroneously
|
|
+# skipped; this only happens with one particular key+data length for
|
|
+# each page size.
|
|
+test40 () {
|
|
+ echo "Test 40: btree: page split on index 0"
|
|
+ e=:
|
|
+ for psize in 512 1024 2048 4096 8192; do
|
|
+ echo " page size $psize"
|
|
+ kdsizes=`awk 'BEGIN {
|
|
+ psize = '$psize'; hsize = int(psize/2);
|
|
+ for (kdsize = hsize-40; kdsize <= hsize; kdsize++) {
|
|
+ print kdsize;
|
|
+ }
|
|
+ }' /dev/null`
|
|
+
|
|
+ # Use a series of keylen+datalen values in the right
|
|
+ # neighborhood to find the one that triggers the bug.
|
|
+ # We could compute the exact size that triggers the
|
|
+ # bug but this additional fuzz may be useful.
|
|
+
|
|
+ # Insert keys in reverse order to maximize the chances
|
|
+ # for a split on index 0.
|
|
+
|
|
+ for kdsize in $kdsizes; do
|
|
+ awk 'BEGIN {
|
|
+ kdsize = '$kdsize';
|
|
+ for (i = 8; i-- > 0; ) {
|
|
+ s = sprintf("a%03d:%09d", i, kdsize);
|
|
+ for (j = 0; j < kdsize-20; j++) {
|
|
+ s = s "x";
|
|
+ }
|
|
+ printf("p\nka%03d\nd%s\n", i, s);
|
|
+ }
|
|
+ print "o";
|
|
+ }' /dev/null > $TMP2
|
|
+ sed -n 's/^d//p' $TMP2 | sort > $TMP1
|
|
+ $PROG -o $TMP3 -i psize=$psize btree $TMP2
|
|
+ if (cmp -s $TMP1 $TMP3); then :
|
|
+ else
|
|
+ echo "test40: btree: page size $psize, \
|
|
+keylen+datalen=$kdsize failed"
|
|
+ e='exit 1'
|
|
+ fi
|
|
+ done
|
|
+ done
|
|
+ $e
|
|
+}
|
|
+
|
|
+# Extremely tricky test attempting to replicate some unusual database
|
|
+# corruption seen in the field: pieces of the database becoming
|
|
+# inaccessible to random access, sequential access, or both. The
|
|
+# hypothesis is that at least some of these are triggered by the bug
|
|
+# in page splits on index 0 with a particular exact keylen+datalen.
|
|
+# (See Test 40.) For psize=4096, this size is exactly 2024.
|
|
+
|
|
+# The order of operations here relies on very specific knowledge of
|
|
+# the internals of the btree access method in order to place records
|
|
+# at specific offsets in a page and to create certain keys on internal
|
|
+# pages. The to-be-split page immediately prior to the bug-triggering
|
|
+# split has the following properties:
|
|
+#
|
|
+# * is not the leftmost leaf page
|
|
+# * key on the parent page is compares less than the key of the item
|
|
+# on index 0
|
|
+# * triggering record's key also compares greater than the key on the
|
|
+# parent page
|
|
+
|
|
+# Additionally, we prime the mpool LRU chain so that the head page on
|
|
+# the chain has the following properties:
|
|
+#
|
|
+# * record at index 0 is located where it will not get overwritten by
|
|
+# items written to the right-hand page during the split
|
|
+# * key of the record at index 0 compares less than the key of the
|
|
+# bug-triggering record
|
|
+
|
|
+# If the page-split bug exists, this test appears to create a database
|
|
+# where some records are inaccessible to a search, but still remain in
|
|
+# the file and are accessible by sequential traversal. At least one
|
|
+# record gets duplicated out of sequence.
|
|
+
|
|
+test41 () {
|
|
+ echo "Test 41: btree: no unsearchables due to page split on index 0"
|
|
+ # list of individual retrievals in a variable for easy reuse
|
|
+ list=`(for i in a b c d; do
|
|
+ for j in 990 998 999; do
|
|
+ echo g ${i}${j} 1024
|
|
+ done
|
|
+ done;
|
|
+ echo g y997 2014
|
|
+ for i in y z; do
|
|
+ for j in 998 999; do
|
|
+ echo g ${i}${j} 1024
|
|
+ done
|
|
+ done)`
|
|
+ # Exact number for trigger condition accounts for newlines
|
|
+ # retained by dbtest with -ofile but not without; we use
|
|
+ # -ofile, so count newlines. keylen=5,datalen=5+2014 for
|
|
+ # psize=4096 here.
|
|
+ (cat - <<EOF
|
|
+p z999 1024
|
|
+p z998 1024
|
|
+p y999 1024
|
|
+p y990 1024
|
|
+p d999 1024
|
|
+p d990 1024
|
|
+p c999 1024
|
|
+p c990 1024
|
|
+p b999 1024
|
|
+p b990 1024
|
|
+p a999 1024
|
|
+p a990 1024
|
|
+p y998 1024
|
|
+r y990
|
|
+p d998 1024
|
|
+p d990 1024
|
|
+p c998 1024
|
|
+p c990 1024
|
|
+p b998 1024
|
|
+p b990 1024
|
|
+p a998 1024
|
|
+p a990 1024
|
|
+p y997 2014
|
|
+S
|
|
+o
|
|
+EOF
|
|
+ echo "$list") |
|
|
+ # awk script input:
|
|
+ # {p|g|r} key [datasize]
|
|
+ awk '/^[pgr]/{
|
|
+ printf("%s\nk%s\n", $1, $2);
|
|
+ }
|
|
+ /^p/{
|
|
+ s = $2;
|
|
+ for (i = 0; i < $3; i++) {
|
|
+ s = s "x";
|
|
+ }
|
|
+ printf("d%s\n", s);
|
|
+ }
|
|
+ !/^[pgr]/{
|
|
+ print $0;
|
|
+ }' > $TMP2
|
|
+ (echo "$list"; echo "$list") | awk '{
|
|
+ s = $2;
|
|
+ for (i = 0; i < $3; i++) {
|
|
+ s = s "x";
|
|
+ }
|
|
+ print s;
|
|
+ }' > $TMP1
|
|
+ $PROG -o $TMP3 -i psize=4096 btree $TMP2
|
|
+ if (cmp -s $TMP1 $TMP3); then :
|
|
+ else
|
|
+ echo "test41: btree: failed"
|
|
+ exit 1
|
|
+ fi
|
|
+}
|
|
+
|
|
main $*
|
|
Index: src/plugins/kdb/db2/libdb2/mpool/mpool.c
|
|
===================================================================
|
|
--- src/plugins/kdb/db2/libdb2/mpool/mpool.c.orig
|
|
+++ src/plugins/kdb/db2/libdb2/mpool/mpool.c
|
|
@@ -377,7 +377,7 @@ mpool_bkt(mp)
|
|
head = &mp->hqh[HASHKEY(bp->pgno)];
|
|
CIRCLEQ_REMOVE(head, bp, hq);
|
|
CIRCLEQ_REMOVE(&mp->lqh, bp, q);
|
|
-#ifdef DEBUG
|
|
+#if defined(DEBUG) && !defined(DEBUG_IDX0SPLIT)
|
|
{ void *spage;
|
|
spage = bp->page;
|
|
memset(bp, 0xff, sizeof(BKT) + mp->pagesize);
|
|
Index: src/plugins/kdb/db2/libdb2/btree/bt_debug.c
|
|
===================================================================
|
|
--- src/plugins/kdb/db2/libdb2/btree/bt_debug.c.orig
|
|
+++ src/plugins/kdb/db2/libdb2/btree/bt_debug.c
|
|
@@ -257,7 +257,8 @@ __bt_dpage(dbp, h)
|
|
*(db_pgno_t *)bl->bytes,
|
|
*(u_int32_t *)(bl->bytes + sizeof(db_pgno_t)));
|
|
else if (bl->ksize)
|
|
- (void)fprintf(tracefp, "%s/", bl->bytes);
|
|
+ (void)fprintf(tracefp, "%.*s/",
|
|
+ (int)bl->ksize, bl->bytes);
|
|
if (bl->flags & P_BIGDATA)
|
|
(void)fprintf(tracefp,
|
|
"big data page %lu size %u",
|
|
Index: src/plugins/kdb/db2/libdb2/btree/bt_split.c
|
|
===================================================================
|
|
--- src/plugins/kdb/db2/libdb2/btree/bt_split.c.orig
|
|
+++ src/plugins/kdb/db2/libdb2/btree/bt_split.c
|
|
@@ -727,7 +727,7 @@ bt_psplit(t, h, l, r, pskip, ilen)
|
|
* the right page.
|
|
*/
|
|
if (skip <= off) {
|
|
- skip = 0;
|
|
+ skip = (indx_t)-1;
|
|
rval = l;
|
|
} else {
|
|
rval = r;
|
|
@@ -737,7 +737,7 @@ bt_psplit(t, h, l, r, pskip, ilen)
|
|
for (off = 0; nxt < top; ++off) {
|
|
if (skip == nxt) {
|
|
++off;
|
|
- skip = 0;
|
|
+ skip = (indx_t)-1;
|
|
}
|
|
switch (h->flags & P_TYPE) {
|
|
case P_BINTERNAL:
|
|
Index: src/plugins/preauth/pkinit/configure.in
|
|
===================================================================
|
|
--- src/plugins/preauth/pkinit/configure.in.orig
|
|
+++ src/plugins/preauth/pkinit/configure.in
|
|
@@ -6,8 +6,6 @@ AC_CHECK_HEADERS(unistd.h)
|
|
AC_TYPE_MODE_T
|
|
AC_TYPE_OFF_T
|
|
|
|
-AC_CHECK_FUNCS()
|
|
-
|
|
# XXX This is incorrect, but should cause -lcrypto to be included by default
|
|
AC_CHECK_LIB(crypto, PKCS7_get_signer_info)
|
|
|
|
Index: src/appl/gssftp/ftp/ftp.M
|
|
===================================================================
|
|
--- src/appl/gssftp/ftp/ftp.M.orig
|
|
+++ src/appl/gssftp/ftp/ftp.M
|
|
@@ -537,7 +537,7 @@ $1.$2 and the remote file name "mydata.d
|
|
"mydata", and $2 would have the value "data". The
|
|
.I outpattern
|
|
determines the resulting mapped filename. The sequences `$1', `$2',
|
|
-...., `$9' are replaced by any value resulting from the
|
|
+\&..., `$9' are replaced by any value resulting from the
|
|
.I inpattern
|
|
template. The sequence `$0' is replace by the original filename.
|
|
Additionally, the sequence `[\fIseq1\fP, \fIseq2\fP]' is replaced by
|
|
Index: src/appl/bsd/v4rcp.M
|
|
===================================================================
|
|
--- src/appl/bsd/v4rcp.M.orig
|
|
+++ src/appl/bsd/v4rcp.M
|
|
@@ -1,5 +1,5 @@
|
|
.\" appl/bsd/v4rcp.M
|
|
-.TH RCP 1 \*h
|
|
+.TH V4RCP 1
|
|
.SH NAME
|
|
v4rcp \- back end for Kerberos V4 rcp
|
|
.SH SYNOPSIS
|
|
Index: src/appl/telnet/telnet/telnet.1
|
|
===================================================================
|
|
--- src/appl/telnet/telnet/telnet.1.orig
|
|
+++ src/appl/telnet/telnet/telnet.1
|
|
@@ -625,7 +625,7 @@ Sends the
|
|
.TP
|
|
.B escape
|
|
Sends the current
|
|
-.b telnet
|
|
+.B telnet
|
|
escape character (initially ``^''.
|
|
.TP
|
|
.B ga
|
|
@@ -761,7 +761,7 @@ character.
|
|
If
|
|
.B telnet
|
|
is in
|
|
-.b localchars
|
|
+.B localchars
|
|
mode (see
|
|
.B toggle localchars
|
|
below),
|
|
@@ -1296,9 +1296,9 @@ is omitted, then an interactive subshell
|
|
.TP
|
|
\fB\&?\fP \fIcommand\fP
|
|
Get help. With no arguments,
|
|
-.b telnet
|
|
+.B telnet
|
|
prints a help summary. If a command is specified,
|
|
-.b telnet
|
|
+.B telnet
|
|
will print the help information for just that command.
|
|
.SH ENVIRONMENT
|
|
.B Telnet
|
|
Index: src/clients/kpasswd/kpasswd.M
|
|
===================================================================
|
|
--- src/clients/kpasswd/kpasswd.M.orig
|
|
+++ src/clients/kpasswd/kpasswd.M
|
|
@@ -21,8 +21,7 @@
|
|
.\" this software for any purpose. It is provided "as is" without express
|
|
.\" or implied warranty.
|
|
.\" "
|
|
-.\.so man1/header.doc
|
|
-.TH KPASSWD 1 \*h
|
|
+.TH KPASSWD 1
|
|
.SH NAME
|
|
kpasswd \- change a user's Kerberos password
|
|
.SH SYNOPSIS
|
|
Index: src/gen-manpages/k5login.M
|
|
===================================================================
|
|
--- src/gen-manpages/k5login.M.orig
|
|
+++ src/gen-manpages/k5login.M
|
|
@@ -1,6 +1,6 @@
|
|
.TH .K5LOGIN 5
|
|
.SH NAME
|
|
-.k5login \- Kerberos V5 acl file for host access.
|
|
+\&.k5login \- Kerberos V5 acl file for host access.
|
|
.SH DESCRIPTION
|
|
The
|
|
.B .k5login
|
|
Index: src/kadmin/dbutil/kdb5_destroy.c
|
|
===================================================================
|
|
--- src/kadmin/dbutil/kdb5_destroy.c.orig
|
|
+++ src/kadmin/dbutil/kdb5_destroy.c
|
|
@@ -60,19 +60,16 @@ kdb5_destroy(argc, argv)
|
|
retval1 = kadm5_init_krb5_context(&context);
|
|
if( retval1 )
|
|
{
|
|
- com_err(argv[0], retval1, "while initializing krb5_context");
|
|
+ com_err(progname, retval1, "while initializing krb5_context");
|
|
exit(1);
|
|
}
|
|
|
|
if ((retval1 = krb5_set_default_realm(context,
|
|
util_context->default_realm))) {
|
|
- com_err(argv[0], retval1, "while setting default realm name");
|
|
+ com_err(progname, retval1, "while setting default realm name");
|
|
exit(1);
|
|
}
|
|
|
|
- if (strrchr(argv[0], '/'))
|
|
- argv[0] = strrchr(argv[0], '/')+1;
|
|
-
|
|
dbname = global_params.dbname;
|
|
|
|
optind = 1;
|
|
@@ -102,7 +99,7 @@ kdb5_destroy(argc, argv)
|
|
|
|
retval1 = krb5_db_destroy(context, db5util_db_args);
|
|
if (retval1) {
|
|
- com_err(argv[0], retval1, "deleting database '%s'",dbname);
|
|
+ com_err(progname, retval1, "deleting database '%s'",dbname);
|
|
exit_status++; return;
|
|
}
|
|
|
|
Index: src/kadmin/dbutil/dump.c
|
|
===================================================================
|
|
--- src/kadmin/dbutil/dump.c.orig
|
|
+++ src/kadmin/dbutil/dump.c
|
|
@@ -1016,7 +1016,6 @@ dump_db(argc, argv)
|
|
{
|
|
FILE *f;
|
|
struct dump_args arglist;
|
|
- char *programname;
|
|
char *ofile;
|
|
krb5_error_code kret, retval;
|
|
dump_version *dump;
|
|
@@ -1027,9 +1026,6 @@ dump_db(argc, argv)
|
|
/*
|
|
* Parse the arguments.
|
|
*/
|
|
- programname = argv[0];
|
|
- if (strrchr(programname, (int) '/'))
|
|
- programname = strrchr(argv[0], (int) '/') + 1;
|
|
ofile = (char *) NULL;
|
|
dump = &r1_3_version;
|
|
arglist.verbose = 0;
|
|
@@ -1081,7 +1077,7 @@ dump_db(argc, argv)
|
|
* to be opened if we try a dump that uses it.
|
|
*/
|
|
if (!dbactive) {
|
|
- com_err(argv[0], 0, Err_no_database);
|
|
+ com_err(progname, 0, Err_no_database);
|
|
exit_status++;
|
|
return;
|
|
}
|
|
@@ -1099,7 +1095,7 @@ dump_db(argc, argv)
|
|
(char *) NULL, 0,
|
|
&master_keyblock);
|
|
if (retval) {
|
|
- com_err(argv[0], retval,
|
|
+ com_err(progname, retval,
|
|
"while reading master key");
|
|
exit(1);
|
|
}
|
|
@@ -1107,7 +1103,7 @@ dump_db(argc, argv)
|
|
master_princ,
|
|
&master_keyblock);
|
|
if (retval) {
|
|
- com_err(argv[0], retval,
|
|
+ com_err(progname, retval,
|
|
"while verifying master key");
|
|
exit(1);
|
|
}
|
|
@@ -1124,7 +1120,7 @@ dump_db(argc, argv)
|
|
TRUE,
|
|
new_mkey_file, 0,
|
|
&new_master_keyblock))) {
|
|
- com_err(argv[0], retval, "while reading new master key");
|
|
+ com_err(progname, retval, "while reading new master key");
|
|
exit(1);
|
|
}
|
|
}
|
|
@@ -1150,7 +1146,7 @@ dump_db(argc, argv)
|
|
unlink(ofile);
|
|
if (!(f = fopen(ofile, "w"))) {
|
|
fprintf(stderr, ofopen_error,
|
|
- programname, ofile, error_message(errno));
|
|
+ progname, ofile, error_message(errno));
|
|
exit_status++;
|
|
return;
|
|
}
|
|
@@ -1158,7 +1154,7 @@ dump_db(argc, argv)
|
|
fileno(f),
|
|
KRB5_LOCKMODE_EXCLUSIVE))) {
|
|
fprintf(stderr, oflock_error,
|
|
- programname, ofile, error_message(kret));
|
|
+ progname, ofile, error_message(kret));
|
|
exit_status++;
|
|
}
|
|
else
|
|
@@ -1167,7 +1163,7 @@ dump_db(argc, argv)
|
|
f = stdout;
|
|
}
|
|
if (f && !(kret)) {
|
|
- arglist.programname = programname;
|
|
+ arglist.programname = progname;
|
|
arglist.ofile = f;
|
|
arglist.kcontext = util_context;
|
|
fprintf(arglist.ofile, "%s", dump->header);
|
|
@@ -1179,13 +1175,13 @@ dump_db(argc, argv)
|
|
dump->dump_princ,
|
|
(krb5_pointer) &arglist))) { /* TBD: backwards and recursive not supported */
|
|
fprintf(stderr, dumprec_err,
|
|
- programname, dump->name, error_message(kret));
|
|
+ progname, dump->name, error_message(kret));
|
|
exit_status++;
|
|
}
|
|
if (dump->dump_policy &&
|
|
(kret = krb5_db_iter_policy( util_context, "*", dump->dump_policy,
|
|
&arglist))) {
|
|
- fprintf(stderr, dumprec_err, programname, dump->name,
|
|
+ fprintf(stderr, dumprec_err, progname, dump->name,
|
|
error_message(kret));
|
|
exit_status++;
|
|
}
|
|
@@ -2126,7 +2122,6 @@ load_db(argc, argv)
|
|
FILE *f;
|
|
extern char *optarg;
|
|
extern int optind;
|
|
- char *programname;
|
|
char *dumpfile;
|
|
char *dbname;
|
|
char *dbname_tmp;
|
|
@@ -2140,9 +2135,6 @@ load_db(argc, argv)
|
|
/*
|
|
* Parse the arguments.
|
|
*/
|
|
- programname = argv[0];
|
|
- if (strrchr(programname, (int) '/'))
|
|
- programname = strrchr(argv[0], (int) '/') + 1;
|
|
dumpfile = (char *) NULL;
|
|
dbname = global_params.dbname;
|
|
load = NULL;
|
|
@@ -2180,7 +2172,7 @@ load_db(argc, argv)
|
|
|
|
if (!(dbname_tmp = (char *) malloc(strlen(dbname)+
|
|
strlen(dump_tmptrail)+1))) {
|
|
- fprintf(stderr, no_name_mem_fmt, argv[0]);
|
|
+ fprintf(stderr, no_name_mem_fmt, progname);
|
|
exit_status++;
|
|
return;
|
|
}
|
|
@@ -2191,7 +2183,7 @@ load_db(argc, argv)
|
|
* Initialize the Kerberos context and error tables.
|
|
*/
|
|
if ((kret = kadm5_init_krb5_context(&kcontext))) {
|
|
- fprintf(stderr, ctx_err_fmt, programname);
|
|
+ fprintf(stderr, ctx_err_fmt, progname);
|
|
free(dbname_tmp);
|
|
exit_status++;
|
|
return;
|
|
@@ -2199,7 +2191,7 @@ load_db(argc, argv)
|
|
|
|
if( (kret = krb5_set_default_realm(kcontext, util_context->default_realm)) )
|
|
{
|
|
- fprintf(stderr, "%s: Unable to set the default realm\n", programname);
|
|
+ fprintf(stderr, "%s: Unable to set the default realm\n", progname);
|
|
free(dbname_tmp);
|
|
exit_status++;
|
|
return;
|
|
@@ -2210,14 +2202,14 @@ load_db(argc, argv)
|
|
*/
|
|
if (dumpfile) {
|
|
if ((f = fopen(dumpfile, "r")) == NULL) {
|
|
- fprintf(stderr, dfile_err_fmt, programname, dumpfile,
|
|
+ fprintf(stderr, dfile_err_fmt, progname, dumpfile,
|
|
error_message(errno));
|
|
exit_status++;
|
|
return;
|
|
}
|
|
if ((kret = krb5_lock_file(kcontext, fileno(f),
|
|
KRB5_LOCKMODE_SHARED))) {
|
|
- fprintf(stderr, "%s: Cannot lock %s: %s\n", programname,
|
|
+ fprintf(stderr, "%s: Cannot lock %s: %s\n", progname,
|
|
dumpfile, error_message(errno));
|
|
exit_status++;
|
|
return;
|
|
@@ -2233,7 +2225,7 @@ load_db(argc, argv)
|
|
if (load) {
|
|
/* only check what we know; some headers only contain a prefix */
|
|
if (strncmp(buf, load->header, strlen(load->header)) != 0) {
|
|
- fprintf(stderr, head_bad_fmt, programname, dumpfile);
|
|
+ fprintf(stderr, head_bad_fmt, progname, dumpfile);
|
|
exit_status++;
|
|
if (dumpfile) fclose(f);
|
|
return;
|
|
@@ -2252,7 +2244,7 @@ load_db(argc, argv)
|
|
strlen(ov_version.header)) == 0)
|
|
load = &ov_version;
|
|
else {
|
|
- fprintf(stderr, head_bad_fmt, programname, dumpfile);
|
|
+ fprintf(stderr, head_bad_fmt, progname, dumpfile);
|
|
exit_status++;
|
|
if (dumpfile) fclose(f);
|
|
return;
|
|
@@ -2260,7 +2252,7 @@ load_db(argc, argv)
|
|
}
|
|
if (load->updateonly && !update) {
|
|
fprintf(stderr, "%s: dump version %s can only be loaded with the "
|
|
- "-update flag\n", programname, load->name);
|
|
+ "-update flag\n", progname, load->name);
|
|
exit_status++;
|
|
return;
|
|
}
|
|
@@ -2277,7 +2269,7 @@ load_db(argc, argv)
|
|
|
|
if ((kret = kadm5_get_config_params(kcontext, 1,
|
|
&newparams, &newparams))) {
|
|
- com_err(argv[0], kret,
|
|
+ com_err(progname, kret,
|
|
"while retreiving new configuration parameters");
|
|
exit_status++;
|
|
return;
|
|
@@ -2301,11 +2293,11 @@ load_db(argc, argv)
|
|
*/
|
|
|
|
if (emsg != NULL) {
|
|
- fprintf(stderr, "%s: %s\n", programname, emsg);
|
|
+ fprintf(stderr, "%s: %s\n", progname, emsg);
|
|
krb5_free_error_message (kcontext, emsg);
|
|
} else {
|
|
fprintf(stderr, dbcreaterr_fmt,
|
|
- programname, dbname, error_message(kret));
|
|
+ progname, dbname, error_message(kret));
|
|
}
|
|
exit_status++;
|
|
kadm5_free_config_params(kcontext, &newparams);
|
|
@@ -2326,11 +2318,11 @@ load_db(argc, argv)
|
|
*/
|
|
|
|
if (emsg != NULL) {
|
|
- fprintf(stderr, "%s: %s\n", programname, emsg);
|
|
+ fprintf(stderr, "%s: %s\n", progname, emsg);
|
|
krb5_free_error_message (kcontext, emsg);
|
|
} else {
|
|
fprintf(stderr, dbinit_err_fmt,
|
|
- programname, error_message(kret));
|
|
+ progname, error_message(kret));
|
|
}
|
|
exit_status++;
|
|
goto error;
|
|
@@ -2349,7 +2341,7 @@ load_db(argc, argv)
|
|
*/
|
|
if (kret != KRB5_PLUGIN_OP_NOTSUPP) {
|
|
fprintf(stderr, "%s: %s while permanently locking database\n",
|
|
- programname, error_message(kret));
|
|
+ progname, error_message(kret));
|
|
exit_status++;
|
|
goto error;
|
|
}
|
|
@@ -2357,10 +2349,10 @@ load_db(argc, argv)
|
|
else
|
|
db_locked = 1;
|
|
|
|
- if (restore_dump(programname, kcontext, (dumpfile) ? dumpfile : stdin_name,
|
|
+ if (restore_dump(progname, kcontext, (dumpfile) ? dumpfile : stdin_name,
|
|
f, verbose, load)) {
|
|
fprintf(stderr, restfail_fmt,
|
|
- programname, load->name);
|
|
+ progname, load->name);
|
|
exit_status++;
|
|
}
|
|
|
|
@@ -2373,14 +2365,14 @@ load_db(argc, argv)
|
|
if (db_locked && (kret = krb5_db_unlock(kcontext))) {
|
|
/* change this error? */
|
|
fprintf(stderr, dbunlockerr_fmt,
|
|
- programname, dbname, error_message(kret));
|
|
+ progname, dbname, error_message(kret));
|
|
exit_status++;
|
|
}
|
|
|
|
#if 0
|
|
if ((kret = krb5_db_fini(kcontext))) {
|
|
fprintf(stderr, close_err_fmt,
|
|
- programname, error_message(kret));
|
|
+ progname, error_message(kret));
|
|
exit_status++;
|
|
}
|
|
#endif
|
|
@@ -2395,7 +2387,7 @@ load_db(argc, argv)
|
|
*/
|
|
if (kret != 0 && kret != KRB5_PLUGIN_OP_NOTSUPP) {
|
|
fprintf(stderr, "%s: cannot make newly loaded database live (%s)\n",
|
|
- programname, error_message(kret));
|
|
+ progname, error_message(kret));
|
|
exit_status++;
|
|
}
|
|
}
|
|
@@ -2416,7 +2408,7 @@ error:
|
|
*/
|
|
if (kret != 0 && kret != KRB5_PLUGIN_OP_NOTSUPP) {
|
|
fprintf(stderr, dbdelerr_fmt,
|
|
- programname, dbname, error_message(kret));
|
|
+ progname, dbname, error_message(kret));
|
|
exit_status++;
|
|
}
|
|
}
|
|
Index: src/kadmin/dbutil/kdb5_create.c
|
|
===================================================================
|
|
--- src/kadmin/dbutil/kdb5_create.c.orig
|
|
+++ src/kadmin/dbutil/kdb5_create.c
|
|
@@ -162,9 +162,6 @@ void kdb5_create(argc, argv)
|
|
int do_stash = 0;
|
|
krb5_data pwd, seed;
|
|
|
|
- if (strrchr(argv[0], '/'))
|
|
- argv[0] = strrchr(argv[0], '/')+1;
|
|
-
|
|
while ((optchar = getopt(argc, argv, "s")) != -1) {
|
|
switch(optchar) {
|
|
case 's':
|
|
@@ -193,7 +190,7 @@ void kdb5_create(argc, argv)
|
|
printf ("Loading random data\n");
|
|
retval = krb5_c_random_os_entropy (util_context, 1, NULL);
|
|
if (retval) {
|
|
- com_err (argv[0], retval, "Loading random data");
|
|
+ com_err (progname, retval, "Loading random data");
|
|
exit_status++; return;
|
|
}
|
|
|
|
@@ -203,7 +200,7 @@ void kdb5_create(argc, argv)
|
|
global_params.mkey_name,
|
|
global_params.realm,
|
|
&mkey_fullname, &master_princ))) {
|
|
- com_err(argv[0], retval, "while setting up master key name");
|
|
+ com_err(progname, retval, "while setting up master key name");
|
|
exit_status++; return;
|
|
}
|
|
|
|
@@ -229,7 +226,7 @@ master key name '%s'\n",
|
|
retval = krb5_read_password(util_context, KRB5_KDC_MKEY_1, KRB5_KDC_MKEY_2,
|
|
pw_str, &pw_size);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while reading master key from keyboard");
|
|
+ com_err(progname, retval, "while reading master key from keyboard");
|
|
exit_status++; return;
|
|
}
|
|
mkey_password = pw_str;
|
|
@@ -239,14 +236,14 @@ master key name '%s'\n",
|
|
pwd.length = strlen(mkey_password);
|
|
retval = krb5_principal2salt(util_context, master_princ, &master_salt);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while calculating master key salt");
|
|
+ com_err(progname, retval, "while calculating master key salt");
|
|
exit_status++; return;
|
|
}
|
|
|
|
retval = krb5_c_string_to_key(util_context, master_keyblock.enctype,
|
|
&pwd, &master_salt, &master_keyblock);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while transforming master key from password");
|
|
+ com_err(progname, retval, "while transforming master key from password");
|
|
exit_status++; return;
|
|
}
|
|
|
|
@@ -256,28 +253,28 @@ master key name '%s'\n",
|
|
seed.data = master_keyblock.contents;
|
|
|
|
if ((retval = krb5_c_random_seed(util_context, &seed))) {
|
|
- com_err(argv[0], retval, "while initializing random key generator");
|
|
+ com_err(progname, retval, "while initializing random key generator");
|
|
exit_status++; return;
|
|
}
|
|
if ((retval = krb5_db_create(util_context,
|
|
db5util_db_args))) {
|
|
- com_err(argv[0], retval, "while creating database '%s'",
|
|
+ com_err(progname, retval, "while creating database '%s'",
|
|
global_params.dbname);
|
|
exit_status++; return;
|
|
}
|
|
/* if ((retval = krb5_db_fini(util_context))) { */
|
|
-/* com_err(argv[0], retval, "while closing current database"); */
|
|
+/* com_err(progname, retval, "while closing current database"); */
|
|
/* exit_status++; return; */
|
|
/* } */
|
|
/* if ((retval = krb5_db_open(util_context, db5util_db_args, KRB5_KDB_OPEN_RW))) { */
|
|
-/* com_err(argv[0], retval, "while initializing the database '%s'", */
|
|
+/* com_err(progname, retval, "while initializing the database '%s'", */
|
|
/* global_params.dbname); */
|
|
/* exit_status++; return; */
|
|
/* } */
|
|
if ((retval = add_principal(util_context, master_princ, MASTER_KEY, &rblock)) ||
|
|
(retval = add_principal(util_context, &tgt_princ, TGT_KEY, &rblock))) {
|
|
(void) krb5_db_fini(util_context);
|
|
- com_err(argv[0], retval, "while adding entries to the database");
|
|
+ com_err(progname, retval, "while adding entries to the database");
|
|
exit_status++; return;
|
|
}
|
|
/*
|
|
@@ -291,7 +288,7 @@ master key name '%s'\n",
|
|
&master_keyblock,
|
|
mkey_password);
|
|
if (retval) {
|
|
- com_err(argv[0], errno, "while storing key");
|
|
+ com_err(progname, errno, "while storing key");
|
|
printf("Warning: couldn't stash master key.\n");
|
|
}
|
|
/* clean up */
|
|
Index: src/kadmin/dbutil/kdb5_util.c
|
|
===================================================================
|
|
--- src/kadmin/dbutil/kdb5_util.c.orig
|
|
+++ src/kadmin/dbutil/kdb5_util.c
|
|
@@ -186,16 +186,18 @@ int main(argc, argv)
|
|
|
|
set_com_err_hook(extended_com_err_fn);
|
|
|
|
+ /*
|
|
+ * Ensure that "progname" is set before calling com_err.
|
|
+ */
|
|
+ progname = (strrchr(argv[0], '/') ?
|
|
+ strrchr(argv[0], '/') + 1 : argv[0]);
|
|
+
|
|
retval = kadm5_init_krb5_context(&util_context);
|
|
if (retval) {
|
|
com_err (progname, retval, "while initializing Kerberos code");
|
|
exit(1);
|
|
}
|
|
|
|
-/* initialize_adb_error_table(); */
|
|
-
|
|
- progname = (strrchr(argv[0], '/') ? strrchr(argv[0], '/')+1 : argv[0]);
|
|
-
|
|
cmd_argv = (char **) malloc(sizeof(char *)*argc);
|
|
if (cmd_argv == NULL) {
|
|
com_err(progname, ENOMEM, "while creating sub-command arguments");
|
|
@@ -245,7 +247,7 @@ int main(argc, argv)
|
|
}
|
|
} else if (strcmp(*argv, "-k") == 0 && ARG_VAL) {
|
|
if (krb5_string_to_enctype(koptarg, &global_params.enctype))
|
|
- com_err(argv[0], 0, "%s is an invalid enctype", koptarg);
|
|
+ com_err(progname, 0, "%s is an invalid enctype", koptarg);
|
|
else
|
|
global_params.mask |= KADM5_CONFIG_ENCTYPE;
|
|
} else if (strcmp(*argv, "-M") == 0 && ARG_VAL) {
|
|
@@ -287,7 +289,7 @@ int main(argc, argv)
|
|
retval = kadm5_get_config_params(util_context, 1,
|
|
&global_params, &global_params);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while retreiving configuration parameters");
|
|
+ com_err(progname, retval, "while retreiving configuration parameters");
|
|
exit(1);
|
|
}
|
|
|
|
@@ -300,7 +302,7 @@ int main(argc, argv)
|
|
master_keyblock.enctype = global_params.enctype;
|
|
if ((master_keyblock.enctype != ENCTYPE_UNKNOWN) &&
|
|
(!krb5_c_valid_enctype(master_keyblock.enctype))) {
|
|
- com_err(argv[0], KRB5_PROG_KEYTYPE_NOSUPP,
|
|
+ com_err(progname, KRB5_PROG_KEYTYPE_NOSUPP,
|
|
"while setting up enctype %d", master_keyblock.enctype);
|
|
}
|
|
|
|
@@ -334,13 +336,13 @@ void set_dbname(argc, argv)
|
|
|
|
if (argc < 3) {
|
|
com_err(argv[0], 0, "Too few arguments");
|
|
- com_err(argv[0], 0, "Usage: %s dbpathname realmname", argv[0]);
|
|
+ com_err(progname, 0, "Usage: %s dbpathname realmname", argv[0]);
|
|
exit_status++;
|
|
return;
|
|
}
|
|
if (dbactive) {
|
|
if ((retval = krb5_db_fini(util_context)) && retval!= KRB5_KDB_DBNOTINITED) {
|
|
- com_err(argv[0], retval, "while closing previous database");
|
|
+ com_err(progname, retval, "while closing previous database");
|
|
exit_status++;
|
|
return;
|
|
}
|
|
@@ -353,7 +355,7 @@ void set_dbname(argc, argv)
|
|
dbactive = FALSE;
|
|
}
|
|
|
|
- (void) set_dbname_help(argv[0], argv[1]);
|
|
+ (void) set_dbname_help(progname, argv[1]);
|
|
return;
|
|
}
|
|
#endif
|
|
@@ -425,6 +427,7 @@ static int open_db_and_mkey()
|
|
retval = krb5_principal2salt(util_context, master_princ, &scratch);
|
|
if (retval) {
|
|
com_err(progname, retval, "while calculated master key salt");
|
|
+ exit_status++;
|
|
return(1);
|
|
}
|
|
|
|
@@ -442,6 +445,7 @@ static int open_db_and_mkey()
|
|
if (retval) {
|
|
com_err(progname, retval,
|
|
"while transforming master key from password");
|
|
+ exit_status++;
|
|
return(1);
|
|
}
|
|
free(scratch.data);
|
|
@@ -519,7 +523,7 @@ add_random_key(argc, argv)
|
|
krb5_int32 num_keysalts = 0;
|
|
|
|
int free_keysalts;
|
|
- char *me = argv[0];
|
|
+ char *me = progname;
|
|
char *ks_str = NULL;
|
|
char *pr_str;
|
|
|
|
Index: src/kadmin/dbutil/kdb5_stash.c
|
|
===================================================================
|
|
--- src/kadmin/dbutil/kdb5_stash.c.orig
|
|
+++ src/kadmin/dbutil/kdb5_stash.c
|
|
@@ -82,19 +82,16 @@ kdb5_stash(argc, argv)
|
|
char *keyfile = 0;
|
|
krb5_context context;
|
|
|
|
- if (strrchr(argv[0], '/'))
|
|
- argv[0] = strrchr(argv[0], '/')+1;
|
|
-
|
|
retval = kadm5_init_krb5_context(&context);
|
|
if( retval )
|
|
{
|
|
- com_err(argv[0], retval, "while initializing krb5_context");
|
|
+ com_err(progname, retval, "while initializing krb5_context");
|
|
exit(1);
|
|
}
|
|
|
|
if ((retval = krb5_set_default_realm(context,
|
|
util_context->default_realm))) {
|
|
- com_err(argv[0], retval, "while setting default realm name");
|
|
+ com_err(progname, retval, "while setting default realm name");
|
|
exit(1);
|
|
}
|
|
|
|
@@ -119,10 +116,10 @@ kdb5_stash(argc, argv)
|
|
if (!krb5_c_valid_enctype(master_keyblock.enctype)) {
|
|
char tmp[32];
|
|
if (krb5_enctype_to_string(master_keyblock.enctype, tmp, sizeof(tmp)))
|
|
- com_err(argv[0], KRB5_PROG_KEYTYPE_NOSUPP,
|
|
+ com_err(progname, KRB5_PROG_KEYTYPE_NOSUPP,
|
|
"while setting up enctype %d", master_keyblock.enctype);
|
|
else
|
|
- com_err(argv[0], KRB5_PROG_KEYTYPE_NOSUPP, tmp);
|
|
+ com_err(progname, KRB5_PROG_KEYTYPE_NOSUPP, tmp);
|
|
exit_status++; return;
|
|
}
|
|
|
|
@@ -130,14 +127,14 @@ kdb5_stash(argc, argv)
|
|
retval = krb5_db_setup_mkey_name(context, mkey_name, realm,
|
|
&mkey_fullname, &master_princ);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while setting up master key name");
|
|
+ com_err(progname, retval, "while setting up master key name");
|
|
exit_status++; return;
|
|
}
|
|
|
|
retval = krb5_db_open(context, db5util_db_args,
|
|
KRB5_KDB_OPEN_RW | KRB5_KDB_SRV_TYPE_OTHER);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while initializing the database '%s'",
|
|
+ com_err(progname, retval, "while initializing the database '%s'",
|
|
dbname);
|
|
exit_status++; return;
|
|
}
|
|
@@ -148,7 +145,7 @@ kdb5_stash(argc, argv)
|
|
TRUE, FALSE, (char *) NULL,
|
|
0, &master_keyblock);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while reading master key");
|
|
+ com_err(progname, retval, "while reading master key");
|
|
(void) krb5_db_fini(context);
|
|
exit_status++; return;
|
|
}
|
|
@@ -156,7 +153,7 @@ kdb5_stash(argc, argv)
|
|
retval = krb5_db_verify_master_key(context, master_princ,
|
|
&master_keyblock);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "while verifying master key");
|
|
+ com_err(progname, retval, "while verifying master key");
|
|
(void) krb5_db_fini(context);
|
|
exit_status++; return;
|
|
}
|
|
@@ -164,7 +161,7 @@ kdb5_stash(argc, argv)
|
|
retval = krb5_db_store_master_key(context, keyfile, master_princ,
|
|
&master_keyblock, NULL);
|
|
if (retval) {
|
|
- com_err(argv[0], errno, "while storing key");
|
|
+ com_err(progname, errno, "while storing key");
|
|
memset((char *)master_keyblock.contents, 0, master_keyblock.length);
|
|
(void) krb5_db_fini(context);
|
|
exit_status++; return;
|
|
@@ -173,7 +170,7 @@ kdb5_stash(argc, argv)
|
|
|
|
retval = krb5_db_fini(context);
|
|
if (retval) {
|
|
- com_err(argv[0], retval, "closing database '%s'", dbname);
|
|
+ com_err(progname, retval, "closing database '%s'", dbname);
|
|
exit_status++; return;
|
|
}
|
|
|
|
Index: src/kadmin/cli/kadmin.M
|
|
===================================================================
|
|
--- src/kadmin/cli/kadmin.M.orig
|
|
+++ src/kadmin/cli/kadmin.M
|
|
@@ -206,12 +206,12 @@ Specifying "ago" in a duration may resul
|
|
creates the principal
|
|
.IR newprinc ,
|
|
prompting twice for a password. If no policy is specified with the
|
|
--policy option, and the policy named "default" exists, then that
|
|
+\-policy option, and the policy named "default" exists, then that
|
|
policy is assigned to the principal; note that the assignment of the
|
|
policy "default" only occurs automatically when a principal is first
|
|
created, so the policy "default" must already exist for the assignment
|
|
to occur. This assignment of "default" can be suppressed with the
|
|
--clearpolicy option. This command requires the
|
|
+\-clearpolicy option. This command requires the
|
|
.I add
|
|
privilege. This command has the aliases
|
|
.B addprinc
|
|
@@ -411,7 +411,7 @@ Re-enter password for principal tlyu/adm
|
|
Principal "tlyu/admin@BLEEP.COM" created.
|
|
kadmin:
|
|
|
|
-kadmin: addprinc -x dn=cn=mwm_user,o=org mwm_user
|
|
+kadmin: addprinc \-x dn=cn=mwm_user,o=org mwm_user
|
|
WARNING: no policy specified for "mwm_user@BLEEP.COM";
|
|
defaulting to no policy.
|
|
Enter password for principal mwm_user@BLEEP.COM:
|
|
@@ -639,7 +639,7 @@ sets the number of past keys kept for a
|
|
.nf
|
|
.TP
|
|
EXAMPLES:
|
|
-kadmin: add_policy -maxlife "2 days" -minlength 5 guests
|
|
+kadmin: add_policy \-maxlife "2 days" \-minlength 5 guests
|
|
kadmin:
|
|
.TP
|
|
ERRORS:
|
|
Index: src/lib/crypto/enc_provider/aes.c
|
|
===================================================================
|
|
--- src/lib/crypto/enc_provider/aes.c.orig
|
|
+++ src/lib/crypto/enc_provider/aes.c
|
|
@@ -1,3 +1,29 @@
|
|
+/*
|
|
+ * lib/crypto/enc_provider/aes.h
|
|
+ *
|
|
+ * Copyright (C) 2003, 2007 by the Massachusetts Institute of Technology.
|
|
+ * All rights reserved.
|
|
+ *
|
|
+ * Export of this software from the United States of America may
|
|
+ * require a specific license from the United States Government.
|
|
+ * It is the responsibility of any person or organization contemplating
|
|
+ * export to obtain such a license before exporting.
|
|
+ *
|
|
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
|
|
+ * distribute this software and its documentation for any purpose and
|
|
+ * without fee is hereby granted, provided that the above copyright
|
|
+ * notice appear in all copies and that both that copyright notice and
|
|
+ * this permission notice appear in supporting documentation, and that
|
|
+ * the name of M.I.T. not be used in advertising or publicity pertaining
|
|
+ * to distribution of the software without specific, written prior
|
|
+ * permission. Furthermore if you modify this software you must label
|
|
+ * your software as modified software and not distribute it in such a
|
|
+ * fashion that it might be confused with the original M.I.T. software.
|
|
+ * M.I.T. makes no representations about the suitability of
|
|
+ * this software for any purpose. It is provided "as is" without express
|
|
+ * or implied warranty.
|
|
+ */
|
|
+
|
|
#include "k5-int.h"
|
|
#include "enc_provider.h"
|
|
#include "aes.h"
|
|
Index: src/lib/rpc/auth_gssapi.c
|
|
===================================================================
|
|
--- src/lib/rpc/auth_gssapi.c.orig
|
|
+++ src/lib/rpc/auth_gssapi.c
|
|
@@ -164,6 +164,11 @@ AUTH *auth_gssapi_create(
|
|
auth = (AUTH *) malloc(sizeof(*auth));
|
|
pdata = (struct auth_gssapi_data *) malloc(sizeof(*pdata));
|
|
if (auth == NULL || pdata == NULL) {
|
|
+ /* They needn't both have failed; clean up. */
|
|
+ free(auth);
|
|
+ free(pdata);
|
|
+ auth = NULL;
|
|
+ pdata = NULL;
|
|
rpc_createerr.cf_stat = RPC_SYSTEMERROR;
|
|
rpc_createerr.cf_error.re_errno = ENOMEM;
|
|
goto cleanup;
|
|
@@ -436,12 +441,14 @@ next_token:
|
|
|
|
cleanup:
|
|
PRINTF(("gssapi_create: bailing\n\n"));
|
|
-
|
|
- if (AUTH_PRIVATE(auth))
|
|
- auth_gssapi_destroy(auth);
|
|
- else if (auth)
|
|
- free(auth);
|
|
- auth = NULL;
|
|
+
|
|
+ if (auth) {
|
|
+ if (AUTH_PRIVATE(auth))
|
|
+ auth_gssapi_destroy(auth);
|
|
+ else
|
|
+ free(auth);
|
|
+ auth = NULL;
|
|
+ }
|
|
|
|
/* don't assume the caller will want to change clnt->cl_auth */
|
|
clnt->cl_auth = save_auth;
|
|
Index: src/lib/gssapi/krb5/lucid_context.c
|
|
===================================================================
|
|
--- src/lib/gssapi/krb5/lucid_context.c.orig
|
|
+++ src/lib/gssapi/krb5/lucid_context.c
|
|
@@ -231,7 +231,7 @@ make_external_lucid_ctx_v1(
|
|
&lctx->cfx_kd.ctx_key)))
|
|
goto error_out;
|
|
if (gctx->have_acceptor_subkey) {
|
|
- if ((retval = copy_keyblock_to_lucid_key(gctx->enc,
|
|
+ if ((retval = copy_keyblock_to_lucid_key(gctx->acceptor_subkey,
|
|
&lctx->cfx_kd.acceptor_subkey)))
|
|
goto error_out;
|
|
lctx->cfx_kd.have_acceptor_subkey = 1;
|
|
Index: src/lib/kadm5/str_conv.c
|
|
===================================================================
|
|
--- src/lib/kadm5/str_conv.c.orig
|
|
+++ src/lib/kadm5/str_conv.c
|
|
@@ -310,7 +310,7 @@ krb5_string_to_keysalts(string, tuplesep
|
|
septmp = ksseplist;
|
|
for (sp = strchr(kp, (int) *septmp);
|
|
*(++septmp) && !sp;
|
|
- ep = strchr(kp, (int) *septmp));
|
|
+ sp = strchr(kp, (int) *septmp));
|
|
|
|
if (sp) {
|
|
/* Separate enctype from salttype */
|
|
Index: src/lib/krb5/keytab/kt_file.c
|
|
===================================================================
|
|
--- src/lib/krb5/keytab/kt_file.c.orig
|
|
+++ src/lib/krb5/keytab/kt_file.c
|
|
@@ -53,10 +53,30 @@ typedef struct _krb5_ktfile_data {
|
|
FILE *openf; /* open file, if any. */
|
|
char iobuf[BUFSIZ]; /* so we can zap it later */
|
|
int version; /* Version number of keytab */
|
|
+ unsigned int iter_count; /* Number of active iterators */
|
|
+ long start_offset; /* Starting offset after version */
|
|
k5_mutex_t lock; /* Protect openf, version */
|
|
} krb5_ktfile_data;
|
|
|
|
/*
|
|
+ * Some limitations:
|
|
+ *
|
|
+ * If the file OPENF is left open between calls, we have an iterator
|
|
+ * active, and OPENF is opened in read-only mode. So, no changes
|
|
+ * can be made via that handle.
|
|
+ *
|
|
+ * An advisory file lock is used while the file is open. Thus,
|
|
+ * multiple handles on the same underlying file cannot be used without
|
|
+ * disrupting the locking in effect.
|
|
+ *
|
|
+ * The start_offset field is only valid if the file is open. It will
|
|
+ * almost certainly always be the same constant. It's used so that
|
|
+ * if an iterator is active, and we start another one, we don't have
|
|
+ * to seek back to the start and re-read the version number to set
|
|
+ * the position for the iterator.
|
|
+ */
|
|
+
|
|
+/*
|
|
* Macros
|
|
*/
|
|
#define KTPRIVATE(id) ((krb5_ktfile_data *)(id)->data)
|
|
@@ -64,6 +84,8 @@ typedef struct _krb5_ktfile_data {
|
|
#define KTFILEP(id) (((krb5_ktfile_data *)(id)->data)->openf)
|
|
#define KTFILEBUFP(id) (((krb5_ktfile_data *)(id)->data)->iobuf)
|
|
#define KTVERSION(id) (((krb5_ktfile_data *)(id)->data)->version)
|
|
+#define KTITERS(id) (((krb5_ktfile_data *)(id)->data)->iter_count)
|
|
+#define KTSTARTOFF(id) (((krb5_ktfile_data *)(id)->data)->start_offset)
|
|
#define KTLOCK(id) k5_mutex_lock(&((krb5_ktfile_data *)(id)->data)->lock)
|
|
#define KTUNLOCK(id) k5_mutex_unlock(&((krb5_ktfile_data *)(id)->data)->lock)
|
|
#define KTCHECKLOCK(id) k5_mutex_assert_locked(&((krb5_ktfile_data *)(id)->data)->lock)
|
|
@@ -208,6 +230,7 @@ krb5_ktfile_resolve(krb5_context context
|
|
(void) strcpy(data->name, name);
|
|
data->openf = 0;
|
|
data->version = 0;
|
|
+ data->iter_count = 0;
|
|
|
|
(*id)->data = (krb5_pointer)data;
|
|
(*id)->magic = KV5M_KEYTAB;
|
|
@@ -255,15 +278,27 @@ krb5_ktfile_get_entry(krb5_context conte
|
|
int found_wrong_kvno = 0;
|
|
krb5_boolean similar;
|
|
int kvno_offset = 0;
|
|
+ int was_open;
|
|
|
|
kerror = KTLOCK(id);
|
|
if (kerror)
|
|
return kerror;
|
|
|
|
- /* Open the keyfile for reading */
|
|
- if ((kerror = krb5_ktfileint_openr(context, id))) {
|
|
- KTUNLOCK(id);
|
|
- return(kerror);
|
|
+ if (KTFILEP(id) != NULL) {
|
|
+ was_open = 1;
|
|
+
|
|
+ if (fseek(KTFILEP(id), KTSTARTOFF(id), SEEK_SET) == -1) {
|
|
+ KTUNLOCK(id);
|
|
+ return errno;
|
|
+ }
|
|
+ } else {
|
|
+ was_open = 0;
|
|
+
|
|
+ /* Open the keyfile for reading */
|
|
+ if ((kerror = krb5_ktfileint_openr(context, id))) {
|
|
+ KTUNLOCK(id);
|
|
+ return(kerror);
|
|
+ }
|
|
}
|
|
|
|
/*
|
|
@@ -370,12 +405,13 @@ krb5_ktfile_get_entry(krb5_context conte
|
|
kerror = KRB5_KT_NOTFOUND;
|
|
}
|
|
if (kerror) {
|
|
- (void) krb5_ktfileint_close(context, id);
|
|
+ if (was_open == 0)
|
|
+ (void) krb5_ktfileint_close(context, id);
|
|
KTUNLOCK(id);
|
|
krb5_kt_free_entry(context, &cur_entry);
|
|
return kerror;
|
|
}
|
|
- if ((kerror = krb5_ktfileint_close(context, id)) != 0) {
|
|
+ if (was_open == 0 && (kerror = krb5_ktfileint_close(context, id)) != 0) {
|
|
KTUNLOCK(id);
|
|
krb5_kt_free_entry(context, &cur_entry);
|
|
return kerror;
|
|
@@ -430,18 +466,30 @@ krb5_ktfile_start_seq_get(krb5_context c
|
|
if (retval)
|
|
return retval;
|
|
|
|
- if ((retval = krb5_ktfileint_openr(context, id))) {
|
|
- KTUNLOCK(id);
|
|
- return retval;
|
|
+ if (KTITERS(id) == 0) {
|
|
+ if ((retval = krb5_ktfileint_openr(context, id))) {
|
|
+ KTUNLOCK(id);
|
|
+ return retval;
|
|
+ }
|
|
}
|
|
|
|
if (!(fileoff = (long *)malloc(sizeof(*fileoff)))) {
|
|
- krb5_ktfileint_close(context, id);
|
|
+ if (KTITERS(id) == 0)
|
|
+ krb5_ktfileint_close(context, id);
|
|
KTUNLOCK(id);
|
|
return ENOMEM;
|
|
}
|
|
- *fileoff = ftell(KTFILEP(id));
|
|
+ *fileoff = KTSTARTOFF(id);
|
|
*cursorp = (krb5_kt_cursor)fileoff;
|
|
+ KTITERS(id)++;
|
|
+ if (KTITERS(id) == 0) {
|
|
+ /* Wrapped?! */
|
|
+ KTITERS(id)--;
|
|
+ KTUNLOCK(id);
|
|
+ krb5_set_error_message(context, KRB5_KT_IOERR,
|
|
+ "Too many keytab iterators active");
|
|
+ return KRB5_KT_IOERR; /* XXX */
|
|
+ }
|
|
KTUNLOCK(id);
|
|
|
|
return 0;
|
|
@@ -490,7 +538,11 @@ krb5_ktfile_end_get(krb5_context context
|
|
|
|
krb5_xfree(*cursor);
|
|
KTLOCK(id);
|
|
- kerror = krb5_ktfileint_close(context, id);
|
|
+ KTITERS(id)--;
|
|
+ if (KTFILEP(id) != NULL && KTITERS(id) == 0)
|
|
+ kerror = krb5_ktfileint_close(context, id);
|
|
+ else
|
|
+ kerror = 0;
|
|
KTUNLOCK(id);
|
|
return kerror;
|
|
}
|
|
@@ -811,6 +863,7 @@ krb5_ktfile_wresolve(krb5_context contex
|
|
(void) strcpy(data->name, name);
|
|
data->openf = 0;
|
|
data->version = 0;
|
|
+ data->iter_count = 0;
|
|
|
|
(*id)->data = (krb5_pointer)data;
|
|
(*id)->magic = KV5M_KEYTAB;
|
|
@@ -830,6 +883,13 @@ krb5_ktfile_add(krb5_context context, kr
|
|
retval = KTLOCK(id);
|
|
if (retval)
|
|
return retval;
|
|
+ if (KTFILEP(id)) {
|
|
+ /* Iterator(s) active -- no changes. */
|
|
+ KTUNLOCK(id);
|
|
+ krb5_set_error_message(context, KRB5_KT_IOERR,
|
|
+ "Cannot change keytab with keytab iterators active");
|
|
+ return KRB5_KT_IOERR; /* XXX */
|
|
+ }
|
|
if ((retval = krb5_ktfileint_openw(context, id))) {
|
|
KTUNLOCK(id);
|
|
return retval;
|
|
@@ -858,6 +918,13 @@ krb5_ktfile_remove(krb5_context context,
|
|
kerror = KTLOCK(id);
|
|
if (kerror)
|
|
return kerror;
|
|
+ if (KTFILEP(id)) {
|
|
+ /* Iterator(s) active -- no changes. */
|
|
+ KTUNLOCK(id);
|
|
+ krb5_set_error_message(context, KRB5_KT_IOERR,
|
|
+ "Cannot change keytab with keytab iterators active");
|
|
+ return KRB5_KT_IOERR; /* XXX */
|
|
+ }
|
|
|
|
if ((kerror = krb5_ktfileint_openw(context, id))) {
|
|
KTUNLOCK(id);
|
|
@@ -1114,6 +1181,7 @@ krb5_ktfileint_open(krb5_context context
|
|
return KRB5_KEYTAB_BADVNO;
|
|
}
|
|
}
|
|
+ KTSTARTOFF(id) = ftell(KTFILEP(id));
|
|
return 0;
|
|
}
|
|
|
|
@@ -1424,7 +1492,7 @@ krb5_ktfileint_write_entry(krb5_context
|
|
krb5_timestamp timestamp;
|
|
krb5_int32 princ_type;
|
|
krb5_int32 size_needed;
|
|
- krb5_int32 commit_point;
|
|
+ krb5_int32 commit_point = -1;
|
|
int i;
|
|
|
|
KTCHECKLOCK(id);
|
|
Index: src/lib/krb5/os/toffset.c
|
|
===================================================================
|
|
--- src/lib/krb5/os/toffset.c.orig
|
|
+++ src/lib/krb5/os/toffset.c
|
|
@@ -34,6 +34,9 @@
|
|
* routines will return the correct time as corrected by difference
|
|
* between the system time and the "real time" as passed to this
|
|
* routine
|
|
+ *
|
|
+ * If the real time microseconds are given as -1 the caller doesn't
|
|
+ * know the microseconds value so the usec offset is always zero.
|
|
*/
|
|
krb5_error_code KRB5_CALLCONV
|
|
krb5_set_real_time(krb5_context context, krb5_timestamp seconds, krb5_int32 microseconds)
|
|
@@ -45,8 +48,10 @@ krb5_set_real_time(krb5_context context,
|
|
retval = krb5_crypto_us_timeofday(&sec, &usec);
|
|
if (retval)
|
|
return retval;
|
|
+
|
|
os_ctx->time_offset = seconds - sec;
|
|
- os_ctx->usec_offset = microseconds - usec;
|
|
+ os_ctx->usec_offset = (microseconds > -1) ? microseconds - usec : 0;
|
|
+
|
|
os_ctx->os_flags = ((os_ctx->os_flags & ~KRB5_OS_TOFFSET_TIME) |
|
|
KRB5_OS_TOFFSET_VALID);
|
|
return 0;
|
|
Index: src/lib/krb5/os/locate_kdc.c
|
|
===================================================================
|
|
--- src/lib/krb5/os/locate_kdc.c.orig
|
|
+++ src/lib/krb5/os/locate_kdc.c
|
|
@@ -611,6 +611,7 @@ module_locate_server (krb5_context ctx,
|
|
krb5_error_code code;
|
|
struct krb5plugin_service_locate_ftable *vtbl = NULL;
|
|
void **ptrs;
|
|
+ char *realmz; /* NUL-terminated realm */
|
|
int i;
|
|
struct module_callback_data cbdata = { 0, };
|
|
|
|
@@ -632,6 +633,17 @@ module_locate_server (krb5_context ctx,
|
|
return KRB5_PLUGIN_NO_HANDLE;
|
|
}
|
|
|
|
+ if (realm->length >= UINT_MAX) {
|
|
+ krb5int_free_plugin_dir_data(ptrs);
|
|
+ return ENOMEM;
|
|
+ }
|
|
+ realmz = malloc(realm->length + 1);
|
|
+ if (realmz == NULL) {
|
|
+ krb5int_free_plugin_dir_data(ptrs);
|
|
+ return ENOMEM;
|
|
+ }
|
|
+ memcpy(realmz, realm->data, realm->length);
|
|
+ realmz[realm->length] = '\0';
|
|
for (i = 0; ptrs[i]; i++) {
|
|
void *blob;
|
|
|
|
@@ -644,7 +656,7 @@ module_locate_server (krb5_context ctx,
|
|
if (code)
|
|
continue;
|
|
|
|
- code = vtbl->lookup(blob, svc, realm->data, socktype, family,
|
|
+ code = vtbl->lookup(blob, svc, realmz, socktype, family,
|
|
module_callback, &cbdata);
|
|
vtbl->fini(blob);
|
|
if (code == KRB5_PLUGIN_NO_HANDLE) {
|
|
@@ -657,6 +669,7 @@ module_locate_server (krb5_context ctx,
|
|
/* Module encountered an actual error. */
|
|
Tprintf("plugin lookup routine returned error %d: %s\n",
|
|
code, error_message(code));
|
|
+ free(realmz);
|
|
krb5int_free_plugin_dir_data (ptrs);
|
|
return code;
|
|
}
|
|
@@ -664,6 +677,7 @@ module_locate_server (krb5_context ctx,
|
|
}
|
|
if (ptrs[i] == NULL) {
|
|
Tprintf("ran off end of plugin list\n");
|
|
+ free(realmz);
|
|
krb5int_free_plugin_dir_data (ptrs);
|
|
return KRB5_PLUGIN_NO_HANDLE;
|
|
}
|
|
@@ -672,6 +686,7 @@ module_locate_server (krb5_context ctx,
|
|
/* Got something back, yippee. */
|
|
Tprintf("now have %d addrs in list %p\n", addrlist->naddrs, addrlist);
|
|
print_addrlist(addrlist);
|
|
+ free(realmz);
|
|
krb5int_free_plugin_dir_data (ptrs);
|
|
return 0;
|
|
}
|
|
Index: src/lib/krb5/rcache/rc_io.c
|
|
===================================================================
|
|
--- src/lib/krb5/rcache/rc_io.c.orig
|
|
+++ src/lib/krb5/rcache/rc_io.c
|
|
@@ -83,6 +83,7 @@ krb5_rc_io_creat(krb5_context context, k
|
|
(void) strcpy(d->fn, dir);
|
|
(void) strcat(d->fn, PATH_SEPARATOR);
|
|
(void) strcat(d->fn, *fn);
|
|
+ unlink(d->fn);
|
|
d->fd = THREEPARAMOPEN(d->fn, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL |
|
|
O_BINARY, 0600);
|
|
}
|
|
@@ -425,7 +426,7 @@ krb5_rc_io_read(krb5_context context, kr
|
|
strerror(errno));
|
|
return KRB5_RC_IO_UNKNOWN;
|
|
}
|
|
- if (count == 0)
|
|
+ if (count != num)
|
|
return KRB5_RC_IO_EOF;
|
|
return 0;
|
|
}
|
|
Index: src/lib/krb5/ccache/cc_memory.c
|
|
===================================================================
|
|
--- src/lib/krb5/ccache/cc_memory.c.orig
|
|
+++ src/lib/krb5/ccache/cc_memory.c
|
|
@@ -135,10 +135,18 @@ krb5_error_code KRB5_CALLCONV
|
|
krb5_mcc_initialize(krb5_context context, krb5_ccache id, krb5_principal princ)
|
|
{
|
|
krb5_error_code ret;
|
|
+ krb5_mcc_data *d;
|
|
+
|
|
+ d = (krb5_mcc_data *)id->data;
|
|
+ ret = k5_mutex_lock(&d->lock);
|
|
+ if (ret)
|
|
+ return ret;
|
|
|
|
krb5_mcc_free(context, id);
|
|
ret = krb5_copy_principal(context, princ,
|
|
&((krb5_mcc_data *)id->data)->prin);
|
|
+
|
|
+ k5_mutex_unlock(&d->lock);
|
|
if (ret == KRB5_OK)
|
|
krb5_change_cache();
|
|
return ret;
|
|
@@ -205,8 +213,13 @@ krb5_mcc_destroy(krb5_context context, k
|
|
}
|
|
k5_mutex_unlock(&krb5int_mcc_mutex);
|
|
|
|
+ err = k5_mutex_lock(&d->lock);
|
|
+ if (err)
|
|
+ return err;
|
|
+
|
|
krb5_mcc_free(context, id);
|
|
krb5_xfree(d->name);
|
|
+ k5_mutex_unlock(&d->lock);
|
|
k5_mutex_destroy(&d->lock);
|
|
krb5_xfree(d);
|
|
krb5_xfree(id);
|
|
@@ -244,12 +257,6 @@ krb5_mcc_resolve (krb5_context context,
|
|
krb5_error_code err;
|
|
krb5_mcc_data *d;
|
|
|
|
- lid = (krb5_ccache) malloc(sizeof(struct _krb5_ccache));
|
|
- if (lid == NULL)
|
|
- return KRB5_CC_NOMEM;
|
|
-
|
|
- lid->ops = &krb5_mcc_ops;
|
|
-
|
|
err = k5_mutex_lock(&krb5int_mcc_mutex);
|
|
if (err)
|
|
return err;
|
|
@@ -262,11 +269,16 @@ krb5_mcc_resolve (krb5_context context,
|
|
err = new_mcc_data(residual, &d);
|
|
if (err) {
|
|
k5_mutex_unlock(&krb5int_mcc_mutex);
|
|
- krb5_xfree(lid);
|
|
return err;
|
|
}
|
|
}
|
|
k5_mutex_unlock(&krb5int_mcc_mutex);
|
|
+
|
|
+ lid = (krb5_ccache) malloc(sizeof(struct _krb5_ccache));
|
|
+ if (lid == NULL)
|
|
+ return KRB5_CC_NOMEM;
|
|
+
|
|
+ lid->ops = &krb5_mcc_ops;
|
|
lid->data = d;
|
|
*id = lid;
|
|
return KRB5_OK;
|
|
Index: src/lib/krb5/ccache/ccdefault.c
|
|
===================================================================
|
|
--- src/lib/krb5/ccache/ccdefault.c.orig
|
|
+++ src/lib/krb5/ccache/ccdefault.c
|
|
@@ -1,7 +1,7 @@
|
|
/*
|
|
* lib/krb5/ccache/ccdefault.c
|
|
*
|
|
- * Copyright 1990 by the Massachusetts Institute of Technology.
|
|
+ * Copyright 1990, 2007, 2008 by the Massachusetts Institute of Technology.
|
|
* All Rights Reserved.
|
|
*
|
|
* Export of this software from the United States of America may
|
|
@@ -45,22 +45,30 @@ static HANDLE hLeashDLL = INVALID_HANDLE
|
|
krb5_error_code KRB5_CALLCONV
|
|
krb5_cc_default(krb5_context context, krb5_ccache *ccache)
|
|
{
|
|
- krb5_os_context os_ctx;
|
|
+ const char *default_name;
|
|
|
|
if (!context || context->magic != KV5M_CONTEXT)
|
|
return KV5M_CONTEXT;
|
|
+
|
|
+ default_name = krb5_cc_default_name(context);
|
|
+ if (default_name == NULL) {
|
|
+ /* Could be a bogus context, or an allocation failure, or
|
|
+ other things. Unfortunately the API doesn't allow us
|
|
+ to find out any specifics. */
|
|
+ return KRB5_FCC_INTERNAL;
|
|
+ }
|
|
|
|
- os_ctx = context->os_context;
|
|
-
|
|
- return krb5_cc_resolve(context, krb5_cc_default_name(context), ccache);
|
|
+ return krb5_cc_resolve(context, default_name, ccache);
|
|
}
|
|
|
|
-/* This is the internal function which opens the default ccache. On platforms supporting
|
|
- the login library's automatic popup dialog to get tickets, this function also updated the
|
|
- library's internal view of the current principal associated with this cache.
|
|
-
|
|
- All krb5 and GSS functions which need to open a cache to get a tgt to obtain service tickets
|
|
- should call this function, not krb5_cc_default() */
|
|
+/* This is the internal function which opens the default ccache. On
|
|
+ platforms supporting the login library's automatic popup dialog to
|
|
+ get tickets, this function also updated the library's internal view
|
|
+ of the current principal associated with this cache.
|
|
+
|
|
+ All krb5 and GSS functions which need to open a cache to get a tgt
|
|
+ to obtain service tickets should call this function, not
|
|
+ krb5_cc_default(). */
|
|
|
|
krb5_error_code KRB5_CALLCONV
|
|
krb5int_cc_default(krb5_context context, krb5_ccache *ccache)
|
|
@@ -82,7 +90,8 @@ krb5int_cc_default(krb5_context context,
|
|
/* This function tries to get tickets and put them in the specified
|
|
cache, however, if the cache does not exist, it may choose to put
|
|
them elsewhere (ie: the system default) so we set that here */
|
|
- if (strcmp (krb5_cc_default_name (context), outCacheName) != 0) {
|
|
+ char * ccdefname = krb5_cc_default_name (context);
|
|
+ if (!ccdefname || strcmp (ccdefname, outCacheName) != 0) {
|
|
krb5_cc_set_default_name (context, outCacheName);
|
|
}
|
|
KLDisposeString (outCacheName);
|
|
@@ -102,7 +111,8 @@ krb5int_cc_default(krb5_context context,
|
|
char ccname[256]="";
|
|
pLeash_AcquireInitialTicketsIfNeeded(context, NULL, ccname, sizeof(ccname));
|
|
if (ccname[0]) {
|
|
- if (strcmp (krb5_cc_default_name (context),ccname) != 0) {
|
|
+ char * ccdefname = krb5_cc_default_name (context);
|
|
+ if (!ccdefname || strcmp (ccdefname, ccname) != 0) {
|
|
krb5_cc_set_default_name (context, ccname);
|
|
}
|
|
}
|
|
Index: src/lib/krb5/krb/get_in_tkt.c
|
|
===================================================================
|
|
--- src/lib/krb5/krb/get_in_tkt.c.orig
|
|
+++ src/lib/krb5/krb/get_in_tkt.c
|
|
@@ -290,7 +290,7 @@ verify_as_reply(krb5_context context,
|
|
|
|
if (context->library_options & KRB5_LIBOPT_SYNC_KDCTIME) {
|
|
retval = krb5_set_real_time(context,
|
|
- as_reply->enc_part2->times.authtime, 0);
|
|
+ as_reply->enc_part2->times.authtime, -1);
|
|
if (retval)
|
|
return retval;
|
|
} else {
|
|
Index: src/lib/krb5/krb/rd_safe.c
|
|
===================================================================
|
|
--- src/lib/krb5/krb/rd_safe.c.orig
|
|
+++ src/lib/krb5/krb/rd_safe.c
|
|
@@ -1,7 +1,7 @@
|
|
/*
|
|
* lib/krb5/krb/rd_safe.c
|
|
*
|
|
- * Copyright 1990,1991 by the Massachusetts Institute of Technology.
|
|
+ * Copyright 1990,1991,2007,2008 by the Massachusetts Institute of Technology.
|
|
* All Rights Reserved.
|
|
*
|
|
* Export of this software from the United States of America may
|
|
@@ -114,11 +114,11 @@ krb5_rd_safe_basic(krb5_context context,
|
|
|
|
message->checksum = &our_cksum;
|
|
|
|
- if ((retval = encode_krb5_safe_with_body(message, &safe_body, &scratch)))
|
|
+ retval = encode_krb5_safe_with_body(message, &safe_body, &scratch);
|
|
+ message->checksum = his_cksum;
|
|
+ if (retval)
|
|
goto cleanup;
|
|
|
|
- message->checksum = his_cksum;
|
|
-
|
|
retval = krb5_c_verify_checksum(context, keyblock,
|
|
KRB5_KEYUSAGE_KRB_SAFE_CKSUM,
|
|
scratch, his_cksum, &valid);
|
|
Index: src/lib/krb5/krb/gc_via_tkt.c
|
|
===================================================================
|
|
--- src/lib/krb5/krb/gc_via_tkt.c.orig
|
|
+++ src/lib/krb5/krb/gc_via_tkt.c
|
|
@@ -1,7 +1,7 @@
|
|
/*
|
|
* lib/krb5/krb/gc_via_tgt.c
|
|
*
|
|
- * Copyright 1990,1991 by the Massachusetts Institute of Technology.
|
|
+ * Copyright 1990,1991,2007,2008 by the Massachusetts Institute of Technology.
|
|
* All Rights Reserved.
|
|
*
|
|
* Export of this software from the United States of America may
|
|
@@ -100,6 +100,7 @@ cleanup_keyblock:
|
|
|
|
cleanup:
|
|
free (*ppcreds);
|
|
+ *ppcreds = NULL;
|
|
return retval;
|
|
}
|
|
|
|
@@ -249,7 +250,8 @@ krb5_get_cred_via_tkt (krb5_context cont
|
|
switch (err_reply->error) {
|
|
case KRB_ERR_GENERIC:
|
|
krb5_set_error_message(context, retval,
|
|
- "KDC returned error string: %s",
|
|
+ "KDC returned error string: %.*s",
|
|
+ err_reply->text.length,
|
|
err_reply->text.data);
|
|
break;
|
|
default:
|
|
Index: src/slave/kpropd.M
|
|
===================================================================
|
|
--- src/slave/kpropd.M.orig
|
|
+++ src/slave/kpropd.M
|
|
@@ -122,7 +122,7 @@ mode.
|
|
.TP
|
|
.B \-a
|
|
allows the user to specify the path to the
|
|
-.KR kpropd.acl
|
|
+kpropd.acl
|
|
file; by default the path used is KPROPD_ACL_FILE
|
|
(normally @manlocalstatedir@/krb5kdc/kpropd.acl).
|
|
.SH FILES
|
|
Index: src/util/depfix.pl
|
|
===================================================================
|
|
--- src/util/depfix.pl.orig
|
|
+++ src/util/depfix.pl
|
|
@@ -214,6 +214,7 @@ my $buf = '';
|
|
while (<STDIN>) {
|
|
# Strip newline.
|
|
chop;
|
|
+ next if /^\s*#/;
|
|
# Do directory-specific path substitutions on each filename read.
|
|
$_ = &do_subs($_);
|
|
if (m/\\$/) {
|
|
Index: src/util/profile/prof_init.c
|
|
===================================================================
|
|
--- src/util/profile/prof_init.c.orig
|
|
+++ src/util/profile/prof_init.c
|
|
@@ -34,8 +34,11 @@ profile_init(const_profile_filespec_t *f
|
|
memset(profile, 0, sizeof(struct _profile_t));
|
|
profile->magic = PROF_MAGIC_PROFILE;
|
|
|
|
- /* if the filenames list is not specified return an empty profile */
|
|
- if ( files ) {
|
|
+ /*
|
|
+ * If the filenames list is not specified or empty, return an empty
|
|
+ * profile.
|
|
+ */
|
|
+ if ( files && !PROFILE_LAST_FILESPEC(*files) ) {
|
|
for (fs = files; !PROFILE_LAST_FILESPEC(*fs); fs++) {
|
|
retval = profile_open_file(*fs, &new_file);
|
|
/* if this file is missing, skip to the next */
|
|
Index: src/kdc/network.c
|
|
===================================================================
|
|
--- src/kdc/network.c (Revision 20580)
|
|
+++ src/kdc/network.c (Revision 20587)
|
|
@@ -277,6 +277,12 @@
|
|
struct connection *newconn;
|
|
void *tmp;
|
|
|
|
+ if (sock > FD_SETSIZE) {
|
|
+ data->retval = EMFILE; /* XXX */
|
|
+ com_err(data->prog, 0,
|
|
+ "file descriptor number %d too high", sock);
|
|
+ return 0;
|
|
+ }
|
|
newconn = malloc(sizeof(*newconn));
|
|
if (newconn == 0) {
|
|
data->retval = errno;
|
|
@@ -360,6 +366,12 @@
|
|
paddr(addr));
|
|
return -1;
|
|
}
|
|
+ if (sock > FD_SETSIZE) {
|
|
+ close(sock);
|
|
+ com_err(data->prog, 0, "TCP socket fd number %d (for %s) too high",
|
|
+ sock, paddr(addr));
|
|
+ return -1;
|
|
+ }
|
|
if (setreuseaddr(sock, 1) < 0)
|
|
com_err(data->prog, errno,
|
|
"Cannot enable SO_REUSEADDR on fd %d", sock);
|
|
@@ -791,6 +803,10 @@
|
|
s = accept(conn->fd, addr, &addrlen);
|
|
if (s < 0)
|
|
return;
|
|
+ if (s > FD_SETSIZE) {
|
|
+ close(s);
|
|
+ return;
|
|
+ }
|
|
setnbio(s), setnolinger(s);
|
|
|
|
sockdata.prog = prog;
|
|
Index: src/lib/gssapi/krb5/accept_sec_context.c
|
|
===================================================================
|
|
--- src/lib/gssapi/krb5/accept_sec_context.c (Revision 20580)
|
|
+++ src/lib/gssapi/krb5/accept_sec_context.c (Revision 20587)
|
|
@@ -1,5 +1,5 @@
|
|
/*
|
|
- * Copyright 2000, 2004 by the Massachusetts Institute of Technology.
|
|
+ * Copyright 2000, 2004, 2008 by the Massachusetts Institute of Technology.
|
|
* All Rights Reserved.
|
|
*
|
|
* Export of this software from the United States of America may
|
|
@@ -249,6 +249,7 @@
|
|
krb5_data option;
|
|
const gss_OID_desc *mech_used = NULL;
|
|
OM_uint32 major_status = GSS_S_FAILURE;
|
|
+ OM_uint32 tmp_minor_status;
|
|
krb5_error krb_error_data;
|
|
krb5_data scratch;
|
|
gss_cred_id_t cred_handle = NULL;
|
|
@@ -903,13 +904,14 @@
|
|
|
|
if (!GSS_ERROR(major_status) && major_status != GSS_S_CONTINUE_NEEDED) {
|
|
ctx->k5_context = context;
|
|
- return(major_status);
|
|
+ context = NULL;
|
|
+ goto done;
|
|
}
|
|
|
|
/* from here on is the real "fail" code */
|
|
|
|
if (ctx)
|
|
- (void) krb5_gss_delete_sec_context(minor_status,
|
|
+ (void) krb5_gss_delete_sec_context(&tmp_minor_status,
|
|
(gss_ctx_id_t *) &ctx, NULL);
|
|
if (deleg_cred) { /* free memory associated with the deleg credential */
|
|
if (deleg_cred->ccache)
|
|
@@ -936,10 +938,9 @@
|
|
if (decode_req_message) {
|
|
krb5_ap_req * request;
|
|
|
|
- if (decode_krb5_ap_req(&ap_req, &request)) {
|
|
- krb5_free_context(context);
|
|
- return (major_status);
|
|
- }
|
|
+ if (decode_krb5_ap_req(&ap_req, &request))
|
|
+ goto done;
|
|
+
|
|
if (request->ap_options & AP_OPTS_MUTUAL_REQUIRED)
|
|
gss_flags |= GSS_C_MUTUAL_FLAG;
|
|
krb5_free_ap_req(context, request);
|
|
@@ -967,20 +968,16 @@
|
|
krb_error_data.server = cred->princ;
|
|
|
|
code = krb5_mk_error(context, &krb_error_data, &scratch);
|
|
- if (code) {
|
|
- krb5_free_context(context);
|
|
- return (major_status);
|
|
- }
|
|
+ if (code)
|
|
+ goto done;
|
|
|
|
tmsglen = scratch.length;
|
|
toktype = KG_TOK_CTX_ERROR;
|
|
|
|
token.length = g_token_size(mech_used, tmsglen);
|
|
token.value = (unsigned char *) xmalloc(token.length);
|
|
- if (!token.value) {
|
|
- krb5_free_context(context);
|
|
- return (major_status);
|
|
- }
|
|
+ if (!token.value)
|
|
+ goto done;
|
|
|
|
ptr = token.value;
|
|
g_make_token_header(mech_used, tmsglen, &ptr, toktype);
|
|
@@ -990,9 +987,13 @@
|
|
|
|
*output_token = token;
|
|
}
|
|
+
|
|
+ done:
|
|
if (!verifier_cred_handle && cred_handle) {
|
|
- krb5_gss_release_cred(minor_status, &cred_handle);
|
|
+ krb5_gss_release_cred(&tmp_minor_status, &cred_handle);
|
|
}
|
|
- krb5_free_context(context);
|
|
+ if (context) {
|
|
+ krb5_free_context(context);
|
|
+ }
|
|
return (major_status);
|
|
}
|
|
Index: src/lib/comerr32.def
|
|
===================================================================
|
|
--- src/lib/comerr32.def (Revision 20580)
|
|
+++ src/lib/comerr32.def (Revision 20587)
|
|
@@ -3,10 +3,10 @@
|
|
HEAPSIZE 8192
|
|
|
|
EXPORTS
|
|
- com_err
|
|
- com_err_va
|
|
- error_message
|
|
- add_error_table
|
|
- remove_error_table
|
|
- set_com_err_hook
|
|
- reset_com_err_hook
|
|
+ com_err @2
|
|
+ com_err_va @3
|
|
+ error_message @4
|
|
+ add_error_table @1
|
|
+ remove_error_table @5
|
|
+ set_com_err_hook @6
|
|
+ reset_com_err_hook @7
|
|
Index: src/lib/kadm5/srv/svr_principal.c
|
|
===================================================================
|
|
--- src/lib/kadm5/srv/svr_principal.c (Revision 20580)
|
|
+++ src/lib/kadm5/srv/svr_principal.c (Revision 20587)
|
|
@@ -2099,7 +2099,8 @@
|
|
* inexact match on the enctype; this behavior will go away when
|
|
* the key storage architecture gets redesigned for 1.3.
|
|
*/
|
|
- keyblock->enctype = ktype;
|
|
+ if (ktype != -1)
|
|
+ keyblock->enctype = ktype;
|
|
|
|
if (kvnop)
|
|
*kvnop = key_data->key_data_kvno;
|
|
Index: src/lib/krb5/os/sendto_kdc.c
|
|
===================================================================
|
|
--- src/lib/krb5/os/sendto_kdc.c (Revision 20580)
|
|
+++ src/lib/krb5/os/sendto_kdc.c (Revision 20587)
|
|
@@ -654,6 +654,12 @@
|
|
dprint("socket: %m creating with af %d\n", state->err, ai->ai_family);
|
|
return -1; /* try other hosts */
|
|
}
|
|
+ if (fd >= FD_SETSIZE) {
|
|
+ close(fd);
|
|
+ state->err = EMFILE;
|
|
+ dprint("socket: fd %d too high\n", fd);
|
|
+ return -1;
|
|
+ }
|
|
/* Make it non-blocking. */
|
|
if (ai->ai_socktype == SOCK_STREAM) {
|
|
static const int one = 1;
|
|
|
|
|