major source structure and module name changes

This commit is contained in:
soochoi
2006-06-07 16:34:19 +00:00
parent 5c75241b4b
commit 1fa6f07e83
651 changed files with 0 additions and 0 deletions

34
sharp/Makefile.am Normal file
View File

@@ -0,0 +1,34 @@
#######################################################################
#
# Copyright (C) 2006 Novell, Inc.
#
# 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., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#
#######################################################################
SUBDIRS = NSSCSWrapper
DIST_SUBDIRS = NSSCSWrapper
EXTRA_DIST =
.PHONY: package package-clean package-install package-uninstall
package package-clean package-install package-uninstall:
$(MAKE) -C $(TARGET_OS) $@
maintainer-clean-local:
rm -f Makefile.in

View File

@@ -0,0 +1,80 @@
/***********************************************************************
*
* Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1
* of the License.
*
* This library 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
* Library Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail,
* you may find current contact information at www.novell.com.
*
***********************************************************************/
using System.Reflection;
using System.Runtime.CompilerServices;
//
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//
[assembly: AssemblyTitle("Novell.CASA.miCASAWrapper.dll")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Novell, Inc")]
[assembly: AssemblyProduct("CASA")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.6.*")]
//
// In order to sign your assembly you must specify a key to use. Refer to the
// Microsoft .NET Framework documentation for more information on assembly signing.
//
// Use the attributes below to control which key is used for signing.
//
// Notes:
// (*) If no key is specified, the assembly is not signed.
// (*) KeyName refers to a key that has been installed in the Crypto Service
// Provider (CSP) on your machine. KeyFile refers to a file which contains
// a key.
// (*) If the KeyFile and the KeyName values are both specified, the
// following processing occurs:
// (1) If the KeyName can be found in the CSP, that key is used.
// (2) If the KeyName does not exist and the KeyFile does exist, the key
// in the KeyFile is installed into the CSP and used.
// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
// When specifying the KeyFile, the location of the KeyFile should be
// relative to the project output directory which is
// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
// located in the project directory, you would specify the AssemblyKeyFile
// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
// documentation for more information on this.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]

View File

@@ -0,0 +1,52 @@
/***********************************************************************
*
* Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1
* of the License.
*
* This library 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
* Library Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail,
* you may find current contact information at www.novell.com.
*
***********************************************************************/
using System;
namespace Novell.CASA
{
/// <summary>
/// Summary description for BasicCredential.
/// </summary>
public class BasicCredential
{
private string m_username = "";
private string m_password = "";
public BasicCredential(string username, string password)
{
m_username = username;
m_password = password;
}
public string GetUsername()
{
return m_username;
}
public string GetPassword()
{
return m_password;
}
}
}

View File

@@ -0,0 +1,111 @@
#######################################################################
#
# Copyright (C) 2006 Novell, Inc.
#
# 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., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#
#######################################################################
if DEBUG
TARGET_CFG = Debug
CFLAGS += -v -w
CS_EXTRA_FLAGS = $(CSCFLAGS_DEBUG)
else
TARGET_CFG = Release
endif
SUBDIRS =
DIST_SUBDIRS =
EXTRA_DIST = *.cs $(CSFILES)
CASAROOT = ../..
CASALIBDIR = $(CASAROOT)/$(LIB)
# handle Mono secondary dependencies
export MONO_PATH := $(MONO_PATH)
PLATFORMINDEPENDENTSOURCEDIR =
PLATFORMDEPENDENTSOURCEDIR = .
MODULE_NAME =Novell.CASA.miCASAWrapper
MODULE_EXT =dll
CSFILES = $(srcdir)/miCasaException.cs \
$(srcdir)/BasicCredential.cs \
$(srcdir)/miCASA.cs \
$(srcdir)/AssemblyInfo.cs \
$(srcdir)/NativeCalls.cs \
$(srcdir)/Secret.cs \
$(srcdir)/SecretStore.cs
CSFILES_CSC := $(subst /,$(SEP),$(CSFILES))
CS_FLAGS = /target:"library"
CS_RESOURCES =
CS_LIBS =$(CASALIBDIR)/$(TARGET_CFG)/Novell.CASA.Common.dll
CS_LIBPATH = $(CASALIBDIR)/$(TARGET_CFG)
OBJDIR = ./$(TARGET_CFG)/$(LIB)
#OBJS = $(addprefix $(OBJDIR)/, $(CSFILES:%.dll=%.cs))
CUR_DIR := $(shell pwd)
all: $(OBJDIR)/$(MODULE_NAME).$(MODULE_EXT)
#
# Pattern based rules.
#
vpath %.c $(PLATFORMDEPENDENTSOURCEDIR) $(PLATFORMINDEPENDENTSOURCEDIR)
vpath %.cpp $(PLATFORMDEPENDENTSOURCEDIR) $(PLATFORMINDEPENDENTSOURCEDIR)
vpath %.cs $(PLATFORMDEPENDENTSOURCEDIR) $(PLATFORMINDEPENDENTSOURCEDIR)
$(OBJDIR)/$(MODULE_NAME).$(MODULE_EXT): $(OBJDIR) $(CSFILES)
$(CSC) $(CS_FLAGS) $(CS_EXTRA_FLAGS) $(CS_LIBS:%=/r:%) $(CS_LIBPATH:%=-lib:%) -out:$@ $(CSFILES_CSC)
cp -f $(OBJDIR)/$(MODULE_NAME).$(MODULE_EXT) $(CASALIBDIR)/$(TARGET_CFG)/$(MODULE_NAME).$(MODULE_EXT)
#$(OBJDIR)/$(MODULE_NAME).$(MODULE_EXT): $(OBJDIR) $(OBJS)
# @echo [======== Linking $@ ========]
# $(LINK) -o $@ $(LDFLAGS) $(OBJS) $(LIBS)
# cp -f $(OBJDIR)/$(MODULE_NAME).$(MODULE_EXT) $(CASALIBDIR)/$(TARGET_CFG)/$(MODULE_NAME).$(MODULE_EXT)
$(OBJDIR):
[ -d $(OBJDIR) ] || mkdir -p $(OBJDIR)
[ -d $(CASALIBDIR) ] || mkdir -p $(CASALIBDIR)
[ -d $(CASALIBDIR)/$(TARGET_CFG) ] || mkdir -p $(CASALIBDIR)/$(TARGET_CFG)
install-exec-local: $(OBJDIR)/$(MODULE_NAME).$(MODULE_EXT)
$(mkinstalldirs) $(DESTDIR)$(libdir)
$(INSTALL_PROGRAM) $(OBJDIR)/$(MODULE_NAME).$(MODULE_EXT) $(DESTDIR)$(libdir)/
uninstall-local:
cd $(DESTDIR)$(libdir); rm -f $(OBJDIR)/$(MODULE_NAME).$(MODULE_EXT)
rmdir $(DESTDIR)$(libdir)
#installcheck-local: install
# $(mkinstalldirs) $(DESTDIR)$(libdir)
# $(INSTALL_PROGRAM) $(DESTDIR)$(libdir)
# cd $(DESTDIR)$(libdir); $(MONO)
clean-local:
if [ -d $(TARGET_CFG) ]; then rm -rf $(TARGET_CFG); fi
distclean-local:
maintainer-clean-local:
rm -f Makefile.in

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,145 @@
<VisualStudioProject>
<CSHARP
ProjectType = "Local"
ProductVersion = "7.10.3077"
SchemaVersion = "2.0"
ProjectGuid = "{E21DD887-22F4-4935-9851-409715F663B0}"
>
<Build>
<Settings
ApplicationIcon = ""
AssemblyKeyContainerName = ""
AssemblyName = "Novell.CASA.miCASAWrapper"
AssemblyOriginatorKeyFile = ""
DefaultClientScript = "JScript"
DefaultHTMLPageLayout = "Grid"
DefaultTargetSchema = "IE50"
DelaySign = "false"
OutputType = "Library"
PreBuildEvent = ""
PostBuildEvent = ""
RootNamespace = "Novell.CASA"
RunPostBuildEvent = "OnBuildSuccess"
StartupObject = ""
>
<Config
Name = "Debug"
AllowUnsafeBlocks = "false"
BaseAddress = "285212672"
CheckForOverflowUnderflow = "false"
ConfigurationOverrideFile = ""
DefineConstants = "DEBUG;TRACE"
DocumentationFile = ""
DebugSymbols = "true"
FileAlignment = "4096"
IncrementalBuild = "false"
NoStdLib = "false"
NoWarn = ""
Optimize = "false"
OutputPath = "bin\Debug\"
RegisterForComInterop = "false"
RemoveIntegerChecks = "false"
TreatWarningsAsErrors = "false"
WarningLevel = "4"
/>
<Config
Name = "Release"
AllowUnsafeBlocks = "false"
BaseAddress = "285212672"
CheckForOverflowUnderflow = "false"
ConfigurationOverrideFile = ""
DefineConstants = "TRACE"
DocumentationFile = ""
DebugSymbols = "false"
FileAlignment = "4096"
IncrementalBuild = "false"
NoStdLib = "false"
NoWarn = ""
Optimize = "true"
OutputPath = "bin\Release\"
RegisterForComInterop = "false"
RemoveIntegerChecks = "false"
TreatWarningsAsErrors = "false"
WarningLevel = "4"
/>
</Settings>
<References>
<Reference
Name = "System"
AssemblyName = "System"
HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.dll"
/>
<Reference
Name = "System.Data"
AssemblyName = "System.Data"
HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
/>
<Reference
Name = "System.XML"
AssemblyName = "System.Xml"
HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
/>
<Reference
Name = "System.Runtime.Remoting"
AssemblyName = "System.Runtime.Remoting"
HintPath = "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Runtime.Remoting.dll"
/>
<Reference
Name = "Novell.CASA.Common"
Project = "{57CD94A2-5B4A-40C3-8189-CB760FB78357}"
Package = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"
/>
</References>
</Build>
<Files>
<Include>
<File
RelPath = "AssemblyInfo.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "BasicCredential.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "miCASA.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "miCasaException.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "NativeCalls.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "RemoteClient.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "RemoteServer.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "Secret.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "SecretStore.cs"
SubType = "Code"
BuildAction = "Compile"
/>
</Include>
</Files>
</CSHARP>
</VisualStudioProject>

View File

@@ -0,0 +1,48 @@
<VisualStudioProject>
<CSHARP LastOpenVersion = "7.10.3077" >
<Build>
<Settings ReferencePath = "D:\casa\c_micasad\lib\bin\Debug\;D:\casa2\c_micasad\lib\bin\Debug\" >
<Config
Name = "Debug"
EnableASPDebugging = "false"
EnableASPXDebugging = "false"
EnableUnmanagedDebugging = "true"
EnableSQLServerDebugging = "false"
RemoteDebugEnabled = "false"
RemoteDebugMachine = ""
StartAction = "Project"
StartArguments = ""
StartPage = ""
StartProgram = ""
StartURL = ""
StartWorkingDirectory = ""
StartWithIE = "true"
/>
<Config
Name = "Release"
EnableASPDebugging = "false"
EnableASPXDebugging = "false"
EnableUnmanagedDebugging = "false"
EnableSQLServerDebugging = "false"
RemoteDebugEnabled = "false"
RemoteDebugMachine = ""
StartAction = "Project"
StartArguments = ""
StartPage = ""
StartProgram = ""
StartURL = ""
StartWorkingDirectory = ""
StartWithIE = "true"
/>
</Settings>
</Build>
<OtherProjectSettings
CopyProjectDestinationFolder = ""
CopyProjectUncPath = ""
CopyProjectOption = "0"
ProjectView = "ShowAllFiles"
ProjectTrust = "0"
/>
</CSHARP>
</VisualStudioProject>

View File

@@ -0,0 +1,21 @@
Microsoft Visual Studio Solution File, Format Version 8.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Novell.SecretStoreClient.NSSCSWrapper", "Novell.SecretStoreClient.NSSCSWrapper.csproj", "{E21DD887-22F4-4935-9851-409715F663B0}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
Release = Release
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{E21DD887-22F4-4935-9851-409715F663B0}.Debug.ActiveCfg = Debug|.NET
{E21DD887-22F4-4935-9851-409715F663B0}.Debug.Build.0 = Debug|.NET
{E21DD887-22F4-4935-9851-409715F663B0}.Release.ActiveCfg = Release|.NET
{E21DD887-22F4-4935-9851-409715F663B0}.Release.Build.0 = Release|.NET
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal

Binary file not shown.

View File

@@ -0,0 +1,111 @@
/***********************************************************************
*
* Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1
* of the License.
*
* This library 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
* Library Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail,
* you may find current contact information at www.novell.com.
*
***********************************************************************/
using System;
using System.Collections.Specialized;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace Novell.CASA
{
/// <summary>
/// Summary description for RemoteClient.
/// </summary>
public class RemoteClient
{
private SecretStore obj;
TcpChannel chan = null;
public RemoteClient()
{
}
public void openSocket(string serverAddr, string sPort)
{
// Create a channel for communicating w/ the remote object
// Notice no port is specified on the client
chan = new TcpChannel();
try
{
ChannelServices.RegisterChannel(chan);
}
catch (Exception)
{
}
// Create an instance of the remote object
obj = (SecretStore) Activator.GetObject(
typeof(Novell.CASA.SecretStore),
"tcp://"+serverAddr + ":" + sPort + "/enumerateSecretIDs" );
}
public void closeSocket()
{
if (chan != null)
{
ChannelServices.UnregisterChannel(chan);
//chan = null;
}
}
public StringCollection getRemoteSecretIDS()
{
// Use the object
try
{
if( obj.Equals(null) )
{
System.Console.WriteLine("Error: unable to locate server");
return null;
}
else
{
//Console.WriteLine(obj.enumerateSecretIDs());
return obj.enumerateSecretIDs();
}
}
catch (Exception e)
{
throw e;
}
}
public Secret getRemoteSecret(string id)
{
if (obj.Equals(null))
{
return null;
}
else
{
return obj.getSecret(id);
}
}
}
}

View File

@@ -0,0 +1,87 @@
/***********************************************************************
*
* Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1
* of the License.
*
* This library 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
* Library Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail,
* you may find current contact information at www.novell.com.
*
***********************************************************************/
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace Novell.CASA
{
/// <summary>
/// Summary description for RemoteServer.
/// </summary>
public class RemoteServer
{
TcpChannel channel;
public RemoteServer()
{
//
// TODO: Add constructor logic here
//
}
public void startServer(int port)
{
int iPort = port;
if (iPort == 0)
iPort = 8080;
channel = new TcpChannel(iPort);
try
{
ChannelServices.RegisterChannel(channel);
}
catch (Exception e)
{
throw e;
}
// Register as an available service with the name HelloWorld
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(SecretStore),
"enumerateSecretIDs",
WellKnownObjectMode.SingleCall );
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(SecretStore),
"getSecret(string id)",
WellKnownObjectMode.SingleCall );
System.Console.WriteLine("Server Started on "+ iPort);
// System.Console.ReadLine();
//return 0;
}
public void stopServer()
{
if (channel != null)
{
System.Console.WriteLine("Stopping server");
ChannelServices.UnregisterChannel(channel);
}
}
}
}

