diff options
author | Timothy Pearson <[email protected]> | 2013-03-01 00:19:15 -0600 |
---|---|---|
committer | Timothy Pearson <[email protected]> | 2013-03-01 00:19:15 -0600 |
commit | 45bfc1dc6edcc27f67acfbebb2d0f22ea06a40c4 (patch) | |
tree | c3d9f2f09b0d991851c49ca4ce9ea16187688c12 /cmdline/main.cpp | |
parent | 10386ff7f9356ceee6f3a30ed9064a09bd827eb4 (diff) | |
download | kcmldap-45bfc1dc6edcc27f67acfbebb2d0f22ea06a40c4.tar.gz kcmldap-45bfc1dc6edcc27f67acfbebb2d0f22ea06a40c4.zip |
Use bonding code in libtdeldap
Add skeleton code for tdeldapbonding
Diffstat (limited to 'cmdline/main.cpp')
-rw-r--r-- | cmdline/main.cpp | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/cmdline/main.cpp b/cmdline/main.cpp new file mode 100644 index 0000000..55a21de --- /dev/null +++ b/cmdline/main.cpp @@ -0,0 +1,176 @@ +/*************************************************************************** + * Copyright (C) 2013 by Timothy Pearson * + * [email protected] * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include <cstdlib> + +#include <sys/types.h> +#include <sys/socket.h> +#include <netdb.h> +#include <pwd.h> + +#include <tdeapplication.h> +#include <tdestartupinfo.h> +#include <tdecmdlineargs.h> +#include <kuniqueapplication.h> +#include <tdeaboutdata.h> +#include <tdefileitem.h> + +#include <ksimpleconfig.h> + +#include <tqdatetime.h> +#include <tqfile.h> + +#include <libtdeldap.h> + +// FIXME +// Connect this to CMake/Automake +#define KDE_CONFDIR "/etc/trinity" + +static const char description[] = + I18N_NOOP("TDE utility for managing workstations in a Kerberos realm"); + +static const char version[] = "v0.0.1"; + +static const TDECmdLineOptions options[] = +{ + { "adminusername <username>", I18N_NOOP("Specifies the username of the administrative user with permissions to perform the requested task"), 0 }, + { "adminpasswordfile <password file>", I18N_NOOP("Specifies the location of a file which contains the password of the administrative user"), 0 }, + { "!+command", I18N_NOOP("The command to execute on the Kerberos realm. Valid commands are: bond unbond disable"), 0 }, + { "!+realm", I18N_NOOP("The Kerberos realm on which to execute the specified command. Example: MY.REALM"), 0 }, + { "", I18N_NOOP("This utility requires an administrative user and password to be specified on the command line to function!"), 0 }, + TDECmdLineLastOption // End of options. +}; + +int main(int argc, char *argv[]) +{ + TDEAboutData aboutData( "tdeldapbonding", I18N_NOOP("Kerberos Realm Bonding Manager"), + version, description, TDEAboutData::License_GPL, + "(c) 2013, Timothy Pearson"); + aboutData.addAuthor("Timothy Pearson",0, "[email protected]"); + TDECmdLineArgs::init(argc, argv, &aboutData); + TDECmdLineArgs::addCmdLineOptions(options); + KUniqueApplication::addCmdLineOptions(); + TDEApplication::disableAutoDcopRegistration(); + + TDEApplication app(false, false); + + TDEStartupInfo::appStarted(); + + KSimpleConfig systemconfig( TQString::fromLatin1( KDE_CONFDIR "/ldap/ldapconfigrc" )); + systemconfig.setFileWriteMode(S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + + //====================================================================================================================================================== + // + // Manager code follows + // + //====================================================================================================================================================== + + TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs(); + if (args->count() > 1) { + int retcode; + + TQString command = TQString(args->arg(0)); + TQString realm = TQString(args->arg(1)); + + systemconfig.setGroup("LDAPRealm-" + realm); + TQString host = systemconfig.readEntry("admin_server"); + LDAPCredentials credentials; + if (args->isSet("adminusername") && args->isSet("adminpasswordfile")) { + TQString passFileName = args->getOption("adminpasswordfile"); + TQFile passFile(passFileName); + if (!passFile.open(IO_ReadOnly)) { + printf("[ERROR] Unable to open specified password file '%s'\n\r", passFileName.ascii()); fflush(stdout); + return -1; + } + TQTextStream stream(&passFile); + credentials.username = args->getOption("adminusername"); + credentials.password = stream.readLine(); + passFile.close(); + } + else { + credentials.use_gssapi = true; + } + credentials.realm = realm; + LDAPManager ldapmanager(realm, host, &credentials); + +// FIXME +// Move core bonding functionality from ldapbonding.cpp into libtdeldap, then ***properly*** activate this code! +// if (command == "bond") { +// // FIXME +// LDAPRealmConfig realmConfig; +// TQString errorString; +// +// realmConfig.name = realm; +// realmConfig.bonded = ; +// realmConfig.uid_offset; +// realmConfig.gid_offset; +// realmConfig.domain_mappings; +// realmConfig.kdc; +// realmConfig.kdc_port; +// realmConfig.admin_server; +// realmConfig.admin_server_port; +// realmConfig.pkinit_require_eku; +// realmConfig.pkinit_require_krbtgt_otherName; +// realmConfig.win2k_pkinit; +// realmConfig.win2k_pkinit_require_binding; +// +// if (LDAPManager::bondRealm(realmConfig, credentials.username, credentials.password, credentials.realm, &errorString) == 0) { +// // Success! +// } +// else { +// // Failure +// return -1; +// } +// } +// else if (command == "unbond") { +// // FIXME +// TQString errorString; +// +// if (LDAPManager::unbondRealm(realm, credentials.username, credentials.password, credentials.realm, &errorString) == 0) { +// // Success! +// } +// else { +// // Failure +// return -1; +// } +// } +// else if (command == "disable") { +// // FIXME +// } +// else { + TDECmdLineArgs::usage(i18n("An invalid command was specified")); + return -1; +// } + } + else { + if (args->count() > 0) { + TDECmdLineArgs::usage(i18n("No Kerberos realm was specified")); + return -1; + } + else { + TDECmdLineArgs::usage(i18n("No command was specified")); + return -1; + } + } + + //====================================================================================================================================================== + + return 0; +} |