New xpcom caps manager apis

git-svn-id: svn://10.0.0.236/trunk@10276 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
sudu%netscape.com
1998-09-17 18:12:32 +00:00
parent fb52d0e62d
commit a0b23975e0
26 changed files with 1970 additions and 9 deletions

View File

@@ -16,6 +16,6 @@
DEPTH = ..
DIRS = include src
DIRS = public include src
include $(DEPTH)/config/rules.mk

View File

@@ -18,7 +18,13 @@ MODULE = caps
DEPTH = ../..
EXPORTS = nsZip.h nsZig.h nsLoadZig.h nsPrincipal.h nsPrivilege.h nsPrivilegeManager.h nsPrivilegeTable.h nsSystemPrivilegeTable.h nsTarget.h nsUserTarget.h jpermission.h nsUserDialogHelper.h admin.h nsCaps.h nsCapsEnums.h
EXPORTS = nsZip.h nsZig.h nsLoadZig.h nsPrincipal.h nsPrivilege.h nsPrivilegeManager.h nsPrivilegeTable.h nsSystemPrivilegeTable.h nsTarget.h nsUserTarget.h jpermission.h nsUserDialogHelper.h admin.h nsCaps.h nsCapsEnums.h \
nsCCapsManager.h \
nsCCertPrincipal.h \
nsCCodebasePrincipal.h \
nsCCapsManagerFactory.h
include $(DEPTH)/config/rules.mk

View File

@@ -28,7 +28,13 @@ IGNORE_MANIFEST=1
MODULE=caps
DEPTH=..\..
EXPORTS=nsZip.h nsZig.h nsLoadZig.h nsPrincipal.h nsPrivilege.h nsPrivilegeManager.h nsPrivilegeTable.h nsSystemPrivilegeTable.h nsTarget.h nsUserTarget.h jpermission.h nsUserDialogHelper.h admin.h nsCaps.h nsCapsEnums.h
EXPORTS=nsZip.h nsZig.h nsLoadZig.h nsPrincipal.h nsPrivilege.h nsPrivilegeManager.h nsPrivilegeTable.h nsSystemPrivilegeTable.h nsTarget.h nsUserTarget.h jpermission.h nsUserDialogHelper.h admin.h nsCaps.h nsCapsEnums.h \
nsCCapsManager.h \
nsCCertPrincipal.h \
nsCCodebasePrincipal.h \
nsCCapsManagerFactory.h \
nsCCodeSourcePrincipal.h
include <$(DEPTH)/config/rules.mak>

View File

@@ -0,0 +1,117 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsCCapsManager_h___
#define nsCCapsManager_h___
#include "nsIPrincipal.h"
#include "nsISupports.h"
#include "nsICapsManager.h"
#include "nsAgg.h"
#include "nsPrincipal.h"
#include "nsPrivilegeManager.h"
/**
* nsCCapsManager implements the nsICapsManager
* interface for navigator. This is used to create new principals and get and
* set permissions for each of the principals created.
* nsCCapsManager registers itself as the factory object and it will always return
* a pointer to itself as in the createInstance. This is because there should be only
* one nsCCapsManager in navigator.
*/
class nsCCapsManager : public nsICapsManager {
public:
////////////////////////////////////////////////////////////////////////////
// from nsISupports and AggregatedQueryInterface:
NS_DECL_AGGREGATED
////////////////////////////////////////////////////////////////////////////
// from nsICapsManager:
NS_IMETHOD
CreateCodebasePrincipal(const char *codebaseURL, nsIPrincipal** prin);
NS_IMETHOD
CreateCertPrincipal(const unsigned char *certByteData, PRUint32 certByteDataSize, nsIPrincipal** prin);
/**
* Creates a CodeSourcePrincipal, which has both nsICodebasePrincipal
* and nsICertPrincipal
*
* @param certByteData - The ceritificate's byte array data including the chain.
* @param certByteDataSize - the length of certificate byte array.
* @param codebaseURL - the codebase URL
*/
NS_IMETHOD
CreateCodeSourcePrincipal(const unsigned char *certByteData, PRUint32 certByteDataSize, const char *codebaseURL, nsIPrincipal** prin);
/**
* Returns the permission for given principal and target
*
* @param prin - is either certificate principal or codebase principal
* @param target - is NS_ALL_PRIVILEGES.
* @param state - the return value is passed in this parameter.
*/
NS_IMETHOD
GetPermission(nsIPrincipal* prin, nsITarget* target, nsPermission *state);
/**
* Set the permission state for given principal and target. This wouldn't
* prompt the end user with UI.
*
* @param prin - is either certificate principal or codebase principal
* @param target - is NS_ALL_PRIVILEGES.
* @param state - is permisson state that should be set for the given prin
* and target parameters.
*/
NS_IMETHOD
SetPermission(nsIPrincipal* prin, nsITarget* target, nsPermission state);
/**
* Prompts the user if they want to grant permission for the given principal and
* for the given target.
*
* @param prin - is either certificate principal or codebase principal
* @param target - is NS_ALL_PRIVILEGES.
* @param result - is the permission user has given for the given principal and
* target
*/
NS_IMETHOD
AskPermission(nsIPrincipal* prin, nsITarget* target, nsPermission *result);
////////////////////////////////////////////////////////////////////////////
// from nsCCapsManager:
nsCCapsManager(nsISupports *aOuter);
virtual ~nsCCapsManager(void);
NS_METHOD
GetNSPrincipal(nsIPrincipal* pNSIPrincipal, nsPrincipal **ppNSPRincipal);
nsPermission
ConvertPrivilegeToPermission(nsPrivilege *pNSPrivilege);
void
SetSystemPrivilegeManager();
protected:
nsPrivilegeManager *m_pNSPrivilegeManager;
};
#endif // nsCCapsManager_h___

View File

@@ -0,0 +1,52 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsCCapsManagerFactory_h___
#define nsCCapsManagerFactory_h___
#include "nsISupports.h"
#include "nsIFactory.h"
class nsCCapsManagerFactory : public nsIFactory {
public:
////////////////////////////////////////////////////////////////////////////
// from nsISupports and AggregatedQueryInterface:
NS_DECL_ISUPPORTS
////////////////////////////////////////////////////////////////////////////
// from nsIFactory:
NS_IMETHOD
CreateInstance(nsISupports *aOuter, REFNSIID aIID, void **aResult);
NS_IMETHOD
LockFactory(PRBool aLock);
////////////////////////////////////////////////////////////////////////////
// from nsCCapsManagerFactory:
nsCCapsManagerFactory(void);
virtual ~nsCCapsManagerFactory(void);
protected:
static nsIFactory *m_pNSIFactory;
};
#endif // nsCCapsManagerFactory_h___

View File