View File

@@ -0,0 +1,216 @@
/***********************************************************************
*
* Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1
* of the License.
*
* This library 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
* Library Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail,
* you may find current contact information at www.novell.com.
*
***********************************************************************/
using System;
using System.Collections;
using System.Collections.Specialized;
using Novell.CASA.MiCasa.Common;
using Novell.CASA.MiCasa.Communication;
namespace Novell.CASA
{
/// <summary>
/// Summary description for Secret.
/// </summary>
public class Secret : MarshalByRefObject
{
internal IntPtr m_pHsc;
private string m_keyChainID;
private uint m_ssFlags;
internal IntPtr m_secretHandle;
private string m_secretID;
private string m_epPassword = null;
private uint m_iCreateTime = 0;
private uint m_iModifyTime = 0;
private uint m_iAccessTime = 0;
internal int m_type = 0;
// holds name value pairs for this secret
private System.Collections.Specialized.NameValueCollection m_nvc;
private byte[] m_baValue = null;
public static int SS_APP = 1;
public static int SS_CREDSET = 2;
public static int SS_BINARY = 4;
// constructor
internal Secret(
IntPtr pHSC,
string sKeyChainID,
uint iSSFlags,
IntPtr ptrHandle,
string sSecretID,
int iSecretType,
string sEPPassword)
{
m_pHsc = pHSC;
m_keyChainID = sKeyChainID;
m_ssFlags = iSSFlags;
m_secretHandle = ptrHandle;
m_secretID = sSecretID;
m_epPassword = sEPPassword;
m_type = iSecretType;
if (sSecretID.StartsWith("SS_CredSet"))
m_type = Secret.SS_CREDSET;
else if (sSecretID.StartsWith("SS_App"))
m_type = Secret.SS_APP;
else if (sSecretID.StartsWith("SS_Binary"))
m_type = Secret.SS_BINARY;
// create collection
m_nvc = new System.Collections.Specialized.NameValueCollection();
}
// TO clean up SecretHandle
public string getID()
{
return m_secretID;
}
public void setKeyValuePair(string sKey, string sKeyValue)
{
if (m_type == Secret.SS_APP)
m_nvc.Add(sKey, sKeyValue);
else
m_nvc.Set(sKey, sKeyValue);
}
public byte[] getBinaryValue()
{
return m_baValue;
}
// used for binary secrets, throws exception if not
public void setBinaryValue(byte[] baData)
{
// make sure this is a binary secret
if (this.m_type == SS_BINARY)
{
m_baValue = baData;
}
else
{
throw new Exception();
}
}
public string[] getKeyValues(string sKey)
{
return m_nvc.GetValues(sKey);
}
public string getKeyValue(string sKey)
{
return m_nvc.Get(sKey);
}
public int getSecretType()
{
return this.m_type;
}
// public string getSecretValue()
// {
// // TODO this is for a raw secret, just an ID and value
// // should be only one key in the NameValueCollection
// }
public NameValueCollection getKeyValueCollection()
{
return m_nvc;
}
public void mergeKeyValueCollection(NameValueCollection nvc)
{
//if (m_nvc == null)
m_nvc = nvc;
}
public void setEnhancedProtectionPassword(string sEPPassword)
{
m_epPassword = sEPPassword;
}
internal string getEnhancedProtectionPassword()
{
return m_epPassword;
}
public bool isEnhancedProtected()
{
if (m_epPassword != null)
return true;
else
return false;
}
public void removeKey(string sKey, uint ctxFlags)
{
//call the ndk to remove that one too.
NativeCalls.removeKeyValue(this.m_secretHandle, sKey, m_nvc.Get(sKey), ctxFlags);
// remove from our collection
m_nvc.Remove(sKey);
}
internal void setTimeStamps(uint uiCreated, uint uiModified, uint uiAccessed)
{
m_iCreateTime = uiCreated;
m_iModifyTime = uiModified;
m_iAccessTime = uiAccessed;
}
public uint getCreateTime()
{
return m_iCreateTime;
}
public uint getModifiedTime()
{
return m_iModifyTime;
}
public uint getAccessTime()
{
return m_iAccessTime;
}
public Hashtable GetLinkedKeys(string sKey)
{
Hashtable htLinkedKeys = (Hashtable)MiCasaRequestReply.Send(MiCasaRequestReply.VERB_GET_LINKED_KEYS,
null,
this.getID(),
sKey,
null);
return htLinkedKeys;
}
}
}

