mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-02 15:15:23 +00:00
256 lines
10 KiB
C
256 lines
10 KiB
C
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* The contents of this file are subject to the Mozilla Public
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is the Netscape security libraries.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1994-2000 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* Alternatively, the contents of this file may be used under the
|
|
* terms of the GNU General Public License Version 2 or later (the
|
|
* "GPL"), in which case the provisions of the GPL are applicable
|
|
* instead of those above. If you wish to allow use of your
|
|
* version of this file only under the terms of the GPL and not to
|
|
* allow others to use your version of this file under the MPL,
|
|
* indicate your decision by deleting the provisions above and
|
|
* replace them with the notice and other provisions required by
|
|
* the GPL. If you do not delete the provisions above, a recipient
|
|
* may use your version of this file under either the MPL or the
|
|
* GPL.
|
|
*/
|
|
#ifndef __SSM_CTRLCONN_H__
|
|
#define __SSM_CTRLCONN_H__
|
|
|
|
#include "connect.h"
|
|
#include "cert.h"
|
|
#include "key.h"
|
|
#include "hashtbl.h"
|
|
#include "obscure.h"
|
|
#include "prefs.h"
|
|
|
|
/*
|
|
Control connections.
|
|
*/
|
|
extern SSMHashTable * ctrlConnections;
|
|
|
|
struct SSMControlConnection
|
|
{
|
|
SSMConnection super;
|
|
|
|
/*
|
|
---------------------------------------------
|
|
Control connection-specific fields
|
|
---------------------------------------------
|
|
*/
|
|
|
|
PRUint32 m_version; /* Protocol version supported by client */
|
|
char * m_nonce; /* Nonce used for verifying data connections */
|
|
|
|
PRFileDesc * m_socket; /* Socket serviced by this connection object */
|
|
PRThread * m_writeThread;/* Write Control thread (writes m_socket) */
|
|
PRThread * m_frontEndThread; /* Front end thread - reads m_socket */
|
|
PRThread * m_certRenewalThread; /* Front end thread - reads m_socket */
|
|
|
|
char * m_profileName; /* Name of user profile (where to find
|
|
certs etc) */
|
|
char * m_dirRoot; /* Path to directory for certs for control connection */
|
|
|
|
/* Queue for outgoing messages */
|
|
SSMCollection *m_controlOutQ; /* Control msg queue: from readMsg thread
|
|
to writeMsg thread */
|
|
|
|
CERTCertDBHandle *m_certdb;
|
|
SECKEYKeyDBHandle *m_keydb;
|
|
|
|
/* Fields used for out-of-band password requests */
|
|
SSMHashTable * m_passwdTable;
|
|
PRMonitor * m_passwdLock;
|
|
SSMHashTable * m_encrPasswdTable;
|
|
PRMonitor * m_encrPasswdLock;
|
|
PRInt32 m_waiting;
|
|
|
|
SSMHashTable *m_resourceDB;
|
|
SSMHashTable *m_classRegistry;
|
|
|
|
SSMHashTable * m_resourceIdDB;
|
|
SSMResourceID m_lastRID;
|
|
SSMHashTable * m_certIdDB;
|
|
SECItem * m_secAdvisorList;
|
|
PRInt32 m_certNext;
|
|
/* Data socket and port */
|
|
PRFileDesc * m_dataSocket;
|
|
PRIntn m_dataPort;
|
|
|
|
PRBool m_doesUI;
|
|
|
|
PrefSet* m_prefs;
|
|
PRBool m_pkcs11Init;
|
|
};
|
|
|
|
SSMStatus SSM_InitPolicyHandler(void);
|
|
|
|
SSMStatus SSMControlConnection_Create(void *arg, SSMControlConnection * conn,
|
|
SSMResource **res);
|
|
SSMStatus SSMControlConnection_Init(SSMControlConnection *res,
|
|
SSMResourceType type,
|
|
PRFileDesc *socket);
|
|
SSMStatus SSMControlConnection_Shutdown(SSMResource *conn, SSMStatus status);
|
|
SSMStatus SSMControlConnection_Destroy(SSMResource *res, PRBool doFree);
|
|
SSMStatus SSMControlConnection_GetAttrIDs(SSMResource* res, SSMAttributeID** ids,
|
|
PRIntn* count);
|
|
SSMStatus SSMControlConnection_GetAttr(SSMResource *res, SSMAttributeID attrID,
|
|
SSMResourceAttrType attrType,
|
|
SSMAttributeValue *value);
|
|
void SSMControlConnection_Invariant(SSMControlConnection *conn);
|
|
|
|
SSMStatus SSMControlConnection_ProcessMessage(SSMControlConnection* control,
|
|
SECItem* msg);
|
|
void SSM_WriteCtrlThread(void * arg);
|
|
void SSM_FrontEndThread(void * arg);
|
|
void SSM_CertificateRenewalThread(void * arg);
|
|
|
|
SSMStatus SSMControlConnection_Authenticate(SSMConnection *arg, char *nonce);
|
|
void SSMControlConnection_CertLookUp(SSMControlConnection * connection,
|
|
void * arg, SSMResource ** res);
|
|
|
|
SSMStatus SSMControlConnection_SendUIEvent(SSMControlConnection *conn,
|
|
char *command,
|
|
char *baseRef,
|
|
SSMResource *target, /* can pass NULL */
|
|
char *otherParams /* can pass NULL */,
|
|
CMTItem * clientContext /* can pass NULL */);
|
|
|
|
/*
|
|
* NOTES
|
|
* These functions save the pref change properly in memory and in client file.
|
|
* They check first whether the value has changed and perform saving
|
|
* operations.
|
|
* These functions do not belong to the prefs API because these specifically
|
|
* send the changes to the plugin. Once we have our own prefs library ready
|
|
* and complete the migration, these functions should be called only when
|
|
* application-specific prefs are saved back to client pref file.
|
|
* Since these functions pack one item only, if you have to send a lot of
|
|
* pref changes and performance is critical, it is not recommended to call
|
|
* these functions repeatedly.
|
|
*
|
|
*/
|
|
SSMStatus SSMControlConnection_SaveStringPref(SSMControlConnection* ctrl,
|
|
char* key, char* value);
|
|
SSMStatus SSMControlConnection_SaveBoolPref(SSMControlConnection* ctrl,
|
|
char* key, PRBool value);
|
|
SSMStatus SSMControlConnection_SaveIntPref(SSMControlConnection* ctrl,
|
|
char* key, PRIntn value);
|
|
|
|
void SSMControlConnection_CertLookUp(SSMControlConnection * connection,
|
|
void * arg, SSMResource ** res);
|
|
void SSM_LockPasswdTable(SSMConnection * conn);
|
|
SSMStatus SSM_UnlockPasswdTable(SSMConnection *conn);
|
|
SSMStatus SSM_WaitPasswdTable(SSMConnection * conn);
|
|
SSMStatus SSM_NotifyAllPasswdTable(SSMConnection * conn);
|
|
|
|
|
|
SSMStatus SSMControlConnection_AddResource(SSMResource * res, SSMResourceID rid);
|
|
|
|
SSMStatus SSMControlConnection_GetResource(SSMControlConnection * connection,
|
|
SSMResourceID rid,
|
|
SSMResource ** res);
|
|
SSMStatus SSMControlConnection_GetGlobalResourceID(SSMControlConnection
|
|
*connection,
|
|
SSMResource * res,
|
|
SSMResourceID * rid);
|
|
SSMResourceID SSMControlConnection_GenerateResourceID(SSMControlConnection *conn);
|
|
SSMStatus SSM_GetControlConnection(SSMResourceID rid,
|
|
SSMControlConnection **connection);
|
|
SSMStatus SSMControlConnection_FormSubmitHandler(SSMResource* res,
|
|
HTTPRequest* req);
|
|
void SSMControlConnection_RecycleItem(SECItem* msg);
|
|
SSMStatus SSMControlConnection_GenerateNonce(SSMControlConnection *conn);
|
|
|
|
/* from processmsg.c */
|
|
SSMStatus
|
|
SSMControlConnection_ProcessVerifyCertRequest(SSMControlConnection * ctrl,
|
|
SECItem * msg);
|
|
SSMStatus
|
|
SSMControlConnection_ProcessImportCertRequest(SSMControlConnection * ctrl,
|
|
SECItem * msg);
|
|
SSMStatus
|
|
SSMControlConnection_ProcessConserveRequest(SSMControlConnection * ctrl,
|
|
SECItem * msg);
|
|
SSMStatus
|
|
SSMControlConnection_ProcessPickleRequest(SSMControlConnection * ctrl,
|
|
SECItem * msg);
|
|
SSMStatus
|
|
SSMControlConnection_ProcessUnpickleRequest(SSMControlConnection * ctrl,
|
|
SECItem * msg);
|
|
|
|
SSMStatus
|
|
SSMControlConnection_ProcessCertRequest(SSMControlConnection * ctrl,
|
|
SECItem * msg);
|
|
|
|
PRStatus
|
|
SSMControlConnection_ProcessKeygenTag(SSMControlConnection * ctrl,
|
|
SECItem * msg);
|
|
|
|
SSMStatus
|
|
SSMControlConnection_ProcessPKCS11Request(SSMControlConnection * ctrl,
|
|
SECItem * msg);
|
|
|
|
SSMStatus
|
|
SSMControlConnection_ProcessCRMFRequest(SSMControlConnection * ctrl,
|
|
SECItem * msg);
|
|
|
|
SSMStatus
|
|
SSMControlConnection_ProcessMiscRequest(SSMControlConnection * ctrl,
|
|
SECItem * msg);
|
|
|
|
SSMStatus
|
|
SSMControlConnection_ProcessFormSigningRequest(SSMControlConnection * ctrl,
|
|
SECItem *msg);
|
|
SSMStatus
|
|
SSMControlConnection_ProcessTLSRequest(SSMControlConnection * ctrl,
|
|
SECItem *msg);
|
|
SSMStatus
|
|
SSMControlConnection_ProcessProxyStepUpRequest(SSMControlConnection* ctrl,
|
|
SECItem* msg);
|
|
SSMStatus
|
|
SSMControlConnection_ProcessSecCfgRequest(SSMControlConnection * ctrl,
|
|
SECItem *msg);
|
|
SSMStatus
|
|
SSMControlConnection_ProcessGenKeyOldStyleToken(SSMControlConnection * ctrl,
|
|
SECItem *msg);
|
|
SSMStatus
|
|
SSMControlConnection_ProcessGenKeyPassword(SSMControlConnection * ctrl,
|
|
SECItem *msg);
|
|
SSMStatus
|
|
SSM_CertCAImportCommandHandler2(HTTPRequest * req);
|
|
void
|
|
ssm_ShutdownNSS(SSMControlConnection *ctrl);
|
|
|
|
SSMStatus
|
|
SSM_UseAsDefaultEmailIfNoneSet(SSMControlConnection *ctrl,
|
|
CERTCertificate *cert, PRBool onFrontEndThread);
|
|
|
|
CERTCertList *
|
|
SSMControlConnection_CreateCertListByNickname(SSMControlConnection * ctrl,
|
|
char * nick, PRBool email);
|
|
|
|
SSMStatus
|
|
ssmcontrolconnection_encode_err_reply(SECItem *msg, SSMStatus rv);
|
|
SSMStatus
|
|
ssmcontrolconnection_send_message_to_client(SSMControlConnection *ctrl,
|
|
SECItem *msg);
|
|
#endif /* __SSM_CTRLCONN_H__ */
|