|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T d
Length: 3918 (0xf4e)
Types: TextFile
Names: »ds_bind.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
└─⟦eba4602b1⟧ »./isode-5.0.tar.Z«
└─⟦d3ac74d73⟧
└─⟦this⟧ »isode-5.0/quipu/ds_bind.c«
/* ds_bind.c - */
#ifndef lint
static char *rcsid = "$Header: /f/osi/quipu/RCS/ds_bind.c,v 6.0 89/03/18 23:41:15 mrose Rel $";
#endif
/*
* $Header: /f/osi/quipu/RCS/ds_bind.c,v 6.0 89/03/18 23:41:15 mrose Rel $
*
*
* $Log: ds_bind.c,v $
* Revision 6.0 89/03/18 23:41:15 mrose
* Release 5.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.
*
*/
#include "quipu/util.h"
#include "quipu/entry.h"
#include "quipu/commonarg.h"
#include "quipu/bind.h"
#include "quipu/compare.h"
#include "quipu/dua.h"
#include "quipu/connection.h"
extern LLog * log_dsap;
extern DN mydsadn;
struct activity * task_alloc();
#ifndef NO_STATS
extern LLog * log_stat;
extern int dn_print ();
#endif
do_ds_bind (arg, error, result, tk, dsp)
struct ds_bind_arg *arg;
struct ds_bind_arg *result;
struct ds_bind_error *error;
struct activity **tk;
char dsp;
{
Attr_Sequence as;
Entry entryptr;
extern AttributeType at_password;
struct ds_compare_arg *cma;
static struct common_args ca_def = default_common_args;
DLOG (log_dsap,LLOG_TRACE,("ds_bind"));
#ifndef NO_STATS
dn_decode (arg->dba_dn);
pslog (log_stat,LLOG_NOTICE,"bind",dn_print,(caddr_t)arg->dba_dn);
#endif
if (arg->dba_version != DBA_VERSION_V1988) {
error->dbe_version = DBA_VERSION_V1988;
error->dbe_type = DBE_TYPE_SERVICE;
error->dbe_value = DSE_SV_UNAVAILABLE;
return (DS_ERROR_CONNECT);
}
if ((dsp == TRUE) || (arg->dba_dn == NULLDN)) {
make_dsa_bind_arg(result);
return (DS_OK);
}
(*tk) = task_alloc();
if ((entryptr = really_find_entry (arg->dba_dn,
&((*tk)->act_resp.resp_err),TRUE)) == NULLENTRY) {
if((*tk)->act_resp.resp_err.dse_type != DSE_REFERRAL)
{
act_free((*tk));
(*tk) = NULLACTIVITY;
error->dbe_version = DBA_VERSION_V1988;
error->dbe_type = DBE_TYPE_SECURITY;
error->dbe_value = DSE_SC_AUTHENTICATION;
return (DS_ERROR_CONNECT);
}
/*
Generate compare op in a task block for the connection
from the DUA , which will then be used as the basis
for a DSP compare.
*/
(*tk)->act_class = ACTIVITY_DSA_WORK;
(*tk)->act_type = ACT_TYPE_CHN;
(*tk)->act_req.dca_dsarg.arg_type = OP_COMPARE;
cma = &((*tk)->act_req.dca_dsarg.arg_cm);
cma->cma_common = ca_def;
cma->cma_common.ca_requestor = dn_cpy(arg->dba_dn);
cma->cma_object = dn_cpy(arg->dba_dn);
cma->cma_purported.ava_type = AttrT_cpy (at_password);
cma->cma_purported.ava_value = str2AttrV (arg->dba_passwd,AV_CASEEXACTSTRING);
return(DS_CONTINUE);
}
act_free((*tk));
(*tk) = NULLACTIVITY;
if ((as = as_find_type (entryptr->e_attributes,at_password)) == NULLATTR) {
if ( arg->dba_passwd_len == 0 ) {
make_dsa_bind_arg(result);
return (DS_OK);
}
/* no password -> can't verify !!! */
error->dbe_version = DBA_VERSION_V1988;
error->dbe_type = DBE_TYPE_SECURITY;
error->dbe_value = DSE_SC_AUTHENTICATION;
return (DS_ERROR_CONNECT);
}
if (arg->dba_passwd_len != 0 )
if (lexequ (as->attr_value->avseq_av->av_un.av_str, arg->dba_passwd) == 0) {
make_dsa_bind_arg(result);
return (DS_OK);
}
error->dbe_version = DBA_VERSION_V1988;
error->dbe_type = DBE_TYPE_SECURITY;
error->dbe_value = DSE_SC_AUTHENTICATION;
return (DS_ERROR_CONNECT);
}
do_ds_unbind (conn)
register struct connection * conn;
{
#ifndef NO_STATS
if(conn->cn_initiator == INITIATED_BY_THIS)
{
dn_decode (conn->cn_what);
pslog (log_stat,LLOG_NOTICE,"unbind (by this)",dn_print,(caddr_t)conn->cn_what);
}
else
{
dn_decode (conn->cn_who);
pslog (log_stat,LLOG_NOTICE,"unbind (by that)",dn_print,(caddr_t)conn->cn_who);
}
#endif
DLOG (log_dsap,LLOG_TRACE,("ds_un_bind"));
}