Annotation of 43BSDReno/contrib/isode-beta/quipu/ds_init.c, revision 1.1

1.1     ! root        1: /* ds_init.c - initialise the DSA */
        !             2: 
        !             3: #ifndef lint
        !             4: static char *rcsid = "$Header: /f/osi/quipu/RCS/ds_init.c,v 7.2 90/07/09 14:45:42 mrose Exp $";
        !             5: #endif
        !             6: 
        !             7: /*
        !             8:  * $Header: /f/osi/quipu/RCS/ds_init.c,v 7.2 90/07/09 14:45:42 mrose Exp $
        !             9:  *
        !            10:  *
        !            11:  * $Log:       ds_init.c,v $
        !            12:  * Revision 7.2  90/07/09  14:45:42  mrose
        !            13:  * sync
        !            14:  * 
        !            15:  * Revision 7.1  90/03/15  11:18:49  mrose
        !            16:  * quipu-sync
        !            17:  * 
        !            18:  * Revision 7.0  89/11/23  22:17:08  mrose
        !            19:  * Release 6.0
        !            20:  * 
        !            21:  */
        !            22: 
        !            23: /*
        !            24:  *                                NOTICE
        !            25:  *
        !            26:  *    Acquisition, use, and distribution of this module and related
        !            27:  *    materials are subject to the restrictions of a license agreement.
        !            28:  *    Consult the Preface in the User's Manual for the full terms of
        !            29:  *    this agreement.
        !            30:  *
        !            31:  */
        !            32: 
        !            33: 
        !            34: #include "quipu/config.h"
        !            35: #include "quipu/util.h"
        !            36: #include "quipu/read.h"
        !            37: #include "quipu/dua.h"
        !            38: #include "quipu/connection.h"
        !            39: #include "quipu/entry.h"
        !            40: 
        !            41: AV_Sequence super_user;
        !            42: Entry subtree_load ();
        !            43: Entry make_path ();
        !            44: extern LLog * log_dsap;
        !            45: extern DN mydsadn;
        !            46: extern Entry database_root;
        !            47: static Entry load_dsa_cache_entry(), load_dsa_remote_entry();
        !            48: 
        !            49: dsa_init ()
        !            50: {
        !            51: Attr_Sequence as;
        !            52: AttributeType manager;
        !            53: extern char * mydsaname;
        !            54: DN str2dn();
        !            55: extern char * treedir;
        !            56: extern char * get_entry_passwd();
        !            57: struct edb_info * dsainfo;
        !            58: AV_Sequence avs;
        !            59: Entry newentry;
        !            60: extern char * new_version();
        !            61: extern char * quipuversion, * TidyString();
        !            62: extern int parse_status;
        !            63: Entry my_entry, rem_entry;
        !            64: extern IFP unrav_fn;
        !            65: extern IFP schema_fn;
        !            66: int real_unravel_attribute ();
        !            67: int real_check_schema ();
        !            68: char loadstate = TRUE;
        !            69: 
        !            70:        check_dsa_known_oids ();
        !            71: 
        !            72:        unrav_fn = (IFP) real_unravel_attribute;
        !            73:        schema_fn = (IFP) real_check_schema;
        !            74: 
        !            75:        if (( manager = AttrT_new (MANAGER_OID)) == NULLAttrT)
        !            76:                fatal (-1,"Manager - unknown attribute - check oid tables");
        !            77: 
        !            78:        LLOG (log_dsap,LLOG_NOTICE,("dsa name %s",mydsaname));
        !            79: 
        !            80:        if ((mydsadn = str2dn (mydsaname)) == NULLDN) {
        !            81:                fatal (-2,"Invalid dsa name");
        !            82:        }
        !            83: 
        !            84:        if ((my_entry = load_dsa_cache_entry (mydsadn)) == NULLENTRY) {
        !            85:                if (parse_status != 0)
        !            86:                        fatal (-3,"can't load my entry");
        !            87: 
        !            88:                LLOG (log_dsap,LLOG_NOTICE,("Can't find my own entry - trying another DSA"));
        !            89:                if ((my_entry = load_dsa_remote_entry (mydsadn)) == NULLENTRY)
        !            90:                        fatal (-4,"can't get my own entry!");
        !            91:                else {
        !            92: #ifdef TURBO_DISK
        !            93:                        if (turbo_writeall(my_entry) != OK)
        !            94:                                fatal (-4,"Can't write my entry");
        !            95: #else
        !            96:                        if (journal (my_entry) != OK)
        !            97:                                fatal (-4,"Can't write my entry");
        !            98: #endif
        !            99:                }
        !           100:        } else if (my_entry->e_data == E_TYPE_CACHE_FROM_MASTER)
        !           101:                if ((rem_entry = load_dsa_remote_entry (mydsadn)) != NULLENTRY) {
        !           102:                        if (rem_entry->e_parent != NULLENTRY)
        !           103:                                rem_entry->e_parent->e_edbversion = new_version();
        !           104: #ifdef TURBO_DISK
        !           105:                        if (turbo_writeall(rem_entry) != OK)
        !           106:                                fatal (-4,"Can't re-write my entry");
        !           107: #else
        !           108:                        if (journal (rem_entry) != OK)
        !           109:                                fatal (-4,"Can't re-write my entry");
        !           110: #endif
        !           111:                        my_entry = rem_entry;
        !           112:                }
        !           113: 
        !           114:        if (get_entry_passwd (my_entry->e_attributes) == NULLCP) 
        !           115:                /* This is not a fatal error, but some remote operations may fail */
        !           116:                LLOG(log_dsap,LLOG_EXCEPTIONS,("Can't find my own PASSWORD"));
        !           117: 
        !           118:        if (my_entry->e_dsainfo != NULLDSA) {
        !           119:                /* get manager attribute */
        !           120:                if ((as = as_find_type(my_entry->e_attributes,manager)) == NULLATTR )
        !           121:                        fatal (-5,"Manager attribute missing in my own entry");
        !           122:                AttrT_free (manager);
        !           123:                super_user = avs_cpy ((AV_Sequence)as->attr_value);
        !           124:                if (strcmp(my_entry->e_dsainfo->dsa_version,TidyString (strdup (quipuversion))) != 0)
        !           125:                        LLOG(log_dsap,LLOG_EXCEPTIONS,("WARNING: version number wrong (expecting '%s', got '%s') !!",quipuversion,my_entry->e_dsainfo->dsa_version));
        !           126:                if (quipu_ctx_supported(my_entry) != 2)
        !           127:                        LLOG(log_dsap,LLOG_EXCEPTIONS,("WARNING: I don't appear to support the QUIPU Context !!!"));
        !           128:        } else 
        !           129:                fatal (-6,"No edbinfo attribute in my own entry");
        !           130: 
        !           131:        if (parse_status != 0)
        !           132:                loadstate = FALSE;
        !           133: 
        !           134:        for (avs = my_entry->e_dsainfo->dsa_attr ; avs != NULLAV; avs=avs->avseq_next) {
        !           135:                if (avs->avseq_av.av_struct == NULL)
        !           136:                        continue;
        !           137:                dsainfo = (struct edb_info *) avs->avseq_av.av_struct;
        !           138:                newentry = make_path (dsainfo->edb_name);
        !           139:                (void) subtree_load (newentry,dsainfo->edb_name);
        !           140:                if (parse_status != 0)
        !           141:                        loadstate = FALSE;
        !           142:        }
        !           143: 
        !           144:        if (loadstate == FALSE)
        !           145:                fatal (-7,"DSA Halted");        
        !           146: 
        !           147:        if (database_root->e_child != NULLENTRY)
        !           148:                database_root->e_data = database_root->e_child->e_data;
        !           149: 
        !           150:        return (OK);
        !           151: 
        !           152: }
        !           153: 
        !           154: static Entry load_dsa_cache_entry(dn)
        !           155: DN dn;
        !           156: {
        !           157: DN ptr,trail = NULLDN;
        !           158: Entry newentry;
        !           159: 
        !           160:        for (ptr=dn; ptr->dn_parent != NULLDN; ptr=ptr->dn_parent)
        !           161:                trail = ptr;
        !           162: 
        !           163:        if (trail == NULLDN) {
        !           164:                database_root = subtree_load (NULLENTRY,NULLDN);
        !           165:                return (local_find_entry (dn,TRUE)); 
        !           166:        }
        !           167: 
        !           168:        trail->dn_parent = NULLDN;
        !           169:        newentry = make_path (dn);
        !           170:        (void) subtree_load (newentry,dn);
        !           171:        trail->dn_parent = ptr;
        !           172:        
        !           173:        return (local_find_entry (dn,TRUE)); 
        !           174: }
        !           175: 
        !           176: static Entry load_dsa_remote_entry(dn)
        !           177: DN dn;
        !           178: {
        !           179: static struct ds_read_arg read_arg =
        !           180:        {
        !           181:                default_common_args,
        !           182:                NULLDN,
        !           183:                {       /* entry info selection */
        !           184:                        TRUE,
        !           185:                        NULLATTR,
        !           186:                        EIS_ATTRIBUTESANDVALUES
        !           187:                }
        !           188:        };
        !           189: struct ds_read_result result;
        !           190: struct DSError error;
        !           191: extern Entry current_entry;
        !           192: static struct ds_bind_arg bindarg;
        !           193: static struct ds_bind_arg bindresult;
        !           194: static struct ds_bind_error binderr;
        !           195: int ad, id;
        !           196: extern struct PSAPaddr *parent_psap();
        !           197: struct PSAPaddr * addr;
        !           198: 
        !           199: #ifndef NO_STATS
        !           200: extern LLog * log_stat;
        !           201: extern dn_print ();
        !           202: 
        !           203:        pslog (log_stat,LLOG_NOTICE,"SYNC DAP remote entry lookup",dn_print,(caddr_t)dn);
        !           204: #endif
        !           205: 
        !           206:        /* read from of remote DSA */
        !           207:        /* Do synchronus read for now */
        !           208:        /* Async read eventually */
        !           209: 
        !           210:        make_dsa_bind_arg (&bindarg);
        !           211: 
        !           212:        if ((addr = parent_psap ()) == NULLPA) {
        !           213:                LLOG (log_dsap,LLOG_EXCEPTIONS,("No parent or quipu-db defined - check quiputailor"));
        !           214:                return (NULLENTRY);
        !           215:        }
        !           216:        
        !           217:        if (dap_bind (&ad, &bindarg, &binderr, &bindresult,addr) != OK) {
        !           218:                LLOG (log_dsap,LLOG_EXCEPTIONS,("Can't bind to remote DSA thus can't read my own entry"));
        !           219:                bind_arg_free (&bindarg);
        !           220:                return (NULLENTRY);
        !           221:        }
        !           222: 
        !           223:        bind_arg_free (&bindarg);
        !           224:        bind_arg_free (&bindresult);
        !           225: 
        !           226:        read_arg.rda_object = dn;
        !           227: 
        !           228:        id = 1;
        !           229:        if (dap_read (ad, &id,&read_arg, &error, &result) != DS_OK) {
        !           230:                log_ds_error (&error);
        !           231:                LLOG (log_dsap,LLOG_EXCEPTIONS,("Remote DSA failed on lookup of my address"));
        !           232:                (void) dap_unbind (ad);
        !           233:                return (NULLENTRY);
        !           234:        }
        !           235: 
        !           236:        cache_entry (&(result.rdr_entry), TRUE, EIS_ATTRIBUTESANDVALUES);
        !           237: 
        !           238:        if (unravel_attribute (current_entry,&error) != OK) {
        !           239:                log_ds_error (&error);
        !           240:                LLOG (log_dsap, LLOG_EXCEPTIONS, ("Remote copy of my entry is wrong!"));
        !           241:                return (NULLENTRY);
        !           242:        }
        !           243: 
        !           244:        (void) dap_unbind (ad);
        !           245: 
        !           246:        return (current_entry);
        !           247: }
        !           248: 
        !           249: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.