View File

@@ -0,0 +1,167 @@
/***********************************************************************
*
* Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1
* of the License.
*
* This library 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
* Library Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail,
* you may find current contact information at www.novell.com.
*
***********************************************************************/
using System;
using System.Collections.Specialized;
namespace Novell.CASA
{
/// <summary>
/// Represents the SecretStore
/// </summary>
public class SecretStore : MarshalByRefObject
{
private string m_sMasterPassword = null;
private static string SESSION_KEY_CHAIN = "SSCS_SESSION_KEY_CHAIN_ID";
public static string LOCAL_REMOTE_KEY_CHAIN = "SSCS_LOCAL_REMOTE_KEY_CHAIN_ID";
private NativeCalls m_NativeCalls = null;
private IntPtr m_hsc = IntPtr.Zero;
public SecretStore()
{
doSetup();
}
private void doSetup()
{
m_NativeCalls = new NativeCalls();
m_hsc = m_NativeCalls.openSecretStore("SecretStore");
//Console.WriteLine("Session handle: {0}", m_hsc);
}
public static SecretStore getInstance()
{
SecretStore newSS = new SecretStore();
return newSS;
}
public void ReleaseInstance()
{
if (m_hsc != IntPtr.Zero)
m_NativeCalls.closeSecretStore(m_hsc);
}
/*
public static void ReleaseInstance()
{
// TODO:
}
*/
internal Secret getSecret(string sKeyChainID, uint ssFlags, string sSecretID, int iSecretType, string sEPPassword)
{
if (m_NativeCalls != null)
return m_NativeCalls.getSecret(m_hsc, sKeyChainID, ssFlags, sSecretID, iSecretType, sEPPassword);
else
return null;
}
public Secret getSecret(string id)
{
string sSecretId = id;
int iSecretType = Secret.SS_BINARY;
//Console.WriteLine("GetSecret called for "+id);
if (sSecretId.StartsWith("SS_CredSet"))
{
sSecretId = sSecretId.Substring(11);
iSecretType = Secret.SS_CREDSET;
}
else if (sSecretId.StartsWith("SS_App"))
{
sSecretId = sSecretId.Substring(10);
iSecretType = Secret.SS_APP;
}
return getSecret(0, sSecretId, iSecretType, "");
}
public Secret getSecret(uint ssFlags, string sSecretID, int iSecretType, string sEPPassword)
{
return getSecret(SESSION_KEY_CHAIN, ssFlags, sSecretID, iSecretType, sEPPassword);
}
public void setSecret(uint flags, string sKeyChainID, Secret secret, int iSecretType)
{
m_NativeCalls.setSecret(m_hsc, sKeyChainID, flags, secret, iSecretType);
}
public void setSecret(uint flags, Secret secret, int iSecretType)
{
// call the native calls to write this secret
m_NativeCalls.setSecret(m_hsc, SESSION_KEY_CHAIN, flags, secret, iSecretType);
}
private void setSecret(uint flags, string sSecretID, string sEPPassword)
{
//setSecret(flags, SESSION_KEY_CHAIN, sSecretID, sEPPassword);
}
public void removeSecret(uint ssFlags, string sKeyChainID, string sEPPassword, string sSecretID, int iSecretType)
{
m_NativeCalls.RemoveSecret(m_hsc, ssFlags, sKeyChainID, sEPPassword, sSecretID, iSecretType);
}
public void removeSecret(string sSecretID, int iSecretType)
{
removeSecret(0, SESSION_KEY_CHAIN, "", sSecretID, iSecretType);
}
private void enumerateKeychainIDs(string sSearchSting)
{
if (m_NativeCalls != null)
{
//m_NativeCalls.enumKeychainIDs();
}
}
public void setMasterPassword(string sMasterPassword)
{
m_sMasterPassword = sMasterPassword;
}
public StringCollection enumerateSecretIDs()
{
return enumerateSecretIDs(SESSION_KEY_CHAIN);
}
public StringCollection enumerateSecretIDs(string sKeyChainID)
{
return m_NativeCalls.EnumerateSecretIDs(m_hsc, 0, sKeyChainID, "");
}
public void addKeyChain(string sKeyChainID)
{
m_NativeCalls.AddKeyChain(m_hsc, 0, sKeyChainID);
}
}
}

