54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/*
78894ffc7b2ee149add8332a811ec7f43fd945c1mp * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * Use is subject to license terms.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/*
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * kadmin/ldap_util/kdb5_ldap_util.c
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * (C) Copyright 1990,1991, 1996 by the Massachusetts Institute of Technology.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * All Rights Reserved.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * Export of this software from the United States of America may
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * require a specific license from the United States Government.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * It is the responsibility of any person or organization contemplating
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * export to obtain such a license before exporting.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * distribute this software and its documentation for any purpose and
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * without fee is hereby granted, provided that the above copyright
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * notice appear in all copies and that both that copyright notice and
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * this permission notice appear in supporting documentation, and that
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * the name of M.I.T. not be used in advertising or publicity pertaining
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * to distribution of the software without specific, written prior
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * permission. Furthermore if you modify this software you must label
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * your software as modified software and not distribute it in such a
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * fashion that it might be confused with the original M.I.T. software.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * M.I.T. makes no representations about the suitability of
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * this software for any purpose. It is provided "as is" without express
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * or implied warranty.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * Edit a KDC database.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/*
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * Copyright (C) 1998 by the FundsXpress, INC.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * All rights reserved.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * Export of this software from the United States of America may require
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * a specific license from the United States Government. It is the
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * responsibility of any person or organization contemplating export to
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * obtain such a license before exporting.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * distribute this software and its documentation for any purpose and
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * without fee is hereby granted, provided that the above copyright
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * notice appear in all copies and that both that copyright notice and
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * this permission notice appear in supporting documentation, and that
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * the name of FundsXpress. not be used in advertising or publicity pertaining
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * to distribution of the software without specific, written prior
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * permission. FundsXpress makes no representations about the suitability of
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * this software for any purpose. It is provided "as is" without express
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * or implied warranty.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* Copyright (c) 2004-2005, Novell, Inc.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * All rights reserved.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * Redistribution and use in source and binary forms, with or without
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * modification, are permitted provided that the following conditions are met:
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * * Redistributions of source code must retain the above copyright notice,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * this list of conditions and the following disclaimer.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * * Redistributions in binary form must reproduce the above copyright
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * notice, this list of conditions and the following disclaimer in the
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * documentation and/or other materials provided with the distribution.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * * The copyright holder's name is not used to endorse or promote products
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * derived from this software without specific prior written permission.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf *
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * POSSIBILITY OF SUCH DAMAGE.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include <stdio.h>
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include <time.h>
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include <k5-int.h>
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include <kadm5/admin.h>
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include <adm_proto.h>
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include <libintl.h>
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include <locale.h>
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#include "kdb5_ldap_util.h"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillftypedef void (*cmd_func)(int, char **);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfint cmd_index(char *name);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfchar *mkey_password = 0;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfint exit_status = 0;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfkrb5_context util_context;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfkadm5_config_params global_params;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfkrb5_boolean db_inited = FALSE;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfchar *progname;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfkrb5_boolean manual_mkey = FALSE;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/*
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * This function prints the usage of kdb5_ldap_util, which is
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * the LDAP configuration utility.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfvoid usage()
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf{
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf fprintf(stderr, "%s: "
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"kdb5_ldap_util [-D user_dn [-w passwd]] [-H ldapuri]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\tcmd [cmd_options]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* Create realm */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"create [-subtrees subtree_dn_list] [-sscope search_scope] [-containerref container_reference_dn]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#ifdef HAVE_EDIRECTORY
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-kdcdn kdc_service_list] [-admindn admin_service_list]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-pwddn passwd_service_list]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#endif
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-m|-P password|-sf stashfilename] [-k mkeytype] [-s]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-maxtktlife max_ticket_life] [-maxrenewlife max_renewable_ticket_life]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[ticket_flags] [-r realm]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* modify realm */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"modify [-subtrees subtree_dn_list] [-sscope search_scope] [-containerref container_reference_dn]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#ifdef HAVE_EDIRECTORY
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-kdcdn kdc_service_list |\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-clearkdcdn kdc_service_list] [-addkdcdn kdc_service_list]]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-admindn admin_service_list | [-clearadmindn admin_service_list]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-addadmindn admin_service_list]] [-pwddn passwd_service_list |\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-clearpwddn passwd_service_list] [-addpwddn passwd_service_list]]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#endif
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-maxtktlife max_ticket_life] [-maxrenewlife max_renewable_ticket_life]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[ticket_flags] [-r realm]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* View realm */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"view [-r realm]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* Destroy realm */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"destroy [-f] [-r realm]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* List realms */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"list\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#ifdef HAVE_EDIRECTORY
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* Create Service */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"create_service {-kdc|-admin|-pwd} [-servicehost service_host_list]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-realm realm_list] \n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-randpw|-fileonly] [-f filename] service_dn\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* Modify service */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"modify_service [-servicehost service_host_list |\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-clearservicehost service_host_list]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-addservicehost service_host_list]]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-realm realm_list | [-clearrealm realm_list]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-addrealm realm_list]] service_dn\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* View Service */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"view_service service_dn\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* Destroy Service */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"destroy_service [-force] [-f stashfilename] service_dn\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* List services */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"list_service [-basedn base_dn]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* Set Service password */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"setsrvpw [-randpw|-fileonly] [-f filename] service_dn\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#else
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* Stash the service password */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"stashsrvpw [-f filename] service_dn\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#endif
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* Create policy */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"create_policy [-r realm] [-maxtktlife max_ticket_life]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-maxrenewlife max_renewable_ticket_life] [ticket_flags] policy\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* Modify policy */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"modify_policy [-r realm] [-maxtktlife max_ticket_life]\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"\t\t[-maxrenewlife max_renewable_ticket_life] [ticket_flags] policy\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* View policy */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"view_policy [-r realm] policy\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* Destroy policy */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"destroy_policy [-r realm] [-force] policy\n"
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* List policies */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf"list_policy [-r realm]\n",
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf gettext("Usage"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf}
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfvoid db_usage (int type) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /*
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * This should print usage of 'type' command. For now, we will print usage
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * of all commands.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf usage ();
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf}
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/* The help messages for all sub-commands should be in the
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * same order as listed in this table.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfstatic struct _cmd_table {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *name;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf cmd_func func;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int opendb;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf} cmd_table[] = {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"create", kdb5_ldap_create, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"modify", kdb5_ldap_modify, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"view", kdb5_ldap_view, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"destroy", kdb5_ldap_destroy, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"list", kdb5_ldap_list, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#ifdef HAVE_EDIRECTORY
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"create_service", kdb5_ldap_create_service, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"modify_service", kdb5_ldap_modify_service, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"view_service", kdb5_ldap_view_service, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"destroy_service", kdb5_ldap_destroy_service, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"list_service",kdb5_ldap_list_services,1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"setsrvpw", kdb5_ldap_set_service_password, 0},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#else
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"stashsrvpw", kdb5_ldap_stash_service_password, 0},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf#endif
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"create_policy", kdb5_ldap_create_policy, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"modify_policy", kdb5_ldap_modify_policy, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"view_policy", kdb5_ldap_view_policy, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"destroy_policy", kdb5_ldap_destroy_policy, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {"list_policy", kdb5_ldap_list_policies, 1},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf {NULL, NULL, 0},
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf};
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/*
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * The function cmd_lookup returns the structure matching the
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * command name and returns NULL if nothing matches.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfstatic struct _cmd_table *cmd_lookup(name)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *name;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf{
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int i;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf for (i = 0; cmd_table[i].name != NULL; i++)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (strcmp(cmd_table[i].name, name) == 0)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf return &cmd_table[i];
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf return NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf}
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf/*
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * The function cmd_index provides the offset of the command
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * in the command table, which can be used to get the corresponding
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * help from the help message table.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfint cmd_index(name)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *name;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf{
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int i;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (name == NULL)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf return -1;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf for (i = 0; cmd_table[i].name != NULL; i++)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (strcmp(cmd_table[i].name, name) == 0)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf return i;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf return -1;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf}
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfstatic void extended_com_err_fn (const char *myprog, errcode_t code,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf const char *fmt, va_list args)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf{
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf const char *emsg;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* Solaris Kerberos: code should be like that in kdb5_util.c */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (code) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf emsg = krb5_get_error_message (util_context, code);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf fprintf (stderr, "%s: %s ", myprog, emsg);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_free_error_message (util_context, emsg);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf fprintf (stderr, "%s: ", myprog);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf vfprintf (stderr, fmt, args);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf fprintf (stderr, "\n");
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf}
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfint main(argc, argv)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int argc;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *argv[];
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf{
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf struct _cmd_table *cmd = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *koptarg = NULL, **cmd_argv = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int cmd_argc = 0;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_error_code retval;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int usage_print = 0;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf int gp_is_static = 1;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_error_code db_retval = 1;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *bind_dn = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *passwd = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *ldap_server = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf unsigned int ldapmask = 0;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf unsigned int passwd_len = 0;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *prompt = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf kdb5_dal_handle *dal_handle = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_ldap_context *ldap_context=NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *value = NULL, *conf_section = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_boolean realm_name_required = TRUE;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_boolean print_help_message = FALSE;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
78894ffc7b2ee149add8332a811ec7f43fd945c1mp /*
78894ffc7b2ee149add8332a811ec7f43fd945c1mp * Solaris Kerberos:
78894ffc7b2ee149add8332a811ec7f43fd945c1mp * Ensure that "progname" is set before calling com_err.
78894ffc7b2ee149add8332a811ec7f43fd945c1mp */
78894ffc7b2ee149add8332a811ec7f43fd945c1mp progname = (strrchr(argv[0], '/') ? strrchr(argv[0], '/')+1 : argv[0]);
78894ffc7b2ee149add8332a811ec7f43fd945c1mp
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf retval = krb5_init_context(&util_context);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf set_com_err_hook(extended_com_err_fn);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (retval) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf com_err (progname, retval, gettext("while initializing Kerberos code"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf cmd_argv = (char **) malloc(sizeof(char *)*argc);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (cmd_argv == NULL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf com_err(progname, ENOMEM, gettext("while creating sub-command arguments"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf memset(cmd_argv, 0, sizeof(char *)*argc);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf cmd_argc = 1;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf memset(&global_params, 0, sizeof(kadm5_config_params));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf argv++; argc--;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf while (*argv) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (strcmp(*argv, "--help") == 0) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf print_help_message = TRUE;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (strcmp(*argv, "-P") == 0 && ARG_VAL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf mkey_password = koptarg;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf manual_mkey = TRUE;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else if (strcmp(*argv, "-r") == 0 && ARG_VAL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf global_params.realm = koptarg;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf global_params.mask |= KADM5_CONFIG_REALM;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* not sure this is really necessary */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if ((retval = krb5_set_default_realm(util_context,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf global_params.realm))) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf com_err(progname, retval, gettext("while setting default realm name"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else if (strcmp(*argv, "-k") == 0 && ARG_VAL) {
dd9ccd46893ed9c4247368a00a0253d45a26311c if (krb5_string_to_enctype(koptarg, &global_params.enctype)) {
dd9ccd46893ed9c4247368a00a0253d45a26311c /* Solaris Kerberos */
dd9ccd46893ed9c4247368a00a0253d45a26311c com_err(progname, 0, gettext("%s is an invalid enctype"), koptarg);
dd9ccd46893ed9c4247368a00a0253d45a26311c }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf else
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf global_params.mask |= KADM5_CONFIG_ENCTYPE;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else if (strcmp(*argv, "-M") == 0 && ARG_VAL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf global_params.mkey_name = koptarg;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf global_params.mask |= KADM5_CONFIG_MKEY_NAME;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else if (strcmp(*argv, "-sf") == 0 && ARG_VAL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf global_params.stash_file = koptarg;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf global_params.mask |= KADM5_CONFIG_STASH_FILE;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else if (strcmp(*argv, "-m") == 0) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf manual_mkey = TRUE;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf global_params.mkey_from_kbd = 1;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf global_params.mask |= KADM5_CONFIG_MKEY_FROM_KBD;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else if (strcmp(*argv, "-D") == 0 && ARG_VAL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf bind_dn = koptarg;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (bind_dn == NULL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf com_err(progname, ENOMEM, gettext("while reading ldap parameters"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldapmask |= CMD_LDAP_D;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else if (strcmp(*argv, "-w") == 0 && ARG_VAL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf passwd = strdup(koptarg);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (passwd == NULL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf com_err(progname, ENOMEM, gettext("while reading ldap parameters"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldapmask |= CMD_LDAP_W;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else if (strcmp(*argv, "-H") == 0 && ARG_VAL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldap_server = koptarg;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (ldap_server == NULL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf com_err(progname, ENOMEM, gettext("while reading ldap parameters"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldapmask |= CMD_LDAP_H;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else if (cmd_lookup(*argv) != NULL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (cmd_argv[0] == NULL)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf cmd_argv[0] = *argv;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf else {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf free(cmd_argv);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf cmd_argv = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf usage();
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf cmd_argv[cmd_argc++] = *argv;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf argv++; argc--;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (cmd_argv[0] == NULL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf free(cmd_argv);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf cmd_argv = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf usage();
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* if we need to print the help message (because of --help option)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * we will print the help corresponding to the sub-command.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (print_help_message) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *cmd_name = cmd_argv[0];
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf free(cmd_argv);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf cmd_argv = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf usage();
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* We need to check for the presence of default realm name only in
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * the case of realm related operations like create, destroy etc.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if ((strcmp(cmd_argv[0], "list") == 0) ||
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (strcmp(cmd_argv[0], "stashsrvpw") == 0)) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf realm_name_required = FALSE;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (!util_context->default_realm) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf char *temp = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf retval = krb5_get_default_realm(util_context, &temp);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (retval) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (realm_name_required) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf com_err (progname, retval, gettext("while getting default realm"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf util_context->default_realm = temp;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* If we have the realm name, we can safely say that
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf * realm_name is required so that we don't neglect any information.
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf else
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf realm_name_required = TRUE;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf retval = profile_get_string(util_context->profile, KDB_REALM_SECTION,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf util_context->default_realm, KDB_MODULE_POINTER,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf NULL,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf &value);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (!(value)) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf retval = profile_get_string(util_context->profile, KDB_MODULE_DEF_SECTION,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf KDB_MODULE_POINTER, NULL,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf NULL,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf &value);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (!(value)) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (util_context->default_realm)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf conf_section = strdup(util_context->default_realm);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf conf_section = strdup(value);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf free(value);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf conf_section = strdup(value);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf free(value);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (realm_name_required) {
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan retval = kadm5_get_config_params(util_context, 1,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf &global_params, &global_params);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (retval) {
dd9ccd46893ed9c4247368a00a0253d45a26311c /* Solaris Kerberos */
dd9ccd46893ed9c4247368a00a0253d45a26311c com_err(progname, retval, gettext("while retreiving configuration parameters"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf gp_is_static = 0;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if ((retval = krb5_ldap_lib_init()) != 0) {
dd9ccd46893ed9c4247368a00a0253d45a26311c /* Solaris Kerberos */
dd9ccd46893ed9c4247368a00a0253d45a26311c com_err(progname, retval, gettext("while initializing error handling"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* Initialize the ldap context */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldap_context = calloc(sizeof(krb5_ldap_context), 1);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (ldap_context == NULL) {
dd9ccd46893ed9c4247368a00a0253d45a26311c /* Solaris Kerberos */
dd9ccd46893ed9c4247368a00a0253d45a26311c com_err(progname, ENOMEM, gettext("while initializing ldap handle"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldap_context->kcontext = util_context;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* If LDAP parameters are specified, replace them with the values from config */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (ldapmask & CMD_LDAP_D) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* If password is not specified, prompt for it */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (passwd == NULL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf passwd = (char *)malloc(MAX_PASSWD_LEN);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (passwd == NULL) {
dd9ccd46893ed9c4247368a00a0253d45a26311c /* Solaris Kerberos */
dd9ccd46893ed9c4247368a00a0253d45a26311c com_err(progname, ENOMEM, gettext("while retrieving ldap configuration"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf prompt = (char *)malloc(MAX_PASSWD_PROMPT_LEN);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (prompt == NULL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf free(passwd);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf passwd = NULL;
dd9ccd46893ed9c4247368a00a0253d45a26311c /* Solaris Kerberos */
dd9ccd46893ed9c4247368a00a0253d45a26311c com_err(progname, ENOMEM, gettext("while retrieving ldap configuration"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf memset(passwd, 0, sizeof(passwd));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf passwd_len = MAX_PASSWD_LEN - 1;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf snprintf(prompt, MAX_PASSWD_PROMPT_LEN, gettext("Password for \"%s\""), bind_dn);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf db_retval = krb5_read_password(util_context, prompt, NULL, passwd, &passwd_len);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if ((db_retval) || (passwd_len == 0)) {
dd9ccd46893ed9c4247368a00a0253d45a26311c /* Solaris Kerberos */
dd9ccd46893ed9c4247368a00a0253d45a26311c com_err(progname, db_retval, gettext("while retrieving ldap configuration"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf free(passwd);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf passwd = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldap_context->bind_pwd = passwd;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* If ldaphost is specified, release entry filled by configuration & use this */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (ldapmask & CMD_LDAP_H) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldap_context->server_info_list = (krb5_ldap_server_info **) calloc (2, sizeof (krb5_ldap_server_info *)) ;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (ldap_context->server_info_list == NULL) {
dd9ccd46893ed9c4247368a00a0253d45a26311c /* Solaris Kerberos */
dd9ccd46893ed9c4247368a00a0253d45a26311c com_err(progname, ENOMEM, gettext("while initializing server list"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldap_context->server_info_list[0] = (krb5_ldap_server_info *) calloc (1, sizeof (krb5_ldap_server_info));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (ldap_context->server_info_list[0] == NULL) {
dd9ccd46893ed9c4247368a00a0253d45a26311c /* Solaris Kerberos */
dd9ccd46893ed9c4247368a00a0253d45a26311c com_err(progname, ENOMEM, gettext("while initializing server list"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldap_context->server_info_list[0]->server_status = NOTSET;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldap_context->server_info_list[0]->server_name = strdup(ldap_server);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (ldap_context->server_info_list[0]->server_name == NULL) {
dd9ccd46893ed9c4247368a00a0253d45a26311c /* Solaris Kerberos */
dd9ccd46893ed9c4247368a00a0253d45a26311c com_err(progname, ENOMEM, gettext("while initializing server list"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (bind_dn) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldap_context->bind_dn = strdup(bind_dn);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (ldap_context->bind_dn == NULL) {
dd9ccd46893ed9c4247368a00a0253d45a26311c /* Solaris Kerberos */
dd9ccd46893ed9c4247368a00a0253d45a26311c com_err(progname, ENOMEM, gettext("while retrieving ldap configuration"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf } else
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldap_context->bind_dn = NULL;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf ldap_context->service_type = SERVICE_DN_TYPE_CLIENT;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (realm_name_required) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if ((global_params.enctype != ENCTYPE_UNKNOWN) &&
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (!krb5_c_valid_enctype(global_params.enctype))) {
dd9ccd46893ed9c4247368a00a0253d45a26311c /* Solaris Kerberos */
dd9ccd46893ed9c4247368a00a0253d45a26311c com_err(progname, KRB5_PROG_KEYTYPE_NOSUPP,
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf gettext("while setting up enctype %d"), global_params.enctype);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf cmd = cmd_lookup(cmd_argv[0]);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf /* Setup DAL handle to access the database */
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf dal_handle = calloc((size_t)1, sizeof(kdb5_dal_handle));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (dal_handle == NULL) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf dal_handle->db_context = ldap_context;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf util_context->db_context = (void *) dal_handle;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf db_retval = krb5_ldap_read_server_params(util_context, conf_section, KRB5_KDB_SRV_TYPE_OTHER);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (db_retval) {
dd9ccd46893ed9c4247368a00a0253d45a26311c /* Solaris Kerberos */
dd9ccd46893ed9c4247368a00a0253d45a26311c com_err(progname, db_retval, gettext("while reading ldap configuration"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (cmd->opendb) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf db_retval = krb5_ldap_db_init(util_context, ldap_context);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (db_retval) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf com_err(progname, db_retval, gettext("while initializing database"));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf exit_status++;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf db_inited = TRUE;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf (*cmd->func)(cmd_argc, cmd_argv);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf goto cleanup;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillfcleanup:
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (passwd)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf memset(passwd, 0, sizeof(passwd));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (ldap_context && ldap_context->bind_pwd)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf memset(ldap_context->bind_pwd, 0, sizeof(ldap_context->bind_pwd));
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (util_context) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (gp_is_static == 0)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf kadm5_free_config_params(util_context, &global_params);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_ldap_close(util_context);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf krb5_free_context(util_context);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (cmd_argv)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf free(cmd_argv);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (prompt)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf free(prompt);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (conf_section)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf free(conf_section);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (dal_handle)
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf free(dal_handle);
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf if (usage_print) {
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf usage();
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf }
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf return exit_status;
54925bf60766fbb4f1f2d7c843721406a7b7a3fbwillf}