@@ -0,0 +1,111 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsCCertPrincipal_h___
#define nsCCertPrincipal_h___
#include "nsICertPrincipal.h"
#include "nsPrincipal.h"
class nsCCertPrincipal : public nsICertPrincipal {
public:
////////////////////////////////////////////////////////////////////////////
// from nsISupports:
NS_DECL_ISUPPORTS
////////////////////////////////////////////////////////////////////////////
// from nsIPrincipal:
NS_IMETHOD
IsTrusted(char* scope, PRBool *pbIsTrusted);
////////////////////////////////////////////////////////////////////////////
// from nsICertPrincipal:
/**
* returns the certificate's data that is passes in via Initialize method.
*
* @param certByteData - The ceritificate's byte array data including the chain.
* @param certByteDataSize - the length of certificate byte array.
*/
NS_IMETHOD
GetCertData(unsigned char **certByteData, PRUint32 *certByteDataSize);
/**
* Returns the public key of the certificate.
*
* @param publicKey - the Public Key data will be returned in this field.
* @param publicKeySize - the length of public key data is returned in this
* parameter.
*/
NS_IMETHOD
GetPublicKey(unsigned char **publicKey, PRUint32 *publicKeySize);
/**
* Returns the company name of the ceritificate (OU etc parameters of certificate)
*
* @param result - the certificate details about the signer.
*/
NS_IMETHOD
GetCompanyName(const char **ppCompanyName);
/**
* Returns the certificate issuer's data (OU etc parameters of certificate)
*
* @param result - the details about the issuer
*/
NS_IMETHOD
GetCertificateAuthority(const char **ppCertAuthority);
/**
* Returns the serial number of certificate
*
* @param result - Returns the serial number of certificate
*/
NS_IMETHOD
GetSerialNumber(const char **ppSerialNumber);
/**
* Returns the expiration date of certificate
*
* @param result - Returns the expiration date of certificate
*/
NS_IMETHOD
GetExpirationDate(const char **ppExpDate);
/**
* Returns the finger print of certificate
*
* @param result - Returns the finger print of certificate
*/
NS_IMETHOD
GetFingerPrint(const char **ppFingerPrint);
////////////////////////////////////////////////////////////////////////////
// from nsCCertPrincipal:
nsCCertPrincipal(const unsigned char *certByteData, PRUint32 certByteDataSize, nsresult *result);
virtual ~nsCCertPrincipal(void);
nsPrincipal *GetPeer(void);
protected:
nsPrincipal *m_pNSPrincipal;
};
#endif // nsCCertPrincipal_h___

View File

@@ -0,0 +1,119 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsCCodeSourcePrincipal_h___
#define nsCCodeSourcePrincipal_h___
#include "nsICodeSourcePrincipal.h"
#include "nsPrincipal.h"
class nsCCodeSourcePrincipal : public nsICodeSourcePrincipal {
public:
////////////////////////////////////////////////////////////////////////////
// from nsISupports:
NS_DECL_ISUPPORTS
////////////////////////////////////////////////////////////////////////////
// from nsIPrincipal:
NS_IMETHOD
IsTrusted(char* scope, PRBool *pbIsTrusted);
////////////////////////////////////////////////////////////////////////////
// from nsICodeSourcePrincipal:
/**
* returns the certificate's data that is passes in via Initialize method.
*
* @param certByteData - The ceritificate's byte array data including the chain.
* @param certByteDataSize - the length of certificate byte array.
*/
NS_IMETHOD
GetCertData(unsigned char **certByteData, PRUint32 *certByteDataSize);
/**
* Returns the public key of the certificate.
*
* @param publicKey - the Public Key data will be returned in this field.
* @param publicKeySize - the length of public key data is returned in this
* parameter.
*/
NS_IMETHOD
GetPublicKey(unsigned char **publicKey, PRUint32 *publicKeySize);
/**
* Returns the company name of the ceritificate (OU etc parameters of certificate)
*
* @param result - the certificate details about the signer.
*/
NS_IMETHOD
GetCompanyName(const char **ppCompanyName);
/**
* Returns the certificate issuer's data (OU etc parameters of certificate)
*
* @param result - the details about the issuer
*/
NS_IMETHOD
GetCertificateAuthority(const char **ppCertAuthority);
/**
* Returns the serial number of certificate
*
* @param result - Returns the serial number of certificate
*/
NS_IMETHOD
GetSerialNumber(const char **ppSerialNumber);
/**
* Returns the expiration date of certificate
*
* @param result - Returns the expiration date of certificate
*/
NS_IMETHOD
GetExpirationDate(const char **ppExpDate);
/**
* Returns the finger print of certificate
*
* @param result - Returns the finger print of certificate
*/
NS_IMETHOD
GetFingerPrint(const char **ppFingerPrint);
/**
* Returns the codebase URL of the principal.
*
* @param result - the resulting codebase URL
*/
NS_IMETHOD
GetURL(const char **ppCodeBaseURL);
////////////////////////////////////////////////////////////////////////////
// from nsCCodeSourcePrincipal:
nsCCodeSourcePrincipal(const unsigned char *certByteData, PRUint32 certByteDataSize, const char *codebaseURL, nsresult *result);
virtual ~nsCCodeSourcePrincipal(void);
protected:
nsICertPrincipal *m_pNSICertPrincipal;
nsICodebasePrincipal *m_pNSICodebasePrincipal;
};
#endif // nsCCodeSourcePrincipal_h___

View File

@@ -0,0 +1,61 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsCCodebasePrincipal_h___
#define nsCCodebasePrincipal_h___
#include "nsICodebasePrincipal.h"
#include "nsPrincipal.h"
class nsCCodebasePrincipal : public nsICodebasePrincipal {
public:
////////////////////////////////////////////////////////////////////////////
// from nsISupports:
NS_DECL_ISUPPORTS
////////////////////////////////////////////////////////////////////////////
// from nsIPrincipal:
NS_IMETHOD
IsTrusted(char* scope, PRBool *pbIsTrusted);
///////////////////////////////////////////////////////////////////////////
// from nsICodebasePrincipal:
/**
* Returns the codebase URL of the principal.
*
* @param result - the resulting codebase URL
*/
NS_IMETHOD
GetURL(const char **ppCodeBaseURL);
////////////////////////////////////////////////////////////////////////////
// from nsCCodebasePrincipal:
nsCCodebasePrincipal(const char *codebaseURL, nsresult *result);
virtual ~nsCCodebasePrincipal(void);
nsPrincipal *GetPeer(void);
protected:
nsPrincipal *m_pNSPrincipal;
};
#endif // nsCCodebasePrincipal_h___

View File

@@ -37,7 +37,7 @@ DEPTH=..
#// DIRS - There are subdirectories to process
#//
#//------------------------------------------------------------------------
DIRS=include src
DIRS= public include src
#//------------------------------------------------------------------------
#//

View File

@@ -0,0 +1,30 @@
#!gmake
# The contents of this file are subject to the Netscape Public License
# Version 1.0 (the "NPL"); you may not use this file except in
# compliance with the NPL. You may obtain a copy of the NPL at
# http://www.mozilla.org/NPL/
#
# Software distributed under the NPL is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
# for the specific language governing rights and limitations under the
# NPL.
#
# The Initial Developer of this code under the NPL is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
# Reserved.
MODULE = caps
DEPTH = ../..
EXPORTS = nsIPrincipal.h \
nsICodebasePrincipal.h \
nsICertPrincipal.h \
nsICapsManager.h \
nsICodeSourcePrincipal.h
include $(DEPTH)/config/rules.mk

View File

@@ -0,0 +1,35 @@
#!gmake
# The contents of this file are subject to the Netscape Public License
# Version 1.0 (the "NPL"); you may not use this file except in
# compliance with the NPL. You may obtain a copy of the NPL at
# http://www.mozilla.org/NPL/
#
# Software distributed under the NPL is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
# for the specific language governing rights and limitations under the
# NPL.
#
# The Initial Developer of this code under the NPL is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
# Reserved.
MODULE = caps
DEPTH = ../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
EXPORTS = nsIPrincipal.h \
nsICodebasePrincipal.h \
nsICertPrincipal.h \
nsICapsManager.h \
nsICodeSourcePrincipal.h
EXPORTS := $(addprefix $(srcdir)/, $(EXPORTS))
include $(topsrcdir)/config/rules.mk

View File