View File

@@ -0,0 +1,168 @@
/***********************************************************************
*
* Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1
* of the License.
*
* This library 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
* Library Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail,
* you may find current contact information at www.novell.com.
*
***********************************************************************/
using System;
using Novell.CASA;
namespace Novell.CASA
{
/// <summary>
/// Summary description for miCASA.
/// </summary>
public class miCASA
{
public static uint USERNAME_TYPE_CN_F = 0x00000000;
public static uint USERNAME_TYPE_NDS_DN_F = 0x00000001;
public static uint USERNAME_TYPE_NDS_FDN_F = 0x00000002;
public static uint USERNAME_TYPE_LDAP_DN_F = 0x00000004;
public static uint USERNAME_TYPE_EMAIL_F = 0x00000008;
public static uint USERNAME_TYPE_OTHER_F = 0x00000010;
public miCASA()
{
//
// TODO: Add constructor logic here
//
}
public static void SetBasicCredential(
string sAppSecretID,
string sSharedSecretID,
string sUsername,
string sPassword)
{
SetCredential(0, sAppSecretID, sSharedSecretID, 0, sUsername, sPassword);
}
public static string GetCredentialUsername(
string sAppSecretID,
string sSharedSecretID)
{
BasicCredential bc = GetBasicCredential(sAppSecretID, sSharedSecretID);
if (bc != null)
return bc.GetUsername();
else
return null;
}
public static string GetCredentialPassword(
string sAppSecretID,
string sSharedSecretID)
{
BasicCredential bc = GetBasicCredential(sAppSecretID, sSharedSecretID);
if (bc != null)
return bc.GetPassword();
else
return null;
}
public static BasicCredential GetBasicCredential(
string sAppSecretID,
string sSharedSecretID)
{
return GetCredential(0, sAppSecretID, sSharedSecretID, miCASA.USERNAME_TYPE_CN_F);
}
public static void RemoveBasicCredential(
string sAppSecretID,
string sSharedSecretID)
{
RemoveCredential(0, sAppSecretID, sSharedSecretID);
}
public static void SetCredential(
uint ssFlags,
string sAppSecretID,
string sSharedSecretID,
uint unFlag,
string sUsername,
string sPassword)
{
NativeCalls.SetCredential(ssFlags, sAppSecretID, sSharedSecretID, unFlag, sUsername, sPassword);
}
public static BasicCredential GetCredential(
uint ssFlags,
string sAppSecretID,
string sSharedSecretID,
uint unFlag)
{
return NativeCalls.GetCredential(ssFlags, sAppSecretID, sSharedSecretID, unFlag);
}
public static void RemoveCredential(
uint ssFlags,
string sAppSecretID,
string sSharedSecretID)
{
NativeCalls.RemoveCredential(ssFlags, sAppSecretID, sSharedSecretID);
}
public static int SetMasterPassword(
uint ssFlags,
string mPasswd)
{
return NativeCalls.SetMasterPassword(ssFlags,mPasswd);
}
public static bool IsSecretPersistent(
uint ssFlags,
string secretID)
{
return NativeCalls.IsSecretPersistent(ssFlags,secretID);
}
public static bool ChangeMasterPassword(string sCurrentPassword, string sNewPassword)
{
if (sCurrentPassword == null || sNewPassword == null)
{
throw new miCasaException(miCasaException.NSSCS_E_INVALID_PARAM);
}
if (sNewPassword.Length < 8)
throw new miCasaException(miCasaException.NSSCS_E_MP_PWORD_NOT_ALLOWED);
return NativeCalls.ResetMasterPassword(sCurrentPassword, sNewPassword);
}
public static bool ValidateDesktopPwd(string sPassword)
{
if (sPassword != null)
{
return NativeCalls.ValidateDesktopPwd(sPassword);
}
else
{
return false;
}
}
}
}

