dsapbind2.c

来自「ftam等标准协议服务器和客户端的源代码。」· C语言 代码 · 共 288 行

C
288
字号
/* dsapbind2.c - DSAP: DirectoryBind mapping onto ABSTRACT-BIND */#ifndef	lintstatic char *rcsid = "$Header: /xtel/isode/isode/dsap/net/RCS/dsapbind2.c,v 9.0 1992/06/16 12:14:05 isode Rel $";#endif/*  * $Header: /xtel/isode/isode/dsap/net/RCS/dsapbind2.c,v 9.0 1992/06/16 12:14:05 isode Rel $ * * * $Log: dsapbind2.c,v $ * Revision 9.0  1992/06/16  12:14:05  isode * Release 8.0 * *//* *                                NOTICE * *    Acquisition, use, and distribution of this module and related *    materials are subject to the restrictions of a license agreement. *    Consult the Preface in the User's Manual for the full terms of *    this agreement. * *//* LINTLIBRARY */#include "logger.h"#include "quipu/dsap.h"#include "../x500as/DAS-types.h"extern LLog	* log_dsap;/*    D-BIND.INDICATION *//* ARGSUSED */int	  DBindInit (vecp, vec, ds, di)int			  vecp;char			**vec;struct DSAPstart	* ds;struct DSAPindication	* di;{	int			  result;	struct RoNOTindication	  rni_s;	struct RoNOTindication	* rni = &(rni_s);	struct AcSAPstart	* acs = &(ds->ds_start);	struct ds_bind_arg	* bind_arg;	watch_dog ("RoBindInit");	if (result = RoBindInit (vecp, vec, acs, rni) != OK)	{		watch_dog_reset ();		return (ronot2dsaplose (di, "D-BIND.INDICATION", rni));	}	watch_dog_reset ();	/* ADT: Generalised context checking support would be useful */	/* Check application context and set flag in ds->ds_ctx */	ds->ds_sd = acs->acs_sd;	switch (ds->ds_ctx = select_context (acs->acs_context))	{	case DS_CTX_X500_DAP:		if ((ds->ds_pctx_id = check_dap_ctxlist (&(acs->acs_start.ps_ctxlist))) == NOTOK)		{			LLOG(log_dsap,LLOG_EXCEPTIONS, ("Unacceptable Abstract Syntaxes for X.500 DAP"));			watch_dog ("RoBindReject (DAP)");			(void) RoBindReject (acs, ACS_TRANSIENT, ACS_USER_NOREASON, rni);			watch_dog_reset ();			return (dsaplose (di, DA_PCDL, NULLCP, "DAP BIND INDICATION"));		}		break;	case DS_CTX_X500_DSP:		if ((ds->ds_pctx_id = check_dsp_ctxlist (&(acs->acs_start.ps_ctxlist))) == NOTOK)		{			LLOG(log_dsap,LLOG_EXCEPTIONS, ("Unacceptable Abstract Syntaxes for X.500 DSP"));			watch_dog ("RoBindReject (DSP)");			(void) RoBindReject (acs, ACS_TRANSIENT, ACS_USER_NOREASON, rni);			watch_dog_reset ();			return (dsaplose (di, DA_PCDL, NULLCP, "DSP BIND INDICATION"));		}		break;	case DS_CTX_QUIPU_DSP:		if ((ds->ds_pctx_id = check_qsp_ctxlist (&(acs->acs_start.ps_ctxlist))) == NOTOK)		{			LLOG(log_dsap,LLOG_EXCEPTIONS, ("Unacceptable Abstract Syntaxes for QUIPU DSP"));			watch_dog ("RoBindReject (QSP)");			(void) RoBindReject (acs, ACS_TRANSIENT, ACS_USER_NOREASON, rni);			watch_dog_reset ();			return (dsaplose (di, DA_PCDL, NULLCP, "QSP BIND INDICATION"));		}		break;	case DS_CTX_INTERNET_DSP:		if ((ds->ds_pctx_id = check_isp_ctxlist (&(acs->acs_start.ps_ctxlist))) == NOTOK)		{			LLOG(log_dsap,LLOG_EXCEPTIONS, ("Unacceptable Abstract Syntaxes for Internet DSP"));			watch_dog ("RoBindReject (ISP)");			(void) RoBindReject (acs, ACS_TRANSIENT, ACS_USER_NOREASON, rni);			watch_dog_reset ();			return (dsaplose (di, DA_PCDL, NULLCP, "ISP BIND INDICATION"));		}		break;	case NOTOK:	default:		watch_dog ("RoBindReject (default)");		(void) RoBindReject(acs, ACS_TRANSIENT, ACS_CONTEXT, rni);		watch_dog_reset ();		return (dsaplose (di, DA_APP_CONTEXT, NULLCP, "BIND INDICATION"));	}	/*	* Most applications would dispatch on the context established,	* but since all directory protocols have the same Bind Argument	* we just fall through...	*/	/* Decode bind argument */	if ((acs->acs_ninfo != 1) || (acs->acs_info[0] == NULLPE))	{		watch_dog ("RoBindReject (ninfo)");		(void) RoBindReject (acs, ACS_TRANSIENT, ACS_USER_NOREASON, rni);		watch_dog_reset ();		return (dsaplose (di, DA_ARG_DEC, NULLCP, "BIND INDICATION"));	}	if (decode_DAS_DirectoryBindArgument (acs->acs_info[0],	    1, NULLCP, NULLIP, &bind_arg) != OK)	{		watch_dog ("RoBindReject (decode)");		(void) RoBindReject (acs, ACS_TRANSIENT, ACS_USER_NOREASON, rni);		watch_dog_reset ();		return (dsaplose (di, DA_ARG_DEC, NULLCP, "BIND INDICATION"));	}	ds->ds_bind_arg = *bind_arg; /* struct copy */	free ( (char *) bind_arg);	DLOG(log_dsap,LLOG_DEBUG, ("Bind Argument decoded"));	return (result);}/* ARGSUSED *//*    D-BIND.RESULT */int	  DBindResult (sd, context, respondtitle,		respondaddr, ctxlist, defctxresult, prequirements,		srequirements, isn, settings, ref, bind_res, pctx_id, di)int			  sd;OID			  context;AEI			  respondtitle;struct PSAPaddr		* respondaddr;struct PSAPctxlist	* ctxlist;int			  defctxresult;int			  prequirements;int			  srequirements;long			  isn;int			  settings;struct SSAPref		* ref;struct ds_bind_arg	* bind_res;int			  pctx_id;struct DSAPindication	* di;{	int			  result;	PE			  bindrespe;	struct RoNOTindication	  rni_s;	struct RoNOTindication	* rni = &(rni_s);	if (encode_DAS_DirectoryBindResult (&(bindrespe), 1, NULLIP, NULLCP,	    bind_res) != OK)	{		/* RoBindReject ?? */		return (dsaplose (di, DA_RES_ENC, NULLCP, "BIND RESULT"));	}	bindrespe->pe_context = pctx_id;        watch_dog ("RoBindResult");	result = RoBindResult (sd, context, respondtitle,		    respondaddr, ctxlist, defctxresult, prequirements,		    srequirements, isn, settings, ref, bindrespe, rni);        watch_dog_reset();	if (bindrespe != NULLPE)	{		pe_free (bindrespe);	}	if (result == NOTOK)	{		/* Have an RoNOTindication, need to return DSAPindication */		return (ronot2dsaplose (di, "RO-BIND.RESULT", rni));	}	return (result);}/* ARGSUSED *//*    D-BIND.ERROR */int	  DBindError (sd, context, respondtitle, respondaddr, ctxlist,		defctxresult, prequirements, srequirements, isn, settings,		ref, bind_err, pctx_id, di)int			  sd;OID			  context;AEI			  respondtitle;struct PSAPaddr		* respondaddr;struct PSAPctxlist	* ctxlist;int			  defctxresult;int			  prequirements;int			  srequirements;long			  isn;int			  settings;struct SSAPref		* ref;struct ds_bind_error	* bind_err;int			  pctx_id;struct DSAPindication	* di;{	int			  result;	PE			  binderrpe;	struct RoNOTindication	  rni_s;	struct RoNOTindication	* rni = &(rni_s);	if (encode_DAS_DirectoryBindError (&(binderrpe), 1, NULLIP, NULLCP,	    bind_err) != OK)	{		/* RoBindReject ?? */		return (dsaplose (di, DA_ERR_ENC, NULLCP, "BIND ERROR"));	}	binderrpe->pe_context = pctx_id;	watch_dog ("RoBindError");	result = RoBindError (sd, context,		    respondtitle, respondaddr, ctxlist, defctxresult,		    prequirements, srequirements, isn, settings, ref,		    binderrpe, rni);	watch_dog_reset();	if (binderrpe != NULLPE)	{		pe_free (binderrpe);	}	if (result == NOTOK)	{		return (ronot2dsaplose (di, "RO-BIND.ERROR", rni));	}	return (result);}/* ARGSUSED *//*    D-BIND.REJECT */int	  DBindReject (ds, status, reason, di)struct DSAPstart	* ds;int			  status;int			  reason;struct DSAPindication	* di;{	int			  result;	struct AcSAPstart	* acs = &(ds->ds_start);	struct RoNOTindication	  rni_s;	struct RoNOTindication	* rni = &(rni_s);        watch_dog ("RoBindReject");	result = RoBindReject (acs, status, reason, rni);        watch_dog_reset();	if (result == NOTOK)	{		return (ronot2dsaplose (di, "RO-BIND.ERROR", rni));	}	return (result);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?