@@ -0,0 +1,40 @@
#!nmake
#
# The contents of this file are subject to the Netscape Public License
# Version 1.0 (the "NPL"); you may not use this file except in
# compliance with the NPL. You may obtain a copy of the NPL at
# http://www.mozilla.org/NPL/
#
# Software distributed under the NPL is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
# for the specific language governing rights and limitations under the
# NPL.
#
# The Initial Developer of this code under the NPL is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All Rights
# Reserved.
IGNORE_MANIFEST=1
#//------------------------------------------------------------------------
#//
#// Makefile to install CAPS/INCLUDE header files into the distribution
#// directory.
#//
#//------------------------------------------------------------------------
MODULE=caps
DEPTH=..\..
EXPORTS= \
nsIPrincipal.h \
nsICodebasePrincipal.h \
nsICertPrincipal.h \
nsICapsManager.h \
nsICodeSourcePrincipal.h
include <$(DEPTH)/config/rules.mak>

View File

@@ -0,0 +1,131 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsICapsManager_h___
#define nsICapsManager_h___
#include "nsISupports.h"
#include "nsIFactory.h"
#include "nsIPrincipal.h"
class nsITarget;
#define NS_ALL_PRIVILEGES ((nsITarget*)NULL)
enum nsPermission {
nsPermission_Unknown,
nsPermission_AllowedSession,
nsPermission_DeniedSession,
nsPermission_AllowedForever,
nsPermission_DeniedForever
};
/**
* The nsICapsManager interface is used to construct and manage principals.
* Principals are either certificates, or codebase principals. To construct
* a principal, QueryInterface on nsIPluginManager and then call CreateCertPrincipal
* or CreateCodebasePrincipal on the returned nsICapsManager.
* Once a principal is obtained, it can be passed to the nsICapsManager's
* SetPermission operations.
*/
class nsICapsManager : public nsISupports {
public:
/**
* Intializes the principal object with the codebase URL.
*
* @param codebaseURL - the codebase URL
*/
NS_IMETHOD
CreateCodebasePrincipal(const char *codebaseURL, nsIPrincipal** prin) = 0;
/**
* Initializes the Certificate principal with the certificate data. I am thinking
* Certificate data should contain all the data about the certificate,
* ie. the signer and the certificate chain.
*
* @param certByteData - The ceritificate's byte array data including the chain.
* @param certByteDataSize - the length of certificate byte array.
*/
NS_IMETHOD
CreateCertPrincipal(const unsigned char *certByteData, PRUint32 certByteDataSize, nsIPrincipal** prin) = 0;
/**
* Creates a CodeSourcePrincipal, which has both nsICodebasePrincipal
* and nsICertPrincipal
*
* @param certByteData - The ceritificate's byte array data including the chain.
* @param certByteDataSize - the length of certificate byte array.
* @param codebaseURL - the codebase URL
*/
NS_IMETHOD
CreateCodeSourcePrincipal(const unsigned char *certByteData, PRUint32 certByteDataSize, const char *codebaseURL, nsIPrincipal** prin) = 0;
/**
* Returns the permission for given principal and target
*
* @param prin - is either certificate principal or codebase principal
* @param target - is NS_ALL_PRIVILEGES.
* @param state - the return value is passed in this parameter.
*/
NS_IMETHOD
GetPermission(nsIPrincipal* prin, nsITarget* target, nsPermission *state) = 0;
/**
* Set the permission state for given principal and target. This wouldn't
* prompt the end user with UI.
*
* @param prin - is either certificate principal or codebase principal
* @param target - is NS_ALL_PRIVILEGES.
* @param state - is permisson state that should be set for the given prin
* and target parameters.
*/
NS_IMETHOD
SetPermission(nsIPrincipal* prin, nsITarget* target, nsPermission state) = 0;
/**
* Prompts the user if they want to grant permission for the given principal and
* for the given target.
*
* @param prin - is either certificate principal or codebase principal
* @param target - is NS_ALL_PRIVILEGES.
* @param result - is the permission user has given for the given principal and
* target
*/
NS_IMETHOD
AskPermission(nsIPrincipal* prin, nsITarget* target, nsPermission *result) = 0;
};
#define NS_ICAPSMANAGER_IID \
{ /* dc7d0bb0-25e1-11d2-8160-006008119d7a */ \
0xdc7d0bb0, \
0x25e1, \
0x11d2, \
{0x81, 0x60, 0x00, 0x60, 0x08, 0x11, 0x9d, 0x7a} \
}
#define NS_CCAPSMANAGER_CID \
{ /* fd347500-307f-11d2-97f0-00805f8a28d0 */ \
0xfd347500, \
0x307f, \
0x11d2, \
{0x97, 0xf0, 0x00, 0x80, 0x5f, 0x8a, 0x28, 0xd0} \
};
#endif // nsICapsManager_h___

View File

@@ -0,0 +1,99 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsICertPrincipal_h___
#define nsICertPrincipal_h___
#include "nsIPrincipal.h"
enum { nsFingerPrint_Size = 16 };
typedef unsigned char nsFingerPrint[nsFingerPrint_Size];
class nsICertPrincipal : public nsIPrincipal {
public:
/**
* returns the certificate's data that is passes in via Initialize method.
*
* @param certByteData - The ceritificate's byte array data including the chain.
* @param certByteDataSize - the length of certificate byte array.
*/
NS_IMETHOD
GetCertData(unsigned char **certByteData, PRUint32 *certByteDataSize) = 0;
/**
* Returns the public key of the certificate.
*
* @param publicKey - the Public Key data will be returned in this field.
* @param publicKeySize - the length of public key data is returned in this
* parameter.
*/
NS_IMETHOD
GetPublicKey(unsigned char **publicKey, PRUint32 *publicKeySize) = 0;
/**
* Returns the company name of the ceritificate (OU etc parameters of certificate)
*
* @param result - the certificate details about the signer.
*/
NS_IMETHOD
GetCompanyName(const char **ppCompanyName) = 0;
/**
* Returns the certificate issuer's data (OU etc parameters of certificate)
*
* @param result - the details about the issuer
*/
NS_IMETHOD
GetCertificateAuthority(const char **ppCertAuthority) = 0;
/**
* Returns the serial number of certificate
*
* @param result - Returns the serial number of certificate
*/
NS_IMETHOD
GetSerialNumber(const char **ppSerialNumber) = 0;
/**
* Returns the expiration date of certificate
*
* @param result - Returns the expiration date of certificate
*/
NS_IMETHOD
GetExpirationDate(const char **ppExpDate) = 0;
/**
* Returns the finger print of certificate
*
* @param result - Returns the finger print of certificate
*/
NS_IMETHOD
GetFingerPrint(const char **ppFingerPrint) = 0;
};
#define NS_ICERTPRINCIPAL_IID \
{ /* ebfefcd0-25e1-11d2-8160-006008119d7a */ \
0xebfefcd0, \
0x25e1, \
0x11d2, \
{0x81, 0x60, 0x00, 0x60, 0x08, 0x11, 0x9d, 0x7a} \
}
#endif // nsICertPrincipal_h___

View File