View File

@@ -0,0 +1,520 @@
/***********************************************************************
*
* Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1
* of the License.
*
* This library 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
* Library Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail,
* you may find current contact information at www.novell.com.
*
***********************************************************************/
using System;
namespace Novell.CASA
{
/// <summary>
/// Summary description for MiCasaException.
/// </summary>
public class miCasaException:Exception
{
int m_iException = 0;
public const int NSSCS_E_OBJECT_NOT_FOUND = -800; //0xFFFFFCE0; /* -800 */
/**
* NICI operations have failed.
*/
public const int NSSCS_E_NICI_FAILURE = -801;
/**
* Secret ID is not in the User Secret Store.
*/
public const int NSSCS_E_INVALID_SECRET_ID = -802;
/**
* Some internal operating system services have not been available.
*/
public const int NSSCS_E_SYSTEM_FAILURE = -803;
/**
* Access to the target SecretStore has been denied.
*/
public const int NSSCS_E_ACCESS_DENIED = -804;
/**
* Some internal NDS services have not been available.
*/
public const int NSSCS_E_NDS_INTERNAL_FAILURE = -805;
/**
* Secret has not been initialized with a write.
*/
public const int NSSCS_E_SECRET_UNINITIALIZED = -806;
/**
* Size of the buffer is not in a nominal range between minimum and maximum.
*/
public const int NSSCS_E_BUFFER_LEN = -807;
/**
* Client and server components are not of the compatible versions.
*/
public const int NSSCS_E_INCOMPATIBLE_VERSION = -808;
/**
* SecretStore data on the server has been corrupted.
*/
public const int NSSCS_E_CORRUPTED_STORE = -809;
/**
* Secret ID already exists in the Secret Store.
*/
public const int NSSCS_E_SECRET_ID_EXISTS = -810;
/**
* User NDS password has been changed by the administrator.
*/
public const int NSSCS_E_NDS_PWORD_CHANGED = -811;
/**
* Target NDS User object not found.
*/
public const int NSSCS_E_INVALID_TARGET_OBJECT = -812;
/**
* Target NDS User object does not have a SecretStore.
*/
public const int NSSCS_E_STORE_NOT_FOUND = -813;
/**
* SecretStore not on the Network.
*/
public const int NSSCS_E_SERVICE_NOT_FOUND = -814;
/**
* Length of the Secret ID buffer exceeds the limit.
*/
public const int NSSCS_E_SECRET_ID_TOO_LONG = -815;
/**
* Length of the Enumeration buffer too int.
*/
public const int NSSCS_E_ENUM_BUFF_TOO_SHORT = -816;
/**
* User not authenticated.
*/
public const int NSSCS_E_NOT_AUTHENTICATED = -817;
/**
* Not supported operations.
*/
public const int NSSCS_E_NOT_SUPPORTED = -818;
/**
* Typed in NDS password not valid.
*/
public const int NSSCS_E_NDS_PWORD_INVALID = -819;
/**
* Session keys of the client and server NICI are out of sync.
*/
public const int NSSCS_E_NICI_OUTOF_SYNC = -820;
/**
* Requested service not supported yet.
*/
public const int NSSCS_E_SERVICE_NOT_SUPPORTED = -821;
/**
* NDS authentication type not supported.
*/
public const int NSSCS_E_TOKEN_NOT_SUPPORTED = -822;
/**
* Unicode text conversion operation failed.
*/
public const int NSSCS_E_UNICODE_OP_FAILURE = -823;
/**
* Connection to server is lost.
*/
public const int NSSCS_E_TRANSPORT_FAILURE = -824;
/**
* Cryptographic operation failed.
*/
public const int NSSCS_E_CRYPTO_OP_FAILURE = -825;
/**
* Opening a connection to the server failed.
*/
public const int NSSCS_E_SERVER_CONN_FAILURE = -826;
/**
* Access to server connection failed.
*/
public const int NSSCS_E_CONN_ACCESS_FAILURE = -827;
/**
* Size of the enumeration buffer exceeds the limit.
*/
public const int NSSCS_E_ENUM_BUFF_TOO_LONG = -828;
/**
* Size of the Secret buffer exceeds the limit.
*/
public const int NSSCS_E_SECRET_BUFF_TOO_LONG = -829;
/**
* Length of the Secret ID should be greater than zero.
*/
public const int NSSCS_E_SECRET_ID_TOO_SHORT = -830;
/**
* Protocol data corrupted on the wire.
*/
public const int NSSCS_E_CORRUPTED_PACKET_DATA = -831;
/**
* EP password validation failed. Access to the secret denied!
*/
public const int NSSCS_E_EP_ACCESS_DENIED = -832;
/**
* Schema is not extended to support SecreStore on the target tree.
*/
public const int NSSCS_E_SCHEMA_NOT_EXTENDED = -833;
/**
* One of the optional service attributes is not instantiated.
*/
public const int NSSCS_E_ATTR_NOT_FOUND = -834;
/**
* Server has been upgraded and user SecretStore should be updated.
*/
public const int NSSCS_E_MIGRATION_NEEDED = -835;
/**
* Master password could not be verified to read or unlock the secrets.
*/
public const int NSSCS_E_MP_PWORD_INVALID = -836;
/**
* Master password has not been set on the SecretStore.
*/
public const int NSSCS_E_MP_PWORD_NOT_SET = -837;
/**
* Ability to use master password has been disabled.
*/
public const int NSSCS_E_MP_PWORD_NOT_ALLOWED = -838;
/**
* Not a writeable replica of NDS.
*/
public const int NSSCS_E_WRONG_REPLICA_TYPE = -839;
/**
* Target attribute is not instantiated in NDS.
*
* @since 3.0
*/
public const int NSSCS_E_ATTR_VAL_NOT_FOUND = -840;
/**
* API parameter is not initialized.
*
* @since 3.0
*/
public const int NSSCS_E_INVALID_PARAM = -841;
/**
* Connection to SecretStore needs to be over SSL.
*
* @since 3.0
*/
public const int NSSCS_E_NEED_SECURE_CHANNEL = -842;
/**
* No server to support the given override configuration is found.
*
* @since 3.02
*/
public const int NSSCS_E_CONFIG_NOT_SUPPORTED = -843;
/**
* Attempt to unlock SecretStore failed because the store is not locked.
*
* @since 3.02
*/
public const int NSSCS_E_STORE_NOT_LOCKED = -844;
/**
* NDS Replica on the server that holds SecretStore is out of sync with the replica ring.
*
* @since 3.2
*/
public const int NSSCS_E_TIME_OUT_OF_SYNC = -845;
/**
* Versions of the client dlls don't match.
*
* @since 3.2
*/
public const int NSSCS_E_VERSION_MISMATCH = -846;
/**
* Buffer supplied for the secret is too short.
*
* @since 3.2
*/
public const int NSSCS_E_SECRET_BUFF_TOO_SHORT = -847;
/**
* Shared Secret processing and operations failed.
*
* @since 3.2
*/
public const int NSSCS_E_SH_SECRET_FAILURE = -848;
/**
* Shared Secret parser operations failed.
*
* @since 3.2
*/
public const int NSSCS_E_PARSER_FAILURE = -849;
/**
* Utf8 string operations failed.
*
* @since 3.2
*/
public const int NSSCS_E_UTF8_OP_FAILURE = -850;
/**
* Contextless name for LDAP bind does not resolve to a unique DN.
*
* @since 3.2
*/
public const int NSSCS_E_CTX_LESS_CN_NOT_UNIQUE = -851;
/**
* Feature not implemented yet.
*/
public const int NSSCS_E_NOT_IMPLEMENTED = -888;
/**
* Product's BETA life has expired! Official release copy should be purchased.
*/
public const int NSSCS_E_BETA_EXPIRED = -899;
public miCasaException()
{
//
// TODO: Add constructor logic here
//
}
public miCasaException(int iException)
{
m_iException = iException;
}
public string getMessage()
{
return getMessage(m_iException);
}
public int getErrorCode()
{
return m_iException;
}
public string getMessage(int iException)
{
switch (iException)
{
case NSSCS_E_OBJECT_NOT_FOUND:
return "Can't find the target object DN in NDS";
case NSSCS_E_NICI_FAILURE:
return "NICI operations have failed";
case NSSCS_E_INVALID_SECRET_ID:
return "Secret ID is not in the User Secret Store";
case NSSCS_E_SYSTEM_FAILURE:
return "Some internal operating system services have not been available";
case NSSCS_E_ACCESS_DENIED:
return "Access to the target SecretStore has been denied";
case NSSCS_E_NDS_INTERNAL_FAILURE:
return "Some internal NDS services have not been available";
case NSSCS_E_SECRET_UNINITIALIZED:
return "Secret has not been initialized with a write";
case NSSCS_E_BUFFER_LEN:
return "Size of the buffer is not in a nominal range between minimum and maximum";
case NSSCS_E_INCOMPATIBLE_VERSION:
return "Client and server components are not of the compatible versions";
case NSSCS_E_CORRUPTED_STORE:
return "SecretStore data on the server has been corrupted";
case NSSCS_E_SECRET_ID_EXISTS:
return "Secret ID is already in SecretStore";
case NSSCS_E_NDS_PWORD_CHANGED:
return "User NDS password has been changed by the administrator";
case NSSCS_E_INVALID_TARGET_OBJECT:
return "Target NDS User object not found";
case NSSCS_E_STORE_NOT_FOUND:
return "Target NDS User object does not have a SecretStore";
case NSSCS_E_SERVICE_NOT_FOUND:
return "SecretStore not on the Network";
case NSSCS_E_SECRET_ID_TOO_LONG:
return "Length of the Secret ID buffer exceeds the limit";
case NSSCS_E_ENUM_BUFF_TOO_SHORT:
return "Length of the Enumeration buffer too short";
case NSSCS_E_NOT_AUTHENTICATED:
return "User not authenticated";
case NSSCS_E_NOT_SUPPORTED:
return "Not supported operations";
case NSSCS_E_NDS_PWORD_INVALID:
return "Typed in NDS password not valid";
case NSSCS_E_NICI_OUTOF_SYNC:
return "Session keys of the client and server NICI are out of sync";
case NSSCS_E_SERVICE_NOT_SUPPORTED:
return "Requested service not supported yet";
case NSSCS_E_TOKEN_NOT_SUPPORTED:
return "NDS authentication type not supported";
case NSSCS_E_UNICODE_OP_FAILURE:
return "Unicode text conversion operation failed";
case NSSCS_E_TRANSPORT_FAILURE:
return "Connection to server is lost";
case NSSCS_E_CRYPTO_OP_FAILURE:
return "Cryptographic operation failed";
case NSSCS_E_SERVER_CONN_FAILURE:
return "Opening a connection to the server failed";
case NSSCS_E_CONN_ACCESS_FAILURE:
return "Access to server connection failed";
case NSSCS_E_ENUM_BUFF_TOO_LONG:
return "Size of the enumeration buffer exceeds the limit";
case NSSCS_E_SECRET_BUFF_TOO_LONG:
return "Size of the Secret buffer exceeds the limit";
case NSSCS_E_SECRET_ID_TOO_SHORT:
return "Length of the Secret ID should be greater than zero";
case NSSCS_E_CORRUPTED_PACKET_DATA:
return "Protocol data corrupted on the wire";
case NSSCS_E_EP_ACCESS_DENIED:
return "EP password validation failed. Access to the secret denied";
case NSSCS_E_SCHEMA_NOT_EXTENDED:
return "Schema is not extended to support SecreStore on the target tree";
case NSSCS_E_ATTR_NOT_FOUND:
return "One of the optional service attributes is not instantiated";
case NSSCS_E_MIGRATION_NEEDED:
return "Server has been upgraded and user SecretStore should be updated";
case NSSCS_E_MP_PWORD_INVALID:
return "Master password could not be verified to read or unlock the secrets";
case NSSCS_E_MP_PWORD_NOT_SET:
return "Master password has not been set on the SecretStore";
case NSSCS_E_MP_PWORD_NOT_ALLOWED:
return "Ability to use master password has been disabled";
case NSSCS_E_WRONG_REPLICA_TYPE:
return "Not a writeable replica of NDS";
case NSSCS_E_ATTR_VAL_NOT_FOUND:
return "Target attribute is not instantiated in NDS";
case NSSCS_E_INVALID_PARAM:
return "API parameter is not initialized";
case NSSCS_E_NEED_SECURE_CHANNEL:
return "Connection to SecretStore needs to be over SSL";
case NSSCS_E_CONFIG_NOT_SUPPORTED:
return "No server to support the given override configuration is found";
case NSSCS_E_STORE_NOT_LOCKED:
return "Attempt to unlock SecretStore failed because the store is not locked";
case NSSCS_E_TIME_OUT_OF_SYNC:
return "NDS Replica on the server that holds SecretStore is out of sync with the replica ring";
case NSSCS_E_VERSION_MISMATCH:
return "Versions of the client dlls don't match";
case NSSCS_E_SECRET_BUFF_TOO_SHORT:
return "Buffer supplied for the secret is too short";
case NSSCS_E_SH_SECRET_FAILURE:
return "Shared Secret processing and operations failed";
case NSSCS_E_PARSER_FAILURE:
return "Shared Secret parser operations failed";
case NSSCS_E_UTF8_OP_FAILURE:
return "Utf8 string operations failed";
case NSSCS_E_CTX_LESS_CN_NOT_UNIQUE:
return "Contextless name for LDAP bind does not resolve to a unique DN";
case NSSCS_E_NOT_IMPLEMENTED:
return "Feature not implemented yet";
case NSSCS_E_BETA_EXPIRED:
return "Product's BETA life has expired! Official release copy should be purchased";
}
return "";
}
}
}

View File

@@ -0,0 +1,10 @@
OBJS=\
AssemblyInfo\
miCasaException\
BasicCredential\
miCASA\
AssemblyInfo\
NativeCalls\
Secret\
SecretStore

View File

@@ -0,0 +1,9 @@
OBJS=\
miCasaException\
BasicCredential\
miCASA\
AssemblyInfo\
NativeCalls\
Secret\
SecretStore

View File

@@ -0,0 +1,10 @@
SRC=\
AssemblyInfo.cs\
miCasaException.cs\
BasicCredential.cs\
miCASA.cs\
AssemblyInfo.cs\
NativeCalls.cs\
Secret.cs\
SecretStore.cs

View File

@@ -0,0 +1,9 @@
SRC=\
miCasaException.cs\
BasicCredential.cs\
miCASA.cs\
AssemblyInfo.cs\
NativeCalls.cs\
Secret.cs\
SecretStore.cs