|
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 s
Length: 6239 (0x185f) Types: TextFile Names: »search.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape └─⟦eba4602b1⟧ »./isode-5.0.tar.Z« └─⟦d3ac74d73⟧ └─⟦this⟧ »isode-5.0/quipu/dish/search.c«
#include "quipu/util.h" #include "quipu/ds_search.h" #include "quipu/list.h" #include "quipu/entry.h" #include "quipu/sequence.h" extern DN dn, current_dn; extern PS opt; extern PS rps; extern Entry current_entry; DN rel_dn = NULLDN; extern LLog *log_dua; Filter get_filter (); char *TidyString (); char allow_move = TRUE; call_search (argc, argv) int argc; char **argv; { struct ds_search_arg search_arg; struct DSError error; struct ds_search_result result; DN save_dn; extern int sizelimit; extern char flag_show; int x; Entry save_entry; char rel_flag = TRUE; char *save_arg = NULLCP; extern char doneget; extern char value_flag; extern char all_flag; extern char show_all_flag; extern char key_flag; static char *nvec[2] = {"search"}; extern Attr_Sequence as_flag; int seqno; value_flag = TRUE; all_flag = FALSE; if (as_flag != NULLATTR) { as_free (as_flag); as_flag = NULLATTR; } flag_show = TRUE; key_flag = TRUE; search_arg.sra_filter = NULLFILTER; search_arg.sra_subset = SRA_ONELEVEL; search_arg.sra_common.ca_servicecontrol.svc_sizelimit = sizelimit; if ((argc = service_control (opt, argc, argv, &search_arg.sra_common)) == -1) return; allow_move = FALSE; if ( (argc = set_read_flags (argc,argv)) == -1) { allow_move = TRUE; return; } allow_move = TRUE; for (x = 1; x < argc; x++) { if (test_arg (argv[x], "-baseobject",1)) { DLOG (log_dua, LLOG_TRACE, ("We have a -baseobject flag\n")); search_arg.sra_subset = SRA_BASEOBJECT; } else if (test_arg (argv[x], "-singlelevel",2)) { DLOG (log_dua, LLOG_TRACE, ("We have a -singlelevel flag\n")); search_arg.sra_subset = SRA_ONELEVEL; } else if (test_arg (argv[x], "-subtree",2)) { DLOG (log_dua, LLOG_TRACE, ("We have a -subtree flag\n")); search_arg.sra_subset = SRA_WHOLESUBTREE; } else if (test_arg (argv[x], "-relative",3)) rel_flag = TRUE; else if (test_arg (argv[x], "-norelative",5)) rel_flag = FALSE; else if (test_arg (argv[x], "-filter",1)) { if ((search_arg.sra_filter = get_filter (argv[++x])) == NULLFILTER) { ps_printf (opt,"Invalid filter %s\n",argv[x]); Usage (argv[0]); return; } shuffle_up (argc--,argv,x--); } else if (test_arg (argv[x], "-object",1)) { if (move (argv[++x]) != OK) { ps_printf (opt,"Invalid move object %s\n",argv[x]); Usage (argv[0]); return; } shuffle_up (argc--,argv,x--); } else if (*argv[x] != '-') { if (save_arg != NULLCP) { ps_printf (opt,"Need flags to parse argument '%s'!\n",argv[x]); Usage (argv[0]); return; } else save_arg = argv[x]; } else continue; /* a read type flag !!! */ shuffle_up (argc--,argv,x--); } if (save_arg != NULLCP) { /* There is an unflagged argument */ if (search_arg.sra_filter == NULLFILTER) { if ((search_arg.sra_filter = get_filter (save_arg)) == NULLFILTER) { ps_printf (opt,"Invalid filter %s\n",save_arg); Usage (argv[0]); return; } } else if (move (save_arg) != OK) { ps_printf (opt,"Invalid move object %s\n",save_arg); Usage (argv[0]); return; } } if (search_arg.sra_filter == NULLFILTER) { /* set default */ search_arg.sra_filter = filter_alloc (); search_arg.sra_filter->flt_next = NULLFILTER; search_arg.sra_filter->flt_type = FILTER_AND; search_arg.sra_filter->FUFILT = NULLFILTER; } if (argc != 1) { Usage (argv[0]); return; } search_arg.sra_eis.eis_infotypes = value_flag; search_arg.sra_eis.eis_allattributes = all_flag; search_arg.sra_eis.eis_select = as_flag; search_arg.sra_baseobject = dn; DLOG (log_dua, LLOG_TRACE, ("Dish:- We are about to call the ds_search\n")); if (rebind () != OK) return; show_all_flag = FALSE; if (ds_search (&search_arg, &error, &result) != DS_OK) { DLOG (log_dua, LLOG_TRACE, ("Dealing with The error in searching.\n")); ds_error (opt, &error); /* deal with error */ } else { correlate_search_results (&result); if (result.CSR_entries == NULLENTRYINFO) ps_printf (opt, "Search failed to find anything.\n"); else { EntryInfo *ptr; save_dn = dn_cpy(current_dn); save_entry = current_entry; doneget = TRUE; if (rel_flag) rel_dn = dn_cpy(dn); for (ptr = result.CSR_entries; ptr != NULLENTRYINFO; ptr = ptr->ent_next) { as_decode (ptr->ent_attr); /* decode it immediately * so we only have to do * it once. */ dn_decode (ptr->ent_dn); cache_entry (ptr, all_flag, value_flag); seqno = add_sequence (ptr->ent_dn); if (seqno != 0) ps_printf (rps,"%-3d ",seqno); nvec[1] = "-compact"; if (flag_show) { call_showname (2, nvec); if (! all_flag) { Attr_Sequence eptr; for (eptr = search_arg.sra_eis.eis_select; eptr != NULLATTR; eptr = eptr->attr_link) showattribute (eptr->attr_type); } else { nvec [1] = "-noname"; call_showentry (2, nvec); } } else ps_print (rps,"\n"); } if (rel_dn != NULLDN) { dn_free (rel_dn); rel_dn = NULLDN; } dn_free (current_dn); current_dn = save_dn; current_entry = save_entry; entryinfo_free (result.CSR_entries,0); } handle_problems (rps,result.CSR_cr,result.CSR_limitproblem); } filter_free (search_arg.sra_filter); } handle_problems (aps,cr,limit) PS aps; ContinuationRef cr; int limit; { if (limit != LSR_NOLIMITPROBLEM) switch (limit) { case LSR_TIMELIMITEXCEEDED: ps_print (aps, "(Time limit exceeded)\n"); break; default: /* admin and user size limit */ ps_print (aps, "(Size limit exceeded)\n"); break; } /* always give references for now * else */ if (cr != NULLCONTINUATIONREF) { ContinuationRef crptr; ps_print (aps, "NOTE partial results only:- could not contact following DSA(s):-\n"); for (crptr=cr; crptr != NULLCONTINUATIONREF; crptr=crptr->cr_next) { dn_decode (crptr->cr_accesspoints.ap_name); ps_print (aps," "); dn_print (aps,crptr->cr_accesspoints.ap_name,EDBOUT); dn_decode (crptr->cr_name); ps_print (aps," (holding "); dn_print (aps,crptr->cr_name,EDBOUT); ps_print (aps,")\n"); } } }