@@ -0,0 +1,105 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsICodeSourcePrincipal_h___
#define nsICodeSourcePrincipal_h___
#include "nsIPrincipal.h"
#include "nsICertPrincipal.h"
#include "nsICodebasePrincipal.h"
class nsICodeSourcePrincipal : public nsIPrincipal {
/**
* returns the certificate's data that is passes in via Initialize method.
*
* @param certByteData - The ceritificate's byte array data including the chain.
* @param certByteDataSize - the length of certificate byte array.
*/
NS_IMETHOD
GetCertData(unsigned char **certByteData, PRUint32 *certByteDataSize) = 0;
/**
* Returns the public key of the certificate.
*
* @param publicKey - the Public Key data will be returned in this field.
* @param publicKeySize - the length of public key data is returned in this
* parameter.
*/
NS_IMETHOD
GetPublicKey(unsigned char **publicKey, PRUint32 *publicKeySize) = 0;
/**
* Returns the company name of the ceritificate (OU etc parameters of certificate)
*
* @param result - the certificate details about the signer.
*/
NS_IMETHOD
GetCompanyName(const char **ppCompanyName) = 0;
/**
* Returns the certificate issuer's data (OU etc parameters of certificate)
*
* @param result - the details about the issuer
*/
NS_IMETHOD
GetCertificateAuthority(const char **ppCertAuthority) = 0;
/**
* Returns the serial number of certificate
*
* @param result - Returns the serial number of certificate
*/
NS_IMETHOD
GetSerialNumber(const char **ppSerialNumber) = 0;
/**
* Returns the expiration date of certificate
*
* @param result - Returns the expiration date of certificate
*/
NS_IMETHOD
GetExpirationDate(const char **ppExpDate) = 0;
/**
* Returns the finger print of certificate
*
* @param result - Returns the finger print of certificate
*/
NS_IMETHOD
GetFingerPrint(const char **ppFingerPrint) = 0;
/**
* Returns the codebase URL of the principal.
*
* @param result - the resulting codebase URL
*/
NS_IMETHOD
GetURL(const char **ppCodeBaseURL) = 0;
};
#define NS_ICCODESOURCEPRINCIPAL_IID \
{ /* 68cb0890-436a-11d2-b940-00805f52351a */ \
0x68cb0890, \
0x436a, \
0x11d2, \
{0xb9, 0x40, 0x00, 0x80, 0x5f, 0x52, 0x35, 0x1a} \
}
#endif // nsICodeSourcePrincipal_h___

View File

@@ -0,0 +1,45 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsICodebasePrincipal_h___
#define nsICodebasePrincipal_h___
#include "nsIPrincipal.h"
class nsICodebasePrincipal : public nsIPrincipal {
public:
/**
* Returns the codebase URL of the principal.
*
* @param result - the resulting codebase URL
*/
NS_IMETHOD
GetURL(const char **ppCodeBaseURL) = 0;
};
#define NS_ICODEBASEPRINCIPAL_IID \
{ /* c29fe440-25e1-11d2-8160-006008119d7a */ \
0xc29fe440, \
0x25e1, \
0x11d2, \
{0x81, 0x60, 0x00, 0x60, 0x08, 0x11, 0x9d, 0x7a} \
}
#endif // nsICodebasePrincipal_h___

View File

@@ -0,0 +1,62 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsIPrincipal_h___
#define nsIPrincipal_h___
#include "nsISupports.h"
class nsIPrincipal : public nsISupports {
public:
/**
* Determines whether or not the Principal is trusted or not.
*
* If it is a Certificate Principal, then it will validate
* by checking whether the given certificate chain can be
* successfully validated using trusted certificate information
* in Netscape's certificate database.
*
* If it is a codebase Principal, this function will return FALSE,
* unless the following preference is set. The following
* preference would allow developers to test their applets without
* signing.
*
* user_pref("signed.applets.codebase_principal_support", true);
*
*
* @param scope - the individual parameter of the certificate that
* needs to be verified. If NULL is passed, it will
* verify the whole certificate chain.
* @param result - is PR_TRUE if the given certificate chain is trusted,
* otherwise PR_FALSE.
*/
NS_IMETHOD
IsTrusted(char* scope, PRBool *pbIsTrusted) = 0;
};
#define NS_IPRINCIPAL_IID \
{ /* ff9313d0-25e1-11d2-8160-006008119d7a */ \
0xff9313d0, \
0x25e1, \
0x11d2, \
{0x81, 0x60, 0x00, 0x60, 0x08, 0x11, 0x9d, 0x7a} \
}
#endif // nsIPrincipal_h___

View File

@@ -34,6 +34,11 @@ CPPSRCS = \
nsUserTarget.cpp \
admin.cpp \
nsCaps.cpp \
nsCCapsManager.cpp \
nsCCertPrincipal.cpp \
nsCCodebasePrincipal.cpp \
nsCCapsManagerFactory.cpp \
nsCCodeSourcePrincipal.cpp \
$(NULL)
REQUIRES = nspr xpcom security layer js jar zlib pref img util rdf caps
@@ -46,5 +51,6 @@ CSRCS = \
include $(DEPTH)/config/rules.mk
INCLUDES += -I$(DEPTH)/include
INCLUDES += -I$(DEPTH)/include \
-I$(PUBLIC)/public \

View File

@@ -64,6 +64,11 @@ OBJS= \
.\$(OBJDIR)\nsUserTarget.obj \
.\$(OBJDIR)\admin.obj \
.\$(OBJDIR)\nsCaps.obj \
.\$(OBJDIR)\nsCCapsManager.obj \
.\$(OBJDIR)\nsCCertPrincipal.obj \
.\$(OBJDIR)\nsCCodebasePrincipal.obj \
.\$(OBJDIR)\nsCCapsManagerFactory.obj \
.\$(OBJDIR)\nsCCodeSourcePrincipal.obj \
$(NULL)
@@ -101,6 +106,7 @@ LINCS= $(LINCS) \
-I$(DEPTH)\lib\libstyle \
-I$(PUBLIC)\rdf \
-I$(PUBLIC)\caps \
-I$(PUBLIC)\public \
$(NULL)
#//------------------------------------------------------------------------

View File

