summaryrefslogtreecommitdiff
path: root/configmgr/workben/apitest/cfgadduser.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'configmgr/workben/apitest/cfgadduser.cxx')
-rw-r--r--configmgr/workben/apitest/cfgadduser.cxx358
1 files changed, 0 insertions, 358 deletions
diff --git a/configmgr/workben/apitest/cfgadduser.cxx b/configmgr/workben/apitest/cfgadduser.cxx
deleted file mode 100644
index f0b6e2fcddd1..000000000000
--- a/configmgr/workben/apitest/cfgadduser.cxx
+++ /dev/null
@@ -1,358 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: cfgadduser.cxx,v $
- * $Revision: 1.8 $
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org 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 Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_configmgr.hxx"
-
-#include <stdio.h>
-#include <string.h>
-#include <comphelper/stl_types.hxx>
-#include <cppuhelper/extract.hxx>
-#include <com/sun/star/uno/Type.hxx>
-#include <com/sun/star/uno/TypeClass.hpp>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/util/XChangesBatch.hpp>
-#include <com/sun/star/container/XNameContainer.hpp>
-#include <com/sun/star/lang/XSingleServiceFactory.hpp>
-#include <cppuhelper/servicefactory.hxx>
-
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::util;
-using namespace ::com::sun::star::container;
-
-#define ASCII_STRING(rtlOUString) ::rtl::OString((rtlOUString).getStr(), (rtlOUString).getLength(), RTL_TEXTENCODING_ASCII_US).getStr()
-
-//=============================================================================
-void explain(sal_Bool _bVerbose)
-{
- cout << "cfgadduser - adding users to a registry server\n";
- cout << "\nusage :\n";
- cout << "cfgadduser [-s <server> -p <port>] [-portal] [-r <registry>] [-a <sysaccount>]";
- cout << " [-h <homedirbase>] [-pwd] <user> [<user>]*\n";
- cout << "\nparameters\n";
- cout << " <server> - machine where the registry server is running\n";
- cout << " <port> - port the registry server is listening at\n";
- cout << " <registry> - registry file to use to instantiate services. Defaulted to\n";
- cout << " applicat.rdb\n";
- cout << " <sysaccount> - system account to use for the newly created user(s)\n";
- cout << " <homedirbase> - home directory base. The concret home dir of a user will\n";
- cout << " be built by appending the the user name to the base dir.\n";
- cout << " <user> - user name to add\n";
- cout << " -portal - specify that the program should connect to a running portal,\n";
- cout << " not directly to the registry server (you need a ";
-#ifdef WIN32
- cout << "portal.dll\n";
-#else
- cout << "libportal.so\n";
-#endif
- cout << " for this)\n";
- cout << " In this case, <server> and <port> specify the location where\n";
- cout << " StarPortal is running\n";
- cout << "\n";
- cout << "If no server is specified, the configuration proxy will try to bootstrap from\n";
- cout << "the initialization file (";
-#ifdef WIN32
- cout << "sregistry.ini";
-#else
- cout << "sregistryrc";
-#endif
- cout << ")\n\n";
- cout.flush();
-}
-
-//=============================================================================
-#if (defined UNX) || (defined OS2)
-int main( int argc, char * argv[] )
-#else
-int _cdecl main( int argc, char * argv[] )
-#endif
-{
- sal_Char* pPort = NULL;
- sal_Char* pServer = NULL;
- sal_Char* pRegistry = NULL;
- sal_Char* pSysAccount = NULL;
- sal_Char* pHomeDirBase = NULL;
- sal_Bool bPortal = sal_False;
-
- ::std::vector< sal_Char* > aUsers;
-
- // collect some parameters
- sal_Char** pArgs = argv + 1;
- for (sal_Int32 i=1; i<argc; ++i, ++pArgs)
- {
- sal_Char* pCurArg = *pArgs;
- sal_Int32 nLen = strlen(pCurArg);
- sal_Bool bInvalidArg = sal_True;
- if (nLen && ('-' == *pCurArg))
- { // it's a switch
- sal_Char* pSwitch = pCurArg + 1;
- switch (nLen)
- {
- case 2:
- switch (*pSwitch)
- {
- case '?':
- explain(sal_True);
- return 1;
- case 'h':
- pHomeDirBase = *++pArgs;
- ++i;
- bInvalidArg = sal_False;
- break;
- case 'a':
- pSysAccount = *++pArgs;
- ++i;
- bInvalidArg = sal_False;
- break;
- case 'p':
- pPort = *++pArgs;
- ++i;
- bInvalidArg = sal_False;
- break;
- case 's':
- pServer = *++pArgs;
- ++i;
- bInvalidArg = sal_False;
- break;
- case 'r':
- pRegistry = *++pArgs;
- ++i;
- bInvalidArg = sal_False;
- break;
- }
- break;
- case 7:
- if (0 == strncmp(pSwitch, "portal", 6))
- {
- bInvalidArg = sal_False;
- bPortal = sal_True;
- }
- break;
- }
- }
- else
- {
- if ((1 == nLen) && ('?' == *pCurArg))
- {
- explain(sal_True);
- return 1;
- }
- else
- {
- bInvalidArg = sal_False;
- aUsers.push_back(pCurArg);
- }
- }
- if (bInvalidArg)
- {
- explain(sal_False);
- return 1;
- }
- }
-
- if ((!pServer && pPort) || (!pPort && pServer))
- {
- explain(sal_False);
- return 1;
- }
-
- if (0 == aUsers.size())
- {
- explain(sal_False);
- return 1;
- }
-
- // refine some params
- ::rtl::OUString sHomeDirBase, sSystemAccountName;
- if (pHomeDirBase)
- {
- sHomeDirBase = ::rtl::OUString::createFromAscii(pHomeDirBase);
- if (!sHomeDirBase.getLength() || ('/' != sHomeDirBase.getStr()[sHomeDirBase.getLength() - 1]))
- sHomeDirBase += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/"));
- }
- if (pSysAccount)
- sSystemAccountName = ::rtl::OUString::createFromAscii(pSysAccount);
-
- try
- {
- ::rtl::OUString const sServiceRegistry = ::rtl::OUString::createFromAscii( pRegistry ? pRegistry : "applicat.rdb" );
- Reference< XMultiServiceFactory > xORB = ::cppu::createRegistryServiceFactory(
- sServiceRegistry,
- ::rtl::OUString()
- );
- if (!xORB.is())
- {
- cerr << "Could not create the service factory !\n\n";
- return 1;
- }
-
- // collect the params for the config provider
- Sequence< Any > aProviderArgs(3 + (pServer ? 2 : 0));
- aProviderArgs[0] = makeAny(PropertyValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("servertype")),
- 0,
- makeAny(::rtl::OUString::createFromAscii(bPortal ? "portal" : "remote")),
- PropertyState_DIRECT_VALUE
- ));
- aProviderArgs[1] = makeAny(PropertyValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("user")),
- 0,
- makeAny(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Administrator"))),
- PropertyState_DIRECT_VALUE
- ));
- aProviderArgs[2] = makeAny(PropertyValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("password")),
- 0,
- makeAny(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("unused"))),
- PropertyState_DIRECT_VALUE
- ));
- if (pServer)
- {
- aProviderArgs[3] = makeAny(PropertyValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("server")),
- 0,
- makeAny(::rtl::OUString::createFromAscii(pServer)),
- PropertyState_DIRECT_VALUE
- ));
-
- sal_Int32 nPort = ::rtl::OUString::createFromAscii(pPort).toInt32();
- aProviderArgs[4] = makeAny(PropertyValue(
- ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("port")),
- 0,
- makeAny(nPort),
- PropertyState_DIRECT_VALUE
- ));
- }
-
- Reference< XMultiServiceFactory > xCfgProvider(
- xORB->createInstanceWithArguments(::rtl::OUString::createFromAscii("com.sun.star.configuration.ConfigurationProvider"),
- aProviderArgs),
- UNO_QUERY);
- if (!xCfgProvider.is())
- {
- cerr << "Could not create the configuration provider !\n\n";
- return 3;
- }
-
- Reference< XInterface > xIFace = xCfgProvider->createInstance(
- ::rtl::OUString::createFromAscii("com.sun.star.configuration.UserAdministration"));
- if (!xIFace.is())
- {
- cerr << "Could not create the configuration provider !\n\n";
- return 4;
- }
-
- Reference< XChangesBatch > xUserChanges(xIFace, UNO_QUERY);
- Reference< XNameContainer > xUserContainer(xIFace, UNO_QUERY);
- Reference< XSingleServiceFactory> xUserFactory(xIFace, UNO_QUERY);
- if (!xUserChanges.is() || !xUserContainer.is() || !xUserFactory.is())
- {
- cerr << "the user admin access does not provide the necessary interfaces !\n\n";
- return 5;
- }
-
- cout << "going to add the users ..." << endl << endl;
- for ( ::std::vector< sal_Char* >::const_iterator aUserLoop = aUsers.begin();
- aUserLoop != aUsers.end();
- ++aUserLoop
- )
- {
- cout << *aUserLoop << " ... ";
- sal_Bool bHadLinebreak = sal_False;
- try
- {
- Reference< XInterface > xNewUser = xUserFactory->createInstance();
-
- // the user name as unicode string use more than once)
- ::rtl::OUString sUserName = ::rtl::OUString::createFromAscii(*aUserLoop);
-
- // the XNameContainer access to the Security node in the user profile data
- Reference< XNameReplace > xSecurityDataAccess;
- Reference< XNameAccess > xUserDataAccess(xNewUser, UNO_QUERY);
- if (xUserDataAccess.is())
- {
- Any aSecurity = xUserDataAccess->getByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Security")));
- ::cppu::extractInterface(xSecurityDataAccess, aSecurity);
- }
-
- if (!xSecurityDataAccess.is())
- throw Exception(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("The user administration service did not provide a valid user template.")), NULL);
-
- // set the home directory
- if (sHomeDirBase.getLength())
- {
- ::rtl::OUString sHomeDir(sHomeDirBase);
- sHomeDir += sUserName;
- xSecurityDataAccess->replaceByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HomeDirectory")), makeAny(sHomeDir));
- cout << "\n\thome dir : " << ASCII_STRING(sHomeDir) << " ... ";
- cout.flush();
- bHadLinebreak = sal_True;
- }
-
- if (sSystemAccountName.getLength())
- {
- xSecurityDataAccess->replaceByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SystemAccount")), makeAny(sSystemAccountName));
- cout << "\n\tsystem account: " << ASCII_STRING(sSystemAccountName) << " ... ";
- cout.flush();
- bHadLinebreak = sal_True;
- }
-
- xUserContainer->insertByName(sUserName, makeAny(xNewUser));
- xUserChanges->commitChanges();
- if (bHadLinebreak)
- cout << "\n";
- cout << "done.\n";
- cout.flush();
- }
- catch(Exception& e)
- {
- cout << "\n";
- if (!bHadLinebreak)
- cout << "\t";
- cerr << "unable to add the user named " << *aUserLoop << endl;
- if (!bHadLinebreak)
- cout << "\t";
- cerr << "(exception message: " << ::rtl::OString(e.Message.getStr(), e.Message.getLength(), RTL_TEXTENCODING_ASCII_US).getStr() << ")" << endl;
- }
- cout << "\n";
- }
- }
- catch(Exception& e)
- {
- cerr << "Caught exception: " << ASCII_STRING(e.Message) << endl;
- return 2;
- }
-
- return 0;
-}