|
|
1.1 ! root 1: /* list.c - */ ! 2: ! 3: #ifndef lint ! 4: static char *rcsid = "$Header: /f/osi/quipu/dish/RCS/list.c,v 7.0 89/11/23 22:20:11 mrose Rel $"; ! 5: #endif ! 6: ! 7: /* ! 8: * $Header: /f/osi/quipu/dish/RCS/list.c,v 7.0 89/11/23 22:20:11 mrose Rel $ ! 9: * ! 10: * ! 11: * $Log: list.c,v $ ! 12: * Revision 7.0 89/11/23 22:20:11 mrose ! 13: * Release 6.0 ! 14: * ! 15: */ ! 16: ! 17: /* ! 18: * NOTICE ! 19: * ! 20: * Acquisition, use, and distribution of this module and related ! 21: * materials are subject to the restrictions of a license agreement. ! 22: * Consult the Preface in the User's Manual for the full terms of ! 23: * this agreement. ! 24: * ! 25: */ ! 26: ! 27: ! 28: #include "quipu/util.h" ! 29: #include "quipu/list.h" ! 30: #include "quipu/sequence.h" ! 31: ! 32: extern DN dn; ! 33: ! 34: #define OPT (!frompipe || rps -> ps_byteno == 0 ? opt : rps) ! 35: #define RPS (!frompipe || opt -> ps_byteno == 0 ? rps : opt) ! 36: extern char frompipe; ! 37: extern PS opt, rps; ! 38: ! 39: extern char move_flag; ! 40: ! 41: extern int sizelimit; ! 42: char list_show; ! 43: ! 44: call_list (argc, argv) ! 45: int argc; ! 46: char **argv; ! 47: { ! 48: struct ds_list_arg list_arg; ! 49: struct ds_list_result result; ! 50: struct list_cache *ptr; ! 51: struct DSError error; ! 52: int x; ! 53: char nocacheflag = FALSE; ! 54: extern int copy_flag; ! 55: ! 56: list_show = TRUE; ! 57: move_flag = FALSE; ! 58: ! 59: list_arg.lsa_common.ca_servicecontrol.svc_sizelimit = sizelimit; ! 60: ! 61: if ((argc = service_control (OPT, argc, argv, &list_arg.lsa_common)) == -1) ! 62: return; ! 63: ! 64: for (x = 1; x < argc; x++) { ! 65: ! 66: if (test_arg (argv[x], "-nocache",4)) ! 67: nocacheflag = TRUE; ! 68: else if (test_arg (argv[x], "-noshow",4)) ! 69: list_show = FALSE; ! 70: else if (test_arg (argv[x], "-move",2)) ! 71: move_flag = TRUE; ! 72: else if (test_arg (argv[x], "-nomove",3)) ! 73: move_flag = FALSE; ! 74: else if (move (argv[x]) == OK) ! 75: continue; ! 76: else { ! 77: ps_printf (OPT,"Unknown option %s\n",argv[x]); ! 78: Usage (argv[0]); ! 79: return; ! 80: } ! 81: ! 82: } ! 83: ! 84: list_arg.lsa_object = dn; ! 85: ! 86: if ((!nocacheflag) && copy_flag) ! 87: if ((ptr = find_list_cache (dn,list_arg.lsa_common.ca_servicecontrol.svc_sizelimit)) != NULLCACHE) { ! 88: print_list_subordinates (ptr->list_subs, ptr->list_problem); ! 89: consolidate_move(); ! 90: return; ! 91: } ! 92: ! 93: if (rebind () != OK) ! 94: return; ! 95: ! 96: /* Strong authentication */ ! 97: if (list_arg.lsa_common.ca_security != (struct security_parms *) 0) ! 98: { ! 99: int encode_DAS_ListArgumentData(); ! 100: struct signature *sign_operation(); ! 101: ! 102: list_arg.lsa_common.ca_sig = ! 103: sign_operation((caddr_t)&list_arg, encode_DAS_ListArgumentData); ! 104: } ! 105: ! 106: while (ds_list (&list_arg, &error, &result) != DS_OK) { /* deal with error */ ! 107: if (dish_error (OPT, &error) == 0) ! 108: return; ! 109: list_arg.lsa_object = error.ERR_REFERRAL.DSE_ref_candidates->cr_name; ! 110: } ! 111: ! 112: if (result.lsr_common.cr_aliasdereferenced) { ! 113: ps_print (RPS, "(Alias dereferenced - "); ! 114: dn_print (RPS, result.lsr_object, EDBOUT); ! 115: dn_free (result.lsr_object); ! 116: ps_print (RPS, ")\n"); ! 117: } ! 118: print_list_subordinates (result.lsr_subordinates, result.lsr_limitproblem); ! 119: ! 120: cache_list (result.lsr_subordinates, result.lsr_limitproblem,dn, ! 121: list_arg.lsa_common.ca_servicecontrol.svc_sizelimit); ! 122: ! 123: subords_free (result.lsr_subordinates); ! 124: ! 125: consolidate_move(); ! 126: } ! 127: ! 128: print_list_subordinates (ptr, prob) ! 129: struct subordinate *ptr; ! 130: int prob; ! 131: { ! 132: DN adn; ! 133: DN newdn; ! 134: int seqno; ! 135: extern char * result_sequence; ! 136: ! 137: adn = dn_cpy (dn); ! 138: newdn = dn_comp_new (rdn_comp_new(NULLAttrT,NULLAttrV)); ! 139: if (adn != NULLDN) ! 140: dn_append (adn,newdn); ! 141: else { ! 142: dn_free(adn); ! 143: adn = newdn; ! 144: } ! 145: ! 146: if (result_sequence) ! 147: set_sequence (result_sequence); ! 148: ! 149: if (ptr == NULLSUBORD) ! 150: if (list_show) ! 151: ps_print (RPS,"No children\n"); ! 152: ! 153: for (; ptr != NULLSUBORD; ptr = ptr->sub_next) { ! 154: rdn_free (newdn->dn_rdn); ! 155: dn_comp_fill (newdn,rdn_cpy(ptr->sub_rdn)); ! 156: seqno = add_sequence (adn); ! 157: if (seqno != 0) ! 158: ps_printf (RPS,"%-3d ",seqno); ! 159: if (list_show) ! 160: rdn_print (RPS, ptr->sub_rdn, READOUT); ! 161: ps_print (RPS, "\n"); ! 162: } ! 163: ! 164: dn_free (adn); ! 165: ! 166: if (prob != LSR_NOLIMITPROBLEM) ! 167: if (list_show) ! 168: ps_print (RPS, "(Limit problem)\n"); ! 169: ! 170: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.