@@ -0,0 +1,257 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsRepository.h"
#include "nsCapsEnums.h"
#include "nsCCapsManager.h"
#include "nsICodebasePrincipal.h"
#include "nsICertPrincipal.h"
#include "nsCCodebasePrincipal.h"
#include "nsCCertPrincipal.h"
#include "nsCCodeSourcePrincipal.h"
static NS_DEFINE_CID(kCCapsManagerCID, NS_CCAPSMANAGER_CID);
static NS_DEFINE_IID(kICapsManagerIID, NS_ICAPSMANAGER_IID);
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
////////////////////////////////////////////////////////////////////////////
// from nsISupports and AggregatedQueryInterface:
// Thes macro expands to the aggregated query interface scheme.
NS_IMPL_AGGREGATED(nsCCapsManager);
NS_METHOD
nsCCapsManager::AggregatedQueryInterface(const nsIID& aIID, void** aInstancePtr)
{
if (aIID.Equals(kISupportsIID)) {
*aInstancePtr = GetInner();
AddRef();
return NS_OK;
}
if (aIID.Equals(kICapsManagerIID)) {
*aInstancePtr = this;
AddRef();
return NS_OK;
}
return NS_NOINTERFACE;
}
////////////////////////////////////////////////////////////////////////////
// from nsICapsManager:
NS_METHOD
nsCCapsManager::CreateCodebasePrincipal(const char *codebaseURL, nsIPrincipal** prin)
{
nsresult result = NS_OK;
nsCCodebasePrincipal *pNSCCodebasePrincipal = new nsCCodebasePrincipal(codebaseURL, &result);
if (pNSCCodebasePrincipal == NULL)
{
return NS_ERROR_OUT_OF_MEMORY;
}
pNSCCodebasePrincipal->AddRef();
*prin = (nsIPrincipal *)pNSCCodebasePrincipal;
return result;
}
NS_METHOD
nsCCapsManager::CreateCertPrincipal(const unsigned char *certByteData, PRUint32 certByteDataSize, nsIPrincipal** prin)
{
nsresult result = NS_OK;
nsCCertPrincipal *pNSCCertPrincipal = new nsCCertPrincipal(certByteData, certByteDataSize, &result);
if (pNSCCertPrincipal == NULL)
{
return NS_ERROR_OUT_OF_MEMORY;
}
pNSCCertPrincipal->AddRef();
*prin = (nsIPrincipal *)pNSCCertPrincipal;
return NS_OK;
}
NS_METHOD
nsCCapsManager::CreateCodeSourcePrincipal(const unsigned char *certByteData, PRUint32 certByteDataSize, const char *codebaseURL, nsIPrincipal** prin)
{
nsresult result = NS_OK;
nsCCodeSourcePrincipal *pNSCCodeSourcePrincipal = new nsCCodeSourcePrincipal(certByteData, certByteDataSize, codebaseURL, &result);
if (pNSCCodeSourcePrincipal == NULL)
{
return NS_ERROR_OUT_OF_MEMORY;
}
pNSCCodeSourcePrincipal->AddRef();
*prin = (nsIPrincipal *)pNSCCodeSourcePrincipal;
return NS_OK;
}
/**
* Returns the permission for given principal and target
*
* @param prin - is either certificate principal or codebase principal
* @param target - is NS_ALL_PRIVILEGES.
* @param state - the return value is passed in this parameter.
*/
NS_METHOD
nsCCapsManager::GetPermission(nsIPrincipal* pNSIPrincipal, nsITarget* ignoreTarget, nsPermission *state)
{
nsTarget *target = nsTarget::findTarget("AllPermission");
nsresult result = NS_OK;
if( target == NULL )
{
*state = nsPermission_Unknown;
return NS_OK;
}
if (m_pNSPrivilegeManager != NULL)
{
nsPrincipal *pNSPrinicipal = NULL;
result = GetNSPrincipal(pNSIPrincipal, &pNSPrinicipal);
if( result != NS_OK)
{
return result;
}
*state = ConvertPrivilegeToPermission(m_pNSPrivilegeManager->getPrincipalPrivilege(target, pNSPrinicipal, NULL));
}
return NS_OK;
}
/**
* Set the permission state for given principal and target. This wouldn't
* prompt the end user with UI.
*
* @param prin - is either certificate principal or codebase principal
* @param target - is NS_ALL_PRIVILEGES.
* @param state - is permisson state that should be set for the given prin
* and target parameters.
*/
NS_METHOD
nsCCapsManager::SetPermission(nsIPrincipal* prin, nsITarget* target, nsPermission state)
{
// XXX sudu/raman: fix it.
PR_ASSERT(PR_FALSE);
return NS_OK;
}
/**
* Prompts the user if they want to grant permission for the given principal and
* for the given target.
*
* @param prin - is either certificate principal or codebase principal
* @param target - is NS_ALL_PRIVILEGES.
* @param result - is the permission user has given for the given principal and
* target
*/
NS_METHOD
nsCCapsManager::AskPermission(nsIPrincipal* pNSIPrincipal, nsITarget* ignoreTarget, nsPermission *state)
{
nsTarget *target = nsTarget::findTarget("AllPermission");
nsresult result = NS_OK;
if( target == NULL )
{
*state = nsPermission_Unknown;
return NS_OK;
}
if (m_pNSPrivilegeManager != NULL)
{
nsPrincipal *pNSPrinicipal = NULL;
result = GetNSPrincipal(pNSIPrincipal, &pNSPrinicipal);
if( result != NS_OK)
{
return result;
}
// XXX raman: Create AskPermission method.
m_pNSPrivilegeManager->enablePrivilege(pNSPrinicipal,target, 0);
*state = ConvertPrivilegeToPermission(m_pNSPrivilegeManager->getPrincipalPrivilege(target, pNSPrinicipal, NULL));
}
return NS_OK;
}
////////////////////////////////////////////////////////////////////////////
// from nsCCapsManager:
nsCCapsManager::nsCCapsManager(nsISupports *aOuter)
{
NS_INIT_AGGREGATED(aOuter);
m_pNSPrivilegeManager = new nsPrivilegeManager();
}
nsCCapsManager::~nsCCapsManager()
{
}
NS_METHOD
nsCCapsManager::GetNSPrincipal(nsIPrincipal* pNSIPrincipal, nsPrincipal **ppNSPRincipal)
{
nsISupports *pNSISupports = NULL;
nsPrincipal *pNSPrinicipal = NULL;
NS_DEFINE_IID(kICertPrincipalIID, NS_ICERTPRINCIPAL_IID);
NS_DEFINE_IID(kICodebasePrincipalIID, NS_ICODEBASEPRINCIPAL_IID);
if (pNSIPrincipal->QueryInterface(kICertPrincipalIID,
(void**)&pNSISupports) == NS_OK)
{
nsCCertPrincipal *pNSCCertPrincipal = (nsCCertPrincipal *)pNSIPrincipal;
pNSPrinicipal = pNSCCertPrincipal->GetPeer();
pNSCCertPrincipal->Release();
}
else
if (pNSIPrincipal->QueryInterface(kICodebasePrincipalIID,
(void**)&pNSISupports) == NS_OK)
{
nsCCodebasePrincipal *pNSCCodebasePrincipal = (nsCCodebasePrincipal *)pNSIPrincipal;
pNSPrinicipal = pNSCCodebasePrincipal->GetPeer();
pNSCCodebasePrincipal->Release();
}
else
{
return NS_ERROR_NO_INTERFACE;
}
*ppNSPRincipal = pNSPrinicipal;
return NS_OK;
}
nsPermission
nsCCapsManager::ConvertPrivilegeToPermission(nsPrivilege *pNSPrivilege)
{
if(pNSPrivilege->isAllowedForever())
return nsPermission_AllowedForever;
if(pNSPrivilege->isForbiddenForever())
return nsPermission_AllowedForever;
if(pNSPrivilege->isAllowed())
return nsPermission_AllowedSession;
if(pNSPrivilege->isForbidden())
return nsPermission_DeniedSession;
return nsPermission_Unknown;
}
void
nsCCapsManager::SetSystemPrivilegeManager()
{
nsPrivilegeManager *pNSPrivilegeManager = nsPrivilegeManager::getPrivilegeManager();
if ( (m_pNSPrivilegeManager != NULL )
&& (m_pNSPrivilegeManager != pNSPrivilegeManager)
)
{
delete m_pNSPrivilegeManager;
m_pNSPrivilegeManager = pNSPrivilegeManager;
}
}

View File

@@ -0,0 +1,118 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "prtypes.h"
#include "nspr.h"
#include "prmem.h"
#include "prmon.h"
#include "prlog.h"
#include "nsCCapsManager.h"
#include "nsCCapsManagerFactory.h"
#include "nsRepository.h"
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID);
nsIFactory *nsCCapsManagerFactory::m_pNSIFactory = NULL;
////////////////////////////////////////////////////////////////////////////
// from nsISupports
NS_METHOD
nsCCapsManagerFactory::QueryInterface(const nsIID& aIID, void** aInstancePtr)
{
PR_ASSERT(NULL != aInstancePtr);
if (NULL == aInstancePtr) {
return NS_ERROR_NULL_POINTER;
}
if (aIID.Equals(kIFactoryIID) ||
aIID.Equals(kISupportsIID)) {
*aInstancePtr = (void*) this;
AddRef();
return NS_OK;
}
return NS_NOINTERFACE;
}
NS_IMPL_ADDREF(nsCCapsManagerFactory)
NS_IMPL_RELEASE(nsCCapsManagerFactory)
////////////////////////////////////////////////////////////////////////////
// from nsIFactory:
NS_METHOD
nsCCapsManagerFactory::CreateInstance(nsISupports *aOuter, REFNSIID aIID, void **aResult)
{
nsCCapsManager *pNSCCapsManager = NULL;
*aResult = NULL;
if (aOuter && !aIID.Equals(kISupportsIID))
return NS_NOINTERFACE; // XXX right error?
pNSCCapsManager = new nsCCapsManager(aOuter);
if (pNSCCapsManager->QueryInterface(aIID,
(void**)aResult) != NS_OK) {
// then we're trying get a interface other than nsISupports and
// nsICapsManager
return NS_ERROR_FAILURE;
}
return NS_OK;
}
NS_METHOD
nsCCapsManagerFactory::LockFactory(PRBool aLock)
{
return NS_OK;
}
////////////////////////////////////////////////////////////////////////////
// from nsCCapsManagerFactory:
nsCCapsManagerFactory::nsCCapsManagerFactory(void)
{
if( m_pNSIFactory != NULL)
{
return;
}
NS_INIT_REFCNT();
nsresult err = NS_OK;
NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID);
err = this->QueryInterface(kIFactoryIID, (void**)&m_pNSIFactory);
if ( (err == NS_OK) && (m_pNSIFactory != NULL) )
{
NS_DEFINE_CID(kCCapsManagerCID, NS_CCAPSMANAGER_CID);
nsRepository::RegisterFactory(kCCapsManagerCID, m_pNSIFactory,
PR_FALSE);
}
}
nsCCapsManagerFactory::~nsCCapsManagerFactory()
{
if(mRefCnt == 0)
{
NS_DEFINE_CID(kCCapsManagerCID, NS_CCAPSMANAGER_CID);
nsRepository::UnregisterFactory(kCCapsManagerCID, (nsIFactory *)m_pNSIFactory);
}
}

View File

@@ -0,0 +1,199 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsCCertPrincipal.h"
#include "nsPrincipal.h"
NS_DEFINE_IID(kICertPrincipalIID, NS_ICERTPRINCIPAL_IID);
////////////////////////////////////////////////////////////////////////////
// from nsISupports:
// These macros produce simple version of QueryInterface and AddRef.
// See the nsISupports.h header file for DETAILS.
NS_IMPL_ADDREF(nsCCertPrincipal)
NS_IMPL_RELEASE(nsCCertPrincipal)
NS_IMPL_QUERY_INTERFACE(nsCCertPrincipal, kICertPrincipalIID);
////////////////////////////////////////////////////////////////////////////
// from nsIPrincipal:
NS_METHOD
nsCCertPrincipal::IsTrusted(char* scope, PRBool *pbIsTrusted)
{
if(m_pNSPrincipal == NULL)
{
*pbIsTrusted = PR_FALSE;
return NS_ERROR_ILLEGAL_VALUE;
}
*pbIsTrusted = m_pNSPrincipal->isSecurePrincipal();
return NS_OK;
}
////////////////////////////////////////////////////////////////////////////
// from nsICertPrincipal:
/**
* returns the certificate's data that is passes in via Initialize method.
*
* @param certByteData - The ceritificate's byte array data including the chain.
* @param certByteDataSize - the length of certificate byte array.
*/
NS_METHOD
nsCCertPrincipal::GetCertData(unsigned char **certByteData, PRUint32 *certByteDataSize)
{
if(m_pNSPrincipal == NULL)
{
*certByteData = NULL;
*certByteDataSize = 0;
return NS_ERROR_ILLEGAL_VALUE;
}
*certByteData = (unsigned char *)m_pNSPrincipal->getKey();
*certByteDataSize = m_pNSPrincipal->getKeyLength();
return NS_OK;
}
/**
* Returns the public key of the certificate.
*
* @param publicKey - the Public Key data will be returned in this field.
* @param publicKeySize - the length of public key data is returned in this
* parameter.
*/
NS_METHOD
nsCCertPrincipal::GetPublicKey(unsigned char **publicKey, PRUint32 *publicKeySize)
{
// =-= sudu/raman: fix it.
PR_ASSERT(PR_FALSE);
return NS_OK;
}
/**
* Returns the company name of the ceritificate (OU etc parameters of certificate)
*
* @param result - the certificate details about the signer.
*/
NS_METHOD
nsCCertPrincipal::GetCompanyName(const char **ppCompanyName)
{
if(m_pNSPrincipal == NULL)
{
*ppCompanyName = NULL;
return NS_ERROR_ILLEGAL_VALUE;
}
*ppCompanyName = m_pNSPrincipal->getCompanyName();
return NS_OK;
}
/**
* Returns the certificate issuer's data (OU etc parameters of certificate)
*
* @param result - the details about the issuer
*/
NS_METHOD
nsCCertPrincipal::GetCertificateAuthority(const char **ppCertAuthority)
{
if(m_pNSPrincipal == NULL)
{
*ppCertAuthority = NULL;
return NS_ERROR_ILLEGAL_VALUE;
}
*ppCertAuthority = m_pNSPrincipal->getSecAuth();
return NS_OK;
}
/**
* Returns the serial number of certificate
*
* @param result - Returns the serial number of certificate
*/
NS_METHOD
nsCCertPrincipal::GetSerialNumber(const char **ppSerialNumber)
{
if(m_pNSPrincipal == NULL)
{
*ppSerialNumber = NULL;
return NS_ERROR_ILLEGAL_VALUE;
}
*ppSerialNumber = m_pNSPrincipal->getSerialNo();
return NS_OK;
}
/**
* Returns the expiration date of certificate
*
* @param result - Returns the expiration date of certificate
*/
NS_METHOD
nsCCertPrincipal::GetExpirationDate(const char **ppExpDate)
{
if(m_pNSPrincipal == NULL)
{
*ppExpDate = NULL;
return NS_ERROR_ILLEGAL_VALUE;
}
*ppExpDate = m_pNSPrincipal->getExpDate();
return NS_OK;
}
/**
* Returns the finger print of certificate
*
* @param result - Returns the finger print of certificate
*/
NS_METHOD
nsCCertPrincipal::GetFingerPrint(const char **ppFingerPrint)
{
if(m_pNSPrincipal == NULL)
{
*ppFingerPrint = NULL;
return NS_ERROR_ILLEGAL_VALUE;
}
*ppFingerPrint = m_pNSPrincipal->getFingerPrint();
return NS_OK;
}
////////////////////////////////////////////////////////////////////////////
// from nsCCertPrincipal:
nsCCertPrincipal::nsCCertPrincipal(const unsigned char *certByteData, PRUint32 certByteDataSize, nsresult *result)
{
// XXX raman fix the error condition.
m_pNSPrincipal = new nsPrincipal(nsPrincipalType_Cert, (void *)certByteData, certByteDataSize);
if(m_pNSPrincipal == NULL)
{
*result = NS_ERROR_OUT_OF_MEMORY;
return;
}
*result = NS_OK;
}
nsCCertPrincipal::~nsCCertPrincipal(void)
{
delete m_pNSPrincipal;
}
nsPrincipal*
nsCCertPrincipal::GetPeer(void)
{
return m_pNSPrincipal;
}

View File

@@ -0,0 +1,222 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsCCodeSourcePrincipal.h"
#include "nsCCodebasePrincipal.h"
#include "nsCCertPrincipal.h"
#include "nsPrincipal.h"
NS_DEFINE_IID(kICodeSourcePrincipalIID, NS_ICCODESOURCEPRINCIPAL_IID);
////////////////////////////////////////////////////////////////////////////
// from nsISupports:
// These macros produce simple version of QueryInterface and AddRef.
// See the nsISupports.h header file for DETAILS.
NS_IMPL_ADDREF(nsCCodeSourcePrincipal)
NS_IMPL_RELEASE(nsCCodeSourcePrincipal)
NS_IMPL_QUERY_INTERFACE(nsCCodeSourcePrincipal, kICodeSourcePrincipalIID);
////////////////////////////////////////////////////////////////////////////
// from nsIPrincipal:
NS_METHOD
nsCCodeSourcePrincipal::IsTrusted(char* scope, PRBool *pbIsTrusted)
{
if(m_pNSICertPrincipal == NULL)
{
*pbIsTrusted = PR_FALSE;
return NS_ERROR_ILLEGAL_VALUE;
}
return m_pNSICertPrincipal->IsTrusted(scope, pbIsTrusted);
}
////////////////////////////////////////////////////////////////////////////
// from nsICodeSourcePrincipal:
/**
* returns the certificate's data that is passes in via Initialize method.
*
* @param certByteData - The ceritificate's byte array data including the chain.
* @param certByteDataSize - the length of certificate byte array.
*/
NS_METHOD
nsCCodeSourcePrincipal::GetCertData(unsigned char **certByteData, PRUint32 *certByteDataSize)
{
if(m_pNSICertPrincipal == NULL)
{
*certByteData = NULL;
*certByteDataSize = 0;
return NS_ERROR_ILLEGAL_VALUE;
}
return m_pNSICertPrincipal->GetCertData(certByteData, certByteDataSize);
}
/**
* Returns the public key of the certificate.
*
* @param publicKey - the Public Key data will be returned in this field.
* @param publicKeySize - the length of public key data is returned in this
* parameter.
*/
NS_METHOD
nsCCodeSourcePrincipal::GetPublicKey(unsigned char **publicKey, PRUint32 *publicKeySize)
{
if(m_pNSICertPrincipal == NULL)
{
*publicKey = NULL;
*publicKeySize = 0;
return NS_ERROR_ILLEGAL_VALUE;
}
return m_pNSICertPrincipal->GetPublicKey(publicKey, publicKeySize);
}
/**
* Returns the company name of the ceritificate (OU etc parameters of certificate)
*
* @param result - the certificate details about the signer.
*/
NS_METHOD
nsCCodeSourcePrincipal::GetCompanyName(const char **ppCompanyName)
{
if(m_pNSICertPrincipal == NULL)
{
*ppCompanyName = NULL;
return NS_ERROR_ILLEGAL_VALUE;
}
return m_pNSICertPrincipal->GetCompanyName(ppCompanyName);
}
/**
* Returns the certificate issuer's data (OU etc parameters of certificate)
*
* @param result - the details about the issuer
*/
NS_METHOD
nsCCodeSourcePrincipal::GetCertificateAuthority(const char **ppCertAuthority)
{
if(m_pNSICertPrincipal == NULL)
{
*ppCertAuthority = NULL;
return NS_ERROR_ILLEGAL_VALUE;
}
return m_pNSICertPrincipal->GetCertificateAuthority(ppCertAuthority);
}
/**
* Returns the serial number of certificate
*
* @param result - Returns the serial number of certificate
*/
NS_METHOD
nsCCodeSourcePrincipal::GetSerialNumber(const char **ppSerialNumber)
{
if(m_pNSICertPrincipal == NULL)
{
*ppSerialNumber = NULL;
return NS_ERROR_ILLEGAL_VALUE;
}
return m_pNSICertPrincipal->GetSerialNumber(ppSerialNumber);
}
/**
* Returns the expiration date of certificate
*
* @param result - Returns the expiration date of certificate
*/
NS_METHOD
nsCCodeSourcePrincipal::GetExpirationDate(const char **ppExpDate)
{
if(m_pNSICertPrincipal == NULL)
{
*ppExpDate = NULL;
return NS_ERROR_ILLEGAL_VALUE;
}
return m_pNSICertPrincipal->GetExpirationDate(ppExpDate);
}
/**
* Returns the finger print of certificate
*
* @param result - Returns the finger print of certificate
*/
NS_METHOD
nsCCodeSourcePrincipal::GetFingerPrint(const char **ppFingerPrint)
{
if(m_pNSICertPrincipal == NULL)
{
*ppFingerPrint = NULL;
return NS_ERROR_ILLEGAL_VALUE;
}
return m_pNSICertPrincipal->GetFingerPrint(ppFingerPrint);
}
/**
* Returns the codebase URL of the principal.
*
* @param result - the resulting codebase URL
*/
NS_METHOD
nsCCodeSourcePrincipal::GetURL(const char **ppCodeBaseURL)
{
if(m_pNSICodebasePrincipal == NULL)
{
*ppCodeBaseURL = NULL;
return NS_ERROR_ILLEGAL_VALUE;
}
return m_pNSICodebasePrincipal->GetURL(ppCodeBaseURL);
}
////////////////////////////////////////////////////////////////////////////
// from nsCCodeSourcePrincipal:
nsCCodeSourcePrincipal::nsCCodeSourcePrincipal(const unsigned char *certByteData, PRUint32 certByteDataSize, const char *codebaseURL, nsresult *result)
{
*result = NS_OK;
// XXX raman fix the error condition.
nsCCertPrincipal *pNSCCertPrincipal = new nsCCertPrincipal(certByteData, certByteDataSize, result);
if (pNSCCertPrincipal == NULL)
{
return;
}
m_pNSICertPrincipal = (nsICertPrincipal *)pNSCCertPrincipal;
m_pNSICertPrincipal->AddRef();
// XXX raman fix the error condition.
nsCCodebasePrincipal *pNSCCodebasePrincipal = new nsCCodebasePrincipal(codebaseURL, result);
if (pNSCCodebasePrincipal == NULL)
{
return;
}
m_pNSICodebasePrincipal = (nsICodebasePrincipal *)pNSCCodebasePrincipal;
m_pNSICodebasePrincipal->AddRef();
}
nsCCodeSourcePrincipal::~nsCCodeSourcePrincipal(void)
{
m_pNSICertPrincipal->Release();
m_pNSICodebasePrincipal->Release();
}

View File

@@ -0,0 +1,92 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "nsCCodebasePrincipal.h"
#include "nsPrincipal.h"
#include "xp.h"
NS_DEFINE_IID(kICodebasePrincipalIID, NS_ICODEBASEPRINCIPAL_IID);
////////////////////////////////////////////////////////////////////////////
// from nsISupports:
// These macros produce simple version of QueryInterface and AddRef.
// See the nsISupports.h header file for DETAILS.
NS_IMPL_ADDREF(nsCCodebasePrincipal)
NS_IMPL_RELEASE(nsCCodebasePrincipal)
NS_IMPL_QUERY_INTERFACE(nsCCodebasePrincipal, kICodebasePrincipalIID);
////////////////////////////////////////////////////////////////////////////
// from nsIPrincipal:
NS_METHOD
nsCCodebasePrincipal::IsTrusted(char* scope, PRBool *pbIsTrusted)
{
if(m_pNSPrincipal == NULL)
{
*pbIsTrusted = PR_FALSE;
return NS_ERROR_ILLEGAL_VALUE;
}
*pbIsTrusted = m_pNSPrincipal->isSecurePrincipal();
return NS_OK;
}
/**
* Returns the codebase URL of the principal.
*
* @param result - the resulting codebase URL
*/
NS_METHOD
nsCCodebasePrincipal::GetURL(const char **ppCodeBaseURL)
{
if(m_pNSPrincipal == NULL)
{
*ppCodeBaseURL = NULL;
return NS_ERROR_ILLEGAL_VALUE;
}
*ppCodeBaseURL = m_pNSPrincipal->getKey();
return NS_OK;
}
////////////////////////////////////////////////////////////////////////////
// from nsCCodebasePrincipal:
nsCCodebasePrincipal::nsCCodebasePrincipal(const char *codebaseURL, nsresult *result)
{
// XXX raman fix the error condition.
m_pNSPrincipal = new nsPrincipal(nsPrincipalType_CodebaseExact, (void *)codebaseURL, XP_STRLEN(codebaseURL));
if(m_pNSPrincipal == NULL)
{
*result = NS_ERROR_OUT_OF_MEMORY;
return;
}
*result = NS_OK;
}
nsCCodebasePrincipal::~nsCCodebasePrincipal(void)
{
delete m_pNSPrincipal;
}
nsPrincipal*
nsCCodebasePrincipal::GetPeer(void)
{
return m_pNSPrincipal;
}

View File

@@ -29,9 +29,12 @@
#include "nsPrivilegeTable.h"
#include "nsPrincipal.h"
#include "nsTarget.h"
#include "nsCCapsManager.h"
#include "nsCCapsManagerFactory.h"
PR_BEGIN_EXTERN_C
static PRBool bNSCapsInitialized_g = PR_FALSE;
/*
* C API FOR JS
@@ -44,6 +47,11 @@ PR_BEGIN_EXTERN_C
PR_IMPLEMENT(PRBool)
nsCapsInitialize()
{
if(bNSCapsInitialized_g == PR_TRUE)
{
return PR_TRUE;
}
bNSCapsInitialized_g = PR_TRUE;
#if defined(_WIN32)
nsPrincipal *sysPrin = CreateSystemPrincipal("java/classes/java40.jar", "java/lang/Object.class");
#else
@@ -53,7 +61,7 @@ nsCapsInitialize()
sysPrin = new nsPrincipal(nsPrincipalType_Cert, "52:54:45:4e:4e:45:54:49",
strlen("52:54:45:4e:4e:45:54:49"));
}
nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager();
if (nsPrivManager == NULL) {
nsPrivilegeManagerInitialize();
@@ -62,6 +70,15 @@ nsCapsInitialize()
}
PR_ASSERT(nsPrivManager != NULL);
nsPrivManager->registerSystemPrincipal(sysPrin);
// New a class factory object and the constructor will register itself
// as the factory object in the repository. All other modules should
// FindFactory and use createInstance to create a instance of nsCCapsManager
// and ask for nsICapsManager interface.
nsCCapsManagerFactory *pNSCCapsManagerFactory = new nsCCapsManagerFactory();
if ( pNSCCapsManagerFactory == NULL )
{
return PR_FALSE;
}
return PR_TRUE;
}
@@ -71,6 +88,8 @@ PR_IMPLEMENT(PRBool)
nsCapsRegisterPrincipal(struct nsPrincipal *principal)
{
nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager();
if( nsPrivManager == NULL )
return PR_FALSE;
nsPrivManager->registerPrincipal(principal);
return PR_TRUE;
}
@@ -79,6 +98,8 @@ PR_IMPLEMENT(PRBool)
nsCapsEnablePrivilege(void* context, struct nsTarget *target, PRInt32 callerDepth)
{
nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager();
if( nsPrivManager == NULL )
return PR_FALSE;
return nsPrivManager->enablePrivilege(context, target, callerDepth);
}
@@ -86,6 +107,8 @@ PR_IMPLEMENT(PRBool)
nsCapsIsPrivilegeEnabled(void* context, struct nsTarget *target, PRInt32 callerDepth)
{
nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager();
if( nsPrivManager == NULL )
return PR_FALSE;
return nsPrivManager->isPrivilegeEnabled(context, target, callerDepth);
}
@@ -93,6 +116,8 @@ PR_IMPLEMENT(PRBool)
nsCapsRevertPrivilege(void* context, struct nsTarget *target, PRInt32 callerDepth)
{
nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager();
if( nsPrivManager == NULL )
return PR_FALSE;
return nsPrivManager->revertPrivilege(context, target, callerDepth);
}
@@ -100,6 +125,8 @@ PR_IMPLEMENT(PRBool)
nsCapsDisablePrivilege(void* context, struct nsTarget *target, PRInt32 callerDepth)
{
nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager();
if( nsPrivManager == NULL )
return PR_FALSE;
return nsPrivManager->disablePrivilege(context, target, callerDepth);
}
@@ -107,6 +134,8 @@ PR_IMPLEMENT(void*)
nsCapsGetClassPrincipalsFromStack(void* context, PRInt32 callerDepth)
{
nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager();
if( nsPrivManager == NULL )
return NULL;
return (void *)nsPrivManager->getClassPrincipalsFromStack(context, callerDepth);
}
@@ -114,6 +143,8 @@ PR_IMPLEMENT(nsSetComparisonType)
nsCapsComparePrincipalArray(void* prin1Array, void* prin2Array)
{
nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager();
if( nsPrivManager == NULL )
return nsSetComparisonType_NoSubset;
return nsPrivManager->comparePrincipalArray((nsPrincipalArray*)prin1Array,
(nsPrincipalArray*)prin2Array);
}
@@ -122,6 +153,8 @@ PR_IMPLEMENT(void*)
nsCapsIntersectPrincipalArray(void* prin1Array, void* prin2Array)
{
nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager();
if( nsPrivManager == NULL )
return NULL;
return nsPrivManager->intersectPrincipalArray((nsPrincipalArray*)prin1Array,
(nsPrincipalArray*)prin2Array);
}
@@ -130,6 +163,8 @@ PR_IMPLEMENT(PRBool)
nsCapsCanExtendTrust(void* from, void* to)
{
nsPrivilegeManager *nsPrivManager = nsPrivilegeManager::getPrivilegeManager();
if( nsPrivManager == NULL )
return PR_FALSE;
return nsPrivManager->canExtendTrust((nsPrincipalArray*)from,
(nsPrincipalArray*)to);
}

View File

@@ -1029,9 +1029,14 @@ nsPrivilege *nsPrivilegeManager::getPrincipalPrivilege(nsTarget *target,
nsPrincipal *prin,
void *data)
{
if ( (prin == NULL) || (target == NULL) )
{
return nsPrivilege::findPrivilege(nsPermissionState_Blank,
nsDurationState_Session);
}
if (getSystemPrincipal() == prin) {
return nsPrivilege::findPrivilege(nsPermissionState_Allowed,
nsDurationState_Forever);
nsDurationState_Session);
}
PrincipalKey prinKey(prin);
@@ -1039,13 +1044,15 @@ nsPrivilege *nsPrivilegeManager::getPrincipalPrivilege(nsTarget *target,
(nsPrivilegeTable *) itsPrinToPrivTable->Get(&prinKey);
if (privTable == NULL) {
// the principal isn't registered, so ignore it
return NULL;
return nsPrivilege::findPrivilege(nsPermissionState_Blank,
nsDurationState_Session);
}
nsTarget *tempTarget = nsTarget::findTarget(target);
if (tempTarget != target) {
// Target is not registered, so ignore it
return NULL;
return nsPrivilege::findPrivilege(nsPermissionState_Blank,
nsDurationState_Session);
}
return privTable->get(target);